From 8b38ee69f9ef9b7703df4bf3e1acb8fa495da93c Mon Sep 17 00:00:00 2001 From: lqs <957698457@qq.com> Date: Sun, 20 Feb 2022 22:13:25 +0800 Subject: [PATCH] init --- .editorconfig | 10 + .env.development | 43 + .env.production | 39 + .gitignore | 16 + .npmrc | 1 + LICENSE | 22 + README.md | 125 +- components/README.md | 2 + main-antd/.browserslistrc | 3 + main-antd/.editorconfig | 10 + main-antd/.env.development | 11 + main-antd/.env.production | 11 + main-antd/.eslintignore | 1 + main-antd/.eslintrc.js | 42 + main-antd/.gitignore | 24 + main-antd/LICENSE | 21 + main-antd/README.md | 49 + main-antd/babel.config.js | 5 + main-antd/jest.config.js | 6 + main-antd/mock/global.js | 39 + main-antd/mock/home.js | 140 + main-antd/mock/user.js | 89 + main-antd/package.json | 83 + main-antd/public/favicon.ico | Bin 0 -> 4286 bytes main-antd/public/index.html | 17 + main-antd/src/App.vue | 26 + main-antd/src/assets/css/antd-variables.less | 18 + main-antd/src/assets/css/global.less | 37 + main-antd/src/assets/css/mixin.less | 28 + main-antd/src/assets/css/variables.less | 0 main-antd/src/assets/iconsvg/arrow-down.svg | 1 + main-antd/src/assets/iconsvg/arrow-left.svg | 1 + main-antd/src/assets/iconsvg/arrow-left2.svg | 1 + main-antd/src/assets/iconsvg/arrow-right.svg | 1 + main-antd/src/assets/iconsvg/arrow-right2.svg | 1 + main-antd/src/assets/iconsvg/arrow-up.svg | 1 + main-antd/src/assets/iconsvg/close.svg | 1 + main-antd/src/assets/iconsvg/close2.svg | 1 + main-antd/src/assets/iconsvg/home.svg | 1 + .../src/assets/iconsvg/language-outline.svg | 1 + main-antd/src/assets/iconsvg/menu-article.svg | 1 + main-antd/src/assets/iconsvg/menu-fold.svg | 1 + main-antd/src/assets/iconsvg/menu-links.svg | 1 + main-antd/src/assets/iconsvg/menu-unfold.svg | 1 + main-antd/src/assets/iconsvg/message.svg | 1 + main-antd/src/assets/iconsvg/more.svg | 1 + main-antd/src/assets/iconsvg/pwd.svg | 1 + main-antd/src/assets/iconsvg/refresh.svg | 1 + main-antd/src/assets/iconsvg/set.svg | 1 + main-antd/src/assets/iconsvg/svgo.yml | 22 + main-antd/src/assets/iconsvg/theme.svg | 1 + main-antd/src/assets/iconsvg/tick.svg | 1 + main-antd/src/assets/iconsvg/user.svg | 1 + main-antd/src/assets/images/bg.svg | 69 + main-antd/src/assets/images/logo.png | Bin 0 -> 3294 bytes main-antd/src/components/ALink/index.vue | 30 + .../src/components/BreadCrumbs/index.vue | 39 + main-antd/src/components/CKEditor/index.vue | 192 + main-antd/src/components/IconFont/index.ts | 3 + main-antd/src/components/IconFont/index.vue | 69 + main-antd/src/components/IconSvg/index.ts | 17 + main-antd/src/components/IconSvg/index.vue | 42 + main-antd/src/components/Permission/index.vue | 46 + .../src/components/ScreenTable/data.d.ts | 9 + .../src/components/ScreenTable/index.vue | 127 + main-antd/src/components/SelectLang/index.vue | 84 + main-antd/src/components/TuiEditor/index.vue | 119 + main-antd/src/components/TuiEditor/viewer.vue | 56 + main-antd/src/composables/useEcharts.ts | 35 + .../useI18nAntdFormVaildateInfos.ts | 24 + .../composables/useInjectMicroChildEntry.ts | 12 + main-antd/src/composables/useLoadMicroApp.ts | 53 + .../src/composables/useQiankunActions.ts | 14 + main-antd/src/composables/useTitle.ts | 25 + main-antd/src/config/i18n.ts | 45 + main-antd/src/config/routes.ts | 73 + main-antd/src/config/settings.ts | 90 + main-antd/src/config/store.ts | 12 + main-antd/src/directives/permission/index.ts | 31 + main-antd/src/layouts/BlankLayout.vue | 3 + .../layouts/QiankunLayout/components/Icon.vue | 28 + .../QiankunLayout/components/LeftSider.vue | 47 + .../QiankunLayout/components/RightFooter.vue | 18 + .../QiankunLayout/components/RightTabNav.vue | 279 + .../QiankunLayout/components/RightTop.vue | 107 + .../components/RightTopMessage.vue | 24 + .../QiankunLayout/components/RightTopUser.vue | 53 + .../QiankunLayout/components/Settings.vue | 228 + .../QiankunLayout/components/SiderMenu.vue | 71 + .../components/SiderMenuItem.vue | 49 + .../src/layouts/QiankunLayout/css/index.less | 386 + .../src/layouts/QiankunLayout/css/mixins.less | 14 + .../src/layouts/QiankunLayout/css/var.less | 25 + main-antd/src/layouts/QiankunLayout/index.vue | 63 + .../layouts/QiankunLayout/locales/en-US.ts | 23 + .../layouts/QiankunLayout/locales/zh-CN.ts | 23 + .../layouts/QiankunLayout/locales/zh-TW.ts | 23 + main-antd/src/layouts/QiankunLayout/routes.ts | 133 + main-antd/src/layouts/SecurityLayout.vue | 68 + main-antd/src/layouts/UserLayout/index.vue | 72 + .../src/layouts/UserLayout/locales/en-US.ts | 4 + .../src/layouts/UserLayout/locales/zh-CN.ts | 4 + .../src/layouts/UserLayout/locales/zh-TW.ts | 4 + main-antd/src/layouts/UserLayout/routes.ts | 16 + main-antd/src/locales/en-US.ts | 5 + main-antd/src/locales/zh-CN.ts | 5 + main-antd/src/locales/zh-TW.ts | 5 + main-antd/src/main.ts | 61 + main-antd/src/services/user.ts | 14 + main-antd/src/shims-vue.d.ts | 8 + main-antd/src/store/global.ts | 114 + main-antd/src/store/user.ts | 101 + main-antd/src/utils/array.ts | 29 + main-antd/src/utils/i18n.ts | 181 + main-antd/src/utils/localToken.ts | 37 + main-antd/src/utils/mock/require-context.js | 45 + main-antd/src/utils/mock/server.js | 98 + main-antd/src/utils/object.ts | 46 + main-antd/src/utils/request.ts | 161 + main-antd/src/utils/routes.ts | 388 + main-antd/src/utils/store.ts | 61 + main-antd/src/utils/validate.ts | 9 + main-antd/src/views/404/index.vue | 11 + main-antd/src/views/home/index.vue | 156 + main-antd/src/views/qiankun/index.vue | 7 + main-antd/src/views/qiankun/start.vue | 43 + main-antd/src/views/qiankun/startScreen.vue | 51 + main-antd/src/views/refresh/index.vue | 17 + main-antd/src/views/user/login/data.d.ts | 4 + main-antd/src/views/user/login/index.vue | 161 + .../src/views/user/login/locales/en-US.ts | 11 + .../src/views/user/login/locales/zh-CN.ts | 11 + .../src/views/user/login/locales/zh-TW.ts | 11 + main-antd/src/views/user/login/service.ts | 10 + main-antd/src/views/user/login/store.ts | 63 + main-antd/src/views/user/register/data.d.ts | 5 + main-antd/src/views/user/register/index.vue | 161 + .../src/views/user/register/locales/en-US.ts | 16 + .../src/views/user/register/locales/zh-CN.ts | 13 + .../src/views/user/register/locales/zh-TW.ts | 13 + main-antd/src/views/user/register/service.ts | 10 + main-antd/src/views/user/register/store.ts | 62 + main-antd/tests/unit/example.spec.ts | 12 + main-antd/tsconfig.json | 42 + main-antd/vue.config.js | 93 + main/.browserslistrc | 3 + main/.editorconfig | 10 + main/.env.development | 11 + main/.env.production | 11 + main/.eslintignore | 1 + main/.eslintrc.js | 42 + main/.gitignore | 24 + main/LICENSE | 21 + main/README.md | 50 + main/babel.config.js | 5 + main/jest.config.js | 6 + main/mock/global.js | 39 + main/mock/home.js | 140 + main/mock/user.js | 89 + main/package.json | 83 + main/public/favicon.ico | Bin 0 -> 4286 bytes main/public/index.html | 17 + main/src/App.vue | 28 + main/src/assets/css/element-variables.scss | 60 + main/src/assets/css/global.scss | 51 + main/src/assets/css/mixin.scss | 30 + main/src/assets/css/variables.scss | 1 + main/src/assets/iconsvg/arrow-down.svg | 1 + main/src/assets/iconsvg/arrow-left.svg | 1 + main/src/assets/iconsvg/arrow-left2.svg | 1 + main/src/assets/iconsvg/arrow-right.svg | 1 + main/src/assets/iconsvg/arrow-right2.svg | 1 + main/src/assets/iconsvg/arrow-up.svg | 1 + main/src/assets/iconsvg/close.svg | 1 + main/src/assets/iconsvg/close2.svg | 1 + main/src/assets/iconsvg/home.svg | 1 + main/src/assets/iconsvg/language-outline.svg | 1 + main/src/assets/iconsvg/menu-article.svg | 1 + main/src/assets/iconsvg/menu-fold.svg | 1 + main/src/assets/iconsvg/menu-links.svg | 1 + main/src/assets/iconsvg/menu-unfold.svg | 1 + main/src/assets/iconsvg/message.svg | 1 + main/src/assets/iconsvg/more.svg | 1 + main/src/assets/iconsvg/pwd.svg | 1 + main/src/assets/iconsvg/refresh.svg | 1 + main/src/assets/iconsvg/set.svg | 1 + main/src/assets/iconsvg/svgo.yml | 22 + main/src/assets/iconsvg/theme.svg | 1 + main/src/assets/iconsvg/tick.svg | 1 + main/src/assets/iconsvg/user.svg | 1 + main/src/assets/images/bg.svg | 69 + main/src/assets/images/logo.png | Bin 0 -> 3294 bytes main/src/components/ALink/index.vue | 30 + main/src/components/BreadCrumbs/index.vue | 39 + main/src/components/CKEditor/index.vue | 192 + main/src/components/IconFont/index.ts | 3 + main/src/components/IconFont/index.vue | 69 + main/src/components/IconSvg/index.ts | 17 + main/src/components/IconSvg/index.vue | 42 + main/src/components/Permission/index.vue | 50 + main/src/components/Result/index.vue | 108 + main/src/components/Result/svg/error.vue | 3 + main/src/components/Result/svg/info.vue | 3 + main/src/components/Result/svg/noFound.vue | 3 + .../src/components/Result/svg/serverError.vue | 3 + main/src/components/Result/svg/success.vue | 3 + .../components/Result/svg/unauthorized.vue | 3 + main/src/components/Result/svg/warning.vue | 3 + main/src/components/ScreenTable/data.d.ts | 7 + main/src/components/ScreenTable/index.vue | 144 + main/src/components/SelectLang/index.vue | 87 + main/src/components/Spin/index.vue | 42 + main/src/components/TuiEditor/index.vue | 119 + main/src/components/TuiEditor/viewer.vue | 56 + main/src/composables/useEcharts.ts | 35 + .../composables/useInjectMicroChildEntry.ts | 12 + main/src/composables/useLoadMicroApp.ts | 53 + main/src/composables/useQiankunActions.ts | 14 + main/src/composables/useTitle.ts | 25 + main/src/config/i18n.ts | 45 + main/src/config/routes.ts | 73 + main/src/config/settings.ts | 90 + main/src/config/store.ts | 12 + main/src/directives/permission/index.ts | 31 + main/src/layouts/BlankLayout.vue | 3 + .../layouts/QiankunLayout/components/Icon.vue | 28 + .../QiankunLayout/components/LeftSider.vue | 43 + .../QiankunLayout/components/RightFooter.vue | 18 + .../QiankunLayout/components/RightTabNav.vue | 281 + .../QiankunLayout/components/RightTop.vue | 103 + .../components/RightTopMessage.vue | 24 + .../QiankunLayout/components/RightTopUser.vue | 52 + .../QiankunLayout/components/Settings.vue | 228 + .../QiankunLayout/components/SiderMenu.vue | 50 + .../components/SiderMenuItem.vue | 47 + main/src/layouts/QiankunLayout/css/index.scss | 382 + .../src/layouts/QiankunLayout/css/mixins.scss | 99 + main/src/layouts/QiankunLayout/css/var.scss | 25 + main/src/layouts/QiankunLayout/index.vue | 64 + .../layouts/QiankunLayout/locales/en-US.ts | 23 + .../layouts/QiankunLayout/locales/zh-CN.ts | 23 + .../layouts/QiankunLayout/locales/zh-TW.ts | 23 + main/src/layouts/QiankunLayout/routes.ts | 133 + main/src/layouts/SecurityLayout.vue | 69 + main/src/layouts/UserLayout/index.vue | 72 + main/src/layouts/UserLayout/locales/en-US.ts | 4 + main/src/layouts/UserLayout/locales/zh-CN.ts | 4 + main/src/layouts/UserLayout/locales/zh-TW.ts | 4 + main/src/layouts/UserLayout/routes.ts | 16 + main/src/locales/en-US.ts | 5 + main/src/locales/zh-CN.ts | 5 + main/src/locales/zh-TW.ts | 5 + main/src/main.ts | 64 + main/src/services/user.ts | 14 + main/src/shims-vue.d.ts | 8 + main/src/store/global.ts | 112 + main/src/store/user.ts | 101 + main/src/utils/array.ts | 29 + main/src/utils/i18n.ts | 181 + main/src/utils/localToken.ts | 37 + main/src/utils/mock/require-context.js | 45 + main/src/utils/mock/server.js | 98 + main/src/utils/object.ts | 46 + main/src/utils/request.ts | 164 + main/src/utils/routes.ts | 388 + main/src/utils/store.ts | 61 + main/src/utils/validate.ts | 9 + main/src/views/404/index.vue | 21 + main/src/views/home/index.vue | 151 + main/src/views/qiankun/index.vue | 7 + main/src/views/qiankun/start.vue | 44 + main/src/views/qiankun/startScreen.vue | 52 + main/src/views/refresh/index.vue | 17 + main/src/views/user/login/data.d.ts | 4 + main/src/views/user/login/index.vue | 135 + main/src/views/user/login/locales/en-US.ts | 11 + main/src/views/user/login/locales/zh-CN.ts | 11 + main/src/views/user/login/locales/zh-TW.ts | 11 + main/src/views/user/login/service.ts | 10 + main/src/views/user/login/store.ts | 63 + main/src/views/user/register/data.d.ts | 5 + main/src/views/user/register/index.vue | 155 + main/src/views/user/register/locales/en-US.ts | 16 + main/src/views/user/register/locales/zh-CN.ts | 13 + main/src/views/user/register/locales/zh-TW.ts | 13 + main/src/views/user/register/service.ts | 10 + main/src/views/user/register/store.ts | 62 + main/tests/unit/example.spec.ts | 12 + main/tsconfig.json | 43 + main/vue.config.js | 87 + package.json | 69 + packages/article/.browserslistrc | 3 + packages/article/.editorconfig | 10 + packages/article/.env.development | 11 + packages/article/.env.production | 11 + packages/article/.eslintignore | 1 + packages/article/.eslintrc.js | 45 + packages/article/.gitignore | 24 + packages/article/LICENSE | 21 + packages/article/README.md | 37 + packages/article/babel.config.js | 5 + packages/article/jest.config.js | 6 + packages/article/mock/global.js | 39 + packages/article/mock/home.js | 44 + packages/article/mock/user.js | 89 + packages/article/package.json | 83 + packages/article/public/favicon.ico | Bin 0 -> 4286 bytes packages/article/public/index.html | 17 + packages/article/src/App.vue | 12 + .../src/assets/css/element-variables.scss | 60 + packages/article/src/assets/css/global.scss | 75 + packages/article/src/assets/css/mixin.scss | 30 + .../article/src/assets/css/variables.scss | 1 + packages/article/src/assets/iconsvg/home.svg | 1 + packages/article/src/assets/iconsvg/plus.svg | 1 + packages/article/src/assets/iconsvg/svgo.yml | 22 + packages/article/src/assets/images/bg.svg | 69 + packages/article/src/assets/images/logo.png | Bin 0 -> 3294 bytes .../article/src/components/ALink/index.vue | 55 + .../article/src/components/CKEditor/index.vue | 192 + .../Custom/ArticleCategoryCascader/index.vue | 136 + .../Custom/ArticleCategoryCascader/service.ts | 13 + .../Custom/ArticleListDrawer/data.d.ts | 5 + .../Custom/ArticleListDrawer/index.vue | 169 + .../Custom/ArticleListDrawer/locales/en-US.ts | 11 + .../Custom/ArticleListDrawer/locales/zh-CN.ts | 11 + .../Custom/ArticleListDrawer/locales/zh-TW.ts | 11 + .../Custom/ArticleListDrawer/service.ts | 12 + .../Custom/FormFooterToolbar/index.vue | 36 + .../components/Custom/PageHeader/index.vue | 56 + .../Custom/ServerImage/Dialog/data.d.ts | 25 + .../Custom/ServerImage/Dialog/index.vue | 315 + .../ServerImage/Dialog/locales/en-US.ts | 19 + .../ServerImage/Dialog/locales/zh-CN.ts | 19 + .../ServerImage/Dialog/locales/zh-TW.ts | 19 + .../Custom/ServerImage/Dialog/service.ts | 14 + .../ServerImage/SelectionList/data.d.ts | 4 + .../ServerImage/SelectionList/index.vue | 160 + .../SelectionList/locales/en-US.ts | 8 + .../SelectionList/locales/zh-CN.ts | 8 + .../SelectionList/locales/zh-TW.ts | 8 + .../src/components/Custom/TagSelect/data.d.ts | 4 + .../src/components/Custom/TagSelect/index.vue | 113 + .../components/Custom/TagSelect/service.ts | 13 + .../article/src/components/IconFont/index.ts | 3 + .../article/src/components/IconFont/index.vue | 69 + .../article/src/components/IconSvg/index.ts | 17 + .../article/src/components/IconSvg/index.vue | 42 + .../src/components/Permission/index.vue | 50 + .../src/components/RestElDrawer/index.vue | 79 + .../article/src/components/Result/index.vue | 108 + .../src/components/Result/svg/error.vue | 3 + .../src/components/Result/svg/info.vue | 3 + .../src/components/Result/svg/noFound.vue | 3 + .../src/components/Result/svg/serverError.vue | 3 + .../src/components/Result/svg/success.vue | 3 + .../components/Result/svg/unauthorized.vue | 3 + .../src/components/Result/svg/warning.vue | 3 + .../src/components/ScreenTable/data.d.ts | 9 + .../src/components/ScreenTable/index.vue | 146 + .../src/components/ScreenTreeTable/index.vue | 207 + .../article/src/components/Spin/index.vue | 42 + .../src/components/TreeTable/data.d.ts | 5 + .../src/components/TreeTable/index.vue | 392 + .../src/components/TuiEditor/index.vue | 126 + .../src/components/TuiEditor/viewer.vue | 56 + .../article/src/composables/useEcharts.ts | 35 + .../article/src/composables/useQueryList.ts | 62 + .../src/composables/useQueryVerifyId.ts | 50 + .../article/src/composables/useRestRouter.ts | 12 + .../article/src/composables/useRestStore.ts | 12 + packages/article/src/config/i18n.ts | 45 + packages/article/src/config/routes.ts | 54 + packages/article/src/config/settings.ts | 43 + packages/article/src/config/store.ts | 12 + .../src/directives/permission/index.ts | 31 + packages/article/src/layouts/BlankLayout.vue | 3 + .../src/layouts/DashboardLayout/index.vue | 5 + .../src/layouts/DashboardLayout/routes.ts | 24 + .../src/layouts/DefaultLayout/index.vue | 36 + .../src/layouts/DefaultLayout/routes.ts | 37 + .../article/src/layouts/SecurityLayout.vue | 28 + packages/article/src/locales/en-US.ts | 5 + packages/article/src/locales/zh-CN.ts | 5 + packages/article/src/locales/zh-TW.ts | 5 + packages/article/src/main.ts | 119 + packages/article/src/services/user.ts | 2 + packages/article/src/shims-vue.d.ts | 8 + packages/article/src/store/global.ts | 43 + packages/article/src/store/user.ts | 64 + packages/article/src/utils/array.ts | 29 + packages/article/src/utils/i18n.ts | 181 + packages/article/src/utils/localToken.ts | 37 + .../article/src/utils/mock/require-context.js | 45 + packages/article/src/utils/mock/server.js | 98 + packages/article/src/utils/object.ts | 46 + packages/article/src/utils/request.ts | 163 + packages/article/src/utils/routes.ts | 388 + packages/article/src/utils/store.ts | 61 + packages/article/src/utils/trim.ts | 44 + packages/article/src/utils/validate.ts | 9 + packages/article/src/views/404/index.vue | 21 + packages/article/src/views/add/data.d.ts | 34 + packages/article/src/views/add/index.vue | 301 + .../article/src/views/add/locales/en-US.ts | 46 + .../article/src/views/add/locales/zh-CN.ts | 46 + .../article/src/views/add/locales/zh-TW.ts | 46 + packages/article/src/views/add/service.ts | 18 + .../src/views/analysis/chartcard/data.d.ts | 7 + .../src/views/analysis/chartcard/index.vue | 100 + .../views/analysis/chartcard/locales/en-US.ts | 9 + .../views/analysis/chartcard/locales/zh-CN.ts | 7 + .../views/analysis/chartcard/locales/zh-TW.ts | 9 + .../src/views/analysis/chartcard/service.ts | 8 + .../src/views/analysis/hitcard/data.d.ts | 24 + .../src/views/analysis/hitcard/index.vue | 124 + .../views/analysis/hitcard/locales/en-US.ts | 6 + .../views/analysis/hitcard/locales/zh-CN.ts | 6 + .../views/analysis/hitcard/locales/zh-TW.ts | 6 + .../src/views/analysis/hitcard/service.ts | 10 + packages/article/src/views/category/data.d.ts | 25 + packages/article/src/views/category/index.vue | 301 + .../src/views/category/locales/en-US.ts | 40 + .../src/views/category/locales/zh-CN.ts | 40 + .../src/views/category/locales/zh-TW.ts | 40 + .../article/src/views/category/service.ts | 38 + packages/article/src/views/edit/data.d.ts | 7 + packages/article/src/views/edit/index.vue | 328 + .../article/src/views/edit/locales/en-US.ts | 43 + .../article/src/views/edit/locales/zh-CN.ts | 43 + .../article/src/views/edit/locales/zh-TW.ts | 43 + packages/article/src/views/edit/service.ts | 33 + packages/article/src/views/home/index.vue | 7 + .../list/components/SearchDrawer/data.d.ts | 22 + .../list/components/SearchDrawer/index.vue | 134 + packages/article/src/views/list/data.d.ts | 33 + packages/article/src/views/list/index.vue | 223 + .../article/src/views/list/locales/en-US.ts | 28 + .../article/src/views/list/locales/zh-CN.ts | 28 + .../article/src/views/list/locales/zh-TW.ts | 28 + packages/article/src/views/list/service.ts | 30 + packages/article/src/views/refresh/index.vue | 17 + packages/article/tests/unit/example.spec.ts | 12 + packages/article/tsconfig.json | 43 + packages/article/vue.config.js | 129 + packages/links/.browserslistrc | 3 + packages/links/.editorconfig | 10 + packages/links/.env.development | 11 + packages/links/.env.production | 11 + packages/links/.eslintignore | 1 + packages/links/.eslintrc.js | 45 + packages/links/.gitignore | 24 + packages/links/LICENSE | 21 + packages/links/README.md | 39 + packages/links/babel.config.js | 5 + packages/links/jest.config.js | 6 + packages/links/mock/global.js | 39 + packages/links/mock/home.js | 140 + packages/links/mock/user.js | 89 + packages/links/package.json | 83 + packages/links/public/favicon.ico | Bin 0 -> 4286 bytes packages/links/public/index.html | 17 + packages/links/src/App.vue | 12 + .../links/src/assets/css/antd-variables.less | 18 + packages/links/src/assets/css/global.less | 37 + packages/links/src/assets/css/mixin.less | 28 + packages/links/src/assets/css/variables.less | 0 packages/links/src/assets/iconsvg/home.svg | 1 + packages/links/src/assets/iconsvg/svgo.yml | 22 + packages/links/src/assets/images/bg.svg | 69 + packages/links/src/assets/images/logo.png | Bin 0 -> 3294 bytes packages/links/src/components/ALink/index.vue | 55 + .../links/src/components/CKEditor/index.vue | 192 + .../Custom/LinksCategorySelect/data.d.ts | 4 + .../Custom/LinksCategorySelect/index.vue | 107 + .../Custom/LinksCategorySelect/service.ts | 11 + .../links/src/components/IconFont/index.ts | 3 + .../links/src/components/IconFont/index.vue | 69 + .../links/src/components/IconSvg/index.ts | 17 + .../links/src/components/IconSvg/index.vue | 42 + .../links/src/components/Permission/index.vue | 46 + .../links/src/components/RestDrawer/index.vue | 80 + .../src/components/ScreenTable/data.d.ts | 10 + .../src/components/ScreenTable/index.vue | 128 + .../links/src/components/SelectLang/index.vue | 77 + .../links/src/components/TuiEditor/index.vue | 126 + .../links/src/components/TuiEditor/viewer.vue | 56 + packages/links/src/composables/useEcharts.ts | 35 + .../useI18nAntdFormVaildateInfos.ts | 24 + .../links/src/composables/useQueryList.ts | 62 + .../links/src/composables/useQueryVerifyId.ts | 50 + .../links/src/composables/useRestRouter.ts | 12 + .../links/src/composables/useRestStore.ts | 12 + packages/links/src/config/i18n.ts | 45 + packages/links/src/config/routes.ts | 51 + packages/links/src/config/settings.ts | 43 + packages/links/src/config/store.ts | 12 + .../links/src/directives/permission/index.ts | 31 + packages/links/src/layouts/BlankLayout.vue | 3 + .../src/layouts/DashboardLayout/index.vue | 5 + .../src/layouts/DashboardLayout/routes.ts | 24 + .../links/src/layouts/DefaultLayout/index.vue | 36 + .../links/src/layouts/DefaultLayout/routes.ts | 25 + packages/links/src/layouts/SecurityLayout.vue | 21 + packages/links/src/locales/en-US.ts | 5 + packages/links/src/locales/zh-CN.ts | 5 + packages/links/src/locales/zh-TW.ts | 5 + packages/links/src/main.ts | 115 + packages/links/src/services/user.ts | 1 + packages/links/src/shims-vue.d.ts | 8 + packages/links/src/store/global.ts | 44 + packages/links/src/store/user.ts | 64 + packages/links/src/utils/array.ts | 29 + packages/links/src/utils/i18n.ts | 181 + packages/links/src/utils/localToken.ts | 37 + .../links/src/utils/mock/require-context.js | 45 + packages/links/src/utils/mock/server.js | 98 + packages/links/src/utils/object.ts | 46 + packages/links/src/utils/request.ts | 160 + packages/links/src/utils/routes.ts | 388 + packages/links/src/utils/store.ts | 61 + packages/links/src/utils/trim.ts | 44 + packages/links/src/utils/validate.ts | 9 + packages/links/src/views/404/index.vue | 11 + .../src/views/analysis/chartcard/data.d.ts | 11 + .../src/views/analysis/chartcard/index.vue | 150 + .../views/analysis/chartcard/locales/en-US.ts | 7 + .../views/analysis/chartcard/locales/zh-CN.ts | 5 + .../views/analysis/chartcard/locales/zh-TW.ts | 6 + .../src/views/analysis/chartcard/service.ts | 8 + .../src/views/analysis/hitcard/data.d.ts | 27 + .../src/views/analysis/hitcard/index.vue | 111 + .../views/analysis/hitcard/locales/en-US.ts | 8 + .../views/analysis/hitcard/locales/zh-CN.ts | 6 + .../views/analysis/hitcard/locales/zh-TW.ts | 7 + .../src/views/analysis/hitcard/service.ts | 11 + .../category/components/FormDialog/data.d.ts | 16 + .../category/components/FormDialog/index.vue | 148 + packages/links/src/views/category/data.d.ts | 13 + packages/links/src/views/category/index.vue | 172 + .../links/src/views/category/locales/en-US.ts | 30 + .../links/src/views/category/locales/zh-CN.ts | 31 + .../links/src/views/category/locales/zh-TW.ts | 29 + packages/links/src/views/category/service.ts | 58 + packages/links/src/views/home/index.vue | 7 + .../list/components/FormDialog/data.d.ts | 29 + .../list/components/FormDialog/index.vue | 159 + .../list/components/SearchDrawer/data.d.ts | 17 + .../list/components/SearchDrawer/index.vue | 107 + packages/links/src/views/list/data.d.ts | 32 + packages/links/src/views/list/index.vue | 261 + .../links/src/views/list/locales/en-US.ts | 40 + .../links/src/views/list/locales/zh-CN.ts | 42 + .../links/src/views/list/locales/zh-TW.ts | 40 + packages/links/src/views/list/service.ts | 71 + packages/links/src/views/refresh/index.vue | 17 + packages/links/tests/unit/example.spec.ts | 12 + packages/links/tsconfig.json | 42 + packages/links/vue.config.js | 133 + packages/system/.browserslistrc | 3 + packages/system/.editorconfig | 10 + packages/system/.env.development | 11 + packages/system/.env.production | 11 + packages/system/.eslintignore | 1 + packages/system/.eslintrc.js | 45 + packages/system/.gitignore | 24 + packages/system/LICENSE | 21 + packages/system/README.md | 38 + packages/system/babel.config.js | 5 + packages/system/jest.config.js | 6 + packages/system/mock/global.js | 39 + packages/system/mock/home.js | 44 + packages/system/mock/user.js | 89 + packages/system/package.json | 83 + packages/system/public/favicon.ico | Bin 0 -> 4286 bytes packages/system/public/index.html | 17 + packages/system/src/App.vue | 12 + .../src/assets/css/element-variables.scss | 60 + packages/system/src/assets/css/global.scss | 75 + packages/system/src/assets/css/mixin.scss | 30 + packages/system/src/assets/css/variables.scss | 1 + packages/system/src/assets/iconsvg/home.svg | 1 + packages/system/src/assets/iconsvg/plus.svg | 1 + packages/system/src/assets/iconsvg/svgo.yml | 22 + packages/system/src/assets/images/bg.svg | 69 + packages/system/src/assets/images/logo.png | Bin 0 -> 3294 bytes .../system/src/components/ALink/index.vue | 55 + .../system/src/components/CKEditor/index.vue | 192 + .../components/Custom/ApiCascader/index.vue | 159 + .../components/Custom/ApiCascader/service.ts | 11 + .../Custom/FormFooterToolbar/index.vue | 36 + .../components/Custom/MenuCascader/index.vue | 159 + .../components/Custom/MenuCascader/service.ts | 11 + .../Custom/MenuTypeSelect/data.d.ts | 4 + .../Custom/MenuTypeSelect/index.vue | 70 + .../Custom/MenuTypeSelect/locales/en-US.ts | 5 + .../Custom/MenuTypeSelect/locales/zh-CN.ts | 4 + .../Custom/MenuTypeSelect/locales/zh-TW.ts | 5 + .../components/Custom/PageHeader/index.vue | 56 + .../components/Custom/RoleSelect/data.d.ts | 4 + .../components/Custom/RoleSelect/index.vue | 112 + .../components/Custom/RoleSelect/service.ts | 11 + .../Custom/ServerImage/Dialog/data.d.ts | 25 + .../Custom/ServerImage/Dialog/index.vue | 315 + .../ServerImage/Dialog/locales/en-US.ts | 19 + .../ServerImage/Dialog/locales/zh-CN.ts | 19 + .../ServerImage/Dialog/locales/zh-TW.ts | 19 + .../Custom/ServerImage/Dialog/service.ts | 14 + .../ServerImage/SelectionList/data.d.ts | 4 + .../ServerImage/SelectionList/index.vue | 160 + .../SelectionList/locales/en-US.ts | 8 + .../SelectionList/locales/zh-CN.ts | 8 + .../SelectionList/locales/zh-TW.ts | 8 + .../system/src/components/IconFont/index.ts | 3 + .../system/src/components/IconFont/index.vue | 69 + .../system/src/components/IconSvg/index.ts | 17 + .../system/src/components/IconSvg/index.vue | 42 + .../src/components/Permission/index.vue | 50 + .../src/components/RestElDrawer/index.vue | 79 + .../system/src/components/Result/index.vue | 108 + .../src/components/Result/svg/error.vue | 3 + .../system/src/components/Result/svg/info.vue | 3 + .../src/components/Result/svg/noFound.vue | 3 + .../src/components/Result/svg/serverError.vue | 3 + .../src/components/Result/svg/success.vue | 3 + .../components/Result/svg/unauthorized.vue | 3 + .../src/components/Result/svg/warning.vue | 3 + .../src/components/ScreenTable/data.d.ts | 9 + .../src/components/ScreenTable/index.vue | 146 + .../src/components/ScreenTreeTable/index.vue | 207 + packages/system/src/components/Spin/index.vue | 42 + .../system/src/components/TreeTable/data.d.ts | 5 + .../system/src/components/TreeTable/index.vue | 392 + .../system/src/components/TuiEditor/index.vue | 126 + .../src/components/TuiEditor/viewer.vue | 56 + packages/system/src/composables/useEcharts.ts | 35 + .../system/src/composables/useQueryList.ts | 62 + .../src/composables/useQueryVerifyId.ts | 50 + .../system/src/composables/useRestRouter.ts | 12 + .../system/src/composables/useRestStore.ts | 12 + packages/system/src/config/i18n.ts | 45 + packages/system/src/config/routes.ts | 54 + packages/system/src/config/settings.ts | 43 + packages/system/src/config/store.ts | 12 + .../system/src/directives/permission/index.ts | 31 + packages/system/src/layouts/BlankLayout.vue | 3 + .../src/layouts/DashboardLayout/index.vue | 5 + .../src/layouts/DashboardLayout/routes.ts | 19 + .../src/layouts/DefaultLayout/index.vue | 36 + .../src/layouts/DefaultLayout/routes.ts | 37 + .../system/src/layouts/SecurityLayout.vue | 28 + packages/system/src/locales/en-US.ts | 5 + packages/system/src/locales/zh-CN.ts | 5 + packages/system/src/locales/zh-TW.ts | 5 + packages/system/src/main.ts | 119 + packages/system/src/services/user.ts | 2 + packages/system/src/shims-vue.d.ts | 8 + packages/system/src/store/global.ts | 43 + packages/system/src/store/user.ts | 64 + packages/system/src/utils/array.ts | 29 + packages/system/src/utils/formatData.ts | 115 + packages/system/src/utils/i18n.ts | 181 + packages/system/src/utils/localToken.ts | 37 + .../system/src/utils/mock/require-context.js | 45 + packages/system/src/utils/mock/server.js | 98 + packages/system/src/utils/object.ts | 46 + packages/system/src/utils/request.ts | 163 + packages/system/src/utils/routes.ts | 388 + packages/system/src/utils/store.ts | 61 + packages/system/src/utils/trim.ts | 44 + packages/system/src/utils/validate.ts | 9 + packages/system/src/views/404/index.vue | 21 + .../components/FormDialog/data.d.ts | 22 + .../components/FormDialog/index.vue | 181 + .../system/src/views/accountlist/data.d.ts | 31 + .../system/src/views/accountlist/index.vue | 230 + .../src/views/accountlist/locales/en-US.ts | 34 + .../src/views/accountlist/locales/zh-CN.ts | 36 + .../src/views/accountlist/locales/zh-TW.ts | 34 + .../system/src/views/accountlist/service.ts | 72 + .../src/views/analysis/chartcard/index.vue | 9 + .../apilist/components/FormDialog/data.d.ts | 22 + .../apilist/components/FormDialog/index.vue | 130 + packages/system/src/views/apilist/data.d.ts | 13 + packages/system/src/views/apilist/index.vue | 228 + .../system/src/views/apilist/locales/en-US.ts | 29 + .../system/src/views/apilist/locales/zh-CN.ts | 29 + .../system/src/views/apilist/locales/zh-TW.ts | 30 + packages/system/src/views/apilist/service.ts | 63 + packages/system/src/views/home/index.vue | 7 + .../menulist/components/FormDialog/data.d.ts | 24 + .../menulist/components/FormDialog/index.vue | 167 + packages/system/src/views/menulist/data.d.ts | 17 + packages/system/src/views/menulist/index.vue | 257 + .../src/views/menulist/locales/en-US.ts | 34 + .../src/views/menulist/locales/zh-CN.ts | 34 + .../src/views/menulist/locales/zh-TW.ts | 35 + packages/system/src/views/menulist/service.ts | 63 + packages/system/src/views/refresh/index.vue | 17 + .../rolelist/components/FormDialog/data.d.ts | 20 + .../rolelist/components/FormDialog/index.vue | 130 + packages/system/src/views/rolelist/data.d.ts | 13 + packages/system/src/views/rolelist/index.vue | 180 + .../src/views/rolelist/locales/en-US.ts | 25 + .../src/views/rolelist/locales/zh-CN.ts | 27 + .../src/views/rolelist/locales/zh-TW.ts | 25 + packages/system/src/views/rolelist/service.ts | 58 + packages/system/tests/unit/example.spec.ts | 12 + packages/system/tsconfig.json | 43 + packages/system/vue.config.js | 129 + pnpm-lock.yaml | 18750 ++++++++++++++++ pnpm-workspace.yaml | 8 + scripts/config/constants.ts | 5 + scripts/config/index.ts | 91 + scripts/config/paths.ts | 12 + scripts/gulpbuild.ts | 108 + scripts/gulpinit.ts | 1 + scripts/gulpserve.ts | 54 + scripts/server/env.js | 57 + scripts/server/qiankun.ts | 48 + scripts/server/qiankunActions.ts | 8 + scripts/utils/gulp.ts | 4 + scripts/utils/process.ts | 27 + tsconfig.json | 37 + typings/global.d.ts | 9 + 725 files changed, 53513 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 LICENSE create mode 100644 components/README.md create mode 100644 main-antd/.browserslistrc create mode 100644 main-antd/.editorconfig create mode 100644 main-antd/.env.development create mode 100644 main-antd/.env.production create mode 100644 main-antd/.eslintignore create mode 100644 main-antd/.eslintrc.js create mode 100644 main-antd/.gitignore create mode 100644 main-antd/LICENSE create mode 100644 main-antd/README.md create mode 100644 main-antd/babel.config.js create mode 100644 main-antd/jest.config.js create mode 100644 main-antd/mock/global.js create mode 100644 main-antd/mock/home.js create mode 100644 main-antd/mock/user.js create mode 100644 main-antd/package.json create mode 100644 main-antd/public/favicon.ico create mode 100644 main-antd/public/index.html create mode 100644 main-antd/src/App.vue create mode 100644 main-antd/src/assets/css/antd-variables.less create mode 100644 main-antd/src/assets/css/global.less create mode 100644 main-antd/src/assets/css/mixin.less create mode 100644 main-antd/src/assets/css/variables.less create mode 100644 main-antd/src/assets/iconsvg/arrow-down.svg create mode 100644 main-antd/src/assets/iconsvg/arrow-left.svg create mode 100644 main-antd/src/assets/iconsvg/arrow-left2.svg create mode 100644 main-antd/src/assets/iconsvg/arrow-right.svg create mode 100644 main-antd/src/assets/iconsvg/arrow-right2.svg create mode 100644 main-antd/src/assets/iconsvg/arrow-up.svg create mode 100644 main-antd/src/assets/iconsvg/close.svg create mode 100644 main-antd/src/assets/iconsvg/close2.svg create mode 100644 main-antd/src/assets/iconsvg/home.svg create mode 100644 main-antd/src/assets/iconsvg/language-outline.svg create mode 100644 main-antd/src/assets/iconsvg/menu-article.svg create mode 100644 main-antd/src/assets/iconsvg/menu-fold.svg create mode 100644 main-antd/src/assets/iconsvg/menu-links.svg create mode 100644 main-antd/src/assets/iconsvg/menu-unfold.svg create mode 100644 main-antd/src/assets/iconsvg/message.svg create mode 100644 main-antd/src/assets/iconsvg/more.svg create mode 100644 main-antd/src/assets/iconsvg/pwd.svg create mode 100644 main-antd/src/assets/iconsvg/refresh.svg create mode 100644 main-antd/src/assets/iconsvg/set.svg create mode 100644 main-antd/src/assets/iconsvg/svgo.yml create mode 100644 main-antd/src/assets/iconsvg/theme.svg create mode 100644 main-antd/src/assets/iconsvg/tick.svg create mode 100644 main-antd/src/assets/iconsvg/user.svg create mode 100644 main-antd/src/assets/images/bg.svg create mode 100644 main-antd/src/assets/images/logo.png create mode 100644 main-antd/src/components/ALink/index.vue create mode 100644 main-antd/src/components/BreadCrumbs/index.vue create mode 100644 main-antd/src/components/CKEditor/index.vue create mode 100644 main-antd/src/components/IconFont/index.ts create mode 100644 main-antd/src/components/IconFont/index.vue create mode 100644 main-antd/src/components/IconSvg/index.ts create mode 100644 main-antd/src/components/IconSvg/index.vue create mode 100644 main-antd/src/components/Permission/index.vue create mode 100644 main-antd/src/components/ScreenTable/data.d.ts create mode 100644 main-antd/src/components/ScreenTable/index.vue create mode 100644 main-antd/src/components/SelectLang/index.vue create mode 100644 main-antd/src/components/TuiEditor/index.vue create mode 100644 main-antd/src/components/TuiEditor/viewer.vue create mode 100644 main-antd/src/composables/useEcharts.ts create mode 100644 main-antd/src/composables/useI18nAntdFormVaildateInfos.ts create mode 100644 main-antd/src/composables/useInjectMicroChildEntry.ts create mode 100644 main-antd/src/composables/useLoadMicroApp.ts create mode 100644 main-antd/src/composables/useQiankunActions.ts create mode 100644 main-antd/src/composables/useTitle.ts create mode 100644 main-antd/src/config/i18n.ts create mode 100644 main-antd/src/config/routes.ts create mode 100644 main-antd/src/config/settings.ts create mode 100644 main-antd/src/config/store.ts create mode 100644 main-antd/src/directives/permission/index.ts create mode 100644 main-antd/src/layouts/BlankLayout.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/Icon.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/LeftSider.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/RightFooter.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/RightTabNav.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/RightTop.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/RightTopMessage.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/RightTopUser.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/Settings.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/SiderMenu.vue create mode 100644 main-antd/src/layouts/QiankunLayout/components/SiderMenuItem.vue create mode 100644 main-antd/src/layouts/QiankunLayout/css/index.less create mode 100644 main-antd/src/layouts/QiankunLayout/css/mixins.less create mode 100644 main-antd/src/layouts/QiankunLayout/css/var.less create mode 100644 main-antd/src/layouts/QiankunLayout/index.vue create mode 100644 main-antd/src/layouts/QiankunLayout/locales/en-US.ts create mode 100644 main-antd/src/layouts/QiankunLayout/locales/zh-CN.ts create mode 100644 main-antd/src/layouts/QiankunLayout/locales/zh-TW.ts create mode 100644 main-antd/src/layouts/QiankunLayout/routes.ts create mode 100644 main-antd/src/layouts/SecurityLayout.vue create mode 100644 main-antd/src/layouts/UserLayout/index.vue create mode 100644 main-antd/src/layouts/UserLayout/locales/en-US.ts create mode 100644 main-antd/src/layouts/UserLayout/locales/zh-CN.ts create mode 100644 main-antd/src/layouts/UserLayout/locales/zh-TW.ts create mode 100644 main-antd/src/layouts/UserLayout/routes.ts create mode 100644 main-antd/src/locales/en-US.ts create mode 100644 main-antd/src/locales/zh-CN.ts create mode 100644 main-antd/src/locales/zh-TW.ts create mode 100644 main-antd/src/main.ts create mode 100644 main-antd/src/services/user.ts create mode 100644 main-antd/src/shims-vue.d.ts create mode 100644 main-antd/src/store/global.ts create mode 100644 main-antd/src/store/user.ts create mode 100644 main-antd/src/utils/array.ts create mode 100644 main-antd/src/utils/i18n.ts create mode 100644 main-antd/src/utils/localToken.ts create mode 100644 main-antd/src/utils/mock/require-context.js create mode 100644 main-antd/src/utils/mock/server.js create mode 100644 main-antd/src/utils/object.ts create mode 100644 main-antd/src/utils/request.ts create mode 100644 main-antd/src/utils/routes.ts create mode 100644 main-antd/src/utils/store.ts create mode 100644 main-antd/src/utils/validate.ts create mode 100644 main-antd/src/views/404/index.vue create mode 100644 main-antd/src/views/home/index.vue create mode 100644 main-antd/src/views/qiankun/index.vue create mode 100644 main-antd/src/views/qiankun/start.vue create mode 100644 main-antd/src/views/qiankun/startScreen.vue create mode 100644 main-antd/src/views/refresh/index.vue create mode 100644 main-antd/src/views/user/login/data.d.ts create mode 100644 main-antd/src/views/user/login/index.vue create mode 100644 main-antd/src/views/user/login/locales/en-US.ts create mode 100644 main-antd/src/views/user/login/locales/zh-CN.ts create mode 100644 main-antd/src/views/user/login/locales/zh-TW.ts create mode 100644 main-antd/src/views/user/login/service.ts create mode 100644 main-antd/src/views/user/login/store.ts create mode 100644 main-antd/src/views/user/register/data.d.ts create mode 100644 main-antd/src/views/user/register/index.vue create mode 100644 main-antd/src/views/user/register/locales/en-US.ts create mode 100644 main-antd/src/views/user/register/locales/zh-CN.ts create mode 100644 main-antd/src/views/user/register/locales/zh-TW.ts create mode 100644 main-antd/src/views/user/register/service.ts create mode 100644 main-antd/src/views/user/register/store.ts create mode 100644 main-antd/tests/unit/example.spec.ts create mode 100644 main-antd/tsconfig.json create mode 100644 main-antd/vue.config.js create mode 100644 main/.browserslistrc create mode 100644 main/.editorconfig create mode 100644 main/.env.development create mode 100644 main/.env.production create mode 100644 main/.eslintignore create mode 100644 main/.eslintrc.js create mode 100644 main/.gitignore create mode 100644 main/LICENSE create mode 100644 main/README.md create mode 100644 main/babel.config.js create mode 100644 main/jest.config.js create mode 100644 main/mock/global.js create mode 100644 main/mock/home.js create mode 100644 main/mock/user.js create mode 100644 main/package.json create mode 100644 main/public/favicon.ico create mode 100644 main/public/index.html create mode 100644 main/src/App.vue create mode 100644 main/src/assets/css/element-variables.scss create mode 100644 main/src/assets/css/global.scss create mode 100644 main/src/assets/css/mixin.scss create mode 100644 main/src/assets/css/variables.scss create mode 100644 main/src/assets/iconsvg/arrow-down.svg create mode 100644 main/src/assets/iconsvg/arrow-left.svg create mode 100644 main/src/assets/iconsvg/arrow-left2.svg create mode 100644 main/src/assets/iconsvg/arrow-right.svg create mode 100644 main/src/assets/iconsvg/arrow-right2.svg create mode 100644 main/src/assets/iconsvg/arrow-up.svg create mode 100644 main/src/assets/iconsvg/close.svg create mode 100644 main/src/assets/iconsvg/close2.svg create mode 100644 main/src/assets/iconsvg/home.svg create mode 100644 main/src/assets/iconsvg/language-outline.svg create mode 100644 main/src/assets/iconsvg/menu-article.svg create mode 100644 main/src/assets/iconsvg/menu-fold.svg create mode 100644 main/src/assets/iconsvg/menu-links.svg create mode 100644 main/src/assets/iconsvg/menu-unfold.svg create mode 100644 main/src/assets/iconsvg/message.svg create mode 100644 main/src/assets/iconsvg/more.svg create mode 100644 main/src/assets/iconsvg/pwd.svg create mode 100644 main/src/assets/iconsvg/refresh.svg create mode 100644 main/src/assets/iconsvg/set.svg create mode 100644 main/src/assets/iconsvg/svgo.yml create mode 100644 main/src/assets/iconsvg/theme.svg create mode 100644 main/src/assets/iconsvg/tick.svg create mode 100644 main/src/assets/iconsvg/user.svg create mode 100644 main/src/assets/images/bg.svg create mode 100644 main/src/assets/images/logo.png create mode 100644 main/src/components/ALink/index.vue create mode 100644 main/src/components/BreadCrumbs/index.vue create mode 100644 main/src/components/CKEditor/index.vue create mode 100644 main/src/components/IconFont/index.ts create mode 100644 main/src/components/IconFont/index.vue create mode 100644 main/src/components/IconSvg/index.ts create mode 100644 main/src/components/IconSvg/index.vue create mode 100644 main/src/components/Permission/index.vue create mode 100644 main/src/components/Result/index.vue create mode 100644 main/src/components/Result/svg/error.vue create mode 100644 main/src/components/Result/svg/info.vue create mode 100644 main/src/components/Result/svg/noFound.vue create mode 100644 main/src/components/Result/svg/serverError.vue create mode 100644 main/src/components/Result/svg/success.vue create mode 100644 main/src/components/Result/svg/unauthorized.vue create mode 100644 main/src/components/Result/svg/warning.vue create mode 100644 main/src/components/ScreenTable/data.d.ts create mode 100644 main/src/components/ScreenTable/index.vue create mode 100644 main/src/components/SelectLang/index.vue create mode 100644 main/src/components/Spin/index.vue create mode 100644 main/src/components/TuiEditor/index.vue create mode 100644 main/src/components/TuiEditor/viewer.vue create mode 100644 main/src/composables/useEcharts.ts create mode 100644 main/src/composables/useInjectMicroChildEntry.ts create mode 100644 main/src/composables/useLoadMicroApp.ts create mode 100644 main/src/composables/useQiankunActions.ts create mode 100644 main/src/composables/useTitle.ts create mode 100644 main/src/config/i18n.ts create mode 100644 main/src/config/routes.ts create mode 100644 main/src/config/settings.ts create mode 100644 main/src/config/store.ts create mode 100644 main/src/directives/permission/index.ts create mode 100644 main/src/layouts/BlankLayout.vue create mode 100644 main/src/layouts/QiankunLayout/components/Icon.vue create mode 100644 main/src/layouts/QiankunLayout/components/LeftSider.vue create mode 100644 main/src/layouts/QiankunLayout/components/RightFooter.vue create mode 100644 main/src/layouts/QiankunLayout/components/RightTabNav.vue create mode 100644 main/src/layouts/QiankunLayout/components/RightTop.vue create mode 100644 main/src/layouts/QiankunLayout/components/RightTopMessage.vue create mode 100644 main/src/layouts/QiankunLayout/components/RightTopUser.vue create mode 100644 main/src/layouts/QiankunLayout/components/Settings.vue create mode 100644 main/src/layouts/QiankunLayout/components/SiderMenu.vue create mode 100644 main/src/layouts/QiankunLayout/components/SiderMenuItem.vue create mode 100644 main/src/layouts/QiankunLayout/css/index.scss create mode 100644 main/src/layouts/QiankunLayout/css/mixins.scss create mode 100644 main/src/layouts/QiankunLayout/css/var.scss create mode 100644 main/src/layouts/QiankunLayout/index.vue create mode 100644 main/src/layouts/QiankunLayout/locales/en-US.ts create mode 100644 main/src/layouts/QiankunLayout/locales/zh-CN.ts create mode 100644 main/src/layouts/QiankunLayout/locales/zh-TW.ts create mode 100644 main/src/layouts/QiankunLayout/routes.ts create mode 100644 main/src/layouts/SecurityLayout.vue create mode 100644 main/src/layouts/UserLayout/index.vue create mode 100644 main/src/layouts/UserLayout/locales/en-US.ts create mode 100644 main/src/layouts/UserLayout/locales/zh-CN.ts create mode 100644 main/src/layouts/UserLayout/locales/zh-TW.ts create mode 100644 main/src/layouts/UserLayout/routes.ts create mode 100644 main/src/locales/en-US.ts create mode 100644 main/src/locales/zh-CN.ts create mode 100644 main/src/locales/zh-TW.ts create mode 100644 main/src/main.ts create mode 100644 main/src/services/user.ts create mode 100644 main/src/shims-vue.d.ts create mode 100644 main/src/store/global.ts create mode 100644 main/src/store/user.ts create mode 100644 main/src/utils/array.ts create mode 100644 main/src/utils/i18n.ts create mode 100644 main/src/utils/localToken.ts create mode 100644 main/src/utils/mock/require-context.js create mode 100644 main/src/utils/mock/server.js create mode 100644 main/src/utils/object.ts create mode 100644 main/src/utils/request.ts create mode 100644 main/src/utils/routes.ts create mode 100644 main/src/utils/store.ts create mode 100644 main/src/utils/validate.ts create mode 100644 main/src/views/404/index.vue create mode 100644 main/src/views/home/index.vue create mode 100644 main/src/views/qiankun/index.vue create mode 100644 main/src/views/qiankun/start.vue create mode 100644 main/src/views/qiankun/startScreen.vue create mode 100644 main/src/views/refresh/index.vue create mode 100644 main/src/views/user/login/data.d.ts create mode 100644 main/src/views/user/login/index.vue create mode 100644 main/src/views/user/login/locales/en-US.ts create mode 100644 main/src/views/user/login/locales/zh-CN.ts create mode 100644 main/src/views/user/login/locales/zh-TW.ts create mode 100644 main/src/views/user/login/service.ts create mode 100644 main/src/views/user/login/store.ts create mode 100644 main/src/views/user/register/data.d.ts create mode 100644 main/src/views/user/register/index.vue create mode 100644 main/src/views/user/register/locales/en-US.ts create mode 100644 main/src/views/user/register/locales/zh-CN.ts create mode 100644 main/src/views/user/register/locales/zh-TW.ts create mode 100644 main/src/views/user/register/service.ts create mode 100644 main/src/views/user/register/store.ts create mode 100644 main/tests/unit/example.spec.ts create mode 100644 main/tsconfig.json create mode 100644 main/vue.config.js create mode 100644 package.json create mode 100644 packages/article/.browserslistrc create mode 100644 packages/article/.editorconfig create mode 100644 packages/article/.env.development create mode 100644 packages/article/.env.production create mode 100644 packages/article/.eslintignore create mode 100644 packages/article/.eslintrc.js create mode 100644 packages/article/.gitignore create mode 100644 packages/article/LICENSE create mode 100644 packages/article/README.md create mode 100644 packages/article/babel.config.js create mode 100644 packages/article/jest.config.js create mode 100644 packages/article/mock/global.js create mode 100644 packages/article/mock/home.js create mode 100644 packages/article/mock/user.js create mode 100644 packages/article/package.json create mode 100644 packages/article/public/favicon.ico create mode 100644 packages/article/public/index.html create mode 100644 packages/article/src/App.vue create mode 100644 packages/article/src/assets/css/element-variables.scss create mode 100644 packages/article/src/assets/css/global.scss create mode 100644 packages/article/src/assets/css/mixin.scss create mode 100644 packages/article/src/assets/css/variables.scss create mode 100644 packages/article/src/assets/iconsvg/home.svg create mode 100644 packages/article/src/assets/iconsvg/plus.svg create mode 100644 packages/article/src/assets/iconsvg/svgo.yml create mode 100644 packages/article/src/assets/images/bg.svg create mode 100644 packages/article/src/assets/images/logo.png create mode 100644 packages/article/src/components/ALink/index.vue create mode 100644 packages/article/src/components/CKEditor/index.vue create mode 100644 packages/article/src/components/Custom/ArticleCategoryCascader/index.vue create mode 100644 packages/article/src/components/Custom/ArticleCategoryCascader/service.ts create mode 100644 packages/article/src/components/Custom/ArticleListDrawer/data.d.ts create mode 100644 packages/article/src/components/Custom/ArticleListDrawer/index.vue create mode 100644 packages/article/src/components/Custom/ArticleListDrawer/locales/en-US.ts create mode 100644 packages/article/src/components/Custom/ArticleListDrawer/locales/zh-CN.ts create mode 100644 packages/article/src/components/Custom/ArticleListDrawer/locales/zh-TW.ts create mode 100644 packages/article/src/components/Custom/ArticleListDrawer/service.ts create mode 100644 packages/article/src/components/Custom/FormFooterToolbar/index.vue create mode 100644 packages/article/src/components/Custom/PageHeader/index.vue create mode 100644 packages/article/src/components/Custom/ServerImage/Dialog/data.d.ts create mode 100644 packages/article/src/components/Custom/ServerImage/Dialog/index.vue create mode 100644 packages/article/src/components/Custom/ServerImage/Dialog/locales/en-US.ts create mode 100644 packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts create mode 100644 packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts create mode 100644 packages/article/src/components/Custom/ServerImage/Dialog/service.ts create mode 100644 packages/article/src/components/Custom/ServerImage/SelectionList/data.d.ts create mode 100644 packages/article/src/components/Custom/ServerImage/SelectionList/index.vue create mode 100644 packages/article/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts create mode 100644 packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts create mode 100644 packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts create mode 100644 packages/article/src/components/Custom/TagSelect/data.d.ts create mode 100644 packages/article/src/components/Custom/TagSelect/index.vue create mode 100644 packages/article/src/components/Custom/TagSelect/service.ts create mode 100644 packages/article/src/components/IconFont/index.ts create mode 100644 packages/article/src/components/IconFont/index.vue create mode 100644 packages/article/src/components/IconSvg/index.ts create mode 100644 packages/article/src/components/IconSvg/index.vue create mode 100644 packages/article/src/components/Permission/index.vue create mode 100644 packages/article/src/components/RestElDrawer/index.vue create mode 100644 packages/article/src/components/Result/index.vue create mode 100644 packages/article/src/components/Result/svg/error.vue create mode 100644 packages/article/src/components/Result/svg/info.vue create mode 100644 packages/article/src/components/Result/svg/noFound.vue create mode 100644 packages/article/src/components/Result/svg/serverError.vue create mode 100644 packages/article/src/components/Result/svg/success.vue create mode 100644 packages/article/src/components/Result/svg/unauthorized.vue create mode 100644 packages/article/src/components/Result/svg/warning.vue create mode 100644 packages/article/src/components/ScreenTable/data.d.ts create mode 100644 packages/article/src/components/ScreenTable/index.vue create mode 100644 packages/article/src/components/ScreenTreeTable/index.vue create mode 100644 packages/article/src/components/Spin/index.vue create mode 100644 packages/article/src/components/TreeTable/data.d.ts create mode 100644 packages/article/src/components/TreeTable/index.vue create mode 100644 packages/article/src/components/TuiEditor/index.vue create mode 100644 packages/article/src/components/TuiEditor/viewer.vue create mode 100644 packages/article/src/composables/useEcharts.ts create mode 100644 packages/article/src/composables/useQueryList.ts create mode 100644 packages/article/src/composables/useQueryVerifyId.ts create mode 100644 packages/article/src/composables/useRestRouter.ts create mode 100644 packages/article/src/composables/useRestStore.ts create mode 100644 packages/article/src/config/i18n.ts create mode 100644 packages/article/src/config/routes.ts create mode 100644 packages/article/src/config/settings.ts create mode 100644 packages/article/src/config/store.ts create mode 100644 packages/article/src/directives/permission/index.ts create mode 100644 packages/article/src/layouts/BlankLayout.vue create mode 100644 packages/article/src/layouts/DashboardLayout/index.vue create mode 100644 packages/article/src/layouts/DashboardLayout/routes.ts create mode 100644 packages/article/src/layouts/DefaultLayout/index.vue create mode 100644 packages/article/src/layouts/DefaultLayout/routes.ts create mode 100644 packages/article/src/layouts/SecurityLayout.vue create mode 100644 packages/article/src/locales/en-US.ts create mode 100644 packages/article/src/locales/zh-CN.ts create mode 100644 packages/article/src/locales/zh-TW.ts create mode 100644 packages/article/src/main.ts create mode 100644 packages/article/src/services/user.ts create mode 100644 packages/article/src/shims-vue.d.ts create mode 100644 packages/article/src/store/global.ts create mode 100644 packages/article/src/store/user.ts create mode 100644 packages/article/src/utils/array.ts create mode 100644 packages/article/src/utils/i18n.ts create mode 100644 packages/article/src/utils/localToken.ts create mode 100644 packages/article/src/utils/mock/require-context.js create mode 100644 packages/article/src/utils/mock/server.js create mode 100644 packages/article/src/utils/object.ts create mode 100644 packages/article/src/utils/request.ts create mode 100644 packages/article/src/utils/routes.ts create mode 100644 packages/article/src/utils/store.ts create mode 100644 packages/article/src/utils/trim.ts create mode 100644 packages/article/src/utils/validate.ts create mode 100644 packages/article/src/views/404/index.vue create mode 100644 packages/article/src/views/add/data.d.ts create mode 100644 packages/article/src/views/add/index.vue create mode 100644 packages/article/src/views/add/locales/en-US.ts create mode 100644 packages/article/src/views/add/locales/zh-CN.ts create mode 100644 packages/article/src/views/add/locales/zh-TW.ts create mode 100644 packages/article/src/views/add/service.ts create mode 100644 packages/article/src/views/analysis/chartcard/data.d.ts create mode 100644 packages/article/src/views/analysis/chartcard/index.vue create mode 100644 packages/article/src/views/analysis/chartcard/locales/en-US.ts create mode 100644 packages/article/src/views/analysis/chartcard/locales/zh-CN.ts create mode 100644 packages/article/src/views/analysis/chartcard/locales/zh-TW.ts create mode 100644 packages/article/src/views/analysis/chartcard/service.ts create mode 100644 packages/article/src/views/analysis/hitcard/data.d.ts create mode 100644 packages/article/src/views/analysis/hitcard/index.vue create mode 100644 packages/article/src/views/analysis/hitcard/locales/en-US.ts create mode 100644 packages/article/src/views/analysis/hitcard/locales/zh-CN.ts create mode 100644 packages/article/src/views/analysis/hitcard/locales/zh-TW.ts create mode 100644 packages/article/src/views/analysis/hitcard/service.ts create mode 100644 packages/article/src/views/category/data.d.ts create mode 100644 packages/article/src/views/category/index.vue create mode 100644 packages/article/src/views/category/locales/en-US.ts create mode 100644 packages/article/src/views/category/locales/zh-CN.ts create mode 100644 packages/article/src/views/category/locales/zh-TW.ts create mode 100644 packages/article/src/views/category/service.ts create mode 100644 packages/article/src/views/edit/data.d.ts create mode 100644 packages/article/src/views/edit/index.vue create mode 100644 packages/article/src/views/edit/locales/en-US.ts create mode 100644 packages/article/src/views/edit/locales/zh-CN.ts create mode 100644 packages/article/src/views/edit/locales/zh-TW.ts create mode 100644 packages/article/src/views/edit/service.ts create mode 100644 packages/article/src/views/home/index.vue create mode 100644 packages/article/src/views/list/components/SearchDrawer/data.d.ts create mode 100644 packages/article/src/views/list/components/SearchDrawer/index.vue create mode 100644 packages/article/src/views/list/data.d.ts create mode 100644 packages/article/src/views/list/index.vue create mode 100644 packages/article/src/views/list/locales/en-US.ts create mode 100644 packages/article/src/views/list/locales/zh-CN.ts create mode 100644 packages/article/src/views/list/locales/zh-TW.ts create mode 100644 packages/article/src/views/list/service.ts create mode 100644 packages/article/src/views/refresh/index.vue create mode 100644 packages/article/tests/unit/example.spec.ts create mode 100644 packages/article/tsconfig.json create mode 100644 packages/article/vue.config.js create mode 100644 packages/links/.browserslistrc create mode 100644 packages/links/.editorconfig create mode 100644 packages/links/.env.development create mode 100644 packages/links/.env.production create mode 100644 packages/links/.eslintignore create mode 100644 packages/links/.eslintrc.js create mode 100644 packages/links/.gitignore create mode 100644 packages/links/LICENSE create mode 100644 packages/links/README.md create mode 100644 packages/links/babel.config.js create mode 100644 packages/links/jest.config.js create mode 100644 packages/links/mock/global.js create mode 100644 packages/links/mock/home.js create mode 100644 packages/links/mock/user.js create mode 100644 packages/links/package.json create mode 100644 packages/links/public/favicon.ico create mode 100644 packages/links/public/index.html create mode 100644 packages/links/src/App.vue create mode 100644 packages/links/src/assets/css/antd-variables.less create mode 100644 packages/links/src/assets/css/global.less create mode 100644 packages/links/src/assets/css/mixin.less create mode 100644 packages/links/src/assets/css/variables.less create mode 100644 packages/links/src/assets/iconsvg/home.svg create mode 100644 packages/links/src/assets/iconsvg/svgo.yml create mode 100644 packages/links/src/assets/images/bg.svg create mode 100644 packages/links/src/assets/images/logo.png create mode 100644 packages/links/src/components/ALink/index.vue create mode 100644 packages/links/src/components/CKEditor/index.vue create mode 100644 packages/links/src/components/Custom/LinksCategorySelect/data.d.ts create mode 100644 packages/links/src/components/Custom/LinksCategorySelect/index.vue create mode 100644 packages/links/src/components/Custom/LinksCategorySelect/service.ts create mode 100644 packages/links/src/components/IconFont/index.ts create mode 100644 packages/links/src/components/IconFont/index.vue create mode 100644 packages/links/src/components/IconSvg/index.ts create mode 100644 packages/links/src/components/IconSvg/index.vue create mode 100644 packages/links/src/components/Permission/index.vue create mode 100644 packages/links/src/components/RestDrawer/index.vue create mode 100644 packages/links/src/components/ScreenTable/data.d.ts create mode 100644 packages/links/src/components/ScreenTable/index.vue create mode 100644 packages/links/src/components/SelectLang/index.vue create mode 100644 packages/links/src/components/TuiEditor/index.vue create mode 100644 packages/links/src/components/TuiEditor/viewer.vue create mode 100644 packages/links/src/composables/useEcharts.ts create mode 100644 packages/links/src/composables/useI18nAntdFormVaildateInfos.ts create mode 100644 packages/links/src/composables/useQueryList.ts create mode 100644 packages/links/src/composables/useQueryVerifyId.ts create mode 100644 packages/links/src/composables/useRestRouter.ts create mode 100644 packages/links/src/composables/useRestStore.ts create mode 100644 packages/links/src/config/i18n.ts create mode 100644 packages/links/src/config/routes.ts create mode 100644 packages/links/src/config/settings.ts create mode 100644 packages/links/src/config/store.ts create mode 100644 packages/links/src/directives/permission/index.ts create mode 100644 packages/links/src/layouts/BlankLayout.vue create mode 100644 packages/links/src/layouts/DashboardLayout/index.vue create mode 100644 packages/links/src/layouts/DashboardLayout/routes.ts create mode 100644 packages/links/src/layouts/DefaultLayout/index.vue create mode 100644 packages/links/src/layouts/DefaultLayout/routes.ts create mode 100644 packages/links/src/layouts/SecurityLayout.vue create mode 100644 packages/links/src/locales/en-US.ts create mode 100644 packages/links/src/locales/zh-CN.ts create mode 100644 packages/links/src/locales/zh-TW.ts create mode 100644 packages/links/src/main.ts create mode 100644 packages/links/src/services/user.ts create mode 100644 packages/links/src/shims-vue.d.ts create mode 100644 packages/links/src/store/global.ts create mode 100644 packages/links/src/store/user.ts create mode 100644 packages/links/src/utils/array.ts create mode 100644 packages/links/src/utils/i18n.ts create mode 100644 packages/links/src/utils/localToken.ts create mode 100644 packages/links/src/utils/mock/require-context.js create mode 100644 packages/links/src/utils/mock/server.js create mode 100644 packages/links/src/utils/object.ts create mode 100644 packages/links/src/utils/request.ts create mode 100644 packages/links/src/utils/routes.ts create mode 100644 packages/links/src/utils/store.ts create mode 100644 packages/links/src/utils/trim.ts create mode 100644 packages/links/src/utils/validate.ts create mode 100644 packages/links/src/views/404/index.vue create mode 100644 packages/links/src/views/analysis/chartcard/data.d.ts create mode 100644 packages/links/src/views/analysis/chartcard/index.vue create mode 100644 packages/links/src/views/analysis/chartcard/locales/en-US.ts create mode 100644 packages/links/src/views/analysis/chartcard/locales/zh-CN.ts create mode 100644 packages/links/src/views/analysis/chartcard/locales/zh-TW.ts create mode 100644 packages/links/src/views/analysis/chartcard/service.ts create mode 100644 packages/links/src/views/analysis/hitcard/data.d.ts create mode 100644 packages/links/src/views/analysis/hitcard/index.vue create mode 100644 packages/links/src/views/analysis/hitcard/locales/en-US.ts create mode 100644 packages/links/src/views/analysis/hitcard/locales/zh-CN.ts create mode 100644 packages/links/src/views/analysis/hitcard/locales/zh-TW.ts create mode 100644 packages/links/src/views/analysis/hitcard/service.ts create mode 100644 packages/links/src/views/category/components/FormDialog/data.d.ts create mode 100644 packages/links/src/views/category/components/FormDialog/index.vue create mode 100644 packages/links/src/views/category/data.d.ts create mode 100644 packages/links/src/views/category/index.vue create mode 100644 packages/links/src/views/category/locales/en-US.ts create mode 100644 packages/links/src/views/category/locales/zh-CN.ts create mode 100644 packages/links/src/views/category/locales/zh-TW.ts create mode 100644 packages/links/src/views/category/service.ts create mode 100644 packages/links/src/views/home/index.vue create mode 100644 packages/links/src/views/list/components/FormDialog/data.d.ts create mode 100644 packages/links/src/views/list/components/FormDialog/index.vue create mode 100644 packages/links/src/views/list/components/SearchDrawer/data.d.ts create mode 100644 packages/links/src/views/list/components/SearchDrawer/index.vue create mode 100644 packages/links/src/views/list/data.d.ts create mode 100644 packages/links/src/views/list/index.vue create mode 100644 packages/links/src/views/list/locales/en-US.ts create mode 100644 packages/links/src/views/list/locales/zh-CN.ts create mode 100644 packages/links/src/views/list/locales/zh-TW.ts create mode 100644 packages/links/src/views/list/service.ts create mode 100644 packages/links/src/views/refresh/index.vue create mode 100644 packages/links/tests/unit/example.spec.ts create mode 100644 packages/links/tsconfig.json create mode 100644 packages/links/vue.config.js create mode 100644 packages/system/.browserslistrc create mode 100644 packages/system/.editorconfig create mode 100644 packages/system/.env.development create mode 100644 packages/system/.env.production create mode 100644 packages/system/.eslintignore create mode 100644 packages/system/.eslintrc.js create mode 100644 packages/system/.gitignore create mode 100644 packages/system/LICENSE create mode 100644 packages/system/README.md create mode 100644 packages/system/babel.config.js create mode 100644 packages/system/jest.config.js create mode 100644 packages/system/mock/global.js create mode 100644 packages/system/mock/home.js create mode 100644 packages/system/mock/user.js create mode 100644 packages/system/package.json create mode 100644 packages/system/public/favicon.ico create mode 100644 packages/system/public/index.html create mode 100644 packages/system/src/App.vue create mode 100644 packages/system/src/assets/css/element-variables.scss create mode 100644 packages/system/src/assets/css/global.scss create mode 100644 packages/system/src/assets/css/mixin.scss create mode 100644 packages/system/src/assets/css/variables.scss create mode 100644 packages/system/src/assets/iconsvg/home.svg create mode 100644 packages/system/src/assets/iconsvg/plus.svg create mode 100644 packages/system/src/assets/iconsvg/svgo.yml create mode 100644 packages/system/src/assets/images/bg.svg create mode 100644 packages/system/src/assets/images/logo.png create mode 100644 packages/system/src/components/ALink/index.vue create mode 100644 packages/system/src/components/CKEditor/index.vue create mode 100644 packages/system/src/components/Custom/ApiCascader/index.vue create mode 100644 packages/system/src/components/Custom/ApiCascader/service.ts create mode 100644 packages/system/src/components/Custom/FormFooterToolbar/index.vue create mode 100644 packages/system/src/components/Custom/MenuCascader/index.vue create mode 100644 packages/system/src/components/Custom/MenuCascader/service.ts create mode 100644 packages/system/src/components/Custom/MenuTypeSelect/data.d.ts create mode 100644 packages/system/src/components/Custom/MenuTypeSelect/index.vue create mode 100644 packages/system/src/components/Custom/MenuTypeSelect/locales/en-US.ts create mode 100644 packages/system/src/components/Custom/MenuTypeSelect/locales/zh-CN.ts create mode 100644 packages/system/src/components/Custom/MenuTypeSelect/locales/zh-TW.ts create mode 100644 packages/system/src/components/Custom/PageHeader/index.vue create mode 100644 packages/system/src/components/Custom/RoleSelect/data.d.ts create mode 100644 packages/system/src/components/Custom/RoleSelect/index.vue create mode 100644 packages/system/src/components/Custom/RoleSelect/service.ts create mode 100644 packages/system/src/components/Custom/ServerImage/Dialog/data.d.ts create mode 100644 packages/system/src/components/Custom/ServerImage/Dialog/index.vue create mode 100644 packages/system/src/components/Custom/ServerImage/Dialog/locales/en-US.ts create mode 100644 packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts create mode 100644 packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts create mode 100644 packages/system/src/components/Custom/ServerImage/Dialog/service.ts create mode 100644 packages/system/src/components/Custom/ServerImage/SelectionList/data.d.ts create mode 100644 packages/system/src/components/Custom/ServerImage/SelectionList/index.vue create mode 100644 packages/system/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts create mode 100644 packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts create mode 100644 packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts create mode 100644 packages/system/src/components/IconFont/index.ts create mode 100644 packages/system/src/components/IconFont/index.vue create mode 100644 packages/system/src/components/IconSvg/index.ts create mode 100644 packages/system/src/components/IconSvg/index.vue create mode 100644 packages/system/src/components/Permission/index.vue create mode 100644 packages/system/src/components/RestElDrawer/index.vue create mode 100644 packages/system/src/components/Result/index.vue create mode 100644 packages/system/src/components/Result/svg/error.vue create mode 100644 packages/system/src/components/Result/svg/info.vue create mode 100644 packages/system/src/components/Result/svg/noFound.vue create mode 100644 packages/system/src/components/Result/svg/serverError.vue create mode 100644 packages/system/src/components/Result/svg/success.vue create mode 100644 packages/system/src/components/Result/svg/unauthorized.vue create mode 100644 packages/system/src/components/Result/svg/warning.vue create mode 100644 packages/system/src/components/ScreenTable/data.d.ts create mode 100644 packages/system/src/components/ScreenTable/index.vue create mode 100644 packages/system/src/components/ScreenTreeTable/index.vue create mode 100644 packages/system/src/components/Spin/index.vue create mode 100644 packages/system/src/components/TreeTable/data.d.ts create mode 100644 packages/system/src/components/TreeTable/index.vue create mode 100644 packages/system/src/components/TuiEditor/index.vue create mode 100644 packages/system/src/components/TuiEditor/viewer.vue create mode 100644 packages/system/src/composables/useEcharts.ts create mode 100644 packages/system/src/composables/useQueryList.ts create mode 100644 packages/system/src/composables/useQueryVerifyId.ts create mode 100644 packages/system/src/composables/useRestRouter.ts create mode 100644 packages/system/src/composables/useRestStore.ts create mode 100644 packages/system/src/config/i18n.ts create mode 100644 packages/system/src/config/routes.ts create mode 100644 packages/system/src/config/settings.ts create mode 100644 packages/system/src/config/store.ts create mode 100644 packages/system/src/directives/permission/index.ts create mode 100644 packages/system/src/layouts/BlankLayout.vue create mode 100644 packages/system/src/layouts/DashboardLayout/index.vue create mode 100644 packages/system/src/layouts/DashboardLayout/routes.ts create mode 100644 packages/system/src/layouts/DefaultLayout/index.vue create mode 100644 packages/system/src/layouts/DefaultLayout/routes.ts create mode 100644 packages/system/src/layouts/SecurityLayout.vue create mode 100644 packages/system/src/locales/en-US.ts create mode 100644 packages/system/src/locales/zh-CN.ts create mode 100644 packages/system/src/locales/zh-TW.ts create mode 100644 packages/system/src/main.ts create mode 100644 packages/system/src/services/user.ts create mode 100644 packages/system/src/shims-vue.d.ts create mode 100644 packages/system/src/store/global.ts create mode 100644 packages/system/src/store/user.ts create mode 100644 packages/system/src/utils/array.ts create mode 100644 packages/system/src/utils/formatData.ts create mode 100644 packages/system/src/utils/i18n.ts create mode 100644 packages/system/src/utils/localToken.ts create mode 100644 packages/system/src/utils/mock/require-context.js create mode 100644 packages/system/src/utils/mock/server.js create mode 100644 packages/system/src/utils/object.ts create mode 100644 packages/system/src/utils/request.ts create mode 100644 packages/system/src/utils/routes.ts create mode 100644 packages/system/src/utils/store.ts create mode 100644 packages/system/src/utils/trim.ts create mode 100644 packages/system/src/utils/validate.ts create mode 100644 packages/system/src/views/404/index.vue create mode 100644 packages/system/src/views/accountlist/components/FormDialog/data.d.ts create mode 100644 packages/system/src/views/accountlist/components/FormDialog/index.vue create mode 100644 packages/system/src/views/accountlist/data.d.ts create mode 100644 packages/system/src/views/accountlist/index.vue create mode 100644 packages/system/src/views/accountlist/locales/en-US.ts create mode 100644 packages/system/src/views/accountlist/locales/zh-CN.ts create mode 100644 packages/system/src/views/accountlist/locales/zh-TW.ts create mode 100644 packages/system/src/views/accountlist/service.ts create mode 100644 packages/system/src/views/analysis/chartcard/index.vue create mode 100644 packages/system/src/views/apilist/components/FormDialog/data.d.ts create mode 100644 packages/system/src/views/apilist/components/FormDialog/index.vue create mode 100644 packages/system/src/views/apilist/data.d.ts create mode 100644 packages/system/src/views/apilist/index.vue create mode 100644 packages/system/src/views/apilist/locales/en-US.ts create mode 100644 packages/system/src/views/apilist/locales/zh-CN.ts create mode 100644 packages/system/src/views/apilist/locales/zh-TW.ts create mode 100644 packages/system/src/views/apilist/service.ts create mode 100644 packages/system/src/views/home/index.vue create mode 100644 packages/system/src/views/menulist/components/FormDialog/data.d.ts create mode 100644 packages/system/src/views/menulist/components/FormDialog/index.vue create mode 100644 packages/system/src/views/menulist/data.d.ts create mode 100644 packages/system/src/views/menulist/index.vue create mode 100644 packages/system/src/views/menulist/locales/en-US.ts create mode 100644 packages/system/src/views/menulist/locales/zh-CN.ts create mode 100644 packages/system/src/views/menulist/locales/zh-TW.ts create mode 100644 packages/system/src/views/menulist/service.ts create mode 100644 packages/system/src/views/refresh/index.vue create mode 100644 packages/system/src/views/rolelist/components/FormDialog/data.d.ts create mode 100644 packages/system/src/views/rolelist/components/FormDialog/index.vue create mode 100644 packages/system/src/views/rolelist/data.d.ts create mode 100644 packages/system/src/views/rolelist/index.vue create mode 100644 packages/system/src/views/rolelist/locales/en-US.ts create mode 100644 packages/system/src/views/rolelist/locales/zh-CN.ts create mode 100644 packages/system/src/views/rolelist/locales/zh-TW.ts create mode 100644 packages/system/src/views/rolelist/service.ts create mode 100644 packages/system/tests/unit/example.spec.ts create mode 100644 packages/system/tsconfig.json create mode 100644 packages/system/vue.config.js create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 scripts/config/constants.ts create mode 100644 scripts/config/index.ts create mode 100644 scripts/config/paths.ts create mode 100644 scripts/gulpbuild.ts create mode 100644 scripts/gulpinit.ts create mode 100644 scripts/gulpserve.ts create mode 100644 scripts/server/env.js create mode 100644 scripts/server/qiankun.ts create mode 100644 scripts/server/qiankunActions.ts create mode 100644 scripts/utils/gulp.ts create mode 100644 scripts/utils/process.ts create mode 100644 tsconfig.json create mode 100644 typings/global.d.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ed19d9c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..7f27c18 --- /dev/null +++ b/.env.development @@ -0,0 +1,43 @@ +# 运行环境 +MICRO_NODE_ENV = 'development' + +# 开发环境是否启动所有主框架 all或/scripts/config/index.ts 主框架配置下标 +MICRO_SERVE_MAIN=all + +# 构建子项目上级目录名 +MICRO_BUILD_CHILD_NAME=child + + +# 子项目 system +# 子项目目录名 +MICRO_SYSTEM_ROOT_DIR=system +# 开发环境端口 +MICRO_SYSTEM_PORT=8076 +# 开发localhost或者ip +MICRO_SYSTEM_HOST=localhost + + +# 子项目 article +# 子项目目录名 +MICRO_ARTICLE_ROOT_DIR=article +# 开发环境端口 +MICRO_ARTICLE_PORT=8077 +# 开发localhost或者ip +MICRO_ARTICLE_HOST=localhost + + +# 子项目 links +# 子项目目录名 +MICRO_LINKS_ROOT_DIR=links +# 开发环境端口 +MICRO_LINKS_PORT=8078 +# 开发localhost或者ip +MICRO_LINKS_HOST=localhost + + + + + + + + diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..60f42cb --- /dev/null +++ b/.env.production @@ -0,0 +1,39 @@ +# 运行环境 +MICRO_NODE_ENV = 'production' + +# 生成环境是否构建所有主框架 all或/scripts/config/index.ts 主框架配置下标 +MICRO_BUILD_MAIN=all + +# 构建子项目上级目录名 +MICRO_BUILD_CHILD_NAME=child + + +# 子项目 system +# 子项目目录名 +MICRO_SYSTEM_ROOT_DIR=system +# 开发环境端口 +MICRO_SYSTEM_PORT=8076 +# 开发localhost或者ip +MICRO_SYSTEM_HOST=localhost + + +# 子项目 article +# 子项目目录名 +MICRO_ARTICLE_ROOT_DIR=article +# 开发环境端口 +MICRO_ARTICLE_PORT=8077 +# 开发localhost或者ip +MICRO_ARTICLE_HOST=localhost + + +# 子项目 links +# 子项目目录名 +MICRO_LINKS_ROOT_DIR=links +# 开发环境端口 +MICRO_LINKS_PORT=8078 +# 开发localhost或者ip +MICRO_LINKS_HOST=localhost + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..538da4e --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Editor directories and files +.idea + +# Package Manager +node_modules +.pnpm-debug.log* + +# System +.DS_Store + +# Bundle +dist +coverage + +# local env files +*.local diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..9bf9395 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +shamefully-hoist = true diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4cbef1c --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2022 LiQingSong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/README.md b/README.md index 8b8d8bd..e4642a7 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,125 @@ # admin-vue3-micro-qiankun -Micro front-end Admin based on Qiankun, vue3.x, admin-element-vue, admin-antd-vue project architecture + +`admin-vue3-micro-qiankun`是一个微前端后台解决方案,它基于 [Qiankun.js](https://qiankun.umijs.org/) 结合 [admin-element-vue](http://admin-element-vue.liqingsong.cc/) 和 [admin-antd-vue](http://admin-antd-vue.liqingsong.cc)实现。 + + +## Demo + +| [main-demo](http://main-demo.admin-vue3-micro-qiankun.liqingsong.cc/) | +:-------------------------: +| [main-antd-demo](http://main-antd-demo.admin-vue3-micro-qiankun.liqingsong.cc/) | +| ![Home](http://admin-vue3-micro-qiankun.liqingsong.cc/images/index.png) | + +## 使用文档 + + - [http://admin-vue3-micro-qiankun.liqingsong.cc](http://admin-vue3-micro-qiankun.liqingsong.cc) + - [Github](https://github.com/lqsong/admin-vue3-micro-qiankun) + - [Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun) + - [http://admin-element-vue.liqingsong.cc/tsv2/](http://admin-element-vue.liqingsong.cc/tsv2/) + - [http://admin-antd-vue.liqingsong.cc](http://dmin-antd-vue.liqingsong.cc) + +## 后台前端解决方案列表 + + - admin-element-vue([GitHub](https://github.com/lqsong/admin-element-vue)、[Gitee](https://gitee.com/lqsong/admin-element-vue)) + - admin-antd-vue([GitHub](https://github.com/lqsong/admin-antd-vue)、[Gitee](https://gitee.com/lqsong/admin-antd-vue)) + - admin-antd-react([GitHub](https://github.com/lqsong/admin-antd-react)、[Gitee](https://gitee.com/lqsong/admin-antd-react)) + - electron-admin-element-vue([GitHub](https://github.com/lqsong/electron-admin-element-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-element-vue)) + - electron-admin-antd-vue([GitHub](https://github.com/lqsong/electron-admin-antd-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-vue)) + - electron-admin-antd-react([GitHub](https://github.com/lqsong/electron-admin-antd-react)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-react)) + - admin-vue3-micro-qiankun([GitHub](https://github.com/lqsong/admin-vue3-micro-qiankun)、[Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun)) + +## 功能 + +``` +- 登录 / 注销 / 注册 + +- 权限验证 + - 页面权限 + - 按钮操作 + - 权限配置 + +- 全局功能 + - 国际化多语言 + - 黑白主题 + - 动态侧边栏(支持多级路由嵌套) + - 动态面包屑(支持自定义配置) + - tabNav + - Svg Sprite 图标 + - Mock 数据 + - 权限验证 + +- 综合实例 + - 引导页 + - main主框架(基于admin-element-vue调整) + - main-antd主框架(基于admin-antd-vue调整) + - System子项目(基于admin-element-vue调整) + - Article子项目(基于admin-element-vue调整) + - Links子项目 (基于admin-antd-vue调整) +``` + + +## 项目设置 + +### 一、Install dependencies, + +``` +$ pnpm install +``` + +> 请使用 pnpm , **[pnpm的安装与使用](http://liqingsong.cc/article/detail/26)** 。 + + +### 二、Compiles and hot-reloads for development + +``` +$ pnpm run serve + +# or + +$ pnpm run serve:main +$ pnpm run serve:article +``` + + +### 三、构建与发布 + +1、构建: + +```sh +pnpm run build +``` + + +2、上传到服务器,以`nginx`配置为例: + +```sh +server { + listen 8080; + server_name localhost; + + location / { + # root html; + # index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + location /child/system { + # root html; + # index index.html index.htm; + try_files $uri $uri/ /child/system/index.html; + } + # article 和 links 等其他子模块的history 配置同上 +} + +``` + + +## 捐赠 + +如果你觉得这个项目帮助到了你,请帮助点击 Star,你也可以请作者喝咖啡表示鼓励. + +**ALIPAY** | **WECHAT** +:-------------------------:|:-------------------------: +![Alipay](http://uploads.liqingsong.cc/20210430/f62d2436-8d92-407d-977f-35f1e4b891fc.png) | ![Wechat](http://uploads.liqingsong.cc/20210430/3e24efa9-8e79-4606-9bd9-8215ce1235ac.png) + + diff --git a/components/README.md b/components/README.md new file mode 100644 index 0000000..bd9a8b6 --- /dev/null +++ b/components/README.md @@ -0,0 +1,2 @@ +# Components +components diff --git a/main-antd/.browserslistrc b/main-antd/.browserslistrc new file mode 100644 index 0000000..214388f --- /dev/null +++ b/main-antd/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/main-antd/.editorconfig b/main-antd/.editorconfig new file mode 100644 index 0000000..ed19d9c --- /dev/null +++ b/main-antd/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/main-antd/.env.development b/main-antd/.env.development new file mode 100644 index 0000000..4b1f923 --- /dev/null +++ b/main-antd/.env.development @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'development' + +# devServer port +VUE_APP_PORT=9090 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = true + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/main-antd/.env.production b/main-antd/.env.production new file mode 100644 index 0000000..d621258 --- /dev/null +++ b/main-antd/.env.production @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'production' + +# devServer port +VUE_APP_PORT=9090 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = false + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/main-antd/.eslintignore b/main-antd/.eslintignore new file mode 100644 index 0000000..87160f7 --- /dev/null +++ b/main-antd/.eslintignore @@ -0,0 +1 @@ +../scripts diff --git a/main-antd/.eslintrc.js b/main-antd/.eslintrc.js new file mode 100644 index 0000000..875ed93 --- /dev/null +++ b/main-antd/.eslintrc.js @@ -0,0 +1,42 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/typescript/recommended' + ], + parserOptions: { + ecmaVersion: 2020 + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + '@typescript-eslint/no-explicit-any': ['off'], + '@typescript-eslint/no-unused-vars': ['off'], + '@typescript-eslint/ban-types': ['off'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + }, + { + files: [ + './mock/*.{j,t}s?(x)', + './src/utils/mock/*.{j,t}s?(x)' + ], + rules: { + 'no-var': ['off'], + '@typescript-eslint/no-var-requires': ['off'], + } + } + ] +} diff --git a/main-antd/.gitignore b/main-antd/.gitignore new file mode 100644 index 0000000..5d55bb1 --- /dev/null +++ b/main-antd/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +yarn.lock + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/main-antd/LICENSE b/main-antd/LICENSE new file mode 100644 index 0000000..0f21b74 --- /dev/null +++ b/main-antd/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 LiQingSong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/main-antd/README.md b/main-antd/README.md new file mode 100644 index 0000000..763d421 --- /dev/null +++ b/main-antd/README.md @@ -0,0 +1,49 @@ +# main-antd + +main 基于 admin-antd-vue-typescript ([github](https://github.com/lqsong/admin-antd-vue/)、[gitee](https://gitee.com/lqsong/admin-antd-vue/))开发 + +## Demo + +| [main-antd-demo](http://main-antd-demo.admin-vue3-micro-qiankun.liqingsong.cc/) | +:-------------------------: +| ![Home](http://admin-vue3-micro-qiankun.liqingsong.cc/images/index.png) | + + +## 使用文档 + + - [http://admin-vue3-micro-qiankun.liqingsong.cc](http://admin-vue3-micro-qiankun.liqingsong.cc) + - [Github](https://github.com/lqsong/admin-vue3-micro-qiankun) + - [Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun) + - [http://admin-element-vue.liqingsong.cc/tsv2/](http://admin-element-vue.liqingsong.cc/tsv2/) + - [http://admin-antd-vue.liqingsong.cc](http://dmin-antd-vue.liqingsong.cc) + + +## 后台前端解决方案列表 + + - admin-element-vue([GitHub](https://github.com/lqsong/admin-element-vue)、[Gitee](https://gitee.com/lqsong/admin-element-vue)) + - admin-antd-vue([GitHub](https://github.com/lqsong/admin-antd-vue)、[Gitee](https://gitee.com/lqsong/admin-antd-vue)) + - admin-antd-react([GitHub](https://github.com/lqsong/admin-antd-react)、[Gitee](https://gitee.com/lqsong/admin-antd-react)) + - electron-admin-element-vue([GitHub](https://github.com/lqsong/electron-admin-element-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-element-vue)) + - electron-admin-antd-vue([GitHub](https://github.com/lqsong/electron-admin-antd-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-vue)) + - electron-admin-antd-react([GitHub](https://github.com/lqsong/electron-admin-antd-react)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-react)) + - admin-vue3-micro-qiankun([GitHub](https://github.com/lqsong/admin-vue3-micro-qiankun)、[Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun)) + + + +## 自定义配置 + +### **(建议)** 本地或开发模式下,不要直接修改 '.env.development' +复制 '.env.development' 重命名为 ' .env.development.local' , 修改对应的参数. + +### **(建议)** 生产模式下,不要直接修改 '.env.production' +复制 '.env.production' 重命名为 ' .env.production.local' , 修改对应的参数. + + +## 捐赠 + +如果你觉得这个项目帮助到了你,请帮助点击 Star,你也可以请作者喝咖啡表示鼓励. + +**ALIPAY** | **WECHAT** +:-------------------------:|:-------------------------: +![Alipay](http://uploads.liqingsong.cc/20210430/f62d2436-8d92-407d-977f-35f1e4b891fc.png) | ![Wechat](http://uploads.liqingsong.cc/20210430/3e24efa9-8e79-4606-9bd9-8215ce1235ac.png) + diff --git a/main-antd/babel.config.js b/main-antd/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/main-antd/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/main-antd/jest.config.js b/main-antd/jest.config.js new file mode 100644 index 0000000..d7f13cc --- /dev/null +++ b/main-antd/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel', + transform: { + '^.+\\.vue$': 'vue-jest' + } +} diff --git a/main-antd/mock/global.js b/main-antd/mock/global.js new file mode 100644 index 0000000..48dfcda --- /dev/null +++ b/main-antd/mock/global.js @@ -0,0 +1,39 @@ +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`POST ${VUE_APP_APIHOST || ''}/uploads`] = (req, res) => { + res.send({ + code: 0, + data: { + id: 1, + url: + 'http://uploads.liqingsong.cc/20200531/583057e8-8bab-4eee-b5a0-bec915089c0c.jpg', + name: 'xcx.jpg', + }, + msg: '', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/500`] = (req, res) => { + res.status(500).send({ + timestamp: 1513932555104, + status: 500, + error: 'error', + message: 'error', + path: '/500', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/404`] = (req, res) => { + res.status(404).send({ + timestamp: 1513932643431, + status: 404, + error: 'Not Found', + message: 'No message available', + path: '/404', + }); +}; + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/main-antd/mock/home.js b/main-antd/mock/home.js new file mode 100644 index 0000000..7520ea8 --- /dev/null +++ b/main-antd/mock/home.js @@ -0,0 +1,140 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles/dailynew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + day: mockjs.mock('@float(-10,15,0,2)'), + week: mockjs.mock('@float(-10,15,0,2)'), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/works/weeknew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|7': ['03-01'], + 'num|7': ['@integer(0,3)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/topics/monthnew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|30': ['03-01'], + 'num|30': ['@integer(0,2)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/links/annualnew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|12': ['2019-03'], + 'num|12': ['@integer(0,8)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/searchs/keywords`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + name: '@ctitle(4,8)', + hit: '@integer(1000,10000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/tags`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + name: '@ctitle(4,6)', + id: '@integer(1)', + pinyin: '@word(10,20)', + hit: '@integer(1000,10000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + category: { + id: '@integer(1)', + alias: '@word(4)', + name: '@cword(4)', + }, + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/works`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/main-antd/mock/user.js b/main-antd/mock/user.js new file mode 100644 index 0000000..45bf6fc --- /dev/null +++ b/main-antd/mock/user.js @@ -0,0 +1,89 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const ajaxHeadersTokenKey = 'x-token'; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST}/user/info`] = (req, res) => { + const headers = req.headers; + if (headers[ajaxHeadersTokenKey] === 'admin') { + res.send({ + code: 0, + data: { + id: 1, + name: 'Admins', + avatar: '', + roles: ['admin'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'user') { + res.send({ + code: 0, + data: { + id: 2, + name: 'Users', + avatar: '', + roles: ['user'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'test') { + res.send({ + code: 0, + data: { + id: 3, + name: 'Tests', + avatar: '', + roles: ['test'], + }, + }); + } else { + res.send({ + code: 10002, + data: {}, + msg: '未登录', + }); + } + +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/user/message`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock('@integer(0,99)'), + }); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/login`] = (req, res) => { + const { password, username } = req.body; + const send = { code: 0, data: {}, msg: '' }; + if (username === 'admin' && password === '123456') { + send['data'] = { + token: 'admin', + }; + } else if (username === 'user' && password === '123456') { + send['data'] = { + token: 'user', + }; + } else if (username === 'test' && password === '123456') { + send['data'] = { + token: 'test', + }; + } else { + send['code'] = 201; + send['msg'] = 'Wrong username or password'; + } + + res.send(send); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/register`] = (req, res) => { + res.send({ + code: 0, + data: '', + msg: '', + }); +}; + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/main-antd/package.json b/main-antd/package.json new file mode 100644 index 0000000..6c701aa --- /dev/null +++ b/main-antd/package.json @@ -0,0 +1,83 @@ +{ + "name": "admin-vue3-micro-qiankun", + "description": "Micro front-end Admin based on Qiankun, vue3.x, admin-element-vue, admin-antd-vue project architecture", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint", + "svgo": "svgo -f src/assets/iconsvg --config=src/assets/iconsvg/svgo.yml" + }, + "dependencies": { + "@ckeditor/ckeditor5-build-decoupled-document": "^23.1.0", + "@ckeditor/ckeditor5-vue": "^2.0.1", + "@toast-ui/editor": "^2.5.4", + "ant-design-vue": "^2.2.8", + "axios": "^0.21.4", + "core-js": "^3.19.3", + "echarts": "^4.9.0", + "localforage": "^1.10.0", + "lodash.debounce": "^4.0.8", + "nprogress": "^0.2.0", + "path-to-regexp": "^6.2.0", + "vue": "^3.2.24", + "vue-i18n": "^9.1.9", + "vue-router": "^4.0.12", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@types/echarts": "^4.9.12", + "@types/jest": "^24.9.1", + "@types/lodash.debounce": "^4.0.6", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", + "@vue/cli-plugin-babel": "~4.5.15", + "@vue/cli-plugin-eslint": "~4.5.15", + "@vue/cli-plugin-router": "~4.5.15", + "@vue/cli-plugin-typescript": "~4.5.15", + "@vue/cli-plugin-unit-jest": "~4.5.15", + "@vue/cli-plugin-vuex": "~4.5.15", + "@vue/cli-service": "~4.5.15", + "@vue/compiler-sfc": "^3.2.24", + "@vue/eslint-config-typescript": "^7.0.0", + "@vue/test-utils": "^2.0.0-rc.17", + "body-parser": "^1.19.0", + "chokidar": "^3.5.2", + "eslint": "^6.8.0", + "eslint-plugin-vue": "^7.20.0", + "less": "^3.13.1", + "less-loader": "^5.0.0", + "lint-staged": "^9.5.0", + "mockjs": "^1.1.0", + "node-dir": "^0.1.17", + "svg-sprite-loader": "^5.2.1", + "svgo": "^1.3.2", + "svgo-loader": "^2.2.2", + "typescript": "~4.1.6", + "vue-jest": "^5.0.0-alpha.10" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "keywords": [ + "vue", + "vue3", + "vue3.0", + "vue3.x", + "typescript", + "admin", + "template", + "antd", + "antdv", + "Ant Design", + "Ant Design Vue" + ], + "lint-staged": { + "*.{js,jsx,vue,ts,tsx}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/main-antd/public/favicon.ico b/main-antd/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3827b09c79035443036c7679a50b6b1b0fc08a8 GIT binary patch literal 4286 zcmb`Ldr(!^6^Bozl4d3`slj&?l!qFl;v8oQG!+Ue z@5d#IQ4q0X#0T0D6_kfyB_pjG+jLs7{UeNYCetx(IvFN1;`#O4=Ws9g!u`Y89_C}M zv-eu-xAs2!+{<8D_wh4kjAedXmEW+ep_XM$0EVpDV8)$`xvzRDBh-TXVG1NcwbDb| zpcB-C@!Om^H^#)8oUbb9i`Uk{7KFe|DAU%^4(fG-f-~4VZelu!H#sx4EtDE}--ouN zyA8Gv4#RrjGtfO^a!n0W%hdF(FPNiDVzP%?*jQ*KURXKS`1ek0Pfb%hm^8XW+;wLU znXjxN?V$e9LpJ+w$inxM-FG}#u2XY9&&JX6Z$i1OIS2jRA+gwYP(N~w-bg8Js+9Pm z?6s?4bq}kgw|^|9GG}6Phz(Z5t!*^WGH;1{DIfj(q2bCKdJz-|z2ps}_S3RgC&*s> zp6rEtWiO}*WMMgTJ7lkVo7iWhTypYEZr^&2MmXb+xC)0^DjGHb>rnwYKFBLHxuaOy zBH2p|WG~ty`<2~+EaKh=^DmdlUQ#3_yyE5-P@_Md9!*Og^gY97!A(#A1*6ekf_5=A zS=$oU-h;5WmX{s(3 z-(@-0p+H)eul<{9wLhg6pS@XL=&}s!P~=!`{JB(2?f#T%$M6u9jEK?B;Wy|*SeFud z&7Q&Y-XeQtCT#D)_*v4*bhWR`RLs7AI<&_#wjx9JiX6!94||ohSK-`v>C8!58mSM%~-|MF0mJ*pFJB5YL~IrUfNXgSSKie z%NmXKeaU%VcFJo~%Bxrd&u`;geZDzN3#%G5q*)pU8GG}TzPCU_ zo20?qFJR8ZD0v>|htJ1%ehG21llgqi`W`yy_tpA7stv@|0(>0zb{;FWU0hbqaC-Vo&Id)XhA4!o{ zr6sk^?mj0DM1P>;o3RMyqpon&s;YEn+mEEJUS8zf&p-oxqjk7P?=afO!mB|692_U* z({Jt^zQ<rA2Ae*%Nx=uhK+FXgsGc3+M9OS;wxYB~#O1!)P8yyLxO4+yM1LFGtve9n*C3 z*cLr?y-Sn-F3tP+Q(ddzTzaOnKU3J~2`of=yT>PuJU6csg=Yvtw34hK&2*$vh>IQPt(KOm;pf+NF&PIAbf%Noqgz<7HiwZ(CV}6w4?}fv} zn)RH8GyU+OKY)4nZ=kwJOLdXqs*k(~3d$+Q53!H?d4~I-JO~xcSE6NN>w4;Vt*LAL zIy8(Hn%+wd=r=+`WULya+Cf2SAm6O%1Ugmd`(wsxnKv>1`3-)x8Y0^r4Wn1zt8ebR#kyJF-CpFGK0rIyRwN(CfV6g7-^5!>D>l12v>l-bjX|(?fYdNLH literal 0 HcmV?d00001 diff --git a/main-antd/public/index.html b/main-antd/public/index.html new file mode 100644 index 0000000..4123528 --- /dev/null +++ b/main-antd/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/main-antd/src/App.vue b/main-antd/src/App.vue new file mode 100644 index 0000000..1376489 --- /dev/null +++ b/main-antd/src/App.vue @@ -0,0 +1,26 @@ + + \ No newline at end of file diff --git a/main-antd/src/assets/css/antd-variables.less b/main-antd/src/assets/css/antd-variables.less new file mode 100644 index 0000000..a86c8eb --- /dev/null +++ b/main-antd/src/assets/css/antd-variables.less @@ -0,0 +1,18 @@ +// 此文件针对 ant-design 定制主题: +@primary-color: #1890ff; // 全局主色 +@link-color: #1890ff; // 链接色 +@success-color: #52c41a; // 成功色 +@warning-color: #faad14; // 警告色 +@error-color: #f5222d; // 错误色 +@font-size-base: 14px; // 主字号 +@heading-color: rgba(0, 0, 0, 0.85); // 标题色 +@text-color: rgba(0, 0, 0, 0.65); // 主文本色 +@text-color-secondary: rgba(0, 0, 0, 0.45); // 次文本色 +@disabled-color: rgba(0, 0, 0, 0.25); // 失效色 +@border-radius-base: 2px; // 组件/浮层圆角 +@border-color-base: #d9d9d9; // 边框色 +@box-shadow-base: 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05); // 浮层阴影 + +// Menu +@menu-collapsed-width: 54px; diff --git a/main-antd/src/assets/css/global.less b/main-antd/src/assets/css/global.less new file mode 100644 index 0000000..45dd1bb --- /dev/null +++ b/main-antd/src/assets/css/global.less @@ -0,0 +1,37 @@ +@import '~ant-design-vue/dist/antd.less'; +@import './antd-variables.less'; +@import './variables.less'; +@import './mixin.less'; + +#nprogress .bar { + background: @primary-color !important; +} + +.flex-wrap-wrap { + flex-wrap: wrap; +} + +.border-solid-transparent{ + border: solid 1px transparent; +} + +.text-align-right { + text-align: right; +} + +.float-right { + float: right; +} + +.padding-t10 { + padding-top: 10px; +} + +.cursor-pointer { + cursor: pointer; +} + +.width-200 { + width: 200px !important; +} + diff --git a/main-antd/src/assets/css/mixin.less b/main-antd/src/assets/css/mixin.less new file mode 100644 index 0000000..492a45d --- /dev/null +++ b/main-antd/src/assets/css/mixin.less @@ -0,0 +1,28 @@ +.scrollbar( + @thumb-background: hsla(0,0%,100%,.2), + @thumb-shadow: hsla(0,0%,100%,.05), + @track-background:hsla(0,0%,100%,.15), + @track-shadow: rgba(37,37,37,.05) +) { + ::-webkit-scrollbar { + width: 6px; + height: 6px; + } + ::-webkit-scrollbar-thumb { + background: @thumb-background; + border-radius: 3px; + box-shadow: inset 0 0 5px @thumb-shadow; + } + ::-webkit-scrollbar-track { + background: @track-background; + border-radius: 3px; + box-shadow: inset 0 0 5px rgba(37,37,37,.05); + } +} + +.scrollbar-light { + .scrollbar( + hsla(0,0%,0%,.2), hsla(0,0%,0%,.05), + hsla(0,0%,0%,.15), rgba(255,255,255,.05) + ) +} diff --git a/main-antd/src/assets/css/variables.less b/main-antd/src/assets/css/variables.less new file mode 100644 index 0000000..e69de29 diff --git a/main-antd/src/assets/iconsvg/arrow-down.svg b/main-antd/src/assets/iconsvg/arrow-down.svg new file mode 100644 index 0000000..e908c7c --- /dev/null +++ b/main-antd/src/assets/iconsvg/arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/arrow-left.svg b/main-antd/src/assets/iconsvg/arrow-left.svg new file mode 100644 index 0000000..a67bac0 --- /dev/null +++ b/main-antd/src/assets/iconsvg/arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/arrow-left2.svg b/main-antd/src/assets/iconsvg/arrow-left2.svg new file mode 100644 index 0000000..91e12cd --- /dev/null +++ b/main-antd/src/assets/iconsvg/arrow-left2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/arrow-right.svg b/main-antd/src/assets/iconsvg/arrow-right.svg new file mode 100644 index 0000000..e5ae955 --- /dev/null +++ b/main-antd/src/assets/iconsvg/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/arrow-right2.svg b/main-antd/src/assets/iconsvg/arrow-right2.svg new file mode 100644 index 0000000..9afed8e --- /dev/null +++ b/main-antd/src/assets/iconsvg/arrow-right2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/arrow-up.svg b/main-antd/src/assets/iconsvg/arrow-up.svg new file mode 100644 index 0000000..af1f625 --- /dev/null +++ b/main-antd/src/assets/iconsvg/arrow-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/close.svg b/main-antd/src/assets/iconsvg/close.svg new file mode 100644 index 0000000..454f992 --- /dev/null +++ b/main-antd/src/assets/iconsvg/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/close2.svg b/main-antd/src/assets/iconsvg/close2.svg new file mode 100644 index 0000000..d460e59 --- /dev/null +++ b/main-antd/src/assets/iconsvg/close2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/home.svg b/main-antd/src/assets/iconsvg/home.svg new file mode 100644 index 0000000..d0c28bf --- /dev/null +++ b/main-antd/src/assets/iconsvg/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/language-outline.svg b/main-antd/src/assets/iconsvg/language-outline.svg new file mode 100644 index 0000000..3a74ce7 --- /dev/null +++ b/main-antd/src/assets/iconsvg/language-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/menu-article.svg b/main-antd/src/assets/iconsvg/menu-article.svg new file mode 100644 index 0000000..4887b9c --- /dev/null +++ b/main-antd/src/assets/iconsvg/menu-article.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/menu-fold.svg b/main-antd/src/assets/iconsvg/menu-fold.svg new file mode 100644 index 0000000..a1cd1d2 --- /dev/null +++ b/main-antd/src/assets/iconsvg/menu-fold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/menu-links.svg b/main-antd/src/assets/iconsvg/menu-links.svg new file mode 100644 index 0000000..e8c3945 --- /dev/null +++ b/main-antd/src/assets/iconsvg/menu-links.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/menu-unfold.svg b/main-antd/src/assets/iconsvg/menu-unfold.svg new file mode 100644 index 0000000..ce81453 --- /dev/null +++ b/main-antd/src/assets/iconsvg/menu-unfold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/message.svg b/main-antd/src/assets/iconsvg/message.svg new file mode 100644 index 0000000..98d51bd --- /dev/null +++ b/main-antd/src/assets/iconsvg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/more.svg b/main-antd/src/assets/iconsvg/more.svg new file mode 100644 index 0000000..43056fe --- /dev/null +++ b/main-antd/src/assets/iconsvg/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/pwd.svg b/main-antd/src/assets/iconsvg/pwd.svg new file mode 100644 index 0000000..e4fe64a --- /dev/null +++ b/main-antd/src/assets/iconsvg/pwd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/refresh.svg b/main-antd/src/assets/iconsvg/refresh.svg new file mode 100644 index 0000000..3362510 --- /dev/null +++ b/main-antd/src/assets/iconsvg/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/set.svg b/main-antd/src/assets/iconsvg/set.svg new file mode 100644 index 0000000..9097411 --- /dev/null +++ b/main-antd/src/assets/iconsvg/set.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/svgo.yml b/main-antd/src/assets/iconsvg/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/main-antd/src/assets/iconsvg/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/main-antd/src/assets/iconsvg/theme.svg b/main-antd/src/assets/iconsvg/theme.svg new file mode 100644 index 0000000..b993366 --- /dev/null +++ b/main-antd/src/assets/iconsvg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/tick.svg b/main-antd/src/assets/iconsvg/tick.svg new file mode 100644 index 0000000..add04ca --- /dev/null +++ b/main-antd/src/assets/iconsvg/tick.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/iconsvg/user.svg b/main-antd/src/assets/iconsvg/user.svg new file mode 100644 index 0000000..c796451 --- /dev/null +++ b/main-antd/src/assets/iconsvg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main-antd/src/assets/images/bg.svg b/main-antd/src/assets/images/bg.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/main-antd/src/assets/images/bg.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main-antd/src/assets/images/logo.png b/main-antd/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..37ff91e08195b41a4f603aa7a26314a42a8873a2 GIT binary patch literal 3294 zcmaJ^YdDl^7k&pJ29fNc)EEk7%y}{sVT@r!IaO3LXC~%gX5?5x4oOHwL?n_@lt@jY zNJ>f3k+!6RQnAai!F;1#`}=wVVq-uJrKTF+WPo_(I{U9>ceGynk5qPmj3 z72l+rfsVjW8&eWe3}g^FVqCo!G%# z*Ju&jCwjdvGdhGxV8QIyLTw|73I{y4gbt15h4RJ3NITdMzeL4)ZW{rE{(wkA>|lQf z<>%oEbrOi!P@FXm&P1ZH(A5NM6b^;8L0Li3NE8Nv#2`=@I0{Wf5{M`q^ydRpsEJq{ zqBoiHQ%hml!Ga|cArXOyh={O`z*q}JK?oFqKtLeT2s9e5K)}UOdbJ>E<~WLkq91dF0UVGvBaDG z-!OiQ7W+mC*$8j8SP(8^D$avr`ircn-Mkl3V1>0_Tw+Kq=L0p2gjkR$+F(ePVlK z5x6LCb{BK@L8yvnxJ8+N%-dVIrscB;W(~xAwsUiUcvSpKfP_Pe&H93WBScu)`I3x?b084Q3{2(ku3zy>ee5C0QD12-!O&#~gl+MyJLxC+}Fi(7N<`*@79) zpo-BJRot|eDJIck0R~W6@JuV+K^k8mEN%%cZfKXwnXYQdn#%X$9g0XxZnuC+;~b6E zM&HQ)=-abCPFxT_u~fPFwhtKmE)ap9mVv+yv|yx75u0|DMY}H?Gg5AD2Pnx^xnqWV zPP8|TzSmSvd?b^DZGC1@(_aS|uL`CL9lvOGE^Z2@eb?-cqNW}^G2RuItdnVG_+tA- z%rjdRw^$C11~O`o%uDRIx7bd;{E}{C*4`#0X%03B!256Po<~?bI4yrAR3RSMg=nW& zf~x?fP7l>{3!J@{$OAI-Op?7@txmCA@CFPf^CWhi+kMr*cpV0!47}rd!dERbDfPZ5 zBYy=8Ya2E2y=a26iC;*(95HMs|F%Xx(c=d8YxrWZ=8gQZ!6mOg5B$s%=_aaI-Rv&6 zu-s~7+9u0)n2OlFm6&;Jb!l2Wi@Sj)?!8TXS^D=K`LeB%6*sqPt*nXZHjo7eI+$s2 zTrr1N6-4VYEjq!uXVE2;@DInfRlN^WBh~ps?K&C#W-N~1qQdvF9S704m)eWwX*D3_ z>QRQmvqzeZ*9ANbdkkS#Eb*Qmb+?PjH*^^}^YQ9{NQSBwI6Zmzz&m^Nh}wfgwj;X4 zi-sFYO}p~fh22N-vlmWq7WRytmqDBbXO)NJb(3zSHtGn?vU+l+)g4@>_O?MSt`ona@-S`Yz>^bg|kPkzw0H4+lV_sryf0AQpOMU}J@8AR?OT}X| z=s?ATYAp=C+Dg?X84T7A(AqwCwtOls^L*W(-XSHwt<=%KSLcG0t<2|dK2UDn zUKTEz)H}Rr)P4;@dcPT{k3iL3>70&f}meG3fbo2`F-HR#S&r8gr9qK~5ZU!v( z+WU}n&dS%Km#ke1hm{&s_^azprfx^4RdFwc%{C7A%H#v-nYRjKzHqY zhNjNyK32t$=Al!Rj<<*4XCM=xjwo6)+&$g3y4zBFK~Cc{)o)ttS-k{i=z-@ntFxZU z*600V!(w{f?Or@jO3O0zAx^sM9CTj0!*J-dj%(A2I$w91Rbg<;Py#RW0OUEW50Pt} zy|*$N@S)a+>aW#+=5f|6ZqlHaD9<$e%uZ{+TK36&pqkRk2Hg$w%9u?#m8GBO*%prsZ;CcgFi+L2F$HPl zoG-hwDq&P_@sz4;@M(26n*&Y31qp$M6{0|+@Xq3!(U1N8a!?wM_B0Fa`=pU$B@J)x z#-?adC9kGpzQ&DZHJ7;`rJSg3EIu}E9zi|lLK*iw*qDed2)}XtL};n~_>P*eoTnJD z{#GMYy&25pn~-ZXDGYc9U0t~y4BT3q(R^cfBEEnA?L!*@cJbKjuN>RWZ;|=gVkfe9cn7 zJJt+lJuuj=LMy>D6B!Fi*Rkxd8T3xZ{d?6%Ixk)9Dc)EgeDnOf_`=iD)Z`FDtpN5!Qk5CXb^}Zf3*u&G=*?o6z8gAmPQ=g-h!)@^+Bs;zL zJi62f84S5&P-ofu%0MM8=-ijw{>d1LY1xX!=v#i-h5lM=dGp}5E1~;F_g&5F(n#7d zvUT}3+(T?`_{lL)RyozL9k)^U(Q9@6w!~pm(*2~Q>}Ha&_{=hu{%dUuyK~Mmk}9xz zDV-A4l;f_(CACkd*PM=ne0#j_lE|o1x4Yh*JaQwARr5k?xyAObhvi7Sltpf2<1?&l zt(OtwMm>7KP%{-oxdL$VSUdL#B{%!llLe|ag@&n`+xWKc2;0}?dBu28@(-gW6$yfV z+S;$$QTnu`DdhzCK&T}_*uyxZdxNBR Sk6`I@Hx8=vdh&S^E#W`Ve3I4x literal 0 HcmV?d00001 diff --git a/main-antd/src/components/ALink/index.vue b/main-antd/src/components/ALink/index.vue new file mode 100644 index 0000000..ebc965f --- /dev/null +++ b/main-antd/src/components/ALink/index.vue @@ -0,0 +1,30 @@ + + \ No newline at end of file diff --git a/main-antd/src/components/BreadCrumbs/index.vue b/main-antd/src/components/BreadCrumbs/index.vue new file mode 100644 index 0000000..41e793a --- /dev/null +++ b/main-antd/src/components/BreadCrumbs/index.vue @@ -0,0 +1,39 @@ + + \ No newline at end of file diff --git a/main-antd/src/components/CKEditor/index.vue b/main-antd/src/components/CKEditor/index.vue new file mode 100644 index 0000000..40ed92a --- /dev/null +++ b/main-antd/src/components/CKEditor/index.vue @@ -0,0 +1,192 @@ + + + \ No newline at end of file diff --git a/main-antd/src/components/IconFont/index.ts b/main-antd/src/components/IconFont/index.ts new file mode 100644 index 0000000..dc31de9 --- /dev/null +++ b/main-antd/src/components/IconFont/index.ts @@ -0,0 +1,3 @@ +import IconFont from './index.vue'; + +export default IconFont; \ No newline at end of file diff --git a/main-antd/src/components/IconFont/index.vue b/main-antd/src/components/IconFont/index.vue new file mode 100644 index 0000000..4187a06 --- /dev/null +++ b/main-antd/src/components/IconFont/index.vue @@ -0,0 +1,69 @@ + + + \ No newline at end of file diff --git a/main-antd/src/components/IconSvg/index.ts b/main-antd/src/components/IconSvg/index.ts new file mode 100644 index 0000000..a7592d9 --- /dev/null +++ b/main-antd/src/components/IconSvg/index.ts @@ -0,0 +1,17 @@ +import iconsvg from "./index.vue"; + +/** + * 自动导入 @/assets/iconsvg 下svg文件 + * @author LiQingSong + */ +export function importAllSvg (): void { + try { + const requireContext: __WebpackModuleApi.RequireContext = require.context('../../assets/iconsvg', false, /\.svg$/); + requireContext.keys().forEach(requireContext); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } +} + +export default iconsvg; \ No newline at end of file diff --git a/main-antd/src/components/IconSvg/index.vue b/main-antd/src/components/IconSvg/index.vue new file mode 100644 index 0000000..a8e7407 --- /dev/null +++ b/main-antd/src/components/IconSvg/index.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/main-antd/src/components/Permission/index.vue b/main-antd/src/components/Permission/index.vue new file mode 100644 index 0000000..522e98f --- /dev/null +++ b/main-antd/src/components/Permission/index.vue @@ -0,0 +1,46 @@ + + \ No newline at end of file diff --git a/main-antd/src/components/ScreenTable/data.d.ts b/main-antd/src/components/ScreenTable/data.d.ts new file mode 100644 index 0000000..126e3bf --- /dev/null +++ b/main-antd/src/components/ScreenTable/data.d.ts @@ -0,0 +1,9 @@ + +export interface PaginationConfig { + total: number; + current: number; + pageSize: number; + showSizeChanger: boolean; + showQuickJumper: boolean; + onChange: (page: number, pageSize: number) => void; +} \ No newline at end of file diff --git a/main-antd/src/components/ScreenTable/index.vue b/main-antd/src/components/ScreenTable/index.vue new file mode 100644 index 0000000..3e1afbd --- /dev/null +++ b/main-antd/src/components/ScreenTable/index.vue @@ -0,0 +1,127 @@ + + + \ No newline at end of file diff --git a/main-antd/src/components/SelectLang/index.vue b/main-antd/src/components/SelectLang/index.vue new file mode 100644 index 0000000..2c26eee --- /dev/null +++ b/main-antd/src/components/SelectLang/index.vue @@ -0,0 +1,84 @@ + + + diff --git a/main-antd/src/components/TuiEditor/index.vue b/main-antd/src/components/TuiEditor/index.vue new file mode 100644 index 0000000..ab5655c --- /dev/null +++ b/main-antd/src/components/TuiEditor/index.vue @@ -0,0 +1,119 @@ + + \ No newline at end of file diff --git a/main-antd/src/components/TuiEditor/viewer.vue b/main-antd/src/components/TuiEditor/viewer.vue new file mode 100644 index 0000000..2c378f3 --- /dev/null +++ b/main-antd/src/components/TuiEditor/viewer.vue @@ -0,0 +1,56 @@ + + \ No newline at end of file diff --git a/main-antd/src/composables/useEcharts.ts b/main-antd/src/composables/useEcharts.ts new file mode 100644 index 0000000..a6b669b --- /dev/null +++ b/main-antd/src/composables/useEcharts.ts @@ -0,0 +1,35 @@ +import { onMounted, onBeforeUnmount, Ref, ref } from 'vue'; +import debounce from 'lodash.debounce'; +import echarts, { ECharts, EChartOption } from 'echarts'; +import 'echarts/theme/macarons'; + +export default function useEcharts( + labRef: Ref, + initOption: EChartOption, + theme= 'macarons' + ): Ref { + + let ec: ECharts; + const chart = ref(); + + const resizeHandler = debounce(() => { + ec.resize(); + }, 100); + + onMounted(()=> { + if(labRef.value) { + ec = echarts.init(labRef.value, theme); + ec.setOption(initOption); + chart.value = ec; + } + + window.addEventListener('resize', resizeHandler); + }) + + onBeforeUnmount(()=> { + ec.dispose(); + window.removeEventListener('resize', resizeHandler); + }); + + return chart; +} \ No newline at end of file diff --git a/main-antd/src/composables/useI18nAntdFormVaildateInfos.ts b/main-antd/src/composables/useI18nAntdFormVaildateInfos.ts new file mode 100644 index 0000000..35f1d9a --- /dev/null +++ b/main-antd/src/composables/useI18nAntdFormVaildateInfos.ts @@ -0,0 +1,24 @@ +/** + * 重置 Antd Form VaildateInfos 为 I18n + * @author LiQingSong + */ +import { computed, ComputedRef } from 'vue'; +import { useI18n } from 'vue-i18n'; +import { validateInfos } from 'ant-design-vue/lib/form/useForm'; + +export default function useI18nAntdFormVaildateInfos(infos: validateInfos): ComputedRef { + const{ t } = useI18n(); + + const infosNew = computed(() => { + const vInfos: validateInfos = {}; + for (const index in infos) { + vInfos[index] = JSON.parse(JSON.stringify(infos[index])); + if(vInfos[index] && vInfos[index]['help']) { + vInfos[index]['help'] = vInfos[index]['help'].map((item: any)=> typeof(item)=='string' ? t(item) : item.map((item2: any)=> item2 ? t(item2):'')); + } + } + return vInfos; + }); + + return infosNew; +} \ No newline at end of file diff --git a/main-antd/src/composables/useInjectMicroChildEntry.ts b/main-antd/src/composables/useInjectMicroChildEntry.ts new file mode 100644 index 0000000..3b64664 --- /dev/null +++ b/main-antd/src/composables/useInjectMicroChildEntry.ts @@ -0,0 +1,12 @@ +/** + * 根据注入的childProjectEntry函数获取对应子项目入口 composables + * @author LiQingSong + */ +import { inject } from 'vue' + +export default function useInjectMicroChildEntry(name: string): string { + const childProjectEntry: Function = inject('childProjectEntry', function(name: string) { + return name + }) + return childProjectEntry(name) +} diff --git a/main-antd/src/composables/useLoadMicroApp.ts b/main-antd/src/composables/useLoadMicroApp.ts new file mode 100644 index 0000000..9308331 --- /dev/null +++ b/main-antd/src/composables/useLoadMicroApp.ts @@ -0,0 +1,53 @@ +/** + * 手动局部加载microApp composables + * @author LiQingSong + */ +import { loadMicroApp, MicroApp, FrameworkConfiguration, FrameworkLifeCycles } from 'qiankun' +import { onMounted, onUnmounted } from "vue" +import router from '@/config/routes' +import store from '@/config/store' + +export interface Props { + name: string; + entry: string; + container: string; + routerHistory?: string + data?: {[key:string]:any}; +} + +export default function useLoadMicroApp(props: Props, configuration?: FrameworkConfiguration & { + autoStart?: boolean; +}, lifeCycles?: FrameworkLifeCycles): void { + + const { name, entry, container, data= {}, routerHistory= 'memory' } = props + + let microApp:MicroApp + + onMounted(()=> { + microApp = loadMicroApp( + { + name, + entry, + container, + props: { + routerHistory, + parentRouter: router, + parentStore: store, + data: { + defaultPath: '', + ...data + } + }, + }, + configuration, + lifeCycles + ); + + }) + + + onUnmounted(()=> { + microApp.unmount() + }) + + } diff --git a/main-antd/src/composables/useQiankunActions.ts b/main-antd/src/composables/useQiankunActions.ts new file mode 100644 index 0000000..1807ece --- /dev/null +++ b/main-antd/src/composables/useQiankunActions.ts @@ -0,0 +1,14 @@ +/** + * 根据注入的childProjectEntry函数获取对应子项目入口 composables + * @author LiQingSong + */ +import { inject } from 'vue' +import { MicroAppStateActions } from 'qiankun' + +export default function useQiankunActions(): MicroAppStateActions { + return inject('qiankunActions', { + onGlobalStateChange: (callback: Function, fireImmediately?: boolean | undefined) => {console.log('undefined')}, + setGlobalState: (state: Record) => false, + offGlobalStateChange: () => false + }) +} diff --git a/main-antd/src/composables/useTitle.ts b/main-antd/src/composables/useTitle.ts new file mode 100644 index 0000000..59d6eec --- /dev/null +++ b/main-antd/src/composables/useTitle.ts @@ -0,0 +1,25 @@ +/** + * 设置 html Title composables + * @author LiQingSong + */ +import { ComputedRef, onMounted, Ref, watch } from 'vue'; +import { useI18n } from 'vue-i18n'; +import settings from '@/config/settings'; +import { RoutesDataItem } from '@/utils/routes'; + +export default function useTitle(route: ComputedRef | Ref): void { + const{ t } = useI18n(); + + const setTitle = (title: string): void => { + document.title = `${t(title)} - ${settings.siteTitle}`; + } + + watch(route,() => { + setTitle(route.value.title || ''); + }) + + onMounted(()=> { + setTitle(route.value.title); + }) + +} diff --git a/main-antd/src/config/i18n.ts b/main-antd/src/config/i18n.ts new file mode 100644 index 0000000..0a43174 --- /dev/null +++ b/main-antd/src/config/i18n.ts @@ -0,0 +1,45 @@ +/** + * 国际化 入口 + * @author LiQingSong + */ + +import { createI18n } from "vue-i18n"; +import { getLocale, setLocale, importAllLocales, defaultLang } from "@/utils/i18n"; + +/** + * antd 多语言 配置 + */ +import zhCN from 'ant-design-vue/es/locale/zh_CN'; +import zhTW from 'ant-design-vue/es/locale/zh_TW'; +import enUS from 'ant-design-vue/es/locale/en_US'; +export const antdMessages: { [key: string]: any} = { + 'zh-CN': zhCN, + 'zh-TW': zhTW, + 'en-US': enUS, +} + + +/** + * 框架 多语言 配置 + */ +export const messages = importAllLocales(); +const sysLocale = getLocale(); +const i18n = createI18n({ + legacy: false, + locale: antdMessages[sysLocale] ? sysLocale : defaultLang, + messages, +}); + + +/** + * 设置语言 + * @param locale + */ +export function setI18nLanguage(locale: string, realReload = false): void { + setLocale(locale,realReload, function() { + // i18n.global.locale = locale // legacy: true + i18n.global.locale.value = locale; + }) +} + +export default i18n; diff --git a/main-antd/src/config/routes.ts b/main-antd/src/config/routes.ts new file mode 100644 index 0000000..056b7c9 --- /dev/null +++ b/main-antd/src/config/routes.ts @@ -0,0 +1,73 @@ +/** + * 路由入口 + * @author LiQingSong + */ +import NProgress from 'nprogress'; // progress bar +import 'nprogress/nprogress.css'; // progress bar style +NProgress.configure({ showSpinner: false, easing: 'ease', speed: 1000 }); // NProgress Configuration + +import { createRouter, createWebHistory } from 'vue-router'; +import { RoutesDataItem } from "@/utils/routes"; +import settings from "@/config/settings"; + +import SecurityLayout from '@/layouts/SecurityLayout.vue'; + +import QiankunLayoutRoutes from '@/layouts/QiankunLayout/routes'; +import QiankunLayout from '@/layouts/QiankunLayout/index.vue'; + +import UserLayoutRoutes from '@/layouts/UserLayout/routes'; +import UserLayout from '@/layouts/UserLayout/index.vue'; + +const routes: RoutesDataItem[] = [ + { + title: 'empty', + path: '/', + component: SecurityLayout, + children: [ + { + title: 'empty', + path: '/', + redirect: settings.homeRouteItem.path, + component: QiankunLayout, + children: QiankunLayoutRoutes + }, + { + title: 'empty', + path: '/refresh', + component: () => import('@/views/refresh/index.vue'), + }, + ] + }, + { + title: 'empty', + path: '/user', + redirect: '/user/login', + component: UserLayout, + children: UserLayoutRoutes + }, + { + title: 'app.global.menu.notfound', + path: '/:pathMatch(.*)*', + component: () => import('@/views/404/index.vue'), + } +] + +const router = createRouter({ + scrollBehavior(/* to, from, savedPosition */) { + return { top: 0 } + }, + history: createWebHistory(process.env.BASE_URL), + routes: routes, +}); + +router.beforeEach((/* to, from */) => { + // start progress bar + NProgress.start(); +}); + +router.afterEach(() => { + // finish progress bar + NProgress.done(); +}); + +export default router; diff --git a/main-antd/src/config/settings.ts b/main-antd/src/config/settings.ts new file mode 100644 index 0000000..a889094 --- /dev/null +++ b/main-antd/src/config/settings.ts @@ -0,0 +1,90 @@ +import { RoutesDataItem } from "@/utils/routes"; + +export type Theme = 'dark' | 'light'; + +export type NavMode = 'inline' | 'horizontal'; + +/** + * 站点配置 + * @author LiQingSong + */ +export interface SettingsType { + /** + * 站点名称 + */ + siteTitle: string; + + /** + * 模板主题 + */ + theme: Theme; + + /** + * 导航模式 + */ + navMode: NavMode; + + /** + * 头部固定开启 + */ + headFixed: boolean; + + /** + * tab菜单开启 + */ + tabNavEnable: boolean; + + /** + * 左侧侧边固定开启 + */ + leftSiderFixed: boolean; + + /** + * 站点首页路由 + */ + homeRouteItem: RoutesDataItem; + + /** + * 站点本地存储Token 的 Key值 + */ + siteTokenKey: string; + + /** + * Ajax请求头发送Token 的 Key值 + */ + ajaxHeadersTokenKey: string; + + /** + * Ajax返回值不参加统一验证的api地址 + */ + ajaxResponseNoVerifyUrl: string[]; + + /** + * iconfont.cn 项目在线生成的 js 地址 + */ + iconfontUrl: string[]; +} + +const settings: SettingsType = { + siteTitle: 'ADMIN-VUE3-MICRO', + theme: 'dark', + navMode: 'inline', + headFixed: true, + tabNavEnable: true, + leftSiderFixed: true, + homeRouteItem: { + icon: 'home', + title: 'qiankun-layout.menu.home', + path: '/home', + component: ()=> import('@/views/home/index.vue') + }, + siteTokenKey: 'admin_vue_micro_token', + ajaxHeadersTokenKey: 'x-token', + ajaxResponseNoVerifyUrl: [ + '/user/login', // 用户登录 + '/user/info', // 获取用户信息 + ], + iconfontUrl: [], +}; + +export default settings; diff --git a/main-antd/src/config/store.ts b/main-antd/src/config/store.ts new file mode 100644 index 0000000..829c3b7 --- /dev/null +++ b/main-antd/src/config/store.ts @@ -0,0 +1,12 @@ +/** + * Store 入口 + * @author LiQingSong + */ +import { createStore } from 'vuex'; +import { importAllStore } from '@/utils/store'; + + +export default createStore({ + modules: importAllStore(), + getters: {} +}) diff --git a/main-antd/src/directives/permission/index.ts b/main-antd/src/directives/permission/index.ts new file mode 100644 index 0000000..abb4fbd --- /dev/null +++ b/main-antd/src/directives/permission/index.ts @@ -0,0 +1,31 @@ +/** + * 自定义指令 权限验证 + * @author LiQingSong + * 使用Demo: + * import permission from '@/directives/permission'; + * import { defineComponent } from "vue"; + * export default defineComponent({ + * directives: { + * permission + * } + * }) + * 删除 + * 删除 + */ +import { Directive } from "vue"; +import UserModel from "@/store/user"; +import { hasPermissionRouteRoles } from "@/utils/routes"; + +const permission: Directive = (el, binding, vnode, prevVNode) => { + const { value } = binding; + if(value) { + const userRoles = UserModel.state.currentUser.roles; + if(!hasPermissionRouteRoles(userRoles, value)){ + el.parentNode && el.parentNode.removeChild(el); + } + } else { + throw new Error(`need roles! Like v-permission="['admin','test']" or v-permission="'test'"`); + } +} + +export default permission; \ No newline at end of file diff --git a/main-antd/src/layouts/BlankLayout.vue b/main-antd/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..621cb5a --- /dev/null +++ b/main-antd/src/layouts/BlankLayout.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main-antd/src/layouts/QiankunLayout/components/Icon.vue b/main-antd/src/layouts/QiankunLayout/components/Icon.vue new file mode 100644 index 0000000..2bc66ff --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/Icon.vue @@ -0,0 +1,28 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/components/LeftSider.vue b/main-antd/src/layouts/QiankunLayout/components/LeftSider.vue new file mode 100644 index 0000000..f9a6c1b --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/LeftSider.vue @@ -0,0 +1,47 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/components/RightFooter.vue b/main-antd/src/layouts/QiankunLayout/components/RightFooter.vue new file mode 100644 index 0000000..95a4255 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/RightFooter.vue @@ -0,0 +1,18 @@ + + + diff --git a/main-antd/src/layouts/QiankunLayout/components/RightTabNav.vue b/main-antd/src/layouts/QiankunLayout/components/RightTabNav.vue new file mode 100644 index 0000000..916f2d5 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/RightTabNav.vue @@ -0,0 +1,279 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/components/RightTop.vue b/main-antd/src/layouts/QiankunLayout/components/RightTop.vue new file mode 100644 index 0000000..6326bd4 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/RightTop.vue @@ -0,0 +1,107 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/components/RightTopMessage.vue b/main-antd/src/layouts/QiankunLayout/components/RightTopMessage.vue new file mode 100644 index 0000000..3e53820 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/RightTopMessage.vue @@ -0,0 +1,24 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/components/RightTopUser.vue b/main-antd/src/layouts/QiankunLayout/components/RightTopUser.vue new file mode 100644 index 0000000..21e9100 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/RightTopUser.vue @@ -0,0 +1,53 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/components/Settings.vue b/main-antd/src/layouts/QiankunLayout/components/Settings.vue new file mode 100644 index 0000000..6e21278 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/Settings.vue @@ -0,0 +1,228 @@ + + + diff --git a/main-antd/src/layouts/QiankunLayout/components/SiderMenu.vue b/main-antd/src/layouts/QiankunLayout/components/SiderMenu.vue new file mode 100644 index 0000000..d8a9217 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/SiderMenu.vue @@ -0,0 +1,71 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/components/SiderMenuItem.vue b/main-antd/src/layouts/QiankunLayout/components/SiderMenuItem.vue new file mode 100644 index 0000000..faa00a6 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/components/SiderMenuItem.vue @@ -0,0 +1,49 @@ + + diff --git a/main-antd/src/layouts/QiankunLayout/css/index.less b/main-antd/src/layouts/QiankunLayout/css/index.less new file mode 100644 index 0000000..42cea12 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/css/index.less @@ -0,0 +1,386 @@ +@import '../../../assets/css/global.less'; +@import './var.less'; +@import './mixins.less'; + +#qiankunlayout { + display: flex; + flex-direction: row; + background-color: var(--qkl-bg-color); + + /* 默认 theme */ + .qiankunlayout-menu { + .layout-menu() + } + + #qiankunlayout-left { + flex: 0 0 var(--qkl-left-side-bar-width); + background-color: var(--qkl-menu-bg-color); + z-index: 10; + + .qiankunlayout-left-sider { + display: flex; + flex-direction: column; + width: var(--qkl-left-side-bar-width); + + .qiankunlayout-left-logo { + width: 100%; + height: var(--qkl-header-height); + line-height: var(--qkl-header-height); + text-align: center; + vertical-align: middle; + .logo-url { + display: inline-block; + width: 100%; + height: 100%; + overflow: hidden; + .logo-title { + display: inline-block; + margin: 0; + font-size: 16px; + font-family: Roboto, sans-serif; + color: var(--qkl-menu-highlight-color); + } + } + img { + vertical-align: middle; + } + } + + + .qiankunlayout-left-menu { + flex: 1; + + } + + + + } + + &.fiexd { + .qiankunlayout-left-sider { + position: fixed; + top: 0; + left: 0; + bottom: 0; + .qiankunlayout-left-menu { + overflow: hidden auto; + } + } + } + + &.narrow { + flex: 0 0 var(--qkl-menu-collapsed-width); + .qiankunlayout-left-sider { + width: var(--qkl-menu-collapsed-width); + } + } + + .scrollbar(); + + } + + + #qiankunlayout-right { + display: flex; + flex-direction:column; + position: relative; + width: 0; + flex: auto; + min-height: 100vh; + background-color: var(--qkl-main-bg-color); + + + #qiankunlayout-right-top { + width: 100%; + height: calc(var(--qkl-header-height) + var(--qkl-header-tab-nav-height)); + border-bottom: solid 1px rgba(0, 21, 41, 0.01); + + + .qiankunlayout-right-top-header { + display: block; + height: calc(var(--qkl-header-height) + var(--qkl-header-tab-nav-height)); + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); + background-color: var(--qkl-main-bg-color); + z-index: 1; + + .qiankunlayout-right-top-top { + display: flex; + width: 100%; + height: var(--qkl-header-height); + line-height: var(--qkl-header-height); + background-color: var(--qkl-bg-color); + color: var(--qkl-color); + + .qiankunlayout-flexible { + width: var(--qkl-header-height); + height: var(--qkl-header-height); + text-align: center; + cursor: pointer; + &:hover { + background-color: --qkl-submenu-bg-color; + color: --qkl-menu-higlight-bg-color; + } + } + + .qiankunlayout-top-menu { + height: var(--qkl-header-height); + line-height: var(--qkl-header-height); + flex: 1; + overflow: hidden; + overflow-x: auto; + .breadcrumb { + line-height: var(--qkl-header-height); + } + } + + .qiankunlayout-top-menu-right { + width: 200px; + + .qiankunlayout-top-message { + display: inline; + color: var(--qkl-color); + .qiankunlayout-top-message-badge { + margin-left: -5px; + margin-top: -20px; + ::v-deep(.el-badge__content) { + border: 0; + } + } + } + + .qiankunlayout-top-usermenu { + padding-left: 10px; + color: var(--qkl-color); + } + + .qiankunlayout-top-selectlang { + padding-left: 15px; + .dropDown { + i, + .svg-icon { + font-size: 16px; + color: var(--qkl-color); + } + } + } + + .qiankunlayout-top-settings { + margin-left: 15px; + cursor: pointer; + } + + } + + .scrollbar(); + + + + &.menu { + + background-color: var(--qkl-menu-bg-color); + color: var(--qkl-menu-color); + + .qiankunlayout-right-top-logo { + padding: 0 20px; + height: var(--qkl-header-height); + vertical-align: middle; + .logo-url { + display: inline-block; + overflow: hidden; + .logo-title { + display: inline-block; + margin: 0; + padding-left: 10px; + font-size: 14px; + font-family: Roboto, sans-serif; + font-weight: 400; + color: var(--qkl-menu-highlight-color); + } + } + img { + vertical-align: middle; + } + } + + + .qiankunlayout-top-menu-right { + .qiankunlayout-top-message, + .qiankunlayout-top-usermenu{ + color: var(--qkl-menu-color); + } + .qiankunlayout-top-selectlang { + .dropDown { + i, + .svg-icon { + color: var(--qkl-menu-color); + } + } + } + } + + } + + + } + + .qiankunlayout-top-tab-nav { + height: calc(var(--qkl-header-tab-nav-height) - 4px); + padding-top: 4px; + /* background-color: #f0f0f0; */ + box-shadow: 0 -1px 4px rgba(0, 21, 41, 0.08); + display: flex; + align-items:center; + .left, + .right, + .down { + width: calc(var(--qkl-header-tab-nav-height) - 10px); + height: calc(var(--qkl-header-tab-nav-height) - 8px); + line-height: calc(var(--qkl-header-tab-nav-height) - 8px); + /* background-color: #FFFFFF; */ + text-align: center; + font-size: 12px; + cursor: pointer; + .icon-box { + display: block; + width: calc(var(--qkl-header-tab-nav-height) - 10px); + height: calc(var(--qkl-header-tab-nav-height) - 8px); + line-height: calc(var(--qkl-header-tab-nav-height) - 8px); + } + .icon { + color: rgba(0,0,0,.45); + } + &:hover { + .icon { + color: rgba(0,0,0,.75); + } + } + } + .down { + padding-right: 10px; + line-height: normal; + } + .middle { + flex: 1; + overflow: hidden; + .tab { + position: relative; + float: left; + list-style: none; + overflow: visible; + white-space: nowrap; + transition: transform .5s ease-in-out; + .item { + height: calc(var(--qkl-header-tab-nav-height) - 6px); + line-height: calc(var(--qkl-header-tab-nav-height) - 6px); + background: #fafafa; + box-sizing: border-box; + white-space: nowrap; + display: inline-block; + padding: 0 10px; + border-radius: 4px 4px 0 0; + transition: all .3s cubic-bezier(.645,.045,.355,1); + cursor: pointer; + font-size: 14px; + color: rgba(0,0,0,.65); + border: 1px solid var(--qkl-main-bg-color); + &+.item { + margin-left: 3px; + } + &:hover { + color: var(--el-color-primary); + } + .icon { + font-size: 10px; + margin: 0 0 2px 5px; + color: rgba(0,0,0,.45); + &:hover { + color: rgba(0,0,0,.75); + } + + } + .icon-pre { + display: none; + font-size: 12px; + margin: 0 5px 0 0; + color: rgba(var(--el-color-primary), 0.75); + &:hover { + color: rgba(var(--el-color-primary), 1); + } + } + } + .active { + color: var(--el-color-primary); + background:#FFFFFF; + border-color:#FFFFFF; + .icon-pre { + display: inline-block; + } + } + } + } + } + } + + &.fiexd { + .qiankunlayout-right-top-header{ + position: fixed; + left: var(--qkl-left-side-bar-width); + top: 0; + right: 0; + } + &.narrow { + .qiankunlayout-right-top-header{ + left: var(--qkl-menu-collapsed-width); + } + } + } + + &.navModeHorizontal { + &.narrow .qiankunlayout-right-top-header, + .qiankunlayout-right-top-header{ + left: 0; + } + } + + &.tabNavEnable { + height: var(--qkl-header-height); + .qiankunlayout-right-top-header { + height: var(--qkl-header-height); + } + } + + + } + + + #qiankunlayout-right-main { + position: relative; + flex: 1; + height: 0; + + .qiankunlayout-main-conent { + margin: 24px; + position: relative; + } + + } + + + + } + + + /* 白色 theme */ + &.light { + .light-menu(); + + #qiankunlayout-left{ + .scrollbar-light(); + } + } + + + + + +} diff --git a/main-antd/src/layouts/QiankunLayout/css/mixins.less b/main-antd/src/layouts/QiankunLayout/css/mixins.less new file mode 100644 index 0000000..cea4555 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/css/mixins.less @@ -0,0 +1,14 @@ +.layout-menu() { + &.ant-menu-horizontal { + line-height: 48px; + } + +} + +.light-menu() { + --qkl-menu-bg-color: #FFF; + --qkl-submenu-bg-color: #fafafa; + --qkl-menu-color: rgba(0,0,0,.85); + --qkl-menu-higlight-bg-color: #e6f7ff; + --qkl-menu-highlight-color: @primary-color; +} diff --git a/main-antd/src/layouts/QiankunLayout/css/var.less b/main-antd/src/layouts/QiankunLayout/css/var.less new file mode 100644 index 0000000..5ad2d16 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/css/var.less @@ -0,0 +1,25 @@ +:root { + // 网页背景色 + --qkl-bg-color: #FFFFFF; + // 网页字体色 + --qkl-color: rgba(0,0,0,.85); + // 主窗口背景色 + --qkl-main-bg-color: #f0f3f4; + + // 菜单 + --qkl-menu-collapsed-width: @menu-collapsed-width; + --qkl-menu-bg-color: #222834; + --qkl-submenu-bg-color: #000c17; + --qkl-menu-color: rgba(255,255,255, 0.65); + --qkl-menu-higlight-bg-color: @primary-color; + --qkl-menu-highlight-color: #FFFFFF; + + + // 头部高度 + --qkl-header-height: 48px; + // 左边宽度 + --qkl-left-side-bar-width: 200px; + // 头部Tab导航高度 + --qkl-header-tab-nav-height: 36px; + +} diff --git a/main-antd/src/layouts/QiankunLayout/index.vue b/main-antd/src/layouts/QiankunLayout/index.vue new file mode 100644 index 0000000..587e8be --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/index.vue @@ -0,0 +1,63 @@ + + + diff --git a/main-antd/src/layouts/QiankunLayout/locales/en-US.ts b/main-antd/src/layouts/QiankunLayout/locales/en-US.ts new file mode 100644 index 0000000..3d5cae1 --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/locales/en-US.ts @@ -0,0 +1,23 @@ +export default { + 'qiankun-layout.topmenu.userinfo': 'Personal Info', + 'qiankun-layout.topmenu.logout': 'Logout', + + 'qiankun-layout.menu.home': 'Home', + + 'qiankun-layout.menu.system': 'System Setting', + 'qiankun-layout.menu.system.accountlist': 'Account list', + 'qiankun-layout.menu.system.rolelist': 'Role list', + 'qiankun-layout.menu.system.menulist': 'Background menu', + 'qiankun-layout.menu.system.apilist': 'Backend API', + + 'qiankun-layout.menu.article': 'Article', + 'qiankun-layout.menu.article.list': 'Article List', + 'qiankun-layout.menu.article.add': 'Article Add', + 'qiankun-layout.menu.article.edit': 'Article Edit', + 'qiankun-layout.menu.article.category': 'Article classification', + + 'qiankun-layout.menu.links': 'Neighbors', + 'qiankun-layout.menu.links.list': 'Link List', + 'qiankun-layout.menu.links.category': 'Link classification', + +}; diff --git a/main-antd/src/layouts/QiankunLayout/locales/zh-CN.ts b/main-antd/src/layouts/QiankunLayout/locales/zh-CN.ts new file mode 100644 index 0000000..567b32a --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/locales/zh-CN.ts @@ -0,0 +1,23 @@ +export default { + 'qiankun-layout.topmenu.userinfo': '个人信息', + 'qiankun-layout.topmenu.logout': '退出', + + 'qiankun-layout.menu.home': '首页', + + 'qiankun-layout.menu.system': '系统设置', + 'qiankun-layout.menu.system.accountlist': '账号列表', + 'qiankun-layout.menu.system.rolelist': '角色列表', + 'qiankun-layout.menu.system.menulist': '后台菜单', + 'qiankun-layout.menu.system.apilist': '后台API', + + 'qiankun-layout.menu.article': '随笔管理', + 'qiankun-layout.menu.article.list': '随笔列表', + 'qiankun-layout.menu.article.add': '随笔新增', + 'qiankun-layout.menu.article.edit': '随笔修改', + 'qiankun-layout.menu.article.category': '随笔分类', + + 'qiankun-layout.menu.links': '左邻右舍', + 'qiankun-layout.menu.links.list': '链接列表', + 'qiankun-layout.menu.links.category': '链接分类', + +}; diff --git a/main-antd/src/layouts/QiankunLayout/locales/zh-TW.ts b/main-antd/src/layouts/QiankunLayout/locales/zh-TW.ts new file mode 100644 index 0000000..a0e878f --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/locales/zh-TW.ts @@ -0,0 +1,23 @@ +export default { + 'qiankun-layout.topmenu.userinfo': '個人信息', + 'qiankun-layout.topmenu.logout': '退出', + + 'qiankun-layout.menu.home': '首頁', + + 'qiankun-layout.menu.system': '系统設置', + 'qiankun-layout.menu.system.accountlist': '賬號列表', + 'qiankun-layout.menu.system.rolelist': '角色列表', + 'qiankun-layout.menu.system.menulist': '後臺菜單', + 'qiankun-layout.menu.system.apilist': '後臺API', + + 'qiankun-layout.menu.article': '隨筆管理', + 'qiankun-layout.menu.article.list': '隨筆列表', + 'qiankun-layout.menu.article.add': '隨筆新增', + 'qiankun-layout.menu.article.edit': '隨筆修改', + 'qiankun-layout.menu.article.category': '隨筆分類', + + 'qiankun-layout.menu.links': '左鄰右舍', + 'qiankun-layout.menu.links.list': '鏈接列表', + 'qiankun-layout.menu.links.category': '鏈接分類', + +}; diff --git a/main-antd/src/layouts/QiankunLayout/routes.ts b/main-antd/src/layouts/QiankunLayout/routes.ts new file mode 100644 index 0000000..e05071c --- /dev/null +++ b/main-antd/src/layouts/QiankunLayout/routes.ts @@ -0,0 +1,133 @@ +import { RoutesDataItem } from "@/utils/routes"; +import BlankLayout from '@/layouts/BlankLayout.vue'; +import QianKunStart from '@/views/qiankun/start.vue'; +import QianKunStartScreen from '@/views/qiankun/startScreen.vue' +import settings from "@/config/settings"; + +const QiankunLayoutRoutes: Array = [ + { + ...settings.homeRouteItem + }, + { + icon: 'menu-article', + title: 'qiankun-layout.menu.article', + path: '/article', + redirect: '/article/list', + roles: ['article'], + component: BlankLayout, + children: [ + { + title: 'qiankun-layout.menu.article.list', + path: 'list', + roles: ['article-list'], + component: QianKunStartScreen + }, + { + hidden: true, + title: 'qiankun-layout.menu.article.add', + path: 'add', + roles: ['article-add'], + component: QianKunStart, + selectLeftMenu: '/article/list' + }, + { + hidden: true, + title: 'qiankun-layout.menu.article.edit', + path: 'edit', + roles: ['article-edit'], + component: QianKunStart, + selectLeftMenu: '/article/list' + }, + { + title: 'qiankun-layout.menu.article.category', + path: 'category', + roles: ['article-category'], + component: QianKunStartScreen + }, + /* + { + hidden: true, + title: ':chapters*', + path: '/article/:chapters*', + component: QianKunStart, + }, + */ + ] + }, + + { + icon: 'menu-links', + title: 'qiankun-layout.menu.links', + path: '/links', + redirect: '/links/list', + roles: ['links'], + component: BlankLayout, + children: [ + { + title: 'qiankun-layout.menu.links.list', + path: 'list', + roles: ['links-list'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.links.category', + path: 'category', + roles: ['links-category'], + component: QianKunStartScreen + }, + /* + { + hidden: true, + title: ':chapters*', + path: '/links/:chapters*', + component: QianKunStart, + }, + */ + ] + }, + + { + icon: 'set', + title: 'qiankun-layout.menu.system', + path: '/system', + redirect: '/system/accountlist', + roles: ['setting'], + component: BlankLayout, + children: [ + { + title: 'qiankun-layout.menu.system.accountlist', + path: 'accountlist', + roles: ['setting-accountlist'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.system.rolelist', + path: 'rolelist', + roles: ['setting-rolelist'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.system.menulist', + path: 'menulist', + roles: ['setting-menulist'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.system.apilist', + path: 'apilist', + roles: ['setting-apilist'], + component: QianKunStartScreen + }, + /* + { + hidden: true, + title: ':chapters*', + path: '/system/:chapters*', + component: QianKunStart, + }, + */ + ] + } +]; + +export default QiankunLayoutRoutes; diff --git a/main-antd/src/layouts/SecurityLayout.vue b/main-antd/src/layouts/SecurityLayout.vue new file mode 100644 index 0000000..cc22a8d --- /dev/null +++ b/main-antd/src/layouts/SecurityLayout.vue @@ -0,0 +1,68 @@ + + \ No newline at end of file diff --git a/main-antd/src/layouts/UserLayout/index.vue b/main-antd/src/layouts/UserLayout/index.vue new file mode 100644 index 0000000..f4c9088 --- /dev/null +++ b/main-antd/src/layouts/UserLayout/index.vue @@ -0,0 +1,72 @@ + + + diff --git a/main-antd/src/layouts/UserLayout/locales/en-US.ts b/main-antd/src/layouts/UserLayout/locales/en-US.ts new file mode 100644 index 0000000..4ffd64f --- /dev/null +++ b/main-antd/src/layouts/UserLayout/locales/en-US.ts @@ -0,0 +1,4 @@ +export default { + 'user-layout.menu.login': 'Login', + 'user-layout.menu.register': 'Register', +}; diff --git a/main-antd/src/layouts/UserLayout/locales/zh-CN.ts b/main-antd/src/layouts/UserLayout/locales/zh-CN.ts new file mode 100644 index 0000000..bb7d2a7 --- /dev/null +++ b/main-antd/src/layouts/UserLayout/locales/zh-CN.ts @@ -0,0 +1,4 @@ +export default { + 'user-layout.menu.login': '登录', + 'user-layout.menu.register': '注册', +}; diff --git a/main-antd/src/layouts/UserLayout/locales/zh-TW.ts b/main-antd/src/layouts/UserLayout/locales/zh-TW.ts new file mode 100644 index 0000000..2db0a32 --- /dev/null +++ b/main-antd/src/layouts/UserLayout/locales/zh-TW.ts @@ -0,0 +1,4 @@ +export default { + 'user-layout.menu.login': '登錄', + 'user-layout.menu.register': '註冊', +}; diff --git a/main-antd/src/layouts/UserLayout/routes.ts b/main-antd/src/layouts/UserLayout/routes.ts new file mode 100644 index 0000000..d65e64e --- /dev/null +++ b/main-antd/src/layouts/UserLayout/routes.ts @@ -0,0 +1,16 @@ +import { RoutesDataItem } from "@/utils/routes"; + +const UserLayoutRoutes: RoutesDataItem[] = [ + { + title: 'user-layout.menu.login', + path: 'login', + component: () => import('@/views/user/login/index.vue'), + }, + { + title: 'user-layout.menu.register', + path: 'register', + component: () => import('@/views/user/register/index.vue'), + } +]; + +export default UserLayoutRoutes; \ No newline at end of file diff --git a/main-antd/src/locales/en-US.ts b/main-antd/src/locales/en-US.ts new file mode 100644 index 0000000..264323d --- /dev/null +++ b/main-antd/src/locales/en-US.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': 'The validation did not pass, please check the input', +}; \ No newline at end of file diff --git a/main-antd/src/locales/zh-CN.ts b/main-antd/src/locales/zh-CN.ts new file mode 100644 index 0000000..92b979c --- /dev/null +++ b/main-antd/src/locales/zh-CN.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '验证不通过,请检查输入', +}; \ No newline at end of file diff --git a/main-antd/src/locales/zh-TW.ts b/main-antd/src/locales/zh-TW.ts new file mode 100644 index 0000000..2926c8d --- /dev/null +++ b/main-antd/src/locales/zh-TW.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '驗證不通過,請檢查輸入', +}; \ No newline at end of file diff --git a/main-antd/src/main.ts b/main-antd/src/main.ts new file mode 100644 index 0000000..9773eff --- /dev/null +++ b/main-antd/src/main.ts @@ -0,0 +1,61 @@ +import { createApp } from 'vue'; + +// 全局样式 +import '@/assets/css/global.less'; + +// 引入 Antd +import Antd from 'ant-design-vue'; + +// 导入 svg +import { importAllSvg } from "@/components/IconSvg/index"; +importAllSvg(); + +import App from '@/App.vue'; +import router from '@/config/routes'; +import store from '@/config/store'; +import i18n from '@/config/i18n'; + +import { registerMicroApps, childProjectAll, childProjectEntry, actions } from "../../scripts/server/qiankun"; + +const app = createApp(App) +app.provide('childProjectEntry', childProjectEntry); +app.provide('qiankunActions', actions); +app.use(store); +app.use(router) +app.use(Antd); +app.use(i18n); +app.mount('#app'); + +const Apps = childProjectAll('main-antd',{parentRouter: router, parentStore: store}); +registerMicroApps( + Apps, + { + beforeLoad: [ + async (app) => { + store.commit('global/setQiankunStartLoading', true); + console.log('before load app.name====>>>>>', app.name); + }, + ], + beforeMount: [ + async (app) => { + store.commit('global/setQiankunStartLoading', true); + console.log('[LifeCycle] before mount %c%s', 'color: green;', app.name); + }, + ], + afterMount: [ + async (app) => { + store.commit('global/setQiankunStartLoading', false); + console.log('[LifeCycle] after mount %c%s', 'color: green;', app.name); + }, + ], + afterUnmount: [ + async (app) => { + console.log( + '[LifeCycle] after unmount %c%s', + 'color: green;', + app.name + ); + }, + ], + } +); diff --git a/main-antd/src/services/user.ts b/main-antd/src/services/user.ts new file mode 100644 index 0000000..d652147 --- /dev/null +++ b/main-antd/src/services/user.ts @@ -0,0 +1,14 @@ +import request from '@/utils/request'; + +export async function queryCurrent(): Promise { + return request({ + url: '/user/info', + method: 'get' + }); +} + +export async function queryMessage(): Promise { + return request({ + url: '/user/message' + }); +} \ No newline at end of file diff --git a/main-antd/src/shims-vue.d.ts b/main-antd/src/shims-vue.d.ts new file mode 100644 index 0000000..df76ca3 --- /dev/null +++ b/main-antd/src/shims-vue.d.ts @@ -0,0 +1,8 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +declare module '@ckeditor/ckeditor5-vue'; +declare module '@ckeditor/ckeditor5-build-decoupled-document'; diff --git a/main-antd/src/store/global.ts b/main-antd/src/store/global.ts new file mode 100644 index 0000000..9a3a194 --- /dev/null +++ b/main-antd/src/store/global.ts @@ -0,0 +1,114 @@ + +import { Mutation/* , Action */ } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { TabNavItem, equalTabNavRoute } from '@/utils/routes'; +import settings, { Theme, NavMode } from '@/config/settings'; +import router from '@/config/routes'; +import { RouteLocationRaw } from 'vue-router'; + +export interface StateType { + // 左侧展开收起 + collapsed: boolean; + // 模板主题 + theme: Theme; + // 头部固定开启 + navMode: NavMode; + // 头部固定开启 + headFixed: boolean; + // tab菜单开启 + tabNavEnable: boolean; + // 头部tab导航列表 + headTabNavList: TabNavItem[]; + // 左侧侧边固定开启 + leftSiderFixed: boolean; + // qiankun.js startLoading + qiankunStartLoading: boolean; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + changeLayoutCollapsed: Mutation; + setTheme: Mutation; + setNavMode: Mutation; + setHeadFixed: Mutation; + setTabNavEnable: Mutation; + setHeadTabNavList: Mutation; + closeCurrentHeadTabNav: Mutation; + setLeftSiderFixed: Mutation; + setQiankunStartLoading: Mutation; + }; + actions: { + }; +} + +const homeRoute = router.resolve(settings.homeRouteItem.path); + +const initState: StateType = { + collapsed: false, + theme: settings.theme, + navMode: settings.navMode, + headFixed: settings.headFixed, + tabNavEnable: settings.tabNavEnable, + headTabNavList: [ + { + route: homeRoute, + menu: settings.homeRouteItem + } + ], + leftSiderFixed: settings.leftSiderFixed, + qiankunStartLoading: false +}; + +const StoreModel: ModuleType = { + namespaced: true, + name: 'global', + state: { + ...initState + }, + mutations: { + changeLayoutCollapsed(state, payload) { + state.collapsed = payload; + }, + setTheme(state, payload) { + state.theme = payload; + }, + setNavMode(state, payload) { + state.navMode = payload; + }, + setHeadFixed(state, payload) { + state.headFixed = payload; + }, + setTabNavEnable(state, payload) { + state.tabNavEnable = payload; + }, + setHeadTabNavList(state, payload) { + state.headTabNavList = payload; + }, + /** + * 关闭当前tabNav,并跳转自定义路由 + * @param state + * @param payload Function 回调 + */ + closeCurrentHeadTabNav(state, payload: Function) { + const navList: TabNavItem[] = state.headTabNavList.filter((item2: TabNavItem) => !equalTabNavRoute(router.currentRoute.value, item2.route, item2.menu.tabNavType)) + state.headTabNavList = [ + ...navList + ] + if(typeof payload === 'function') { + payload() + } + }, + setLeftSiderFixed(state, payload) { + state.leftSiderFixed = payload; + }, + setQiankunStartLoading(state, payload) { + state.qiankunStartLoading = payload; + }, + }, + actions: {} +} + + + +export default StoreModel; diff --git a/main-antd/src/store/user.ts b/main-antd/src/store/user.ts new file mode 100644 index 0000000..331fe65 --- /dev/null +++ b/main-antd/src/store/user.ts @@ -0,0 +1,101 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { ResponseData } from '@/utils/request'; +import { queryCurrent, queryMessage } from "@/services/user"; +import { removeToken } from "@/utils/localToken"; + +export interface CurrentUser { + id: number; + name: string; + avatar: string; + roles: string[]; +} + +export interface StateType { + currentUser: CurrentUser; + message: number; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + saveCurrentUser: Mutation; + saveMessage: Mutation; + }; + actions: { + fetchCurrent: Action; + fetchMessage: Action; + logout: Action; + }; +} + +const initState: StateType = { + currentUser: { + id: 0, + name: '', + avatar: '', + roles: [], + }, + message: 0, +} + +const StoreModel: ModuleType = { + namespaced: true, + name: 'user', + state: { + ...initState + }, + mutations: { + saveCurrentUser(state, payload) { + state.currentUser = { + ...initState.currentUser, + ...payload, + } + }, + saveMessage(state, payload) { + state.message = payload; + } + }, + actions: { + async fetchCurrent({ commit }) { + try { + const response: ResponseData = await queryCurrent(); + const { data } = response; + + /* lqsblog - 重置返回的数据 S */ + const auth = data.resources || []; + data.resources = data.roles || []; + data.roles = auth; + /* lqsblog - 重置返回的数据 $ */ + + commit('saveCurrentUser', data || {}); + return true; + } catch (error) { + return false; + } + }, + async fetchMessage({ commit }) { + try { + const response: ResponseData = await queryMessage(); + const { data } = response; + commit('saveMessage', data || 0); + return true; + } catch (error) { + return false; + } + }, + async logout({ commit }) { + try { + await removeToken(); + commit('saveCurrentUser', { ...initState.currentUser }); + return true; + } catch (error) { + return false; + } + } + } +} + + + +export default StoreModel; diff --git a/main-antd/src/utils/array.ts b/main-antd/src/utils/array.ts new file mode 100644 index 0000000..a3ae5ec --- /dev/null +++ b/main-antd/src/utils/array.ts @@ -0,0 +1,29 @@ +/** + * 数组合并并去重 + * @param arr1 数组1 + * @param arr2 数组2 + */ +export function mergeUnique(arr1: Array, arr2: Array): Array { + const arr: Array = arr1; + for (let index = 0, len = arr2.length; index < len; index += 1) { + if (!arr.includes(arr2[index])) { + arr.push(arr2[index]); + } + } + + return arr; +} + +/** + * 数组去重 + * @param arr 数组 + */ +export function unique(arr: Array): Array { + const array: Array = []; + for (let index = 0, len = arr.length; index < len; index += 1) { + if (!array.includes(arr[index])) { + array.push(arr[index]); + } + } + return array; +} diff --git a/main-antd/src/utils/i18n.ts b/main-antd/src/utils/i18n.ts new file mode 100644 index 0000000..47fd50a --- /dev/null +++ b/main-antd/src/utils/i18n.ts @@ -0,0 +1,181 @@ +/** + * 国际化 utils + * @author LiQingSong + */ +import { LocaleMessages } from '@intlify/core-base'; +import { VueMessageType } from "vue-i18n"; + +// window.localStorage 存储key +export const localeKey = 'locale'; + +// 默认语言 +export const defaultLang = 'zh-CN'; + +/** + * 验证语言命名规则 zh-CN + * @returns boolen + * @author LiQingSong + */ +export const localeNameExp = (lang: string): boolean => { + const localeExp = new RegExp(`^([a-z]{2})-?([A-Z]{2})?$`); + return localeExp.test(lang); +} + +/** + * 设置 html lang 属性值 + * @param lang 语言的 key + * @author LiQingSong + */ +export const setHtmlLang = (lang: string): void => { + /** + * axios.defaults.headers.common['Accept-Language'] = locale + */ + document.querySelector('html')?.setAttribute('lang', lang); +} + +/** + * 获取当前选择的语言 + * 获取的浏览器语言默认项目中有可能不支持,所以在config/i18n.ts中要加以判断 + * @returns string + * @author LiQingSong + */ +export const getLocale = (): string => { + const lang = typeof window.localStorage !== 'undefined' ? window.localStorage.getItem(localeKey) : ''; + const isNavigatorLanguageValid = typeof navigator !== 'undefined' && typeof navigator.language === 'string'; + const browserLang = isNavigatorLanguageValid ? navigator.language.split('-').join('-') : ''; + return lang || browserLang || defaultLang; +}; + +/** + * 切换语言 + * @param lang 语言的 key + * @param realReload 是否刷新页面,默认刷新 + * @author LiQingSong + */ +export const setLocale = (lang: string, realReload = true, callback: () => void): void => { + + if (lang !== undefined && !localeNameExp(lang)) { + // for reset when lang === undefined + throw new Error('setLocale lang format error'); + } + if (getLocale() !== lang) { + if (typeof window.localStorage !== 'undefined') { + window.localStorage.setItem(localeKey, lang || ''); + } + + if (realReload) { + window.location.reload(); + } else { + setHtmlLang(lang); + + if(typeof callback === 'function') { + callback(); + } + } + + } +}; + +/** + * 自动导入 框架自定义语言 + * @author LiQingSong + */ +export function importAllLocales(): LocaleMessages { + const modules: LocaleMessages = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/layouts 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const layoutsRequireContext: __WebpackModuleApi.RequireContext = require.context('../layouts', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + layoutsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = layoutsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/components 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const componentsRequireContext: __WebpackModuleApi.RequireContext = require.context('../components', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + componentsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = componentsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/locales 下文件,不包含子目录,文件名为:([a-z]{2})-?([A-Z]{2})?\.ts + const localesRequireContext: __WebpackModuleApi.RequireContext = require.context('../locales', false, /([a-z]{2})-?([A-Z]{2})?\.ts$/); + localesRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = localesRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + diff --git a/main-antd/src/utils/localToken.ts b/main-antd/src/utils/localToken.ts new file mode 100644 index 0000000..fca7e6f --- /dev/null +++ b/main-antd/src/utils/localToken.ts @@ -0,0 +1,37 @@ +/** + * 自定义 token 操作 + * @author LiQingSong + */ +import localforage from 'localforage'; +import settings from '@/config/settings'; + +/** + * 获取本地Token + */ +export const getToken = async (): Promise => { + return await localforage.getItem(settings.siteTokenKey); +}; + +/** + * 设置存储本地Token + */ +export const setToken = async (token: string): Promise => { + try { + await localforage.setItem(settings.siteTokenKey, token); + return true; + } catch (error) { + return false; + } +}; + +/** + * 移除本地Token + */ +export const removeToken = async (): Promise => { + try { + await localforage.removeItem(settings.siteTokenKey); + return true; + } catch (error) { + return false; + } +}; \ No newline at end of file diff --git a/main-antd/src/utils/mock/require-context.js b/main-antd/src/utils/mock/require-context.js new file mode 100644 index 0000000..f1dd6dd --- /dev/null +++ b/main-antd/src/utils/mock/require-context.js @@ -0,0 +1,45 @@ +/** + * 自定义 require.context + * @author LiQingSong + */ +module.exports = function(directory, recursive, regExp) { + const dir = require('node-dir') + const path = require('path') + + // Assume absolute path by default + let basepath = directory + + if (directory[0] === '.') { + // Relative path + basepath = path.join(__dirname, directory) + } else if (!path.isAbsolute(directory)) { + // Module path + basepath = require.resolve(directory) + } + + const keys = dir + .files(basepath, { + sync: true, + recursive: recursive || false + }) + .filter(function(file) { + return file.match(regExp || /\.(json|js)$/) + }) + .map(function(file) { + return path.join('.', file.slice(basepath.length + 1)) + }) + + var context = function(key) { + return require(context.resolve(key)) + } + + context.resolve = function(key) { + return path.join(directory, key) + } + + context.keys = function() { + return keys + } + + return context + } \ No newline at end of file diff --git a/main-antd/src/utils/mock/server.js b/main-antd/src/utils/mock/server.js new file mode 100644 index 0000000..e180d29 --- /dev/null +++ b/main-antd/src/utils/mock/server.js @@ -0,0 +1,98 @@ +/** + * Mock Server + * @author LiQingSong + */ +const requireContext = require('./require-context'); +const chokidar = require('chokidar'); +const path = require('path'); + +// 注册 mock 路由 +function registerMockRoutes(mockDir, app) { + let mockLastIndex = 0; + let mockRoutesLength = 0; + try { + // 导入 /mock 下文件 + const context = requireContext(mockDir, false, /\.js$/); + context.keys().forEach(fileName => { + // 获取内容 + const mocks = context(fileName); + for (const key in mocks) { + const keys = key.replace(/(^\s*)|(\s*$)/g, '').split(' '); + let ajaxType = 'get'; + let ajaxUrl = ''; + if(keys.length<2) { + ajaxUrl = keys[0]; + } else { + ajaxType = keys[0].toLowerCase(); + ajaxUrl = keys[1]; + if(!['get','post','put','patch','delete','head','options'].includes(ajaxType)) { + ajaxType = 'get'; + } + } + if(typeof mocks[key] === 'function') { + app[ajaxType](ajaxUrl, mocks[key]); + mockLastIndex = app._router.stack.length; + mockRoutesLength = mockRoutesLength + 1; + // console.log(app._router.stack.length); + } + } + }); + } catch (error) { + console.log(error); + } + + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } + +} + +// 删除 mock 路由 +function unRegisterMockRoutes(mockDir) { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + + +module.exports = app => { + const mockDir = path.resolve('./mock'); + + const mockRoutes = registerMockRoutes(mockDir,app); + let mockRoutesLength = mockRoutes.mockRoutesLength; + let mockStartIndex = mockRoutes.mockStartIndex; + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add' || event === 'unlink') { + // console.log(event, path); + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength); + + // clear routes cache + unRegisterMockRoutes(mockDir); + + // rest routes + const mockRoutes = registerMockRoutes(mockDir,app); + mockRoutesLength = mockRoutes.mockRoutesLength; + mockStartIndex = mockRoutes.mockStartIndex; + + + console.log(`\n > Mock Server hot reload success! changed ${path}`) + } catch (error) { + console.log(error); + } + + } + }) + + + + +} \ No newline at end of file diff --git a/main-antd/src/utils/object.ts b/main-antd/src/utils/object.ts new file mode 100644 index 0000000..ecdc6dd --- /dev/null +++ b/main-antd/src/utils/object.ts @@ -0,0 +1,46 @@ +/** + * 浅比较两个object, json的key是否一致 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObjectKey(obj1: Object, obj2: Object): boolean{ + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + if(obj1KeysLen!==obj2Keys.length) { + return false; + } + let is = true; + for (let index = 0; index < obj1KeysLen; index++) { + const element: string = obj1Keys[index]; + if(!Object.prototype.hasOwnProperty.call(obj2, element)) { + is = false; + break; + } + } + return is; +} + +/** + * 浅比较两个对象是否相等,这两个对象的值只能是数字或字符串 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObject(obj1: Object, obj2: Object): boolean { + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + const obj2KeysLen: number = obj2Keys.length; + if(obj1KeysLen!==obj2KeysLen) { + return false; + } + + if(obj1KeysLen===0 && obj2KeysLen===0) { + return true; + } + + return !obj1Keys.some(key => obj1[key] != obj2[key]) + +} \ No newline at end of file diff --git a/main-antd/src/utils/request.ts b/main-antd/src/utils/request.ts new file mode 100644 index 0000000..7a2e692 --- /dev/null +++ b/main-antd/src/utils/request.ts @@ -0,0 +1,161 @@ +/** + * 自定义 request 网络请求工具,基于axios + * @author LiQingSong + */ +import axios, { AxiosPromise, AxiosRequestConfig, AxiosResponse } from 'axios'; +import { notification } from "ant-design-vue"; +import router from '@/config/routes'; +import settings from '@/config/settings'; +import { getToken, setToken } from '@/utils/localToken'; + +export interface ResponseData { + code: number; + data?: any; + msg?: string; + token?: string; +} + +const customCodeMessage: {[key: number]: string} = { + 10002: '当前用户登入信息已失效,请重新登入再操作', // 未登陆 +}; + +const serverCodeMessage: {[key: number]: string} = { + 200: '服务器成功返回请求的数据', + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 500: '服务器发生错误,请检查服务器(Internal Server Error)', + 502: '网关错误(Bad Gateway)', + 503: '服务不可用,服务器暂时过载或维护(Service Unavailable)', + 504: '网关超时(Gateway Timeout)', +}; + +/** + * 异常处理程序 + */ +const errorHandler = (error: any) => { + const { response, message } = error; + if (message === 'CustomError') { + // 自定义错误 + const { config, data } = response; + const { url, baseURL} = config; + const { code, msg } = data; + const reqUrl = url.split("?")[0].replace(baseURL, ''); + const noVerifyBool = settings.ajaxResponseNoVerifyUrl.includes(reqUrl); + if (!noVerifyBool) { + notification.error({ + message: `提示`, + description: customCodeMessage[code] || msg || 'Error', + }); + + if (code === 10002) { + router.replace('/user/login'); + } + } + } else if (message === 'CancelToken') { + // 取消请求 Token + // eslint-disable-next-line no-console + console.log(message); + } else if (response && response.status) { + const errorText = serverCodeMessage[response.status] || response.statusText; + const { status, request } = response; + notification.error({ + message: `请求错误 ${status}: ${request.responseURL}`, + description: errorText, + }); + } else if (!response) { + notification.error({ + description: '您的网络发生异常,无法连接服务器', + message: '网络异常', + }); + } + + return Promise.reject(error); +} + +/** + * 配置request请求时的默认参数 + */ +const request = axios.create({ + baseURL: process.env.VUE_APP_APIHOST, // url = api url + request url + withCredentials: true, // 当跨域请求时发送cookie + timeout: 0 // 请求超时时间,5000(单位毫秒) / 0 不做限制 +}); + +// 全局设置 - post请求头 +// request.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + +/** + * 请求前 + * 请求拦截器 + */ +request.interceptors.request.use( + async (config: AxiosRequestConfig & { cType?: boolean }) => { + + // 如果设置了cType 说明是自定义 添加 Content-Type类型 为自定义post 做铺垫 + if (config['cType']) { + config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // 自定义添加token header + const headerToken = await getToken(); + if (headerToken) { + config.headers[settings.ajaxHeadersTokenKey] = headerToken; + } + + return config; + }, + /* error=> {} */ // 已在 export default catch +); + +/** + * 请求后 + * 响应拦截器 + */ +request.interceptors.response.use( + async (response: AxiosResponse) => { + + const res: ResponseData = response.data; + const { code, token } = res; + + // 自定义状态码验证 + if (code !== 0) { + return Promise.reject({ + response, + message: 'CustomError', + }); + } + + // 重置刷新token + if (token) { + await setToken(token); + } + + return response; + }, + /* error => {} */ // 已在 export default catch +); + +/** + * ajax 导出 + * + * Method: get + * Request Headers + * 无 - Content-Type + * Query String Parameters + * name: name + * age: age + * + * Method: post + * Request Headers + * Content-Type:application/json;charset=UTF-8 + * Request Payload + * { name: name, age: age } + * Custom config parameters + * { cType: true } Mandatory Settings Content-Type:application/json;charset=UTF-8 + * ...... + */ +export default function(config: AxiosRequestConfig): AxiosPromise { + return request(config).then((response: AxiosResponse) => response.data).catch(error => errorHandler(error)); +} diff --git a/main-antd/src/utils/routes.ts b/main-antd/src/utils/routes.ts new file mode 100644 index 0000000..058cace --- /dev/null +++ b/main-antd/src/utils/routes.ts @@ -0,0 +1,388 @@ +/** + * Route utils + * @author LiQingSong + */ +/** + * 面包屑类型 + */ + export interface BreadcrumbType { + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + // 路由地址或外链 + path: string; +} + +/** + * tab导航存储规则类型 + */ +export type TabNavType = 'path' | 'querypath'; + +import 'vue-router' +declare module 'vue-router' { + /** + * 自定义补充扩展 - 路由 - 类型字段 + */ + interface _RouteRecordBase { + // 菜单中是否隐藏 + hidden?: boolean; + // 图标的名称,显示在菜单标题前 + icon?: string; + // 权限控制,页面角色(您可以设置多个角色) + roles?: string[]; + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + /** + * 面包屑自定义内容: + * 1、默认不配置按照路由自动读取; + * 2、设置为 false , 按照路由自动读取并不读当前自己; + * 3、配置对应的面包屑格式如下: + */ + breadcrumb?: BreadcrumbType[] | false; + /** + * 设置tab导航存储规则类型 + * 1、默认不配置按照path(route.path)规则 + * 2、querypath:path + query (route.path+route.query) 规则 + */ + tabNavType?: TabNavType ; + /** + * 设置该字段,则在关闭当前tab页时,作为关闭前的钩子函数 + * @param close 关闭回调函数 + */ + tabNavCloseBefore?: (close: ()=>void)=> void; + /** + * 左侧菜单选中,如果设置路径,侧栏将突出显示你设置的路径对应的侧栏导航 + * 1、(默认 route.path),此参数是为了满足特殊页面特殊需求, + * 2、如:详情页等选中侧栏导航或在模块A下面的页面,想选模块B为导航选中状态 + */ + selectLeftMenu?: string; + + // 所有父元素的path,下标key按照父元素的顺序 + parentPath?: string[] + } +} +import { RouteRecordRaw, RouteLocationNormalizedLoaded } from 'vue-router'; +import { pathToRegexp } from "path-to-regexp"; + + +/** + * 自定义重命名 - 路由类型 + */ +export type RoutesDataItem = RouteRecordRaw; + +/** + * 头部tab导航类型 + */ +export interface TabNavItem { + route: RouteLocationNormalizedLoaded, + menu: RoutesDataItem +} + +/** + * 用Routes的path作为key的JsonRoutes + */ +export interface PathJsonRoutesDataItem { + [path: string]: RoutesDataItem +} + +import { isExternal } from './validate'; +import { equalObject } from "./object"; + +/** + * 获取 route + * @param pathname path + * @param routesData routes + */ +export const getRouteItem = (pathname: string, routesData: RoutesDataItem[]): RoutesDataItem => { + let item: RoutesDataItem = { title: '', path: '', redirect: '', roles: [] }; + for (let index = 0, len = routesData.length; index < len; index += 1) { + const element = routesData[index]; + //if (element.path === pathname) { + // lqs 20210120 修复用pathToRegexp + if (pathToRegexp(element.path).exec(pathname)) { + item = element; + break; + } + + if (element.children) { + item = getRouteItem(pathname, element.children); + if (item.path !== '') { + break; + } + } + } + + return item; +}; + +/** + * 获取 route + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getJsonRouteItem = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem => { + return jsonRoutesData[pathname] || {}; +} + +/** + * 根据 hidden 判断是否有数据子集 + * @param children RoutesDataItem[] + */ +export const hasChildRoute = (children: RoutesDataItem[]): boolean => { + const showChildren = children.filter(item => { + if (item.hidden) { + return false; + } + return true; + }); + if (showChildren.length > 0) { + return true; + } + return false; +}; + + +/** + * 根据父path 设置当前项 path + * @param pathname path + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const setRoutePathForParent = (pathname: string, parentPath = '/', headStart = '/'): string => { + if (isExternal(pathname)) { + return pathname; + } + + return pathname.substr(0, headStart.length) === headStart + ? pathname + : `${parentPath}/${pathname}`; +}; + +/** + * 根据路由 pathname 数组 - 返回对应的 route 数组 + * @param pathname 路由path数组 + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + */ +export const getPathsTheRoutes = ( pathname: string[], jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem[] => { + const routeItem: RoutesDataItem[] = []; + + for (let index = 0, len = pathname.length; index < len; index += 1) { + const element = pathname[index]; + const item = getJsonRouteItem(element, jsonRoutesData); + if (item.path !== '') { + routeItem.push(item); + } + } + + return routeItem; +}; + + +/** + * 获取面包屑对应的 route 数组 + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + */ +export const getBreadcrumbRoutes = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): BreadcrumbType[] => { + const route = getJsonRouteItem(pathname,jsonRoutesData); + if(!route.path) { + return []; + } + + if (!route.breadcrumb) { + const parentPath = route.parentPath || [] + const routes = getPathsTheRoutes(parentPath, jsonRoutesData); + + return route.breadcrumb === false ? routes : [...routes, route]; + } + + return route.breadcrumb; +}; + + +/** + * 获取当前路由选中的侧边栏菜单path + * @param route route + */ +export const getSelectLeftMenuPath = (route: RoutesDataItem): string => { + return route.selectLeftMenu || route.path; +}; + + + +/** + * 格式化返回 vue 路由, 主要处理特殊情况 + * @param routesData routes + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const vueRoutes = (routesData: RoutesDataItem[], parentPath = '/', headStart = '/'): RoutesDataItem[] => { + return routesData.map(item => { + const { children, ...other } = item; + const itemChildren = children || []; + const newItem: RoutesDataItem = { ...other }; + newItem.path = setRoutePathForParent(newItem.path, parentPath, headStart); + + if (item.children) { + newItem.children = [ + ...vueRoutes(itemChildren, newItem.path, headStart), + ]; + } + + return newItem; + }); +}; + +/** + * 把经过 vueRoutes 处理过的 routes 转换成用path作为key的json,并统一增加了parentPath + * @param vueRoutesData 经过 vueRoutes 处理过的 routes + * @returns PathJsonRoutesDataItem + */ + export const jsonPathVueRoutes = (vueRoutesData: RoutesDataItem[]): PathJsonRoutesDataItem=> { + + const jsonRoutes: PathJsonRoutesDataItem = {}; + + function forRoute(routesData: RoutesDataItem[], parentPath: string[]) { + const len = routesData.length; + for (let index = 0; index < len; index++) { + const item = routesData[index]; + + const pPath = (item.parentPath && item.parentPath.length > 0) ? item.parentPath : parentPath; + + const newItem: RoutesDataItem = { + ...item, + parentPath: [...pPath] + }; + + jsonRoutes[item.path] = newItem; + + if (item.children) { + forRoute(item.children,[...pPath, item.path]) + } + + } + } + + forRoute(vueRoutesData, []); + + return jsonRoutes; +} + +/** + * 批量设置route.meta值 + * @param routesData routes + */ + export const routesSetMeta = (routesData: RoutesDataItem[]): RoutesDataItem[] => { + return routesData.map(item => { + const { children, tabNavType, meta, ...other } = item; + const newItem: RoutesDataItem = { + meta: { + ...meta, + + // 自定义设置的 meta 值 S + + tabNavType: tabNavType || 'path', + + // 自定义设置的 meta 值 E + }, + ...other + }; + + if (item.children) { + const itemChildren = children || []; + newItem.children = [ + ...routesSetMeta(itemChildren), + ]; + } + + return newItem; + }); + +} + + +/** + * 根据 自定义传入权限名 判断当前用户是否有权限 + * @param userRoles 用户的权限 + * @param roles 自定义权限名 + */ +export const hasPermissionRouteRoles = (userRoles: string[], roles?: string | string[]): boolean => { + if (userRoles.includes('admin')) { + return true; + } + + if(typeof roles === 'undefined') { + return true; + } + + if (typeof roles === 'string') { + return userRoles.includes(roles); + } + + if(roles instanceof Array && roles.length > 0) { + return roles.some(role => userRoles.includes(role)); + } + + return false; +}; + +/** + * 根据 route.roles 判断当前用户是否有权限 + * @param roles 用户的权限 + * @param route 当前路由 + */ +export const hasPermission = (roles: string[], route: RoutesDataItem): boolean => { + if (roles.includes('admin')) { + return true; + } + + if (route.roles) { + return route.roles.some(role => roles.includes(role)); + //return roles.some(role => route.roles?.includes(role)); + } + + return true; +}; + +/** + * 根据用户权限 获取 对应权限菜单 + * @param roles 用户的权限 + * @param routes 框架对应路由 + */ +export const getPermissionMenuData = ( roles: string[], routes: RoutesDataItem[]): RoutesDataItem[] => { + const menu: RoutesDataItem[] = []; + for (let index = 0, len = routes.length; index < len; index += 1) { + const element = {...routes[index]}; + if (hasPermission(roles, element)) { + if (element.children) { + element.children = getPermissionMenuData(roles, element.children); + } + menu.push(element); + } + } + + return menu; +}; + + +/** + * 判断tabNav,对应的route是否相等 + * @param route1 vue-route + * @param route2 vue-route + * @param type 判断规则 + * @returns + */ + export const equalTabNavRoute = (route1: RouteLocationNormalizedLoaded, route2: RouteLocationNormalizedLoaded, type: TabNavType = 'path'): boolean=> { + let is = false; + switch (type) { + case 'querypath': // path + query + is = equalObject(route1.query,route2.query) && route1.path === route2.path + break; + default: // path + is = route1.path === route2.path + break; + } + + return is; +} + diff --git a/main-antd/src/utils/store.ts b/main-antd/src/utils/store.ts new file mode 100644 index 0000000..f21cae9 --- /dev/null +++ b/main-antd/src/utils/store.ts @@ -0,0 +1,61 @@ +/** + * Store utils + * @author LiQingSong + */ +import { Module, ModuleTree } from 'vuex'; + +/** + * 自定义项目 Store Module 类型 + * 为自动导入的 store 做类型限制 + * [@/store文件夹下定义的 store]与[@/views文件夹下定义的`文件store.ts`] 必须继承此类型 + * @author LiQingSong + */ +export interface StoreModuleType extends Module { + namespaced: true; + name: string; +} + +/** + * 自动导入 Store + * @author LiQingSong + */ +export function importAllStore (): ModuleTree { + const modules: ModuleTree = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:store.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]store\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + + // 导入 @/store 下文件 + const requireContext: __WebpackModuleApi.RequireContext = require.context('../store', false, /\.ts$/); + requireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = requireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + \ No newline at end of file diff --git a/main-antd/src/utils/validate.ts b/main-antd/src/utils/validate.ts new file mode 100644 index 0000000..1c553f6 --- /dev/null +++ b/main-antd/src/utils/validate.ts @@ -0,0 +1,9 @@ +/** + * 判断是否是外链 + * @param {string} path + * @returns {Boolean} + * @author LiQingSong + */ +export const isExternal = (path: string): boolean => { + return /^(https?:|mailto:|tel:)/.test(path); +}; diff --git a/main-antd/src/views/404/index.vue b/main-antd/src/views/404/index.vue new file mode 100644 index 0000000..44657a6 --- /dev/null +++ b/main-antd/src/views/404/index.vue @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/main-antd/src/views/home/index.vue b/main-antd/src/views/home/index.vue new file mode 100644 index 0000000..49353f8 --- /dev/null +++ b/main-antd/src/views/home/index.vue @@ -0,0 +1,156 @@ + + + diff --git a/main-antd/src/views/qiankun/index.vue b/main-antd/src/views/qiankun/index.vue new file mode 100644 index 0000000..e68d27f --- /dev/null +++ b/main-antd/src/views/qiankun/index.vue @@ -0,0 +1,7 @@ + + diff --git a/main-antd/src/views/qiankun/start.vue b/main-antd/src/views/qiankun/start.vue new file mode 100644 index 0000000..fb27956 --- /dev/null +++ b/main-antd/src/views/qiankun/start.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/main-antd/src/views/qiankun/startScreen.vue b/main-antd/src/views/qiankun/startScreen.vue new file mode 100644 index 0000000..c85ef62 --- /dev/null +++ b/main-antd/src/views/qiankun/startScreen.vue @@ -0,0 +1,51 @@ + + + + diff --git a/main-antd/src/views/refresh/index.vue b/main-antd/src/views/refresh/index.vue new file mode 100644 index 0000000..c2b19a5 --- /dev/null +++ b/main-antd/src/views/refresh/index.vue @@ -0,0 +1,17 @@ + diff --git a/main-antd/src/views/user/login/data.d.ts b/main-antd/src/views/user/login/data.d.ts new file mode 100644 index 0000000..078638b --- /dev/null +++ b/main-antd/src/views/user/login/data.d.ts @@ -0,0 +1,4 @@ +export interface LoginParamsType { + username: string; + password: string; +} diff --git a/main-antd/src/views/user/login/index.vue b/main-antd/src/views/user/login/index.vue new file mode 100644 index 0000000..85d218e --- /dev/null +++ b/main-antd/src/views/user/login/index.vue @@ -0,0 +1,161 @@ + + + diff --git a/main-antd/src/views/user/login/locales/en-US.ts b/main-antd/src/views/user/login/locales/en-US.ts new file mode 100644 index 0000000..a5db472 --- /dev/null +++ b/main-antd/src/views/user/login/locales/en-US.ts @@ -0,0 +1,11 @@ +export default { + 'page.user.login.form-item-username': 'username: admin or test or user', + 'page.user.login.form-item-username.required': 'Please input your username', + 'page.user.login.form-item-password': 'password: 123465', + 'page.user.login.form-item-password.required': 'Please input your password', + 'page.user.login.form.title': 'Account Login', + 'page.user.login.form.btn-submit': 'Sign in', + 'page.user.login.form.btn-jump': 'or register now!', + 'page.user.login.form.login-error': 'Wrong username or password!', + 'page.user.login.form.login-success': 'Login successful!', +}; diff --git a/main-antd/src/views/user/login/locales/zh-CN.ts b/main-antd/src/views/user/login/locales/zh-CN.ts new file mode 100644 index 0000000..a18a683 --- /dev/null +++ b/main-antd/src/views/user/login/locales/zh-CN.ts @@ -0,0 +1,11 @@ +export default { + 'page.user.login.form-item-username': '用户名: admin or test or user', + 'page.user.login.form-item-username.required': '请输入用户名', + 'page.user.login.form-item-password': '密码:123456', + 'page.user.login.form-item-password.required': '请输入密码', + 'page.user.login.form.title': '账户登录', + 'page.user.login.form.btn-submit': '登录', + 'page.user.login.form.btn-jump': '还没有账户?现在注册!', + 'page.user.login.form.login-error': '用户名或密码错误!', + 'page.user.login.form.login-success': '登录成功!', +}; diff --git a/main-antd/src/views/user/login/locales/zh-TW.ts b/main-antd/src/views/user/login/locales/zh-TW.ts new file mode 100644 index 0000000..9f898f0 --- /dev/null +++ b/main-antd/src/views/user/login/locales/zh-TW.ts @@ -0,0 +1,11 @@ +export default { + 'page.user.login.form-item-username': '用戶名: admin or test or user', + 'page.user.login.form-item-username.required': '請輸入用戶名', + 'page.user.login.form-item-password': '密碼: 123456', + 'page.user.login.form-item-password.required': '請輸入密碼', + 'page.user.login.form.title': '賬戶登錄', + 'page.user.login.form.btn-submit': '登錄', + 'page.user.login.form.btn-jump': '還沒有賬戶?現在註冊!', + 'page.user.login.form.login-error': '用戶名或密碼錯誤!', + 'page.user.login.form.login-success': '登錄成功!', +}; diff --git a/main-antd/src/views/user/login/service.ts b/main-antd/src/views/user/login/service.ts new file mode 100644 index 0000000..436e376 --- /dev/null +++ b/main-antd/src/views/user/login/service.ts @@ -0,0 +1,10 @@ +import request from '@/utils/request'; +import { LoginParamsType } from './data.d'; + +export async function accountLogin(params: LoginParamsType): Promise { + return request({ + url: '/user/login', + method: 'POST', + data: params, + }); +} \ No newline at end of file diff --git a/main-antd/src/views/user/login/store.ts b/main-antd/src/views/user/login/store.ts new file mode 100644 index 0000000..b40753c --- /dev/null +++ b/main-antd/src/views/user/login/store.ts @@ -0,0 +1,63 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { ResponseData } from '@/utils/request'; +import { setToken } from '@/utils/localToken'; +import { accountLogin } from './service'; +import { LoginParamsType } from "./data.d"; + +export interface StateType { + loginStatus?: 'ok' | 'error'; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + changeLoginStatus: Mutation; + }; + actions: { + login: Action; + }; +} + +const initState: StateType = { + loginStatus: undefined, +} + +const StoreModel: ModuleType = { + namespaced: true, + name: 'userlogin', + state: { + ...initState + }, + mutations: { + changeLoginStatus(state, payload) { + state.loginStatus = payload; + }, + }, + actions: { + async login({ commit }, payload: LoginParamsType) { + let status: string | undefined = undefined; + try { + const response: ResponseData = await accountLogin(payload); + const { data } = response; + setToken(data.token || ''); + status = 'ok'; + } catch (error:any) { + if (error.message && error.message === 'CustomError') { + status = 'error'; + } + } + + commit('changeLoginStatus',status); + + if (status === 'ok') { + return true; + } else if (status === 'error') { + return false; + } + return undefined; + } + } +} + +export default StoreModel; diff --git a/main-antd/src/views/user/register/data.d.ts b/main-antd/src/views/user/register/data.d.ts new file mode 100644 index 0000000..d02fe6e --- /dev/null +++ b/main-antd/src/views/user/register/data.d.ts @@ -0,0 +1,5 @@ +export interface RegisterParamsType { + username: string; + password: string; + confirm: string; +} diff --git a/main-antd/src/views/user/register/index.vue b/main-antd/src/views/user/register/index.vue new file mode 100644 index 0000000..a7bc4ac --- /dev/null +++ b/main-antd/src/views/user/register/index.vue @@ -0,0 +1,161 @@ + + + diff --git a/main-antd/src/views/user/register/locales/en-US.ts b/main-antd/src/views/user/register/locales/en-US.ts new file mode 100644 index 0000000..5ce3154 --- /dev/null +++ b/main-antd/src/views/user/register/locales/en-US.ts @@ -0,0 +1,16 @@ +export default { + 'page.user.register.form-item-username': 'Username', + 'page.user.register.form-item-username.required': + 'Please input your username', + 'page.user.register.form-item-password': 'Password', + 'page.user.register.form-item-password.required': + 'Please input your password', + 'page.user.register.form-item-confirmpassword': 'Confirm Password', + 'page.user.register.form-item-confirmpassword.compare': + 'The two passwords that you entered do not match!', + 'page.user.register.form.title': 'Account Registration', + 'page.user.register.form.btn-submit': 'Register', + 'page.user.register.form.btn-jump': 'Already have an account?', + 'page.user.register.form.register-success': + 'Registered successfully, please log in!', +}; diff --git a/main-antd/src/views/user/register/locales/zh-CN.ts b/main-antd/src/views/user/register/locales/zh-CN.ts new file mode 100644 index 0000000..19e6b9d --- /dev/null +++ b/main-antd/src/views/user/register/locales/zh-CN.ts @@ -0,0 +1,13 @@ +export default { + 'page.user.register.form-item-username': '用户名', + 'page.user.register.form-item-username.required': '请输入用户名', + 'page.user.register.form-item-password': '密码', + 'page.user.register.form-item-password.required': '请输入密码', + 'page.user.register.form-item-confirmpassword': '确认密码', + 'page.user.register.form-item-confirmpassword.compare': + '您输入的两个密码不匹配!', + 'page.user.register.form.title': '注册账户', + 'page.user.register.form.btn-submit': '注册', + 'page.user.register.form.btn-jump': '已有账户?现在登录!', + 'page.user.register.form.register-success': '注册成功,请登录!', +}; diff --git a/main-antd/src/views/user/register/locales/zh-TW.ts b/main-antd/src/views/user/register/locales/zh-TW.ts new file mode 100644 index 0000000..3203787 --- /dev/null +++ b/main-antd/src/views/user/register/locales/zh-TW.ts @@ -0,0 +1,13 @@ +export default { + 'page.user.register.form-item-username': '用戶名', + 'page.user.register.form-item-username.required': '請輸入用戶名', + 'page.user.register.form-item-password': '密碼', + 'page.user.register.form-item-password.required': '請輸入密碼', + 'page.user.register.form-item-confirmpassword': '確認密碼', + 'page.user.register.form-item-confirmpassword.compare': + '您輸入的兩個密碼不匹配!', + 'page.user.register.form.title': '註冊賬戶', + 'page.user.register.form.btn-submit': '註冊', + 'page.user.register.form.btn-jump': '已有賬戶?現在登錄!', + 'page.user.register.form.register-success': '註冊成功,請登錄!', +}; diff --git a/main-antd/src/views/user/register/service.ts b/main-antd/src/views/user/register/service.ts new file mode 100644 index 0000000..614a67c --- /dev/null +++ b/main-antd/src/views/user/register/service.ts @@ -0,0 +1,10 @@ +import request from '@/utils/request'; +import { RegisterParamsType } from './data.d'; + +export async function accountReg(params: RegisterParamsType): Promise { + return request({ + url: '/user/register', + method: 'POST', + data: params, + }); +} \ No newline at end of file diff --git a/main-antd/src/views/user/register/store.ts b/main-antd/src/views/user/register/store.ts new file mode 100644 index 0000000..3080467 --- /dev/null +++ b/main-antd/src/views/user/register/store.ts @@ -0,0 +1,62 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { RegisterParamsType } from "./data.d"; +import { accountReg } from "./service"; + +export interface StateType { + errorMsg?: string; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + changeErrorMsg: Mutation; + }; + actions: { + register: Action; + }; +} + +const initState: StateType = { + errorMsg: undefined, +}; + +const StoreModel: ModuleType = { + namespaced: true, + name: 'userregister', + state: { + ...initState + }, + mutations: { + changeErrorMsg(state, payload) { + state.errorMsg = payload; + }, + }, + actions: { + async register({ commit }, payload: RegisterParamsType) { + let msg: string | undefined = undefined; + try { + await accountReg(payload); + msg = ''; + } catch (error: any) { + if (error.message && error.message === 'CustomError') { + const { response } = error; + const { data } = response; + msg = data.msg || 'error'; + } + } + + commit('changeErrorMsg',msg); + + if (msg === '') { + return true; // 成功 + } else if (typeof msg === 'undefined') { + return undefined; // 服务器错误 + } else { + return false; // 自定义错误 + } + } + } +}; + +export default StoreModel; diff --git a/main-antd/tests/unit/example.spec.ts b/main-antd/tests/unit/example.spec.ts new file mode 100644 index 0000000..4b21ca7 --- /dev/null +++ b/main-antd/tests/unit/example.spec.ts @@ -0,0 +1,12 @@ +import { shallowMount } from '@vue/test-utils' +import HelloWorld from '@/components/HelloWorld.vue' + +describe('HelloWorld.vue', () => { + it('renders props.msg when passed', () => { + const msg = 'new message' + const wrapper = shallowMount(HelloWorld, { + props: { msg } + }) + expect(wrapper.text()).toMatch(msg) + }) +}) diff --git a/main-antd/tsconfig.json b/main-antd/tsconfig.json new file mode 100644 index 0000000..d6260c1 --- /dev/null +++ b/main-antd/tsconfig.json @@ -0,0 +1,42 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "noImplicitAny": false, + "baseUrl": ".", + "types": [ + "webpack-env", + "jest" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/main-antd/vue.config.js b/main-antd/vue.config.js new file mode 100644 index 0000000..39f0d6f --- /dev/null +++ b/main-antd/vue.config.js @@ -0,0 +1,93 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { stringified } = require('../scripts/server/env'); +const bodyParser = require('body-parser') +const mockServer = require('./src/utils/mock/server'); +const { NODE_ENV, VUE_APP_PORT, VUE_APP_MOCK } = process.env; +module.exports = { + publicPath: '/', + outputDir: 'dist', + productionSourceMap: false, + devServer: { + port: VUE_APP_PORT || 9090, + // 配置反向代理 + /* + proxy: { + '/api': { + target: '', + ws: true, + changeOrigin: true + }, + '/foo': { + target: '' + } + }, + */ + before: function(app, server) { + if(NODE_ENV === 'development' && VUE_APP_MOCK === 'true') { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + // create application/json parser + app.use(bodyParser.json()); + // create application/x-www-form-urlencoded parser + app.use(bodyParser.urlencoded({ extended: false})); + mockServer(app); + } + } + }, + css: { + loaderOptions: { + less: { + javascriptEnabled: true, + } + } + }, + // 修改webpack的配置 + configureWebpack: { + // 不需要打包的插件 + externals: { + // 'vue': 'Vue', + // 'vue-router': 'VueRouter', + } + }, + chainWebpack(config) { + + // 内置的 svg Rule 添加 exclude + config.module + .rule('svg') + .exclude.add(/iconsvg/) + .end(); + + // 添加 svg-sprite-loader Rule + config.module + .rule('svg-sprite-loader') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader'); + + // 添加 svgo Rule + config.module + .rule('svgo') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svgo-loader') + .loader('svgo-loader') + .options({ + // externalConfig 配置特殊不是相对路径,起始路径是根目录 + externalConfig: './src/assets/iconsvg/svgo.yml', + }); + + // 添加自定义环境变量 + config.plugin('define') + .tap(args => { + args[0]['process.env'] = { + ...args[0]['process.env'], + ...stringified + } + return args + }) + + } +} diff --git a/main/.browserslistrc b/main/.browserslistrc new file mode 100644 index 0000000..214388f --- /dev/null +++ b/main/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/main/.editorconfig b/main/.editorconfig new file mode 100644 index 0000000..ed19d9c --- /dev/null +++ b/main/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/main/.env.development b/main/.env.development new file mode 100644 index 0000000..5a4c790 --- /dev/null +++ b/main/.env.development @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'development' + +# devServer port +VUE_APP_PORT=8080 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = true + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/main/.env.production b/main/.env.production new file mode 100644 index 0000000..ee24e9d --- /dev/null +++ b/main/.env.production @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'production' + +# devServer port +VUE_APP_PORT=8080 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = false + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/main/.eslintignore b/main/.eslintignore new file mode 100644 index 0000000..87160f7 --- /dev/null +++ b/main/.eslintignore @@ -0,0 +1 @@ +../scripts diff --git a/main/.eslintrc.js b/main/.eslintrc.js new file mode 100644 index 0000000..875ed93 --- /dev/null +++ b/main/.eslintrc.js @@ -0,0 +1,42 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/typescript/recommended' + ], + parserOptions: { + ecmaVersion: 2020 + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + '@typescript-eslint/no-explicit-any': ['off'], + '@typescript-eslint/no-unused-vars': ['off'], + '@typescript-eslint/ban-types': ['off'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + }, + { + files: [ + './mock/*.{j,t}s?(x)', + './src/utils/mock/*.{j,t}s?(x)' + ], + rules: { + 'no-var': ['off'], + '@typescript-eslint/no-var-requires': ['off'], + } + } + ] +} diff --git a/main/.gitignore b/main/.gitignore new file mode 100644 index 0000000..5d55bb1 --- /dev/null +++ b/main/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +yarn.lock + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/main/LICENSE b/main/LICENSE new file mode 100644 index 0000000..0f21b74 --- /dev/null +++ b/main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 LiQingSong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/main/README.md b/main/README.md new file mode 100644 index 0000000..29eec2e --- /dev/null +++ b/main/README.md @@ -0,0 +1,50 @@ +# main + +main 基于 admin-element-vue-typescript ([github](https://github.com/lqsong/admin-element-vue/tree/typescript.v2)、[gitee](https://gitee.com/lqsong/admin-element-vue/tree/typescript.v2))开发 + +## Demo + +| [main-demo](http://main-demo.admin-vue3-micro-qiankun.liqingsong.cc/) | +:-------------------------: +| ![Home](http://admin-vue3-micro-qiankun.liqingsong.cc/images/index.png) | + + +## 使用文档 + + - [http://admin-vue3-micro-qiankun.liqingsong.cc](http://admin-vue3-micro-qiankun.liqingsong.cc) + - [Github](https://github.com/lqsong/admin-vue3-micro-qiankun) + - [Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun) + - [http://admin-element-vue.liqingsong.cc/tsv2/](http://admin-element-vue.liqingsong.cc/tsv2/) + - [http://admin-antd-vue.liqingsong.cc](http://dmin-antd-vue.liqingsong.cc) + + + +## 后台前端解决方案列表 + + - admin-element-vue([GitHub](https://github.com/lqsong/admin-element-vue)、[Gitee](https://gitee.com/lqsong/admin-element-vue)) + - admin-antd-vue([GitHub](https://github.com/lqsong/admin-antd-vue)、[Gitee](https://gitee.com/lqsong/admin-antd-vue)) + - admin-antd-react([GitHub](https://github.com/lqsong/admin-antd-react)、[Gitee](https://gitee.com/lqsong/admin-antd-react)) + - electron-admin-element-vue([GitHub](https://github.com/lqsong/electron-admin-element-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-element-vue)) + - electron-admin-antd-vue([GitHub](https://github.com/lqsong/electron-admin-antd-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-vue)) + - electron-admin-antd-react([GitHub](https://github.com/lqsong/electron-admin-antd-react)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-react)) + - admin-vue3-micro-qiankun([GitHub](https://github.com/lqsong/admin-vue3-micro-qiankun)、[Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun)) + + +## 自定义配置 + +### **(建议)** 本地或开发模式下,不要直接修改 '.env.development' +复制 '.env.development' 重命名为 ' .env.development.local' , 修改对应的参数. + +### **(建议)** 生产模式下,不要直接修改 '.env.production' +复制 '.env.production' 重命名为 ' .env.production.local' , 修改对应的参数. + + + +## 捐赠 + +如果你觉得这个项目帮助到了你,请帮助点击 Star,你也可以请作者喝咖啡表示鼓励. + +**ALIPAY** | **WECHAT** +:-------------------------:|:-------------------------: +![Alipay](http://uploads.liqingsong.cc/20210430/f62d2436-8d92-407d-977f-35f1e4b891fc.png) | ![Wechat](http://uploads.liqingsong.cc/20210430/3e24efa9-8e79-4606-9bd9-8215ce1235ac.png) + diff --git a/main/babel.config.js b/main/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/main/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/main/jest.config.js b/main/jest.config.js new file mode 100644 index 0000000..d7f13cc --- /dev/null +++ b/main/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel', + transform: { + '^.+\\.vue$': 'vue-jest' + } +} diff --git a/main/mock/global.js b/main/mock/global.js new file mode 100644 index 0000000..48dfcda --- /dev/null +++ b/main/mock/global.js @@ -0,0 +1,39 @@ +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`POST ${VUE_APP_APIHOST || ''}/uploads`] = (req, res) => { + res.send({ + code: 0, + data: { + id: 1, + url: + 'http://uploads.liqingsong.cc/20200531/583057e8-8bab-4eee-b5a0-bec915089c0c.jpg', + name: 'xcx.jpg', + }, + msg: '', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/500`] = (req, res) => { + res.status(500).send({ + timestamp: 1513932555104, + status: 500, + error: 'error', + message: 'error', + path: '/500', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/404`] = (req, res) => { + res.status(404).send({ + timestamp: 1513932643431, + status: 404, + error: 'Not Found', + message: 'No message available', + path: '/404', + }); +}; + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/main/mock/home.js b/main/mock/home.js new file mode 100644 index 0000000..7520ea8 --- /dev/null +++ b/main/mock/home.js @@ -0,0 +1,140 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles/dailynew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + day: mockjs.mock('@float(-10,15,0,2)'), + week: mockjs.mock('@float(-10,15,0,2)'), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/works/weeknew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|7': ['03-01'], + 'num|7': ['@integer(0,3)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/topics/monthnew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|30': ['03-01'], + 'num|30': ['@integer(0,2)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/links/annualnew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|12': ['2019-03'], + 'num|12': ['@integer(0,8)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/searchs/keywords`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + name: '@ctitle(4,8)', + hit: '@integer(1000,10000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/tags`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + name: '@ctitle(4,6)', + id: '@integer(1)', + pinyin: '@word(10,20)', + hit: '@integer(1000,10000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + category: { + id: '@integer(1)', + alias: '@word(4)', + name: '@cword(4)', + }, + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/works`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/main/mock/user.js b/main/mock/user.js new file mode 100644 index 0000000..45bf6fc --- /dev/null +++ b/main/mock/user.js @@ -0,0 +1,89 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const ajaxHeadersTokenKey = 'x-token'; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST}/user/info`] = (req, res) => { + const headers = req.headers; + if (headers[ajaxHeadersTokenKey] === 'admin') { + res.send({ + code: 0, + data: { + id: 1, + name: 'Admins', + avatar: '', + roles: ['admin'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'user') { + res.send({ + code: 0, + data: { + id: 2, + name: 'Users', + avatar: '', + roles: ['user'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'test') { + res.send({ + code: 0, + data: { + id: 3, + name: 'Tests', + avatar: '', + roles: ['test'], + }, + }); + } else { + res.send({ + code: 10002, + data: {}, + msg: '未登录', + }); + } + +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/user/message`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock('@integer(0,99)'), + }); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/login`] = (req, res) => { + const { password, username } = req.body; + const send = { code: 0, data: {}, msg: '' }; + if (username === 'admin' && password === '123456') { + send['data'] = { + token: 'admin', + }; + } else if (username === 'user' && password === '123456') { + send['data'] = { + token: 'user', + }; + } else if (username === 'test' && password === '123456') { + send['data'] = { + token: 'test', + }; + } else { + send['code'] = 201; + send['msg'] = 'Wrong username or password'; + } + + res.send(send); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/register`] = (req, res) => { + res.send({ + code: 0, + data: '', + msg: '', + }); +}; + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/main/package.json b/main/package.json new file mode 100644 index 0000000..cfb85d4 --- /dev/null +++ b/main/package.json @@ -0,0 +1,83 @@ +{ + "name": "admin-vue3-micro-qiankun", + "description": "Micro front-end Admin based on Qiankun, vue3.x, admin-element-vue, admin-antd-vue project architecture", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint", + "svgo": "svgo -f src/assets/iconsvg --config=src/assets/iconsvg/svgo.yml" + }, + "dependencies": { + "@ckeditor/ckeditor5-build-decoupled-document": "^23.1.0", + "@ckeditor/ckeditor5-vue": "^2.0.1", + "@toast-ui/editor": "^2.5.3", + "axios": "^0.21.4", + "core-js": "^3.19.1", + "echarts": "^4.9.0", + "element-plus": "^1.2.0-beta.4", + "localforage": "^1.10.0", + "lodash.debounce": "^4.0.8", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "path-to-regexp": "^6.2.0", + "vue": "^3.2.23", + "vue-i18n": "^9.1.9", + "vue-router": "^4.0.12", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@types/echarts": "^4.9.12", + "@types/jest": "^24.9.1", + "@types/lodash.debounce": "^4.0.6", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", + "@vue/cli-plugin-babel": "~4.5.15", + "@vue/cli-plugin-eslint": "~4.5.15", + "@vue/cli-plugin-router": "~4.5.15", + "@vue/cli-plugin-typescript": "~4.5.15", + "@vue/cli-plugin-unit-jest": "~4.5.15", + "@vue/cli-plugin-vuex": "~4.5.15", + "@vue/cli-service": "~4.5.15", + "@vue/compiler-sfc": "^3.2.23", + "@vue/eslint-config-typescript": "^7.0.0", + "@vue/test-utils": "^2.0.0-rc.17", + "body-parser": "^1.19.0", + "chokidar": "^3.5.2", + "eslint": "^6.8.0", + "eslint-plugin-vue": "^7.20.0", + "lint-staged": "^9.5.0", + "mockjs": "^1.1.0", + "node-dir": "^0.1.17", + "node-sass": "^4.14.1", + "sass": "^1.43.5", + "sass-loader": "^8.0.2", + "svg-sprite-loader": "^5.2.1", + "svgo": "^1.3.2", + "svgo-loader": "^2.2.2", + "typescript": "~4.1.6", + "vue-jest": "^5.0.0-alpha.10" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "keywords": [ + "vue", + "vue3", + "vue3.0", + "vue3.x", + "typescript", + "admin", + "template", + "element-ui", + "element Plus" + ], + "lint-staged": { + "*.{js,jsx,vue,ts,tsx}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/main/public/favicon.ico b/main/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3827b09c79035443036c7679a50b6b1b0fc08a8 GIT binary patch literal 4286 zcmb`Ldr(!^6^Bozl4d3`slj&?l!qFl;v8oQG!+Ue z@5d#IQ4q0X#0T0D6_kfyB_pjG+jLs7{UeNYCetx(IvFN1;`#O4=Ws9g!u`Y89_C}M zv-eu-xAs2!+{<8D_wh4kjAedXmEW+ep_XM$0EVpDV8)$`xvzRDBh-TXVG1NcwbDb| zpcB-C@!Om^H^#)8oUbb9i`Uk{7KFe|DAU%^4(fG-f-~4VZelu!H#sx4EtDE}--ouN zyA8Gv4#RrjGtfO^a!n0W%hdF(FPNiDVzP%?*jQ*KURXKS`1ek0Pfb%hm^8XW+;wLU znXjxN?V$e9LpJ+w$inxM-FG}#u2XY9&&JX6Z$i1OIS2jRA+gwYP(N~w-bg8Js+9Pm z?6s?4bq}kgw|^|9GG}6Phz(Z5t!*^WGH;1{DIfj(q2bCKdJz-|z2ps}_S3RgC&*s> zp6rEtWiO}*WMMgTJ7lkVo7iWhTypYEZr^&2MmXb+xC)0^DjGHb>rnwYKFBLHxuaOy zBH2p|WG~ty`<2~+EaKh=^DmdlUQ#3_yyE5-P@_Md9!*Og^gY97!A(#A1*6ekf_5=A zS=$oU-h;5WmX{s(3 z-(@-0p+H)eul<{9wLhg6pS@XL=&}s!P~=!`{JB(2?f#T%$M6u9jEK?B;Wy|*SeFud z&7Q&Y-XeQtCT#D)_*v4*bhWR`RLs7AI<&_#wjx9JiX6!94||ohSK-`v>C8!58mSM%~-|MF0mJ*pFJB5YL~IrUfNXgSSKie z%NmXKeaU%VcFJo~%Bxrd&u`;geZDzN3#%G5q*)pU8GG}TzPCU_ zo20?qFJR8ZD0v>|htJ1%ehG21llgqi`W`yy_tpA7stv@|0(>0zb{;FWU0hbqaC-Vo&Id)XhA4!o{ zr6sk^?mj0DM1P>;o3RMyqpon&s;YEn+mEEJUS8zf&p-oxqjk7P?=afO!mB|692_U* z({Jt^zQ<rA2Ae*%Nx=uhK+FXgsGc3+M9OS;wxYB~#O1!)P8yyLxO4+yM1LFGtve9n*C3 z*cLr?y-Sn-F3tP+Q(ddzTzaOnKU3J~2`of=yT>PuJU6csg=Yvtw34hK&2*$vh>IQPt(KOm;pf+NF&PIAbf%Noqgz<7HiwZ(CV}6w4?}fv} zn)RH8GyU+OKY)4nZ=kwJOLdXqs*k(~3d$+Q53!H?d4~I-JO~xcSE6NN>w4;Vt*LAL zIy8(Hn%+wd=r=+`WULya+Cf2SAm6O%1Ugmd`(wsxnKv>1`3-)x8Y0^r4Wn1zt8ebR#kyJF-CpFGK0rIyRwN(CfV6g7-^5!>D>l12v>l-bjX|(?fYdNLH literal 0 HcmV?d00001 diff --git a/main/public/index.html b/main/public/index.html new file mode 100644 index 0000000..4123528 --- /dev/null +++ b/main/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/main/src/App.vue b/main/src/App.vue new file mode 100644 index 0000000..5e14af0 --- /dev/null +++ b/main/src/App.vue @@ -0,0 +1,28 @@ + + diff --git a/main/src/assets/css/element-variables.scss b/main/src/assets/css/element-variables.scss new file mode 100644 index 0000000..0b0ed46 --- /dev/null +++ b/main/src/assets/css/element-variables.scss @@ -0,0 +1,60 @@ +/* 只需要重写你需要的即可 */ +@forward "element-plus/theme-chalk/src/common/var.scss" with ( + $colors: ( + "primary": ( + "base": #409eff, + ), + ), +); + +// 导入所有样式: +@use "element-plus/theme-chalk/src/index.scss" as *; + +.el-menu { + .el-menu-item { + .icon { + margin-right: 5px; + } + } +} + +/* 重置 Drawer */ +.el-drawer { + .el-drawer__header { + padding: 15px 20px; + margin-bottom: 0; + border-bottom: 1px solid #f0f0f0; + span, + button { + outline: none; + } + } +} + +/* 重置 card */ +.cus-card { + .el-card { + border: 0; + } +} + +/*自定义 table 样式*/ +.custom-table { + .el-table__header { + background-color: #F5F7FA !important; + } + .custom-td-header-one, + .el-table__body tr:hover .custom-td-header-one { + color: #303133; + font-weight: bold; + background-color: #F5F7FA !important; + } +} +.custom-table-header { + color: #303133; + th { + background-color: #F5F7FA !important; + } +} + + diff --git a/main/src/assets/css/global.scss b/main/src/assets/css/global.scss new file mode 100644 index 0000000..39e1937 --- /dev/null +++ b/main/src/assets/css/global.scss @@ -0,0 +1,51 @@ +@import './element-variables.scss'; +@import './variables.scss'; +@import './mixin.scss'; + +#nprogress .bar { + background: var(--el-color-primary) !important; +} + +.flex-wrap-wrap { + flex-wrap: wrap; +} + +a { + color: #1890ff; + text-decoration: none; + background-color: transparent; + outline: none; + cursor: pointer; + transition: color .3s; +} +a:active, +a:hover { + text-decoration: none; + outline: 0; +} +a:active { + color: #096dd9; +} +a:hover { + color: #40a9ff; +} + +.border-solid-transparent{ + border: solid 1px transparent; +} + +.text-align-right { + text-align: right; +} + +.float-right { + float: right; +} + +.padding-t10 { + padding-top: 10px; +} + +.cursor-pointer { + cursor: pointer; +} \ No newline at end of file diff --git a/main/src/assets/css/mixin.scss b/main/src/assets/css/mixin.scss new file mode 100644 index 0000000..5c9b66d --- /dev/null +++ b/main/src/assets/css/mixin.scss @@ -0,0 +1,30 @@ +@mixin scrollbar( + $thumb-background: hsla(0,0%,100%,.2), + $thumb-shadow: hsla(0,0%,100%,.05), + $track-background:hsla(0,0%,100%,.15), + $track-shadow: rgba(37,37,37,.05) + ) { + ::-webkit-scrollbar { + width: 6px; + height: 6px; + } + ::-webkit-scrollbar-thumb { + background: $thumb-background; + border-radius: 3px; + box-shadow: inset 0 0 5px $thumb-shadow; + } + ::-webkit-scrollbar-track { + background: $track-background; + border-radius: 3px; + box-shadow: inset 0 0 5px $track-shadow; + } +} + +@mixin scrollbar-light { + @include scrollbar( + hsla(0,0%,0%,.2), hsla(0,0%,0%,.05), + hsla(0,0%,0%,.15), rgba(255,255,255,.05) + ) +} + + diff --git a/main/src/assets/css/variables.scss b/main/src/assets/css/variables.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/main/src/assets/css/variables.scss @@ -0,0 +1 @@ + diff --git a/main/src/assets/iconsvg/arrow-down.svg b/main/src/assets/iconsvg/arrow-down.svg new file mode 100644 index 0000000..e908c7c --- /dev/null +++ b/main/src/assets/iconsvg/arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/arrow-left.svg b/main/src/assets/iconsvg/arrow-left.svg new file mode 100644 index 0000000..a67bac0 --- /dev/null +++ b/main/src/assets/iconsvg/arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/arrow-left2.svg b/main/src/assets/iconsvg/arrow-left2.svg new file mode 100644 index 0000000..91e12cd --- /dev/null +++ b/main/src/assets/iconsvg/arrow-left2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/arrow-right.svg b/main/src/assets/iconsvg/arrow-right.svg new file mode 100644 index 0000000..e5ae955 --- /dev/null +++ b/main/src/assets/iconsvg/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/arrow-right2.svg b/main/src/assets/iconsvg/arrow-right2.svg new file mode 100644 index 0000000..9afed8e --- /dev/null +++ b/main/src/assets/iconsvg/arrow-right2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/arrow-up.svg b/main/src/assets/iconsvg/arrow-up.svg new file mode 100644 index 0000000..af1f625 --- /dev/null +++ b/main/src/assets/iconsvg/arrow-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/close.svg b/main/src/assets/iconsvg/close.svg new file mode 100644 index 0000000..454f992 --- /dev/null +++ b/main/src/assets/iconsvg/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/close2.svg b/main/src/assets/iconsvg/close2.svg new file mode 100644 index 0000000..d460e59 --- /dev/null +++ b/main/src/assets/iconsvg/close2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/home.svg b/main/src/assets/iconsvg/home.svg new file mode 100644 index 0000000..d0c28bf --- /dev/null +++ b/main/src/assets/iconsvg/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/language-outline.svg b/main/src/assets/iconsvg/language-outline.svg new file mode 100644 index 0000000..3a74ce7 --- /dev/null +++ b/main/src/assets/iconsvg/language-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/menu-article.svg b/main/src/assets/iconsvg/menu-article.svg new file mode 100644 index 0000000..4887b9c --- /dev/null +++ b/main/src/assets/iconsvg/menu-article.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/menu-fold.svg b/main/src/assets/iconsvg/menu-fold.svg new file mode 100644 index 0000000..a1cd1d2 --- /dev/null +++ b/main/src/assets/iconsvg/menu-fold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/menu-links.svg b/main/src/assets/iconsvg/menu-links.svg new file mode 100644 index 0000000..e8c3945 --- /dev/null +++ b/main/src/assets/iconsvg/menu-links.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/menu-unfold.svg b/main/src/assets/iconsvg/menu-unfold.svg new file mode 100644 index 0000000..ce81453 --- /dev/null +++ b/main/src/assets/iconsvg/menu-unfold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/message.svg b/main/src/assets/iconsvg/message.svg new file mode 100644 index 0000000..98d51bd --- /dev/null +++ b/main/src/assets/iconsvg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/more.svg b/main/src/assets/iconsvg/more.svg new file mode 100644 index 0000000..43056fe --- /dev/null +++ b/main/src/assets/iconsvg/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/pwd.svg b/main/src/assets/iconsvg/pwd.svg new file mode 100644 index 0000000..e4fe64a --- /dev/null +++ b/main/src/assets/iconsvg/pwd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/refresh.svg b/main/src/assets/iconsvg/refresh.svg new file mode 100644 index 0000000..3362510 --- /dev/null +++ b/main/src/assets/iconsvg/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/set.svg b/main/src/assets/iconsvg/set.svg new file mode 100644 index 0000000..9097411 --- /dev/null +++ b/main/src/assets/iconsvg/set.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/svgo.yml b/main/src/assets/iconsvg/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/main/src/assets/iconsvg/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/main/src/assets/iconsvg/theme.svg b/main/src/assets/iconsvg/theme.svg new file mode 100644 index 0000000..b993366 --- /dev/null +++ b/main/src/assets/iconsvg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/tick.svg b/main/src/assets/iconsvg/tick.svg new file mode 100644 index 0000000..add04ca --- /dev/null +++ b/main/src/assets/iconsvg/tick.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/iconsvg/user.svg b/main/src/assets/iconsvg/user.svg new file mode 100644 index 0000000..c796451 --- /dev/null +++ b/main/src/assets/iconsvg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main/src/assets/images/bg.svg b/main/src/assets/images/bg.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/main/src/assets/images/bg.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/src/assets/images/logo.png b/main/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..37ff91e08195b41a4f603aa7a26314a42a8873a2 GIT binary patch literal 3294 zcmaJ^YdDl^7k&pJ29fNc)EEk7%y}{sVT@r!IaO3LXC~%gX5?5x4oOHwL?n_@lt@jY zNJ>f3k+!6RQnAai!F;1#`}=wVVq-uJrKTF+WPo_(I{U9>ceGynk5qPmj3 z72l+rfsVjW8&eWe3}g^FVqCo!G%# z*Ju&jCwjdvGdhGxV8QIyLTw|73I{y4gbt15h4RJ3NITdMzeL4)ZW{rE{(wkA>|lQf z<>%oEbrOi!P@FXm&P1ZH(A5NM6b^;8L0Li3NE8Nv#2`=@I0{Wf5{M`q^ydRpsEJq{ zqBoiHQ%hml!Ga|cArXOyh={O`z*q}JK?oFqKtLeT2s9e5K)}UOdbJ>E<~WLkq91dF0UVGvBaDG z-!OiQ7W+mC*$8j8SP(8^D$avr`ircn-Mkl3V1>0_Tw+Kq=L0p2gjkR$+F(ePVlK z5x6LCb{BK@L8yvnxJ8+N%-dVIrscB;W(~xAwsUiUcvSpKfP_Pe&H93WBScu)`I3x?b084Q3{2(ku3zy>ee5C0QD12-!O&#~gl+MyJLxC+}Fi(7N<`*@79) zpo-BJRot|eDJIck0R~W6@JuV+K^k8mEN%%cZfKXwnXYQdn#%X$9g0XxZnuC+;~b6E zM&HQ)=-abCPFxT_u~fPFwhtKmE)ap9mVv+yv|yx75u0|DMY}H?Gg5AD2Pnx^xnqWV zPP8|TzSmSvd?b^DZGC1@(_aS|uL`CL9lvOGE^Z2@eb?-cqNW}^G2RuItdnVG_+tA- z%rjdRw^$C11~O`o%uDRIx7bd;{E}{C*4`#0X%03B!256Po<~?bI4yrAR3RSMg=nW& zf~x?fP7l>{3!J@{$OAI-Op?7@txmCA@CFPf^CWhi+kMr*cpV0!47}rd!dERbDfPZ5 zBYy=8Ya2E2y=a26iC;*(95HMs|F%Xx(c=d8YxrWZ=8gQZ!6mOg5B$s%=_aaI-Rv&6 zu-s~7+9u0)n2OlFm6&;Jb!l2Wi@Sj)?!8TXS^D=K`LeB%6*sqPt*nXZHjo7eI+$s2 zTrr1N6-4VYEjq!uXVE2;@DInfRlN^WBh~ps?K&C#W-N~1qQdvF9S704m)eWwX*D3_ z>QRQmvqzeZ*9ANbdkkS#Eb*Qmb+?PjH*^^}^YQ9{NQSBwI6Zmzz&m^Nh}wfgwj;X4 zi-sFYO}p~fh22N-vlmWq7WRytmqDBbXO)NJb(3zSHtGn?vU+l+)g4@>_O?MSt`ona@-S`Yz>^bg|kPkzw0H4+lV_sryf0AQpOMU}J@8AR?OT}X| z=s?ATYAp=C+Dg?X84T7A(AqwCwtOls^L*W(-XSHwt<=%KSLcG0t<2|dK2UDn zUKTEz)H}Rr)P4;@dcPT{k3iL3>70&f}meG3fbo2`F-HR#S&r8gr9qK~5ZU!v( z+WU}n&dS%Km#ke1hm{&s_^azprfx^4RdFwc%{C7A%H#v-nYRjKzHqY zhNjNyK32t$=Al!Rj<<*4XCM=xjwo6)+&$g3y4zBFK~Cc{)o)ttS-k{i=z-@ntFxZU z*600V!(w{f?Or@jO3O0zAx^sM9CTj0!*J-dj%(A2I$w91Rbg<;Py#RW0OUEW50Pt} zy|*$N@S)a+>aW#+=5f|6ZqlHaD9<$e%uZ{+TK36&pqkRk2Hg$w%9u?#m8GBO*%prsZ;CcgFi+L2F$HPl zoG-hwDq&P_@sz4;@M(26n*&Y31qp$M6{0|+@Xq3!(U1N8a!?wM_B0Fa`=pU$B@J)x z#-?adC9kGpzQ&DZHJ7;`rJSg3EIu}E9zi|lLK*iw*qDed2)}XtL};n~_>P*eoTnJD z{#GMYy&25pn~-ZXDGYc9U0t~y4BT3q(R^cfBEEnA?L!*@cJbKjuN>RWZ;|=gVkfe9cn7 zJJt+lJuuj=LMy>D6B!Fi*Rkxd8T3xZ{d?6%Ixk)9Dc)EgeDnOf_`=iD)Z`FDtpN5!Qk5CXb^}Zf3*u&G=*?o6z8gAmPQ=g-h!)@^+Bs;zL zJi62f84S5&P-ofu%0MM8=-ijw{>d1LY1xX!=v#i-h5lM=dGp}5E1~;F_g&5F(n#7d zvUT}3+(T?`_{lL)RyozL9k)^U(Q9@6w!~pm(*2~Q>}Ha&_{=hu{%dUuyK~Mmk}9xz zDV-A4l;f_(CACkd*PM=ne0#j_lE|o1x4Yh*JaQwARr5k?xyAObhvi7Sltpf2<1?&l zt(OtwMm>7KP%{-oxdL$VSUdL#B{%!llLe|ag@&n`+xWKc2;0}?dBu28@(-gW6$yfV z+S;$$QTnu`DdhzCK&T}_*uyxZdxNBR Sk6`I@Hx8=vdh&S^E#W`Ve3I4x literal 0 HcmV?d00001 diff --git a/main/src/components/ALink/index.vue b/main/src/components/ALink/index.vue new file mode 100644 index 0000000..ebc965f --- /dev/null +++ b/main/src/components/ALink/index.vue @@ -0,0 +1,30 @@ + + \ No newline at end of file diff --git a/main/src/components/BreadCrumbs/index.vue b/main/src/components/BreadCrumbs/index.vue new file mode 100644 index 0000000..7be203a --- /dev/null +++ b/main/src/components/BreadCrumbs/index.vue @@ -0,0 +1,39 @@ + + \ No newline at end of file diff --git a/main/src/components/CKEditor/index.vue b/main/src/components/CKEditor/index.vue new file mode 100644 index 0000000..827e461 --- /dev/null +++ b/main/src/components/CKEditor/index.vue @@ -0,0 +1,192 @@ + + + \ No newline at end of file diff --git a/main/src/components/IconFont/index.ts b/main/src/components/IconFont/index.ts new file mode 100644 index 0000000..dc31de9 --- /dev/null +++ b/main/src/components/IconFont/index.ts @@ -0,0 +1,3 @@ +import IconFont from './index.vue'; + +export default IconFont; \ No newline at end of file diff --git a/main/src/components/IconFont/index.vue b/main/src/components/IconFont/index.vue new file mode 100644 index 0000000..e3910b3 --- /dev/null +++ b/main/src/components/IconFont/index.vue @@ -0,0 +1,69 @@ + + + \ No newline at end of file diff --git a/main/src/components/IconSvg/index.ts b/main/src/components/IconSvg/index.ts new file mode 100644 index 0000000..a7592d9 --- /dev/null +++ b/main/src/components/IconSvg/index.ts @@ -0,0 +1,17 @@ +import iconsvg from "./index.vue"; + +/** + * 自动导入 @/assets/iconsvg 下svg文件 + * @author LiQingSong + */ +export function importAllSvg (): void { + try { + const requireContext: __WebpackModuleApi.RequireContext = require.context('../../assets/iconsvg', false, /\.svg$/); + requireContext.keys().forEach(requireContext); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } +} + +export default iconsvg; \ No newline at end of file diff --git a/main/src/components/IconSvg/index.vue b/main/src/components/IconSvg/index.vue new file mode 100644 index 0000000..3a65ffc --- /dev/null +++ b/main/src/components/IconSvg/index.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/main/src/components/Permission/index.vue b/main/src/components/Permission/index.vue new file mode 100644 index 0000000..ccaa352 --- /dev/null +++ b/main/src/components/Permission/index.vue @@ -0,0 +1,50 @@ + + \ No newline at end of file diff --git a/main/src/components/Result/index.vue b/main/src/components/Result/index.vue new file mode 100644 index 0000000..35a45b7 --- /dev/null +++ b/main/src/components/Result/index.vue @@ -0,0 +1,108 @@ + + + \ No newline at end of file diff --git a/main/src/components/Result/svg/error.vue b/main/src/components/Result/svg/error.vue new file mode 100644 index 0000000..d8560cf --- /dev/null +++ b/main/src/components/Result/svg/error.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/components/Result/svg/info.vue b/main/src/components/Result/svg/info.vue new file mode 100644 index 0000000..883da9e --- /dev/null +++ b/main/src/components/Result/svg/info.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/components/Result/svg/noFound.vue b/main/src/components/Result/svg/noFound.vue new file mode 100644 index 0000000..5bb6b70 --- /dev/null +++ b/main/src/components/Result/svg/noFound.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/components/Result/svg/serverError.vue b/main/src/components/Result/svg/serverError.vue new file mode 100644 index 0000000..49bed99 --- /dev/null +++ b/main/src/components/Result/svg/serverError.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/components/Result/svg/success.vue b/main/src/components/Result/svg/success.vue new file mode 100644 index 0000000..e51e879 --- /dev/null +++ b/main/src/components/Result/svg/success.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/components/Result/svg/unauthorized.vue b/main/src/components/Result/svg/unauthorized.vue new file mode 100644 index 0000000..c56ad10 --- /dev/null +++ b/main/src/components/Result/svg/unauthorized.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/components/Result/svg/warning.vue b/main/src/components/Result/svg/warning.vue new file mode 100644 index 0000000..7a5b679 --- /dev/null +++ b/main/src/components/Result/svg/warning.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/components/ScreenTable/data.d.ts b/main/src/components/ScreenTable/data.d.ts new file mode 100644 index 0000000..dee9505 --- /dev/null +++ b/main/src/components/ScreenTable/data.d.ts @@ -0,0 +1,7 @@ +export interface PaginationConfig { + layout?: string; + total: number; + current: number; + pageSize: number; + onChange: (page: number) => void; +} \ No newline at end of file diff --git a/main/src/components/ScreenTable/index.vue b/main/src/components/ScreenTable/index.vue new file mode 100644 index 0000000..818b5d1 --- /dev/null +++ b/main/src/components/ScreenTable/index.vue @@ -0,0 +1,144 @@ + + + \ No newline at end of file diff --git a/main/src/components/SelectLang/index.vue b/main/src/components/SelectLang/index.vue new file mode 100644 index 0000000..40e1ed4 --- /dev/null +++ b/main/src/components/SelectLang/index.vue @@ -0,0 +1,87 @@ + + + diff --git a/main/src/components/Spin/index.vue b/main/src/components/Spin/index.vue new file mode 100644 index 0000000..589d911 --- /dev/null +++ b/main/src/components/Spin/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/main/src/components/TuiEditor/index.vue b/main/src/components/TuiEditor/index.vue new file mode 100644 index 0000000..ab5655c --- /dev/null +++ b/main/src/components/TuiEditor/index.vue @@ -0,0 +1,119 @@ + + \ No newline at end of file diff --git a/main/src/components/TuiEditor/viewer.vue b/main/src/components/TuiEditor/viewer.vue new file mode 100644 index 0000000..2c378f3 --- /dev/null +++ b/main/src/components/TuiEditor/viewer.vue @@ -0,0 +1,56 @@ + + \ No newline at end of file diff --git a/main/src/composables/useEcharts.ts b/main/src/composables/useEcharts.ts new file mode 100644 index 0000000..90a663f --- /dev/null +++ b/main/src/composables/useEcharts.ts @@ -0,0 +1,35 @@ +import { onMounted, onBeforeUnmount, Ref, ref } from 'vue'; +import debounce from 'lodash.debounce'; +import echarts, { ECharts, EChartOption } from 'echarts'; +import 'echarts/theme/macarons'; + +export default function useEcharts( + labRef: Ref, + initOption: EChartOption, + theme = 'macarons' + ): Ref { + + let ec: ECharts; + const chart = ref(); + + const resizeHandler = debounce(() => { + ec.resize(); + }, 100); + + onMounted(()=> { + if(labRef.value) { + ec = echarts.init(labRef.value, theme); + ec.setOption(initOption); + chart.value = ec; + } + + window.addEventListener('resize', resizeHandler); + }) + + onBeforeUnmount(()=> { + ec.dispose(); + window.removeEventListener('resize', resizeHandler); + }); + + return chart; +} \ No newline at end of file diff --git a/main/src/composables/useInjectMicroChildEntry.ts b/main/src/composables/useInjectMicroChildEntry.ts new file mode 100644 index 0000000..3b64664 --- /dev/null +++ b/main/src/composables/useInjectMicroChildEntry.ts @@ -0,0 +1,12 @@ +/** + * 根据注入的childProjectEntry函数获取对应子项目入口 composables + * @author LiQingSong + */ +import { inject } from 'vue' + +export default function useInjectMicroChildEntry(name: string): string { + const childProjectEntry: Function = inject('childProjectEntry', function(name: string) { + return name + }) + return childProjectEntry(name) +} diff --git a/main/src/composables/useLoadMicroApp.ts b/main/src/composables/useLoadMicroApp.ts new file mode 100644 index 0000000..9308331 --- /dev/null +++ b/main/src/composables/useLoadMicroApp.ts @@ -0,0 +1,53 @@ +/** + * 手动局部加载microApp composables + * @author LiQingSong + */ +import { loadMicroApp, MicroApp, FrameworkConfiguration, FrameworkLifeCycles } from 'qiankun' +import { onMounted, onUnmounted } from "vue" +import router from '@/config/routes' +import store from '@/config/store' + +export interface Props { + name: string; + entry: string; + container: string; + routerHistory?: string + data?: {[key:string]:any}; +} + +export default function useLoadMicroApp(props: Props, configuration?: FrameworkConfiguration & { + autoStart?: boolean; +}, lifeCycles?: FrameworkLifeCycles): void { + + const { name, entry, container, data= {}, routerHistory= 'memory' } = props + + let microApp:MicroApp + + onMounted(()=> { + microApp = loadMicroApp( + { + name, + entry, + container, + props: { + routerHistory, + parentRouter: router, + parentStore: store, + data: { + defaultPath: '', + ...data + } + }, + }, + configuration, + lifeCycles + ); + + }) + + + onUnmounted(()=> { + microApp.unmount() + }) + + } diff --git a/main/src/composables/useQiankunActions.ts b/main/src/composables/useQiankunActions.ts new file mode 100644 index 0000000..1807ece --- /dev/null +++ b/main/src/composables/useQiankunActions.ts @@ -0,0 +1,14 @@ +/** + * 根据注入的childProjectEntry函数获取对应子项目入口 composables + * @author LiQingSong + */ +import { inject } from 'vue' +import { MicroAppStateActions } from 'qiankun' + +export default function useQiankunActions(): MicroAppStateActions { + return inject('qiankunActions', { + onGlobalStateChange: (callback: Function, fireImmediately?: boolean | undefined) => {console.log('undefined')}, + setGlobalState: (state: Record) => false, + offGlobalStateChange: () => false + }) +} diff --git a/main/src/composables/useTitle.ts b/main/src/composables/useTitle.ts new file mode 100644 index 0000000..9640382 --- /dev/null +++ b/main/src/composables/useTitle.ts @@ -0,0 +1,25 @@ +/** + * 设置 html Title composables + * @author LiQingSong + */ +import { ComputedRef, onMounted, Ref, watch } from 'vue'; +import { useI18n } from 'vue-i18n'; +import settings from '@/config/settings'; +import { RoutesDataItem } from '@/utils/routes'; + +export default function useTitle(route: ComputedRef | Ref): void { + const{ t } = useI18n(); + + const setTitle = (title: string): void => { + document.title = `${t(title)} - ${settings.siteTitle}`; + } + + watch(route,() => { + setTitle(route.value.title || ''); + }) + + onMounted(()=> { + setTitle(route.value.title); + }) + +} diff --git a/main/src/config/i18n.ts b/main/src/config/i18n.ts new file mode 100644 index 0000000..555712d --- /dev/null +++ b/main/src/config/i18n.ts @@ -0,0 +1,45 @@ +/** + * 国际化 入口 + * @author LiQingSong + */ + +import { createI18n } from "vue-i18n"; +import { getLocale, setLocale, importAllLocales, defaultLang } from "@/utils/i18n"; + +/** + * elementUI 多语言 配置 + */ +import enUS from 'element-plus/lib/locale/lang/en'; +import zhCN from 'element-plus/lib/locale/lang/zh-cn'; +import zhTW from 'element-plus/lib/locale/lang/zh-tw'; +export const elementPlusMessages: { [key: string]: any} = { + 'zh-CN': zhCN, + 'zh-TW': zhTW, + 'en-US': enUS, +} + + +/** + * 框架 多语言 配置 + */ +export const messages = importAllLocales(); +const sysLocale = getLocale(); +const i18n = createI18n({ + legacy: false, + locale: elementPlusMessages[sysLocale] ? sysLocale : defaultLang, + messages, +}); + + +/** + * 设置语言 + * @param locale + */ +export function setI18nLanguage(locale: string, realReload = false): void { + setLocale(locale,realReload, function() { + // i18n.global.locale = locale // legacy: true + i18n.global.locale.value = locale; + }) +} + +export default i18n; diff --git a/main/src/config/routes.ts b/main/src/config/routes.ts new file mode 100644 index 0000000..64d92cb --- /dev/null +++ b/main/src/config/routes.ts @@ -0,0 +1,73 @@ +/** + * 路由入口 + * @author LiQingSong + */ +import NProgress from 'nprogress'; // progress bar +import 'nprogress/nprogress.css'; // progress bar style +NProgress.configure({ showSpinner: false, easing: 'ease', speed: 1000 }); // NProgress Configuration + +import { createRouter, createWebHistory } from 'vue-router'; +import { RoutesDataItem } from "@/utils/routes"; +import settings from "@/config/settings"; + +import SecurityLayout from '@/layouts/SecurityLayout.vue'; + +import QiankunLayoutRoutes from "@/layouts/QiankunLayout/routes"; +import QiankunLayout from "@/layouts/QiankunLayout/index.vue"; + +import UserLayoutRoutes from '@/layouts/UserLayout/routes'; +import UserLayout from '@/layouts/UserLayout/index.vue'; + +const routes: Array = [ + { + title: 'empty', + path: '/', + component: SecurityLayout, + children: [ + { + title: 'empty', + path: '/', + redirect: settings.homeRouteItem.path, + component: QiankunLayout, + children: QiankunLayoutRoutes + }, + { + title: 'empty', + path: '/refresh', + component: () => import('@/views/refresh/index.vue') + }, + ] + }, + { + title: 'empty', + path: '/user', + redirect: '/user/login', + component: UserLayout, + children: UserLayoutRoutes + }, + { + title: 'app.global.menu.notfound', + path: '/:pathMatch(.*)*', + component: () => import('@/views/404/index.vue'), + } +] + +const router = createRouter({ + scrollBehavior(/* to, from, savedPosition */) { + return { top: 0 } + }, + history: createWebHistory(process.env.BASE_URL), + routes: routes, +}); + +router.beforeEach((/* to, from */) => { + // start progress bar + NProgress.start(); +}); + +router.afterEach(() => { + // finish progress bar + NProgress.done(); +}); + +export default router; diff --git a/main/src/config/settings.ts b/main/src/config/settings.ts new file mode 100644 index 0000000..f313444 --- /dev/null +++ b/main/src/config/settings.ts @@ -0,0 +1,90 @@ +import { RoutesDataItem } from "@/utils/routes"; + +export type Theme = 'dark' | 'light'; + +export type NavMode = 'vertical' | 'horizontal'; + +/** + * 站点配置 + * @author LiQingSong + */ +export interface SettingsType { + /** + * 站点名称 + */ + siteTitle: string; + + /** + * 模板主题 + */ + theme: Theme; + + /** + * 导航模式 + */ + navMode: NavMode; + + /** + * 头部固定开启 + */ + headFixed: boolean; + + /** + * tab菜单开启 + */ + tabNavEnable: boolean; + + /** + * 左侧侧边固定开启 + */ + leftSiderFixed: boolean; + + /** + * 站点首页路由 + */ + homeRouteItem: RoutesDataItem; + + /** + * 站点本地存储Token 的 Key值 + */ + siteTokenKey: string; + + /** + * Ajax请求头发送Token 的 Key值 + */ + ajaxHeadersTokenKey: string; + + /** + * Ajax返回值不参加统一验证的api地址 + */ + ajaxResponseNoVerifyUrl: string[]; + + /** + * iconfont.cn 项目在线生成的 js 地址 + */ + iconfontUrl: string[]; +} + +const settings: SettingsType = { + siteTitle: 'ADMIN-VUE3-MICRO', + theme: 'dark', + navMode: 'vertical', + headFixed: true, + tabNavEnable: true, + leftSiderFixed: true, + homeRouteItem: { + icon: 'home', + title: 'qiankun-layout.menu.home', + path: '/home', + component: ()=> import('@/views/home/index.vue') + }, + siteTokenKey: 'admin_vue_micro_token', + ajaxHeadersTokenKey: 'x-token', + ajaxResponseNoVerifyUrl: [ + '/user/login', // 用户登录 + '/user/info', // 获取用户信息 + ], + iconfontUrl: [], +}; + +export default settings; diff --git a/main/src/config/store.ts b/main/src/config/store.ts new file mode 100644 index 0000000..829c3b7 --- /dev/null +++ b/main/src/config/store.ts @@ -0,0 +1,12 @@ +/** + * Store 入口 + * @author LiQingSong + */ +import { createStore } from 'vuex'; +import { importAllStore } from '@/utils/store'; + + +export default createStore({ + modules: importAllStore(), + getters: {} +}) diff --git a/main/src/directives/permission/index.ts b/main/src/directives/permission/index.ts new file mode 100644 index 0000000..abb4fbd --- /dev/null +++ b/main/src/directives/permission/index.ts @@ -0,0 +1,31 @@ +/** + * 自定义指令 权限验证 + * @author LiQingSong + * 使用Demo: + * import permission from '@/directives/permission'; + * import { defineComponent } from "vue"; + * export default defineComponent({ + * directives: { + * permission + * } + * }) + * 删除 + * 删除 + */ +import { Directive } from "vue"; +import UserModel from "@/store/user"; +import { hasPermissionRouteRoles } from "@/utils/routes"; + +const permission: Directive = (el, binding, vnode, prevVNode) => { + const { value } = binding; + if(value) { + const userRoles = UserModel.state.currentUser.roles; + if(!hasPermissionRouteRoles(userRoles, value)){ + el.parentNode && el.parentNode.removeChild(el); + } + } else { + throw new Error(`need roles! Like v-permission="['admin','test']" or v-permission="'test'"`); + } +} + +export default permission; \ No newline at end of file diff --git a/main/src/layouts/BlankLayout.vue b/main/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..621cb5a --- /dev/null +++ b/main/src/layouts/BlankLayout.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/main/src/layouts/QiankunLayout/components/Icon.vue b/main/src/layouts/QiankunLayout/components/Icon.vue new file mode 100644 index 0000000..f640554 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/Icon.vue @@ -0,0 +1,28 @@ + + diff --git a/main/src/layouts/QiankunLayout/components/LeftSider.vue b/main/src/layouts/QiankunLayout/components/LeftSider.vue new file mode 100644 index 0000000..ebd5a7d --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/LeftSider.vue @@ -0,0 +1,43 @@ + + diff --git a/main/src/layouts/QiankunLayout/components/RightFooter.vue b/main/src/layouts/QiankunLayout/components/RightFooter.vue new file mode 100644 index 0000000..02664a0 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/RightFooter.vue @@ -0,0 +1,18 @@ + + + diff --git a/main/src/layouts/QiankunLayout/components/RightTabNav.vue b/main/src/layouts/QiankunLayout/components/RightTabNav.vue new file mode 100644 index 0000000..54f789c --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/RightTabNav.vue @@ -0,0 +1,281 @@ + + diff --git a/main/src/layouts/QiankunLayout/components/RightTop.vue b/main/src/layouts/QiankunLayout/components/RightTop.vue new file mode 100644 index 0000000..9248674 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/RightTop.vue @@ -0,0 +1,103 @@ + + diff --git a/main/src/layouts/QiankunLayout/components/RightTopMessage.vue b/main/src/layouts/QiankunLayout/components/RightTopMessage.vue new file mode 100644 index 0000000..27a1a55 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/RightTopMessage.vue @@ -0,0 +1,24 @@ + + diff --git a/main/src/layouts/QiankunLayout/components/RightTopUser.vue b/main/src/layouts/QiankunLayout/components/RightTopUser.vue new file mode 100644 index 0000000..0abd475 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/RightTopUser.vue @@ -0,0 +1,52 @@ + + diff --git a/main/src/layouts/QiankunLayout/components/Settings.vue b/main/src/layouts/QiankunLayout/components/Settings.vue new file mode 100644 index 0000000..1159695 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/Settings.vue @@ -0,0 +1,228 @@ + + + diff --git a/main/src/layouts/QiankunLayout/components/SiderMenu.vue b/main/src/layouts/QiankunLayout/components/SiderMenu.vue new file mode 100644 index 0000000..b57e7b6 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/SiderMenu.vue @@ -0,0 +1,50 @@ + + diff --git a/main/src/layouts/QiankunLayout/components/SiderMenuItem.vue b/main/src/layouts/QiankunLayout/components/SiderMenuItem.vue new file mode 100644 index 0000000..79ed9f1 --- /dev/null +++ b/main/src/layouts/QiankunLayout/components/SiderMenuItem.vue @@ -0,0 +1,47 @@ + + diff --git a/main/src/layouts/QiankunLayout/css/index.scss b/main/src/layouts/QiankunLayout/css/index.scss new file mode 100644 index 0000000..e527df8 --- /dev/null +++ b/main/src/layouts/QiankunLayout/css/index.scss @@ -0,0 +1,382 @@ +@import '../../../assets/css/global.scss'; +@import './var.scss'; +@import './mixins.scss'; + +#qiankunlayout { + display: flex; + flex-direction: row; + background-color: var(--qkl-bg-color); + + /* 默认 theme */ + .qiankunlayout-menu { + @include layout-menu; + } + + #qiankunlayout-left { + flex: 0 0 var(--qkl-left-side-bar-width); + background-color: var(--qkl-menu-bg-color); + z-index: 10; + + .qiankunlayout-left-sider { + display: flex; + flex-direction: column; + width: var(--qkl-left-side-bar-width); + + .qiankunlayout-left-logo { + width: 100%; + height: var(--qkl-header-height); + line-height: var(--qkl-header-height); + text-align: center; + vertical-align: middle; + .logo-url { + display: inline-block; + width: 100%; + height: 100%; + overflow: hidden; + .logo-title { + display: inline-block; + margin: 0; + font-size: 16px; + font-family: Roboto, sans-serif; + color: var(--qkl-menu-highlight-color); + } + } + img { + vertical-align: middle; + } + } + + + .qiankunlayout-left-menu { + flex: 1; + + } + + + + } + + &.fiexd { + .qiankunlayout-left-sider { + position: fixed; + top: 0; + left: 0; + bottom: 0; + .qiankunlayout-left-menu { + overflow: hidden auto; + } + } + } + + &.narrow { + flex: 0 0 var(--qkl-menu-collapsed-width); + .qiankunlayout-left-sider { + width: var(--qkl-menu-collapsed-width); + } + } + + + @include scrollbar; + + } + + + #qiankunlayout-right { + display: flex; + flex-direction:column; + position: relative; + width: 0; + flex: auto; + min-height: 100vh; + background-color: var(--qkl-main-bg-color); + + + #qiankunlayout-right-top { + width: 100%; + height: calc(var(--qkl-header-height) + var(--qkl-header-tab-nav-height)); + border-bottom: solid 1px rgba(0, 21, 41, 0.01); + .qiankunlayout-right-top-header { + display: block; + height: calc(var(--qkl-header-height) + var(--qkl-header-tab-nav-height)); + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); + background-color: var(--qkl-main-bg-color); + z-index: 1; + + .qiankunlayout-right-top-top { + display: flex; + width: 100%; + height: var(--qkl-header-height); + line-height: var(--qkl-header-height); + background-color: var(--qkl-bg-color); + color: var(--qkl-color); + + .qiankunlayout-flexible { + width: var(--qkl-header-height); + height: var(--qkl-header-height); + text-align: center; + cursor: pointer; + &:hover { + background-color: --qkl-submenu-bg-color; + color: --qkl-menu-higlight-bg-color; + } + } + + .qiankunlayout-top-menu { + height: var(--qkl-header-height); + line-height: var(--qkl-header-height); + flex: 1; + overflow: hidden; + overflow-x: auto; + .breadcrumb { + line-height: var(--qkl-header-height); + } + } + + .qiankunlayout-top-menu-right { + width: 200px; + + .qiankunlayout-top-message { + display: inline; + color: var(--qkl-color); + .qiankunlayout-top-message-badge { + margin-left: -5px; + margin-top: -20px; + ::v-deep(.el-badge__content) { + border: 0; + } + } + } + + .qiankunlayout-top-usermenu { + padding-left: 10px; + color: var(--qkl-color); + } + + .qiankunlayout-top-selectlang { + padding-left: 15px; + .dropDown { + i, + .svg-icon { + font-size: 16px; + color: var(--qkl-color); + } + } + } + + .qiankunlayout-top-settings { + margin-left: 15px; + cursor: pointer; + } + + } + + @include scrollbar; + + + + &.menu { + + background-color: var(--qkl-menu-bg-color); + color: var(--qkl-menu-color); + + .qiankunlayout-right-top-logo { + padding: 0 20px; + height: var(--qkl-header-height); + vertical-align: middle; + .logo-url { + display: inline-block; + overflow: hidden; + .logo-title { + display: inline-block; + margin: 0; + padding-left: 10px; + font-size: 14px; + font-family: Roboto, sans-serif; + font-weight: 400; + color: var(--qkl-menu-highlight-color); + } + } + img { + vertical-align: middle; + } + } + + + .qiankunlayout-top-menu-right { + .qiankunlayout-top-message, + .qiankunlayout-top-usermenu{ + color: var(--qkl-menu-color); + } + .qiankunlayout-top-selectlang { + .dropDown { + i, + .svg-icon { + color: var(--qkl-menu-color); + } + } + } + } + + } + + + } + + .qiankunlayout-top-tab-nav { + height: calc(var(--qkl-header-tab-nav-height) - 4px); + padding-top: 4px; + /* background-color: #f0f0f0; */ + box-shadow: 0 -1px 4px rgba(0, 21, 41, 0.08); + display: flex; + align-items:center; + .left, + .right, + .down { + width: calc(var(--qkl-header-tab-nav-height) - 10px); + height: calc(var(--qkl-header-tab-nav-height) - 8px); + line-height: calc(var(--qkl-header-tab-nav-height) - 8px); + /* background-color: #FFFFFF; */ + text-align: center; + font-size: 12px; + cursor: pointer; + .icon-box { + display: block; + width: calc(var(--qkl-header-tab-nav-height) - 10px); + height: calc(var(--qkl-header-tab-nav-height) - 8px); + line-height: calc(var(--qkl-header-tab-nav-height) - 8px); + } + .icon { + color: rgba(0,0,0,.45); + } + &:hover { + .icon { + color: rgba(0,0,0,.75); + } + } + } + .down { + padding-right: 10px; + line-height: normal; + } + .middle { + flex: 1; + overflow: hidden; + .tab { + position: relative; + float: left; + list-style: none; + overflow: visible; + white-space: nowrap; + transition: transform .5s ease-in-out; + .item { + height: calc(var(--qkl-header-tab-nav-height) - 6px); + line-height: calc(var(--qkl-header-tab-nav-height) - 6px); + background: #fafafa; + box-sizing: border-box; + white-space: nowrap; + display: inline-block; + padding: 0 10px; + border-radius: 4px 4px 0 0; + transition: all .3s cubic-bezier(.645,.045,.355,1); + cursor: pointer; + font-size: 14px; + color: rgba(0,0,0,.65); + border: 1px solid var(--qkl-main-bg-color); + &+.item { + margin-left: 3px; + } + &:hover { + color: var(--el-color-primary); + } + .icon { + font-size: 10px; + margin: 0 0 2px 5px; + color: rgba(0,0,0,.45); + &:hover { + color: rgba(0,0,0,.75); + } + + } + .icon-pre { + display: none; + font-size: 12px; + margin: 0 5px 0 0; + color: rgba(var(--el-color-primary), 0.75); + &:hover { + color: rgba(var(--el-color-primary), 1); + } + } + } + .active { + color: var(--el-color-primary); + background:#FFFFFF; + border-color:#FFFFFF; + .icon-pre { + display: inline-block; + } + } + } + } + } + } + + &.fiexd { + .qiankunlayout-right-top-header{ + position: fixed; + left: var(--qkl-left-side-bar-width); + top: 0; + right: 0; + } + &.narrow { + .qiankunlayout-right-top-header{ + left: var(--qkl-menu-collapsed-width); + } + } + } + + &.navModeHorizontal { + &.narrow .qiankunlayout-right-top-header, + .qiankunlayout-right-top-header{ + left: 0; + } + } + + &.tabNavEnable { + height: var(--qkl-header-height); + .qiankunlayout-right-top-header { + height: var(--qkl-header-height); + } + } + + + } + + #qiankunlayout-right-main { + position: relative; + flex: 1; + height: 0; + + .qiankunlayout-main-conent { + margin: 24px; + position: relative; + } + + } + + + } + + + /* 白色 theme */ + &.light { + @include light-menu; + + #qiankunlayout-left{ + @include scrollbar-light; + } + } + + + + +} diff --git a/main/src/layouts/QiankunLayout/css/mixins.scss b/main/src/layouts/QiankunLayout/css/mixins.scss new file mode 100644 index 0000000..687b4da --- /dev/null +++ b/main/src/layouts/QiankunLayout/css/mixins.scss @@ -0,0 +1,99 @@ +@import './var.scss'; + +@mixin layout-menu($height: 40px) { + + background-color: var(--qkl-menu-bg-color); + border: none; + + + .el-sub-menu .el-menu { + background-color: var(--qkl-submenu-bg-color); + } + + .el-sub-menu__title, + .el-menu-item { + height: $height; + line-height: $height; + color: var(--qkl-menu-color); + .icon { + margin-right: 5px; + vertical-align: middle; + width: 24px; + text-align: center; + color: var(--qkl-menu-color); + } + + &:focus, + &:hover { + color: var(--qkl-menu-highlight-color) !important; + background:none; + .icon { + color: var(--qkl-menu-highlight-color) !important; + } + } + } + + .is-active>.el-sub-menu__title { + color: var(--qkl-menu-highlight-color) !important; + .icon { + color: var(--qkl-menu-highlight-color) !important; + } + } + .el-sub-menu .el-menu-item.is-active, + .el-menu-item.is-active, + .el-sub-menu .el-menu-item.is-active svg, + .el-menu-item.is-active svg{ + color: var(--qkl-menu-highlight-color) !important; + background-color: var(--qkl-menu-higlight-bg-color) !important; + } + .el-sub-menu__title { + margin-top: 4px; + margin-bottom: 4px; + } + .el-menu-item:not(:last-child) { + margin-bottom: 8px; + } + + + /* 收起 */ + &.el-menu--collapse { + width: var(--qkl-menu-collapsed-width); + .el-sub-menu__title, + .el-menu-item { + .icon { + position: absolute; + left: 15px; + top: 10px; + margin: 0; + } + } + } + + &.el-menu--horizontal.el-menu { + + .el-sub-menu__title, + .el-menu-item { + height: 48px; + line-height: 48px; + margin-top: 0; + margin-bottom: 0; + } + + + .el-menu-item:not(:last-child) { + margin-bottom: 0; + } + + } + + + +} + +@mixin light-menu { + --qkl-menu-bg-color: #FFF; + --qkl-submenu-bg-color: #fafafa; + --qkl-menu-color: rgba(0,0,0,.85); + --qkl-menu-higlight-bg-color: #e6f7ff; + --qkl-menu-highlight-color: var(--el-color-primary); +} diff --git a/main/src/layouts/QiankunLayout/css/var.scss b/main/src/layouts/QiankunLayout/css/var.scss new file mode 100644 index 0000000..a28d2b3 --- /dev/null +++ b/main/src/layouts/QiankunLayout/css/var.scss @@ -0,0 +1,25 @@ +:root { + // 网页背景色 + --qkl-bg-color: #FFFFFF; + // 网页字体色 + --qkl-color: rgba(0,0,0,.85); + // 主窗口背景色 + --qkl-main-bg-color: #f0f3f4; + + // 菜单 + --qkl-menu-collapsed-width: 54px; + --qkl-menu-bg-color: #222834; + --qkl-submenu-bg-color: #000c17; + --qkl-menu-color: rgba(255,255,255, 0.65); + --qkl-menu-higlight-bg-color: var(--el-color-primary); + --qkl-menu-highlight-color: #FFFFFF; + + + // 头部高度 + --qkl-header-height: 48px; + // 左边宽度 + --qkl-left-side-bar-width: 200px; + // 头部Tab导航高度 + --qkl-header-tab-nav-height: 36px; + +} diff --git a/main/src/layouts/QiankunLayout/index.vue b/main/src/layouts/QiankunLayout/index.vue new file mode 100644 index 0000000..1a3119a --- /dev/null +++ b/main/src/layouts/QiankunLayout/index.vue @@ -0,0 +1,64 @@ + + + diff --git a/main/src/layouts/QiankunLayout/locales/en-US.ts b/main/src/layouts/QiankunLayout/locales/en-US.ts new file mode 100644 index 0000000..3d5cae1 --- /dev/null +++ b/main/src/layouts/QiankunLayout/locales/en-US.ts @@ -0,0 +1,23 @@ +export default { + 'qiankun-layout.topmenu.userinfo': 'Personal Info', + 'qiankun-layout.topmenu.logout': 'Logout', + + 'qiankun-layout.menu.home': 'Home', + + 'qiankun-layout.menu.system': 'System Setting', + 'qiankun-layout.menu.system.accountlist': 'Account list', + 'qiankun-layout.menu.system.rolelist': 'Role list', + 'qiankun-layout.menu.system.menulist': 'Background menu', + 'qiankun-layout.menu.system.apilist': 'Backend API', + + 'qiankun-layout.menu.article': 'Article', + 'qiankun-layout.menu.article.list': 'Article List', + 'qiankun-layout.menu.article.add': 'Article Add', + 'qiankun-layout.menu.article.edit': 'Article Edit', + 'qiankun-layout.menu.article.category': 'Article classification', + + 'qiankun-layout.menu.links': 'Neighbors', + 'qiankun-layout.menu.links.list': 'Link List', + 'qiankun-layout.menu.links.category': 'Link classification', + +}; diff --git a/main/src/layouts/QiankunLayout/locales/zh-CN.ts b/main/src/layouts/QiankunLayout/locales/zh-CN.ts new file mode 100644 index 0000000..567b32a --- /dev/null +++ b/main/src/layouts/QiankunLayout/locales/zh-CN.ts @@ -0,0 +1,23 @@ +export default { + 'qiankun-layout.topmenu.userinfo': '个人信息', + 'qiankun-layout.topmenu.logout': '退出', + + 'qiankun-layout.menu.home': '首页', + + 'qiankun-layout.menu.system': '系统设置', + 'qiankun-layout.menu.system.accountlist': '账号列表', + 'qiankun-layout.menu.system.rolelist': '角色列表', + 'qiankun-layout.menu.system.menulist': '后台菜单', + 'qiankun-layout.menu.system.apilist': '后台API', + + 'qiankun-layout.menu.article': '随笔管理', + 'qiankun-layout.menu.article.list': '随笔列表', + 'qiankun-layout.menu.article.add': '随笔新增', + 'qiankun-layout.menu.article.edit': '随笔修改', + 'qiankun-layout.menu.article.category': '随笔分类', + + 'qiankun-layout.menu.links': '左邻右舍', + 'qiankun-layout.menu.links.list': '链接列表', + 'qiankun-layout.menu.links.category': '链接分类', + +}; diff --git a/main/src/layouts/QiankunLayout/locales/zh-TW.ts b/main/src/layouts/QiankunLayout/locales/zh-TW.ts new file mode 100644 index 0000000..a0e878f --- /dev/null +++ b/main/src/layouts/QiankunLayout/locales/zh-TW.ts @@ -0,0 +1,23 @@ +export default { + 'qiankun-layout.topmenu.userinfo': '個人信息', + 'qiankun-layout.topmenu.logout': '退出', + + 'qiankun-layout.menu.home': '首頁', + + 'qiankun-layout.menu.system': '系统設置', + 'qiankun-layout.menu.system.accountlist': '賬號列表', + 'qiankun-layout.menu.system.rolelist': '角色列表', + 'qiankun-layout.menu.system.menulist': '後臺菜單', + 'qiankun-layout.menu.system.apilist': '後臺API', + + 'qiankun-layout.menu.article': '隨筆管理', + 'qiankun-layout.menu.article.list': '隨筆列表', + 'qiankun-layout.menu.article.add': '隨筆新增', + 'qiankun-layout.menu.article.edit': '隨筆修改', + 'qiankun-layout.menu.article.category': '隨筆分類', + + 'qiankun-layout.menu.links': '左鄰右舍', + 'qiankun-layout.menu.links.list': '鏈接列表', + 'qiankun-layout.menu.links.category': '鏈接分類', + +}; diff --git a/main/src/layouts/QiankunLayout/routes.ts b/main/src/layouts/QiankunLayout/routes.ts new file mode 100644 index 0000000..e05071c --- /dev/null +++ b/main/src/layouts/QiankunLayout/routes.ts @@ -0,0 +1,133 @@ +import { RoutesDataItem } from "@/utils/routes"; +import BlankLayout from '@/layouts/BlankLayout.vue'; +import QianKunStart from '@/views/qiankun/start.vue'; +import QianKunStartScreen from '@/views/qiankun/startScreen.vue' +import settings from "@/config/settings"; + +const QiankunLayoutRoutes: Array = [ + { + ...settings.homeRouteItem + }, + { + icon: 'menu-article', + title: 'qiankun-layout.menu.article', + path: '/article', + redirect: '/article/list', + roles: ['article'], + component: BlankLayout, + children: [ + { + title: 'qiankun-layout.menu.article.list', + path: 'list', + roles: ['article-list'], + component: QianKunStartScreen + }, + { + hidden: true, + title: 'qiankun-layout.menu.article.add', + path: 'add', + roles: ['article-add'], + component: QianKunStart, + selectLeftMenu: '/article/list' + }, + { + hidden: true, + title: 'qiankun-layout.menu.article.edit', + path: 'edit', + roles: ['article-edit'], + component: QianKunStart, + selectLeftMenu: '/article/list' + }, + { + title: 'qiankun-layout.menu.article.category', + path: 'category', + roles: ['article-category'], + component: QianKunStartScreen + }, + /* + { + hidden: true, + title: ':chapters*', + path: '/article/:chapters*', + component: QianKunStart, + }, + */ + ] + }, + + { + icon: 'menu-links', + title: 'qiankun-layout.menu.links', + path: '/links', + redirect: '/links/list', + roles: ['links'], + component: BlankLayout, + children: [ + { + title: 'qiankun-layout.menu.links.list', + path: 'list', + roles: ['links-list'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.links.category', + path: 'category', + roles: ['links-category'], + component: QianKunStartScreen + }, + /* + { + hidden: true, + title: ':chapters*', + path: '/links/:chapters*', + component: QianKunStart, + }, + */ + ] + }, + + { + icon: 'set', + title: 'qiankun-layout.menu.system', + path: '/system', + redirect: '/system/accountlist', + roles: ['setting'], + component: BlankLayout, + children: [ + { + title: 'qiankun-layout.menu.system.accountlist', + path: 'accountlist', + roles: ['setting-accountlist'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.system.rolelist', + path: 'rolelist', + roles: ['setting-rolelist'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.system.menulist', + path: 'menulist', + roles: ['setting-menulist'], + component: QianKunStartScreen + }, + { + title: 'qiankun-layout.menu.system.apilist', + path: 'apilist', + roles: ['setting-apilist'], + component: QianKunStartScreen + }, + /* + { + hidden: true, + title: ':chapters*', + path: '/system/:chapters*', + component: QianKunStart, + }, + */ + ] + } +]; + +export default QiankunLayoutRoutes; diff --git a/main/src/layouts/SecurityLayout.vue b/main/src/layouts/SecurityLayout.vue new file mode 100644 index 0000000..e10cfeb --- /dev/null +++ b/main/src/layouts/SecurityLayout.vue @@ -0,0 +1,69 @@ + + diff --git a/main/src/layouts/UserLayout/index.vue b/main/src/layouts/UserLayout/index.vue new file mode 100644 index 0000000..e35fa2f --- /dev/null +++ b/main/src/layouts/UserLayout/index.vue @@ -0,0 +1,72 @@ + + + diff --git a/main/src/layouts/UserLayout/locales/en-US.ts b/main/src/layouts/UserLayout/locales/en-US.ts new file mode 100644 index 0000000..4ffd64f --- /dev/null +++ b/main/src/layouts/UserLayout/locales/en-US.ts @@ -0,0 +1,4 @@ +export default { + 'user-layout.menu.login': 'Login', + 'user-layout.menu.register': 'Register', +}; diff --git a/main/src/layouts/UserLayout/locales/zh-CN.ts b/main/src/layouts/UserLayout/locales/zh-CN.ts new file mode 100644 index 0000000..bb7d2a7 --- /dev/null +++ b/main/src/layouts/UserLayout/locales/zh-CN.ts @@ -0,0 +1,4 @@ +export default { + 'user-layout.menu.login': '登录', + 'user-layout.menu.register': '注册', +}; diff --git a/main/src/layouts/UserLayout/locales/zh-TW.ts b/main/src/layouts/UserLayout/locales/zh-TW.ts new file mode 100644 index 0000000..2db0a32 --- /dev/null +++ b/main/src/layouts/UserLayout/locales/zh-TW.ts @@ -0,0 +1,4 @@ +export default { + 'user-layout.menu.login': '登錄', + 'user-layout.menu.register': '註冊', +}; diff --git a/main/src/layouts/UserLayout/routes.ts b/main/src/layouts/UserLayout/routes.ts new file mode 100644 index 0000000..937c230 --- /dev/null +++ b/main/src/layouts/UserLayout/routes.ts @@ -0,0 +1,16 @@ +import { RoutesDataItem } from "@/utils/routes"; + +const UserLayoutRoutes: Array = [ + { + title: 'user-layout.menu.login', + path: 'login', + component: () => import('@/views/user/login/index.vue'), + }, + { + title: 'user-layout.menu.register', + path: 'register', + component: () => import('@/views/user/register/index.vue'), + } +]; + +export default UserLayoutRoutes; \ No newline at end of file diff --git a/main/src/locales/en-US.ts b/main/src/locales/en-US.ts new file mode 100644 index 0000000..264323d --- /dev/null +++ b/main/src/locales/en-US.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': 'The validation did not pass, please check the input', +}; \ No newline at end of file diff --git a/main/src/locales/zh-CN.ts b/main/src/locales/zh-CN.ts new file mode 100644 index 0000000..92b979c --- /dev/null +++ b/main/src/locales/zh-CN.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '验证不通过,请检查输入', +}; \ No newline at end of file diff --git a/main/src/locales/zh-TW.ts b/main/src/locales/zh-TW.ts new file mode 100644 index 0000000..2926c8d --- /dev/null +++ b/main/src/locales/zh-TW.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '驗證不通過,請檢查輸入', +}; \ No newline at end of file diff --git a/main/src/main.ts b/main/src/main.ts new file mode 100644 index 0000000..80c6d6e --- /dev/null +++ b/main/src/main.ts @@ -0,0 +1,64 @@ +import { createApp } from 'vue'; + +// 样式初始化 +import 'normalize.css'; + +// 全局样式 +import '@/assets/css/global.scss'; + +// 引入 ElementUI +import ElementPlus from 'element-plus'; + +// 导入 svg +import { importAllSvg } from "@/components/IconSvg/index"; +importAllSvg(); + +import App from '@/App.vue'; +import router from '@/config/routes'; +import store from '@/config/store'; +import i18n from '@/config/i18n'; + +import { registerMicroApps, childProjectAll, childProjectEntry, actions } from "../../scripts/server/qiankun"; + +const app = createApp(App) +app.provide('childProjectEntry', childProjectEntry); +app.provide('qiankunActions', actions); +app.use(store); +app.use(router) +app.use(ElementPlus, { size: 'small'}); +app.use(i18n); +app.mount('#app'); + +const Apps = childProjectAll('main',{parentRouter: router, parentStore: store}); +registerMicroApps( + Apps, + { + beforeLoad: [ + async (app) => { + store.commit('global/setQiankunStartLoading', true); + console.log('before load app.name====>>>>>', app.name); + }, + ], + beforeMount: [ + async (app) => { + store.commit('global/setQiankunStartLoading', true); + console.log('[LifeCycle] before mount %c%s', 'color: green;', app.name); + }, + ], + afterMount: [ + async (app) => { + store.commit('global/setQiankunStartLoading', false); + console.log('[LifeCycle] after mount %c%s', 'color: green;', app.name); + }, + ], + afterUnmount: [ + async (app) => { + console.log( + '[LifeCycle] after unmount %c%s', + 'color: green;', + app.name + ); + }, + ], + } +); diff --git a/main/src/services/user.ts b/main/src/services/user.ts new file mode 100644 index 0000000..d652147 --- /dev/null +++ b/main/src/services/user.ts @@ -0,0 +1,14 @@ +import request from '@/utils/request'; + +export async function queryCurrent(): Promise { + return request({ + url: '/user/info', + method: 'get' + }); +} + +export async function queryMessage(): Promise { + return request({ + url: '/user/message' + }); +} \ No newline at end of file diff --git a/main/src/shims-vue.d.ts b/main/src/shims-vue.d.ts new file mode 100644 index 0000000..df76ca3 --- /dev/null +++ b/main/src/shims-vue.d.ts @@ -0,0 +1,8 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +declare module '@ckeditor/ckeditor5-vue'; +declare module '@ckeditor/ckeditor5-build-decoupled-document'; diff --git a/main/src/store/global.ts b/main/src/store/global.ts new file mode 100644 index 0000000..72eb419 --- /dev/null +++ b/main/src/store/global.ts @@ -0,0 +1,112 @@ + +import { Mutation/* , Action */ } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { TabNavItem, equalTabNavRoute } from '@/utils/routes'; +import settings, { Theme, NavMode } from '@/config/settings'; +import router from '@/config/routes'; + +export interface StateType { + // 左侧展开收起 + collapsed: boolean; + // 模板主题 + theme: Theme; + // 头部固定开启 + navMode: NavMode; + // 头部固定开启 + headFixed: boolean; + // tab菜单开启 + tabNavEnable: boolean; + // 头部tab导航列表 + headTabNavList: TabNavItem[]; + // 左侧侧边固定开启 + leftSiderFixed: boolean; + // qiankun.js startLoading + qiankunStartLoading: boolean; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + changeLayoutCollapsed: Mutation; + setTheme: Mutation; + setNavMode: Mutation; + setHeadFixed: Mutation; + setTabNavEnable: Mutation; + setHeadTabNavList: Mutation; + closeCurrentHeadTabNav: Mutation; + setLeftSiderFixed: Mutation; + setQiankunStartLoading: Mutation; + }; + actions: { + }; +} + +const homeRoute = router.resolve(settings.homeRouteItem.path); +const initState: StateType = { + collapsed: false, + theme: settings.theme, + navMode: settings.navMode, + headFixed: settings.headFixed, + tabNavEnable: settings.tabNavEnable, + headTabNavList: [ + { + route: homeRoute, + menu: settings.homeRouteItem + } + ], + leftSiderFixed: settings.leftSiderFixed, + qiankunStartLoading: false +}; + +const StoreModel: ModuleType = { + namespaced: true, + name: 'global', + state: { + ...initState + }, + mutations: { + changeLayoutCollapsed(state, payload) { + state.collapsed = payload; + }, + setTheme(state, payload) { + state.theme = payload; + }, + setNavMode(state, payload) { + state.navMode = payload; + }, + setHeadFixed(state, payload) { + state.headFixed = payload; + }, + setTabNavEnable(state, payload) { + state.tabNavEnable = payload; + }, + setHeadTabNavList(state, payload) { + state.headTabNavList = payload; + }, + /** + * 关闭当前tabNav,并调转自定义路由 + * @param state + * @param payload Function 回调 + */ + closeCurrentHeadTabNav(state, payload: Function) { + const navList: TabNavItem[] = state.headTabNavList.filter((item2: TabNavItem) => !equalTabNavRoute(router.currentRoute.value, item2.route, item2.menu.tabNavType)) + state.headTabNavList = [ + ...navList + ] + if(typeof payload === 'function') { + payload() + } + }, + setLeftSiderFixed(state, payload) { + state.leftSiderFixed = payload; + }, + setQiankunStartLoading(state, payload) { + state.qiankunStartLoading = payload; + }, + }, + actions: {} +} + + + +export default StoreModel; diff --git a/main/src/store/user.ts b/main/src/store/user.ts new file mode 100644 index 0000000..331fe65 --- /dev/null +++ b/main/src/store/user.ts @@ -0,0 +1,101 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { ResponseData } from '@/utils/request'; +import { queryCurrent, queryMessage } from "@/services/user"; +import { removeToken } from "@/utils/localToken"; + +export interface CurrentUser { + id: number; + name: string; + avatar: string; + roles: string[]; +} + +export interface StateType { + currentUser: CurrentUser; + message: number; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + saveCurrentUser: Mutation; + saveMessage: Mutation; + }; + actions: { + fetchCurrent: Action; + fetchMessage: Action; + logout: Action; + }; +} + +const initState: StateType = { + currentUser: { + id: 0, + name: '', + avatar: '', + roles: [], + }, + message: 0, +} + +const StoreModel: ModuleType = { + namespaced: true, + name: 'user', + state: { + ...initState + }, + mutations: { + saveCurrentUser(state, payload) { + state.currentUser = { + ...initState.currentUser, + ...payload, + } + }, + saveMessage(state, payload) { + state.message = payload; + } + }, + actions: { + async fetchCurrent({ commit }) { + try { + const response: ResponseData = await queryCurrent(); + const { data } = response; + + /* lqsblog - 重置返回的数据 S */ + const auth = data.resources || []; + data.resources = data.roles || []; + data.roles = auth; + /* lqsblog - 重置返回的数据 $ */ + + commit('saveCurrentUser', data || {}); + return true; + } catch (error) { + return false; + } + }, + async fetchMessage({ commit }) { + try { + const response: ResponseData = await queryMessage(); + const { data } = response; + commit('saveMessage', data || 0); + return true; + } catch (error) { + return false; + } + }, + async logout({ commit }) { + try { + await removeToken(); + commit('saveCurrentUser', { ...initState.currentUser }); + return true; + } catch (error) { + return false; + } + } + } +} + + + +export default StoreModel; diff --git a/main/src/utils/array.ts b/main/src/utils/array.ts new file mode 100644 index 0000000..a3ae5ec --- /dev/null +++ b/main/src/utils/array.ts @@ -0,0 +1,29 @@ +/** + * 数组合并并去重 + * @param arr1 数组1 + * @param arr2 数组2 + */ +export function mergeUnique(arr1: Array, arr2: Array): Array { + const arr: Array = arr1; + for (let index = 0, len = arr2.length; index < len; index += 1) { + if (!arr.includes(arr2[index])) { + arr.push(arr2[index]); + } + } + + return arr; +} + +/** + * 数组去重 + * @param arr 数组 + */ +export function unique(arr: Array): Array { + const array: Array = []; + for (let index = 0, len = arr.length; index < len; index += 1) { + if (!array.includes(arr[index])) { + array.push(arr[index]); + } + } + return array; +} diff --git a/main/src/utils/i18n.ts b/main/src/utils/i18n.ts new file mode 100644 index 0000000..78b58fa --- /dev/null +++ b/main/src/utils/i18n.ts @@ -0,0 +1,181 @@ +/** + * 国际化 utils + * @author LiQingSong + */ +import { LocaleMessages } from '@intlify/core-base'; +import { VueMessageType } from "vue-i18n"; + +// window.localStorage 存储key +export const localeKey = 'locale'; + +// 默认语言 +export const defaultLang = 'zh-CN'; + +/** + * 验证语言命名规则 zh-CN + * @returns boolen + * @author LiQingSong + */ +export const localeNameExp = (lang: string): boolean => { + const localeExp = new RegExp(`^([a-z]{2})-?([A-Z]{2})?$`); + return localeExp.test(lang); +} + +/** + * 设置 html lang 属性值 + * @param lang 语言的 key + * @author LiQingSong + */ +export const setHtmlLang = (lang: string): void => { + /** + * axios.defaults.headers.common['Accept-Language'] = locale + */ + document.querySelector('html')?.setAttribute('lang', lang); +} + +/** + * 获取当前选择的语言 + * 获取的浏览器语言默认项目中有可能不支持,所以在config/i18n.ts中要加以判断 + * @returns string + * @author LiQingSong + */ +export const getLocale = (): string => { + const lang = typeof window.localStorage !== 'undefined' ? window.localStorage.getItem(localeKey) : ''; + const isNavigatorLanguageValid = typeof navigator !== 'undefined' && typeof navigator.language === 'string'; + const browserLang = isNavigatorLanguageValid ? navigator.language.split('-').join('-') : ''; + return lang || browserLang || defaultLang; +}; + +/** + * 切换语言 + * @param lang 语言的 key + * @param realReload 是否刷新页面,默认刷新 + * @author LiQingSong + */ +export const setLocale = (lang: string, realReload = true, callback: () => void ): void => { + + if (lang !== undefined && !localeNameExp(lang)) { + // for reset when lang === undefined + throw new Error('setLocale lang format error'); + } + if (getLocale() !== lang) { + if (typeof window.localStorage !== 'undefined') { + window.localStorage.setItem(localeKey, lang || ''); + } + + if (realReload) { + window.location.reload(); + } else { + setHtmlLang(lang); + + if(typeof callback === 'function') { + callback(); + } + } + + } +}; + +/** + * 自动导入 框架自定义语言 + * @author LiQingSong + */ +export function importAllLocales(): LocaleMessages { + const modules: LocaleMessages = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/layouts 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const layoutsRequireContext: __WebpackModuleApi.RequireContext = require.context('../layouts', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + layoutsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = layoutsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/components 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const componentsRequireContext: __WebpackModuleApi.RequireContext = require.context('../components', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + componentsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = componentsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/locales 下文件,不包含子目录,文件名为:([a-z]{2})-?([A-Z]{2})?\.ts + const localesRequireContext: __WebpackModuleApi.RequireContext = require.context('../locales', false, /([a-z]{2})-?([A-Z]{2})?\.ts$/); + localesRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = localesRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + diff --git a/main/src/utils/localToken.ts b/main/src/utils/localToken.ts new file mode 100644 index 0000000..fca7e6f --- /dev/null +++ b/main/src/utils/localToken.ts @@ -0,0 +1,37 @@ +/** + * 自定义 token 操作 + * @author LiQingSong + */ +import localforage from 'localforage'; +import settings from '@/config/settings'; + +/** + * 获取本地Token + */ +export const getToken = async (): Promise => { + return await localforage.getItem(settings.siteTokenKey); +}; + +/** + * 设置存储本地Token + */ +export const setToken = async (token: string): Promise => { + try { + await localforage.setItem(settings.siteTokenKey, token); + return true; + } catch (error) { + return false; + } +}; + +/** + * 移除本地Token + */ +export const removeToken = async (): Promise => { + try { + await localforage.removeItem(settings.siteTokenKey); + return true; + } catch (error) { + return false; + } +}; \ No newline at end of file diff --git a/main/src/utils/mock/require-context.js b/main/src/utils/mock/require-context.js new file mode 100644 index 0000000..f1dd6dd --- /dev/null +++ b/main/src/utils/mock/require-context.js @@ -0,0 +1,45 @@ +/** + * 自定义 require.context + * @author LiQingSong + */ +module.exports = function(directory, recursive, regExp) { + const dir = require('node-dir') + const path = require('path') + + // Assume absolute path by default + let basepath = directory + + if (directory[0] === '.') { + // Relative path + basepath = path.join(__dirname, directory) + } else if (!path.isAbsolute(directory)) { + // Module path + basepath = require.resolve(directory) + } + + const keys = dir + .files(basepath, { + sync: true, + recursive: recursive || false + }) + .filter(function(file) { + return file.match(regExp || /\.(json|js)$/) + }) + .map(function(file) { + return path.join('.', file.slice(basepath.length + 1)) + }) + + var context = function(key) { + return require(context.resolve(key)) + } + + context.resolve = function(key) { + return path.join(directory, key) + } + + context.keys = function() { + return keys + } + + return context + } \ No newline at end of file diff --git a/main/src/utils/mock/server.js b/main/src/utils/mock/server.js new file mode 100644 index 0000000..e180d29 --- /dev/null +++ b/main/src/utils/mock/server.js @@ -0,0 +1,98 @@ +/** + * Mock Server + * @author LiQingSong + */ +const requireContext = require('./require-context'); +const chokidar = require('chokidar'); +const path = require('path'); + +// 注册 mock 路由 +function registerMockRoutes(mockDir, app) { + let mockLastIndex = 0; + let mockRoutesLength = 0; + try { + // 导入 /mock 下文件 + const context = requireContext(mockDir, false, /\.js$/); + context.keys().forEach(fileName => { + // 获取内容 + const mocks = context(fileName); + for (const key in mocks) { + const keys = key.replace(/(^\s*)|(\s*$)/g, '').split(' '); + let ajaxType = 'get'; + let ajaxUrl = ''; + if(keys.length<2) { + ajaxUrl = keys[0]; + } else { + ajaxType = keys[0].toLowerCase(); + ajaxUrl = keys[1]; + if(!['get','post','put','patch','delete','head','options'].includes(ajaxType)) { + ajaxType = 'get'; + } + } + if(typeof mocks[key] === 'function') { + app[ajaxType](ajaxUrl, mocks[key]); + mockLastIndex = app._router.stack.length; + mockRoutesLength = mockRoutesLength + 1; + // console.log(app._router.stack.length); + } + } + }); + } catch (error) { + console.log(error); + } + + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } + +} + +// 删除 mock 路由 +function unRegisterMockRoutes(mockDir) { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + + +module.exports = app => { + const mockDir = path.resolve('./mock'); + + const mockRoutes = registerMockRoutes(mockDir,app); + let mockRoutesLength = mockRoutes.mockRoutesLength; + let mockStartIndex = mockRoutes.mockStartIndex; + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add' || event === 'unlink') { + // console.log(event, path); + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength); + + // clear routes cache + unRegisterMockRoutes(mockDir); + + // rest routes + const mockRoutes = registerMockRoutes(mockDir,app); + mockRoutesLength = mockRoutes.mockRoutesLength; + mockStartIndex = mockRoutes.mockStartIndex; + + + console.log(`\n > Mock Server hot reload success! changed ${path}`) + } catch (error) { + console.log(error); + } + + } + }) + + + + +} \ No newline at end of file diff --git a/main/src/utils/object.ts b/main/src/utils/object.ts new file mode 100644 index 0000000..ecdc6dd --- /dev/null +++ b/main/src/utils/object.ts @@ -0,0 +1,46 @@ +/** + * 浅比较两个object, json的key是否一致 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObjectKey(obj1: Object, obj2: Object): boolean{ + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + if(obj1KeysLen!==obj2Keys.length) { + return false; + } + let is = true; + for (let index = 0; index < obj1KeysLen; index++) { + const element: string = obj1Keys[index]; + if(!Object.prototype.hasOwnProperty.call(obj2, element)) { + is = false; + break; + } + } + return is; +} + +/** + * 浅比较两个对象是否相等,这两个对象的值只能是数字或字符串 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObject(obj1: Object, obj2: Object): boolean { + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + const obj2KeysLen: number = obj2Keys.length; + if(obj1KeysLen!==obj2KeysLen) { + return false; + } + + if(obj1KeysLen===0 && obj2KeysLen===0) { + return true; + } + + return !obj1Keys.some(key => obj1[key] != obj2[key]) + +} \ No newline at end of file diff --git a/main/src/utils/request.ts b/main/src/utils/request.ts new file mode 100644 index 0000000..bffb758 --- /dev/null +++ b/main/src/utils/request.ts @@ -0,0 +1,164 @@ +/** + * 自定义 request 网络请求工具,基于axios + * @author LiQingSong + */ +import axios, { AxiosPromise, AxiosRequestConfig, AxiosResponse } from 'axios'; +import { ElNotification } from 'element-plus'; +import router from '@/config/routes'; +import settings from '@/config/settings'; +import { getToken, setToken } from '@/utils/localToken'; + +export interface ResponseData { + code: number; + data?: any; + msg?: string; + token?: string; +} + +const customCodeMessage: {[key: number]: string} = { + 10002: '当前用户登入信息已失效,请重新登入再操作', // 未登陆 +}; + +const serverCodeMessage: {[key: number]: string} = { + 200: '服务器成功返回请求的数据', + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 500: '服务器发生错误,请检查服务器(Internal Server Error)', + 502: '网关错误(Bad Gateway)', + 503: '服务不可用,服务器暂时过载或维护(Service Unavailable)', + 504: '网关超时(Gateway Timeout)', +}; + +/** + * 异常处理程序 + */ +const errorHandler = (error: any) => { + const { response, message } = error; + if (message === 'CustomError') { + // 自定义错误 + const { config, data } = response; + const { url, baseURL} = config; + const { code, msg } = data; + const reqUrl = url.split("?")[0].replace(baseURL, ''); + const noVerifyBool = settings.ajaxResponseNoVerifyUrl.includes(reqUrl); + if (!noVerifyBool) { + ElNotification({ + type: 'error', + title: `提示`, + message: customCodeMessage[code] || msg || 'Error', + }); + + if (code === 10002) { + router.replace('/user/login'); + } + } + } else if (message === 'CancelToken') { + // 取消请求 Token + // eslint-disable-next-line no-console + console.log(message); + } else if (response && response.status) { + const errorText = serverCodeMessage[response.status] || response.statusText; + const { status, request } = response; + ElNotification({ + type: 'error', + title: `请求错误 ${status}: ${request.responseURL}`, + message: errorText, + }); + } else if (!response) { + ElNotification({ + type: 'error', + title: '网络异常', + message: '您的网络发生异常,无法连接服务器', + }); + } + + return Promise.reject(error); +} + +/** + * 配置request请求时的默认参数 + */ +const request = axios.create({ + baseURL: process.env.VUE_APP_APIHOST, // url = api url + request url + withCredentials: true, // 当跨域请求时发送cookie + timeout: 0 // 请求超时时间,5000(单位毫秒) / 0 不做限制 +}); + +// 全局设置 - post请求头 +// request.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + +/** + * 请求前 + * 请求拦截器 + */ +request.interceptors.request.use( + async (config: AxiosRequestConfig & { cType?: boolean }) => { + + // 如果设置了cType 说明是自定义 添加 Content-Type类型 为自定义post 做铺垫 + if (config['cType']) { + config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // 自定义添加token header + const headerToken = await getToken(); + if (headerToken) { + config.headers[settings.ajaxHeadersTokenKey] = headerToken; + } + + return config; + }, + /* error=> {} */ // 已在 export default catch +); + +/** + * 请求后 + * 响应拦截器 + */ +request.interceptors.response.use( + async (response: AxiosResponse) => { + + const res: ResponseData = response.data; + const { code, token } = res; + + // 自定义状态码验证 + if (code !== 0) { + return Promise.reject({ + response, + message: 'CustomError', + }); + } + + // 重置刷新token + if (token) { + await setToken(token); + } + + return response; + }, + /* error => {} */ // 已在 export default catch +); + +/** + * ajax 导出 + * + * Method: get + * Request Headers + * 无 - Content-Type + * Query String Parameters + * name: name + * age: age + * + * Method: post + * Request Headers + * Content-Type:application/json;charset=UTF-8 + * Request Payload + * { name: name, age: age } + * Custom config parameters + * { cType: true } Mandatory Settings Content-Type:application/json;charset=UTF-8 + * ...... + */ +export default function(config: AxiosRequestConfig): AxiosPromise { + return request(config).then((response: AxiosResponse) => response.data).catch(error => errorHandler(error)); +} diff --git a/main/src/utils/routes.ts b/main/src/utils/routes.ts new file mode 100644 index 0000000..300b80c --- /dev/null +++ b/main/src/utils/routes.ts @@ -0,0 +1,388 @@ +/** + * Route utils + * @author LiQingSong + */ + +/** + * 面包屑类型 + */ +export interface BreadcrumbType { + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + // 路由地址或外链 + path: string; +} + +/** + * tab导航存储规则类型 + */ +export type TabNavType = 'path' | 'querypath'; + +import 'vue-router' +declare module 'vue-router' { + /** + * 自定义补充扩展 - 路由 - 类型字段 + */ + interface _RouteRecordBase { + // 菜单中是否隐藏 + hidden?: boolean; + // 图标的名称,显示在菜单标题前 + icon?: string; + // 权限控制,页面角色(您可以设置多个角色) + roles?: string[]; + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + /** + * 面包屑自定义内容: + * 1、默认不配置按照路由自动读取; + * 2、设置为 false , 按照路由自动读取并不读当前自己; + * 3、配置对应的面包屑格式如下: + */ + breadcrumb?: BreadcrumbType[] | false; + /** + * 设置tab导航存储规则类型 + * 1、默认不配置按照path(route.path)规则 + * 2、querypath:path + query (route.path+route.query) 规则 + */ + tabNavType?: TabNavType ; + /** + * 设置该字段,则在关闭当前tab页时,作为关闭前的钩子函数 + * @param close 关闭回调函数 + */ + tabNavCloseBefore?: (close: ()=>void)=> void; + /** + * 左侧菜单选中,如果设置路径,侧栏将突出显示你设置的路径对应的侧栏导航 + * 1、(默认 route.path),此参数是为了满足特殊页面特殊需求, + * 2、如:详情页等选中侧栏导航或在模块A下面的页面,想选模块B为导航选中状态 + */ + selectLeftMenu?: string; + + // 所有父元素的path,下标key按照父元素的顺序 + parentPath?: string[] + } +} +import { RouteRecordRaw, RouteLocationNormalizedLoaded } from 'vue-router'; +import { pathToRegexp } from "path-to-regexp"; + + +/** + * 自定义重命名 - 路由类型 + */ +export type RoutesDataItem = RouteRecordRaw; + +/** + * 头部tab导航类型 + */ +export interface TabNavItem { + route: RouteLocationNormalizedLoaded, + menu: RoutesDataItem +} + +/** + * 用Routes的path作为key的JsonRoutes + */ +export interface PathJsonRoutesDataItem { + [path: string]: RoutesDataItem +} + +import { isExternal } from './validate'; +import { equalObject } from "./object"; + +/** + * 获取 route + * @param pathname path + * @param routesData routes + */ +export const getRouteItem = (pathname: string, routesData: RoutesDataItem[]): RoutesDataItem => { + let item: RoutesDataItem = { title: '', path: '', redirect: '', roles: [] }; + for (let index = 0, len = routesData.length; index < len; index += 1) { + const element = routesData[index]; + //if (element.path === pathname) { + // lqs 20210120 修复用pathToRegexp + if (pathToRegexp(element.path).exec(pathname)) { + item = element; + break; + } + + if (element.children) { + item = getRouteItem(pathname, element.children); + if (item.path !== '') { + break; + } + } + } + + return item; +}; + +/** + * 获取 route + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getJsonRouteItem = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem => { + return jsonRoutesData[pathname] || {}; +} + +/** + * 根据 hidden 判断是否有数据子集 + * @param children RoutesDataItem[] + */ +export const hasChildRoute = (children: RoutesDataItem[]): boolean => { + const showChildren = children.filter(item => { + if (item.hidden) { + return false; + } + return true; + }); + if (showChildren.length > 0) { + return true; + } + return false; +}; + + +/** + * 根据父path 设置当前项 path + * @param pathname path + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const setRoutePathForParent = (pathname: string, parentPath = '/', headStart = '/'): string => { + + if (isExternal(pathname)) { + return pathname; + } + + return pathname.substr(0, headStart.length) === headStart + ? pathname + : `${parentPath}/${pathname}`; +}; + +/** + * 根据路由 pathname 数组 - 返回对应的 route 数组 + * @param pathname 路由path数组 + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getPathsTheRoutes = ( pathname: string[], jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem[] => { + const routeItem: RoutesDataItem[] = []; + + for (let index = 0, len = pathname.length; index < len; index += 1) { + const element = pathname[index]; + const item = getJsonRouteItem(element,jsonRoutesData); + if (item.path !== '') { + routeItem.push(item); + } + } + + return routeItem; +}; + +/** + * 获取面包屑对应的 route 数组 + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getBreadcrumbRoutes = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): BreadcrumbType[] => { + const route = getJsonRouteItem(pathname,jsonRoutesData); + if(!route.path) { + return []; + } + + if (!route.breadcrumb) { + const parentPath = route.parentPath || [] + const routes = getPathsTheRoutes(parentPath, jsonRoutesData); + + return route.breadcrumb === false ? routes : [...routes, route]; + } + + return route.breadcrumb; +}; + +/** + * 获取当前路由选中的侧边栏菜单path + * @param route route + */ +export const getSelectLeftMenuPath = (route: RoutesDataItem): string => { + return route.selectLeftMenu || route.path; +}; + + +/** + * 格式化返回 vue 路由, 主要处理特殊情况 + * @param routesData routes + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const vueRoutes = (routesData: RoutesDataItem[], parentPath = '/', headStart = '/'): RoutesDataItem[] => { + return routesData.map(item => { + const { children, ...other } = item; + const itemChildren = children || []; + const newItem: RoutesDataItem = { ...other }; + newItem.path = setRoutePathForParent(newItem.path, parentPath, headStart); + + if (item.children) { + newItem.children = [ + ...vueRoutes(itemChildren, newItem.path, headStart), + ]; + } + + return newItem; + }); +}; + +/** + * 把经过 vueRoutes 处理过的 routes 转换成用path作为key的json,并统一增加了parentPath + * @param vueRoutesData 经过 vueRoutes 处理过的 routes + * @returns PathJsonRoutesDataItem + */ +export const jsonPathVueRoutes = (vueRoutesData: RoutesDataItem[]): PathJsonRoutesDataItem=> { + + const jsonRoutes: PathJsonRoutesDataItem = {}; + + function forRoute(routesData: RoutesDataItem[], parentPath: string[]) { + const len = routesData.length; + for (let index = 0; index < len; index++) { + const item = routesData[index]; + + const pPath = (item.parentPath && item.parentPath.length > 0) ? item.parentPath : parentPath; + + const newItem: RoutesDataItem = { + ...item, + parentPath: [...pPath] + }; + + jsonRoutes[item.path] = newItem; + + if (item.children) { + forRoute(item.children,[...pPath, item.path]) + } + + } + } + + forRoute(vueRoutesData, []); + + return jsonRoutes; +} + +/** + * 批量设置route.meta值 + * @param routesData routes + */ +export const routesSetMeta = (routesData: RoutesDataItem[]): RoutesDataItem[] => { + return routesData.map(item => { + const { children, tabNavType, meta, ...other } = item; + const newItem: RoutesDataItem = { + meta: { + ...meta, + + // 自定义设置的 meta 值 S + + tabNavType: tabNavType || 'path', + + // 自定义设置的 meta 值 E + }, + ...other + }; + + if (item.children) { + const itemChildren = children || []; + newItem.children = [ + ...routesSetMeta(itemChildren), + ]; + } + + return newItem; + }); + +} + +/** + * 根据 自定义传入权限名 判断当前用户是否有权限 + * @param userRoles 用户的权限 + * @param roles 自定义权限名 + */ +export const hasPermissionRouteRoles = (userRoles: string[], roles?: string | string[]): boolean => { + if (userRoles.includes('admin')) { + return true; + } + + if(typeof roles === 'undefined') { + return true; + } + + if (typeof roles === 'string') { + return userRoles.includes(roles); + } + + if(roles instanceof Array && roles.length > 0) { + return roles.some(role => userRoles.includes(role)); + } + + return false; +}; + +/** + * 根据 route.roles 判断当前用户是否有权限 + * @param roles 用户的权限 + * @param route 当前路由 + */ +export const hasPermission = (roles: string[], route: RoutesDataItem): boolean => { + if (roles.includes('admin')) { + return true; + } + + if (route.roles) { + return route.roles.some(role => roles.includes(role)); + //return roles.some(role => route.roles?.includes(role)); + } + + return true; +}; + +/** + * 根据用户权限 获取 对应权限菜单 + * @param roles 用户的权限 + * @param routes 框架对应路由 + */ +export const getPermissionMenuData = ( roles: string[], routes: RoutesDataItem[]): RoutesDataItem[] => { + const menu: RoutesDataItem[] = []; + for (let index = 0, len = routes.length; index < len; index += 1) { + const element = {...routes[index]}; + if (hasPermission(roles, element)) { + if (element.children) { + element.children = getPermissionMenuData(roles, element.children); + } + menu.push(element); + } + } + + return menu; +}; + + + +/** + * 判断tabNav,对应的route是否相等 + * @param route1 vue-route + * @param route2 vue-route + * @param type 判断规则 + * @returns + */ +export const equalTabNavRoute = (route1: RouteLocationNormalizedLoaded, route2: RouteLocationNormalizedLoaded, type: TabNavType = 'path'): boolean=> { + let is = false; + switch (type) { + case 'querypath': // path + query + is = equalObject(route1.query,route2.query) && route1.path === route2.path + break; + default: // path + is = route1.path === route2.path + break; + } + + return is; +} diff --git a/main/src/utils/store.ts b/main/src/utils/store.ts new file mode 100644 index 0000000..f21cae9 --- /dev/null +++ b/main/src/utils/store.ts @@ -0,0 +1,61 @@ +/** + * Store utils + * @author LiQingSong + */ +import { Module, ModuleTree } from 'vuex'; + +/** + * 自定义项目 Store Module 类型 + * 为自动导入的 store 做类型限制 + * [@/store文件夹下定义的 store]与[@/views文件夹下定义的`文件store.ts`] 必须继承此类型 + * @author LiQingSong + */ +export interface StoreModuleType extends Module { + namespaced: true; + name: string; +} + +/** + * 自动导入 Store + * @author LiQingSong + */ +export function importAllStore (): ModuleTree { + const modules: ModuleTree = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:store.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]store\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + + // 导入 @/store 下文件 + const requireContext: __WebpackModuleApi.RequireContext = require.context('../store', false, /\.ts$/); + requireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = requireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + \ No newline at end of file diff --git a/main/src/utils/validate.ts b/main/src/utils/validate.ts new file mode 100644 index 0000000..1c553f6 --- /dev/null +++ b/main/src/utils/validate.ts @@ -0,0 +1,9 @@ +/** + * 判断是否是外链 + * @param {string} path + * @returns {Boolean} + * @author LiQingSong + */ +export const isExternal = (path: string): boolean => { + return /^(https?:|mailto:|tel:)/.test(path); +}; diff --git a/main/src/views/404/index.vue b/main/src/views/404/index.vue new file mode 100644 index 0000000..bf7bc46 --- /dev/null +++ b/main/src/views/404/index.vue @@ -0,0 +1,21 @@ + + \ No newline at end of file diff --git a/main/src/views/home/index.vue b/main/src/views/home/index.vue new file mode 100644 index 0000000..887e158 --- /dev/null +++ b/main/src/views/home/index.vue @@ -0,0 +1,151 @@ + + diff --git a/main/src/views/qiankun/index.vue b/main/src/views/qiankun/index.vue new file mode 100644 index 0000000..e68d27f --- /dev/null +++ b/main/src/views/qiankun/index.vue @@ -0,0 +1,7 @@ + + diff --git a/main/src/views/qiankun/start.vue b/main/src/views/qiankun/start.vue new file mode 100644 index 0000000..30464e9 --- /dev/null +++ b/main/src/views/qiankun/start.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/main/src/views/qiankun/startScreen.vue b/main/src/views/qiankun/startScreen.vue new file mode 100644 index 0000000..5093f53 --- /dev/null +++ b/main/src/views/qiankun/startScreen.vue @@ -0,0 +1,52 @@ + + + + diff --git a/main/src/views/refresh/index.vue b/main/src/views/refresh/index.vue new file mode 100644 index 0000000..c2b19a5 --- /dev/null +++ b/main/src/views/refresh/index.vue @@ -0,0 +1,17 @@ + diff --git a/main/src/views/user/login/data.d.ts b/main/src/views/user/login/data.d.ts new file mode 100644 index 0000000..078638b --- /dev/null +++ b/main/src/views/user/login/data.d.ts @@ -0,0 +1,4 @@ +export interface LoginParamsType { + username: string; + password: string; +} diff --git a/main/src/views/user/login/index.vue b/main/src/views/user/login/index.vue new file mode 100644 index 0000000..85f9e79 --- /dev/null +++ b/main/src/views/user/login/index.vue @@ -0,0 +1,135 @@ + + + diff --git a/main/src/views/user/login/locales/en-US.ts b/main/src/views/user/login/locales/en-US.ts new file mode 100644 index 0000000..a5db472 --- /dev/null +++ b/main/src/views/user/login/locales/en-US.ts @@ -0,0 +1,11 @@ +export default { + 'page.user.login.form-item-username': 'username: admin or test or user', + 'page.user.login.form-item-username.required': 'Please input your username', + 'page.user.login.form-item-password': 'password: 123465', + 'page.user.login.form-item-password.required': 'Please input your password', + 'page.user.login.form.title': 'Account Login', + 'page.user.login.form.btn-submit': 'Sign in', + 'page.user.login.form.btn-jump': 'or register now!', + 'page.user.login.form.login-error': 'Wrong username or password!', + 'page.user.login.form.login-success': 'Login successful!', +}; diff --git a/main/src/views/user/login/locales/zh-CN.ts b/main/src/views/user/login/locales/zh-CN.ts new file mode 100644 index 0000000..0e75b46 --- /dev/null +++ b/main/src/views/user/login/locales/zh-CN.ts @@ -0,0 +1,11 @@ +export default { + 'page.user.login.form-item-username': '用户名: admin or test or user', + 'page.user.login.form-item-username.required': '请输入用户名', + 'page.user.login.form-item-password': '密码:123456', + 'page.user.login.form-item-password.required': '请输入密码', + 'page.user.login.form.title': '账户登录', + 'page.user.login.form.btn-submit': '登 录', + 'page.user.login.form.btn-jump': '还没有账户?现在注册!', + 'page.user.login.form.login-error': '用户名或密码错误!', + 'page.user.login.form.login-success': '登录成功!', +}; diff --git a/main/src/views/user/login/locales/zh-TW.ts b/main/src/views/user/login/locales/zh-TW.ts new file mode 100644 index 0000000..129cd48 --- /dev/null +++ b/main/src/views/user/login/locales/zh-TW.ts @@ -0,0 +1,11 @@ +export default { + 'page.user.login.form-item-username': '用戶名: admin or test or user', + 'page.user.login.form-item-username.required': '請輸入用戶名', + 'page.user.login.form-item-password': '密碼: 123456', + 'page.user.login.form-item-password.required': '請輸入密碼', + 'page.user.login.form.title': '賬戶登錄', + 'page.user.login.form.btn-submit': '登 錄', + 'page.user.login.form.btn-jump': '還沒有賬戶?現在註冊!', + 'page.user.login.form.login-error': '用戶名或密碼錯誤!', + 'page.user.login.form.login-success': '登錄成功!', +}; diff --git a/main/src/views/user/login/service.ts b/main/src/views/user/login/service.ts new file mode 100644 index 0000000..436e376 --- /dev/null +++ b/main/src/views/user/login/service.ts @@ -0,0 +1,10 @@ +import request from '@/utils/request'; +import { LoginParamsType } from './data.d'; + +export async function accountLogin(params: LoginParamsType): Promise { + return request({ + url: '/user/login', + method: 'POST', + data: params, + }); +} \ No newline at end of file diff --git a/main/src/views/user/login/store.ts b/main/src/views/user/login/store.ts new file mode 100644 index 0000000..9c0bf22 --- /dev/null +++ b/main/src/views/user/login/store.ts @@ -0,0 +1,63 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { ResponseData } from '@/utils/request'; +import { setToken } from '@/utils/localToken'; +import { accountLogin } from './service'; +import { LoginParamsType } from "./data.d"; + +export interface StateType { + loginStatus?: 'ok' | 'error'; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + changeLoginStatus: Mutation; + }; + actions: { + login: Action; + }; +} + +const initState: StateType = { + loginStatus: undefined, +} + +const StoreModel: ModuleType = { + namespaced: true, + name: 'userlogin', + state: { + ...initState + }, + mutations: { + changeLoginStatus(state, payload) { + state.loginStatus = payload; + }, + }, + actions: { + async login({ commit }, payload: LoginParamsType) { + let status: undefined | string = undefined; + try { + const response: ResponseData = await accountLogin(payload); + const { data } = response; + setToken(data.token || ''); + status = 'ok'; + } catch (error: any) { + if (error.message && error.message === 'CustomError') { + status = 'error'; + } + } + + commit('changeLoginStatus',status); + + if (status === 'ok') { + return true; + } else if (status === 'error') { + return false; + } + return undefined; + } + } +} + +export default StoreModel; diff --git a/main/src/views/user/register/data.d.ts b/main/src/views/user/register/data.d.ts new file mode 100644 index 0000000..d02fe6e --- /dev/null +++ b/main/src/views/user/register/data.d.ts @@ -0,0 +1,5 @@ +export interface RegisterParamsType { + username: string; + password: string; + confirm: string; +} diff --git a/main/src/views/user/register/index.vue b/main/src/views/user/register/index.vue new file mode 100644 index 0000000..d6851d4 --- /dev/null +++ b/main/src/views/user/register/index.vue @@ -0,0 +1,155 @@ + + + \ No newline at end of file diff --git a/main/src/views/user/register/locales/en-US.ts b/main/src/views/user/register/locales/en-US.ts new file mode 100644 index 0000000..5ce3154 --- /dev/null +++ b/main/src/views/user/register/locales/en-US.ts @@ -0,0 +1,16 @@ +export default { + 'page.user.register.form-item-username': 'Username', + 'page.user.register.form-item-username.required': + 'Please input your username', + 'page.user.register.form-item-password': 'Password', + 'page.user.register.form-item-password.required': + 'Please input your password', + 'page.user.register.form-item-confirmpassword': 'Confirm Password', + 'page.user.register.form-item-confirmpassword.compare': + 'The two passwords that you entered do not match!', + 'page.user.register.form.title': 'Account Registration', + 'page.user.register.form.btn-submit': 'Register', + 'page.user.register.form.btn-jump': 'Already have an account?', + 'page.user.register.form.register-success': + 'Registered successfully, please log in!', +}; diff --git a/main/src/views/user/register/locales/zh-CN.ts b/main/src/views/user/register/locales/zh-CN.ts new file mode 100644 index 0000000..4df8f42 --- /dev/null +++ b/main/src/views/user/register/locales/zh-CN.ts @@ -0,0 +1,13 @@ +export default { + 'page.user.register.form-item-username': '用户名', + 'page.user.register.form-item-username.required': '请输入用户名', + 'page.user.register.form-item-password': '密码', + 'page.user.register.form-item-password.required': '请输入密码', + 'page.user.register.form-item-confirmpassword': '确认密码', + 'page.user.register.form-item-confirmpassword.compare': + '您输入的两个密码不匹配!', + 'page.user.register.form.title': '注册账户', + 'page.user.register.form.btn-submit': '注 册', + 'page.user.register.form.btn-jump': '已有账户?现在登录!', + 'page.user.register.form.register-success': '注册成功,请登录!', +}; diff --git a/main/src/views/user/register/locales/zh-TW.ts b/main/src/views/user/register/locales/zh-TW.ts new file mode 100644 index 0000000..4a17874 --- /dev/null +++ b/main/src/views/user/register/locales/zh-TW.ts @@ -0,0 +1,13 @@ +export default { + 'page.user.register.form-item-username': '用戶名', + 'page.user.register.form-item-username.required': '請輸入用戶名', + 'page.user.register.form-item-password': '密碼', + 'page.user.register.form-item-password.required': '請輸入密碼', + 'page.user.register.form-item-confirmpassword': '確認密碼', + 'page.user.register.form-item-confirmpassword.compare': + '您輸入的兩個密碼不匹配!', + 'page.user.register.form.title': '註冊賬戶', + 'page.user.register.form.btn-submit': '註 冊', + 'page.user.register.form.btn-jump': '已有賬戶?現在登錄!', + 'page.user.register.form.register-success': '註冊成功,請登錄!', +}; diff --git a/main/src/views/user/register/service.ts b/main/src/views/user/register/service.ts new file mode 100644 index 0000000..614a67c --- /dev/null +++ b/main/src/views/user/register/service.ts @@ -0,0 +1,10 @@ +import request from '@/utils/request'; +import { RegisterParamsType } from './data.d'; + +export async function accountReg(params: RegisterParamsType): Promise { + return request({ + url: '/user/register', + method: 'POST', + data: params, + }); +} \ No newline at end of file diff --git a/main/src/views/user/register/store.ts b/main/src/views/user/register/store.ts new file mode 100644 index 0000000..f00142d --- /dev/null +++ b/main/src/views/user/register/store.ts @@ -0,0 +1,62 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { RegisterParamsType } from "./data.d"; +import { accountReg } from "./service"; + +export interface StateType { + errorMsg?: string; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + changeErrorMsg: Mutation; + }; + actions: { + register: Action; + }; +} + +const initState: StateType = { + errorMsg: undefined, +}; + +const StoreModel: ModuleType = { + namespaced: true, + name: 'userregister', + state: { + ...initState + }, + mutations: { + changeErrorMsg(state, payload) { + state.errorMsg = payload; + }, + }, + actions: { + async register({ commit }, payload: RegisterParamsType) { + let msg: undefined | string = undefined; + try { + await accountReg(payload); + msg = ''; + } catch (error: any) { + if (error.message && error.message === 'CustomError') { + const { response } = error; + const { data } = response; + msg = data.msg || 'error'; + } + } + + commit('changeErrorMsg',msg); + + if (msg === '') { + return true; // 成功 + } else if (typeof msg === 'undefined') { + return undefined; // 服务器错误 + } else { + return false; // 自定义错误 + } + } + } +}; + +export default StoreModel; diff --git a/main/tests/unit/example.spec.ts b/main/tests/unit/example.spec.ts new file mode 100644 index 0000000..4b21ca7 --- /dev/null +++ b/main/tests/unit/example.spec.ts @@ -0,0 +1,12 @@ +import { shallowMount } from '@vue/test-utils' +import HelloWorld from '@/components/HelloWorld.vue' + +describe('HelloWorld.vue', () => { + it('renders props.msg when passed', () => { + const msg = 'new message' + const wrapper = shallowMount(HelloWorld, { + props: { msg } + }) + expect(wrapper.text()).toMatch(msg) + }) +}) diff --git a/main/tsconfig.json b/main/tsconfig.json new file mode 100644 index 0000000..e2fadb7 --- /dev/null +++ b/main/tsconfig.json @@ -0,0 +1,43 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "noImplicitAny": false, + "baseUrl": ".", + "types": [ + "webpack-env", + "jest", + "element-plus/global" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/main/vue.config.js b/main/vue.config.js new file mode 100644 index 0000000..5821814 --- /dev/null +++ b/main/vue.config.js @@ -0,0 +1,87 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { stringified } = require('../scripts/server/env'); +const bodyParser = require('body-parser') +const mockServer = require('./src/utils/mock/server'); +const { NODE_ENV, VUE_APP_PORT, VUE_APP_MOCK } = process.env; +module.exports = { + publicPath: '/', + outputDir: 'dist', + productionSourceMap: false, + devServer: { + port: VUE_APP_PORT || 8080, + // 配置反向代理 + /* + proxy: { + '/api': { + target: '', + ws: true, + changeOrigin: true + }, + '/foo': { + target: '' + } + }, + */ + before: function(app, server) { + if(NODE_ENV === 'development' && VUE_APP_MOCK === 'true') { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + // create application/json parser + app.use(bodyParser.json()); + // create application/x-www-form-urlencoded parser + app.use(bodyParser.urlencoded({ extended: false})); + mockServer(app); + } + } + }, + // 修改webpack的配置 + configureWebpack: { + // 不需要打包的插件 + externals: { + // 'vue': 'Vue', + // 'vue-router': 'VueRouter', + // 'element-ui': 'ELEMENT' + } + }, + chainWebpack(config) { + + // 内置的 svg Rule 添加 exclude + config.module + .rule('svg') + .exclude.add(/iconsvg/) + .end(); + + // 添加 svg-sprite-loader Rule + config.module + .rule('svg-sprite-loader') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader'); + + // 添加 svgo Rule + config.module + .rule('svgo') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svgo-loader') + .loader('svgo-loader') + .options({ + // externalConfig 配置特殊不是相对路径,起始路径是根目录 + externalConfig: './src/assets/iconsvg/svgo.yml', + }); + + // 添加自定义环境变量 + config.plugin('define') + .tap(args => { + args[0]['process.env'] = { + ...args[0]['process.env'], + ...stringified + } + return args + }) + + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..33fc7ad --- /dev/null +++ b/package.json @@ -0,0 +1,69 @@ +{ + "name": "admin-vue3-micro-qiankun", + "description": "Micro front-end Admin based on Qiankun, vue3.x, admin-element-vue, admin-antd-vue project architecture", + "private": true, + "workspaces": [ + "packages/*", + "components/*", + "main", + "main-antd" + ], + "scripts": { + "serve": "set NODE_ENV=development&&gulp --require sucrase/register/ts -f scripts/gulpserve.ts", + "serve:main": "pnpm run -C main serve", + "serve:main-antd": "pnpm run -C main-antd serve", + "serve:system": "pnpm run serve -C packages/system", + "serve:article": "pnpm run serve -C packages/article", + "serve:links": "pnpm run serve -C packages/links", + "clean": "pnpm run clean:dist -r --stream", + "clean:dist": "rimraf dist", + "build": "set NODE_ENV=production&&gulp --require sucrase/register/ts -f scripts/gulpbuild.ts", + "build:main": "pnpm run -C main build", + "build:main-antd": "pnpm run -C main-antd build", + "build:system": "pnpm run build -C packages/system", + "build:article": "pnpm run build -C packages/article", + "build:links": "pnpm run build -C packages/links", + "preinstall": "npx only-allow pnpm -y" + }, + "peerDependencies": { + "qiankun": "^2.6.3" + }, + "dependencies": { + "qiankun": "^2.6.3" + }, + "devDependencies": { + "@types/fs-extra": "^9.0.13", + "@types/gulp": "^4.0.9", + "chalk": "4.1.2", + "dotenv": "^11.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^10.0.0", + "gulp": "^4.0.2", + "rimraf": "^3.0.2", + "sucrase": "^3.20.3", + "typescript": "^4.5.4" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/lqsong/admin-vue3-micro-qiankun.git" + }, + "keywords": [ + "vue3", + "micro-app", + "admin-element-vue", + "element-plus", + "admin-antd-vue", + "antdv", + "antd", + "admin", + "typescript", + "pnpm" + ], + "author": "LiQingSong<957698457@qq.com>", + "license": "MIT", + "bugs": { + "url": "https://github.com/lqsong/admin-vue3-micro-qiankun/issues" + }, + "homepage": "https://github.com/lqsong/admin-vue3-micro-qiankun#readme" + +} diff --git a/packages/article/.browserslistrc b/packages/article/.browserslistrc new file mode 100644 index 0000000..214388f --- /dev/null +++ b/packages/article/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/packages/article/.editorconfig b/packages/article/.editorconfig new file mode 100644 index 0000000..ed19d9c --- /dev/null +++ b/packages/article/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/packages/article/.env.development b/packages/article/.env.development new file mode 100644 index 0000000..6714d40 --- /dev/null +++ b/packages/article/.env.development @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'development' + +# devServer port +VUE_APP_PORT=8077 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = true + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/packages/article/.env.production b/packages/article/.env.production new file mode 100644 index 0000000..1b3cd14 --- /dev/null +++ b/packages/article/.env.production @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'production' + +# devServer port +VUE_APP_PORT=8077 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = false + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/packages/article/.eslintignore b/packages/article/.eslintignore new file mode 100644 index 0000000..87160f7 --- /dev/null +++ b/packages/article/.eslintignore @@ -0,0 +1 @@ +../scripts diff --git a/packages/article/.eslintrc.js b/packages/article/.eslintrc.js new file mode 100644 index 0000000..36d681f --- /dev/null +++ b/packages/article/.eslintrc.js @@ -0,0 +1,45 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/typescript/recommended' + ], + parserOptions: { + ecmaVersion: 2020 + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + '@typescript-eslint/no-explicit-any': ['off'], + '@typescript-eslint/no-unused-vars': ['off'], + '@typescript-eslint/ban-types': ['off'], + '@typescript-eslint/no-empty-interface': ['off'], + '@typescript-eslint/explicit-module-boundary-types': ['off'], + '@typescript-eslint/no-empty-function': ['off'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + }, + { + files: [ + './mock/*.{j,t}s?(x)', + './src/utils/mock/*.{j,t}s?(x)' + ], + rules: { + 'no-var': ['off'], + '@typescript-eslint/no-var-requires': ['off'], + } + } + ] +} diff --git a/packages/article/.gitignore b/packages/article/.gitignore new file mode 100644 index 0000000..5d55bb1 --- /dev/null +++ b/packages/article/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +yarn.lock + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/article/LICENSE b/packages/article/LICENSE new file mode 100644 index 0000000..0f21b74 --- /dev/null +++ b/packages/article/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 LiQingSong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/article/README.md b/packages/article/README.md new file mode 100644 index 0000000..b7b9eff --- /dev/null +++ b/packages/article/README.md @@ -0,0 +1,37 @@ +# packages/article + +packages/article 基于 admin-element-vue-typescript ([github](https://github.com/lqsong/admin-element-vue/tree/typescript.v2)、[gitee](https://gitee.com/lqsong/admin-element-vue/tree/typescript.v2))开发 + + +## 使用文档 + + - [http://admin-vue3-micro-qiankun.liqingsong.cc](http://admin-vue3-micro-qiankun.liqingsong.cc) + - [Github](https://github.com/lqsong/admin-vue3-micro-qiankun) + - [Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun) + +## admin-element-vue-typescript 使用文档 + + - [http://admin-element-vue.liqingsong.cc/tsv2/](http://admin-element-vue.liqingsong.cc/tsv2/) + - [Github](https://github.com/lqsong/admin-element-vue) + - [Gitee](https://gitee.com/lqsong/admin-element-vue) + + + +## 后台前端解决方案列表 + + - admin-element-vue([GitHub](https://github.com/lqsong/admin-element-vue)、[Gitee](https://gitee.com/lqsong/admin-element-vue)) + - admin-antd-vue([GitHub](https://github.com/lqsong/admin-antd-vue)、[Gitee](https://gitee.com/lqsong/admin-antd-vue)) + - admin-antd-react([GitHub](https://github.com/lqsong/admin-antd-react)、[Gitee](https://gitee.com/lqsong/admin-antd-react)) + - electron-admin-element-vue([GitHub](https://github.com/lqsong/electron-admin-element-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-element-vue)) + - electron-admin-antd-vue([GitHub](https://github.com/lqsong/electron-admin-antd-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-vue)) + - admin-vue3-micro-qiankun([GitHub](https://github.com/lqsong/admin-vue3-micro-qiankun)、[Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun)) + + +## 捐赠 + +如果你觉得这个项目帮助到了你,请帮助点击 Star,你也可以请作者喝咖啡表示鼓励. + +**ALIPAY** | **WECHAT** +:-------------------------:|:-------------------------: +![Alipay](http://uploads.liqingsong.cc/20210430/f62d2436-8d92-407d-977f-35f1e4b891fc.png) | ![Wechat](http://uploads.liqingsong.cc/20210430/3e24efa9-8e79-4606-9bd9-8215ce1235ac.png) + diff --git a/packages/article/babel.config.js b/packages/article/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/packages/article/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/packages/article/jest.config.js b/packages/article/jest.config.js new file mode 100644 index 0000000..d7f13cc --- /dev/null +++ b/packages/article/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel', + transform: { + '^.+\\.vue$': 'vue-jest' + } +} diff --git a/packages/article/mock/global.js b/packages/article/mock/global.js new file mode 100644 index 0000000..48dfcda --- /dev/null +++ b/packages/article/mock/global.js @@ -0,0 +1,39 @@ +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`POST ${VUE_APP_APIHOST || ''}/uploads`] = (req, res) => { + res.send({ + code: 0, + data: { + id: 1, + url: + 'http://uploads.liqingsong.cc/20200531/583057e8-8bab-4eee-b5a0-bec915089c0c.jpg', + name: 'xcx.jpg', + }, + msg: '', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/500`] = (req, res) => { + res.status(500).send({ + timestamp: 1513932555104, + status: 500, + error: 'error', + message: 'error', + path: '/500', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/404`] = (req, res) => { + res.status(404).send({ + timestamp: 1513932643431, + status: 404, + error: 'Not Found', + message: 'No message available', + path: '/404', + }); +}; + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/packages/article/mock/home.js b/packages/article/mock/home.js new file mode 100644 index 0000000..0df8898 --- /dev/null +++ b/packages/article/mock/home.js @@ -0,0 +1,44 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles/dailynew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + day: mockjs.mock('@float(-10,15,0,2)'), + week: mockjs.mock('@float(-10,15,0,2)'), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + category: { + id: '@integer(1)', + alias: '@word(4)', + name: '@cword(4)', + }, + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + + +module.exports = { + ...mock +}; diff --git a/packages/article/mock/user.js b/packages/article/mock/user.js new file mode 100644 index 0000000..45bf6fc --- /dev/null +++ b/packages/article/mock/user.js @@ -0,0 +1,89 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const ajaxHeadersTokenKey = 'x-token'; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST}/user/info`] = (req, res) => { + const headers = req.headers; + if (headers[ajaxHeadersTokenKey] === 'admin') { + res.send({ + code: 0, + data: { + id: 1, + name: 'Admins', + avatar: '', + roles: ['admin'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'user') { + res.send({ + code: 0, + data: { + id: 2, + name: 'Users', + avatar: '', + roles: ['user'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'test') { + res.send({ + code: 0, + data: { + id: 3, + name: 'Tests', + avatar: '', + roles: ['test'], + }, + }); + } else { + res.send({ + code: 10002, + data: {}, + msg: '未登录', + }); + } + +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/user/message`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock('@integer(0,99)'), + }); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/login`] = (req, res) => { + const { password, username } = req.body; + const send = { code: 0, data: {}, msg: '' }; + if (username === 'admin' && password === '123456') { + send['data'] = { + token: 'admin', + }; + } else if (username === 'user' && password === '123456') { + send['data'] = { + token: 'user', + }; + } else if (username === 'test' && password === '123456') { + send['data'] = { + token: 'test', + }; + } else { + send['code'] = 201; + send['msg'] = 'Wrong username or password'; + } + + res.send(send); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/register`] = (req, res) => { + res.send({ + code: 0, + data: '', + msg: '', + }); +}; + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/packages/article/package.json b/packages/article/package.json new file mode 100644 index 0000000..cfb85d4 --- /dev/null +++ b/packages/article/package.json @@ -0,0 +1,83 @@ +{ + "name": "admin-vue3-micro-qiankun", + "description": "Micro front-end Admin based on Qiankun, vue3.x, admin-element-vue, admin-antd-vue project architecture", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint", + "svgo": "svgo -f src/assets/iconsvg --config=src/assets/iconsvg/svgo.yml" + }, + "dependencies": { + "@ckeditor/ckeditor5-build-decoupled-document": "^23.1.0", + "@ckeditor/ckeditor5-vue": "^2.0.1", + "@toast-ui/editor": "^2.5.3", + "axios": "^0.21.4", + "core-js": "^3.19.1", + "echarts": "^4.9.0", + "element-plus": "^1.2.0-beta.4", + "localforage": "^1.10.0", + "lodash.debounce": "^4.0.8", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "path-to-regexp": "^6.2.0", + "vue": "^3.2.23", + "vue-i18n": "^9.1.9", + "vue-router": "^4.0.12", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@types/echarts": "^4.9.12", + "@types/jest": "^24.9.1", + "@types/lodash.debounce": "^4.0.6", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", + "@vue/cli-plugin-babel": "~4.5.15", + "@vue/cli-plugin-eslint": "~4.5.15", + "@vue/cli-plugin-router": "~4.5.15", + "@vue/cli-plugin-typescript": "~4.5.15", + "@vue/cli-plugin-unit-jest": "~4.5.15", + "@vue/cli-plugin-vuex": "~4.5.15", + "@vue/cli-service": "~4.5.15", + "@vue/compiler-sfc": "^3.2.23", + "@vue/eslint-config-typescript": "^7.0.0", + "@vue/test-utils": "^2.0.0-rc.17", + "body-parser": "^1.19.0", + "chokidar": "^3.5.2", + "eslint": "^6.8.0", + "eslint-plugin-vue": "^7.20.0", + "lint-staged": "^9.5.0", + "mockjs": "^1.1.0", + "node-dir": "^0.1.17", + "node-sass": "^4.14.1", + "sass": "^1.43.5", + "sass-loader": "^8.0.2", + "svg-sprite-loader": "^5.2.1", + "svgo": "^1.3.2", + "svgo-loader": "^2.2.2", + "typescript": "~4.1.6", + "vue-jest": "^5.0.0-alpha.10" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "keywords": [ + "vue", + "vue3", + "vue3.0", + "vue3.x", + "typescript", + "admin", + "template", + "element-ui", + "element Plus" + ], + "lint-staged": { + "*.{js,jsx,vue,ts,tsx}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/packages/article/public/favicon.ico b/packages/article/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3827b09c79035443036c7679a50b6b1b0fc08a8 GIT binary patch literal 4286 zcmb`Ldr(!^6^Bozl4d3`slj&?l!qFl;v8oQG!+Ue z@5d#IQ4q0X#0T0D6_kfyB_pjG+jLs7{UeNYCetx(IvFN1;`#O4=Ws9g!u`Y89_C}M zv-eu-xAs2!+{<8D_wh4kjAedXmEW+ep_XM$0EVpDV8)$`xvzRDBh-TXVG1NcwbDb| zpcB-C@!Om^H^#)8oUbb9i`Uk{7KFe|DAU%^4(fG-f-~4VZelu!H#sx4EtDE}--ouN zyA8Gv4#RrjGtfO^a!n0W%hdF(FPNiDVzP%?*jQ*KURXKS`1ek0Pfb%hm^8XW+;wLU znXjxN?V$e9LpJ+w$inxM-FG}#u2XY9&&JX6Z$i1OIS2jRA+gwYP(N~w-bg8Js+9Pm z?6s?4bq}kgw|^|9GG}6Phz(Z5t!*^WGH;1{DIfj(q2bCKdJz-|z2ps}_S3RgC&*s> zp6rEtWiO}*WMMgTJ7lkVo7iWhTypYEZr^&2MmXb+xC)0^DjGHb>rnwYKFBLHxuaOy zBH2p|WG~ty`<2~+EaKh=^DmdlUQ#3_yyE5-P@_Md9!*Og^gY97!A(#A1*6ekf_5=A zS=$oU-h;5WmX{s(3 z-(@-0p+H)eul<{9wLhg6pS@XL=&}s!P~=!`{JB(2?f#T%$M6u9jEK?B;Wy|*SeFud z&7Q&Y-XeQtCT#D)_*v4*bhWR`RLs7AI<&_#wjx9JiX6!94||ohSK-`v>C8!58mSM%~-|MF0mJ*pFJB5YL~IrUfNXgSSKie z%NmXKeaU%VcFJo~%Bxrd&u`;geZDzN3#%G5q*)pU8GG}TzPCU_ zo20?qFJR8ZD0v>|htJ1%ehG21llgqi`W`yy_tpA7stv@|0(>0zb{;FWU0hbqaC-Vo&Id)XhA4!o{ zr6sk^?mj0DM1P>;o3RMyqpon&s;YEn+mEEJUS8zf&p-oxqjk7P?=afO!mB|692_U* z({Jt^zQ<rA2Ae*%Nx=uhK+FXgsGc3+M9OS;wxYB~#O1!)P8yyLxO4+yM1LFGtve9n*C3 z*cLr?y-Sn-F3tP+Q(ddzTzaOnKU3J~2`of=yT>PuJU6csg=Yvtw34hK&2*$vh>IQPt(KOm;pf+NF&PIAbf%Noqgz<7HiwZ(CV}6w4?}fv} zn)RH8GyU+OKY)4nZ=kwJOLdXqs*k(~3d$+Q53!H?d4~I-JO~xcSE6NN>w4;Vt*LAL zIy8(Hn%+wd=r=+`WULya+Cf2SAm6O%1Ugmd`(wsxnKv>1`3-)x8Y0^r4Wn1zt8ebR#kyJF-CpFGK0rIyRwN(CfV6g7-^5!>D>l12v>l-bjX|(?fYdNLH literal 0 HcmV?d00001 diff --git a/packages/article/public/index.html b/packages/article/public/index.html new file mode 100644 index 0000000..4123528 --- /dev/null +++ b/packages/article/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/packages/article/src/App.vue b/packages/article/src/App.vue new file mode 100644 index 0000000..02a9d46 --- /dev/null +++ b/packages/article/src/App.vue @@ -0,0 +1,12 @@ + + diff --git a/packages/article/src/assets/css/element-variables.scss b/packages/article/src/assets/css/element-variables.scss new file mode 100644 index 0000000..0b0ed46 --- /dev/null +++ b/packages/article/src/assets/css/element-variables.scss @@ -0,0 +1,60 @@ +/* 只需要重写你需要的即可 */ +@forward "element-plus/theme-chalk/src/common/var.scss" with ( + $colors: ( + "primary": ( + "base": #409eff, + ), + ), +); + +// 导入所有样式: +@use "element-plus/theme-chalk/src/index.scss" as *; + +.el-menu { + .el-menu-item { + .icon { + margin-right: 5px; + } + } +} + +/* 重置 Drawer */ +.el-drawer { + .el-drawer__header { + padding: 15px 20px; + margin-bottom: 0; + border-bottom: 1px solid #f0f0f0; + span, + button { + outline: none; + } + } +} + +/* 重置 card */ +.cus-card { + .el-card { + border: 0; + } +} + +/*自定义 table 样式*/ +.custom-table { + .el-table__header { + background-color: #F5F7FA !important; + } + .custom-td-header-one, + .el-table__body tr:hover .custom-td-header-one { + color: #303133; + font-weight: bold; + background-color: #F5F7FA !important; + } +} +.custom-table-header { + color: #303133; + th { + background-color: #F5F7FA !important; + } +} + + diff --git a/packages/article/src/assets/css/global.scss b/packages/article/src/assets/css/global.scss new file mode 100644 index 0000000..c566dbb --- /dev/null +++ b/packages/article/src/assets/css/global.scss @@ -0,0 +1,75 @@ +@import './element-variables.scss'; +@import './variables.scss'; +@import './mixin.scss'; + +#nprogress .bar { + background: var(--el-color-primary) !important; +} + +.flex-wrap-wrap { + flex-wrap: wrap; +} + +a { + color: #1890ff; + text-decoration: none; + background-color: transparent; + outline: none; + cursor: pointer; + transition: color .3s; +} +a:active, +a:hover { + text-decoration: none; + outline: 0; +} +a:active { + color: #096dd9; +} +a:hover { + color: #40a9ff; +} + +.border-none { + border: none; +} +.border-solid-transparent{ + border: solid 1px transparent; +} + +.text-align-right { + text-align: right; +} + +.float-right { + float: right; +} + + +.cursor-pointer { + cursor: pointer; +} + +.padding-t10 { + padding-top: 10px; +} + +.margin-l5{ + margin-left: 5px; +} +.margin-l10 { + margin-left: 10px; +} +.margin-t24 { + margin-top: 24px; +} +.margin-r5 { + margin-right: 5px; +} + +.width-200 { + width: 200px !important; +} +.width-percent100 { + width: 100% !important; +} diff --git a/packages/article/src/assets/css/mixin.scss b/packages/article/src/assets/css/mixin.scss new file mode 100644 index 0000000..5c9b66d --- /dev/null +++ b/packages/article/src/assets/css/mixin.scss @@ -0,0 +1,30 @@ +@mixin scrollbar( + $thumb-background: hsla(0,0%,100%,.2), + $thumb-shadow: hsla(0,0%,100%,.05), + $track-background:hsla(0,0%,100%,.15), + $track-shadow: rgba(37,37,37,.05) + ) { + ::-webkit-scrollbar { + width: 6px; + height: 6px; + } + ::-webkit-scrollbar-thumb { + background: $thumb-background; + border-radius: 3px; + box-shadow: inset 0 0 5px $thumb-shadow; + } + ::-webkit-scrollbar-track { + background: $track-background; + border-radius: 3px; + box-shadow: inset 0 0 5px $track-shadow; + } +} + +@mixin scrollbar-light { + @include scrollbar( + hsla(0,0%,0%,.2), hsla(0,0%,0%,.05), + hsla(0,0%,0%,.15), rgba(255,255,255,.05) + ) +} + + diff --git a/packages/article/src/assets/css/variables.scss b/packages/article/src/assets/css/variables.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/packages/article/src/assets/css/variables.scss @@ -0,0 +1 @@ + diff --git a/packages/article/src/assets/iconsvg/home.svg b/packages/article/src/assets/iconsvg/home.svg new file mode 100644 index 0000000..d0c28bf --- /dev/null +++ b/packages/article/src/assets/iconsvg/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/article/src/assets/iconsvg/plus.svg b/packages/article/src/assets/iconsvg/plus.svg new file mode 100644 index 0000000..f324c3f --- /dev/null +++ b/packages/article/src/assets/iconsvg/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/article/src/assets/iconsvg/svgo.yml b/packages/article/src/assets/iconsvg/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/packages/article/src/assets/iconsvg/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/packages/article/src/assets/images/bg.svg b/packages/article/src/assets/images/bg.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/packages/article/src/assets/images/bg.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/article/src/assets/images/logo.png b/packages/article/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..37ff91e08195b41a4f603aa7a26314a42a8873a2 GIT binary patch literal 3294 zcmaJ^YdDl^7k&pJ29fNc)EEk7%y}{sVT@r!IaO3LXC~%gX5?5x4oOHwL?n_@lt@jY zNJ>f3k+!6RQnAai!F;1#`}=wVVq-uJrKTF+WPo_(I{U9>ceGynk5qPmj3 z72l+rfsVjW8&eWe3}g^FVqCo!G%# z*Ju&jCwjdvGdhGxV8QIyLTw|73I{y4gbt15h4RJ3NITdMzeL4)ZW{rE{(wkA>|lQf z<>%oEbrOi!P@FXm&P1ZH(A5NM6b^;8L0Li3NE8Nv#2`=@I0{Wf5{M`q^ydRpsEJq{ zqBoiHQ%hml!Ga|cArXOyh={O`z*q}JK?oFqKtLeT2s9e5K)}UOdbJ>E<~WLkq91dF0UVGvBaDG z-!OiQ7W+mC*$8j8SP(8^D$avr`ircn-Mkl3V1>0_Tw+Kq=L0p2gjkR$+F(ePVlK z5x6LCb{BK@L8yvnxJ8+N%-dVIrscB;W(~xAwsUiUcvSpKfP_Pe&H93WBScu)`I3x?b084Q3{2(ku3zy>ee5C0QD12-!O&#~gl+MyJLxC+}Fi(7N<`*@79) zpo-BJRot|eDJIck0R~W6@JuV+K^k8mEN%%cZfKXwnXYQdn#%X$9g0XxZnuC+;~b6E zM&HQ)=-abCPFxT_u~fPFwhtKmE)ap9mVv+yv|yx75u0|DMY}H?Gg5AD2Pnx^xnqWV zPP8|TzSmSvd?b^DZGC1@(_aS|uL`CL9lvOGE^Z2@eb?-cqNW}^G2RuItdnVG_+tA- z%rjdRw^$C11~O`o%uDRIx7bd;{E}{C*4`#0X%03B!256Po<~?bI4yrAR3RSMg=nW& zf~x?fP7l>{3!J@{$OAI-Op?7@txmCA@CFPf^CWhi+kMr*cpV0!47}rd!dERbDfPZ5 zBYy=8Ya2E2y=a26iC;*(95HMs|F%Xx(c=d8YxrWZ=8gQZ!6mOg5B$s%=_aaI-Rv&6 zu-s~7+9u0)n2OlFm6&;Jb!l2Wi@Sj)?!8TXS^D=K`LeB%6*sqPt*nXZHjo7eI+$s2 zTrr1N6-4VYEjq!uXVE2;@DInfRlN^WBh~ps?K&C#W-N~1qQdvF9S704m)eWwX*D3_ z>QRQmvqzeZ*9ANbdkkS#Eb*Qmb+?PjH*^^}^YQ9{NQSBwI6Zmzz&m^Nh}wfgwj;X4 zi-sFYO}p~fh22N-vlmWq7WRytmqDBbXO)NJb(3zSHtGn?vU+l+)g4@>_O?MSt`ona@-S`Yz>^bg|kPkzw0H4+lV_sryf0AQpOMU}J@8AR?OT}X| z=s?ATYAp=C+Dg?X84T7A(AqwCwtOls^L*W(-XSHwt<=%KSLcG0t<2|dK2UDn zUKTEz)H}Rr)P4;@dcPT{k3iL3>70&f}meG3fbo2`F-HR#S&r8gr9qK~5ZU!v( z+WU}n&dS%Km#ke1hm{&s_^azprfx^4RdFwc%{C7A%H#v-nYRjKzHqY zhNjNyK32t$=Al!Rj<<*4XCM=xjwo6)+&$g3y4zBFK~Cc{)o)ttS-k{i=z-@ntFxZU z*600V!(w{f?Or@jO3O0zAx^sM9CTj0!*J-dj%(A2I$w91Rbg<;Py#RW0OUEW50Pt} zy|*$N@S)a+>aW#+=5f|6ZqlHaD9<$e%uZ{+TK36&pqkRk2Hg$w%9u?#m8GBO*%prsZ;CcgFi+L2F$HPl zoG-hwDq&P_@sz4;@M(26n*&Y31qp$M6{0|+@Xq3!(U1N8a!?wM_B0Fa`=pU$B@J)x z#-?adC9kGpzQ&DZHJ7;`rJSg3EIu}E9zi|lLK*iw*qDed2)}XtL};n~_>P*eoTnJD z{#GMYy&25pn~-ZXDGYc9U0t~y4BT3q(R^cfBEEnA?L!*@cJbKjuN>RWZ;|=gVkfe9cn7 zJJt+lJuuj=LMy>D6B!Fi*Rkxd8T3xZ{d?6%Ixk)9Dc)EgeDnOf_`=iD)Z`FDtpN5!Qk5CXb^}Zf3*u&G=*?o6z8gAmPQ=g-h!)@^+Bs;zL zJi62f84S5&P-ofu%0MM8=-ijw{>d1LY1xX!=v#i-h5lM=dGp}5E1~;F_g&5F(n#7d zvUT}3+(T?`_{lL)RyozL9k)^U(Q9@6w!~pm(*2~Q>}Ha&_{=hu{%dUuyK~Mmk}9xz zDV-A4l;f_(CACkd*PM=ne0#j_lE|o1x4Yh*JaQwARr5k?xyAObhvi7Sltpf2<1?&l zt(OtwMm>7KP%{-oxdL$VSUdL#B{%!llLe|ag@&n`+xWKc2;0}?dBu28@(-gW6$yfV z+S;$$QTnu`DdhzCK&T}_*uyxZdxNBR Sk6`I@Hx8=vdh&S^E#W`Ve3I4x literal 0 HcmV?d00001 diff --git a/packages/article/src/components/ALink/index.vue b/packages/article/src/components/ALink/index.vue new file mode 100644 index 0000000..7ec5470 --- /dev/null +++ b/packages/article/src/components/ALink/index.vue @@ -0,0 +1,55 @@ + + diff --git a/packages/article/src/components/CKEditor/index.vue b/packages/article/src/components/CKEditor/index.vue new file mode 100644 index 0000000..827e461 --- /dev/null +++ b/packages/article/src/components/CKEditor/index.vue @@ -0,0 +1,192 @@ + + + \ No newline at end of file diff --git a/packages/article/src/components/Custom/ArticleCategoryCascader/index.vue b/packages/article/src/components/Custom/ArticleCategoryCascader/index.vue new file mode 100644 index 0000000..d77c88e --- /dev/null +++ b/packages/article/src/components/Custom/ArticleCategoryCascader/index.vue @@ -0,0 +1,136 @@ + + + diff --git a/packages/article/src/components/Custom/ArticleCategoryCascader/service.ts b/packages/article/src/components/Custom/ArticleCategoryCascader/service.ts new file mode 100644 index 0000000..ad0ddd5 --- /dev/null +++ b/packages/article/src/components/Custom/ArticleCategoryCascader/service.ts @@ -0,0 +1,13 @@ +import request from '@/utils/request'; + +export async function queryList(pid: number): Promise { + return request({ + url: '/article/categorys/cascader', + method: 'get', + params: { + pid + } + }); +} + + diff --git a/packages/article/src/components/Custom/ArticleListDrawer/data.d.ts b/packages/article/src/components/Custom/ArticleListDrawer/data.d.ts new file mode 100644 index 0000000..76ffe12 --- /dev/null +++ b/packages/article/src/components/Custom/ArticleListDrawer/data.d.ts @@ -0,0 +1,5 @@ +export interface TableListQueryParams { + keywords: string; + page: number; + per: number; +} \ No newline at end of file diff --git a/packages/article/src/components/Custom/ArticleListDrawer/index.vue b/packages/article/src/components/Custom/ArticleListDrawer/index.vue new file mode 100644 index 0000000..07704b2 --- /dev/null +++ b/packages/article/src/components/Custom/ArticleListDrawer/index.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/packages/article/src/components/Custom/ArticleListDrawer/locales/en-US.ts b/packages/article/src/components/Custom/ArticleListDrawer/locales/en-US.ts new file mode 100644 index 0000000..bcdcd3a --- /dev/null +++ b/packages/article/src/components/Custom/ArticleListDrawer/locales/en-US.ts @@ -0,0 +1,11 @@ +export default { + 'components.custom.articlelistdrawer.form.title': 'Title:', + 'components.custom.articlelistdrawer.form.title.placeholder': 'Please enter a title', + 'components.custom.articlelistdrawer.form.btn.search': 'Search', + + 'components.custom.articlelistdrawer.table.column.index': 'Order', + 'components.custom.articlelistdrawer.table.column.title': 'Title', + 'components.custom.articlelistdrawer.table.column.category': 'Category', + 'components.custom.articlelistdrawer.table.column.addtime': 'Release time', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ArticleListDrawer/locales/zh-CN.ts b/packages/article/src/components/Custom/ArticleListDrawer/locales/zh-CN.ts new file mode 100644 index 0000000..2b737f9 --- /dev/null +++ b/packages/article/src/components/Custom/ArticleListDrawer/locales/zh-CN.ts @@ -0,0 +1,11 @@ +export default { + 'components.custom.articlelistdrawer.form.title': '标题:', + 'components.custom.articlelistdrawer.form.title.placeholder': '请输入标题', + 'components.custom.articlelistdrawer.form.btn.search': '搜索', + + 'components.custom.articlelistdrawer.table.column.index': '序号', + 'components.custom.articlelistdrawer.table.column.title': '标题', + 'components.custom.articlelistdrawer.table.column.category': '分类', + 'components.custom.articlelistdrawer.table.column.addtime': '发布时间', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ArticleListDrawer/locales/zh-TW.ts b/packages/article/src/components/Custom/ArticleListDrawer/locales/zh-TW.ts new file mode 100644 index 0000000..ed60256 --- /dev/null +++ b/packages/article/src/components/Custom/ArticleListDrawer/locales/zh-TW.ts @@ -0,0 +1,11 @@ +export default { + 'components.custom.articlelistdrawer.form.title': '標題:', + 'components.custom.articlelistdrawer.form.title.placeholder': '請輸入標題', + 'components.custom.articlelistdrawer.form.btn.search': '搜索', + + 'components.custom.articlelistdrawer.table.column.index': '序號', + 'components.custom.articlelistdrawer.table.column.title': '標題', + 'components.custom.articlelistdrawer.table.column.category': '分類', + 'components.custom.articlelistdrawer.table.column.addtime': '發布時間', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ArticleListDrawer/service.ts b/packages/article/src/components/Custom/ArticleListDrawer/service.ts new file mode 100644 index 0000000..453ed66 --- /dev/null +++ b/packages/article/src/components/Custom/ArticleListDrawer/service.ts @@ -0,0 +1,12 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from "./data.d"; + +export async function queryList(params: TableListQueryParams): Promise { + return request({ + url: '/articles', + method: 'get', + params + }); +} + + diff --git a/packages/article/src/components/Custom/FormFooterToolbar/index.vue b/packages/article/src/components/Custom/FormFooterToolbar/index.vue new file mode 100644 index 0000000..d3b0b04 --- /dev/null +++ b/packages/article/src/components/Custom/FormFooterToolbar/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/article/src/components/Custom/PageHeader/index.vue b/packages/article/src/components/Custom/PageHeader/index.vue new file mode 100644 index 0000000..555f485 --- /dev/null +++ b/packages/article/src/components/Custom/PageHeader/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/packages/article/src/components/Custom/ServerImage/Dialog/data.d.ts b/packages/article/src/components/Custom/ServerImage/Dialog/data.d.ts new file mode 100644 index 0000000..0ed72d4 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/Dialog/data.d.ts @@ -0,0 +1,25 @@ +export interface TableListQueryParams { + page: number; + per: number; +} + +export interface ExternalLink { + visible: boolean; + ruleForm: { + url: string; + }; + rules: any; + insertUrl: () => Promise; +} + +export interface TableData { + tableIndexMethod: (index: number) => any; + loading: boolean; + list: any; + pagination: { + total: number; + current: number; + pageSize: number; + onChange: (page: number) => void; + }; +} \ No newline at end of file diff --git a/packages/article/src/components/Custom/ServerImage/Dialog/index.vue b/packages/article/src/components/Custom/ServerImage/Dialog/index.vue new file mode 100644 index 0000000..31869ab --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/Dialog/index.vue @@ -0,0 +1,315 @@ + + + diff --git a/packages/article/src/components/Custom/ServerImage/Dialog/locales/en-US.ts b/packages/article/src/components/Custom/ServerImage/Dialog/locales/en-US.ts new file mode 100644 index 0000000..7cffc89 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/Dialog/locales/en-US.ts @@ -0,0 +1,19 @@ +export default { + 'components.custom.serverimage.dialog.props.title': 'Picture list', + 'components.custom.serverimage.dialog.form.url': 'Picture url', + 'components.custom.serverimage.dialog.form.url.required': 'Please enter the external link picture address', + 'components.custom.serverimage.dialog.form.url.external': 'The external link picture address is incorrect', + 'components.custom.serverimage.dialog.form.btn.submit': 'Confirm', + 'components.custom.serverimage.dialog.form.btn.cancel': 'Cancel', + 'components.custom.serverimage.dialog.form.btn.link': 'Img Url', + 'components.custom.serverimage.dialog.form.btn.upload': 'Upload', + + 'components.custom.serverimage.dialog.upload.type.external': 'Upload pictures can only be in {str} format!', + 'components.custom.serverimage.dialog.upload.num.external': 'Upload image size cannot exceed {num}M!', + 'components.custom.serverimage.dialog.upload.error': 'File upload failed:', + + 'components.custom.serverimage.dialog.table.column.index': 'Order', + 'components.custom.serverimage.dialog.table.column.imgurl': 'Picture', + 'components.custom.serverimage.dialog.table.column.size': 'Size', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts b/packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts new file mode 100644 index 0000000..b6fa1e8 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts @@ -0,0 +1,19 @@ +export default { + 'components.custom.serverimage.dialog.props.title': '图片列表', + 'components.custom.serverimage.dialog.form.url': '图片地址', + 'components.custom.serverimage.dialog.form.url.required': '请输入外链图片地址', + 'components.custom.serverimage.dialog.form.url.external': '外链图片地址不正确', + 'components.custom.serverimage.dialog.form.btn.submit': '确认', + 'components.custom.serverimage.dialog.form.btn.cancel': '取消', + 'components.custom.serverimage.dialog.form.btn.link': '外链', + 'components.custom.serverimage.dialog.form.btn.upload': '上传', + + 'components.custom.serverimage.dialog.upload.type.external': '上传图片只能是 {str} 格式!', + 'components.custom.serverimage.dialog.upload.num.external': '上传图片大小不能超过 {num}M!', + 'components.custom.serverimage.dialog.upload.error': '文件上传失败:', + + 'components.custom.serverimage.dialog.table.column.index': '序号', + 'components.custom.serverimage.dialog.table.column.imgurl': '图片', + 'components.custom.serverimage.dialog.table.column.size': '大小', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts b/packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts new file mode 100644 index 0000000..7d6edbe --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts @@ -0,0 +1,19 @@ +export default { + 'components.custom.serverimage.dialog.props.title': '圖片列表', + 'components.custom.serverimage.dialog.form.url': '圖片地址', + 'components.custom.serverimage.dialog.form.url.required': '請輸入外鏈圖片地址', + 'components.custom.serverimage.dialog.form.url.external': '外鏈圖片地址不正確', + 'components.custom.serverimage.dialog.form.btn.submit': '確認', + 'components.custom.serverimage.dialog.form.btn.cancel': '取消', + 'components.custom.serverimage.dialog.form.btn.link': '外鏈', + 'components.custom.serverimage.dialog.form.btn.upload': '上傳', + + 'components.custom.serverimage.dialog.upload.type.external': '上傳圖片只能是 {str} 格式!', + 'components.custom.serverimage.dialog.upload.num.external': '上傳圖片大小不能超過 {num}M!', + 'components.custom.serverimage.dialog.upload.error': '文件上傳失敗:', + + 'components.custom.serverimage.dialog.table.column.index': '序號', + 'components.custom.serverimage.dialog.table.column.imgurl': '圖片', + 'components.custom.serverimage.dialog.table.column.size': '大小', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ServerImage/Dialog/service.ts b/packages/article/src/components/Custom/ServerImage/Dialog/service.ts new file mode 100644 index 0000000..d4916c5 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/Dialog/service.ts @@ -0,0 +1,14 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from "./data.d"; + +export const uploadUrl: string = process.env.VUE_APP_APIHOST + '/upload/images'; + +export async function queryList(params: TableListQueryParams): Promise { + return request({ + url: '/upload/images', + method: 'get', + params + }); +} + + diff --git a/packages/article/src/components/Custom/ServerImage/SelectionList/data.d.ts b/packages/article/src/components/Custom/ServerImage/SelectionList/data.d.ts new file mode 100644 index 0000000..f71c5d2 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/SelectionList/data.d.ts @@ -0,0 +1,4 @@ +export interface ListItem { + imgurl: string; + size: string; +} \ No newline at end of file diff --git a/packages/article/src/components/Custom/ServerImage/SelectionList/index.vue b/packages/article/src/components/Custom/ServerImage/SelectionList/index.vue new file mode 100644 index 0000000..2e1f7d0 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/SelectionList/index.vue @@ -0,0 +1,160 @@ + + + diff --git a/packages/article/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts b/packages/article/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts new file mode 100644 index 0000000..47a21d3 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts @@ -0,0 +1,8 @@ +export default { + 'components.custom.serverimage.selectionlist.dialog.title': 'Select Image', + 'components.custom.serverimage.selectionlist.dialog.table.column.action': 'Action', + 'components.custom.serverimage.selectionlist.dialog.table.btn.choose': 'Choose', + + 'components.custom.serverimage.selectionlist.choose.img.external': 'Select at most {num} pictures!', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts b/packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts new file mode 100644 index 0000000..ad189a9 --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts @@ -0,0 +1,8 @@ +export default { + 'components.custom.serverimage.selectionlist.dialog.title': '选择图片', + 'components.custom.serverimage.selectionlist.dialog.table.column.action': '操作', + 'components.custom.serverimage.selectionlist.dialog.table.btn.choose': '选择', + + 'components.custom.serverimage.selectionlist.choose.img.external': '最多选择 {num} 张图片!', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts b/packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts new file mode 100644 index 0000000..b5b016e --- /dev/null +++ b/packages/article/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts @@ -0,0 +1,8 @@ +export default { + 'components.custom.serverimage.selectionlist.dialog.title': '選擇圖片', + 'components.custom.serverimage.selectionlist.dialog.table.column.action': '操作', + 'components.custom.serverimage.selectionlist.dialog.table.btn.choose': '選擇', + + 'components.custom.serverimage.selectionlist.choose.img.external': '最多選擇 {num} 張圖片!', + +}; \ No newline at end of file diff --git a/packages/article/src/components/Custom/TagSelect/data.d.ts b/packages/article/src/components/Custom/TagSelect/data.d.ts new file mode 100644 index 0000000..dc3b506 --- /dev/null +++ b/packages/article/src/components/Custom/TagSelect/data.d.ts @@ -0,0 +1,4 @@ +export interface OptionItem { + value: string; + label: string; +} \ No newline at end of file diff --git a/packages/article/src/components/Custom/TagSelect/index.vue b/packages/article/src/components/Custom/TagSelect/index.vue new file mode 100644 index 0000000..7845111 --- /dev/null +++ b/packages/article/src/components/Custom/TagSelect/index.vue @@ -0,0 +1,113 @@ + + + diff --git a/packages/article/src/components/Custom/TagSelect/service.ts b/packages/article/src/components/Custom/TagSelect/service.ts new file mode 100644 index 0000000..c76c1df --- /dev/null +++ b/packages/article/src/components/Custom/TagSelect/service.ts @@ -0,0 +1,13 @@ +import request from '@/utils/request'; + +export async function queryList(keywords: string): Promise { + return request({ + url: '/tags/search', + method: 'get', + params: { + keywords + } + }); +} + + diff --git a/packages/article/src/components/IconFont/index.ts b/packages/article/src/components/IconFont/index.ts new file mode 100644 index 0000000..dc31de9 --- /dev/null +++ b/packages/article/src/components/IconFont/index.ts @@ -0,0 +1,3 @@ +import IconFont from './index.vue'; + +export default IconFont; \ No newline at end of file diff --git a/packages/article/src/components/IconFont/index.vue b/packages/article/src/components/IconFont/index.vue new file mode 100644 index 0000000..e3910b3 --- /dev/null +++ b/packages/article/src/components/IconFont/index.vue @@ -0,0 +1,69 @@ + + + \ No newline at end of file diff --git a/packages/article/src/components/IconSvg/index.ts b/packages/article/src/components/IconSvg/index.ts new file mode 100644 index 0000000..a7592d9 --- /dev/null +++ b/packages/article/src/components/IconSvg/index.ts @@ -0,0 +1,17 @@ +import iconsvg from "./index.vue"; + +/** + * 自动导入 @/assets/iconsvg 下svg文件 + * @author LiQingSong + */ +export function importAllSvg (): void { + try { + const requireContext: __WebpackModuleApi.RequireContext = require.context('../../assets/iconsvg', false, /\.svg$/); + requireContext.keys().forEach(requireContext); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } +} + +export default iconsvg; \ No newline at end of file diff --git a/packages/article/src/components/IconSvg/index.vue b/packages/article/src/components/IconSvg/index.vue new file mode 100644 index 0000000..3a65ffc --- /dev/null +++ b/packages/article/src/components/IconSvg/index.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/packages/article/src/components/Permission/index.vue b/packages/article/src/components/Permission/index.vue new file mode 100644 index 0000000..ccaa352 --- /dev/null +++ b/packages/article/src/components/Permission/index.vue @@ -0,0 +1,50 @@ + + \ No newline at end of file diff --git a/packages/article/src/components/RestElDrawer/index.vue b/packages/article/src/components/RestElDrawer/index.vue new file mode 100644 index 0000000..53cd416 --- /dev/null +++ b/packages/article/src/components/RestElDrawer/index.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/packages/article/src/components/Result/index.vue b/packages/article/src/components/Result/index.vue new file mode 100644 index 0000000..35a45b7 --- /dev/null +++ b/packages/article/src/components/Result/index.vue @@ -0,0 +1,108 @@ + + + \ No newline at end of file diff --git a/packages/article/src/components/Result/svg/error.vue b/packages/article/src/components/Result/svg/error.vue new file mode 100644 index 0000000..d8560cf --- /dev/null +++ b/packages/article/src/components/Result/svg/error.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/components/Result/svg/info.vue b/packages/article/src/components/Result/svg/info.vue new file mode 100644 index 0000000..883da9e --- /dev/null +++ b/packages/article/src/components/Result/svg/info.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/components/Result/svg/noFound.vue b/packages/article/src/components/Result/svg/noFound.vue new file mode 100644 index 0000000..5bb6b70 --- /dev/null +++ b/packages/article/src/components/Result/svg/noFound.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/components/Result/svg/serverError.vue b/packages/article/src/components/Result/svg/serverError.vue new file mode 100644 index 0000000..49bed99 --- /dev/null +++ b/packages/article/src/components/Result/svg/serverError.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/components/Result/svg/success.vue b/packages/article/src/components/Result/svg/success.vue new file mode 100644 index 0000000..e51e879 --- /dev/null +++ b/packages/article/src/components/Result/svg/success.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/components/Result/svg/unauthorized.vue b/packages/article/src/components/Result/svg/unauthorized.vue new file mode 100644 index 0000000..c56ad10 --- /dev/null +++ b/packages/article/src/components/Result/svg/unauthorized.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/components/Result/svg/warning.vue b/packages/article/src/components/Result/svg/warning.vue new file mode 100644 index 0000000..7a5b679 --- /dev/null +++ b/packages/article/src/components/Result/svg/warning.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/components/ScreenTable/data.d.ts b/packages/article/src/components/ScreenTable/data.d.ts new file mode 100644 index 0000000..6e91de3 --- /dev/null +++ b/packages/article/src/components/ScreenTable/data.d.ts @@ -0,0 +1,9 @@ +export interface PaginationConfig { + layout?: string; + total: number; + current: number; + pageSize: number; + sizes?: number[]; + sizeChange: (size: number) => void; + onChange: (page: number) => void; +} diff --git a/packages/article/src/components/ScreenTable/index.vue b/packages/article/src/components/ScreenTable/index.vue new file mode 100644 index 0000000..72ddd48 --- /dev/null +++ b/packages/article/src/components/ScreenTable/index.vue @@ -0,0 +1,146 @@ + + + diff --git a/packages/article/src/components/ScreenTreeTable/index.vue b/packages/article/src/components/ScreenTreeTable/index.vue new file mode 100644 index 0000000..b0e8ac0 --- /dev/null +++ b/packages/article/src/components/ScreenTreeTable/index.vue @@ -0,0 +1,207 @@ + + + diff --git a/packages/article/src/components/Spin/index.vue b/packages/article/src/components/Spin/index.vue new file mode 100644 index 0000000..589d911 --- /dev/null +++ b/packages/article/src/components/Spin/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/packages/article/src/components/TreeTable/data.d.ts b/packages/article/src/components/TreeTable/data.d.ts new file mode 100644 index 0000000..967d365 --- /dev/null +++ b/packages/article/src/components/TreeTable/data.d.ts @@ -0,0 +1,5 @@ +export interface ColumnItem { + title: string; + label: string; + minWidth: number; +} \ No newline at end of file diff --git a/packages/article/src/components/TreeTable/index.vue b/packages/article/src/components/TreeTable/index.vue new file mode 100644 index 0000000..a35e178 --- /dev/null +++ b/packages/article/src/components/TreeTable/index.vue @@ -0,0 +1,392 @@ + + + diff --git a/packages/article/src/components/TuiEditor/index.vue b/packages/article/src/components/TuiEditor/index.vue new file mode 100644 index 0000000..71f767a --- /dev/null +++ b/packages/article/src/components/TuiEditor/index.vue @@ -0,0 +1,126 @@ + + diff --git a/packages/article/src/components/TuiEditor/viewer.vue b/packages/article/src/components/TuiEditor/viewer.vue new file mode 100644 index 0000000..2c378f3 --- /dev/null +++ b/packages/article/src/components/TuiEditor/viewer.vue @@ -0,0 +1,56 @@ + + \ No newline at end of file diff --git a/packages/article/src/composables/useEcharts.ts b/packages/article/src/composables/useEcharts.ts new file mode 100644 index 0000000..90a663f --- /dev/null +++ b/packages/article/src/composables/useEcharts.ts @@ -0,0 +1,35 @@ +import { onMounted, onBeforeUnmount, Ref, ref } from 'vue'; +import debounce from 'lodash.debounce'; +import echarts, { ECharts, EChartOption } from 'echarts'; +import 'echarts/theme/macarons'; + +export default function useEcharts( + labRef: Ref, + initOption: EChartOption, + theme = 'macarons' + ): Ref { + + let ec: ECharts; + const chart = ref(); + + const resizeHandler = debounce(() => { + ec.resize(); + }, 100); + + onMounted(()=> { + if(labRef.value) { + ec = echarts.init(labRef.value, theme); + ec.setOption(initOption); + chart.value = ec; + } + + window.addEventListener('resize', resizeHandler); + }) + + onBeforeUnmount(()=> { + ec.dispose(); + window.removeEventListener('resize', resizeHandler); + }); + + return chart; +} \ No newline at end of file diff --git a/packages/article/src/composables/useQueryList.ts b/packages/article/src/composables/useQueryList.ts new file mode 100644 index 0000000..38f1dfd --- /dev/null +++ b/packages/article/src/composables/useQueryList.ts @@ -0,0 +1,62 @@ +import { computed, onMounted, watch, ComputedRef } from 'vue'; +import { useRoute, useRouter } from 'vue-router'; + +export interface QueryParams { + page: number; + per: number; +} + +export type PushQuery = (param: Partial) => void; + +export interface Response { + queryParams: ComputedRef; + pushQuery: PushQuery; +} + + +/** + * 查询列表并根据route监听 composables + * @param cb 回调函数 + * @returns {跳转函数} + * @author LiQingSong + */ + export default function useQueryList(cb: (queryParams: T, pushQuery: PushQuery) => any): Response { + + const router = useRouter(); + const route = useRoute(); + + // route query参数 + const queryParams = computed(()=> { + const { per = 20, page=1 , ...other } = route.query; + return { per: Number(per), page: Number(page), ...other} as T; + }) + + /** + * query跳转 + * @param param 需要调转的参数,比如页码 + */ + const pushQuery = (param: Partial): void => { + router.push({ + ...route, + query: { + ...route.query, + ...param + } + }) + } + + + watch(queryParams,() => { + cb(queryParams.value, pushQuery) + }) + + onMounted(()=> { + cb(queryParams.value, pushQuery) + }) + + return { + queryParams, + pushQuery + } + + } \ No newline at end of file diff --git a/packages/article/src/composables/useQueryVerifyId.ts b/packages/article/src/composables/useQueryVerifyId.ts new file mode 100644 index 0000000..7753ef9 --- /dev/null +++ b/packages/article/src/composables/useQueryVerifyId.ts @@ -0,0 +1,50 @@ + import { ComputedRef, computed, onMounted, watch } from 'vue'; + import { useRoute } from 'vue-router'; + import useRestRouter from '@/composables/useRestRouter'; + import useRestStore from '@/composables/useRestStore'; + import { ElMessage } from "element-plus"; + + /** + * 返回 route query id,并验证 composables + * @param verifyRoutePath 验证的路由path + * @param cb 回调函数 + * @returns + * @author LiQingSong + */ + export default function useQueryVerifyId(verifyRoutePath: string, cb: (id: number) => any): ComputedRef { + const store = useRestStore(); + const route = useRoute(); + const restRouter = useRestRouter(); + const id = computed(() => Number(route.query.id || 0)) + + const verifyId = () => { + if(route.path !== verifyRoutePath) { + return false; + } + + if(id.value < 1) { + ElMessage({ message: '参数出错', type: 'error' }); + store.commit('global/closeCurrentHeadTabNav',() => { + restRouter.push('/') + }); + return false; + } + + cb(id.value) + + } + + + onMounted(()=> { + verifyId(); + }) + + watch(id,() => { + verifyId(); + }) + + + + return id; + + } diff --git a/packages/article/src/composables/useRestRouter.ts b/packages/article/src/composables/useRestRouter.ts new file mode 100644 index 0000000..ca54338 --- /dev/null +++ b/packages/article/src/composables/useRestRouter.ts @@ -0,0 +1,12 @@ + +/** + * 根据注入的parentRouter获取Router,如果主框架存在是parentRouter不存在是自己的router composables + * @author LiQingSong + */ + import { inject } from 'vue' + import { Router, useRouter } from 'vue-router' + +export default function useRestRouter(): Router { + const router: Router = inject('parentRouter', useRouter()) + return router +} diff --git a/packages/article/src/composables/useRestStore.ts b/packages/article/src/composables/useRestStore.ts new file mode 100644 index 0000000..f319778 --- /dev/null +++ b/packages/article/src/composables/useRestStore.ts @@ -0,0 +1,12 @@ + +/** + * 根据注入的parentStore获取Store,如果主框架存在是parentStore不存在是自己的Store composables + * @author LiQingSong + */ + import { inject } from 'vue' + import { Store, useStore } from 'vuex' + +export default function useRestStore(): Store { + const store: Store = inject>('parentStore', useStore()) + return store +} diff --git a/packages/article/src/config/i18n.ts b/packages/article/src/config/i18n.ts new file mode 100644 index 0000000..555712d --- /dev/null +++ b/packages/article/src/config/i18n.ts @@ -0,0 +1,45 @@ +/** + * 国际化 入口 + * @author LiQingSong + */ + +import { createI18n } from "vue-i18n"; +import { getLocale, setLocale, importAllLocales, defaultLang } from "@/utils/i18n"; + +/** + * elementUI 多语言 配置 + */ +import enUS from 'element-plus/lib/locale/lang/en'; +import zhCN from 'element-plus/lib/locale/lang/zh-cn'; +import zhTW from 'element-plus/lib/locale/lang/zh-tw'; +export const elementPlusMessages: { [key: string]: any} = { + 'zh-CN': zhCN, + 'zh-TW': zhTW, + 'en-US': enUS, +} + + +/** + * 框架 多语言 配置 + */ +export const messages = importAllLocales(); +const sysLocale = getLocale(); +const i18n = createI18n({ + legacy: false, + locale: elementPlusMessages[sysLocale] ? sysLocale : defaultLang, + messages, +}); + + +/** + * 设置语言 + * @param locale + */ +export function setI18nLanguage(locale: string, realReload = false): void { + setLocale(locale,realReload, function() { + // i18n.global.locale = locale // legacy: true + i18n.global.locale.value = locale; + }) +} + +export default i18n; diff --git a/packages/article/src/config/routes.ts b/packages/article/src/config/routes.ts new file mode 100644 index 0000000..8c5a44e --- /dev/null +++ b/packages/article/src/config/routes.ts @@ -0,0 +1,54 @@ +/** + * 路由入口 + * @author LiQingSong + */ + + import { RoutesDataItem } from "@/utils/routes"; + + import SecurityLayout from '@/layouts/SecurityLayout.vue'; + + import DefaultLayoutRoutes from "@/layouts/DefaultLayout/routes"; + import DefaultLayout from "@/layouts/DefaultLayout/index.vue"; + + import DashboardLayoutRoutes from '@/layouts/DashboardLayout/routes'; + import DashboardLayout from '@/layouts/DashboardLayout/index.vue'; + + +const routes: Array = [ + { + title: 'empty', + path: '/', + component: SecurityLayout, + children: [ + { + title: 'empty', + path: '/', + redirect: '/home', + component: DefaultLayout, + children: DefaultLayoutRoutes + }, + { + title: 'empty', + path: '/dashboard', + component: DashboardLayout, + children: DashboardLayoutRoutes + }, + ] + }, + { + title: 'empty', + path: '/refresh', + component: () => import('@/views/refresh/index.vue') + }, + { + title: 'app.global.menu.notfound', + path: '/:pathMatch(.*)*', + component: () => import('@/views/404/index.vue'), + } +] + + + + + + export default routes; diff --git a/packages/article/src/config/settings.ts b/packages/article/src/config/settings.ts new file mode 100644 index 0000000..7b46e9a --- /dev/null +++ b/packages/article/src/config/settings.ts @@ -0,0 +1,43 @@ +/** + * 站点配置 + * @author LiQingSong + */ +export interface SettingsType { + /** + * 站点名称 + */ + siteTitle: string; + + /** + * 站点本地存储Token 的 Key值 + */ + siteTokenKey: string; + + /** + * Ajax请求头发送Token 的 Key值 + */ + ajaxHeadersTokenKey: string; + + /** + * Ajax返回值不参加统一验证的api地址 + */ + ajaxResponseNoVerifyUrl: string[]; + + /** + * iconfont.cn 项目在线生成的 js 地址 + */ + iconfontUrl: string[]; +} + +const settings: SettingsType = { + siteTitle: 'ADMIN-VUE3-MICRO', + siteTokenKey: 'admin_vue_micro_token', + ajaxHeadersTokenKey: 'x-token', + ajaxResponseNoVerifyUrl: [ + '/user/login', // 用户登录 + '/user/info', // 获取用户信息 + ], + iconfontUrl: [], +}; + +export default settings; diff --git a/packages/article/src/config/store.ts b/packages/article/src/config/store.ts new file mode 100644 index 0000000..829c3b7 --- /dev/null +++ b/packages/article/src/config/store.ts @@ -0,0 +1,12 @@ +/** + * Store 入口 + * @author LiQingSong + */ +import { createStore } from 'vuex'; +import { importAllStore } from '@/utils/store'; + + +export default createStore({ + modules: importAllStore(), + getters: {} +}) diff --git a/packages/article/src/directives/permission/index.ts b/packages/article/src/directives/permission/index.ts new file mode 100644 index 0000000..abb4fbd --- /dev/null +++ b/packages/article/src/directives/permission/index.ts @@ -0,0 +1,31 @@ +/** + * 自定义指令 权限验证 + * @author LiQingSong + * 使用Demo: + * import permission from '@/directives/permission'; + * import { defineComponent } from "vue"; + * export default defineComponent({ + * directives: { + * permission + * } + * }) + * 删除 + * 删除 + */ +import { Directive } from "vue"; +import UserModel from "@/store/user"; +import { hasPermissionRouteRoles } from "@/utils/routes"; + +const permission: Directive = (el, binding, vnode, prevVNode) => { + const { value } = binding; + if(value) { + const userRoles = UserModel.state.currentUser.roles; + if(!hasPermissionRouteRoles(userRoles, value)){ + el.parentNode && el.parentNode.removeChild(el); + } + } else { + throw new Error(`need roles! Like v-permission="['admin','test']" or v-permission="'test'"`); + } +} + +export default permission; \ No newline at end of file diff --git a/packages/article/src/layouts/BlankLayout.vue b/packages/article/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..621cb5a --- /dev/null +++ b/packages/article/src/layouts/BlankLayout.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/article/src/layouts/DashboardLayout/index.vue b/packages/article/src/layouts/DashboardLayout/index.vue new file mode 100644 index 0000000..d383dc5 --- /dev/null +++ b/packages/article/src/layouts/DashboardLayout/index.vue @@ -0,0 +1,5 @@ + + diff --git a/packages/article/src/layouts/DashboardLayout/routes.ts b/packages/article/src/layouts/DashboardLayout/routes.ts new file mode 100644 index 0000000..665aca2 --- /dev/null +++ b/packages/article/src/layouts/DashboardLayout/routes.ts @@ -0,0 +1,24 @@ +import { RoutesDataItem } from "@/utils/routes"; +import BlankLayout from '@/layouts/BlankLayout.vue'; + +const DashboardLayoutRoutes: Array = [ + { + title: 'analysis', + path: 'analysis', + component: BlankLayout, + children: [ + { + title: 'chartcard', + path: 'chartcard', + component: ()=> import('@/views/analysis/chartcard/index.vue') + }, + { + title: 'hitcard', + path: 'hitcard', + component: ()=> import('@/views/analysis/hitcard/index.vue') + } + ] + } +]; + +export default DashboardLayoutRoutes; diff --git a/packages/article/src/layouts/DefaultLayout/index.vue b/packages/article/src/layouts/DefaultLayout/index.vue new file mode 100644 index 0000000..423e4b1 --- /dev/null +++ b/packages/article/src/layouts/DefaultLayout/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/article/src/layouts/DefaultLayout/routes.ts b/packages/article/src/layouts/DefaultLayout/routes.ts new file mode 100644 index 0000000..3d232d3 --- /dev/null +++ b/packages/article/src/layouts/DefaultLayout/routes.ts @@ -0,0 +1,37 @@ +import { RoutesDataItem } from "@/utils/routes"; + +const DefaultLayoutRoutes: Array = [ + { + title: 'home', + path: '/home', + component: ()=> import('@/views/home/index.vue') + }, + { + title: 'list', + path: '/list', + roles: ['article-list'], + component: ()=> import('@/views/list/index.vue') + }, + { + title: 'add', + path: '/add', + roles: ['article-add'], + component: ()=> import('@/views/add/index.vue') + }, + { + title: 'edit', + path: '/edit', + roles: ['article-edit'], + component: ()=> import('@/views/edit/index.vue') + }, + { + title: 'category', + path: '/category', + roles: ['article-category'], + component: ()=> import('@/views/category/index.vue') + }, + + +]; + +export default DefaultLayoutRoutes; diff --git a/packages/article/src/layouts/SecurityLayout.vue b/packages/article/src/layouts/SecurityLayout.vue new file mode 100644 index 0000000..8d61821 --- /dev/null +++ b/packages/article/src/layouts/SecurityLayout.vue @@ -0,0 +1,28 @@ + + diff --git a/packages/article/src/locales/en-US.ts b/packages/article/src/locales/en-US.ts new file mode 100644 index 0000000..264323d --- /dev/null +++ b/packages/article/src/locales/en-US.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': 'The validation did not pass, please check the input', +}; \ No newline at end of file diff --git a/packages/article/src/locales/zh-CN.ts b/packages/article/src/locales/zh-CN.ts new file mode 100644 index 0000000..92b979c --- /dev/null +++ b/packages/article/src/locales/zh-CN.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '验证不通过,请检查输入', +}; \ No newline at end of file diff --git a/packages/article/src/locales/zh-TW.ts b/packages/article/src/locales/zh-TW.ts new file mode 100644 index 0000000..2926c8d --- /dev/null +++ b/packages/article/src/locales/zh-TW.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '驗證不通過,請檢查輸入', +}; \ No newline at end of file diff --git a/packages/article/src/main.ts b/packages/article/src/main.ts new file mode 100644 index 0000000..a3a61d1 --- /dev/null +++ b/packages/article/src/main.ts @@ -0,0 +1,119 @@ +declare global { + interface Window { + __POWERED_BY_QIANKUN__: string; + __INJECTED_PUBLIC_PATH_BY_QIANKUN__: string; + } +} + +if (window.__POWERED_BY_QIANKUN__) { + __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ || ''; +} + +import { createApp } from 'vue'; +import { createRouter, createWebHistory, createMemoryHistory } from 'vue-router'; + +// 样式初始化 +import 'normalize.css'; + +// 全局样式 +import '@/assets/css/global.scss'; + +// 引入 ElementUI +import ElementPlus from 'element-plus'; + +// 导入 svg +import { importAllSvg } from "@/components/IconSvg/index"; +importAllSvg(); + +// progress bar +import NProgress from 'nprogress'; // progress bar +import 'nprogress/nprogress.css'; // progress bar style +NProgress.configure({ showSpinner: false, easing: 'ease', speed: 1000 }); // NProgress Configuration + + +import App from '@/App.vue'; +import routes from '@/config/routes'; +import store from '@/config/store'; +import i18n from '@/config/i18n'; + + +let router: any = null; +let instance: any = null; +let history: any = null; + +function render(props: any = {}) { + const { container, routerBase, routerHistory, parentRouter, parentStore, data, onGlobalStateChange } = props; + const historyBase = routerBase || process.env.BASE_URL; + + if (routerHistory === 'memory') { + history = createMemoryHistory(historyBase); + } else { + history = createWebHistory(historyBase); + } + router = createRouter({ + history, + routes, + }); + + router.beforeEach((/* to, from */) => { + // start progress bar + NProgress.start(); + }); + + router.afterEach(() => { + // finish progress bar + NProgress.done(); + }); + + + if(parentStore) { + // 设置用户登录信息 + store.commit('user/saveCurrentUser', parentStore.state.user.currentUser || {}); + } + + instance = createApp(App); + instance.provide('parentRouter', parentRouter || router); + instance.provide('parentStore', parentStore || store); + instance.use(store); + instance.use(router); + instance.use(ElementPlus, { size: 'small'}); + instance.use(i18n); + instance.mount(container ? container.querySelector('#app') : '#app'); + + if (data?.defaultPath) { + router.push(data.defaultPath); + } + + // qiankun.js 全局 state + onGlobalStateChange?.((state, prev) => { + // 设置语言 + if(state.i18nLocale) { + i18n.global.locale.value = state.i18nLocale + } + }, true); + + +} + +if(!window.__POWERED_BY_QIANKUN__){ + render(); +} + +export async function bootstrap() { + console.log('%c%s', 'color: green;', 'article app bootstraped'); +} + +export async function mount(props: any) { + console.log('%c%s', 'color: blue;', 'article app mount'); + render(props); +} + +export async function unmount() { + console.log('%c%s', 'color: red;', 'article app unmount'); + instance.unmount(); + instance._container.innerHTML = ''; + instance = null; + router = null; + history.destroy(); +} + diff --git a/packages/article/src/services/user.ts b/packages/article/src/services/user.ts new file mode 100644 index 0000000..c5bc487 --- /dev/null +++ b/packages/article/src/services/user.ts @@ -0,0 +1,2 @@ +// import request from '@/utils/request'; + diff --git a/packages/article/src/shims-vue.d.ts b/packages/article/src/shims-vue.d.ts new file mode 100644 index 0000000..df76ca3 --- /dev/null +++ b/packages/article/src/shims-vue.d.ts @@ -0,0 +1,8 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +declare module '@ckeditor/ckeditor5-vue'; +declare module '@ckeditor/ckeditor5-build-decoupled-document'; diff --git a/packages/article/src/store/global.ts b/packages/article/src/store/global.ts new file mode 100644 index 0000000..7ffb946 --- /dev/null +++ b/packages/article/src/store/global.ts @@ -0,0 +1,43 @@ +import { Mutation /*, Action*/ } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; + + + +export interface StateType {} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + closeCurrentHeadTabNav: Mutation; + }; + actions: { + }; +} + +const initState: StateType = { +}; + +const StoreModel: ModuleType = { + namespaced: true, + name: 'global', + state: { + ...initState + }, + mutations: { + /** + * 定义与父框架相同的关闭当前tabNav,做漏斗 + * @param state + * @param payload Function 回调 + */ + closeCurrentHeadTabNav(state, payload: Function) { + if(typeof payload === 'function') { + payload() + } + }, + }, + actions: {} +} + + + +export default StoreModel; diff --git a/packages/article/src/store/user.ts b/packages/article/src/store/user.ts new file mode 100644 index 0000000..44892b5 --- /dev/null +++ b/packages/article/src/store/user.ts @@ -0,0 +1,64 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { removeToken } from "@/utils/localToken"; + +export interface CurrentUser { + id: number; + name: string; + avatar: string; + roles: string[]; +} + +export interface StateType { + currentUser: CurrentUser; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + saveCurrentUser: Mutation; + }; + actions: { + logout: Action; + }; +} + +const initState: StateType = { + currentUser: { + id: 0, + name: '', + avatar: '', + roles: [], + }, +} + +const StoreModel: ModuleType = { + namespaced: true, + name: 'user', + state: { + ...initState + }, + mutations: { + saveCurrentUser(state, payload) { + state.currentUser = { + ...initState.currentUser, + ...payload, + } + }, + }, + actions: { + async logout({ commit }) { + try { + await removeToken(); + commit('saveCurrentUser', { ...initState.currentUser }); + return true; + } catch (error) { + return false; + } + } + } +} + + + +export default StoreModel; diff --git a/packages/article/src/utils/array.ts b/packages/article/src/utils/array.ts new file mode 100644 index 0000000..a3ae5ec --- /dev/null +++ b/packages/article/src/utils/array.ts @@ -0,0 +1,29 @@ +/** + * 数组合并并去重 + * @param arr1 数组1 + * @param arr2 数组2 + */ +export function mergeUnique(arr1: Array, arr2: Array): Array { + const arr: Array = arr1; + for (let index = 0, len = arr2.length; index < len; index += 1) { + if (!arr.includes(arr2[index])) { + arr.push(arr2[index]); + } + } + + return arr; +} + +/** + * 数组去重 + * @param arr 数组 + */ +export function unique(arr: Array): Array { + const array: Array = []; + for (let index = 0, len = arr.length; index < len; index += 1) { + if (!array.includes(arr[index])) { + array.push(arr[index]); + } + } + return array; +} diff --git a/packages/article/src/utils/i18n.ts b/packages/article/src/utils/i18n.ts new file mode 100644 index 0000000..78b58fa --- /dev/null +++ b/packages/article/src/utils/i18n.ts @@ -0,0 +1,181 @@ +/** + * 国际化 utils + * @author LiQingSong + */ +import { LocaleMessages } from '@intlify/core-base'; +import { VueMessageType } from "vue-i18n"; + +// window.localStorage 存储key +export const localeKey = 'locale'; + +// 默认语言 +export const defaultLang = 'zh-CN'; + +/** + * 验证语言命名规则 zh-CN + * @returns boolen + * @author LiQingSong + */ +export const localeNameExp = (lang: string): boolean => { + const localeExp = new RegExp(`^([a-z]{2})-?([A-Z]{2})?$`); + return localeExp.test(lang); +} + +/** + * 设置 html lang 属性值 + * @param lang 语言的 key + * @author LiQingSong + */ +export const setHtmlLang = (lang: string): void => { + /** + * axios.defaults.headers.common['Accept-Language'] = locale + */ + document.querySelector('html')?.setAttribute('lang', lang); +} + +/** + * 获取当前选择的语言 + * 获取的浏览器语言默认项目中有可能不支持,所以在config/i18n.ts中要加以判断 + * @returns string + * @author LiQingSong + */ +export const getLocale = (): string => { + const lang = typeof window.localStorage !== 'undefined' ? window.localStorage.getItem(localeKey) : ''; + const isNavigatorLanguageValid = typeof navigator !== 'undefined' && typeof navigator.language === 'string'; + const browserLang = isNavigatorLanguageValid ? navigator.language.split('-').join('-') : ''; + return lang || browserLang || defaultLang; +}; + +/** + * 切换语言 + * @param lang 语言的 key + * @param realReload 是否刷新页面,默认刷新 + * @author LiQingSong + */ +export const setLocale = (lang: string, realReload = true, callback: () => void ): void => { + + if (lang !== undefined && !localeNameExp(lang)) { + // for reset when lang === undefined + throw new Error('setLocale lang format error'); + } + if (getLocale() !== lang) { + if (typeof window.localStorage !== 'undefined') { + window.localStorage.setItem(localeKey, lang || ''); + } + + if (realReload) { + window.location.reload(); + } else { + setHtmlLang(lang); + + if(typeof callback === 'function') { + callback(); + } + } + + } +}; + +/** + * 自动导入 框架自定义语言 + * @author LiQingSong + */ +export function importAllLocales(): LocaleMessages { + const modules: LocaleMessages = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/layouts 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const layoutsRequireContext: __WebpackModuleApi.RequireContext = require.context('../layouts', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + layoutsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = layoutsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/components 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const componentsRequireContext: __WebpackModuleApi.RequireContext = require.context('../components', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + componentsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = componentsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/locales 下文件,不包含子目录,文件名为:([a-z]{2})-?([A-Z]{2})?\.ts + const localesRequireContext: __WebpackModuleApi.RequireContext = require.context('../locales', false, /([a-z]{2})-?([A-Z]{2})?\.ts$/); + localesRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = localesRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + diff --git a/packages/article/src/utils/localToken.ts b/packages/article/src/utils/localToken.ts new file mode 100644 index 0000000..fca7e6f --- /dev/null +++ b/packages/article/src/utils/localToken.ts @@ -0,0 +1,37 @@ +/** + * 自定义 token 操作 + * @author LiQingSong + */ +import localforage from 'localforage'; +import settings from '@/config/settings'; + +/** + * 获取本地Token + */ +export const getToken = async (): Promise => { + return await localforage.getItem(settings.siteTokenKey); +}; + +/** + * 设置存储本地Token + */ +export const setToken = async (token: string): Promise => { + try { + await localforage.setItem(settings.siteTokenKey, token); + return true; + } catch (error) { + return false; + } +}; + +/** + * 移除本地Token + */ +export const removeToken = async (): Promise => { + try { + await localforage.removeItem(settings.siteTokenKey); + return true; + } catch (error) { + return false; + } +}; \ No newline at end of file diff --git a/packages/article/src/utils/mock/require-context.js b/packages/article/src/utils/mock/require-context.js new file mode 100644 index 0000000..f1dd6dd --- /dev/null +++ b/packages/article/src/utils/mock/require-context.js @@ -0,0 +1,45 @@ +/** + * 自定义 require.context + * @author LiQingSong + */ +module.exports = function(directory, recursive, regExp) { + const dir = require('node-dir') + const path = require('path') + + // Assume absolute path by default + let basepath = directory + + if (directory[0] === '.') { + // Relative path + basepath = path.join(__dirname, directory) + } else if (!path.isAbsolute(directory)) { + // Module path + basepath = require.resolve(directory) + } + + const keys = dir + .files(basepath, { + sync: true, + recursive: recursive || false + }) + .filter(function(file) { + return file.match(regExp || /\.(json|js)$/) + }) + .map(function(file) { + return path.join('.', file.slice(basepath.length + 1)) + }) + + var context = function(key) { + return require(context.resolve(key)) + } + + context.resolve = function(key) { + return path.join(directory, key) + } + + context.keys = function() { + return keys + } + + return context + } \ No newline at end of file diff --git a/packages/article/src/utils/mock/server.js b/packages/article/src/utils/mock/server.js new file mode 100644 index 0000000..e180d29 --- /dev/null +++ b/packages/article/src/utils/mock/server.js @@ -0,0 +1,98 @@ +/** + * Mock Server + * @author LiQingSong + */ +const requireContext = require('./require-context'); +const chokidar = require('chokidar'); +const path = require('path'); + +// 注册 mock 路由 +function registerMockRoutes(mockDir, app) { + let mockLastIndex = 0; + let mockRoutesLength = 0; + try { + // 导入 /mock 下文件 + const context = requireContext(mockDir, false, /\.js$/); + context.keys().forEach(fileName => { + // 获取内容 + const mocks = context(fileName); + for (const key in mocks) { + const keys = key.replace(/(^\s*)|(\s*$)/g, '').split(' '); + let ajaxType = 'get'; + let ajaxUrl = ''; + if(keys.length<2) { + ajaxUrl = keys[0]; + } else { + ajaxType = keys[0].toLowerCase(); + ajaxUrl = keys[1]; + if(!['get','post','put','patch','delete','head','options'].includes(ajaxType)) { + ajaxType = 'get'; + } + } + if(typeof mocks[key] === 'function') { + app[ajaxType](ajaxUrl, mocks[key]); + mockLastIndex = app._router.stack.length; + mockRoutesLength = mockRoutesLength + 1; + // console.log(app._router.stack.length); + } + } + }); + } catch (error) { + console.log(error); + } + + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } + +} + +// 删除 mock 路由 +function unRegisterMockRoutes(mockDir) { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + + +module.exports = app => { + const mockDir = path.resolve('./mock'); + + const mockRoutes = registerMockRoutes(mockDir,app); + let mockRoutesLength = mockRoutes.mockRoutesLength; + let mockStartIndex = mockRoutes.mockStartIndex; + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add' || event === 'unlink') { + // console.log(event, path); + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength); + + // clear routes cache + unRegisterMockRoutes(mockDir); + + // rest routes + const mockRoutes = registerMockRoutes(mockDir,app); + mockRoutesLength = mockRoutes.mockRoutesLength; + mockStartIndex = mockRoutes.mockStartIndex; + + + console.log(`\n > Mock Server hot reload success! changed ${path}`) + } catch (error) { + console.log(error); + } + + } + }) + + + + +} \ No newline at end of file diff --git a/packages/article/src/utils/object.ts b/packages/article/src/utils/object.ts new file mode 100644 index 0000000..ecdc6dd --- /dev/null +++ b/packages/article/src/utils/object.ts @@ -0,0 +1,46 @@ +/** + * 浅比较两个object, json的key是否一致 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObjectKey(obj1: Object, obj2: Object): boolean{ + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + if(obj1KeysLen!==obj2Keys.length) { + return false; + } + let is = true; + for (let index = 0; index < obj1KeysLen; index++) { + const element: string = obj1Keys[index]; + if(!Object.prototype.hasOwnProperty.call(obj2, element)) { + is = false; + break; + } + } + return is; +} + +/** + * 浅比较两个对象是否相等,这两个对象的值只能是数字或字符串 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObject(obj1: Object, obj2: Object): boolean { + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + const obj2KeysLen: number = obj2Keys.length; + if(obj1KeysLen!==obj2KeysLen) { + return false; + } + + if(obj1KeysLen===0 && obj2KeysLen===0) { + return true; + } + + return !obj1Keys.some(key => obj1[key] != obj2[key]) + +} \ No newline at end of file diff --git a/packages/article/src/utils/request.ts b/packages/article/src/utils/request.ts new file mode 100644 index 0000000..5e65aae --- /dev/null +++ b/packages/article/src/utils/request.ts @@ -0,0 +1,163 @@ +/** + * 自定义 request 网络请求工具,基于axios + * @author LiQingSong + */ +import axios, { AxiosPromise, AxiosRequestConfig, AxiosResponse } from 'axios'; +import { ElNotification } from 'element-plus'; +import settings from '@/config/settings'; +import { getToken, setToken } from '@/utils/localToken'; + +export interface ResponseData { + code: number; + data?: any; + msg?: string; + token?: string; +} + +const customCodeMessage: {[key: number]: string} = { + 10002: '当前用户登入信息已失效,请重新登入再操作', // 未登陆 +}; + +const serverCodeMessage: {[key: number]: string} = { + 200: '服务器成功返回请求的数据', + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 500: '服务器发生错误,请检查服务器(Internal Server Error)', + 502: '网关错误(Bad Gateway)', + 503: '服务不可用,服务器暂时过载或维护(Service Unavailable)', + 504: '网关超时(Gateway Timeout)', +}; + +/** + * 异常处理程序 + */ +const errorHandler = (error: any) => { + const { response, message } = error; + if (message === 'CustomError') { + // 自定义错误 + const { config, data } = response; + const { url, baseURL} = config; + const { code, msg } = data; + const reqUrl = url.split("?")[0].replace(baseURL, ''); + const noVerifyBool = settings.ajaxResponseNoVerifyUrl.includes(reqUrl); + if (!noVerifyBool) { + ElNotification({ + type: 'error', + title: `提示`, + message: customCodeMessage[code] || msg || 'Error', + }); + + /* if (code === 10002) { + // router.replace('/user/login'); + } */ + } + } else if (message === 'CancelToken') { + // 取消请求 Token + // eslint-disable-next-line no-console + console.log(message); + } else if (response && response.status) { + const errorText = serverCodeMessage[response.status] || response.statusText; + const { status, request } = response; + ElNotification({ + type: 'error', + title: `请求错误 ${status}: ${request.responseURL}`, + message: errorText, + }); + } else if (!response) { + ElNotification({ + type: 'error', + title: '网络异常', + message: '您的网络发生异常,无法连接服务器', + }); + } + + return Promise.reject(error); +} + +/** + * 配置request请求时的默认参数 + */ +const request = axios.create({ + baseURL: process.env.VUE_APP_APIHOST, // url = api url + request url + withCredentials: true, // 当跨域请求时发送cookie + timeout: 0 // 请求超时时间,5000(单位毫秒) / 0 不做限制 +}); + +// 全局设置 - post请求头 +// request.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + +/** + * 请求前 + * 请求拦截器 + */ +request.interceptors.request.use( + async (config: AxiosRequestConfig & { cType?: boolean }) => { + + // 如果设置了cType 说明是自定义 添加 Content-Type类型 为自定义post 做铺垫 + if (config['cType']) { + config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // 自定义添加token header + const headerToken = await getToken(); + if (headerToken) { + config.headers[settings.ajaxHeadersTokenKey] = headerToken; + } + + return config; + }, + /* error=> {} */ // 已在 export default catch +); + +/** + * 请求后 + * 响应拦截器 + */ +request.interceptors.response.use( + async (response: AxiosResponse) => { + + const res: ResponseData = response.data; + const { code, token } = res; + + // 自定义状态码验证 + if (code !== 0) { + return Promise.reject({ + response, + message: 'CustomError', + }); + } + + // 重置刷新token + if (token) { + await setToken(token); + } + + return response; + }, + /* error => {} */ // 已在 export default catch +); + +/** + * ajax 导出 + * + * Method: get + * Request Headers + * 无 - Content-Type + * Query String Parameters + * name: name + * age: age + * + * Method: post + * Request Headers + * Content-Type:application/json;charset=UTF-8 + * Request Payload + * { name: name, age: age } + * Custom config parameters + * { cType: true } Mandatory Settings Content-Type:application/json;charset=UTF-8 + * ...... + */ +export default function(config: AxiosRequestConfig): AxiosPromise { + return request(config).then((response: AxiosResponse) => response.data).catch(error => errorHandler(error)); +} diff --git a/packages/article/src/utils/routes.ts b/packages/article/src/utils/routes.ts new file mode 100644 index 0000000..300b80c --- /dev/null +++ b/packages/article/src/utils/routes.ts @@ -0,0 +1,388 @@ +/** + * Route utils + * @author LiQingSong + */ + +/** + * 面包屑类型 + */ +export interface BreadcrumbType { + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + // 路由地址或外链 + path: string; +} + +/** + * tab导航存储规则类型 + */ +export type TabNavType = 'path' | 'querypath'; + +import 'vue-router' +declare module 'vue-router' { + /** + * 自定义补充扩展 - 路由 - 类型字段 + */ + interface _RouteRecordBase { + // 菜单中是否隐藏 + hidden?: boolean; + // 图标的名称,显示在菜单标题前 + icon?: string; + // 权限控制,页面角色(您可以设置多个角色) + roles?: string[]; + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + /** + * 面包屑自定义内容: + * 1、默认不配置按照路由自动读取; + * 2、设置为 false , 按照路由自动读取并不读当前自己; + * 3、配置对应的面包屑格式如下: + */ + breadcrumb?: BreadcrumbType[] | false; + /** + * 设置tab导航存储规则类型 + * 1、默认不配置按照path(route.path)规则 + * 2、querypath:path + query (route.path+route.query) 规则 + */ + tabNavType?: TabNavType ; + /** + * 设置该字段,则在关闭当前tab页时,作为关闭前的钩子函数 + * @param close 关闭回调函数 + */ + tabNavCloseBefore?: (close: ()=>void)=> void; + /** + * 左侧菜单选中,如果设置路径,侧栏将突出显示你设置的路径对应的侧栏导航 + * 1、(默认 route.path),此参数是为了满足特殊页面特殊需求, + * 2、如:详情页等选中侧栏导航或在模块A下面的页面,想选模块B为导航选中状态 + */ + selectLeftMenu?: string; + + // 所有父元素的path,下标key按照父元素的顺序 + parentPath?: string[] + } +} +import { RouteRecordRaw, RouteLocationNormalizedLoaded } from 'vue-router'; +import { pathToRegexp } from "path-to-regexp"; + + +/** + * 自定义重命名 - 路由类型 + */ +export type RoutesDataItem = RouteRecordRaw; + +/** + * 头部tab导航类型 + */ +export interface TabNavItem { + route: RouteLocationNormalizedLoaded, + menu: RoutesDataItem +} + +/** + * 用Routes的path作为key的JsonRoutes + */ +export interface PathJsonRoutesDataItem { + [path: string]: RoutesDataItem +} + +import { isExternal } from './validate'; +import { equalObject } from "./object"; + +/** + * 获取 route + * @param pathname path + * @param routesData routes + */ +export const getRouteItem = (pathname: string, routesData: RoutesDataItem[]): RoutesDataItem => { + let item: RoutesDataItem = { title: '', path: '', redirect: '', roles: [] }; + for (let index = 0, len = routesData.length; index < len; index += 1) { + const element = routesData[index]; + //if (element.path === pathname) { + // lqs 20210120 修复用pathToRegexp + if (pathToRegexp(element.path).exec(pathname)) { + item = element; + break; + } + + if (element.children) { + item = getRouteItem(pathname, element.children); + if (item.path !== '') { + break; + } + } + } + + return item; +}; + +/** + * 获取 route + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getJsonRouteItem = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem => { + return jsonRoutesData[pathname] || {}; +} + +/** + * 根据 hidden 判断是否有数据子集 + * @param children RoutesDataItem[] + */ +export const hasChildRoute = (children: RoutesDataItem[]): boolean => { + const showChildren = children.filter(item => { + if (item.hidden) { + return false; + } + return true; + }); + if (showChildren.length > 0) { + return true; + } + return false; +}; + + +/** + * 根据父path 设置当前项 path + * @param pathname path + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const setRoutePathForParent = (pathname: string, parentPath = '/', headStart = '/'): string => { + + if (isExternal(pathname)) { + return pathname; + } + + return pathname.substr(0, headStart.length) === headStart + ? pathname + : `${parentPath}/${pathname}`; +}; + +/** + * 根据路由 pathname 数组 - 返回对应的 route 数组 + * @param pathname 路由path数组 + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getPathsTheRoutes = ( pathname: string[], jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem[] => { + const routeItem: RoutesDataItem[] = []; + + for (let index = 0, len = pathname.length; index < len; index += 1) { + const element = pathname[index]; + const item = getJsonRouteItem(element,jsonRoutesData); + if (item.path !== '') { + routeItem.push(item); + } + } + + return routeItem; +}; + +/** + * 获取面包屑对应的 route 数组 + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getBreadcrumbRoutes = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): BreadcrumbType[] => { + const route = getJsonRouteItem(pathname,jsonRoutesData); + if(!route.path) { + return []; + } + + if (!route.breadcrumb) { + const parentPath = route.parentPath || [] + const routes = getPathsTheRoutes(parentPath, jsonRoutesData); + + return route.breadcrumb === false ? routes : [...routes, route]; + } + + return route.breadcrumb; +}; + +/** + * 获取当前路由选中的侧边栏菜单path + * @param route route + */ +export const getSelectLeftMenuPath = (route: RoutesDataItem): string => { + return route.selectLeftMenu || route.path; +}; + + +/** + * 格式化返回 vue 路由, 主要处理特殊情况 + * @param routesData routes + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const vueRoutes = (routesData: RoutesDataItem[], parentPath = '/', headStart = '/'): RoutesDataItem[] => { + return routesData.map(item => { + const { children, ...other } = item; + const itemChildren = children || []; + const newItem: RoutesDataItem = { ...other }; + newItem.path = setRoutePathForParent(newItem.path, parentPath, headStart); + + if (item.children) { + newItem.children = [ + ...vueRoutes(itemChildren, newItem.path, headStart), + ]; + } + + return newItem; + }); +}; + +/** + * 把经过 vueRoutes 处理过的 routes 转换成用path作为key的json,并统一增加了parentPath + * @param vueRoutesData 经过 vueRoutes 处理过的 routes + * @returns PathJsonRoutesDataItem + */ +export const jsonPathVueRoutes = (vueRoutesData: RoutesDataItem[]): PathJsonRoutesDataItem=> { + + const jsonRoutes: PathJsonRoutesDataItem = {}; + + function forRoute(routesData: RoutesDataItem[], parentPath: string[]) { + const len = routesData.length; + for (let index = 0; index < len; index++) { + const item = routesData[index]; + + const pPath = (item.parentPath && item.parentPath.length > 0) ? item.parentPath : parentPath; + + const newItem: RoutesDataItem = { + ...item, + parentPath: [...pPath] + }; + + jsonRoutes[item.path] = newItem; + + if (item.children) { + forRoute(item.children,[...pPath, item.path]) + } + + } + } + + forRoute(vueRoutesData, []); + + return jsonRoutes; +} + +/** + * 批量设置route.meta值 + * @param routesData routes + */ +export const routesSetMeta = (routesData: RoutesDataItem[]): RoutesDataItem[] => { + return routesData.map(item => { + const { children, tabNavType, meta, ...other } = item; + const newItem: RoutesDataItem = { + meta: { + ...meta, + + // 自定义设置的 meta 值 S + + tabNavType: tabNavType || 'path', + + // 自定义设置的 meta 值 E + }, + ...other + }; + + if (item.children) { + const itemChildren = children || []; + newItem.children = [ + ...routesSetMeta(itemChildren), + ]; + } + + return newItem; + }); + +} + +/** + * 根据 自定义传入权限名 判断当前用户是否有权限 + * @param userRoles 用户的权限 + * @param roles 自定义权限名 + */ +export const hasPermissionRouteRoles = (userRoles: string[], roles?: string | string[]): boolean => { + if (userRoles.includes('admin')) { + return true; + } + + if(typeof roles === 'undefined') { + return true; + } + + if (typeof roles === 'string') { + return userRoles.includes(roles); + } + + if(roles instanceof Array && roles.length > 0) { + return roles.some(role => userRoles.includes(role)); + } + + return false; +}; + +/** + * 根据 route.roles 判断当前用户是否有权限 + * @param roles 用户的权限 + * @param route 当前路由 + */ +export const hasPermission = (roles: string[], route: RoutesDataItem): boolean => { + if (roles.includes('admin')) { + return true; + } + + if (route.roles) { + return route.roles.some(role => roles.includes(role)); + //return roles.some(role => route.roles?.includes(role)); + } + + return true; +}; + +/** + * 根据用户权限 获取 对应权限菜单 + * @param roles 用户的权限 + * @param routes 框架对应路由 + */ +export const getPermissionMenuData = ( roles: string[], routes: RoutesDataItem[]): RoutesDataItem[] => { + const menu: RoutesDataItem[] = []; + for (let index = 0, len = routes.length; index < len; index += 1) { + const element = {...routes[index]}; + if (hasPermission(roles, element)) { + if (element.children) { + element.children = getPermissionMenuData(roles, element.children); + } + menu.push(element); + } + } + + return menu; +}; + + + +/** + * 判断tabNav,对应的route是否相等 + * @param route1 vue-route + * @param route2 vue-route + * @param type 判断规则 + * @returns + */ +export const equalTabNavRoute = (route1: RouteLocationNormalizedLoaded, route2: RouteLocationNormalizedLoaded, type: TabNavType = 'path'): boolean=> { + let is = false; + switch (type) { + case 'querypath': // path + query + is = equalObject(route1.query,route2.query) && route1.path === route2.path + break; + default: // path + is = route1.path === route2.path + break; + } + + return is; +} diff --git a/packages/article/src/utils/store.ts b/packages/article/src/utils/store.ts new file mode 100644 index 0000000..f21cae9 --- /dev/null +++ b/packages/article/src/utils/store.ts @@ -0,0 +1,61 @@ +/** + * Store utils + * @author LiQingSong + */ +import { Module, ModuleTree } from 'vuex'; + +/** + * 自定义项目 Store Module 类型 + * 为自动导入的 store 做类型限制 + * [@/store文件夹下定义的 store]与[@/views文件夹下定义的`文件store.ts`] 必须继承此类型 + * @author LiQingSong + */ +export interface StoreModuleType extends Module { + namespaced: true; + name: string; +} + +/** + * 自动导入 Store + * @author LiQingSong + */ +export function importAllStore (): ModuleTree { + const modules: ModuleTree = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:store.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]store\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + + // 导入 @/store 下文件 + const requireContext: __WebpackModuleApi.RequireContext = require.context('../store', false, /\.ts$/); + requireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = requireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + \ No newline at end of file diff --git a/packages/article/src/utils/trim.ts b/packages/article/src/utils/trim.ts new file mode 100644 index 0000000..1611990 --- /dev/null +++ b/packages/article/src/utils/trim.ts @@ -0,0 +1,44 @@ +/** + * 去除空格 + * @author LiQingSong + */ + + /** + * 去除两端空格 + * @author LiQingSong + */ + export function trim(val: string): string { + return val.replace(/(^\s*)|(\s*$)/g, ""); +} + + /** + * 去除左边空格 + * @author LiQingSong + */ +export function ltrim(val: string): string { + return val.replace(/(^\s*)/g,""); +} + + /** + * 去除右边边空格 + * @author LiQingSong + */ +export function rtrim(val: string): string{ + return val.replace(/(\s*$)/g,""); +} + + /** + * 去除两端 , + * @author LiQingSong + */ +export function trimComma(val: string): string { + return val.replace(/(^,*)|(,*$)/g, ""); +} + + /** + * 去除两端 | + * @author LiQingSong + */ +export function trimVerticalBar(val: string): string{ + return val.replace(/(^\|*)|(\|*$)/g, ""); +} \ No newline at end of file diff --git a/packages/article/src/utils/validate.ts b/packages/article/src/utils/validate.ts new file mode 100644 index 0000000..1c553f6 --- /dev/null +++ b/packages/article/src/utils/validate.ts @@ -0,0 +1,9 @@ +/** + * 判断是否是外链 + * @param {string} path + * @returns {Boolean} + * @author LiQingSong + */ +export const isExternal = (path: string): boolean => { + return /^(https?:|mailto:|tel:)/.test(path); +}; diff --git a/packages/article/src/views/404/index.vue b/packages/article/src/views/404/index.vue new file mode 100644 index 0000000..bf7bc46 --- /dev/null +++ b/packages/article/src/views/404/index.vue @@ -0,0 +1,21 @@ + + \ No newline at end of file diff --git a/packages/article/src/views/add/data.d.ts b/packages/article/src/views/add/data.d.ts new file mode 100644 index 0000000..aedab72 --- /dev/null +++ b/packages/article/src/views/add/data.d.ts @@ -0,0 +1,34 @@ +import { TableListItem } from "../list/data.d"; + +export type Article = Pick; + +export interface FormItem { + title: string; + category: number[]; + keywords: string; + description: string; + addtime: string; + tag: string[]; + thumb: string[]; + content: string; +} + +export interface DataItem { + title: string; + categoryId: number | string; + categoryIds: string; + keywords: string; + description: string; + addtime: string; + tag: string; + thumb: string; + content: string; + interestIds: string; +} + +export interface ArticleRec { + list: Article[]; + drawerVisible: boolean; + selectArticle: (row: Article)=> void; + deleteArticleRow: (index: number) => void; +} \ No newline at end of file diff --git a/packages/article/src/views/add/index.vue b/packages/article/src/views/add/index.vue new file mode 100644 index 0000000..12522c3 --- /dev/null +++ b/packages/article/src/views/add/index.vue @@ -0,0 +1,301 @@ + + diff --git a/packages/article/src/views/add/locales/en-US.ts b/packages/article/src/views/add/locales/en-US.ts new file mode 100644 index 0000000..0b2ac84 --- /dev/null +++ b/packages/article/src/views/add/locales/en-US.ts @@ -0,0 +1,46 @@ +export default { + 'views.article.add.header.title': 'Article Add', + 'views.article.add.base.title': 'Basic Information', + 'views.article.add.pic.title': 'Thumbnail', + 'views.article.add.pic.tips': 'Choose up to 4 pictures, please upload the processed thumbnails', + 'views.article.add.content.title': 'Details', + + 'views.article.add.articlerec.title': 'Recommended article', + 'views.article.add.articlerec.tips': 'Select up to 10 article', + 'views.article.add.articlerec.btn.show': 'New recommendation', + 'views.article.add.articlerec.btn.del': 'Remove', + 'views.article.add.articlerec.table.column.index': 'Order', + 'views.article.add.articlerec.table.column.id': 'ID', + 'views.article.add.articlerec.table.column.title': 'Title', + 'views.article.add.articlerec.table.column.addtime': 'Release time', + 'views.article.add.articlerec.table.column.action': 'Action', + 'views.article.add.articlerec.drawer.title': 'Choose recommended article', + 'views.article.add.articlerec.drawer.action': 'Action', + 'views.article.add.articlerec.drawer.btn1': 'chosen', + 'views.article.add.articlerec.drawer.btn2': 'choose', + 'views.article.add.articlerec.choose.success': 'The choice is successful!', + + 'views.article.add.form.title': 'Title', + 'views.article.add.form.title.placeholder': 'Please enter a title', + 'views.article.add.form.title.minmax': '5 to 100 characters long', + 'views.article.add.form.category': 'Category', + 'views.article.add.form.category.placeholder': 'please select a Category', + 'views.article.add.form.addtime': 'Release time', + 'views.article.add.form.addtime.placeholder': 'Please select a date', + 'views.article.add.form.keywords': 'Keywords', + 'views.article.add.form.keywords.placeholder': 'Please enter Keywords', + 'views.article.add.form.keywords.minmax': '2 to 50 characters in length', + 'views.article.add.form.description': 'Description', + 'views.article.add.form.description.placeholder': 'Please enter Description', + 'views.article.add.form.description.minmax': '10 to 200 words in length', + 'views.article.add.form.tag': 'Tag', + 'views.article.add.form.tag.placeholder': 'Please search and select', + 'views.article.add.form.btn.submit': 'Submit', + + 'views.article.add.submit.confirm.title': 'Prompt', + 'views.article.add.submit.confirm.msg': 'Succeeded in adding article!', + 'views.article.add.submit.confirm.btn1': 'Continue to add', + 'views.article.add.submit.confirm.btn2': 'Back to list', + + +}; \ No newline at end of file diff --git a/packages/article/src/views/add/locales/zh-CN.ts b/packages/article/src/views/add/locales/zh-CN.ts new file mode 100644 index 0000000..832f459 --- /dev/null +++ b/packages/article/src/views/add/locales/zh-CN.ts @@ -0,0 +1,46 @@ +export default { + 'views.article.add.header.title': '随笔新增', + 'views.article.add.base.title': '基本信息', + 'views.article.add.pic.title': '缩略图', + 'views.article.add.pic.tips': '最多选择 4 张图片,请上传处理好的缩略图', + 'views.article.add.content.title': '详细内容', + + 'views.article.add.articlerec.title': '推荐随笔', + 'views.article.add.articlerec.tips': '最多选择 10 条随笔', + 'views.article.add.articlerec.btn.show': '新增推荐', + 'views.article.add.articlerec.btn.del': '移除', + 'views.article.add.articlerec.table.column.index': '序号', + 'views.article.add.articlerec.table.column.id': 'ID', + 'views.article.add.articlerec.table.column.title': '标题', + 'views.article.add.articlerec.table.column.addtime': '发布时间', + 'views.article.add.articlerec.table.column.action': '操作', + 'views.article.add.articlerec.drawer.title': '选择推荐的随笔', + 'views.article.add.articlerec.drawer.action': '操作', + 'views.article.add.articlerec.drawer.btn1': '已选择', + 'views.article.add.articlerec.drawer.btn2': '选择', + 'views.article.add.articlerec.choose.success': '选择成功!', + + 'views.article.add.form.title': '标题', + 'views.article.add.form.title.placeholder': '请输入标题', + 'views.article.add.form.title.minmax': '长度在 5 到 100 个字', + 'views.article.add.form.category': '分类', + 'views.article.add.form.category.placeholder': '请选择分类', + 'views.article.add.form.addtime': '发布时间', + 'views.article.add.form.addtime.placeholder': '请选择日期', + 'views.article.add.form.keywords': 'Keywords', + 'views.article.add.form.keywords.placeholder': '请输入Keywords', + 'views.article.add.form.keywords.minmax': '长度在 2 到 50 个字', + 'views.article.add.form.description': 'Description', + 'views.article.add.form.description.placeholder': '请输入Description', + 'views.article.add.form.description.minmax': '长度在 10 到 200 个字', + 'views.article.add.form.tag': '标签', + 'views.article.add.form.tag.placeholder': '请搜索选择', + 'views.article.add.form.btn.submit': '提交', + + 'views.article.add.submit.confirm.title': '提示', + 'views.article.add.submit.confirm.msg': '新增随笔成功!', + 'views.article.add.submit.confirm.btn1': '继续新增', + 'views.article.add.submit.confirm.btn2': '返回列表', + + +}; \ No newline at end of file diff --git a/packages/article/src/views/add/locales/zh-TW.ts b/packages/article/src/views/add/locales/zh-TW.ts new file mode 100644 index 0000000..cb08995 --- /dev/null +++ b/packages/article/src/views/add/locales/zh-TW.ts @@ -0,0 +1,46 @@ +export default { + 'views.article.add.header.title': '隨筆新增', + 'views.article.add.base.title': '基本信息', + 'views.article.add.pic.title': '縮略圖', + 'views.article.add.pic.tips': '最多選擇 4 張圖片,請上傳處理好的縮略圖', + 'views.article.add.content.title': '詳細內容', + + 'views.article.add.articlerec.title': '推薦隨筆', + 'views.article.add.articlerec.tips': '最多選擇 10 條隨筆', + 'views.article.add.articlerec.btn.show': '新增推薦', + 'views.article.add.articlerec.btn.del': '移除', + 'views.article.add.articlerec.table.column.index': '序號', + 'views.article.add.articlerec.table.column.id': 'ID', + 'views.article.add.articlerec.table.column.title': '標題', + 'views.article.add.articlerec.table.column.addtime': '發布時間', + 'views.article.add.articlerec.table.column.action': '操作', + 'views.article.add.articlerec.drawer.title': '選擇推薦的隨筆', + 'views.article.add.articlerec.drawer.action': '操作', + 'views.article.add.articlerec.drawer.btn1': '已選擇', + 'views.article.add.articlerec.drawer.btn2': '選擇', + 'views.article.add.articlerec.choose.success': '選擇成功!', + + 'views.article.add.form.title': '標題', + 'views.article.add.form.title.placeholder': '請輸入標題', + 'views.article.add.form.title.minmax': '長度在 5 到 100 個字', + 'views.article.add.form.category': '分類', + 'views.article.add.form.category.placeholder': '請選擇分類', + 'views.article.add.form.addtime': '發布時間', + 'views.article.add.form.addtime.placeholder': '請選擇日期', + 'views.article.add.form.keywords': 'Keywords', + 'views.article.add.form.keywords.placeholder': '請輸入Keywords', + 'views.article.add.form.keywords.minmax': '長度在 2 到 50 個字', + 'views.article.add.form.description': 'Description', + 'views.article.add.form.description.placeholder': '請輸入Description', + 'views.article.add.form.description.minmax': '長度在 10 到 200 個字', + 'views.article.add.form.tag': '標簽', + 'views.article.add.form.tag.placeholder': '請搜索選擇', + 'views.article.add.form.btn.submit': '提交', + + 'views.article.add.submit.confirm.title': '提示', + 'views.article.add.submit.confirm.msg': '新增隨筆成功!', + 'views.article.add.submit.confirm.btn1': '繼續新增', + 'views.article.add.submit.confirm.btn2': '返回列表', + + +}; \ No newline at end of file diff --git a/packages/article/src/views/add/service.ts b/packages/article/src/views/add/service.ts new file mode 100644 index 0000000..f3a4669 --- /dev/null +++ b/packages/article/src/views/add/service.ts @@ -0,0 +1,18 @@ +import request from '@/utils/request'; +import { DataItem } from './data.d'; + +/** + * 随笔管理 - 新增 + * @param data 请求参数 + * @returns + * @author LiQingSong + */ +export async function articleAdd(data?: DataItem): Promise { + return request({ + url: '/articles', + method: 'post', + data, + }); +} + + diff --git a/packages/article/src/views/analysis/chartcard/data.d.ts b/packages/article/src/views/analysis/chartcard/data.d.ts new file mode 100644 index 0000000..05a574e --- /dev/null +++ b/packages/article/src/views/analysis/chartcard/data.d.ts @@ -0,0 +1,7 @@ + +export interface ArticleChartDataType { + total: number; + num: number; + week: number; + day: number; +} diff --git a/packages/article/src/views/analysis/chartcard/index.vue b/packages/article/src/views/analysis/chartcard/index.vue new file mode 100644 index 0000000..43f5aff --- /dev/null +++ b/packages/article/src/views/analysis/chartcard/index.vue @@ -0,0 +1,100 @@ + + + diff --git a/packages/article/src/views/analysis/chartcard/locales/en-US.ts b/packages/article/src/views/analysis/chartcard/locales/en-US.ts new file mode 100644 index 0000000..3506208 --- /dev/null +++ b/packages/article/src/views/analysis/chartcard/locales/en-US.ts @@ -0,0 +1,9 @@ +export default { + 'page.analysis.chartcard.text-day': 'Day', + 'page.analysis.chartcard.text-total': 'Total', + 'page.analysis.chartcard.text-daycompare': 'Day Year-on-year', + 'page.analysis.chartcard.text-weekcompare': 'Week Year-on-year', + 'page.analysis.chartcard.articlechartcard.card-title': 'Essays', + + +}; diff --git a/packages/article/src/views/analysis/chartcard/locales/zh-CN.ts b/packages/article/src/views/analysis/chartcard/locales/zh-CN.ts new file mode 100644 index 0000000..6c7d850 --- /dev/null +++ b/packages/article/src/views/analysis/chartcard/locales/zh-CN.ts @@ -0,0 +1,7 @@ +export default { + 'page.analysis.chartcard.text-day': '日', + 'page.analysis.chartcard.text-total': '总数量', + 'page.analysis.chartcard.text-daycompare': '日同比', + 'page.analysis.chartcard.text-weekcompare': '周同比', + 'page.analysis.chartcard.articlechartcard.card-title': '随笔', +}; diff --git a/packages/article/src/views/analysis/chartcard/locales/zh-TW.ts b/packages/article/src/views/analysis/chartcard/locales/zh-TW.ts new file mode 100644 index 0000000..8ba6311 --- /dev/null +++ b/packages/article/src/views/analysis/chartcard/locales/zh-TW.ts @@ -0,0 +1,9 @@ +export default { + 'page.analysis.chartcard.text-day': '日', + 'page.analysis.chartcard.text-total': '總數量', + 'page.analysis.chartcard.text-daycompare': '日同比', + 'page.analysis.chartcard.text-weekcompare': '周同比', + 'page.analysis.chartcard.articlechartcard.card-title': '隨筆', + + +}; diff --git a/packages/article/src/views/analysis/chartcard/service.ts b/packages/article/src/views/analysis/chartcard/service.ts new file mode 100644 index 0000000..716666d --- /dev/null +++ b/packages/article/src/views/analysis/chartcard/service.ts @@ -0,0 +1,8 @@ +import request from '@/utils/request'; + +export async function dailynewArticles(): Promise { + return request({ + url: '/stats/articles/dailynew', + method: 'get' + }); +} diff --git a/packages/article/src/views/analysis/hitcard/data.d.ts b/packages/article/src/views/analysis/hitcard/data.d.ts new file mode 100644 index 0000000..363b696 --- /dev/null +++ b/packages/article/src/views/analysis/hitcard/data.d.ts @@ -0,0 +1,24 @@ + +export interface PaginationConfig { + total: number; + current: number; + pageSize: number; + showSizeChanger: boolean; +} + +export interface TableListQueryParams { + page: number; + per: number; + sort?: number; +} + +export interface TableListItem { + id: number; + title: string; + hit: number; +} + +export interface ArticleHitDataType { + list: TableListItem[]; + pagination: PaginationConfig; +} diff --git a/packages/article/src/views/analysis/hitcard/index.vue b/packages/article/src/views/analysis/hitcard/index.vue new file mode 100644 index 0000000..e9056f5 --- /dev/null +++ b/packages/article/src/views/analysis/hitcard/index.vue @@ -0,0 +1,124 @@ + + + diff --git a/packages/article/src/views/analysis/hitcard/locales/en-US.ts b/packages/article/src/views/analysis/hitcard/locales/en-US.ts new file mode 100644 index 0000000..6631207 --- /dev/null +++ b/packages/article/src/views/analysis/hitcard/locales/en-US.ts @@ -0,0 +1,6 @@ +export default { + 'page.analysis.articlehitcard.card-title': 'Essay Traffic Ranking', + 'page.analysis.articlehitcard.card.table-column-number': 'Serial number', + 'page.analysis.articlehitcard.card.table-column-title': 'Title', + 'page.analysis.articlehitcard.card.table-column-hit': 'Hits', +}; diff --git a/packages/article/src/views/analysis/hitcard/locales/zh-CN.ts b/packages/article/src/views/analysis/hitcard/locales/zh-CN.ts new file mode 100644 index 0000000..ca8f9f4 --- /dev/null +++ b/packages/article/src/views/analysis/hitcard/locales/zh-CN.ts @@ -0,0 +1,6 @@ +export default { + 'page.analysis.articlehitcard.card-title': '随笔浏览量排行', + 'page.analysis.articlehitcard.card.table-column-number': '序号', + 'page.analysis.articlehitcard.card.table-column-title': '标题', + 'page.analysis.articlehitcard.card.table-column-hit': '浏览量', +}; diff --git a/packages/article/src/views/analysis/hitcard/locales/zh-TW.ts b/packages/article/src/views/analysis/hitcard/locales/zh-TW.ts new file mode 100644 index 0000000..ee0616e --- /dev/null +++ b/packages/article/src/views/analysis/hitcard/locales/zh-TW.ts @@ -0,0 +1,6 @@ +export default { + 'page.analysis.articlehitcard.card-title': '隨筆瀏覽量排行', + 'page.analysis.articlehitcard.card.table-column-number': '序號', + 'page.analysis.articlehitcard.card.table-column-title': '標題', + 'page.analysis.articlehitcard.card.table-column-hit': '瀏覽量', +}; diff --git a/packages/article/src/views/analysis/hitcard/service.ts b/packages/article/src/views/analysis/hitcard/service.ts new file mode 100644 index 0000000..68313e1 --- /dev/null +++ b/packages/article/src/views/analysis/hitcard/service.ts @@ -0,0 +1,10 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from './data.d'; + +export async function articleHitQueryList(params?: TableListQueryParams): Promise { + return request({ + url: '/articles', + method: 'get', + params, + }); +} diff --git a/packages/article/src/views/category/data.d.ts b/packages/article/src/views/category/data.d.ts new file mode 100644 index 0000000..d96dd02 --- /dev/null +++ b/packages/article/src/views/category/data.d.ts @@ -0,0 +1,25 @@ +import { ColumnItem } from "@/components/TreeTable/data.d"; +export interface tablePropType { + loading: boolean; + column: ColumnItem[]; +} + +export interface CategoryItem { + id: number; + name: string; + alias: string; + title: string; + keywords: string; + description: string; + pid: number; +} + + +export interface DataItemParam { + name: string; + alias: string; + title: string; + keywords: string; + description: string; + pid: number; +} diff --git a/packages/article/src/views/category/index.vue b/packages/article/src/views/category/index.vue new file mode 100644 index 0000000..aef213b --- /dev/null +++ b/packages/article/src/views/category/index.vue @@ -0,0 +1,301 @@ + + diff --git a/packages/article/src/views/category/locales/en-US.ts b/packages/article/src/views/category/locales/en-US.ts new file mode 100644 index 0000000..c5519a2 --- /dev/null +++ b/packages/article/src/views/category/locales/en-US.ts @@ -0,0 +1,40 @@ +export default { + 'views.article.category.table.column.name': 'Category List', + 'views.article.category.table.column.alias': 'Category Alias', + 'views.article.category.table.column.action': 'Action', + + 'views.article.category.form.name': 'Category Name', + 'views.article.category.form.name.placeholder': 'Please enter a name', + 'views.article.category.form.name.max': 'Up to 8 characters', + 'views.article.category.form.alias': 'Category Alias', + 'views.article.category.form.alias.placeholder': 'Please enter an alias', + 'views.article.category.form.alias.test': 'Must be lowercase letters, numbers', + 'views.article.category.form.alias.max': 'Up to 10 characters', + 'views.article.category.form.title': 'Category Title', + 'views.article.category.form.title.placeholder': 'Please enter category Title', + 'views.article.category.form.title.max': '30 characters long', + 'views.article.category.form.keywords': 'Categories Keywords', + 'views.article.category.form.keywords.placeholder': 'Please enter category Keywords', + 'views.article.category.form.keywords.max': 'Up to 50 characters', + 'views.article.category.form.description': 'Category Description', + 'views.article.category.form.description.placeholder': 'Please enter category Description', + 'views.article.category.form.description.max': 'Up to 100 characters', + 'views.article.category.form.prename': 'Sub-headings', + + 'views.article.category.form.action.success': 'Successful operation!', + 'views.article.category.form.del.success': 'successfully deleted!', + + 'views.article.category.form.btn.add': 'Add a new category', + 'views.article.category.form.btn.add2': 'Add subordinate', + 'views.article.category.form.btn.edit': 'Edit', + 'views.article.category.form.btn.del': 'Delete', + 'views.article.category.form.btn.del.confirm': 'Are you sure to delete?', + + 'views.article.category.form.dialog.add.title': 'New category', + 'views.article.category.form.dialog.edit.title': 'Edit category', + 'views.article.category.form.dialog.btn.cancel': 'Cancel', + 'views.article.category.form.dialog.btn.save': 'Save', + + + +}; \ No newline at end of file diff --git a/packages/article/src/views/category/locales/zh-CN.ts b/packages/article/src/views/category/locales/zh-CN.ts new file mode 100644 index 0000000..cdcec3c --- /dev/null +++ b/packages/article/src/views/category/locales/zh-CN.ts @@ -0,0 +1,40 @@ +export default { + 'views.article.category.table.column.name': '分类列表', + 'views.article.category.table.column.alias': '分类别名', + 'views.article.category.table.column.action': '操作', + + 'views.article.category.form.name': '分类名称', + 'views.article.category.form.name.placeholder': '请输入名称', + 'views.article.category.form.name.max': '最长 8 个字', + 'views.article.category.form.alias': '分类别名', + 'views.article.category.form.alias.placeholder': '请输入别名', + 'views.article.category.form.alias.test': '必须是小写字母、数字', + 'views.article.category.form.alias.max': '最长 10 个字符', + 'views.article.category.form.title': '分类Title', + 'views.article.category.form.title.placeholder': '请输入分类Title', + 'views.article.category.form.title.max': '最长 30 个字', + 'views.article.category.form.keywords': '分类Keywords', + 'views.article.category.form.keywords.placeholder': '请输入分类Keywords', + 'views.article.category.form.keywords.max': '最长 50 个字', + 'views.article.category.form.description': '分类Description', + 'views.article.category.form.description.placeholder': '请输入分类Description', + 'views.article.category.form.description.max': '最长 100 个字', + 'views.article.category.form.prename': '上级分类', + + 'views.article.category.form.action.success': '操作成功!', + 'views.article.category.form.del.success': '删除成功!', + + 'views.article.category.form.btn.add': '新增一级分类', + 'views.article.category.form.btn.add2': '新增下级', + 'views.article.category.form.btn.edit': '修改', + 'views.article.category.form.btn.del': '删除', + 'views.article.category.form.btn.del.confirm': '是否确认删除?', + + 'views.article.category.form.dialog.add.title': '新增分类', + 'views.article.category.form.dialog.edit.title': '编辑分类', + 'views.article.category.form.dialog.btn.cancel': '取消', + 'views.article.category.form.dialog.btn.save': '保存', + + + +}; \ No newline at end of file diff --git a/packages/article/src/views/category/locales/zh-TW.ts b/packages/article/src/views/category/locales/zh-TW.ts new file mode 100644 index 0000000..02fbb80 --- /dev/null +++ b/packages/article/src/views/category/locales/zh-TW.ts @@ -0,0 +1,40 @@ +export default { + 'views.article.category.table.column.name': '分類列表', + 'views.article.category.table.column.alias': '分類別名', + 'views.article.category.table.column.action': '操作', + + 'views.article.category.form.name': '分類名稱', + 'views.article.category.form.name.placeholder': '請輸入名稱', + 'views.article.category.form.name.max': '最長 8 個字', + 'views.article.category.form.alias': '分類別名', + 'views.article.category.form.alias.placeholder': '請輸入別名', + 'views.article.category.form.alias.test': '必須是小寫字母、數字', + 'views.article.category.form.alias.max': '最長 10 個字符', + 'views.article.category.form.title': '分類Title', + 'views.article.category.form.title.placeholder': '請輸入分類Title', + 'views.article.category.form.title.max': '最長 30 個字', + 'views.article.category.form.keywords': '分類Keywords', + 'views.article.category.form.keywords.placeholder': '請輸入分類Keywords', + 'views.article.category.form.keywords.max': '最長 50 個字', + 'views.article.category.form.description': '分類Description', + 'views.article.category.form.description.placeholder': '請輸入分類Description', + 'views.article.category.form.description.max': '最長 100 個字', + 'views.article.category.form.prename': '上級分類', + + 'views.article.category.form.action.success': '操作成功!', + 'views.article.category.form.del.success': '刪除成功!', + + 'views.article.category.form.btn.add': '新增一級分類', + 'views.article.category.form.btn.add2': '新增下級', + 'views.article.category.form.btn.edit': '修改', + 'views.article.category.form.btn.del': '刪除', + 'views.article.category.form.btn.del.confirm': '是否確認刪除?', + + 'views.article.category.form.dialog.add.title': '新增分類', + 'views.article.category.form.dialog.edit.title': '編輯分類', + 'views.article.category.form.dialog.btn.cancel': '取消', + 'views.article.category.form.dialog.btn.save': '保存', + + + +}; \ No newline at end of file diff --git a/packages/article/src/views/category/service.ts b/packages/article/src/views/category/service.ts new file mode 100644 index 0000000..2be0c10 --- /dev/null +++ b/packages/article/src/views/category/service.ts @@ -0,0 +1,38 @@ +import request from '@/utils/request'; +import { DataItemParam } from "./data.d"; + + +export async function queryList(pid: number): Promise { + return request({ + url: '/article/categorys', + method: 'get', + params: { + pid + } + }); +} + +export async function add(data: DataItemParam): Promise { + return request({ + url: '/article/categorys', + method: 'post', + data + }); +} + +export async function edit(id: number,data: DataItemParam): Promise { + return request({ + url: '/article/categorys/' + id, + method: 'put', + data + }); +} + +export async function remove(id: number): Promise { + return request({ + url: '/article/categorys/' + id, + method: 'delete' + }); +} + + diff --git a/packages/article/src/views/edit/data.d.ts b/packages/article/src/views/edit/data.d.ts new file mode 100644 index 0000000..842e057 --- /dev/null +++ b/packages/article/src/views/edit/data.d.ts @@ -0,0 +1,7 @@ +import { DataItem as AddDataItem, FormItem as AddFormItem, ArticleRec as AddArticleRec } from "../add/data.d"; + +export type DataItem = AddDataItem; + +export type FormItem = AddFormItem; + +export type ArticleRec = AddArticleRec; \ No newline at end of file diff --git a/packages/article/src/views/edit/index.vue b/packages/article/src/views/edit/index.vue new file mode 100644 index 0000000..500a74c --- /dev/null +++ b/packages/article/src/views/edit/index.vue @@ -0,0 +1,328 @@ + + diff --git a/packages/article/src/views/edit/locales/en-US.ts b/packages/article/src/views/edit/locales/en-US.ts new file mode 100644 index 0000000..b6d017d --- /dev/null +++ b/packages/article/src/views/edit/locales/en-US.ts @@ -0,0 +1,43 @@ +export default { + 'views.article.edit.header.title': 'Article Edit', + 'views.article.edit.base.title': 'Basic Information', + 'views.article.edit.pic.title': 'Thumbnail', + 'views.article.edit.pic.tips': 'Choose up to 4 pictures, please upload the processed thumbnails', + 'views.article.edit.content.title': 'Details', + + 'views.article.edit.articlerec.title': 'Recommended article', + 'views.article.edit.articlerec.tips': 'Select up to 10 article', + 'views.article.edit.articlerec.btn.show': 'New recommendation', + 'views.article.edit.articlerec.btn.del': 'Remove', + 'views.article.edit.articlerec.table.column.index': 'Order', + 'views.article.edit.articlerec.table.column.id': 'ID', + 'views.article.edit.articlerec.table.column.title': 'Title', + 'views.article.edit.articlerec.table.column.addtime': 'Release time', + 'views.article.edit.articlerec.table.column.action': 'Action', + 'views.article.edit.articlerec.drawer.title': 'Choose recommended article', + 'views.article.edit.articlerec.drawer.action': 'Action', + 'views.article.edit.articlerec.drawer.btn1': 'chosen', + 'views.article.edit.articlerec.drawer.btn2': 'choose', + 'views.article.edit.articlerec.choose.success': 'The choice is successful!', + + 'views.article.edit.form.title': 'Title', + 'views.article.edit.form.title.placeholder': 'Please enter a title', + 'views.article.edit.form.title.minmax': '5 to 100 characters long', + 'views.article.edit.form.category': 'Category', + 'views.article.edit.form.category.placeholder': 'please select a Category', + 'views.article.edit.form.addtime': 'Release time', + 'views.article.edit.form.addtime.placeholder': 'Please select a date', + 'views.article.edit.form.keywords': 'Keywords', + 'views.article.edit.form.keywords.placeholder': 'Please enter Keywords', + 'views.article.edit.form.keywords.minmax': '2 to 50 characters in length', + 'views.article.edit.form.description': 'Description', + 'views.article.edit.form.description.placeholder': 'Please enter Description', + 'views.article.edit.form.description.minmax': '10 to 200 words in length', + 'views.article.edit.form.tag': 'Tag', + 'views.article.edit.form.tag.placeholder': 'Please search and select', + 'views.article.edit.form.btn.submit': 'Submit', + + 'views.article.edit.submit.confirm.msg': 'Successfully modified!', + + +}; \ No newline at end of file diff --git a/packages/article/src/views/edit/locales/zh-CN.ts b/packages/article/src/views/edit/locales/zh-CN.ts new file mode 100644 index 0000000..5d4fd42 --- /dev/null +++ b/packages/article/src/views/edit/locales/zh-CN.ts @@ -0,0 +1,43 @@ +export default { + 'views.article.edit.header.title': '随笔修改', + 'views.article.edit.base.title': '基本信息', + 'views.article.edit.pic.title': '缩略图', + 'views.article.edit.pic.tips': '最多选择 4 张图片,请上传处理好的缩略图', + 'views.article.edit.content.title': '详细内容', + + 'views.article.edit.articlerec.title': '推荐随笔', + 'views.article.edit.articlerec.tips': '最多选择 10 条随笔', + 'views.article.edit.articlerec.btn.show': '新增推荐', + 'views.article.edit.articlerec.btn.del': '移除', + 'views.article.edit.articlerec.table.column.index': '序号', + 'views.article.edit.articlerec.table.column.id': 'ID', + 'views.article.edit.articlerec.table.column.title': '标题', + 'views.article.edit.articlerec.table.column.addtime': '发布时间', + 'views.article.edit.articlerec.table.column.action': '操作', + 'views.article.edit.articlerec.drawer.title': '选择推荐的随笔', + 'views.article.edit.articlerec.drawer.action': '操作', + 'views.article.edit.articlerec.drawer.btn1': '已选择', + 'views.article.edit.articlerec.drawer.btn2': '选择', + 'views.article.edit.articlerec.choose.success': '选择成功!', + + 'views.article.edit.form.title': '标题', + 'views.article.edit.form.title.placeholder': '请输入标题', + 'views.article.edit.form.title.minmax': '长度在 5 到 100 个字', + 'views.article.edit.form.category': '分类', + 'views.article.edit.form.category.placeholder': '请选择分类', + 'views.article.edit.form.addtime': '发布时间', + 'views.article.edit.form.addtime.placeholder': '请选择日期', + 'views.article.edit.form.keywords': 'Keywords', + 'views.article.edit.form.keywords.placeholder': '请输入Keywords', + 'views.article.edit.form.keywords.minmax': '长度在 2 到 50 个字', + 'views.article.edit.form.description': 'Description', + 'views.article.edit.form.description.placeholder': '请输入Description', + 'views.article.edit.form.description.minmax': '长度在 10 到 200 个字', + 'views.article.edit.form.tag': '标签', + 'views.article.edit.form.tag.placeholder': '请搜索选择', + 'views.article.edit.form.btn.submit': '提交', + + 'views.article.edit.submit.confirm.msg': '修改成功!', + + +}; \ No newline at end of file diff --git a/packages/article/src/views/edit/locales/zh-TW.ts b/packages/article/src/views/edit/locales/zh-TW.ts new file mode 100644 index 0000000..7437750 --- /dev/null +++ b/packages/article/src/views/edit/locales/zh-TW.ts @@ -0,0 +1,43 @@ +export default { + 'views.article.edit.header.title': '隨筆修改', + 'views.article.edit.base.title': '基本信息', + 'views.article.edit.pic.title': '縮略圖', + 'views.article.edit.pic.tips': '最多選擇 4 張圖片,請上傳處理好的縮略圖', + 'views.article.edit.content.title': '詳細內容', + + 'views.article.edit.articlerec.title': '推薦隨筆', + 'views.article.edit.articlerec.tips': '最多選擇 10 條隨筆', + 'views.article.edit.articlerec.btn.show': '新增推薦', + 'views.article.edit.articlerec.btn.del': '移除', + 'views.article.edit.articlerec.table.column.index': '序號', + 'views.article.edit.articlerec.table.column.id': 'ID', + 'views.article.edit.articlerec.table.column.title': '標題', + 'views.article.edit.articlerec.table.column.addtime': '發布時間', + 'views.article.edit.articlerec.table.column.action': '操作', + 'views.article.edit.articlerec.drawer.title': '選擇推薦的隨筆', + 'views.article.edit.articlerec.drawer.action': '操作', + 'views.article.edit.articlerec.drawer.btn1': '已選擇', + 'views.article.edit.articlerec.drawer.btn2': '選擇', + 'views.article.edit.articlerec.choose.success': '選擇成功!', + + 'views.article.edit.form.title': '標題', + 'views.article.edit.form.title.placeholder': '請輸入標題', + 'views.article.edit.form.title.minmax': '長度在 5 到 100 個字', + 'views.article.edit.form.category': '分類', + 'views.article.edit.form.category.placeholder': '請選擇分類', + 'views.article.edit.form.addtime': '發布時間', + 'views.article.edit.form.addtime.placeholder': '請選擇日期', + 'views.article.edit.form.keywords': 'Keywords', + 'views.article.edit.form.keywords.placeholder': '請輸入Keywords', + 'views.article.edit.form.keywords.minmax': '長度在 2 到 50 個字', + 'views.article.edit.form.description': 'Description', + 'views.article.edit.form.description.placeholder': '請輸入Description', + 'views.article.edit.form.description.minmax': '長度在 10 到 200 個字', + 'views.article.edit.form.tag': '標簽', + 'views.article.edit.form.tag.placeholder': '請搜索選擇', + 'views.article.edit.form.btn.submit': '提交', + + 'views.article.edit.submit.confirm.msg': '修改成功!', + + +}; \ No newline at end of file diff --git a/packages/article/src/views/edit/service.ts b/packages/article/src/views/edit/service.ts new file mode 100644 index 0000000..d2ab488 --- /dev/null +++ b/packages/article/src/views/edit/service.ts @@ -0,0 +1,33 @@ +import request from '@/utils/request'; +import { DataItem } from './data.d'; + +/** + * 随笔管理 - 编辑 + * @param id ID + * @param data 请求参数 + * @returns + * @author LiQingSong + */ +export async function articleEdit(id:number, data?: DataItem): Promise { + return request({ + url: '/articles/' + id, + method: 'put', + data + }); +} + + +/** + * 随笔管理 - 获取指定随笔 + * @param id ID + * @returns + * @author LiQingSong + */ +export async function articleDetail(id: number): Promise { + return request({ + url: '/articles/' + id, + method: 'get' + }); +} + + diff --git a/packages/article/src/views/home/index.vue b/packages/article/src/views/home/index.vue new file mode 100644 index 0000000..76c2925 --- /dev/null +++ b/packages/article/src/views/home/index.vue @@ -0,0 +1,7 @@ + + diff --git a/packages/article/src/views/list/components/SearchDrawer/data.d.ts b/packages/article/src/views/list/components/SearchDrawer/data.d.ts new file mode 100644 index 0000000..53ddafb --- /dev/null +++ b/packages/article/src/views/list/components/SearchDrawer/data.d.ts @@ -0,0 +1,22 @@ + +export interface SearchFormItem { + keywords: string; + category: number[]; + addtime: any; + tags: string[]; +} + +export interface SearchValues { + keywords: string; + categoryid: string; + addtimestart: string; + addtimeend: string; + tags: string; // 标签 , 链接的字符串 +} + +export interface SearchProps { + title?: string; + visible: boolean; + onReset: (values: SearchValues) => void; + onSubmit: (values: SearchValues) => void; +} diff --git a/packages/article/src/views/list/components/SearchDrawer/index.vue b/packages/article/src/views/list/components/SearchDrawer/index.vue new file mode 100644 index 0000000..56e6fcd --- /dev/null +++ b/packages/article/src/views/list/components/SearchDrawer/index.vue @@ -0,0 +1,134 @@ + + + diff --git a/packages/article/src/views/list/data.d.ts b/packages/article/src/views/list/data.d.ts new file mode 100644 index 0000000..a6a7fa9 --- /dev/null +++ b/packages/article/src/views/list/data.d.ts @@ -0,0 +1,33 @@ +import { PaginationConfig } from "@/components/ScreenTable/data.d"; +import { CategoryItem } from "../category/data.d"; + +export type Category = Pick; + +export interface TableListQueryParams { + page: number; + per: number; + keywords?: string; + categoryid?: string; + addtimestart?: string; + addtimeend?: string; + tags?: string; + sort?: number; + order?: number; + refresh?: string | number; +} + +export interface TableListItem { + id: number; + title: string; + category: Category; + addtime: string; + tag: string; + hit: number; + tags:? string[]; +} + +export interface TableDataType { + loading: boolean; + list: TableListItem[]; + pagination: PaginationConfig; +} \ No newline at end of file diff --git a/packages/article/src/views/list/index.vue b/packages/article/src/views/list/index.vue new file mode 100644 index 0000000..7b0bfa0 --- /dev/null +++ b/packages/article/src/views/list/index.vue @@ -0,0 +1,223 @@ + + + + diff --git a/packages/article/src/views/list/locales/en-US.ts b/packages/article/src/views/list/locales/en-US.ts new file mode 100644 index 0000000..b9f2c6b --- /dev/null +++ b/packages/article/src/views/list/locales/en-US.ts @@ -0,0 +1,28 @@ +export default { + 'views.article.list.button.add': 'New', + 'views.article.list.button.search': 'Advanced Search', + 'views.article.list.search.input.placeholder': 'Please enter search content', + 'views.article.list.table.column.index': 'Order', + 'views.article.list.table.column.title': 'Title', + 'views.article.list.table.column.category': 'Classify', + 'views.article.list.table.column.addtime': 'Add Time', + 'views.article.list.table.column.tags': 'Tag', + 'views.article.list.table.column.action': 'Action', + 'views.article.list.table.column.action.buttion.edit': 'Edit', + 'views.article.list.table.column.action.buttion.del': 'Delete', + 'views.article.list.table.column.action.buttion.del.popconfirm': 'Confirm deletion?', + 'views.article.list.table.column.action.buttion.del.success': 'Deleted successfully!', + + 'views.article.list.components.search.title': 'Advanced Search', + 'views.article.list.components.search.form.keywords': 'Keywords', + 'views.article.list.components.search.form.keywords.placeholder': 'Please enter keywords', + 'views.article.list.components.search.form.category': 'Classify', + 'views.article.list.components.search.form.category.placeholder': 'Please Choose', + 'views.article.list.components.search.form.addtime': 'Add Time', + 'views.article.list.components.search.form.addtime.placeholder.start': 'Start Date', + 'views.article.list.components.search.form.addtime.placeholder.end': 'End Date', + 'views.article.list.components.search.form.tags': 'Tag', + 'views.article.list.components.search.form.tags.placeholder': 'Please search for options', + 'views.article.list.components.search.form.button.reset': 'Reset', + 'views.article.list.components.search.form.button.primary': 'Search', +}; \ No newline at end of file diff --git a/packages/article/src/views/list/locales/zh-CN.ts b/packages/article/src/views/list/locales/zh-CN.ts new file mode 100644 index 0000000..ecc8a45 --- /dev/null +++ b/packages/article/src/views/list/locales/zh-CN.ts @@ -0,0 +1,28 @@ +export default { + 'views.article.list.button.add': '新增', + 'views.article.list.button.search': '高级搜索', + 'views.article.list.search.input.placeholder': '请输入搜索内容', + 'views.article.list.table.column.index': '序号', + 'views.article.list.table.column.title': '标题', + 'views.article.list.table.column.category': '分类', + 'views.article.list.table.column.addtime': '发布时间', + 'views.article.list.table.column.tags': '标签', + 'views.article.list.table.column.action': '操作', + 'views.article.list.table.column.action.buttion.edit': '修改', + 'views.article.list.table.column.action.buttion.del': '删除', + 'views.article.list.table.column.action.buttion.del.popconfirm': '是否确认删除?', + 'views.article.list.table.column.action.buttion.del.success': '删除成功!', + + 'views.article.list.components.search.title': '高级搜索', + 'views.article.list.components.search.form.keywords': '标题', + 'views.article.list.components.search.form.keywords.placeholder': '请输入标题', + 'views.article.list.components.search.form.category': '分类', + 'views.article.list.components.search.form.category.placeholder': '请选择', + 'views.article.list.components.search.form.addtime': '发布时间', + 'views.article.list.components.search.form.addtime.placeholder.start': '开始日期', + 'views.article.list.components.search.form.addtime.placeholder.end': '结束日期', + 'views.article.list.components.search.form.tags': '标签', + 'views.article.list.components.search.form.tags.placeholder': '请搜索选择', + 'views.article.list.components.search.form.button.reset': '重置', + 'views.article.list.components.search.form.button.primary': '搜索', +}; \ No newline at end of file diff --git a/packages/article/src/views/list/locales/zh-TW.ts b/packages/article/src/views/list/locales/zh-TW.ts new file mode 100644 index 0000000..962f269 --- /dev/null +++ b/packages/article/src/views/list/locales/zh-TW.ts @@ -0,0 +1,28 @@ +export default { + 'views.article.list.button.add': '新增', + 'views.article.list.button.search': '高級搜索', + 'views.article.list.search.input.placeholder': '請輸入搜索內容', + 'views.article.list.table.column.index': '序號', + 'views.article.list.table.column.title': '標題', + 'views.article.list.table.column.category': '分類', + 'views.article.list.table.column.addtime': '發布時間', + 'views.article.list.table.column.tags': '標簽', + 'views.article.list.table.column.action': '操作', + 'views.article.list.table.column.action.buttion.edit': '修改', + 'views.article.list.table.column.action.buttion.del': '刪除', + 'views.article.list.table.column.action.buttion.del.popconfirm': '是否確認刪除?', + 'views.article.list.table.column.action.buttion.del.success': '刪除成功!', + + 'views.article.list.components.search.title': '高級搜索', + 'views.article.list.components.search.form.keywords': '標題', + 'views.article.list.components.search.form.keywords.placeholder': '請輸入標題', + 'views.article.list.components.search.form.category': '分類', + 'views.article.list.components.search.form.category.placeholder': '請選擇', + 'views.article.list.components.search.form.addtime': '發布時間', + 'views.article.list.components.search.form.addtime.placeholder.start': '開始日期', + 'views.article.list.components.search.form.addtime.placeholder.end': '結束日期', + 'views.article.list.components.search.form.tags': '標簽', + 'views.article.list.components.search.form.tags.placeholder': '請搜索選擇', + 'views.article.list.components.search.form.button.reset': '重置', + 'views.article.list.components.search.form.button.primary': '搜索', +}; \ No newline at end of file diff --git a/packages/article/src/views/list/service.ts b/packages/article/src/views/list/service.ts new file mode 100644 index 0000000..cb39a7a --- /dev/null +++ b/packages/article/src/views/list/service.ts @@ -0,0 +1,30 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from './data.d'; + +/** + * 随笔管理 - 列表 - 有分页 + * @param params 请求参数 + * @returns + * @author LiQingSong + */ +export async function queryList(params?: TableListQueryParams): Promise { + return request({ + url: '/articles', + method: 'get', + params, + }); +} + +/** + * 随笔管理 - 删除 + * @param id ID + * @returns + * @author LiQingSong + */ +export async function removeData(id: number): Promise { + return request({ + url: `/articles/${id}`, + method: 'delete', + }); +} + diff --git a/packages/article/src/views/refresh/index.vue b/packages/article/src/views/refresh/index.vue new file mode 100644 index 0000000..c2b19a5 --- /dev/null +++ b/packages/article/src/views/refresh/index.vue @@ -0,0 +1,17 @@ + diff --git a/packages/article/tests/unit/example.spec.ts b/packages/article/tests/unit/example.spec.ts new file mode 100644 index 0000000..4b21ca7 --- /dev/null +++ b/packages/article/tests/unit/example.spec.ts @@ -0,0 +1,12 @@ +import { shallowMount } from '@vue/test-utils' +import HelloWorld from '@/components/HelloWorld.vue' + +describe('HelloWorld.vue', () => { + it('renders props.msg when passed', () => { + const msg = 'new message' + const wrapper = shallowMount(HelloWorld, { + props: { msg } + }) + expect(wrapper.text()).toMatch(msg) + }) +}) diff --git a/packages/article/tsconfig.json b/packages/article/tsconfig.json new file mode 100644 index 0000000..e2fadb7 --- /dev/null +++ b/packages/article/tsconfig.json @@ -0,0 +1,43 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "noImplicitAny": false, + "baseUrl": ".", + "types": [ + "webpack-env", + "jest", + "element-plus/global" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/article/vue.config.js b/packages/article/vue.config.js new file mode 100644 index 0000000..df6199f --- /dev/null +++ b/packages/article/vue.config.js @@ -0,0 +1,129 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ + +const { stringified } = require('../../scripts/server/env'); +const { NODE_ENV, VUE_APP_PORT, VUE_APP_MOCK } = process.env; + +const port = process.env.MICRO_ARTICLE_PORT || VUE_APP_PORT || 8077; +const packageName = process.env.MICRO_ARTICLE_ROOT_DIR || 'article'; + +let publicPath = `//${process.env.MICRO_ARTICLE_HOST}:${port}`; +let vuePublicPath = '/' +if(process.env.NODE_ENV === 'production') { + vuePublicPath = publicPath = `/${process.env.MICRO_BUILD_CHILD_NAME}/${packageName}/`; +} + +const bodyParser = require('body-parser') +const mockServer = require('./src/utils/mock/server'); + +module.exports = { + publicPath: vuePublicPath, + outputDir: 'dist', + productionSourceMap: false, + devServer: { + port, + // 配置反向代理 + /* + proxy: { + '/api': { + target: '', + ws: true, + changeOrigin: true + }, + '/foo': { + target: '' + } + }, + */ + before: function(app, server) { + if(NODE_ENV === 'development' && VUE_APP_MOCK === 'true') { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + // create application/json parser + app.use(bodyParser.json()); + // create application/x-www-form-urlencoded parser + app.use(bodyParser.urlencoded({ extended: false})); + mockServer(app); + } + }, + // 关闭主机检查,使微应用可以被 fetch,否则会提示生命周期未注册 + disableHostCheck: true, + // 配置跨域请求头,解决开发环境的跨域问题 + headers: { + 'Access-Control-Allow-Origin': '*' + } + }, + // 修改webpack的配置 + configureWebpack: { + // 不需要打包的插件 + externals: { + // 'vue': 'Vue', + // 'vue-router': 'VueRouter', + // 'element-ui': 'ELEMENT' + }, + output: { + // 微应用的包名,这里与主应用中注册的微应用名称一致 + library: `${packageName}-[name]`, + // 将你的 library 打包成 umd 库格式,暴露为所有的模块定义下都可运行的方式 + libraryTarget: 'umd', + // 按需加载相关,设置为 webpackJsonp_VueMicroApp 即可 + jsonpFunction: `webpackJsonp_${packageName}`, + }, + }, + chainWebpack(config) { + + // 内置的 svg Rule 添加 exclude + config.module + .rule('svg') + .exclude.add(/iconsvg/) + .end(); + + // 添加 svg-sprite-loader Rule + config.module + .rule('svg-sprite-loader') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader'); + + // 添加 svgo Rule + config.module + .rule('svgo') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svgo-loader') + .loader('svgo-loader') + .options({ + // externalConfig 配置特殊不是相对路径,起始路径是根目录 + externalConfig: './src/assets/iconsvg/svgo.yml', + }); + + + // 针对图片修改publicPath + config.module + .rule('images') + .use('url-loader') + .loader('url-loader') + .options({ + limit: 4096, // 小于4kb将会被打包成 base64 + fallback: { + loader: 'file-loader', + options: { + publicPath + }, + }, + }); + + // 添加自定义环境变量 + config.plugin('define') + .tap(args => { + args[0]['process.env'] = { + ...args[0]['process.env'], + ...stringified + } + return args + }) + + } +} diff --git a/packages/links/.browserslistrc b/packages/links/.browserslistrc new file mode 100644 index 0000000..214388f --- /dev/null +++ b/packages/links/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/packages/links/.editorconfig b/packages/links/.editorconfig new file mode 100644 index 0000000..ed19d9c --- /dev/null +++ b/packages/links/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/packages/links/.env.development b/packages/links/.env.development new file mode 100644 index 0000000..4952692 --- /dev/null +++ b/packages/links/.env.development @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'development' + +# devServer port +VUE_APP_PORT=8078 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = true + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/packages/links/.env.production b/packages/links/.env.production new file mode 100644 index 0000000..619c2a5 --- /dev/null +++ b/packages/links/.env.production @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'production' + +# devServer port +VUE_APP_PORT=8078 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = false + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/packages/links/.eslintignore b/packages/links/.eslintignore new file mode 100644 index 0000000..87160f7 --- /dev/null +++ b/packages/links/.eslintignore @@ -0,0 +1 @@ +../scripts diff --git a/packages/links/.eslintrc.js b/packages/links/.eslintrc.js new file mode 100644 index 0000000..36d681f --- /dev/null +++ b/packages/links/.eslintrc.js @@ -0,0 +1,45 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/typescript/recommended' + ], + parserOptions: { + ecmaVersion: 2020 + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + '@typescript-eslint/no-explicit-any': ['off'], + '@typescript-eslint/no-unused-vars': ['off'], + '@typescript-eslint/ban-types': ['off'], + '@typescript-eslint/no-empty-interface': ['off'], + '@typescript-eslint/explicit-module-boundary-types': ['off'], + '@typescript-eslint/no-empty-function': ['off'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + }, + { + files: [ + './mock/*.{j,t}s?(x)', + './src/utils/mock/*.{j,t}s?(x)' + ], + rules: { + 'no-var': ['off'], + '@typescript-eslint/no-var-requires': ['off'], + } + } + ] +} diff --git a/packages/links/.gitignore b/packages/links/.gitignore new file mode 100644 index 0000000..5d55bb1 --- /dev/null +++ b/packages/links/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +yarn.lock + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/links/LICENSE b/packages/links/LICENSE new file mode 100644 index 0000000..0f21b74 --- /dev/null +++ b/packages/links/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 LiQingSong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/links/README.md b/packages/links/README.md new file mode 100644 index 0000000..1e09b5d --- /dev/null +++ b/packages/links/README.md @@ -0,0 +1,39 @@ +# packages/links + +此分支是 Webpack + Vue3.x + antd 版本 , Vite 版本请查看 vite (分支)([github](https://github.com/lqsong/admin-antd-vue/tree/vite)、[gitee](https://gitee.com/lqsong/admin-antd-vue/tree/vite)) + +packages/links 基于 admin-antd-vue ([github](https://github.com/lqsong/admin-antd-vue)、[gitee](https://gitee.com/lqsong/admin-antd-vue)开发 + + +## 使用文档 + + - [http://admin-vue3-micro-qiankun.liqingsong.cc](http://admin-vue3-micro-qiankun.liqingsong.cc) + - [Github](https://github.com/lqsong/admin-vue3-micro-qiankun) + - [Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun) + +## admin-antd-vue 使用文档 + + - [http://admin-antd-vue.liqingsong.cc](http://admin-antd-vue.liqingsong.cc/) + - [Github](https://github.com/lqsong/admin-antd-vue) + - [Gitee](https://gitee.com/lqsong/admin-antd-vue) + + +## 后台前端解决方案列表 + + - admin-element-vue([GitHub](https://github.com/lqsong/admin-element-vue)、[Gitee](https://gitee.com/lqsong/admin-element-vue)) + - admin-antd-vue([GitHub](https://github.com/lqsong/admin-antd-vue)、[Gitee](https://gitee.com/lqsong/admin-antd-vue)) + - admin-antd-react([GitHub](https://github.com/lqsong/admin-antd-react)、[Gitee](https://gitee.com/lqsong/admin-antd-react)) + - electron-admin-element-vue([GitHub](https://github.com/lqsong/electron-admin-element-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-element-vue)) + - electron-admin-antd-vue([GitHub](https://github.com/lqsong/electron-admin-antd-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-vue)) + - electron-admin-antd-react([GitHub](https://github.com/lqsong/electron-admin-antd-react)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-react)) + - admin-vue3-micro-qiankun([GitHub](https://github.com/lqsong/admin-vue3-micro-qiankun)、[Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun)) + + +## 捐赠 + +如果你觉得这个项目帮助到了你,请帮助点击 Star,你也可以请作者喝咖啡表示鼓励. + +**ALIPAY** | **WECHAT** +:-------------------------:|:-------------------------: +![Alipay](http://uploads.liqingsong.cc/20210430/f62d2436-8d92-407d-977f-35f1e4b891fc.png) | ![Wechat](http://uploads.liqingsong.cc/20210430/3e24efa9-8e79-4606-9bd9-8215ce1235ac.png) + diff --git a/packages/links/babel.config.js b/packages/links/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/packages/links/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/packages/links/jest.config.js b/packages/links/jest.config.js new file mode 100644 index 0000000..d7f13cc --- /dev/null +++ b/packages/links/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel', + transform: { + '^.+\\.vue$': 'vue-jest' + } +} diff --git a/packages/links/mock/global.js b/packages/links/mock/global.js new file mode 100644 index 0000000..48dfcda --- /dev/null +++ b/packages/links/mock/global.js @@ -0,0 +1,39 @@ +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`POST ${VUE_APP_APIHOST || ''}/uploads`] = (req, res) => { + res.send({ + code: 0, + data: { + id: 1, + url: + 'http://uploads.liqingsong.cc/20200531/583057e8-8bab-4eee-b5a0-bec915089c0c.jpg', + name: 'xcx.jpg', + }, + msg: '', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/500`] = (req, res) => { + res.status(500).send({ + timestamp: 1513932555104, + status: 500, + error: 'error', + message: 'error', + path: '/500', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/404`] = (req, res) => { + res.status(404).send({ + timestamp: 1513932643431, + status: 404, + error: 'Not Found', + message: 'No message available', + path: '/404', + }); +}; + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/packages/links/mock/home.js b/packages/links/mock/home.js new file mode 100644 index 0000000..7520ea8 --- /dev/null +++ b/packages/links/mock/home.js @@ -0,0 +1,140 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles/dailynew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + day: mockjs.mock('@float(-10,15,0,2)'), + week: mockjs.mock('@float(-10,15,0,2)'), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/works/weeknew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|7': ['03-01'], + 'num|7': ['@integer(0,3)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/topics/monthnew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|30': ['03-01'], + 'num|30': ['@integer(0,2)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/links/annualnew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + chart: mockjs.mock({ + 'day|12': ['2019-03'], + 'num|12': ['@integer(0,8)'], + }), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/searchs/keywords`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + name: '@ctitle(4,8)', + hit: '@integer(1000,10000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/tags`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + name: '@ctitle(4,6)', + id: '@integer(1)', + pinyin: '@word(10,20)', + hit: '@integer(1000,10000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + category: { + id: '@integer(1)', + alias: '@word(4)', + name: '@cword(4)', + }, + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/works`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/packages/links/mock/user.js b/packages/links/mock/user.js new file mode 100644 index 0000000..45bf6fc --- /dev/null +++ b/packages/links/mock/user.js @@ -0,0 +1,89 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const ajaxHeadersTokenKey = 'x-token'; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST}/user/info`] = (req, res) => { + const headers = req.headers; + if (headers[ajaxHeadersTokenKey] === 'admin') { + res.send({ + code: 0, + data: { + id: 1, + name: 'Admins', + avatar: '', + roles: ['admin'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'user') { + res.send({ + code: 0, + data: { + id: 2, + name: 'Users', + avatar: '', + roles: ['user'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'test') { + res.send({ + code: 0, + data: { + id: 3, + name: 'Tests', + avatar: '', + roles: ['test'], + }, + }); + } else { + res.send({ + code: 10002, + data: {}, + msg: '未登录', + }); + } + +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/user/message`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock('@integer(0,99)'), + }); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/login`] = (req, res) => { + const { password, username } = req.body; + const send = { code: 0, data: {}, msg: '' }; + if (username === 'admin' && password === '123456') { + send['data'] = { + token: 'admin', + }; + } else if (username === 'user' && password === '123456') { + send['data'] = { + token: 'user', + }; + } else if (username === 'test' && password === '123456') { + send['data'] = { + token: 'test', + }; + } else { + send['code'] = 201; + send['msg'] = 'Wrong username or password'; + } + + res.send(send); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/register`] = (req, res) => { + res.send({ + code: 0, + data: '', + msg: '', + }); +}; + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/packages/links/package.json b/packages/links/package.json new file mode 100644 index 0000000..6c701aa --- /dev/null +++ b/packages/links/package.json @@ -0,0 +1,83 @@ +{ + "name": "admin-vue3-micro-qiankun", + "description": "Micro front-end Admin based on Qiankun, vue3.x, admin-element-vue, admin-antd-vue project architecture", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint", + "svgo": "svgo -f src/assets/iconsvg --config=src/assets/iconsvg/svgo.yml" + }, + "dependencies": { + "@ckeditor/ckeditor5-build-decoupled-document": "^23.1.0", + "@ckeditor/ckeditor5-vue": "^2.0.1", + "@toast-ui/editor": "^2.5.4", + "ant-design-vue": "^2.2.8", + "axios": "^0.21.4", + "core-js": "^3.19.3", + "echarts": "^4.9.0", + "localforage": "^1.10.0", + "lodash.debounce": "^4.0.8", + "nprogress": "^0.2.0", + "path-to-regexp": "^6.2.0", + "vue": "^3.2.24", + "vue-i18n": "^9.1.9", + "vue-router": "^4.0.12", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@types/echarts": "^4.9.12", + "@types/jest": "^24.9.1", + "@types/lodash.debounce": "^4.0.6", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", + "@vue/cli-plugin-babel": "~4.5.15", + "@vue/cli-plugin-eslint": "~4.5.15", + "@vue/cli-plugin-router": "~4.5.15", + "@vue/cli-plugin-typescript": "~4.5.15", + "@vue/cli-plugin-unit-jest": "~4.5.15", + "@vue/cli-plugin-vuex": "~4.5.15", + "@vue/cli-service": "~4.5.15", + "@vue/compiler-sfc": "^3.2.24", + "@vue/eslint-config-typescript": "^7.0.0", + "@vue/test-utils": "^2.0.0-rc.17", + "body-parser": "^1.19.0", + "chokidar": "^3.5.2", + "eslint": "^6.8.0", + "eslint-plugin-vue": "^7.20.0", + "less": "^3.13.1", + "less-loader": "^5.0.0", + "lint-staged": "^9.5.0", + "mockjs": "^1.1.0", + "node-dir": "^0.1.17", + "svg-sprite-loader": "^5.2.1", + "svgo": "^1.3.2", + "svgo-loader": "^2.2.2", + "typescript": "~4.1.6", + "vue-jest": "^5.0.0-alpha.10" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "keywords": [ + "vue", + "vue3", + "vue3.0", + "vue3.x", + "typescript", + "admin", + "template", + "antd", + "antdv", + "Ant Design", + "Ant Design Vue" + ], + "lint-staged": { + "*.{js,jsx,vue,ts,tsx}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/packages/links/public/favicon.ico b/packages/links/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3827b09c79035443036c7679a50b6b1b0fc08a8 GIT binary patch literal 4286 zcmb`Ldr(!^6^Bozl4d3`slj&?l!qFl;v8oQG!+Ue z@5d#IQ4q0X#0T0D6_kfyB_pjG+jLs7{UeNYCetx(IvFN1;`#O4=Ws9g!u`Y89_C}M zv-eu-xAs2!+{<8D_wh4kjAedXmEW+ep_XM$0EVpDV8)$`xvzRDBh-TXVG1NcwbDb| zpcB-C@!Om^H^#)8oUbb9i`Uk{7KFe|DAU%^4(fG-f-~4VZelu!H#sx4EtDE}--ouN zyA8Gv4#RrjGtfO^a!n0W%hdF(FPNiDVzP%?*jQ*KURXKS`1ek0Pfb%hm^8XW+;wLU znXjxN?V$e9LpJ+w$inxM-FG}#u2XY9&&JX6Z$i1OIS2jRA+gwYP(N~w-bg8Js+9Pm z?6s?4bq}kgw|^|9GG}6Phz(Z5t!*^WGH;1{DIfj(q2bCKdJz-|z2ps}_S3RgC&*s> zp6rEtWiO}*WMMgTJ7lkVo7iWhTypYEZr^&2MmXb+xC)0^DjGHb>rnwYKFBLHxuaOy zBH2p|WG~ty`<2~+EaKh=^DmdlUQ#3_yyE5-P@_Md9!*Og^gY97!A(#A1*6ekf_5=A zS=$oU-h;5WmX{s(3 z-(@-0p+H)eul<{9wLhg6pS@XL=&}s!P~=!`{JB(2?f#T%$M6u9jEK?B;Wy|*SeFud z&7Q&Y-XeQtCT#D)_*v4*bhWR`RLs7AI<&_#wjx9JiX6!94||ohSK-`v>C8!58mSM%~-|MF0mJ*pFJB5YL~IrUfNXgSSKie z%NmXKeaU%VcFJo~%Bxrd&u`;geZDzN3#%G5q*)pU8GG}TzPCU_ zo20?qFJR8ZD0v>|htJ1%ehG21llgqi`W`yy_tpA7stv@|0(>0zb{;FWU0hbqaC-Vo&Id)XhA4!o{ zr6sk^?mj0DM1P>;o3RMyqpon&s;YEn+mEEJUS8zf&p-oxqjk7P?=afO!mB|692_U* z({Jt^zQ<rA2Ae*%Nx=uhK+FXgsGc3+M9OS;wxYB~#O1!)P8yyLxO4+yM1LFGtve9n*C3 z*cLr?y-Sn-F3tP+Q(ddzTzaOnKU3J~2`of=yT>PuJU6csg=Yvtw34hK&2*$vh>IQPt(KOm;pf+NF&PIAbf%Noqgz<7HiwZ(CV}6w4?}fv} zn)RH8GyU+OKY)4nZ=kwJOLdXqs*k(~3d$+Q53!H?d4~I-JO~xcSE6NN>w4;Vt*LAL zIy8(Hn%+wd=r=+`WULya+Cf2SAm6O%1Ugmd`(wsxnKv>1`3-)x8Y0^r4Wn1zt8ebR#kyJF-CpFGK0rIyRwN(CfV6g7-^5!>D>l12v>l-bjX|(?fYdNLH literal 0 HcmV?d00001 diff --git a/packages/links/public/index.html b/packages/links/public/index.html new file mode 100644 index 0000000..4123528 --- /dev/null +++ b/packages/links/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/packages/links/src/App.vue b/packages/links/src/App.vue new file mode 100644 index 0000000..9a69a81 --- /dev/null +++ b/packages/links/src/App.vue @@ -0,0 +1,12 @@ + + diff --git a/packages/links/src/assets/css/antd-variables.less b/packages/links/src/assets/css/antd-variables.less new file mode 100644 index 0000000..a86c8eb --- /dev/null +++ b/packages/links/src/assets/css/antd-variables.less @@ -0,0 +1,18 @@ +// 此文件针对 ant-design 定制主题: +@primary-color: #1890ff; // 全局主色 +@link-color: #1890ff; // 链接色 +@success-color: #52c41a; // 成功色 +@warning-color: #faad14; // 警告色 +@error-color: #f5222d; // 错误色 +@font-size-base: 14px; // 主字号 +@heading-color: rgba(0, 0, 0, 0.85); // 标题色 +@text-color: rgba(0, 0, 0, 0.65); // 主文本色 +@text-color-secondary: rgba(0, 0, 0, 0.45); // 次文本色 +@disabled-color: rgba(0, 0, 0, 0.25); // 失效色 +@border-radius-base: 2px; // 组件/浮层圆角 +@border-color-base: #d9d9d9; // 边框色 +@box-shadow-base: 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05); // 浮层阴影 + +// Menu +@menu-collapsed-width: 54px; diff --git a/packages/links/src/assets/css/global.less b/packages/links/src/assets/css/global.less new file mode 100644 index 0000000..45dd1bb --- /dev/null +++ b/packages/links/src/assets/css/global.less @@ -0,0 +1,37 @@ +@import '~ant-design-vue/dist/antd.less'; +@import './antd-variables.less'; +@import './variables.less'; +@import './mixin.less'; + +#nprogress .bar { + background: @primary-color !important; +} + +.flex-wrap-wrap { + flex-wrap: wrap; +} + +.border-solid-transparent{ + border: solid 1px transparent; +} + +.text-align-right { + text-align: right; +} + +.float-right { + float: right; +} + +.padding-t10 { + padding-top: 10px; +} + +.cursor-pointer { + cursor: pointer; +} + +.width-200 { + width: 200px !important; +} + diff --git a/packages/links/src/assets/css/mixin.less b/packages/links/src/assets/css/mixin.less new file mode 100644 index 0000000..492a45d --- /dev/null +++ b/packages/links/src/assets/css/mixin.less @@ -0,0 +1,28 @@ +.scrollbar( + @thumb-background: hsla(0,0%,100%,.2), + @thumb-shadow: hsla(0,0%,100%,.05), + @track-background:hsla(0,0%,100%,.15), + @track-shadow: rgba(37,37,37,.05) +) { + ::-webkit-scrollbar { + width: 6px; + height: 6px; + } + ::-webkit-scrollbar-thumb { + background: @thumb-background; + border-radius: 3px; + box-shadow: inset 0 0 5px @thumb-shadow; + } + ::-webkit-scrollbar-track { + background: @track-background; + border-radius: 3px; + box-shadow: inset 0 0 5px rgba(37,37,37,.05); + } +} + +.scrollbar-light { + .scrollbar( + hsla(0,0%,0%,.2), hsla(0,0%,0%,.05), + hsla(0,0%,0%,.15), rgba(255,255,255,.05) + ) +} diff --git a/packages/links/src/assets/css/variables.less b/packages/links/src/assets/css/variables.less new file mode 100644 index 0000000..e69de29 diff --git a/packages/links/src/assets/iconsvg/home.svg b/packages/links/src/assets/iconsvg/home.svg new file mode 100644 index 0000000..d0c28bf --- /dev/null +++ b/packages/links/src/assets/iconsvg/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/links/src/assets/iconsvg/svgo.yml b/packages/links/src/assets/iconsvg/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/packages/links/src/assets/iconsvg/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/packages/links/src/assets/images/bg.svg b/packages/links/src/assets/images/bg.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/packages/links/src/assets/images/bg.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/links/src/assets/images/logo.png b/packages/links/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..37ff91e08195b41a4f603aa7a26314a42a8873a2 GIT binary patch literal 3294 zcmaJ^YdDl^7k&pJ29fNc)EEk7%y}{sVT@r!IaO3LXC~%gX5?5x4oOHwL?n_@lt@jY zNJ>f3k+!6RQnAai!F;1#`}=wVVq-uJrKTF+WPo_(I{U9>ceGynk5qPmj3 z72l+rfsVjW8&eWe3}g^FVqCo!G%# z*Ju&jCwjdvGdhGxV8QIyLTw|73I{y4gbt15h4RJ3NITdMzeL4)ZW{rE{(wkA>|lQf z<>%oEbrOi!P@FXm&P1ZH(A5NM6b^;8L0Li3NE8Nv#2`=@I0{Wf5{M`q^ydRpsEJq{ zqBoiHQ%hml!Ga|cArXOyh={O`z*q}JK?oFqKtLeT2s9e5K)}UOdbJ>E<~WLkq91dF0UVGvBaDG z-!OiQ7W+mC*$8j8SP(8^D$avr`ircn-Mkl3V1>0_Tw+Kq=L0p2gjkR$+F(ePVlK z5x6LCb{BK@L8yvnxJ8+N%-dVIrscB;W(~xAwsUiUcvSpKfP_Pe&H93WBScu)`I3x?b084Q3{2(ku3zy>ee5C0QD12-!O&#~gl+MyJLxC+}Fi(7N<`*@79) zpo-BJRot|eDJIck0R~W6@JuV+K^k8mEN%%cZfKXwnXYQdn#%X$9g0XxZnuC+;~b6E zM&HQ)=-abCPFxT_u~fPFwhtKmE)ap9mVv+yv|yx75u0|DMY}H?Gg5AD2Pnx^xnqWV zPP8|TzSmSvd?b^DZGC1@(_aS|uL`CL9lvOGE^Z2@eb?-cqNW}^G2RuItdnVG_+tA- z%rjdRw^$C11~O`o%uDRIx7bd;{E}{C*4`#0X%03B!256Po<~?bI4yrAR3RSMg=nW& zf~x?fP7l>{3!J@{$OAI-Op?7@txmCA@CFPf^CWhi+kMr*cpV0!47}rd!dERbDfPZ5 zBYy=8Ya2E2y=a26iC;*(95HMs|F%Xx(c=d8YxrWZ=8gQZ!6mOg5B$s%=_aaI-Rv&6 zu-s~7+9u0)n2OlFm6&;Jb!l2Wi@Sj)?!8TXS^D=K`LeB%6*sqPt*nXZHjo7eI+$s2 zTrr1N6-4VYEjq!uXVE2;@DInfRlN^WBh~ps?K&C#W-N~1qQdvF9S704m)eWwX*D3_ z>QRQmvqzeZ*9ANbdkkS#Eb*Qmb+?PjH*^^}^YQ9{NQSBwI6Zmzz&m^Nh}wfgwj;X4 zi-sFYO}p~fh22N-vlmWq7WRytmqDBbXO)NJb(3zSHtGn?vU+l+)g4@>_O?MSt`ona@-S`Yz>^bg|kPkzw0H4+lV_sryf0AQpOMU}J@8AR?OT}X| z=s?ATYAp=C+Dg?X84T7A(AqwCwtOls^L*W(-XSHwt<=%KSLcG0t<2|dK2UDn zUKTEz)H}Rr)P4;@dcPT{k3iL3>70&f}meG3fbo2`F-HR#S&r8gr9qK~5ZU!v( z+WU}n&dS%Km#ke1hm{&s_^azprfx^4RdFwc%{C7A%H#v-nYRjKzHqY zhNjNyK32t$=Al!Rj<<*4XCM=xjwo6)+&$g3y4zBFK~Cc{)o)ttS-k{i=z-@ntFxZU z*600V!(w{f?Or@jO3O0zAx^sM9CTj0!*J-dj%(A2I$w91Rbg<;Py#RW0OUEW50Pt} zy|*$N@S)a+>aW#+=5f|6ZqlHaD9<$e%uZ{+TK36&pqkRk2Hg$w%9u?#m8GBO*%prsZ;CcgFi+L2F$HPl zoG-hwDq&P_@sz4;@M(26n*&Y31qp$M6{0|+@Xq3!(U1N8a!?wM_B0Fa`=pU$B@J)x z#-?adC9kGpzQ&DZHJ7;`rJSg3EIu}E9zi|lLK*iw*qDed2)}XtL};n~_>P*eoTnJD z{#GMYy&25pn~-ZXDGYc9U0t~y4BT3q(R^cfBEEnA?L!*@cJbKjuN>RWZ;|=gVkfe9cn7 zJJt+lJuuj=LMy>D6B!Fi*Rkxd8T3xZ{d?6%Ixk)9Dc)EgeDnOf_`=iD)Z`FDtpN5!Qk5CXb^}Zf3*u&G=*?o6z8gAmPQ=g-h!)@^+Bs;zL zJi62f84S5&P-ofu%0MM8=-ijw{>d1LY1xX!=v#i-h5lM=dGp}5E1~;F_g&5F(n#7d zvUT}3+(T?`_{lL)RyozL9k)^U(Q9@6w!~pm(*2~Q>}Ha&_{=hu{%dUuyK~Mmk}9xz zDV-A4l;f_(CACkd*PM=ne0#j_lE|o1x4Yh*JaQwARr5k?xyAObhvi7Sltpf2<1?&l zt(OtwMm>7KP%{-oxdL$VSUdL#B{%!llLe|ag@&n`+xWKc2;0}?dBu28@(-gW6$yfV z+S;$$QTnu`DdhzCK&T}_*uyxZdxNBR Sk6`I@Hx8=vdh&S^E#W`Ve3I4x literal 0 HcmV?d00001 diff --git a/packages/links/src/components/ALink/index.vue b/packages/links/src/components/ALink/index.vue new file mode 100644 index 0000000..7ec5470 --- /dev/null +++ b/packages/links/src/components/ALink/index.vue @@ -0,0 +1,55 @@ + + diff --git a/packages/links/src/components/CKEditor/index.vue b/packages/links/src/components/CKEditor/index.vue new file mode 100644 index 0000000..40ed92a --- /dev/null +++ b/packages/links/src/components/CKEditor/index.vue @@ -0,0 +1,192 @@ + + + \ No newline at end of file diff --git a/packages/links/src/components/Custom/LinksCategorySelect/data.d.ts b/packages/links/src/components/Custom/LinksCategorySelect/data.d.ts new file mode 100644 index 0000000..28f92d1 --- /dev/null +++ b/packages/links/src/components/Custom/LinksCategorySelect/data.d.ts @@ -0,0 +1,4 @@ +export interface OptionItem { + value: number; + label: string; +} \ No newline at end of file diff --git a/packages/links/src/components/Custom/LinksCategorySelect/index.vue b/packages/links/src/components/Custom/LinksCategorySelect/index.vue new file mode 100644 index 0000000..77c295e --- /dev/null +++ b/packages/links/src/components/Custom/LinksCategorySelect/index.vue @@ -0,0 +1,107 @@ + + + diff --git a/packages/links/src/components/Custom/LinksCategorySelect/service.ts b/packages/links/src/components/Custom/LinksCategorySelect/service.ts new file mode 100644 index 0000000..c14f873 --- /dev/null +++ b/packages/links/src/components/Custom/LinksCategorySelect/service.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request'; + +export async function queryList(): Promise { + return request({ + url: '/link/categorys', + method: 'get', + params: {} + }); +} + + diff --git a/packages/links/src/components/IconFont/index.ts b/packages/links/src/components/IconFont/index.ts new file mode 100644 index 0000000..dc31de9 --- /dev/null +++ b/packages/links/src/components/IconFont/index.ts @@ -0,0 +1,3 @@ +import IconFont from './index.vue'; + +export default IconFont; \ No newline at end of file diff --git a/packages/links/src/components/IconFont/index.vue b/packages/links/src/components/IconFont/index.vue new file mode 100644 index 0000000..4187a06 --- /dev/null +++ b/packages/links/src/components/IconFont/index.vue @@ -0,0 +1,69 @@ + + + \ No newline at end of file diff --git a/packages/links/src/components/IconSvg/index.ts b/packages/links/src/components/IconSvg/index.ts new file mode 100644 index 0000000..a7592d9 --- /dev/null +++ b/packages/links/src/components/IconSvg/index.ts @@ -0,0 +1,17 @@ +import iconsvg from "./index.vue"; + +/** + * 自动导入 @/assets/iconsvg 下svg文件 + * @author LiQingSong + */ +export function importAllSvg (): void { + try { + const requireContext: __WebpackModuleApi.RequireContext = require.context('../../assets/iconsvg', false, /\.svg$/); + requireContext.keys().forEach(requireContext); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } +} + +export default iconsvg; \ No newline at end of file diff --git a/packages/links/src/components/IconSvg/index.vue b/packages/links/src/components/IconSvg/index.vue new file mode 100644 index 0000000..a8e7407 --- /dev/null +++ b/packages/links/src/components/IconSvg/index.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/packages/links/src/components/Permission/index.vue b/packages/links/src/components/Permission/index.vue new file mode 100644 index 0000000..522e98f --- /dev/null +++ b/packages/links/src/components/Permission/index.vue @@ -0,0 +1,46 @@ + + \ No newline at end of file diff --git a/packages/links/src/components/RestDrawer/index.vue b/packages/links/src/components/RestDrawer/index.vue new file mode 100644 index 0000000..a78006c --- /dev/null +++ b/packages/links/src/components/RestDrawer/index.vue @@ -0,0 +1,80 @@ + + + diff --git a/packages/links/src/components/ScreenTable/data.d.ts b/packages/links/src/components/ScreenTable/data.d.ts new file mode 100644 index 0000000..1dd8009 --- /dev/null +++ b/packages/links/src/components/ScreenTable/data.d.ts @@ -0,0 +1,10 @@ + +export interface PaginationConfig { + total: number; + current: number; + pageSize: number; + showSizeChanger: boolean; + showQuickJumper: boolean; + onChange: (page: number, pageSize: number) => void; + showSizeChange: (current: number, size: number) => void; +} diff --git a/packages/links/src/components/ScreenTable/index.vue b/packages/links/src/components/ScreenTable/index.vue new file mode 100644 index 0000000..b575a33 --- /dev/null +++ b/packages/links/src/components/ScreenTable/index.vue @@ -0,0 +1,128 @@ + + + diff --git a/packages/links/src/components/SelectLang/index.vue b/packages/links/src/components/SelectLang/index.vue new file mode 100644 index 0000000..9a7e347 --- /dev/null +++ b/packages/links/src/components/SelectLang/index.vue @@ -0,0 +1,77 @@ + + + \ No newline at end of file diff --git a/packages/links/src/components/TuiEditor/index.vue b/packages/links/src/components/TuiEditor/index.vue new file mode 100644 index 0000000..71f767a --- /dev/null +++ b/packages/links/src/components/TuiEditor/index.vue @@ -0,0 +1,126 @@ + + diff --git a/packages/links/src/components/TuiEditor/viewer.vue b/packages/links/src/components/TuiEditor/viewer.vue new file mode 100644 index 0000000..2c378f3 --- /dev/null +++ b/packages/links/src/components/TuiEditor/viewer.vue @@ -0,0 +1,56 @@ + + \ No newline at end of file diff --git a/packages/links/src/composables/useEcharts.ts b/packages/links/src/composables/useEcharts.ts new file mode 100644 index 0000000..dbd2399 --- /dev/null +++ b/packages/links/src/composables/useEcharts.ts @@ -0,0 +1,35 @@ +import { onMounted, onBeforeUnmount, Ref, ref } from 'vue'; +import debounce from 'lodash.debounce'; +import echarts, { ECharts, EChartOption } from 'echarts'; +import 'echarts/theme/macarons'; + +export default function useEcharts( + labRef: Ref, + initOption: EChartOption, + theme= 'macarons' + ): Ref { + + let ec: ECharts; + const chart = ref(); + + const resizeHandler = debounce(() => { + ec.resize(); + }, 100); + + onMounted(()=> { + if(labRef.value) { + ec = echarts.init(labRef.value, theme); + ec.setOption(initOption); + chart.value = ec; + } + + window.addEventListener('resize', resizeHandler); + }) + + onBeforeUnmount(()=> { + ec.dispose(); + window.removeEventListener('resize', resizeHandler); + }); + + return chart; +} diff --git a/packages/links/src/composables/useI18nAntdFormVaildateInfos.ts b/packages/links/src/composables/useI18nAntdFormVaildateInfos.ts new file mode 100644 index 0000000..35f1d9a --- /dev/null +++ b/packages/links/src/composables/useI18nAntdFormVaildateInfos.ts @@ -0,0 +1,24 @@ +/** + * 重置 Antd Form VaildateInfos 为 I18n + * @author LiQingSong + */ +import { computed, ComputedRef } from 'vue'; +import { useI18n } from 'vue-i18n'; +import { validateInfos } from 'ant-design-vue/lib/form/useForm'; + +export default function useI18nAntdFormVaildateInfos(infos: validateInfos): ComputedRef { + const{ t } = useI18n(); + + const infosNew = computed(() => { + const vInfos: validateInfos = {}; + for (const index in infos) { + vInfos[index] = JSON.parse(JSON.stringify(infos[index])); + if(vInfos[index] && vInfos[index]['help']) { + vInfos[index]['help'] = vInfos[index]['help'].map((item: any)=> typeof(item)=='string' ? t(item) : item.map((item2: any)=> item2 ? t(item2):'')); + } + } + return vInfos; + }); + + return infosNew; +} \ No newline at end of file diff --git a/packages/links/src/composables/useQueryList.ts b/packages/links/src/composables/useQueryList.ts new file mode 100644 index 0000000..38f1dfd --- /dev/null +++ b/packages/links/src/composables/useQueryList.ts @@ -0,0 +1,62 @@ +import { computed, onMounted, watch, ComputedRef } from 'vue'; +import { useRoute, useRouter } from 'vue-router'; + +export interface QueryParams { + page: number; + per: number; +} + +export type PushQuery = (param: Partial) => void; + +export interface Response { + queryParams: ComputedRef; + pushQuery: PushQuery; +} + + +/** + * 查询列表并根据route监听 composables + * @param cb 回调函数 + * @returns {跳转函数} + * @author LiQingSong + */ + export default function useQueryList(cb: (queryParams: T, pushQuery: PushQuery) => any): Response { + + const router = useRouter(); + const route = useRoute(); + + // route query参数 + const queryParams = computed(()=> { + const { per = 20, page=1 , ...other } = route.query; + return { per: Number(per), page: Number(page), ...other} as T; + }) + + /** + * query跳转 + * @param param 需要调转的参数,比如页码 + */ + const pushQuery = (param: Partial): void => { + router.push({ + ...route, + query: { + ...route.query, + ...param + } + }) + } + + + watch(queryParams,() => { + cb(queryParams.value, pushQuery) + }) + + onMounted(()=> { + cb(queryParams.value, pushQuery) + }) + + return { + queryParams, + pushQuery + } + + } \ No newline at end of file diff --git a/packages/links/src/composables/useQueryVerifyId.ts b/packages/links/src/composables/useQueryVerifyId.ts new file mode 100644 index 0000000..7753ef9 --- /dev/null +++ b/packages/links/src/composables/useQueryVerifyId.ts @@ -0,0 +1,50 @@ + import { ComputedRef, computed, onMounted, watch } from 'vue'; + import { useRoute } from 'vue-router'; + import useRestRouter from '@/composables/useRestRouter'; + import useRestStore from '@/composables/useRestStore'; + import { ElMessage } from "element-plus"; + + /** + * 返回 route query id,并验证 composables + * @param verifyRoutePath 验证的路由path + * @param cb 回调函数 + * @returns + * @author LiQingSong + */ + export default function useQueryVerifyId(verifyRoutePath: string, cb: (id: number) => any): ComputedRef { + const store = useRestStore(); + const route = useRoute(); + const restRouter = useRestRouter(); + const id = computed(() => Number(route.query.id || 0)) + + const verifyId = () => { + if(route.path !== verifyRoutePath) { + return false; + } + + if(id.value < 1) { + ElMessage({ message: '参数出错', type: 'error' }); + store.commit('global/closeCurrentHeadTabNav',() => { + restRouter.push('/') + }); + return false; + } + + cb(id.value) + + } + + + onMounted(()=> { + verifyId(); + }) + + watch(id,() => { + verifyId(); + }) + + + + return id; + + } diff --git a/packages/links/src/composables/useRestRouter.ts b/packages/links/src/composables/useRestRouter.ts new file mode 100644 index 0000000..ca54338 --- /dev/null +++ b/packages/links/src/composables/useRestRouter.ts @@ -0,0 +1,12 @@ + +/** + * 根据注入的parentRouter获取Router,如果主框架存在是parentRouter不存在是自己的router composables + * @author LiQingSong + */ + import { inject } from 'vue' + import { Router, useRouter } from 'vue-router' + +export default function useRestRouter(): Router { + const router: Router = inject('parentRouter', useRouter()) + return router +} diff --git a/packages/links/src/composables/useRestStore.ts b/packages/links/src/composables/useRestStore.ts new file mode 100644 index 0000000..f319778 --- /dev/null +++ b/packages/links/src/composables/useRestStore.ts @@ -0,0 +1,12 @@ + +/** + * 根据注入的parentStore获取Store,如果主框架存在是parentStore不存在是自己的Store composables + * @author LiQingSong + */ + import { inject } from 'vue' + import { Store, useStore } from 'vuex' + +export default function useRestStore(): Store { + const store: Store = inject>('parentStore', useStore()) + return store +} diff --git a/packages/links/src/config/i18n.ts b/packages/links/src/config/i18n.ts new file mode 100644 index 0000000..0a43174 --- /dev/null +++ b/packages/links/src/config/i18n.ts @@ -0,0 +1,45 @@ +/** + * 国际化 入口 + * @author LiQingSong + */ + +import { createI18n } from "vue-i18n"; +import { getLocale, setLocale, importAllLocales, defaultLang } from "@/utils/i18n"; + +/** + * antd 多语言 配置 + */ +import zhCN from 'ant-design-vue/es/locale/zh_CN'; +import zhTW from 'ant-design-vue/es/locale/zh_TW'; +import enUS from 'ant-design-vue/es/locale/en_US'; +export const antdMessages: { [key: string]: any} = { + 'zh-CN': zhCN, + 'zh-TW': zhTW, + 'en-US': enUS, +} + + +/** + * 框架 多语言 配置 + */ +export const messages = importAllLocales(); +const sysLocale = getLocale(); +const i18n = createI18n({ + legacy: false, + locale: antdMessages[sysLocale] ? sysLocale : defaultLang, + messages, +}); + + +/** + * 设置语言 + * @param locale + */ +export function setI18nLanguage(locale: string, realReload = false): void { + setLocale(locale,realReload, function() { + // i18n.global.locale = locale // legacy: true + i18n.global.locale.value = locale; + }) +} + +export default i18n; diff --git a/packages/links/src/config/routes.ts b/packages/links/src/config/routes.ts new file mode 100644 index 0000000..5e35cb7 --- /dev/null +++ b/packages/links/src/config/routes.ts @@ -0,0 +1,51 @@ +/** + * 路由入口 + * @author LiQingSong + */ + +import { RoutesDataItem } from "@/utils/routes"; + +import SecurityLayout from '@/layouts/SecurityLayout.vue'; + +import DefaultLayoutRoutes from "@/layouts/DefaultLayout/routes"; +import DefaultLayout from "@/layouts/DefaultLayout/index.vue"; + +import DashboardLayoutRoutes from '@/layouts/DashboardLayout/routes'; +import DashboardLayout from '@/layouts/DashboardLayout/index.vue'; + + +const routes: RoutesDataItem[] = [ + { + title: 'empty', + path: '/', + component: SecurityLayout, + children: [ + { + title: 'empty', + path: '/', + redirect: '/home', + component: DefaultLayout, + children: DefaultLayoutRoutes + }, + { + title: 'empty', + path: '/dashboard', + component: DashboardLayout, + children: DashboardLayoutRoutes + }, + ] + }, + { + title: 'empty', + path: '/refresh', + component: () => import('@/views/refresh/index.vue') + }, + { + title: 'app.global.menu.notfound', + path: '/:pathMatch(.*)*', + component: () => import('@/views/404/index.vue'), + } +] + + +export default routes; diff --git a/packages/links/src/config/settings.ts b/packages/links/src/config/settings.ts new file mode 100644 index 0000000..e8f3b84 --- /dev/null +++ b/packages/links/src/config/settings.ts @@ -0,0 +1,43 @@ +/** + * 站点配置 + * @author LiQingSong + */ +export interface SettingsType { + /** + * 站点名称 + */ + siteTitle: string; + + /** + * 站点本地存储Token 的 Key值 + */ + siteTokenKey: string; + + /** + * Ajax请求头发送Token 的 Key值 + */ + ajaxHeadersTokenKey: string; + + /** + * Ajax返回值不参加统一验证的api地址 + */ + ajaxResponseNoVerifyUrl: string[]; + + /** + * iconfont.cn 项目在线生成的 js 地址 + */ + iconfontUrl: string[]; +} + +const settings: SettingsType = { + siteTitle: 'ADMIN-VUE3-MICRO', + siteTokenKey: 'admin_vue_micro_token', + ajaxHeadersTokenKey: 'x-token', + ajaxResponseNoVerifyUrl: [ + '/user/login', // 用户登录 + '/user/info', // 获取用户信息 + ], + iconfontUrl: [], +}; + +export default settings; diff --git a/packages/links/src/config/store.ts b/packages/links/src/config/store.ts new file mode 100644 index 0000000..829c3b7 --- /dev/null +++ b/packages/links/src/config/store.ts @@ -0,0 +1,12 @@ +/** + * Store 入口 + * @author LiQingSong + */ +import { createStore } from 'vuex'; +import { importAllStore } from '@/utils/store'; + + +export default createStore({ + modules: importAllStore(), + getters: {} +}) diff --git a/packages/links/src/directives/permission/index.ts b/packages/links/src/directives/permission/index.ts new file mode 100644 index 0000000..abb4fbd --- /dev/null +++ b/packages/links/src/directives/permission/index.ts @@ -0,0 +1,31 @@ +/** + * 自定义指令 权限验证 + * @author LiQingSong + * 使用Demo: + * import permission from '@/directives/permission'; + * import { defineComponent } from "vue"; + * export default defineComponent({ + * directives: { + * permission + * } + * }) + * 删除 + * 删除 + */ +import { Directive } from "vue"; +import UserModel from "@/store/user"; +import { hasPermissionRouteRoles } from "@/utils/routes"; + +const permission: Directive = (el, binding, vnode, prevVNode) => { + const { value } = binding; + if(value) { + const userRoles = UserModel.state.currentUser.roles; + if(!hasPermissionRouteRoles(userRoles, value)){ + el.parentNode && el.parentNode.removeChild(el); + } + } else { + throw new Error(`need roles! Like v-permission="['admin','test']" or v-permission="'test'"`); + } +} + +export default permission; \ No newline at end of file diff --git a/packages/links/src/layouts/BlankLayout.vue b/packages/links/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..621cb5a --- /dev/null +++ b/packages/links/src/layouts/BlankLayout.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/links/src/layouts/DashboardLayout/index.vue b/packages/links/src/layouts/DashboardLayout/index.vue new file mode 100644 index 0000000..d383dc5 --- /dev/null +++ b/packages/links/src/layouts/DashboardLayout/index.vue @@ -0,0 +1,5 @@ + + diff --git a/packages/links/src/layouts/DashboardLayout/routes.ts b/packages/links/src/layouts/DashboardLayout/routes.ts new file mode 100644 index 0000000..665aca2 --- /dev/null +++ b/packages/links/src/layouts/DashboardLayout/routes.ts @@ -0,0 +1,24 @@ +import { RoutesDataItem } from "@/utils/routes"; +import BlankLayout from '@/layouts/BlankLayout.vue'; + +const DashboardLayoutRoutes: Array = [ + { + title: 'analysis', + path: 'analysis', + component: BlankLayout, + children: [ + { + title: 'chartcard', + path: 'chartcard', + component: ()=> import('@/views/analysis/chartcard/index.vue') + }, + { + title: 'hitcard', + path: 'hitcard', + component: ()=> import('@/views/analysis/hitcard/index.vue') + } + ] + } +]; + +export default DashboardLayoutRoutes; diff --git a/packages/links/src/layouts/DefaultLayout/index.vue b/packages/links/src/layouts/DefaultLayout/index.vue new file mode 100644 index 0000000..423e4b1 --- /dev/null +++ b/packages/links/src/layouts/DefaultLayout/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/links/src/layouts/DefaultLayout/routes.ts b/packages/links/src/layouts/DefaultLayout/routes.ts new file mode 100644 index 0000000..1cbf642 --- /dev/null +++ b/packages/links/src/layouts/DefaultLayout/routes.ts @@ -0,0 +1,25 @@ +import { RoutesDataItem } from "@/utils/routes"; + +const DefaultLayoutRoutes: Array = [ + { + title: 'home', + path: '/home', + component: ()=> import('@/views/home/index.vue') + }, + { + title: 'list', + path: '/list', + roles: ['links-list'], + component: ()=> import('@/views/list/index.vue') + }, + { + title: 'category', + path: '/category', + roles: ['links-category'], + component: ()=> import('@/views/category/index.vue') + }, + + +]; + +export default DefaultLayoutRoutes; diff --git a/packages/links/src/layouts/SecurityLayout.vue b/packages/links/src/layouts/SecurityLayout.vue new file mode 100644 index 0000000..d2e696d --- /dev/null +++ b/packages/links/src/layouts/SecurityLayout.vue @@ -0,0 +1,21 @@ + + diff --git a/packages/links/src/locales/en-US.ts b/packages/links/src/locales/en-US.ts new file mode 100644 index 0000000..264323d --- /dev/null +++ b/packages/links/src/locales/en-US.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': 'The validation did not pass, please check the input', +}; \ No newline at end of file diff --git a/packages/links/src/locales/zh-CN.ts b/packages/links/src/locales/zh-CN.ts new file mode 100644 index 0000000..92b979c --- /dev/null +++ b/packages/links/src/locales/zh-CN.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '验证不通过,请检查输入', +}; \ No newline at end of file diff --git a/packages/links/src/locales/zh-TW.ts b/packages/links/src/locales/zh-TW.ts new file mode 100644 index 0000000..2926c8d --- /dev/null +++ b/packages/links/src/locales/zh-TW.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '驗證不通過,請檢查輸入', +}; \ No newline at end of file diff --git a/packages/links/src/main.ts b/packages/links/src/main.ts new file mode 100644 index 0000000..0419615 --- /dev/null +++ b/packages/links/src/main.ts @@ -0,0 +1,115 @@ +declare global { + interface Window { + __POWERED_BY_QIANKUN__: string; + __INJECTED_PUBLIC_PATH_BY_QIANKUN__: string; + } +} + +if (window.__POWERED_BY_QIANKUN__) { + __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ || ''; +} + +import { createApp } from 'vue'; +import { createRouter, createWebHistory, createMemoryHistory } from 'vue-router'; + +// 全局样式 +import '@/assets/css/global.less'; + +// 引入 Antd +import Antd from 'ant-design-vue'; + +// 导入 svg +import { importAllSvg } from "@/components/IconSvg/index"; +importAllSvg(); + +// progress bar +import NProgress from 'nprogress'; // progress bar +import 'nprogress/nprogress.css'; // progress bar style +NProgress.configure({ showSpinner: false, easing: 'ease', speed: 1000 }); // NProgress Configuration + + +import App from '@/App.vue'; +import routes from '@/config/routes'; +import store from '@/config/store'; +import i18n from '@/config/i18n'; + + +let router: any = null; +let instance: any = null; +let history: any = null; + +function render(props: any = {}) { + const { container, routerBase, routerHistory, parentRouter, parentStore, data, onGlobalStateChange } = props; + const historyBase = routerBase || process.env.BASE_URL; + + if (routerHistory === 'memory') { + history = createMemoryHistory(historyBase); + } else { + history = createWebHistory(historyBase); + } + router = createRouter({ + history, + routes, + }); + + router.beforeEach((/* to, from */) => { + // start progress bar + NProgress.start(); + }); + + router.afterEach(() => { + // finish progress bar + NProgress.done(); + }); + + + if(parentStore) { + // 设置用户登录信息 + store.commit('user/saveCurrentUser', parentStore.state.user.currentUser || {}); + } + + instance = createApp(App); + instance.provide('parentRouter', parentRouter || router); + instance.provide('parentStore', parentStore || store); + instance.use(store); + instance.use(router); + instance.use(Antd); + instance.use(i18n); + instance.mount(container ? container.querySelector('#app') : '#app'); + + if (data?.defaultPath) { + router.push(data.defaultPath); + } + + // qiankun.js 全局 state + onGlobalStateChange?.((state, prev) => { + // 设置语言 + if(state.i18nLocale) { + i18n.global.locale.value = state.i18nLocale + } + }, true); + + +} + +if(!window.__POWERED_BY_QIANKUN__){ + render(); +} + +export async function bootstrap() { + console.log('%c%s', 'color: green;', 'links app bootstraped'); +} + +export async function mount(props: any) { + console.log('%c%s', 'color: blue;', 'links app mount'); + render(props); +} + +export async function unmount() { + console.log('%c%s', 'color: red;', 'links app unmount'); + instance.unmount(); + instance._container.innerHTML = ''; + instance = null; + router = null; + history.destroy(); +} diff --git a/packages/links/src/services/user.ts b/packages/links/src/services/user.ts new file mode 100644 index 0000000..c761cf7 --- /dev/null +++ b/packages/links/src/services/user.ts @@ -0,0 +1 @@ +// import request from '@/utils/request'; diff --git a/packages/links/src/shims-vue.d.ts b/packages/links/src/shims-vue.d.ts new file mode 100644 index 0000000..df76ca3 --- /dev/null +++ b/packages/links/src/shims-vue.d.ts @@ -0,0 +1,8 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +declare module '@ckeditor/ckeditor5-vue'; +declare module '@ckeditor/ckeditor5-build-decoupled-document'; diff --git a/packages/links/src/store/global.ts b/packages/links/src/store/global.ts new file mode 100644 index 0000000..9d1396f --- /dev/null +++ b/packages/links/src/store/global.ts @@ -0,0 +1,44 @@ + +import { Mutation/* , Action */ } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; + + +export interface StateType {} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + closeCurrentHeadTabNav: Mutation; + }; + actions: { + }; +} + + +const initState: StateType = { +}; + +const StoreModel: ModuleType = { + namespaced: true, + name: 'global', + state: { + ...initState + }, + mutations: { + /** + * 关闭当前tabNav,并跳转自定义路由 + * @param state + * @param payload Function 回调 + */ + closeCurrentHeadTabNav(state, payload: Function) { + if(typeof payload === 'function') { + payload() + } + }, + }, + actions: {} +} + + + +export default StoreModel; diff --git a/packages/links/src/store/user.ts b/packages/links/src/store/user.ts new file mode 100644 index 0000000..44892b5 --- /dev/null +++ b/packages/links/src/store/user.ts @@ -0,0 +1,64 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { removeToken } from "@/utils/localToken"; + +export interface CurrentUser { + id: number; + name: string; + avatar: string; + roles: string[]; +} + +export interface StateType { + currentUser: CurrentUser; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + saveCurrentUser: Mutation; + }; + actions: { + logout: Action; + }; +} + +const initState: StateType = { + currentUser: { + id: 0, + name: '', + avatar: '', + roles: [], + }, +} + +const StoreModel: ModuleType = { + namespaced: true, + name: 'user', + state: { + ...initState + }, + mutations: { + saveCurrentUser(state, payload) { + state.currentUser = { + ...initState.currentUser, + ...payload, + } + }, + }, + actions: { + async logout({ commit }) { + try { + await removeToken(); + commit('saveCurrentUser', { ...initState.currentUser }); + return true; + } catch (error) { + return false; + } + } + } +} + + + +export default StoreModel; diff --git a/packages/links/src/utils/array.ts b/packages/links/src/utils/array.ts new file mode 100644 index 0000000..a3ae5ec --- /dev/null +++ b/packages/links/src/utils/array.ts @@ -0,0 +1,29 @@ +/** + * 数组合并并去重 + * @param arr1 数组1 + * @param arr2 数组2 + */ +export function mergeUnique(arr1: Array, arr2: Array): Array { + const arr: Array = arr1; + for (let index = 0, len = arr2.length; index < len; index += 1) { + if (!arr.includes(arr2[index])) { + arr.push(arr2[index]); + } + } + + return arr; +} + +/** + * 数组去重 + * @param arr 数组 + */ +export function unique(arr: Array): Array { + const array: Array = []; + for (let index = 0, len = arr.length; index < len; index += 1) { + if (!array.includes(arr[index])) { + array.push(arr[index]); + } + } + return array; +} diff --git a/packages/links/src/utils/i18n.ts b/packages/links/src/utils/i18n.ts new file mode 100644 index 0000000..47fd50a --- /dev/null +++ b/packages/links/src/utils/i18n.ts @@ -0,0 +1,181 @@ +/** + * 国际化 utils + * @author LiQingSong + */ +import { LocaleMessages } from '@intlify/core-base'; +import { VueMessageType } from "vue-i18n"; + +// window.localStorage 存储key +export const localeKey = 'locale'; + +// 默认语言 +export const defaultLang = 'zh-CN'; + +/** + * 验证语言命名规则 zh-CN + * @returns boolen + * @author LiQingSong + */ +export const localeNameExp = (lang: string): boolean => { + const localeExp = new RegExp(`^([a-z]{2})-?([A-Z]{2})?$`); + return localeExp.test(lang); +} + +/** + * 设置 html lang 属性值 + * @param lang 语言的 key + * @author LiQingSong + */ +export const setHtmlLang = (lang: string): void => { + /** + * axios.defaults.headers.common['Accept-Language'] = locale + */ + document.querySelector('html')?.setAttribute('lang', lang); +} + +/** + * 获取当前选择的语言 + * 获取的浏览器语言默认项目中有可能不支持,所以在config/i18n.ts中要加以判断 + * @returns string + * @author LiQingSong + */ +export const getLocale = (): string => { + const lang = typeof window.localStorage !== 'undefined' ? window.localStorage.getItem(localeKey) : ''; + const isNavigatorLanguageValid = typeof navigator !== 'undefined' && typeof navigator.language === 'string'; + const browserLang = isNavigatorLanguageValid ? navigator.language.split('-').join('-') : ''; + return lang || browserLang || defaultLang; +}; + +/** + * 切换语言 + * @param lang 语言的 key + * @param realReload 是否刷新页面,默认刷新 + * @author LiQingSong + */ +export const setLocale = (lang: string, realReload = true, callback: () => void): void => { + + if (lang !== undefined && !localeNameExp(lang)) { + // for reset when lang === undefined + throw new Error('setLocale lang format error'); + } + if (getLocale() !== lang) { + if (typeof window.localStorage !== 'undefined') { + window.localStorage.setItem(localeKey, lang || ''); + } + + if (realReload) { + window.location.reload(); + } else { + setHtmlLang(lang); + + if(typeof callback === 'function') { + callback(); + } + } + + } +}; + +/** + * 自动导入 框架自定义语言 + * @author LiQingSong + */ +export function importAllLocales(): LocaleMessages { + const modules: LocaleMessages = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/layouts 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const layoutsRequireContext: __WebpackModuleApi.RequireContext = require.context('../layouts', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + layoutsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = layoutsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/components 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const componentsRequireContext: __WebpackModuleApi.RequireContext = require.context('../components', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + componentsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = componentsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/locales 下文件,不包含子目录,文件名为:([a-z]{2})-?([A-Z]{2})?\.ts + const localesRequireContext: __WebpackModuleApi.RequireContext = require.context('../locales', false, /([a-z]{2})-?([A-Z]{2})?\.ts$/); + localesRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = localesRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + diff --git a/packages/links/src/utils/localToken.ts b/packages/links/src/utils/localToken.ts new file mode 100644 index 0000000..fca7e6f --- /dev/null +++ b/packages/links/src/utils/localToken.ts @@ -0,0 +1,37 @@ +/** + * 自定义 token 操作 + * @author LiQingSong + */ +import localforage from 'localforage'; +import settings from '@/config/settings'; + +/** + * 获取本地Token + */ +export const getToken = async (): Promise => { + return await localforage.getItem(settings.siteTokenKey); +}; + +/** + * 设置存储本地Token + */ +export const setToken = async (token: string): Promise => { + try { + await localforage.setItem(settings.siteTokenKey, token); + return true; + } catch (error) { + return false; + } +}; + +/** + * 移除本地Token + */ +export const removeToken = async (): Promise => { + try { + await localforage.removeItem(settings.siteTokenKey); + return true; + } catch (error) { + return false; + } +}; \ No newline at end of file diff --git a/packages/links/src/utils/mock/require-context.js b/packages/links/src/utils/mock/require-context.js new file mode 100644 index 0000000..f1dd6dd --- /dev/null +++ b/packages/links/src/utils/mock/require-context.js @@ -0,0 +1,45 @@ +/** + * 自定义 require.context + * @author LiQingSong + */ +module.exports = function(directory, recursive, regExp) { + const dir = require('node-dir') + const path = require('path') + + // Assume absolute path by default + let basepath = directory + + if (directory[0] === '.') { + // Relative path + basepath = path.join(__dirname, directory) + } else if (!path.isAbsolute(directory)) { + // Module path + basepath = require.resolve(directory) + } + + const keys = dir + .files(basepath, { + sync: true, + recursive: recursive || false + }) + .filter(function(file) { + return file.match(regExp || /\.(json|js)$/) + }) + .map(function(file) { + return path.join('.', file.slice(basepath.length + 1)) + }) + + var context = function(key) { + return require(context.resolve(key)) + } + + context.resolve = function(key) { + return path.join(directory, key) + } + + context.keys = function() { + return keys + } + + return context + } \ No newline at end of file diff --git a/packages/links/src/utils/mock/server.js b/packages/links/src/utils/mock/server.js new file mode 100644 index 0000000..e180d29 --- /dev/null +++ b/packages/links/src/utils/mock/server.js @@ -0,0 +1,98 @@ +/** + * Mock Server + * @author LiQingSong + */ +const requireContext = require('./require-context'); +const chokidar = require('chokidar'); +const path = require('path'); + +// 注册 mock 路由 +function registerMockRoutes(mockDir, app) { + let mockLastIndex = 0; + let mockRoutesLength = 0; + try { + // 导入 /mock 下文件 + const context = requireContext(mockDir, false, /\.js$/); + context.keys().forEach(fileName => { + // 获取内容 + const mocks = context(fileName); + for (const key in mocks) { + const keys = key.replace(/(^\s*)|(\s*$)/g, '').split(' '); + let ajaxType = 'get'; + let ajaxUrl = ''; + if(keys.length<2) { + ajaxUrl = keys[0]; + } else { + ajaxType = keys[0].toLowerCase(); + ajaxUrl = keys[1]; + if(!['get','post','put','patch','delete','head','options'].includes(ajaxType)) { + ajaxType = 'get'; + } + } + if(typeof mocks[key] === 'function') { + app[ajaxType](ajaxUrl, mocks[key]); + mockLastIndex = app._router.stack.length; + mockRoutesLength = mockRoutesLength + 1; + // console.log(app._router.stack.length); + } + } + }); + } catch (error) { + console.log(error); + } + + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } + +} + +// 删除 mock 路由 +function unRegisterMockRoutes(mockDir) { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + + +module.exports = app => { + const mockDir = path.resolve('./mock'); + + const mockRoutes = registerMockRoutes(mockDir,app); + let mockRoutesLength = mockRoutes.mockRoutesLength; + let mockStartIndex = mockRoutes.mockStartIndex; + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add' || event === 'unlink') { + // console.log(event, path); + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength); + + // clear routes cache + unRegisterMockRoutes(mockDir); + + // rest routes + const mockRoutes = registerMockRoutes(mockDir,app); + mockRoutesLength = mockRoutes.mockRoutesLength; + mockStartIndex = mockRoutes.mockStartIndex; + + + console.log(`\n > Mock Server hot reload success! changed ${path}`) + } catch (error) { + console.log(error); + } + + } + }) + + + + +} \ No newline at end of file diff --git a/packages/links/src/utils/object.ts b/packages/links/src/utils/object.ts new file mode 100644 index 0000000..ecdc6dd --- /dev/null +++ b/packages/links/src/utils/object.ts @@ -0,0 +1,46 @@ +/** + * 浅比较两个object, json的key是否一致 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObjectKey(obj1: Object, obj2: Object): boolean{ + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + if(obj1KeysLen!==obj2Keys.length) { + return false; + } + let is = true; + for (let index = 0; index < obj1KeysLen; index++) { + const element: string = obj1Keys[index]; + if(!Object.prototype.hasOwnProperty.call(obj2, element)) { + is = false; + break; + } + } + return is; +} + +/** + * 浅比较两个对象是否相等,这两个对象的值只能是数字或字符串 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObject(obj1: Object, obj2: Object): boolean { + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + const obj2KeysLen: number = obj2Keys.length; + if(obj1KeysLen!==obj2KeysLen) { + return false; + } + + if(obj1KeysLen===0 && obj2KeysLen===0) { + return true; + } + + return !obj1Keys.some(key => obj1[key] != obj2[key]) + +} \ No newline at end of file diff --git a/packages/links/src/utils/request.ts b/packages/links/src/utils/request.ts new file mode 100644 index 0000000..b7061af --- /dev/null +++ b/packages/links/src/utils/request.ts @@ -0,0 +1,160 @@ +/** + * 自定义 request 网络请求工具,基于axios + * @author LiQingSong + */ +import axios, { AxiosPromise, AxiosRequestConfig, AxiosResponse } from 'axios'; +import { notification } from "ant-design-vue"; +import settings from '@/config/settings'; +import { getToken, setToken } from '@/utils/localToken'; + +export interface ResponseData { + code: number; + data?: any; + msg?: string; + token?: string; +} + +const customCodeMessage: {[key: number]: string} = { + 10002: '当前用户登入信息已失效,请重新登入再操作', // 未登陆 +}; + +const serverCodeMessage: {[key: number]: string} = { + 200: '服务器成功返回请求的数据', + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 500: '服务器发生错误,请检查服务器(Internal Server Error)', + 502: '网关错误(Bad Gateway)', + 503: '服务不可用,服务器暂时过载或维护(Service Unavailable)', + 504: '网关超时(Gateway Timeout)', +}; + +/** + * 异常处理程序 + */ +const errorHandler = (error: any) => { + const { response, message } = error; + if (message === 'CustomError') { + // 自定义错误 + const { config, data } = response; + const { url, baseURL} = config; + const { code, msg } = data; + const reqUrl = url.split("?")[0].replace(baseURL, ''); + const noVerifyBool = settings.ajaxResponseNoVerifyUrl.includes(reqUrl); + if (!noVerifyBool) { + notification.error({ + message: `提示`, + description: customCodeMessage[code] || msg || 'Error', + }); + + /* if (code === 10002) { + router.replace('/user/login'); + } */ + } + } else if (message === 'CancelToken') { + // 取消请求 Token + // eslint-disable-next-line no-console + console.log(message); + } else if (response && response.status) { + const errorText = serverCodeMessage[response.status] || response.statusText; + const { status, request } = response; + notification.error({ + message: `请求错误 ${status}: ${request.responseURL}`, + description: errorText, + }); + } else if (!response) { + notification.error({ + description: '您的网络发生异常,无法连接服务器', + message: '网络异常', + }); + } + + return Promise.reject(error); +} + +/** + * 配置request请求时的默认参数 + */ +const request = axios.create({ + baseURL: process.env.VUE_APP_APIHOST, // url = api url + request url + withCredentials: true, // 当跨域请求时发送cookie + timeout: 0 // 请求超时时间,5000(单位毫秒) / 0 不做限制 +}); + +// 全局设置 - post请求头 +// request.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + +/** + * 请求前 + * 请求拦截器 + */ +request.interceptors.request.use( + async (config: AxiosRequestConfig & { cType?: boolean }) => { + + // 如果设置了cType 说明是自定义 添加 Content-Type类型 为自定义post 做铺垫 + if (config['cType']) { + config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // 自定义添加token header + const headerToken = await getToken(); + if (headerToken) { + config.headers[settings.ajaxHeadersTokenKey] = headerToken; + } + + return config; + }, + /* error=> {} */ // 已在 export default catch +); + +/** + * 请求后 + * 响应拦截器 + */ +request.interceptors.response.use( + async (response: AxiosResponse) => { + + const res: ResponseData = response.data; + const { code, token } = res; + + // 自定义状态码验证 + if (code !== 0) { + return Promise.reject({ + response, + message: 'CustomError', + }); + } + + // 重置刷新token + if (token) { + await setToken(token); + } + + return response; + }, + /* error => {} */ // 已在 export default catch +); + +/** + * ajax 导出 + * + * Method: get + * Request Headers + * 无 - Content-Type + * Query String Parameters + * name: name + * age: age + * + * Method: post + * Request Headers + * Content-Type:application/json;charset=UTF-8 + * Request Payload + * { name: name, age: age } + * Custom config parameters + * { cType: true } Mandatory Settings Content-Type:application/json;charset=UTF-8 + * ...... + */ +export default function(config: AxiosRequestConfig): AxiosPromise { + return request(config).then((response: AxiosResponse) => response.data).catch(error => errorHandler(error)); +} diff --git a/packages/links/src/utils/routes.ts b/packages/links/src/utils/routes.ts new file mode 100644 index 0000000..058cace --- /dev/null +++ b/packages/links/src/utils/routes.ts @@ -0,0 +1,388 @@ +/** + * Route utils + * @author LiQingSong + */ +/** + * 面包屑类型 + */ + export interface BreadcrumbType { + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + // 路由地址或外链 + path: string; +} + +/** + * tab导航存储规则类型 + */ +export type TabNavType = 'path' | 'querypath'; + +import 'vue-router' +declare module 'vue-router' { + /** + * 自定义补充扩展 - 路由 - 类型字段 + */ + interface _RouteRecordBase { + // 菜单中是否隐藏 + hidden?: boolean; + // 图标的名称,显示在菜单标题前 + icon?: string; + // 权限控制,页面角色(您可以设置多个角色) + roles?: string[]; + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + /** + * 面包屑自定义内容: + * 1、默认不配置按照路由自动读取; + * 2、设置为 false , 按照路由自动读取并不读当前自己; + * 3、配置对应的面包屑格式如下: + */ + breadcrumb?: BreadcrumbType[] | false; + /** + * 设置tab导航存储规则类型 + * 1、默认不配置按照path(route.path)规则 + * 2、querypath:path + query (route.path+route.query) 规则 + */ + tabNavType?: TabNavType ; + /** + * 设置该字段,则在关闭当前tab页时,作为关闭前的钩子函数 + * @param close 关闭回调函数 + */ + tabNavCloseBefore?: (close: ()=>void)=> void; + /** + * 左侧菜单选中,如果设置路径,侧栏将突出显示你设置的路径对应的侧栏导航 + * 1、(默认 route.path),此参数是为了满足特殊页面特殊需求, + * 2、如:详情页等选中侧栏导航或在模块A下面的页面,想选模块B为导航选中状态 + */ + selectLeftMenu?: string; + + // 所有父元素的path,下标key按照父元素的顺序 + parentPath?: string[] + } +} +import { RouteRecordRaw, RouteLocationNormalizedLoaded } from 'vue-router'; +import { pathToRegexp } from "path-to-regexp"; + + +/** + * 自定义重命名 - 路由类型 + */ +export type RoutesDataItem = RouteRecordRaw; + +/** + * 头部tab导航类型 + */ +export interface TabNavItem { + route: RouteLocationNormalizedLoaded, + menu: RoutesDataItem +} + +/** + * 用Routes的path作为key的JsonRoutes + */ +export interface PathJsonRoutesDataItem { + [path: string]: RoutesDataItem +} + +import { isExternal } from './validate'; +import { equalObject } from "./object"; + +/** + * 获取 route + * @param pathname path + * @param routesData routes + */ +export const getRouteItem = (pathname: string, routesData: RoutesDataItem[]): RoutesDataItem => { + let item: RoutesDataItem = { title: '', path: '', redirect: '', roles: [] }; + for (let index = 0, len = routesData.length; index < len; index += 1) { + const element = routesData[index]; + //if (element.path === pathname) { + // lqs 20210120 修复用pathToRegexp + if (pathToRegexp(element.path).exec(pathname)) { + item = element; + break; + } + + if (element.children) { + item = getRouteItem(pathname, element.children); + if (item.path !== '') { + break; + } + } + } + + return item; +}; + +/** + * 获取 route + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getJsonRouteItem = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem => { + return jsonRoutesData[pathname] || {}; +} + +/** + * 根据 hidden 判断是否有数据子集 + * @param children RoutesDataItem[] + */ +export const hasChildRoute = (children: RoutesDataItem[]): boolean => { + const showChildren = children.filter(item => { + if (item.hidden) { + return false; + } + return true; + }); + if (showChildren.length > 0) { + return true; + } + return false; +}; + + +/** + * 根据父path 设置当前项 path + * @param pathname path + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const setRoutePathForParent = (pathname: string, parentPath = '/', headStart = '/'): string => { + if (isExternal(pathname)) { + return pathname; + } + + return pathname.substr(0, headStart.length) === headStart + ? pathname + : `${parentPath}/${pathname}`; +}; + +/** + * 根据路由 pathname 数组 - 返回对应的 route 数组 + * @param pathname 路由path数组 + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + */ +export const getPathsTheRoutes = ( pathname: string[], jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem[] => { + const routeItem: RoutesDataItem[] = []; + + for (let index = 0, len = pathname.length; index < len; index += 1) { + const element = pathname[index]; + const item = getJsonRouteItem(element, jsonRoutesData); + if (item.path !== '') { + routeItem.push(item); + } + } + + return routeItem; +}; + + +/** + * 获取面包屑对应的 route 数组 + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + */ +export const getBreadcrumbRoutes = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): BreadcrumbType[] => { + const route = getJsonRouteItem(pathname,jsonRoutesData); + if(!route.path) { + return []; + } + + if (!route.breadcrumb) { + const parentPath = route.parentPath || [] + const routes = getPathsTheRoutes(parentPath, jsonRoutesData); + + return route.breadcrumb === false ? routes : [...routes, route]; + } + + return route.breadcrumb; +}; + + +/** + * 获取当前路由选中的侧边栏菜单path + * @param route route + */ +export const getSelectLeftMenuPath = (route: RoutesDataItem): string => { + return route.selectLeftMenu || route.path; +}; + + + +/** + * 格式化返回 vue 路由, 主要处理特殊情况 + * @param routesData routes + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const vueRoutes = (routesData: RoutesDataItem[], parentPath = '/', headStart = '/'): RoutesDataItem[] => { + return routesData.map(item => { + const { children, ...other } = item; + const itemChildren = children || []; + const newItem: RoutesDataItem = { ...other }; + newItem.path = setRoutePathForParent(newItem.path, parentPath, headStart); + + if (item.children) { + newItem.children = [ + ...vueRoutes(itemChildren, newItem.path, headStart), + ]; + } + + return newItem; + }); +}; + +/** + * 把经过 vueRoutes 处理过的 routes 转换成用path作为key的json,并统一增加了parentPath + * @param vueRoutesData 经过 vueRoutes 处理过的 routes + * @returns PathJsonRoutesDataItem + */ + export const jsonPathVueRoutes = (vueRoutesData: RoutesDataItem[]): PathJsonRoutesDataItem=> { + + const jsonRoutes: PathJsonRoutesDataItem = {}; + + function forRoute(routesData: RoutesDataItem[], parentPath: string[]) { + const len = routesData.length; + for (let index = 0; index < len; index++) { + const item = routesData[index]; + + const pPath = (item.parentPath && item.parentPath.length > 0) ? item.parentPath : parentPath; + + const newItem: RoutesDataItem = { + ...item, + parentPath: [...pPath] + }; + + jsonRoutes[item.path] = newItem; + + if (item.children) { + forRoute(item.children,[...pPath, item.path]) + } + + } + } + + forRoute(vueRoutesData, []); + + return jsonRoutes; +} + +/** + * 批量设置route.meta值 + * @param routesData routes + */ + export const routesSetMeta = (routesData: RoutesDataItem[]): RoutesDataItem[] => { + return routesData.map(item => { + const { children, tabNavType, meta, ...other } = item; + const newItem: RoutesDataItem = { + meta: { + ...meta, + + // 自定义设置的 meta 值 S + + tabNavType: tabNavType || 'path', + + // 自定义设置的 meta 值 E + }, + ...other + }; + + if (item.children) { + const itemChildren = children || []; + newItem.children = [ + ...routesSetMeta(itemChildren), + ]; + } + + return newItem; + }); + +} + + +/** + * 根据 自定义传入权限名 判断当前用户是否有权限 + * @param userRoles 用户的权限 + * @param roles 自定义权限名 + */ +export const hasPermissionRouteRoles = (userRoles: string[], roles?: string | string[]): boolean => { + if (userRoles.includes('admin')) { + return true; + } + + if(typeof roles === 'undefined') { + return true; + } + + if (typeof roles === 'string') { + return userRoles.includes(roles); + } + + if(roles instanceof Array && roles.length > 0) { + return roles.some(role => userRoles.includes(role)); + } + + return false; +}; + +/** + * 根据 route.roles 判断当前用户是否有权限 + * @param roles 用户的权限 + * @param route 当前路由 + */ +export const hasPermission = (roles: string[], route: RoutesDataItem): boolean => { + if (roles.includes('admin')) { + return true; + } + + if (route.roles) { + return route.roles.some(role => roles.includes(role)); + //return roles.some(role => route.roles?.includes(role)); + } + + return true; +}; + +/** + * 根据用户权限 获取 对应权限菜单 + * @param roles 用户的权限 + * @param routes 框架对应路由 + */ +export const getPermissionMenuData = ( roles: string[], routes: RoutesDataItem[]): RoutesDataItem[] => { + const menu: RoutesDataItem[] = []; + for (let index = 0, len = routes.length; index < len; index += 1) { + const element = {...routes[index]}; + if (hasPermission(roles, element)) { + if (element.children) { + element.children = getPermissionMenuData(roles, element.children); + } + menu.push(element); + } + } + + return menu; +}; + + +/** + * 判断tabNav,对应的route是否相等 + * @param route1 vue-route + * @param route2 vue-route + * @param type 判断规则 + * @returns + */ + export const equalTabNavRoute = (route1: RouteLocationNormalizedLoaded, route2: RouteLocationNormalizedLoaded, type: TabNavType = 'path'): boolean=> { + let is = false; + switch (type) { + case 'querypath': // path + query + is = equalObject(route1.query,route2.query) && route1.path === route2.path + break; + default: // path + is = route1.path === route2.path + break; + } + + return is; +} + diff --git a/packages/links/src/utils/store.ts b/packages/links/src/utils/store.ts new file mode 100644 index 0000000..f21cae9 --- /dev/null +++ b/packages/links/src/utils/store.ts @@ -0,0 +1,61 @@ +/** + * Store utils + * @author LiQingSong + */ +import { Module, ModuleTree } from 'vuex'; + +/** + * 自定义项目 Store Module 类型 + * 为自动导入的 store 做类型限制 + * [@/store文件夹下定义的 store]与[@/views文件夹下定义的`文件store.ts`] 必须继承此类型 + * @author LiQingSong + */ +export interface StoreModuleType extends Module { + namespaced: true; + name: string; +} + +/** + * 自动导入 Store + * @author LiQingSong + */ +export function importAllStore (): ModuleTree { + const modules: ModuleTree = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:store.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]store\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + + // 导入 @/store 下文件 + const requireContext: __WebpackModuleApi.RequireContext = require.context('../store', false, /\.ts$/); + requireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = requireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + \ No newline at end of file diff --git a/packages/links/src/utils/trim.ts b/packages/links/src/utils/trim.ts new file mode 100644 index 0000000..1611990 --- /dev/null +++ b/packages/links/src/utils/trim.ts @@ -0,0 +1,44 @@ +/** + * 去除空格 + * @author LiQingSong + */ + + /** + * 去除两端空格 + * @author LiQingSong + */ + export function trim(val: string): string { + return val.replace(/(^\s*)|(\s*$)/g, ""); +} + + /** + * 去除左边空格 + * @author LiQingSong + */ +export function ltrim(val: string): string { + return val.replace(/(^\s*)/g,""); +} + + /** + * 去除右边边空格 + * @author LiQingSong + */ +export function rtrim(val: string): string{ + return val.replace(/(\s*$)/g,""); +} + + /** + * 去除两端 , + * @author LiQingSong + */ +export function trimComma(val: string): string { + return val.replace(/(^,*)|(,*$)/g, ""); +} + + /** + * 去除两端 | + * @author LiQingSong + */ +export function trimVerticalBar(val: string): string{ + return val.replace(/(^\|*)|(\|*$)/g, ""); +} \ No newline at end of file diff --git a/packages/links/src/utils/validate.ts b/packages/links/src/utils/validate.ts new file mode 100644 index 0000000..1c553f6 --- /dev/null +++ b/packages/links/src/utils/validate.ts @@ -0,0 +1,9 @@ +/** + * 判断是否是外链 + * @param {string} path + * @returns {Boolean} + * @author LiQingSong + */ +export const isExternal = (path: string): boolean => { + return /^(https?:|mailto:|tel:)/.test(path); +}; diff --git a/packages/links/src/views/404/index.vue b/packages/links/src/views/404/index.vue new file mode 100644 index 0000000..44657a6 --- /dev/null +++ b/packages/links/src/views/404/index.vue @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/packages/links/src/views/analysis/chartcard/data.d.ts b/packages/links/src/views/analysis/chartcard/data.d.ts new file mode 100644 index 0000000..89e3d6f --- /dev/null +++ b/packages/links/src/views/analysis/chartcard/data.d.ts @@ -0,0 +1,11 @@ + +export interface ChartDataType { + day: string[]; + num: number[]; +} + +export interface LinksChartDataType { + total: number; + num: number; + chart: ChartDataType; +} diff --git a/packages/links/src/views/analysis/chartcard/index.vue b/packages/links/src/views/analysis/chartcard/index.vue new file mode 100644 index 0000000..1219c1f --- /dev/null +++ b/packages/links/src/views/analysis/chartcard/index.vue @@ -0,0 +1,150 @@ + + + diff --git a/packages/links/src/views/analysis/chartcard/locales/en-US.ts b/packages/links/src/views/analysis/chartcard/locales/en-US.ts new file mode 100644 index 0000000..483445e --- /dev/null +++ b/packages/links/src/views/analysis/chartcard/locales/en-US.ts @@ -0,0 +1,7 @@ +export default { + 'page.analysis.chartcard.text-years': 'Years', + 'page.analysis.chartcard.text-total': 'Total', + 'page.analysis.chartcard.linkschartcard.card-title': 'Neighbors', + + +}; diff --git a/packages/links/src/views/analysis/chartcard/locales/zh-CN.ts b/packages/links/src/views/analysis/chartcard/locales/zh-CN.ts new file mode 100644 index 0000000..a5ac844 --- /dev/null +++ b/packages/links/src/views/analysis/chartcard/locales/zh-CN.ts @@ -0,0 +1,5 @@ +export default { + 'page.analysis.chartcard.text-years': '年', + 'page.analysis.chartcard.text-total': '总数量', + 'page.analysis.chartcard.linkschartcard.card-title': '左邻右舍', +}; diff --git a/packages/links/src/views/analysis/chartcard/locales/zh-TW.ts b/packages/links/src/views/analysis/chartcard/locales/zh-TW.ts new file mode 100644 index 0000000..bd44a3a --- /dev/null +++ b/packages/links/src/views/analysis/chartcard/locales/zh-TW.ts @@ -0,0 +1,6 @@ +export default { + 'page.analysis.chartcard.text-years': '年', + 'page.analysis.chartcard.text-total': '總數量', + 'page.analysis.chartcard.linkschartcard.card-title': '左鄰右舍', + +}; diff --git a/packages/links/src/views/analysis/chartcard/service.ts b/packages/links/src/views/analysis/chartcard/service.ts new file mode 100644 index 0000000..02a44a7 --- /dev/null +++ b/packages/links/src/views/analysis/chartcard/service.ts @@ -0,0 +1,8 @@ +import request from '@/utils/request'; + +export async function annualnewLinks(): Promise { + return request({ + url: '/stats/links/annualnew', + method: 'get' + }); +} diff --git a/packages/links/src/views/analysis/hitcard/data.d.ts b/packages/links/src/views/analysis/hitcard/data.d.ts new file mode 100644 index 0000000..bd38894 --- /dev/null +++ b/packages/links/src/views/analysis/hitcard/data.d.ts @@ -0,0 +1,27 @@ +export interface PaginationConfig { + total: number; + current: number; + pageSize: number; + showSizeChanger: boolean; + showQuickJumper: boolean; + onChange: (page: number, pageSize: number) => void; + showSizeChange: (current: number, size: number) => void; +} + +export interface TableListQueryParams { + page: number; + per: number; + sort?: number; +} + +export interface TableListItem { + id: number; + title: string; + hit: number; +} + +export interface LinksHitDataType { + list: TableListItem[]; + columns:any; + pagination: PaginationConfig; +} diff --git a/packages/links/src/views/analysis/hitcard/index.vue b/packages/links/src/views/analysis/hitcard/index.vue new file mode 100644 index 0000000..1d7f21a --- /dev/null +++ b/packages/links/src/views/analysis/hitcard/index.vue @@ -0,0 +1,111 @@ + + + diff --git a/packages/links/src/views/analysis/hitcard/locales/en-US.ts b/packages/links/src/views/analysis/hitcard/locales/en-US.ts new file mode 100644 index 0000000..90c3f09 --- /dev/null +++ b/packages/links/src/views/analysis/hitcard/locales/en-US.ts @@ -0,0 +1,8 @@ +export default { + 'page.analysis.linkshitcard.card-title': 'Neighbors list', + 'page.analysis.linkshitcard.card.table-column-number': 'Serial number', + 'page.analysis.linkshitcard.card.table-column-title': 'Title', + 'page.analysis.linkshitcard.card.table-column-category': 'Classify', + + +}; diff --git a/packages/links/src/views/analysis/hitcard/locales/zh-CN.ts b/packages/links/src/views/analysis/hitcard/locales/zh-CN.ts new file mode 100644 index 0000000..15144d1 --- /dev/null +++ b/packages/links/src/views/analysis/hitcard/locales/zh-CN.ts @@ -0,0 +1,6 @@ +export default { + 'page.analysis.linkshitcard.card-title': '左邻右舍列表', + 'page.analysis.linkshitcard.card.table-column-number': '序号', + 'page.analysis.linkshitcard.card.table-column-title': '标题', + 'page.analysis.linkshitcard.card.table-column-category': '分类', +}; diff --git a/packages/links/src/views/analysis/hitcard/locales/zh-TW.ts b/packages/links/src/views/analysis/hitcard/locales/zh-TW.ts new file mode 100644 index 0000000..e18aca1 --- /dev/null +++ b/packages/links/src/views/analysis/hitcard/locales/zh-TW.ts @@ -0,0 +1,7 @@ +export default { + 'page.analysis.linkshitcard.card-title': '左鄰右舍列表', + 'page.analysis.linkshitcard.card.table-column-number': '序號', + 'page.analysis.linkshitcard.card.table-column-title': '標題', + 'page.analysis.linkshitcard.card.table-column-category': '分類', + +}; diff --git a/packages/links/src/views/analysis/hitcard/service.ts b/packages/links/src/views/analysis/hitcard/service.ts new file mode 100644 index 0000000..586c654 --- /dev/null +++ b/packages/links/src/views/analysis/hitcard/service.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from './data.d'; + +export async function linksHitQueryList(params?: TableListQueryParams): Promise { + return request({ + url: '/links', + method: 'get', + params, + }); +} + diff --git a/packages/links/src/views/category/components/FormDialog/data.d.ts b/packages/links/src/views/category/components/FormDialog/data.d.ts new file mode 100644 index 0000000..c144e8c --- /dev/null +++ b/packages/links/src/views/category/components/FormDialog/data.d.ts @@ -0,0 +1,16 @@ +import { CategoryItem } from "../../data.d"; + + + +export type FormItem = Omit; + +export type DataItem = FormItem; + + +export interface FormDialogProps { + visible: boolean; + submitLoading?: boolean; + values?: CategoryItem; + title?: string; + onSubmit: (values: DataItem) => Promise; +} \ No newline at end of file diff --git a/packages/links/src/views/category/components/FormDialog/index.vue b/packages/links/src/views/category/components/FormDialog/index.vue new file mode 100644 index 0000000..5625e52 --- /dev/null +++ b/packages/links/src/views/category/components/FormDialog/index.vue @@ -0,0 +1,148 @@ + + diff --git a/packages/links/src/views/category/data.d.ts b/packages/links/src/views/category/data.d.ts new file mode 100644 index 0000000..6d9fcf6 --- /dev/null +++ b/packages/links/src/views/category/data.d.ts @@ -0,0 +1,13 @@ + +export interface CategoryItem { + id: number; + name: string; + alias: string; + sort: number; +} + +export interface TableDataType { + loading: boolean; + columns: any; + list: CategoryItem[]; +} diff --git a/packages/links/src/views/category/index.vue b/packages/links/src/views/category/index.vue new file mode 100644 index 0000000..63bc853 --- /dev/null +++ b/packages/links/src/views/category/index.vue @@ -0,0 +1,172 @@ + + + + diff --git a/packages/links/src/views/category/locales/en-US.ts b/packages/links/src/views/category/locales/en-US.ts new file mode 100644 index 0000000..0465d2f --- /dev/null +++ b/packages/links/src/views/category/locales/en-US.ts @@ -0,0 +1,30 @@ +export default { + 'views.links.category.button.add': 'New', + 'views.links.category.table.column.index': 'Order', + 'views.links.category.table.column.name': 'Name', + 'views.links.category.table.column.alias': 'Alias', + 'views.links.category.table.column.sort': 'Sort', + 'views.links.category.table.column.action': 'Action', + 'views.links.category.table.column.action.buttion.edit': 'Edit', + 'views.links.category.table.column.action.buttion.del': 'Delete', + 'views.links.category.table.column.action.buttion.del.popconfirm': 'Confirm deletion?', + 'views.links.category.table.column.action.buttion.del.success': 'Deleted successfully!', + + 'views.links.category.components.formdialog.add.title': 'New Category', + 'views.links.category.components.formdialog.edit.title': 'Modify Category', + 'views.links.category.components.formdialog.name': 'Category Name', + 'views.links.category.components.formdialog.name.placeholder': 'Please enter a category name', + 'views.links.category.components.formdialog.name.test': 'Cannot have English format ","', + 'views.links.category.components.formdialog.name.max': 'Up to 10 characters', + 'views.links.category.components.formdialog.alias': 'Category Alias', + 'views.links.category.components.formdialog.alias.placeholder': 'Please enter a category alias', + 'views.links.category.components.formdialog.alias.test': 'Must be lowercase letters', + 'views.links.category.components.formdialog.alias.max': 'Up to 50 characters', + 'views.links.category.components.formdialog.sort': 'Sort', + 'views.links.category.components.formdialog.sort.placeholder': 'Please enter the sort', + + 'views.links.category.components.formdialog.btn.save': 'Save', + 'views.links.category.components.formdialog.btn.cancel': 'Cancel', + 'views.links.category.components.formdialog.addsuccess': 'added successfully!', + 'views.links.category.components.formdialog.editsuccess': 'Successfully modified!', +}; \ No newline at end of file diff --git a/packages/links/src/views/category/locales/zh-CN.ts b/packages/links/src/views/category/locales/zh-CN.ts new file mode 100644 index 0000000..dfa5766 --- /dev/null +++ b/packages/links/src/views/category/locales/zh-CN.ts @@ -0,0 +1,31 @@ +export default { + 'views.links.category.button.add': '新增', + 'views.links.category.table.column.index': '序号', + 'views.links.category.table.column.name': '名称', + 'views.links.category.table.column.alias': '别名', + 'views.links.category.table.column.sort': '排序', + 'views.links.category.table.column.action': '操作', + 'views.links.category.table.column.action.buttion.edit': '修改', + 'views.links.category.table.column.action.buttion.del': '删除', + 'views.links.category.table.column.action.buttion.del.popconfirm': '是否确认删除?', + 'views.links.category.table.column.action.buttion.del.success': '删除成功!', + + 'views.links.category.components.formdialog.add.title': '新增分类', + 'views.links.category.components.formdialog.edit.title': '修改分类', + 'views.links.category.components.formdialog.name': '分类名称', + 'views.links.category.components.formdialog.name.placeholder': '请输入分类名称', + 'views.links.category.components.formdialog.name.test': '不能有英文格式的 ","', + 'views.links.category.components.formdialog.name.max': '最长 10 个字', + 'views.links.category.components.formdialog.alias': '分类别名', + 'views.links.category.components.formdialog.alias.placeholder': '请输入分类别名', + 'views.links.category.components.formdialog.alias.test': '必须是小写字母', + 'views.links.category.components.formdialog.alias.max': '最长 50 个字符', + 'views.links.category.components.formdialog.sort': '排序', + 'views.links.category.components.formdialog.sort.placeholder': '请输入排序', + 'views.links.category.components.formdialog.btn.save': '保存', + 'views.links.category.components.formdialog.btn.cancel': '取消', + 'views.links.category.components.formdialog.addsuccess': '新增成功!', + 'views.links.category.components.formdialog.editsuccess': '修改成功!', + + +}; \ No newline at end of file diff --git a/packages/links/src/views/category/locales/zh-TW.ts b/packages/links/src/views/category/locales/zh-TW.ts new file mode 100644 index 0000000..3a256b8 --- /dev/null +++ b/packages/links/src/views/category/locales/zh-TW.ts @@ -0,0 +1,29 @@ +export default { + 'views.links.category.button.add': '新增', + 'views.links.category.table.column.index': '序號', + 'views.links.category.table.column.name': '名稱', + 'views.links.category.table.column.alias': '别名', + 'views.links.category.table.column.sort': '排序', + 'views.links.category.table.column.action': '操作', + 'views.links.category.table.column.action.buttion.edit': '修改', + 'views.links.category.table.column.action.buttion.del': '刪除', + 'views.links.category.table.column.action.buttion.del.popconfirm': '是否確認刪除?', + 'views.links.category.table.column.action.buttion.del.success': '刪除成功!', + + 'views.links.category.components.formdialog.add.title': '新增分類', + 'views.links.category.components.formdialog.edit.title': '修改分類', + 'views.links.category.components.formdialog.name': '分類名稱', + 'views.links.category.components.formdialog.name.placeholder': '請輸入分類名稱', + 'views.links.category.components.formdialog.name.test': '不能有英文格式的 ","', + 'views.links.category.components.formdialog.name.max': '最長 10 個字', + 'views.links.category.components.formdialog.alias': '分類別名', + 'views.links.category.components.formdialog.alias.placeholder': '請輸入分類別名', + 'views.links.category.components.formdialog.alias.test': '必須是小寫字母', + 'views.links.category.components.formdialog.alias.max': '最長 50 個字符', + 'views.links.category.components.formdialog.sort': '排序', + 'views.links.category.components.formdialog.sort.placeholder': '請輸入排序', + 'views.links.category.components.formdialog.btn.save': '保存', + 'views.links.category.components.formdialog.btn.cancel': '取消', + 'views.links.category.components.formdialog.addsuccess': '新增成功!', + 'views.links.category.components.formdialog.editsuccess': '修改成功!', +}; \ No newline at end of file diff --git a/packages/links/src/views/category/service.ts b/packages/links/src/views/category/service.ts new file mode 100644 index 0000000..d4a90ef --- /dev/null +++ b/packages/links/src/views/category/service.ts @@ -0,0 +1,58 @@ +import request from '@/utils/request'; +import { DataItem } from "./components/FormDialog/data.d"; + +/** + * 左邻右舍 - 分类 - 列表 - 有分页 + * @param params 请求参数 + * @returns + * @author LiQingSong + */ +export async function queryList(): Promise { + return request({ + url: '/link/categorys', + method: 'get', + }); +} + +/** + * 左邻右舍 - 分类 - 删除 + * @param id ID + * @returns + * @author LiQingSong + */ +export async function removeData(id: number): Promise { + return request({ + url: `/link/categorys/${id}`, + method: 'delete', + }); +} + + + + +/** + * 左邻右舍 - 分类 - 新增 + * @param {Object} data 请求参数 + * @author LiQingSong + */ + export async function categoryAdd(data: DataItem): Promise { + return request({ + url: '/link/categorys', + method: 'post', + data + }); +} + +/** + * 左邻右舍 - 分类 - 编辑 + * @param {Number} id ID + * @param {Object} data 请求参数 + * @author LiQingSong + */ +export async function categoryEdit(id: number, data: DataItem): Promise { + return request({ + url: `/link/categorys/${id}`, + method: 'put', + data + }); +} diff --git a/packages/links/src/views/home/index.vue b/packages/links/src/views/home/index.vue new file mode 100644 index 0000000..76c2925 --- /dev/null +++ b/packages/links/src/views/home/index.vue @@ -0,0 +1,7 @@ + + diff --git a/packages/links/src/views/list/components/FormDialog/data.d.ts b/packages/links/src/views/list/components/FormDialog/data.d.ts new file mode 100644 index 0000000..538aa2f --- /dev/null +++ b/packages/links/src/views/list/components/FormDialog/data.d.ts @@ -0,0 +1,29 @@ +import { Link } from "../../data.d"; + +export type Link = Link; + + +export interface FormItem { + categoryId: number | string; + title: string; + href: string; + description: string; + logo: string[]; +} + +export interface DataItem { + categoryId: number | string; + title: string; + href: string; + description: string; + logo: string; +} + + +export interface FormDialogProps { + visible: boolean; + submitLoading?: boolean; + values?: Link; + title?: string; + onSubmit: (values: DataItem) => Promise; +} \ No newline at end of file diff --git a/packages/links/src/views/list/components/FormDialog/index.vue b/packages/links/src/views/list/components/FormDialog/index.vue new file mode 100644 index 0000000..4b6d8f4 --- /dev/null +++ b/packages/links/src/views/list/components/FormDialog/index.vue @@ -0,0 +1,159 @@ + + diff --git a/packages/links/src/views/list/components/SearchDrawer/data.d.ts b/packages/links/src/views/list/components/SearchDrawer/data.d.ts new file mode 100644 index 0000000..0386fe7 --- /dev/null +++ b/packages/links/src/views/list/components/SearchDrawer/data.d.ts @@ -0,0 +1,17 @@ + +export interface SearchFormItem { + keywords: string; + categoryid: number | string; +} + +export interface SearchValues { + keywords: string; + categoryid: number | string; +} + +export interface SearchProps { + title?: string; + visible: boolean; + onReset: (values: SearchValues) => void; + onSubmit: (values: SearchValues) => void; +} diff --git a/packages/links/src/views/list/components/SearchDrawer/index.vue b/packages/links/src/views/list/components/SearchDrawer/index.vue new file mode 100644 index 0000000..39d27aa --- /dev/null +++ b/packages/links/src/views/list/components/SearchDrawer/index.vue @@ -0,0 +1,107 @@ + + + diff --git a/packages/links/src/views/list/data.d.ts b/packages/links/src/views/list/data.d.ts new file mode 100644 index 0000000..ea417ca --- /dev/null +++ b/packages/links/src/views/list/data.d.ts @@ -0,0 +1,32 @@ +import { PaginationConfig } from "@/components/ScreenTable/data.d"; +import { CategoryItem } from "../category/data.d"; + +export type Category = Pick; + +export interface Link { + id: number; + title: string; + category: Category; + description: string; + href: string; + logo: string; +} + +export interface TableListQueryParams { + page: number; + per: number; + categoryid: string | number; + keywords?: string; + sort?: number; + order?: number; + refresh?: string | number; +} + +export type TableListItem = Pick; + +export interface TableDataType { + loading: boolean; + columns: any; + list: TableListItem[]; + pagination: PaginationConfig; +} diff --git a/packages/links/src/views/list/index.vue b/packages/links/src/views/list/index.vue new file mode 100644 index 0000000..d2ac85c --- /dev/null +++ b/packages/links/src/views/list/index.vue @@ -0,0 +1,261 @@ + + + + diff --git a/packages/links/src/views/list/locales/en-US.ts b/packages/links/src/views/list/locales/en-US.ts new file mode 100644 index 0000000..44529a8 --- /dev/null +++ b/packages/links/src/views/list/locales/en-US.ts @@ -0,0 +1,40 @@ +export default { + 'views.links.list.button.add': 'New', + 'views.links.list.button.search': 'Advanced Search', + 'views.links.list.search.input.placeholder': 'Please enter search content', + 'views.links.list.table.column.index': 'Order', + 'views.links.list.table.column.title': 'Title', + 'views.links.list.table.column.category': 'Classify', + 'views.links.list.table.column.action': 'Action', + 'views.links.list.table.column.action.buttion.edit': 'Edit', + 'views.links.list.table.column.action.buttion.del': 'Delete', + 'views.links.list.table.column.action.buttion.del.popconfirm': 'Confirm deletion?', + 'views.links.list.table.column.action.buttion.del.success': 'Deleted successfully!', + + 'views.links.list.components.search.title': 'Advanced Search', + 'views.links.list.components.search.form.keywords': 'Keywords', + 'views.links.list.components.search.form.keywords.placeholder': 'Please enter keywords', + 'views.links.list.components.search.form.category': 'Classify', + 'views.links.list.components.search.form.category.placeholder': 'Please Choose', + 'views.links.list.components.search.form.button.reset': 'Reset', + 'views.links.list.components.search.form.button.primary': 'Search', + + 'views.links.list.components.formdialog.add.title': 'Add link', + 'views.links.list.components.formdialog.edit.title': 'Edit link', + 'views.links.list.components.formdialog.category': 'Category', + 'views.links.list.components.formdialog.category.placeholder': 'please choose', + 'views.links.list.components.formdialog.title': 'Name', + 'views.links.list.components.formdialog.title.placeholder': 'Please enter a name', + 'views.links.list.components.formdialog.title.max': 'Up to 50 characters', + 'views.links.list.components.formdialog.href': 'URL', + 'views.links.list.components.formdialog.href.placeholder': 'Please enter the URL', + 'views.links.list.components.formdialog.href.test': 'Incorrect URL format [http / https]', + 'views.links.list.components.formdialog.description': 'Intro', + 'views.links.list.components.formdialog.description.placeholder': 'please enter', + 'views.links.list.components.formdialog.description.max': 'Up to 100 characters', + 'views.links.list.components.formdialog.logo': 'Logo', + 'views.links.list.components.formdialog.btn.save': 'Save', + 'views.links.list.components.formdialog.btn.cancel': 'Cancel', + 'views.links.list.components.formdialog.addsuccess': 'added successfully!', + 'views.links.list.components.formdialog.editsuccess': 'Successfully modified!', +}; \ No newline at end of file diff --git a/packages/links/src/views/list/locales/zh-CN.ts b/packages/links/src/views/list/locales/zh-CN.ts new file mode 100644 index 0000000..c4bc3cd --- /dev/null +++ b/packages/links/src/views/list/locales/zh-CN.ts @@ -0,0 +1,42 @@ +export default { + 'views.links.list.button.add': '新增', + 'views.links.list.button.search': '高级搜索', + 'views.links.list.search.input.placeholder': '请输入搜索内容', + 'views.links.list.table.column.index': '序号', + 'views.links.list.table.column.title': '标题', + 'views.links.list.table.column.category': '分类', + 'views.links.list.table.column.action': '操作', + 'views.links.list.table.column.action.buttion.edit': '修改', + 'views.links.list.table.column.action.buttion.del': '删除', + 'views.links.list.table.column.action.buttion.del.popconfirm': '是否确认删除?', + 'views.links.list.table.column.action.buttion.del.success': '删除成功!', + + 'views.links.list.components.search.title': '高级搜索', + 'views.links.list.components.search.form.keywords': '标题', + 'views.links.list.components.search.form.keywords.placeholder': '请输入标题', + 'views.links.list.components.search.form.category': '分类', + 'views.links.list.components.search.form.category.placeholder': '请选择', + 'views.links.list.components.search.form.button.reset': '重置', + 'views.links.list.components.search.form.button.primary': '搜索', + + 'views.links.list.components.formdialog.add.title': '新增链接', + 'views.links.list.components.formdialog.edit.title': '修改链接', + 'views.links.list.components.formdialog.category': '分类', + 'views.links.list.components.formdialog.category.placeholder': '请选择分类', + 'views.links.list.components.formdialog.title': '名称', + 'views.links.list.components.formdialog.title.placeholder': '请输入名称', + 'views.links.list.components.formdialog.title.max': '最长 50 个字', + 'views.links.list.components.formdialog.href': '网址', + 'views.links.list.components.formdialog.href.placeholder': '请输入网址', + 'views.links.list.components.formdialog.href.test': '网址格式不正确[http / https]', + 'views.links.list.components.formdialog.description': '简介', + 'views.links.list.components.formdialog.description.placeholder': '请输入简介', + 'views.links.list.components.formdialog.description.max': '最长 100 个字', + 'views.links.list.components.formdialog.logo': 'Logo', + 'views.links.list.components.formdialog.btn.save': '保存', + 'views.links.list.components.formdialog.btn.cancel': '取消', + 'views.links.list.components.formdialog.addsuccess': '新增成功!', + 'views.links.list.components.formdialog.editsuccess': '修改成功!', + + +}; \ No newline at end of file diff --git a/packages/links/src/views/list/locales/zh-TW.ts b/packages/links/src/views/list/locales/zh-TW.ts new file mode 100644 index 0000000..8168c9f --- /dev/null +++ b/packages/links/src/views/list/locales/zh-TW.ts @@ -0,0 +1,40 @@ +export default { + 'views.links.list.button.add': '新增', + 'views.links.list.button.search': '高級搜索', + 'views.links.list.search.input.placeholder': '請輸入搜索內容', + 'views.links.list.table.column.index': '序號', + 'views.links.list.table.column.title': '標題', + 'views.links.list.table.column.category': '分類', + 'views.links.list.table.column.action': '操作', + 'views.links.list.table.column.action.buttion.edit': '修改', + 'views.links.list.table.column.action.buttion.del': '刪除', + 'views.links.list.table.column.action.buttion.del.popconfirm': '是否確認刪除?', + 'views.links.list.table.column.action.buttion.del.success': '刪除成功!', + + 'views.links.list.components.search.title': '高級搜索', + 'views.links.list.components.search.form.keywords': '標題', + 'views.links.list.components.search.form.keywords.placeholder': '請輸入標題', + 'views.links.list.components.search.form.category': '分類', + 'views.links.list.components.search.form.category.placeholder': '請選擇', + 'views.links.list.components.search.form.button.reset': '重置', + 'views.links.list.components.search.form.button.primary': '搜索', + + 'views.links.list.components.formdialog.add.title': '新增鏈接', + 'views.links.list.components.formdialog.edit.title': '修改鏈接', + 'views.links.list.components.formdialog.category': '分類', + 'views.links.list.components.formdialog.category.placeholder': '請選擇分類', + 'views.links.list.components.formdialog.title': '名稱', + 'views.links.list.components.formdialog.title.placeholder': '請輸入名稱', + 'views.links.list.components.formdialog.title.max': '最長 50 個字', + 'views.links.list.components.formdialog.href': '網址', + 'views.links.list.components.formdialog.href.placeholder': '請輸入網址', + 'views.links.list.components.formdialog.href.test': '網址格式不正確[http / https]', + 'views.links.list.components.formdialog.description': '簡介', + 'views.links.list.components.formdialog.description.placeholder': '請輸入簡介', + 'views.links.list.components.formdialog.description.max': '最長 100 個字', + 'views.links.list.components.formdialog.logo': 'Logo', + 'views.links.list.components.formdialog.btn.save': '保存', + 'views.links.list.components.formdialog.btn.cancel': '取消', + 'views.links.list.components.formdialog.addsuccess': '新增成功!', + 'views.links.list.components.formdialog.editsuccess': '修改成功!', +}; \ No newline at end of file diff --git a/packages/links/src/views/list/service.ts b/packages/links/src/views/list/service.ts new file mode 100644 index 0000000..4b47612 --- /dev/null +++ b/packages/links/src/views/list/service.ts @@ -0,0 +1,71 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from './data.d'; +import { DataItem } from "./components/FormDialog/data.d"; + +/** + * 左邻右舍 - 列表 - 有分页 + * @param params 请求参数 + * @returns + * @author LiQingSong + */ +export async function queryList(params?: TableListQueryParams): Promise { + return request({ + url: '/links', + method: 'get', + params, + }); +} + +/** + * 左邻右舍 - 删除 + * @param id ID + * @returns + * @author LiQingSong + */ +export async function removeData(id: number): Promise { + return request({ + url: `/links/${id}`, + method: 'delete', + }); +} + + +/** + * 左邻右舍 - 获取指定详情 + * @param {Number} id ID + * @author LiQingSong + */ +export async function detailData(id: number): Promise { + return request({ + url: `/links/${id}`, + method: 'get' + }); +} + + +/** + * 左邻右舍 - 新增 + * @param {Object} data 请求参数 + * @author LiQingSong + */ + export async function linksAdd(data: DataItem): Promise { + return request({ + url: '/links', + method: 'post', + data + }); +} + +/** + * 左邻右舍 - 编辑 + * @param {Number} id ID + * @param {Object} data 请求参数 + * @author LiQingSong + */ +export async function linksEdit(id: number, data: DataItem): Promise { + return request({ + url: `/links/${id}`, + method: 'put', + data + }); +} diff --git a/packages/links/src/views/refresh/index.vue b/packages/links/src/views/refresh/index.vue new file mode 100644 index 0000000..c2b19a5 --- /dev/null +++ b/packages/links/src/views/refresh/index.vue @@ -0,0 +1,17 @@ + diff --git a/packages/links/tests/unit/example.spec.ts b/packages/links/tests/unit/example.spec.ts new file mode 100644 index 0000000..4b21ca7 --- /dev/null +++ b/packages/links/tests/unit/example.spec.ts @@ -0,0 +1,12 @@ +import { shallowMount } from '@vue/test-utils' +import HelloWorld from '@/components/HelloWorld.vue' + +describe('HelloWorld.vue', () => { + it('renders props.msg when passed', () => { + const msg = 'new message' + const wrapper = shallowMount(HelloWorld, { + props: { msg } + }) + expect(wrapper.text()).toMatch(msg) + }) +}) diff --git a/packages/links/tsconfig.json b/packages/links/tsconfig.json new file mode 100644 index 0000000..d6260c1 --- /dev/null +++ b/packages/links/tsconfig.json @@ -0,0 +1,42 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "noImplicitAny": false, + "baseUrl": ".", + "types": [ + "webpack-env", + "jest" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/links/vue.config.js b/packages/links/vue.config.js new file mode 100644 index 0000000..fdac4e4 --- /dev/null +++ b/packages/links/vue.config.js @@ -0,0 +1,133 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { stringified } = require('../../scripts/server/env'); +const { NODE_ENV, VUE_APP_PORT, VUE_APP_MOCK } = process.env; + +const port = process.env.MICRO_LINKS_PORT ||VUE_APP_PORT || 8078; +const packageName = process.env.MICRO_LINKS_ROOT_DIR || 'links'; + +let publicPath = `//${process.env.MICRO_LINKS_HOST}:${port}`; +let vuePublicPath = '/' +if(process.env.NODE_ENV === 'production') { + vuePublicPath = publicPath = `/${process.env.MICRO_BUILD_CHILD_NAME}/${packageName}/`; +} + +const bodyParser = require('body-parser') +const mockServer = require('./src/utils/mock/server'); + +module.exports = { + publicPath: vuePublicPath, + outputDir: 'dist', + productionSourceMap: false, + devServer: { + port, + // 配置反向代理 + /* + proxy: { + '/api': { + target: '', + ws: true, + changeOrigin: true + }, + '/foo': { + target: '' + } + }, + */ + before: function(app, server) { + if(NODE_ENV === 'development' && VUE_APP_MOCK === 'true') { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + // create application/json parser + app.use(bodyParser.json()); + // create application/x-www-form-urlencoded parser + app.use(bodyParser.urlencoded({ extended: false})); + mockServer(app); + } + }, + // 关闭主机检查,使微应用可以被 fetch,否则会提示生命周期未注册 + disableHostCheck: true, + // 配置跨域请求头,解决开发环境的跨域问题 + headers: { + 'Access-Control-Allow-Origin': '*' + } + }, + css: { + loaderOptions: { + less: { + javascriptEnabled: true, + } + } + }, + // 修改webpack的配置 + configureWebpack: { + // 不需要打包的插件 + externals: { + // 'vue': 'Vue', + // 'vue-router': 'VueRouter', + }, + output: { + // 微应用的包名,这里与主应用中注册的微应用名称一致 + library: `${packageName}-[name]`, + // 将你的 library 打包成 umd 库格式,暴露为所有的模块定义下都可运行的方式 + libraryTarget: 'umd', + // 按需加载相关,设置为 webpackJsonp_VueMicroApp 即可 + jsonpFunction: `webpackJsonp_${packageName}`, + }, + }, + chainWebpack(config) { + + // 内置的 svg Rule 添加 exclude + config.module + .rule('svg') + .exclude.add(/iconsvg/) + .end(); + + // 添加 svg-sprite-loader Rule + config.module + .rule('svg-sprite-loader') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader'); + + // 添加 svgo Rule + config.module + .rule('svgo') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svgo-loader') + .loader('svgo-loader') + .options({ + // externalConfig 配置特殊不是相对路径,起始路径是根目录 + externalConfig: './src/assets/iconsvg/svgo.yml', + }); + + // 针对图片修改publicPath + config.module + .rule('images') + .use('url-loader') + .loader('url-loader') + .options({ + limit: 4096, // 小于4kb将会被打包成 base64 + fallback: { + loader: 'file-loader', + options: { + publicPath + }, + }, + }); + + // 添加自定义环境变量 + config.plugin('define') + .tap(args => { + args[0]['process.env'] = { + ...args[0]['process.env'], + ...stringified + } + return args + }) + + } +} diff --git a/packages/system/.browserslistrc b/packages/system/.browserslistrc new file mode 100644 index 0000000..214388f --- /dev/null +++ b/packages/system/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/packages/system/.editorconfig b/packages/system/.editorconfig new file mode 100644 index 0000000..ed19d9c --- /dev/null +++ b/packages/system/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/packages/system/.env.development b/packages/system/.env.development new file mode 100644 index 0000000..6ea6b38 --- /dev/null +++ b/packages/system/.env.development @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'development' + +# devServer port +VUE_APP_PORT=8076 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = true + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/packages/system/.env.production b/packages/system/.env.production new file mode 100644 index 0000000..f0860f7 --- /dev/null +++ b/packages/system/.env.production @@ -0,0 +1,11 @@ +#运行环境 +NODE_ENV = 'production' + +# devServer port +VUE_APP_PORT=8076 + +# mock 是否开启 true|false , development环境有效 +VUE_APP_MOCK = false + +#api接口域名 +VUE_APP_APIHOST = http://rap2api.taobao.org/app/mock/247994/admin diff --git a/packages/system/.eslintignore b/packages/system/.eslintignore new file mode 100644 index 0000000..87160f7 --- /dev/null +++ b/packages/system/.eslintignore @@ -0,0 +1 @@ +../scripts diff --git a/packages/system/.eslintrc.js b/packages/system/.eslintrc.js new file mode 100644 index 0000000..36d681f --- /dev/null +++ b/packages/system/.eslintrc.js @@ -0,0 +1,45 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/typescript/recommended' + ], + parserOptions: { + ecmaVersion: 2020 + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + '@typescript-eslint/no-explicit-any': ['off'], + '@typescript-eslint/no-unused-vars': ['off'], + '@typescript-eslint/ban-types': ['off'], + '@typescript-eslint/no-empty-interface': ['off'], + '@typescript-eslint/explicit-module-boundary-types': ['off'], + '@typescript-eslint/no-empty-function': ['off'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + }, + { + files: [ + './mock/*.{j,t}s?(x)', + './src/utils/mock/*.{j,t}s?(x)' + ], + rules: { + 'no-var': ['off'], + '@typescript-eslint/no-var-requires': ['off'], + } + } + ] +} diff --git a/packages/system/.gitignore b/packages/system/.gitignore new file mode 100644 index 0000000..5d55bb1 --- /dev/null +++ b/packages/system/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +yarn.lock + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/system/LICENSE b/packages/system/LICENSE new file mode 100644 index 0000000..0f21b74 --- /dev/null +++ b/packages/system/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 LiQingSong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/system/README.md b/packages/system/README.md new file mode 100644 index 0000000..3aec684 --- /dev/null +++ b/packages/system/README.md @@ -0,0 +1,38 @@ +# packages/system + +packages/system 基于 admin-element-vue-typescript ([github](https://github.com/lqsong/admin-element-vue/tree/typescript.v2)、[gitee](https://gitee.com/lqsong/admin-element-vue/tree/typescript.v2))开发 + + +## 使用文档 + + - [http://admin-vue3-micro-qiankun.liqingsong.cc](http://admin-vue3-micro-qiankun.liqingsong.cc) + - [Github](https://github.com/lqsong/admin-vue3-micro-qiankun) + - [Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun) + +## admin-element-vue-typescript 使用文档 + + - [http://admin-element-vue.liqingsong.cc/tsv2/](http://admin-element-vue.liqingsong.cc/tsv2/) + - [Github](https://github.com/lqsong/admin-element-vue) + - [Gitee](https://gitee.com/lqsong/admin-element-vue) + + + +## 后台前端解决方案列表 + + - admin-element-vue([GitHub](https://github.com/lqsong/admin-element-vue)、[Gitee](https://gitee.com/lqsong/admin-element-vue)) + - admin-antd-vue([GitHub](https://github.com/lqsong/admin-antd-vue)、[Gitee](https://gitee.com/lqsong/admin-antd-vue)) + - admin-antd-react([GitHub](https://github.com/lqsong/admin-antd-react)、[Gitee](https://gitee.com/lqsong/admin-antd-react)) + - electron-admin-element-vue([GitHub](https://github.com/lqsong/electron-admin-element-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-element-vue)) + - electron-admin-antd-vue([GitHub](https://github.com/lqsong/electron-admin-antd-vue)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-vue)) + - electron-admin-antd-react([GitHub](https://github.com/lqsong/electron-admin-antd-react)、[Gitee](https://gitee.com/lqsong/electron-admin-antd-react)) + - admin-vue3-micro-qiankun([GitHub](https://github.com/lqsong/admin-vue3-micro-qiankun)、[Gitee](https://gitee.com/lqsong/admin-vue3-micro-qiankun)) + + +## 捐赠 + +如果你觉得这个项目帮助到了你,请帮助点击 Star,你也可以请作者喝咖啡表示鼓励. + +**ALIPAY** | **WECHAT** +:-------------------------:|:-------------------------: +![Alipay](http://uploads.liqingsong.cc/20210430/f62d2436-8d92-407d-977f-35f1e4b891fc.png) | ![Wechat](http://uploads.liqingsong.cc/20210430/3e24efa9-8e79-4606-9bd9-8215ce1235ac.png) + diff --git a/packages/system/babel.config.js b/packages/system/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/packages/system/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/packages/system/jest.config.js b/packages/system/jest.config.js new file mode 100644 index 0000000..d7f13cc --- /dev/null +++ b/packages/system/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel', + transform: { + '^.+\\.vue$': 'vue-jest' + } +} diff --git a/packages/system/mock/global.js b/packages/system/mock/global.js new file mode 100644 index 0000000..48dfcda --- /dev/null +++ b/packages/system/mock/global.js @@ -0,0 +1,39 @@ +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`POST ${VUE_APP_APIHOST || ''}/uploads`] = (req, res) => { + res.send({ + code: 0, + data: { + id: 1, + url: + 'http://uploads.liqingsong.cc/20200531/583057e8-8bab-4eee-b5a0-bec915089c0c.jpg', + name: 'xcx.jpg', + }, + msg: '', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/500`] = (req, res) => { + res.status(500).send({ + timestamp: 1513932555104, + status: 500, + error: 'error', + message: 'error', + path: '/500', + }); +}; + +mock[`GET ${VUE_APP_APIHOST}/404`] = (req, res) => { + res.status(404).send({ + timestamp: 1513932643431, + status: 404, + error: 'Not Found', + message: 'No message available', + path: '/404', + }); +}; + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/packages/system/mock/home.js b/packages/system/mock/home.js new file mode 100644 index 0000000..0df8898 --- /dev/null +++ b/packages/system/mock/home.js @@ -0,0 +1,44 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles/dailynew`] = (req, res) => { + res.send({ + code: 0, + data: { + total: mockjs.mock('@integer(1000,10000)'), + num: mockjs.mock('@integer(10,100)'), + day: mockjs.mock('@float(-10,15,0,2)'), + week: mockjs.mock('@float(-10,15,0,2)'), + }, + }); +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/home/articles`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock({ + total: 1000, + currentPage: 1, + 'list|5': [ + { + category: { + id: '@integer(1)', + alias: '@word(4)', + name: '@cword(4)', + }, + title: '@ctitle(20,30)', + id: '@integer(1)', + addtime: '@datetime', + 'tag|0-3': '@ctitle(4,6),', + hit: '@integer(100,1000)', + }, + ], + }), + }); +}; + + +module.exports = { + ...mock +}; diff --git a/packages/system/mock/user.js b/packages/system/mock/user.js new file mode 100644 index 0000000..45bf6fc --- /dev/null +++ b/packages/system/mock/user.js @@ -0,0 +1,89 @@ +const mockjs= require('mockjs'); +const { VUE_APP_APIHOST } = process.env; +const ajaxHeadersTokenKey = 'x-token'; +const mock = {}; + +mock[`GET ${VUE_APP_APIHOST}/user/info`] = (req, res) => { + const headers = req.headers; + if (headers[ajaxHeadersTokenKey] === 'admin') { + res.send({ + code: 0, + data: { + id: 1, + name: 'Admins', + avatar: '', + roles: ['admin'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'user') { + res.send({ + code: 0, + data: { + id: 2, + name: 'Users', + avatar: '', + roles: ['user'], + }, + }); + } else if (headers[ajaxHeadersTokenKey] === 'test') { + res.send({ + code: 0, + data: { + id: 3, + name: 'Tests', + avatar: '', + roles: ['test'], + }, + }); + } else { + res.send({ + code: 10002, + data: {}, + msg: '未登录', + }); + } + +}; + +mock[`GET ${VUE_APP_APIHOST || ''}/user/message`] = (req, res) => { + res.send({ + code: 0, + data: mockjs.mock('@integer(0,99)'), + }); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/login`] = (req, res) => { + const { password, username } = req.body; + const send = { code: 0, data: {}, msg: '' }; + if (username === 'admin' && password === '123456') { + send['data'] = { + token: 'admin', + }; + } else if (username === 'user' && password === '123456') { + send['data'] = { + token: 'user', + }; + } else if (username === 'test' && password === '123456') { + send['data'] = { + token: 'test', + }; + } else { + send['code'] = 201; + send['msg'] = 'Wrong username or password'; + } + + res.send(send); +}; + +mock[`POST ${VUE_APP_APIHOST || ''}/user/register`] = (req, res) => { + res.send({ + code: 0, + data: '', + msg: '', + }); +}; + + +module.exports = { + ...mock +}; \ No newline at end of file diff --git a/packages/system/package.json b/packages/system/package.json new file mode 100644 index 0000000..cfb85d4 --- /dev/null +++ b/packages/system/package.json @@ -0,0 +1,83 @@ +{ + "name": "admin-vue3-micro-qiankun", + "description": "Micro front-end Admin based on Qiankun, vue3.x, admin-element-vue, admin-antd-vue project architecture", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint", + "svgo": "svgo -f src/assets/iconsvg --config=src/assets/iconsvg/svgo.yml" + }, + "dependencies": { + "@ckeditor/ckeditor5-build-decoupled-document": "^23.1.0", + "@ckeditor/ckeditor5-vue": "^2.0.1", + "@toast-ui/editor": "^2.5.3", + "axios": "^0.21.4", + "core-js": "^3.19.1", + "echarts": "^4.9.0", + "element-plus": "^1.2.0-beta.4", + "localforage": "^1.10.0", + "lodash.debounce": "^4.0.8", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "path-to-regexp": "^6.2.0", + "vue": "^3.2.23", + "vue-i18n": "^9.1.9", + "vue-router": "^4.0.12", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@types/echarts": "^4.9.12", + "@types/jest": "^24.9.1", + "@types/lodash.debounce": "^4.0.6", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", + "@vue/cli-plugin-babel": "~4.5.15", + "@vue/cli-plugin-eslint": "~4.5.15", + "@vue/cli-plugin-router": "~4.5.15", + "@vue/cli-plugin-typescript": "~4.5.15", + "@vue/cli-plugin-unit-jest": "~4.5.15", + "@vue/cli-plugin-vuex": "~4.5.15", + "@vue/cli-service": "~4.5.15", + "@vue/compiler-sfc": "^3.2.23", + "@vue/eslint-config-typescript": "^7.0.0", + "@vue/test-utils": "^2.0.0-rc.17", + "body-parser": "^1.19.0", + "chokidar": "^3.5.2", + "eslint": "^6.8.0", + "eslint-plugin-vue": "^7.20.0", + "lint-staged": "^9.5.0", + "mockjs": "^1.1.0", + "node-dir": "^0.1.17", + "node-sass": "^4.14.1", + "sass": "^1.43.5", + "sass-loader": "^8.0.2", + "svg-sprite-loader": "^5.2.1", + "svgo": "^1.3.2", + "svgo-loader": "^2.2.2", + "typescript": "~4.1.6", + "vue-jest": "^5.0.0-alpha.10" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "keywords": [ + "vue", + "vue3", + "vue3.0", + "vue3.x", + "typescript", + "admin", + "template", + "element-ui", + "element Plus" + ], + "lint-staged": { + "*.{js,jsx,vue,ts,tsx}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/packages/system/public/favicon.ico b/packages/system/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3827b09c79035443036c7679a50b6b1b0fc08a8 GIT binary patch literal 4286 zcmb`Ldr(!^6^Bozl4d3`slj&?l!qFl;v8oQG!+Ue z@5d#IQ4q0X#0T0D6_kfyB_pjG+jLs7{UeNYCetx(IvFN1;`#O4=Ws9g!u`Y89_C}M zv-eu-xAs2!+{<8D_wh4kjAedXmEW+ep_XM$0EVpDV8)$`xvzRDBh-TXVG1NcwbDb| zpcB-C@!Om^H^#)8oUbb9i`Uk{7KFe|DAU%^4(fG-f-~4VZelu!H#sx4EtDE}--ouN zyA8Gv4#RrjGtfO^a!n0W%hdF(FPNiDVzP%?*jQ*KURXKS`1ek0Pfb%hm^8XW+;wLU znXjxN?V$e9LpJ+w$inxM-FG}#u2XY9&&JX6Z$i1OIS2jRA+gwYP(N~w-bg8Js+9Pm z?6s?4bq}kgw|^|9GG}6Phz(Z5t!*^WGH;1{DIfj(q2bCKdJz-|z2ps}_S3RgC&*s> zp6rEtWiO}*WMMgTJ7lkVo7iWhTypYEZr^&2MmXb+xC)0^DjGHb>rnwYKFBLHxuaOy zBH2p|WG~ty`<2~+EaKh=^DmdlUQ#3_yyE5-P@_Md9!*Og^gY97!A(#A1*6ekf_5=A zS=$oU-h;5WmX{s(3 z-(@-0p+H)eul<{9wLhg6pS@XL=&}s!P~=!`{JB(2?f#T%$M6u9jEK?B;Wy|*SeFud z&7Q&Y-XeQtCT#D)_*v4*bhWR`RLs7AI<&_#wjx9JiX6!94||ohSK-`v>C8!58mSM%~-|MF0mJ*pFJB5YL~IrUfNXgSSKie z%NmXKeaU%VcFJo~%Bxrd&u`;geZDzN3#%G5q*)pU8GG}TzPCU_ zo20?qFJR8ZD0v>|htJ1%ehG21llgqi`W`yy_tpA7stv@|0(>0zb{;FWU0hbqaC-Vo&Id)XhA4!o{ zr6sk^?mj0DM1P>;o3RMyqpon&s;YEn+mEEJUS8zf&p-oxqjk7P?=afO!mB|692_U* z({Jt^zQ<rA2Ae*%Nx=uhK+FXgsGc3+M9OS;wxYB~#O1!)P8yyLxO4+yM1LFGtve9n*C3 z*cLr?y-Sn-F3tP+Q(ddzTzaOnKU3J~2`of=yT>PuJU6csg=Yvtw34hK&2*$vh>IQPt(KOm;pf+NF&PIAbf%Noqgz<7HiwZ(CV}6w4?}fv} zn)RH8GyU+OKY)4nZ=kwJOLdXqs*k(~3d$+Q53!H?d4~I-JO~xcSE6NN>w4;Vt*LAL zIy8(Hn%+wd=r=+`WULya+Cf2SAm6O%1Ugmd`(wsxnKv>1`3-)x8Y0^r4Wn1zt8ebR#kyJF-CpFGK0rIyRwN(CfV6g7-^5!>D>l12v>l-bjX|(?fYdNLH literal 0 HcmV?d00001 diff --git a/packages/system/public/index.html b/packages/system/public/index.html new file mode 100644 index 0000000..4123528 --- /dev/null +++ b/packages/system/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/packages/system/src/App.vue b/packages/system/src/App.vue new file mode 100644 index 0000000..02a9d46 --- /dev/null +++ b/packages/system/src/App.vue @@ -0,0 +1,12 @@ + + diff --git a/packages/system/src/assets/css/element-variables.scss b/packages/system/src/assets/css/element-variables.scss new file mode 100644 index 0000000..0b0ed46 --- /dev/null +++ b/packages/system/src/assets/css/element-variables.scss @@ -0,0 +1,60 @@ +/* 只需要重写你需要的即可 */ +@forward "element-plus/theme-chalk/src/common/var.scss" with ( + $colors: ( + "primary": ( + "base": #409eff, + ), + ), +); + +// 导入所有样式: +@use "element-plus/theme-chalk/src/index.scss" as *; + +.el-menu { + .el-menu-item { + .icon { + margin-right: 5px; + } + } +} + +/* 重置 Drawer */ +.el-drawer { + .el-drawer__header { + padding: 15px 20px; + margin-bottom: 0; + border-bottom: 1px solid #f0f0f0; + span, + button { + outline: none; + } + } +} + +/* 重置 card */ +.cus-card { + .el-card { + border: 0; + } +} + +/*自定义 table 样式*/ +.custom-table { + .el-table__header { + background-color: #F5F7FA !important; + } + .custom-td-header-one, + .el-table__body tr:hover .custom-td-header-one { + color: #303133; + font-weight: bold; + background-color: #F5F7FA !important; + } +} +.custom-table-header { + color: #303133; + th { + background-color: #F5F7FA !important; + } +} + + diff --git a/packages/system/src/assets/css/global.scss b/packages/system/src/assets/css/global.scss new file mode 100644 index 0000000..c566dbb --- /dev/null +++ b/packages/system/src/assets/css/global.scss @@ -0,0 +1,75 @@ +@import './element-variables.scss'; +@import './variables.scss'; +@import './mixin.scss'; + +#nprogress .bar { + background: var(--el-color-primary) !important; +} + +.flex-wrap-wrap { + flex-wrap: wrap; +} + +a { + color: #1890ff; + text-decoration: none; + background-color: transparent; + outline: none; + cursor: pointer; + transition: color .3s; +} +a:active, +a:hover { + text-decoration: none; + outline: 0; +} +a:active { + color: #096dd9; +} +a:hover { + color: #40a9ff; +} + +.border-none { + border: none; +} +.border-solid-transparent{ + border: solid 1px transparent; +} + +.text-align-right { + text-align: right; +} + +.float-right { + float: right; +} + + +.cursor-pointer { + cursor: pointer; +} + +.padding-t10 { + padding-top: 10px; +} + +.margin-l5{ + margin-left: 5px; +} +.margin-l10 { + margin-left: 10px; +} +.margin-t24 { + margin-top: 24px; +} +.margin-r5 { + margin-right: 5px; +} + +.width-200 { + width: 200px !important; +} +.width-percent100 { + width: 100% !important; +} diff --git a/packages/system/src/assets/css/mixin.scss b/packages/system/src/assets/css/mixin.scss new file mode 100644 index 0000000..5c9b66d --- /dev/null +++ b/packages/system/src/assets/css/mixin.scss @@ -0,0 +1,30 @@ +@mixin scrollbar( + $thumb-background: hsla(0,0%,100%,.2), + $thumb-shadow: hsla(0,0%,100%,.05), + $track-background:hsla(0,0%,100%,.15), + $track-shadow: rgba(37,37,37,.05) + ) { + ::-webkit-scrollbar { + width: 6px; + height: 6px; + } + ::-webkit-scrollbar-thumb { + background: $thumb-background; + border-radius: 3px; + box-shadow: inset 0 0 5px $thumb-shadow; + } + ::-webkit-scrollbar-track { + background: $track-background; + border-radius: 3px; + box-shadow: inset 0 0 5px $track-shadow; + } +} + +@mixin scrollbar-light { + @include scrollbar( + hsla(0,0%,0%,.2), hsla(0,0%,0%,.05), + hsla(0,0%,0%,.15), rgba(255,255,255,.05) + ) +} + + diff --git a/packages/system/src/assets/css/variables.scss b/packages/system/src/assets/css/variables.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/packages/system/src/assets/css/variables.scss @@ -0,0 +1 @@ + diff --git a/packages/system/src/assets/iconsvg/home.svg b/packages/system/src/assets/iconsvg/home.svg new file mode 100644 index 0000000..d0c28bf --- /dev/null +++ b/packages/system/src/assets/iconsvg/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/system/src/assets/iconsvg/plus.svg b/packages/system/src/assets/iconsvg/plus.svg new file mode 100644 index 0000000..f324c3f --- /dev/null +++ b/packages/system/src/assets/iconsvg/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/system/src/assets/iconsvg/svgo.yml b/packages/system/src/assets/iconsvg/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/packages/system/src/assets/iconsvg/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/packages/system/src/assets/images/bg.svg b/packages/system/src/assets/images/bg.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/packages/system/src/assets/images/bg.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/system/src/assets/images/logo.png b/packages/system/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..37ff91e08195b41a4f603aa7a26314a42a8873a2 GIT binary patch literal 3294 zcmaJ^YdDl^7k&pJ29fNc)EEk7%y}{sVT@r!IaO3LXC~%gX5?5x4oOHwL?n_@lt@jY zNJ>f3k+!6RQnAai!F;1#`}=wVVq-uJrKTF+WPo_(I{U9>ceGynk5qPmj3 z72l+rfsVjW8&eWe3}g^FVqCo!G%# z*Ju&jCwjdvGdhGxV8QIyLTw|73I{y4gbt15h4RJ3NITdMzeL4)ZW{rE{(wkA>|lQf z<>%oEbrOi!P@FXm&P1ZH(A5NM6b^;8L0Li3NE8Nv#2`=@I0{Wf5{M`q^ydRpsEJq{ zqBoiHQ%hml!Ga|cArXOyh={O`z*q}JK?oFqKtLeT2s9e5K)}UOdbJ>E<~WLkq91dF0UVGvBaDG z-!OiQ7W+mC*$8j8SP(8^D$avr`ircn-Mkl3V1>0_Tw+Kq=L0p2gjkR$+F(ePVlK z5x6LCb{BK@L8yvnxJ8+N%-dVIrscB;W(~xAwsUiUcvSpKfP_Pe&H93WBScu)`I3x?b084Q3{2(ku3zy>ee5C0QD12-!O&#~gl+MyJLxC+}Fi(7N<`*@79) zpo-BJRot|eDJIck0R~W6@JuV+K^k8mEN%%cZfKXwnXYQdn#%X$9g0XxZnuC+;~b6E zM&HQ)=-abCPFxT_u~fPFwhtKmE)ap9mVv+yv|yx75u0|DMY}H?Gg5AD2Pnx^xnqWV zPP8|TzSmSvd?b^DZGC1@(_aS|uL`CL9lvOGE^Z2@eb?-cqNW}^G2RuItdnVG_+tA- z%rjdRw^$C11~O`o%uDRIx7bd;{E}{C*4`#0X%03B!256Po<~?bI4yrAR3RSMg=nW& zf~x?fP7l>{3!J@{$OAI-Op?7@txmCA@CFPf^CWhi+kMr*cpV0!47}rd!dERbDfPZ5 zBYy=8Ya2E2y=a26iC;*(95HMs|F%Xx(c=d8YxrWZ=8gQZ!6mOg5B$s%=_aaI-Rv&6 zu-s~7+9u0)n2OlFm6&;Jb!l2Wi@Sj)?!8TXS^D=K`LeB%6*sqPt*nXZHjo7eI+$s2 zTrr1N6-4VYEjq!uXVE2;@DInfRlN^WBh~ps?K&C#W-N~1qQdvF9S704m)eWwX*D3_ z>QRQmvqzeZ*9ANbdkkS#Eb*Qmb+?PjH*^^}^YQ9{NQSBwI6Zmzz&m^Nh}wfgwj;X4 zi-sFYO}p~fh22N-vlmWq7WRytmqDBbXO)NJb(3zSHtGn?vU+l+)g4@>_O?MSt`ona@-S`Yz>^bg|kPkzw0H4+lV_sryf0AQpOMU}J@8AR?OT}X| z=s?ATYAp=C+Dg?X84T7A(AqwCwtOls^L*W(-XSHwt<=%KSLcG0t<2|dK2UDn zUKTEz)H}Rr)P4;@dcPT{k3iL3>70&f}meG3fbo2`F-HR#S&r8gr9qK~5ZU!v( z+WU}n&dS%Km#ke1hm{&s_^azprfx^4RdFwc%{C7A%H#v-nYRjKzHqY zhNjNyK32t$=Al!Rj<<*4XCM=xjwo6)+&$g3y4zBFK~Cc{)o)ttS-k{i=z-@ntFxZU z*600V!(w{f?Or@jO3O0zAx^sM9CTj0!*J-dj%(A2I$w91Rbg<;Py#RW0OUEW50Pt} zy|*$N@S)a+>aW#+=5f|6ZqlHaD9<$e%uZ{+TK36&pqkRk2Hg$w%9u?#m8GBO*%prsZ;CcgFi+L2F$HPl zoG-hwDq&P_@sz4;@M(26n*&Y31qp$M6{0|+@Xq3!(U1N8a!?wM_B0Fa`=pU$B@J)x z#-?adC9kGpzQ&DZHJ7;`rJSg3EIu}E9zi|lLK*iw*qDed2)}XtL};n~_>P*eoTnJD z{#GMYy&25pn~-ZXDGYc9U0t~y4BT3q(R^cfBEEnA?L!*@cJbKjuN>RWZ;|=gVkfe9cn7 zJJt+lJuuj=LMy>D6B!Fi*Rkxd8T3xZ{d?6%Ixk)9Dc)EgeDnOf_`=iD)Z`FDtpN5!Qk5CXb^}Zf3*u&G=*?o6z8gAmPQ=g-h!)@^+Bs;zL zJi62f84S5&P-ofu%0MM8=-ijw{>d1LY1xX!=v#i-h5lM=dGp}5E1~;F_g&5F(n#7d zvUT}3+(T?`_{lL)RyozL9k)^U(Q9@6w!~pm(*2~Q>}Ha&_{=hu{%dUuyK~Mmk}9xz zDV-A4l;f_(CACkd*PM=ne0#j_lE|o1x4Yh*JaQwARr5k?xyAObhvi7Sltpf2<1?&l zt(OtwMm>7KP%{-oxdL$VSUdL#B{%!llLe|ag@&n`+xWKc2;0}?dBu28@(-gW6$yfV z+S;$$QTnu`DdhzCK&T}_*uyxZdxNBR Sk6`I@Hx8=vdh&S^E#W`Ve3I4x literal 0 HcmV?d00001 diff --git a/packages/system/src/components/ALink/index.vue b/packages/system/src/components/ALink/index.vue new file mode 100644 index 0000000..7ec5470 --- /dev/null +++ b/packages/system/src/components/ALink/index.vue @@ -0,0 +1,55 @@ + + diff --git a/packages/system/src/components/CKEditor/index.vue b/packages/system/src/components/CKEditor/index.vue new file mode 100644 index 0000000..827e461 --- /dev/null +++ b/packages/system/src/components/CKEditor/index.vue @@ -0,0 +1,192 @@ + + + \ No newline at end of file diff --git a/packages/system/src/components/Custom/ApiCascader/index.vue b/packages/system/src/components/Custom/ApiCascader/index.vue new file mode 100644 index 0000000..16c88d8 --- /dev/null +++ b/packages/system/src/components/Custom/ApiCascader/index.vue @@ -0,0 +1,159 @@ + + + diff --git a/packages/system/src/components/Custom/ApiCascader/service.ts b/packages/system/src/components/Custom/ApiCascader/service.ts new file mode 100644 index 0000000..fceb099 --- /dev/null +++ b/packages/system/src/components/Custom/ApiCascader/service.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request'; + +export async function queryList(): Promise { + return request({ + url: '/menus/all', + method: 'get', + params: {} + }); +} + + diff --git a/packages/system/src/components/Custom/FormFooterToolbar/index.vue b/packages/system/src/components/Custom/FormFooterToolbar/index.vue new file mode 100644 index 0000000..d3b0b04 --- /dev/null +++ b/packages/system/src/components/Custom/FormFooterToolbar/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/system/src/components/Custom/MenuCascader/index.vue b/packages/system/src/components/Custom/MenuCascader/index.vue new file mode 100644 index 0000000..22a4304 --- /dev/null +++ b/packages/system/src/components/Custom/MenuCascader/index.vue @@ -0,0 +1,159 @@ + + + diff --git a/packages/system/src/components/Custom/MenuCascader/service.ts b/packages/system/src/components/Custom/MenuCascader/service.ts new file mode 100644 index 0000000..fceb099 --- /dev/null +++ b/packages/system/src/components/Custom/MenuCascader/service.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request'; + +export async function queryList(): Promise { + return request({ + url: '/menus/all', + method: 'get', + params: {} + }); +} + + diff --git a/packages/system/src/components/Custom/MenuTypeSelect/data.d.ts b/packages/system/src/components/Custom/MenuTypeSelect/data.d.ts new file mode 100644 index 0000000..28f92d1 --- /dev/null +++ b/packages/system/src/components/Custom/MenuTypeSelect/data.d.ts @@ -0,0 +1,4 @@ +export interface OptionItem { + value: number; + label: string; +} \ No newline at end of file diff --git a/packages/system/src/components/Custom/MenuTypeSelect/index.vue b/packages/system/src/components/Custom/MenuTypeSelect/index.vue new file mode 100644 index 0000000..28837cd --- /dev/null +++ b/packages/system/src/components/Custom/MenuTypeSelect/index.vue @@ -0,0 +1,70 @@ + + + diff --git a/packages/system/src/components/Custom/MenuTypeSelect/locales/en-US.ts b/packages/system/src/components/Custom/MenuTypeSelect/locales/en-US.ts new file mode 100644 index 0000000..c54f161 --- /dev/null +++ b/packages/system/src/components/Custom/MenuTypeSelect/locales/en-US.ts @@ -0,0 +1,5 @@ +export default { + 'components.custom.menutypeselect.text.menu': 'Menu', + 'components.custom.menutypeselect.text.button': 'Button', + +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/MenuTypeSelect/locales/zh-CN.ts b/packages/system/src/components/Custom/MenuTypeSelect/locales/zh-CN.ts new file mode 100644 index 0000000..aa1131f --- /dev/null +++ b/packages/system/src/components/Custom/MenuTypeSelect/locales/zh-CN.ts @@ -0,0 +1,4 @@ +export default { + 'components.custom.menutypeselect.text.menu': '菜单', + 'components.custom.menutypeselect.text.button': '按钮', +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/MenuTypeSelect/locales/zh-TW.ts b/packages/system/src/components/Custom/MenuTypeSelect/locales/zh-TW.ts new file mode 100644 index 0000000..60c8aac --- /dev/null +++ b/packages/system/src/components/Custom/MenuTypeSelect/locales/zh-TW.ts @@ -0,0 +1,5 @@ +export default { + 'components.custom.menutypeselect.text.menu': '菜單', + 'components.custom.menutypeselect.text.button': '按鈕', + +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/PageHeader/index.vue b/packages/system/src/components/Custom/PageHeader/index.vue new file mode 100644 index 0000000..555f485 --- /dev/null +++ b/packages/system/src/components/Custom/PageHeader/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/packages/system/src/components/Custom/RoleSelect/data.d.ts b/packages/system/src/components/Custom/RoleSelect/data.d.ts new file mode 100644 index 0000000..28f92d1 --- /dev/null +++ b/packages/system/src/components/Custom/RoleSelect/data.d.ts @@ -0,0 +1,4 @@ +export interface OptionItem { + value: number; + label: string; +} \ No newline at end of file diff --git a/packages/system/src/components/Custom/RoleSelect/index.vue b/packages/system/src/components/Custom/RoleSelect/index.vue new file mode 100644 index 0000000..69442d3 --- /dev/null +++ b/packages/system/src/components/Custom/RoleSelect/index.vue @@ -0,0 +1,112 @@ + + + diff --git a/packages/system/src/components/Custom/RoleSelect/service.ts b/packages/system/src/components/Custom/RoleSelect/service.ts new file mode 100644 index 0000000..ff1950a --- /dev/null +++ b/packages/system/src/components/Custom/RoleSelect/service.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request'; + +export async function queryList(): Promise { + return request({ + url: '/roles', + method: 'get', + params: {} + }); +} + + diff --git a/packages/system/src/components/Custom/ServerImage/Dialog/data.d.ts b/packages/system/src/components/Custom/ServerImage/Dialog/data.d.ts new file mode 100644 index 0000000..0ed72d4 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/Dialog/data.d.ts @@ -0,0 +1,25 @@ +export interface TableListQueryParams { + page: number; + per: number; +} + +export interface ExternalLink { + visible: boolean; + ruleForm: { + url: string; + }; + rules: any; + insertUrl: () => Promise; +} + +export interface TableData { + tableIndexMethod: (index: number) => any; + loading: boolean; + list: any; + pagination: { + total: number; + current: number; + pageSize: number; + onChange: (page: number) => void; + }; +} \ No newline at end of file diff --git a/packages/system/src/components/Custom/ServerImage/Dialog/index.vue b/packages/system/src/components/Custom/ServerImage/Dialog/index.vue new file mode 100644 index 0000000..31869ab --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/Dialog/index.vue @@ -0,0 +1,315 @@ + + + diff --git a/packages/system/src/components/Custom/ServerImage/Dialog/locales/en-US.ts b/packages/system/src/components/Custom/ServerImage/Dialog/locales/en-US.ts new file mode 100644 index 0000000..7cffc89 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/Dialog/locales/en-US.ts @@ -0,0 +1,19 @@ +export default { + 'components.custom.serverimage.dialog.props.title': 'Picture list', + 'components.custom.serverimage.dialog.form.url': 'Picture url', + 'components.custom.serverimage.dialog.form.url.required': 'Please enter the external link picture address', + 'components.custom.serverimage.dialog.form.url.external': 'The external link picture address is incorrect', + 'components.custom.serverimage.dialog.form.btn.submit': 'Confirm', + 'components.custom.serverimage.dialog.form.btn.cancel': 'Cancel', + 'components.custom.serverimage.dialog.form.btn.link': 'Img Url', + 'components.custom.serverimage.dialog.form.btn.upload': 'Upload', + + 'components.custom.serverimage.dialog.upload.type.external': 'Upload pictures can only be in {str} format!', + 'components.custom.serverimage.dialog.upload.num.external': 'Upload image size cannot exceed {num}M!', + 'components.custom.serverimage.dialog.upload.error': 'File upload failed:', + + 'components.custom.serverimage.dialog.table.column.index': 'Order', + 'components.custom.serverimage.dialog.table.column.imgurl': 'Picture', + 'components.custom.serverimage.dialog.table.column.size': 'Size', + +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts b/packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts new file mode 100644 index 0000000..b6fa1e8 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-CN.ts @@ -0,0 +1,19 @@ +export default { + 'components.custom.serverimage.dialog.props.title': '图片列表', + 'components.custom.serverimage.dialog.form.url': '图片地址', + 'components.custom.serverimage.dialog.form.url.required': '请输入外链图片地址', + 'components.custom.serverimage.dialog.form.url.external': '外链图片地址不正确', + 'components.custom.serverimage.dialog.form.btn.submit': '确认', + 'components.custom.serverimage.dialog.form.btn.cancel': '取消', + 'components.custom.serverimage.dialog.form.btn.link': '外链', + 'components.custom.serverimage.dialog.form.btn.upload': '上传', + + 'components.custom.serverimage.dialog.upload.type.external': '上传图片只能是 {str} 格式!', + 'components.custom.serverimage.dialog.upload.num.external': '上传图片大小不能超过 {num}M!', + 'components.custom.serverimage.dialog.upload.error': '文件上传失败:', + + 'components.custom.serverimage.dialog.table.column.index': '序号', + 'components.custom.serverimage.dialog.table.column.imgurl': '图片', + 'components.custom.serverimage.dialog.table.column.size': '大小', + +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts b/packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts new file mode 100644 index 0000000..7d6edbe --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/Dialog/locales/zh-TW.ts @@ -0,0 +1,19 @@ +export default { + 'components.custom.serverimage.dialog.props.title': '圖片列表', + 'components.custom.serverimage.dialog.form.url': '圖片地址', + 'components.custom.serverimage.dialog.form.url.required': '請輸入外鏈圖片地址', + 'components.custom.serverimage.dialog.form.url.external': '外鏈圖片地址不正確', + 'components.custom.serverimage.dialog.form.btn.submit': '確認', + 'components.custom.serverimage.dialog.form.btn.cancel': '取消', + 'components.custom.serverimage.dialog.form.btn.link': '外鏈', + 'components.custom.serverimage.dialog.form.btn.upload': '上傳', + + 'components.custom.serverimage.dialog.upload.type.external': '上傳圖片只能是 {str} 格式!', + 'components.custom.serverimage.dialog.upload.num.external': '上傳圖片大小不能超過 {num}M!', + 'components.custom.serverimage.dialog.upload.error': '文件上傳失敗:', + + 'components.custom.serverimage.dialog.table.column.index': '序號', + 'components.custom.serverimage.dialog.table.column.imgurl': '圖片', + 'components.custom.serverimage.dialog.table.column.size': '大小', + +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/ServerImage/Dialog/service.ts b/packages/system/src/components/Custom/ServerImage/Dialog/service.ts new file mode 100644 index 0000000..d4916c5 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/Dialog/service.ts @@ -0,0 +1,14 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from "./data.d"; + +export const uploadUrl: string = process.env.VUE_APP_APIHOST + '/upload/images'; + +export async function queryList(params: TableListQueryParams): Promise { + return request({ + url: '/upload/images', + method: 'get', + params + }); +} + + diff --git a/packages/system/src/components/Custom/ServerImage/SelectionList/data.d.ts b/packages/system/src/components/Custom/ServerImage/SelectionList/data.d.ts new file mode 100644 index 0000000..f71c5d2 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/SelectionList/data.d.ts @@ -0,0 +1,4 @@ +export interface ListItem { + imgurl: string; + size: string; +} \ No newline at end of file diff --git a/packages/system/src/components/Custom/ServerImage/SelectionList/index.vue b/packages/system/src/components/Custom/ServerImage/SelectionList/index.vue new file mode 100644 index 0000000..2e1f7d0 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/SelectionList/index.vue @@ -0,0 +1,160 @@ + + + diff --git a/packages/system/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts b/packages/system/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts new file mode 100644 index 0000000..47a21d3 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/SelectionList/locales/en-US.ts @@ -0,0 +1,8 @@ +export default { + 'components.custom.serverimage.selectionlist.dialog.title': 'Select Image', + 'components.custom.serverimage.selectionlist.dialog.table.column.action': 'Action', + 'components.custom.serverimage.selectionlist.dialog.table.btn.choose': 'Choose', + + 'components.custom.serverimage.selectionlist.choose.img.external': 'Select at most {num} pictures!', + +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts b/packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts new file mode 100644 index 0000000..ad189a9 --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-CN.ts @@ -0,0 +1,8 @@ +export default { + 'components.custom.serverimage.selectionlist.dialog.title': '选择图片', + 'components.custom.serverimage.selectionlist.dialog.table.column.action': '操作', + 'components.custom.serverimage.selectionlist.dialog.table.btn.choose': '选择', + + 'components.custom.serverimage.selectionlist.choose.img.external': '最多选择 {num} 张图片!', + +}; \ No newline at end of file diff --git a/packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts b/packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts new file mode 100644 index 0000000..b5b016e --- /dev/null +++ b/packages/system/src/components/Custom/ServerImage/SelectionList/locales/zh-TW.ts @@ -0,0 +1,8 @@ +export default { + 'components.custom.serverimage.selectionlist.dialog.title': '選擇圖片', + 'components.custom.serverimage.selectionlist.dialog.table.column.action': '操作', + 'components.custom.serverimage.selectionlist.dialog.table.btn.choose': '選擇', + + 'components.custom.serverimage.selectionlist.choose.img.external': '最多選擇 {num} 張圖片!', + +}; \ No newline at end of file diff --git a/packages/system/src/components/IconFont/index.ts b/packages/system/src/components/IconFont/index.ts new file mode 100644 index 0000000..dc31de9 --- /dev/null +++ b/packages/system/src/components/IconFont/index.ts @@ -0,0 +1,3 @@ +import IconFont from './index.vue'; + +export default IconFont; \ No newline at end of file diff --git a/packages/system/src/components/IconFont/index.vue b/packages/system/src/components/IconFont/index.vue new file mode 100644 index 0000000..e3910b3 --- /dev/null +++ b/packages/system/src/components/IconFont/index.vue @@ -0,0 +1,69 @@ + + + \ No newline at end of file diff --git a/packages/system/src/components/IconSvg/index.ts b/packages/system/src/components/IconSvg/index.ts new file mode 100644 index 0000000..a7592d9 --- /dev/null +++ b/packages/system/src/components/IconSvg/index.ts @@ -0,0 +1,17 @@ +import iconsvg from "./index.vue"; + +/** + * 自动导入 @/assets/iconsvg 下svg文件 + * @author LiQingSong + */ +export function importAllSvg (): void { + try { + const requireContext: __WebpackModuleApi.RequireContext = require.context('../../assets/iconsvg', false, /\.svg$/); + requireContext.keys().forEach(requireContext); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } +} + +export default iconsvg; \ No newline at end of file diff --git a/packages/system/src/components/IconSvg/index.vue b/packages/system/src/components/IconSvg/index.vue new file mode 100644 index 0000000..3a65ffc --- /dev/null +++ b/packages/system/src/components/IconSvg/index.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/packages/system/src/components/Permission/index.vue b/packages/system/src/components/Permission/index.vue new file mode 100644 index 0000000..ccaa352 --- /dev/null +++ b/packages/system/src/components/Permission/index.vue @@ -0,0 +1,50 @@ + + \ No newline at end of file diff --git a/packages/system/src/components/RestElDrawer/index.vue b/packages/system/src/components/RestElDrawer/index.vue new file mode 100644 index 0000000..53cd416 --- /dev/null +++ b/packages/system/src/components/RestElDrawer/index.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/packages/system/src/components/Result/index.vue b/packages/system/src/components/Result/index.vue new file mode 100644 index 0000000..35a45b7 --- /dev/null +++ b/packages/system/src/components/Result/index.vue @@ -0,0 +1,108 @@ + + + \ No newline at end of file diff --git a/packages/system/src/components/Result/svg/error.vue b/packages/system/src/components/Result/svg/error.vue new file mode 100644 index 0000000..d8560cf --- /dev/null +++ b/packages/system/src/components/Result/svg/error.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/components/Result/svg/info.vue b/packages/system/src/components/Result/svg/info.vue new file mode 100644 index 0000000..883da9e --- /dev/null +++ b/packages/system/src/components/Result/svg/info.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/components/Result/svg/noFound.vue b/packages/system/src/components/Result/svg/noFound.vue new file mode 100644 index 0000000..5bb6b70 --- /dev/null +++ b/packages/system/src/components/Result/svg/noFound.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/components/Result/svg/serverError.vue b/packages/system/src/components/Result/svg/serverError.vue new file mode 100644 index 0000000..49bed99 --- /dev/null +++ b/packages/system/src/components/Result/svg/serverError.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/components/Result/svg/success.vue b/packages/system/src/components/Result/svg/success.vue new file mode 100644 index 0000000..e51e879 --- /dev/null +++ b/packages/system/src/components/Result/svg/success.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/components/Result/svg/unauthorized.vue b/packages/system/src/components/Result/svg/unauthorized.vue new file mode 100644 index 0000000..c56ad10 --- /dev/null +++ b/packages/system/src/components/Result/svg/unauthorized.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/components/Result/svg/warning.vue b/packages/system/src/components/Result/svg/warning.vue new file mode 100644 index 0000000..7a5b679 --- /dev/null +++ b/packages/system/src/components/Result/svg/warning.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/components/ScreenTable/data.d.ts b/packages/system/src/components/ScreenTable/data.d.ts new file mode 100644 index 0000000..6e91de3 --- /dev/null +++ b/packages/system/src/components/ScreenTable/data.d.ts @@ -0,0 +1,9 @@ +export interface PaginationConfig { + layout?: string; + total: number; + current: number; + pageSize: number; + sizes?: number[]; + sizeChange: (size: number) => void; + onChange: (page: number) => void; +} diff --git a/packages/system/src/components/ScreenTable/index.vue b/packages/system/src/components/ScreenTable/index.vue new file mode 100644 index 0000000..72ddd48 --- /dev/null +++ b/packages/system/src/components/ScreenTable/index.vue @@ -0,0 +1,146 @@ + + + diff --git a/packages/system/src/components/ScreenTreeTable/index.vue b/packages/system/src/components/ScreenTreeTable/index.vue new file mode 100644 index 0000000..b0e8ac0 --- /dev/null +++ b/packages/system/src/components/ScreenTreeTable/index.vue @@ -0,0 +1,207 @@ + + + diff --git a/packages/system/src/components/Spin/index.vue b/packages/system/src/components/Spin/index.vue new file mode 100644 index 0000000..589d911 --- /dev/null +++ b/packages/system/src/components/Spin/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/packages/system/src/components/TreeTable/data.d.ts b/packages/system/src/components/TreeTable/data.d.ts new file mode 100644 index 0000000..967d365 --- /dev/null +++ b/packages/system/src/components/TreeTable/data.d.ts @@ -0,0 +1,5 @@ +export interface ColumnItem { + title: string; + label: string; + minWidth: number; +} \ No newline at end of file diff --git a/packages/system/src/components/TreeTable/index.vue b/packages/system/src/components/TreeTable/index.vue new file mode 100644 index 0000000..a35e178 --- /dev/null +++ b/packages/system/src/components/TreeTable/index.vue @@ -0,0 +1,392 @@ + + + diff --git a/packages/system/src/components/TuiEditor/index.vue b/packages/system/src/components/TuiEditor/index.vue new file mode 100644 index 0000000..71f767a --- /dev/null +++ b/packages/system/src/components/TuiEditor/index.vue @@ -0,0 +1,126 @@ + + diff --git a/packages/system/src/components/TuiEditor/viewer.vue b/packages/system/src/components/TuiEditor/viewer.vue new file mode 100644 index 0000000..2c378f3 --- /dev/null +++ b/packages/system/src/components/TuiEditor/viewer.vue @@ -0,0 +1,56 @@ + + \ No newline at end of file diff --git a/packages/system/src/composables/useEcharts.ts b/packages/system/src/composables/useEcharts.ts new file mode 100644 index 0000000..90a663f --- /dev/null +++ b/packages/system/src/composables/useEcharts.ts @@ -0,0 +1,35 @@ +import { onMounted, onBeforeUnmount, Ref, ref } from 'vue'; +import debounce from 'lodash.debounce'; +import echarts, { ECharts, EChartOption } from 'echarts'; +import 'echarts/theme/macarons'; + +export default function useEcharts( + labRef: Ref, + initOption: EChartOption, + theme = 'macarons' + ): Ref { + + let ec: ECharts; + const chart = ref(); + + const resizeHandler = debounce(() => { + ec.resize(); + }, 100); + + onMounted(()=> { + if(labRef.value) { + ec = echarts.init(labRef.value, theme); + ec.setOption(initOption); + chart.value = ec; + } + + window.addEventListener('resize', resizeHandler); + }) + + onBeforeUnmount(()=> { + ec.dispose(); + window.removeEventListener('resize', resizeHandler); + }); + + return chart; +} \ No newline at end of file diff --git a/packages/system/src/composables/useQueryList.ts b/packages/system/src/composables/useQueryList.ts new file mode 100644 index 0000000..38f1dfd --- /dev/null +++ b/packages/system/src/composables/useQueryList.ts @@ -0,0 +1,62 @@ +import { computed, onMounted, watch, ComputedRef } from 'vue'; +import { useRoute, useRouter } from 'vue-router'; + +export interface QueryParams { + page: number; + per: number; +} + +export type PushQuery = (param: Partial) => void; + +export interface Response { + queryParams: ComputedRef; + pushQuery: PushQuery; +} + + +/** + * 查询列表并根据route监听 composables + * @param cb 回调函数 + * @returns {跳转函数} + * @author LiQingSong + */ + export default function useQueryList(cb: (queryParams: T, pushQuery: PushQuery) => any): Response { + + const router = useRouter(); + const route = useRoute(); + + // route query参数 + const queryParams = computed(()=> { + const { per = 20, page=1 , ...other } = route.query; + return { per: Number(per), page: Number(page), ...other} as T; + }) + + /** + * query跳转 + * @param param 需要调转的参数,比如页码 + */ + const pushQuery = (param: Partial): void => { + router.push({ + ...route, + query: { + ...route.query, + ...param + } + }) + } + + + watch(queryParams,() => { + cb(queryParams.value, pushQuery) + }) + + onMounted(()=> { + cb(queryParams.value, pushQuery) + }) + + return { + queryParams, + pushQuery + } + + } \ No newline at end of file diff --git a/packages/system/src/composables/useQueryVerifyId.ts b/packages/system/src/composables/useQueryVerifyId.ts new file mode 100644 index 0000000..7753ef9 --- /dev/null +++ b/packages/system/src/composables/useQueryVerifyId.ts @@ -0,0 +1,50 @@ + import { ComputedRef, computed, onMounted, watch } from 'vue'; + import { useRoute } from 'vue-router'; + import useRestRouter from '@/composables/useRestRouter'; + import useRestStore from '@/composables/useRestStore'; + import { ElMessage } from "element-plus"; + + /** + * 返回 route query id,并验证 composables + * @param verifyRoutePath 验证的路由path + * @param cb 回调函数 + * @returns + * @author LiQingSong + */ + export default function useQueryVerifyId(verifyRoutePath: string, cb: (id: number) => any): ComputedRef { + const store = useRestStore(); + const route = useRoute(); + const restRouter = useRestRouter(); + const id = computed(() => Number(route.query.id || 0)) + + const verifyId = () => { + if(route.path !== verifyRoutePath) { + return false; + } + + if(id.value < 1) { + ElMessage({ message: '参数出错', type: 'error' }); + store.commit('global/closeCurrentHeadTabNav',() => { + restRouter.push('/') + }); + return false; + } + + cb(id.value) + + } + + + onMounted(()=> { + verifyId(); + }) + + watch(id,() => { + verifyId(); + }) + + + + return id; + + } diff --git a/packages/system/src/composables/useRestRouter.ts b/packages/system/src/composables/useRestRouter.ts new file mode 100644 index 0000000..ca54338 --- /dev/null +++ b/packages/system/src/composables/useRestRouter.ts @@ -0,0 +1,12 @@ + +/** + * 根据注入的parentRouter获取Router,如果主框架存在是parentRouter不存在是自己的router composables + * @author LiQingSong + */ + import { inject } from 'vue' + import { Router, useRouter } from 'vue-router' + +export default function useRestRouter(): Router { + const router: Router = inject('parentRouter', useRouter()) + return router +} diff --git a/packages/system/src/composables/useRestStore.ts b/packages/system/src/composables/useRestStore.ts new file mode 100644 index 0000000..f319778 --- /dev/null +++ b/packages/system/src/composables/useRestStore.ts @@ -0,0 +1,12 @@ + +/** + * 根据注入的parentStore获取Store,如果主框架存在是parentStore不存在是自己的Store composables + * @author LiQingSong + */ + import { inject } from 'vue' + import { Store, useStore } from 'vuex' + +export default function useRestStore(): Store { + const store: Store = inject>('parentStore', useStore()) + return store +} diff --git a/packages/system/src/config/i18n.ts b/packages/system/src/config/i18n.ts new file mode 100644 index 0000000..555712d --- /dev/null +++ b/packages/system/src/config/i18n.ts @@ -0,0 +1,45 @@ +/** + * 国际化 入口 + * @author LiQingSong + */ + +import { createI18n } from "vue-i18n"; +import { getLocale, setLocale, importAllLocales, defaultLang } from "@/utils/i18n"; + +/** + * elementUI 多语言 配置 + */ +import enUS from 'element-plus/lib/locale/lang/en'; +import zhCN from 'element-plus/lib/locale/lang/zh-cn'; +import zhTW from 'element-plus/lib/locale/lang/zh-tw'; +export const elementPlusMessages: { [key: string]: any} = { + 'zh-CN': zhCN, + 'zh-TW': zhTW, + 'en-US': enUS, +} + + +/** + * 框架 多语言 配置 + */ +export const messages = importAllLocales(); +const sysLocale = getLocale(); +const i18n = createI18n({ + legacy: false, + locale: elementPlusMessages[sysLocale] ? sysLocale : defaultLang, + messages, +}); + + +/** + * 设置语言 + * @param locale + */ +export function setI18nLanguage(locale: string, realReload = false): void { + setLocale(locale,realReload, function() { + // i18n.global.locale = locale // legacy: true + i18n.global.locale.value = locale; + }) +} + +export default i18n; diff --git a/packages/system/src/config/routes.ts b/packages/system/src/config/routes.ts new file mode 100644 index 0000000..8c5a44e --- /dev/null +++ b/packages/system/src/config/routes.ts @@ -0,0 +1,54 @@ +/** + * 路由入口 + * @author LiQingSong + */ + + import { RoutesDataItem } from "@/utils/routes"; + + import SecurityLayout from '@/layouts/SecurityLayout.vue'; + + import DefaultLayoutRoutes from "@/layouts/DefaultLayout/routes"; + import DefaultLayout from "@/layouts/DefaultLayout/index.vue"; + + import DashboardLayoutRoutes from '@/layouts/DashboardLayout/routes'; + import DashboardLayout from '@/layouts/DashboardLayout/index.vue'; + + +const routes: Array = [ + { + title: 'empty', + path: '/', + component: SecurityLayout, + children: [ + { + title: 'empty', + path: '/', + redirect: '/home', + component: DefaultLayout, + children: DefaultLayoutRoutes + }, + { + title: 'empty', + path: '/dashboard', + component: DashboardLayout, + children: DashboardLayoutRoutes + }, + ] + }, + { + title: 'empty', + path: '/refresh', + component: () => import('@/views/refresh/index.vue') + }, + { + title: 'app.global.menu.notfound', + path: '/:pathMatch(.*)*', + component: () => import('@/views/404/index.vue'), + } +] + + + + + + export default routes; diff --git a/packages/system/src/config/settings.ts b/packages/system/src/config/settings.ts new file mode 100644 index 0000000..7b46e9a --- /dev/null +++ b/packages/system/src/config/settings.ts @@ -0,0 +1,43 @@ +/** + * 站点配置 + * @author LiQingSong + */ +export interface SettingsType { + /** + * 站点名称 + */ + siteTitle: string; + + /** + * 站点本地存储Token 的 Key值 + */ + siteTokenKey: string; + + /** + * Ajax请求头发送Token 的 Key值 + */ + ajaxHeadersTokenKey: string; + + /** + * Ajax返回值不参加统一验证的api地址 + */ + ajaxResponseNoVerifyUrl: string[]; + + /** + * iconfont.cn 项目在线生成的 js 地址 + */ + iconfontUrl: string[]; +} + +const settings: SettingsType = { + siteTitle: 'ADMIN-VUE3-MICRO', + siteTokenKey: 'admin_vue_micro_token', + ajaxHeadersTokenKey: 'x-token', + ajaxResponseNoVerifyUrl: [ + '/user/login', // 用户登录 + '/user/info', // 获取用户信息 + ], + iconfontUrl: [], +}; + +export default settings; diff --git a/packages/system/src/config/store.ts b/packages/system/src/config/store.ts new file mode 100644 index 0000000..829c3b7 --- /dev/null +++ b/packages/system/src/config/store.ts @@ -0,0 +1,12 @@ +/** + * Store 入口 + * @author LiQingSong + */ +import { createStore } from 'vuex'; +import { importAllStore } from '@/utils/store'; + + +export default createStore({ + modules: importAllStore(), + getters: {} +}) diff --git a/packages/system/src/directives/permission/index.ts b/packages/system/src/directives/permission/index.ts new file mode 100644 index 0000000..abb4fbd --- /dev/null +++ b/packages/system/src/directives/permission/index.ts @@ -0,0 +1,31 @@ +/** + * 自定义指令 权限验证 + * @author LiQingSong + * 使用Demo: + * import permission from '@/directives/permission'; + * import { defineComponent } from "vue"; + * export default defineComponent({ + * directives: { + * permission + * } + * }) + * 删除 + * 删除 + */ +import { Directive } from "vue"; +import UserModel from "@/store/user"; +import { hasPermissionRouteRoles } from "@/utils/routes"; + +const permission: Directive = (el, binding, vnode, prevVNode) => { + const { value } = binding; + if(value) { + const userRoles = UserModel.state.currentUser.roles; + if(!hasPermissionRouteRoles(userRoles, value)){ + el.parentNode && el.parentNode.removeChild(el); + } + } else { + throw new Error(`need roles! Like v-permission="['admin','test']" or v-permission="'test'"`); + } +} + +export default permission; \ No newline at end of file diff --git a/packages/system/src/layouts/BlankLayout.vue b/packages/system/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..621cb5a --- /dev/null +++ b/packages/system/src/layouts/BlankLayout.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/system/src/layouts/DashboardLayout/index.vue b/packages/system/src/layouts/DashboardLayout/index.vue new file mode 100644 index 0000000..d383dc5 --- /dev/null +++ b/packages/system/src/layouts/DashboardLayout/index.vue @@ -0,0 +1,5 @@ + + diff --git a/packages/system/src/layouts/DashboardLayout/routes.ts b/packages/system/src/layouts/DashboardLayout/routes.ts new file mode 100644 index 0000000..bf4d536 --- /dev/null +++ b/packages/system/src/layouts/DashboardLayout/routes.ts @@ -0,0 +1,19 @@ +import { RoutesDataItem } from "@/utils/routes"; +import BlankLayout from '@/layouts/BlankLayout.vue'; + +const DashboardLayoutRoutes: Array = [ + { + title: 'analysis', + path: 'analysis', + component: BlankLayout, + children: [ + { + title: 'chartcard', + path: 'chartcard', + component: ()=> import('@/views/analysis/chartcard/index.vue') + } + ] + } +]; + +export default DashboardLayoutRoutes; diff --git a/packages/system/src/layouts/DefaultLayout/index.vue b/packages/system/src/layouts/DefaultLayout/index.vue new file mode 100644 index 0000000..423e4b1 --- /dev/null +++ b/packages/system/src/layouts/DefaultLayout/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/system/src/layouts/DefaultLayout/routes.ts b/packages/system/src/layouts/DefaultLayout/routes.ts new file mode 100644 index 0000000..17ec2ef --- /dev/null +++ b/packages/system/src/layouts/DefaultLayout/routes.ts @@ -0,0 +1,37 @@ +import { RoutesDataItem } from "@/utils/routes"; + +const DefaultLayoutRoutes: Array = [ + { + title: 'home', + path: '/home', + component: ()=> import('@/views/home/index.vue') + }, + { + title: 'accountlist', + path: '/accountlist', + roles: ['setting-accountlist'], + component: ()=> import('@/views/accountlist/index.vue') + }, + { + title: 'rolelist', + path: '/rolelist', + roles: ['setting-rolelist'], + component: ()=> import('@/views/rolelist/index.vue') + }, + { + title: 'menulist', + path: '/menulist', + roles: ['setting-menulist'], + component: ()=> import('@/views/menulist/index.vue') + }, + { + title: 'apilist', + path: '/apilist', + roles: ['setting-apilist'], + component: ()=> import('@/views/apilist/index.vue') + }, + + +]; + +export default DefaultLayoutRoutes; diff --git a/packages/system/src/layouts/SecurityLayout.vue b/packages/system/src/layouts/SecurityLayout.vue new file mode 100644 index 0000000..8d61821 --- /dev/null +++ b/packages/system/src/layouts/SecurityLayout.vue @@ -0,0 +1,28 @@ + + diff --git a/packages/system/src/locales/en-US.ts b/packages/system/src/locales/en-US.ts new file mode 100644 index 0000000..264323d --- /dev/null +++ b/packages/system/src/locales/en-US.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': 'The validation did not pass, please check the input', +}; \ No newline at end of file diff --git a/packages/system/src/locales/zh-CN.ts b/packages/system/src/locales/zh-CN.ts new file mode 100644 index 0000000..92b979c --- /dev/null +++ b/packages/system/src/locales/zh-CN.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '验证不通过,请检查输入', +}; \ No newline at end of file diff --git a/packages/system/src/locales/zh-TW.ts b/packages/system/src/locales/zh-TW.ts new file mode 100644 index 0000000..2926c8d --- /dev/null +++ b/packages/system/src/locales/zh-TW.ts @@ -0,0 +1,5 @@ +export default { + 'empty': 'empty', + 'app.global.menu.notfound': 'Not Found', + 'app.global.form.validatefields.catch': '驗證不通過,請檢查輸入', +}; \ No newline at end of file diff --git a/packages/system/src/main.ts b/packages/system/src/main.ts new file mode 100644 index 0000000..d9d71e5 --- /dev/null +++ b/packages/system/src/main.ts @@ -0,0 +1,119 @@ +declare global { + interface Window { + __POWERED_BY_QIANKUN__: string; + __INJECTED_PUBLIC_PATH_BY_QIANKUN__: string; + } +} + +if (window.__POWERED_BY_QIANKUN__) { + __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ || ''; +} + +import { createApp } from 'vue'; +import { createRouter, createWebHistory, createMemoryHistory } from 'vue-router'; + +// 样式初始化 +import 'normalize.css'; + +// 全局样式 +import '@/assets/css/global.scss'; + +// 引入 ElementUI +import ElementPlus from 'element-plus'; + +// 导入 svg +import { importAllSvg } from "@/components/IconSvg/index"; +importAllSvg(); + +// progress bar +import NProgress from 'nprogress'; // progress bar +import 'nprogress/nprogress.css'; // progress bar style +NProgress.configure({ showSpinner: false, easing: 'ease', speed: 1000 }); // NProgress Configuration + + +import App from '@/App.vue'; +import routes from '@/config/routes'; +import store from '@/config/store'; +import i18n from '@/config/i18n'; + + +let router: any = null; +let instance: any = null; +let history: any = null; + +function render(props: any = {}) { + const { container, routerBase, routerHistory, parentRouter, parentStore, data, onGlobalStateChange } = props; + const historyBase = routerBase || process.env.BASE_URL; + + if (routerHistory === 'memory') { + history = createMemoryHistory(historyBase); + } else { + history = createWebHistory(historyBase); + } + router = createRouter({ + history, + routes, + }); + + router.beforeEach((/* to, from */) => { + // start progress bar + NProgress.start(); + }); + + router.afterEach(() => { + // finish progress bar + NProgress.done(); + }); + + + if(parentStore) { + // 设置用户登录信息 + store.commit('user/saveCurrentUser', parentStore.state.user.currentUser || {}); + } + + instance = createApp(App); + instance.provide('parentRouter', parentRouter || router); + instance.provide('parentStore', parentStore || store); + instance.use(store); + instance.use(router); + instance.use(ElementPlus, { size: 'small'}); + instance.use(i18n); + instance.mount(container ? container.querySelector('#app') : '#app'); + + if (data?.defaultPath) { + router.push(data.defaultPath); + } + + // qiankun.js 全局 state + onGlobalStateChange?.((state, prev) => { + // 设置语言 + if(state.i18nLocale) { + i18n.global.locale.value = state.i18nLocale + } + }, true); + + +} + +if(!window.__POWERED_BY_QIANKUN__){ + render(); +} + +export async function bootstrap() { + console.log('%c%s', 'color: green;', 'system app bootstraped'); +} + +export async function mount(props: any) { + console.log('%c%s', 'color: blue;', 'system app mount'); + render(props); +} + +export async function unmount() { + console.log('%c%s', 'color: red;', 'system app unmount'); + instance.unmount(); + instance._container.innerHTML = ''; + instance = null; + router = null; + history.destroy(); +} + diff --git a/packages/system/src/services/user.ts b/packages/system/src/services/user.ts new file mode 100644 index 0000000..c5bc487 --- /dev/null +++ b/packages/system/src/services/user.ts @@ -0,0 +1,2 @@ +// import request from '@/utils/request'; + diff --git a/packages/system/src/shims-vue.d.ts b/packages/system/src/shims-vue.d.ts new file mode 100644 index 0000000..df76ca3 --- /dev/null +++ b/packages/system/src/shims-vue.d.ts @@ -0,0 +1,8 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +declare module '@ckeditor/ckeditor5-vue'; +declare module '@ckeditor/ckeditor5-build-decoupled-document'; diff --git a/packages/system/src/store/global.ts b/packages/system/src/store/global.ts new file mode 100644 index 0000000..7ffb946 --- /dev/null +++ b/packages/system/src/store/global.ts @@ -0,0 +1,43 @@ +import { Mutation /*, Action*/ } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; + + + +export interface StateType {} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + closeCurrentHeadTabNav: Mutation; + }; + actions: { + }; +} + +const initState: StateType = { +}; + +const StoreModel: ModuleType = { + namespaced: true, + name: 'global', + state: { + ...initState + }, + mutations: { + /** + * 定义与父框架相同的关闭当前tabNav,做漏斗 + * @param state + * @param payload Function 回调 + */ + closeCurrentHeadTabNav(state, payload: Function) { + if(typeof payload === 'function') { + payload() + } + }, + }, + actions: {} +} + + + +export default StoreModel; diff --git a/packages/system/src/store/user.ts b/packages/system/src/store/user.ts new file mode 100644 index 0000000..44892b5 --- /dev/null +++ b/packages/system/src/store/user.ts @@ -0,0 +1,64 @@ +import { Mutation, Action } from 'vuex'; +import { StoreModuleType } from "@/utils/store"; +import { removeToken } from "@/utils/localToken"; + +export interface CurrentUser { + id: number; + name: string; + avatar: string; + roles: string[]; +} + +export interface StateType { + currentUser: CurrentUser; +} + +export interface ModuleType extends StoreModuleType { + state: StateType; + mutations: { + saveCurrentUser: Mutation; + }; + actions: { + logout: Action; + }; +} + +const initState: StateType = { + currentUser: { + id: 0, + name: '', + avatar: '', + roles: [], + }, +} + +const StoreModel: ModuleType = { + namespaced: true, + name: 'user', + state: { + ...initState + }, + mutations: { + saveCurrentUser(state, payload) { + state.currentUser = { + ...initState.currentUser, + ...payload, + } + }, + }, + actions: { + async logout({ commit }) { + try { + await removeToken(); + commit('saveCurrentUser', { ...initState.currentUser }); + return true; + } catch (error) { + return false; + } + } + } +} + + + +export default StoreModel; diff --git a/packages/system/src/utils/array.ts b/packages/system/src/utils/array.ts new file mode 100644 index 0000000..a3ae5ec --- /dev/null +++ b/packages/system/src/utils/array.ts @@ -0,0 +1,29 @@ +/** + * 数组合并并去重 + * @param arr1 数组1 + * @param arr2 数组2 + */ +export function mergeUnique(arr1: Array, arr2: Array): Array { + const arr: Array = arr1; + for (let index = 0, len = arr2.length; index < len; index += 1) { + if (!arr.includes(arr2[index])) { + arr.push(arr2[index]); + } + } + + return arr; +} + +/** + * 数组去重 + * @param arr 数组 + */ +export function unique(arr: Array): Array { + const array: Array = []; + for (let index = 0, len = arr.length; index < len; index += 1) { + if (!array.includes(arr[index])) { + array.push(arr[index]); + } + } + return array; +} diff --git a/packages/system/src/utils/formatData.ts b/packages/system/src/utils/formatData.ts new file mode 100644 index 0000000..c13e148 --- /dev/null +++ b/packages/system/src/utils/formatData.ts @@ -0,0 +1,115 @@ +/** + * 数据格式化 + * @author LiQingSong + */ + +export interface Array2dToStringReturn { + idStr: string; + idsStr: string; +} + +export interface LevelData { + id: number; + pid: number; + name: string; +} + +export interface EleUiLevelData { + value: string | number; + label: string | number; + children: EleUiLevelData[] | null; +} + +/** + * 二维数组 返回对应的 字符串 , 链接 + * @param val number[][] 下拉框的值 格式 [1,[1,2],[1,3]] + * @returns Array2dToStringReturn + * @author LiQingSong + */ + export function Array2dToString(val: number[][]): Array2dToStringReturn { + const obj: Array2dToStringReturn = { + idStr: '', + idsStr: '' + }; + if (!val) { + return obj; + } + + const array: number[][] = val; + const arrLen: number = array.length; + const idArr: number[] = []; + const idsArr: string[] = []; + for (let index = 0; index < arrLen; index++) { + const element: number[] = array[index]; + const eleLen: number = element.length; + if (eleLen > 0) { + idArr.push(element[eleLen - 1]); + idsArr.push(element.join('-')); + } + } + + obj['idStr'] = idArr.join(','); + obj['idsStr'] = idsArr.join(','); + + return obj; + +} + + +/** + * 字符串 转 二维数组 + * @param val String 下拉框的值 格式 1,1-2,1-3,1-2-4 + * @returns number[][] + * @author LiQingSong + */ +export function StringToArray2d(val: string): number[][] { + if (!val) { + return []; + } + + const array: string[] = val.split(','); + const arrLen: number = array.length; + const arr: number[][] = []; + for (let index = 0; index < arrLen; index++) { + const element: string = array[index]; + const eleArr: string[] = element.split('-'); + const eArr: number[] = eleArr.map(item => { + return Number(item); + }); + arr.push(eArr); + } + + return arr; + +} + + +/** + * 格式化 element-ui 层级数据 + * @param data T[] 需要格式化的数据 + * @param value string data 对应的 value 字段名 + * @param label string data 对应的 label 字段名 + * @param pid string data 对应的 pid 字段名 + * @param pidVal string| number 起始 pid 值 + * @returns T[] | null + * @author LiQingSong + */ + export function formatEleUiLevelData(data: T[], value: string, label: string, pid: string, pidVal: string | number): EleUiLevelData[] | null { + const len: number = data.length; + if (len < 1) { + return null; + } + const newData: EleUiLevelData [] = []; + for (let index = 0; index < len; index++) { + const element: T = data[index]; + if (element[pid] === pidVal) { + newData.push({ + value: element[value], + label: element[label], + children: formatEleUiLevelData(data, value, label, pid, element[value]) + }); + } + } + + return newData.length > 0 ? newData : null; +} \ No newline at end of file diff --git a/packages/system/src/utils/i18n.ts b/packages/system/src/utils/i18n.ts new file mode 100644 index 0000000..78b58fa --- /dev/null +++ b/packages/system/src/utils/i18n.ts @@ -0,0 +1,181 @@ +/** + * 国际化 utils + * @author LiQingSong + */ +import { LocaleMessages } from '@intlify/core-base'; +import { VueMessageType } from "vue-i18n"; + +// window.localStorage 存储key +export const localeKey = 'locale'; + +// 默认语言 +export const defaultLang = 'zh-CN'; + +/** + * 验证语言命名规则 zh-CN + * @returns boolen + * @author LiQingSong + */ +export const localeNameExp = (lang: string): boolean => { + const localeExp = new RegExp(`^([a-z]{2})-?([A-Z]{2})?$`); + return localeExp.test(lang); +} + +/** + * 设置 html lang 属性值 + * @param lang 语言的 key + * @author LiQingSong + */ +export const setHtmlLang = (lang: string): void => { + /** + * axios.defaults.headers.common['Accept-Language'] = locale + */ + document.querySelector('html')?.setAttribute('lang', lang); +} + +/** + * 获取当前选择的语言 + * 获取的浏览器语言默认项目中有可能不支持,所以在config/i18n.ts中要加以判断 + * @returns string + * @author LiQingSong + */ +export const getLocale = (): string => { + const lang = typeof window.localStorage !== 'undefined' ? window.localStorage.getItem(localeKey) : ''; + const isNavigatorLanguageValid = typeof navigator !== 'undefined' && typeof navigator.language === 'string'; + const browserLang = isNavigatorLanguageValid ? navigator.language.split('-').join('-') : ''; + return lang || browserLang || defaultLang; +}; + +/** + * 切换语言 + * @param lang 语言的 key + * @param realReload 是否刷新页面,默认刷新 + * @author LiQingSong + */ +export const setLocale = (lang: string, realReload = true, callback: () => void ): void => { + + if (lang !== undefined && !localeNameExp(lang)) { + // for reset when lang === undefined + throw new Error('setLocale lang format error'); + } + if (getLocale() !== lang) { + if (typeof window.localStorage !== 'undefined') { + window.localStorage.setItem(localeKey, lang || ''); + } + + if (realReload) { + window.location.reload(); + } else { + setHtmlLang(lang); + + if(typeof callback === 'function') { + callback(); + } + } + + } +}; + +/** + * 自动导入 框架自定义语言 + * @author LiQingSong + */ +export function importAllLocales(): LocaleMessages { + const modules: LocaleMessages = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/layouts 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const layoutsRequireContext: __WebpackModuleApi.RequireContext = require.context('../layouts', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + layoutsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = layoutsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/components 下文件,包含子目录,文件名为:[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts + const componentsRequireContext: __WebpackModuleApi.RequireContext = require.context('../components', true, /[/\\]locales[/\\]([a-z]{2})-?([A-Z]{2})?\.ts$/); + componentsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = componentsRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + // 导入 @/locales 下文件,不包含子目录,文件名为:([a-z]{2})-?([A-Z]{2})?\.ts + const localesRequireContext: __WebpackModuleApi.RequireContext = require.context('../locales', false, /([a-z]{2})-?([A-Z]{2})?\.ts$/); + localesRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = localesRequireContext(fileName); + if(modulesConent.default) { + // 获取 PascalCase 命名 + const modulesName = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2"); + if(modules[modulesName]) { + modules[modulesName] = { + ...modules[modulesName], + ...modulesConent.default + } + } else { + modules[modulesName] = modulesConent.default; + } + + } + + }); + + + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + diff --git a/packages/system/src/utils/localToken.ts b/packages/system/src/utils/localToken.ts new file mode 100644 index 0000000..fca7e6f --- /dev/null +++ b/packages/system/src/utils/localToken.ts @@ -0,0 +1,37 @@ +/** + * 自定义 token 操作 + * @author LiQingSong + */ +import localforage from 'localforage'; +import settings from '@/config/settings'; + +/** + * 获取本地Token + */ +export const getToken = async (): Promise => { + return await localforage.getItem(settings.siteTokenKey); +}; + +/** + * 设置存储本地Token + */ +export const setToken = async (token: string): Promise => { + try { + await localforage.setItem(settings.siteTokenKey, token); + return true; + } catch (error) { + return false; + } +}; + +/** + * 移除本地Token + */ +export const removeToken = async (): Promise => { + try { + await localforage.removeItem(settings.siteTokenKey); + return true; + } catch (error) { + return false; + } +}; \ No newline at end of file diff --git a/packages/system/src/utils/mock/require-context.js b/packages/system/src/utils/mock/require-context.js new file mode 100644 index 0000000..f1dd6dd --- /dev/null +++ b/packages/system/src/utils/mock/require-context.js @@ -0,0 +1,45 @@ +/** + * 自定义 require.context + * @author LiQingSong + */ +module.exports = function(directory, recursive, regExp) { + const dir = require('node-dir') + const path = require('path') + + // Assume absolute path by default + let basepath = directory + + if (directory[0] === '.') { + // Relative path + basepath = path.join(__dirname, directory) + } else if (!path.isAbsolute(directory)) { + // Module path + basepath = require.resolve(directory) + } + + const keys = dir + .files(basepath, { + sync: true, + recursive: recursive || false + }) + .filter(function(file) { + return file.match(regExp || /\.(json|js)$/) + }) + .map(function(file) { + return path.join('.', file.slice(basepath.length + 1)) + }) + + var context = function(key) { + return require(context.resolve(key)) + } + + context.resolve = function(key) { + return path.join(directory, key) + } + + context.keys = function() { + return keys + } + + return context + } \ No newline at end of file diff --git a/packages/system/src/utils/mock/server.js b/packages/system/src/utils/mock/server.js new file mode 100644 index 0000000..e180d29 --- /dev/null +++ b/packages/system/src/utils/mock/server.js @@ -0,0 +1,98 @@ +/** + * Mock Server + * @author LiQingSong + */ +const requireContext = require('./require-context'); +const chokidar = require('chokidar'); +const path = require('path'); + +// 注册 mock 路由 +function registerMockRoutes(mockDir, app) { + let mockLastIndex = 0; + let mockRoutesLength = 0; + try { + // 导入 /mock 下文件 + const context = requireContext(mockDir, false, /\.js$/); + context.keys().forEach(fileName => { + // 获取内容 + const mocks = context(fileName); + for (const key in mocks) { + const keys = key.replace(/(^\s*)|(\s*$)/g, '').split(' '); + let ajaxType = 'get'; + let ajaxUrl = ''; + if(keys.length<2) { + ajaxUrl = keys[0]; + } else { + ajaxType = keys[0].toLowerCase(); + ajaxUrl = keys[1]; + if(!['get','post','put','patch','delete','head','options'].includes(ajaxType)) { + ajaxType = 'get'; + } + } + if(typeof mocks[key] === 'function') { + app[ajaxType](ajaxUrl, mocks[key]); + mockLastIndex = app._router.stack.length; + mockRoutesLength = mockRoutesLength + 1; + // console.log(app._router.stack.length); + } + } + }); + } catch (error) { + console.log(error); + } + + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } + +} + +// 删除 mock 路由 +function unRegisterMockRoutes(mockDir) { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + + +module.exports = app => { + const mockDir = path.resolve('./mock'); + + const mockRoutes = registerMockRoutes(mockDir,app); + let mockRoutesLength = mockRoutes.mockRoutesLength; + let mockStartIndex = mockRoutes.mockStartIndex; + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add' || event === 'unlink') { + // console.log(event, path); + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength); + + // clear routes cache + unRegisterMockRoutes(mockDir); + + // rest routes + const mockRoutes = registerMockRoutes(mockDir,app); + mockRoutesLength = mockRoutes.mockRoutesLength; + mockStartIndex = mockRoutes.mockStartIndex; + + + console.log(`\n > Mock Server hot reload success! changed ${path}`) + } catch (error) { + console.log(error); + } + + } + }) + + + + +} \ No newline at end of file diff --git a/packages/system/src/utils/object.ts b/packages/system/src/utils/object.ts new file mode 100644 index 0000000..ecdc6dd --- /dev/null +++ b/packages/system/src/utils/object.ts @@ -0,0 +1,46 @@ +/** + * 浅比较两个object, json的key是否一致 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObjectKey(obj1: Object, obj2: Object): boolean{ + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + if(obj1KeysLen!==obj2Keys.length) { + return false; + } + let is = true; + for (let index = 0; index < obj1KeysLen; index++) { + const element: string = obj1Keys[index]; + if(!Object.prototype.hasOwnProperty.call(obj2, element)) { + is = false; + break; + } + } + return is; +} + +/** + * 浅比较两个对象是否相等,这两个对象的值只能是数字或字符串 + * @param obj1 + * @param obj2 + * @returns + */ +export function equalObject(obj1: Object, obj2: Object): boolean { + const obj1Keys: string[] = Object.keys(obj1); + const obj2Keys: string[] = Object.keys(obj2); + const obj1KeysLen: number = obj1Keys.length; + const obj2KeysLen: number = obj2Keys.length; + if(obj1KeysLen!==obj2KeysLen) { + return false; + } + + if(obj1KeysLen===0 && obj2KeysLen===0) { + return true; + } + + return !obj1Keys.some(key => obj1[key] != obj2[key]) + +} \ No newline at end of file diff --git a/packages/system/src/utils/request.ts b/packages/system/src/utils/request.ts new file mode 100644 index 0000000..5e65aae --- /dev/null +++ b/packages/system/src/utils/request.ts @@ -0,0 +1,163 @@ +/** + * 自定义 request 网络请求工具,基于axios + * @author LiQingSong + */ +import axios, { AxiosPromise, AxiosRequestConfig, AxiosResponse } from 'axios'; +import { ElNotification } from 'element-plus'; +import settings from '@/config/settings'; +import { getToken, setToken } from '@/utils/localToken'; + +export interface ResponseData { + code: number; + data?: any; + msg?: string; + token?: string; +} + +const customCodeMessage: {[key: number]: string} = { + 10002: '当前用户登入信息已失效,请重新登入再操作', // 未登陆 +}; + +const serverCodeMessage: {[key: number]: string} = { + 200: '服务器成功返回请求的数据', + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 500: '服务器发生错误,请检查服务器(Internal Server Error)', + 502: '网关错误(Bad Gateway)', + 503: '服务不可用,服务器暂时过载或维护(Service Unavailable)', + 504: '网关超时(Gateway Timeout)', +}; + +/** + * 异常处理程序 + */ +const errorHandler = (error: any) => { + const { response, message } = error; + if (message === 'CustomError') { + // 自定义错误 + const { config, data } = response; + const { url, baseURL} = config; + const { code, msg } = data; + const reqUrl = url.split("?")[0].replace(baseURL, ''); + const noVerifyBool = settings.ajaxResponseNoVerifyUrl.includes(reqUrl); + if (!noVerifyBool) { + ElNotification({ + type: 'error', + title: `提示`, + message: customCodeMessage[code] || msg || 'Error', + }); + + /* if (code === 10002) { + // router.replace('/user/login'); + } */ + } + } else if (message === 'CancelToken') { + // 取消请求 Token + // eslint-disable-next-line no-console + console.log(message); + } else if (response && response.status) { + const errorText = serverCodeMessage[response.status] || response.statusText; + const { status, request } = response; + ElNotification({ + type: 'error', + title: `请求错误 ${status}: ${request.responseURL}`, + message: errorText, + }); + } else if (!response) { + ElNotification({ + type: 'error', + title: '网络异常', + message: '您的网络发生异常,无法连接服务器', + }); + } + + return Promise.reject(error); +} + +/** + * 配置request请求时的默认参数 + */ +const request = axios.create({ + baseURL: process.env.VUE_APP_APIHOST, // url = api url + request url + withCredentials: true, // 当跨域请求时发送cookie + timeout: 0 // 请求超时时间,5000(单位毫秒) / 0 不做限制 +}); + +// 全局设置 - post请求头 +// request.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + +/** + * 请求前 + * 请求拦截器 + */ +request.interceptors.request.use( + async (config: AxiosRequestConfig & { cType?: boolean }) => { + + // 如果设置了cType 说明是自定义 添加 Content-Type类型 为自定义post 做铺垫 + if (config['cType']) { + config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // 自定义添加token header + const headerToken = await getToken(); + if (headerToken) { + config.headers[settings.ajaxHeadersTokenKey] = headerToken; + } + + return config; + }, + /* error=> {} */ // 已在 export default catch +); + +/** + * 请求后 + * 响应拦截器 + */ +request.interceptors.response.use( + async (response: AxiosResponse) => { + + const res: ResponseData = response.data; + const { code, token } = res; + + // 自定义状态码验证 + if (code !== 0) { + return Promise.reject({ + response, + message: 'CustomError', + }); + } + + // 重置刷新token + if (token) { + await setToken(token); + } + + return response; + }, + /* error => {} */ // 已在 export default catch +); + +/** + * ajax 导出 + * + * Method: get + * Request Headers + * 无 - Content-Type + * Query String Parameters + * name: name + * age: age + * + * Method: post + * Request Headers + * Content-Type:application/json;charset=UTF-8 + * Request Payload + * { name: name, age: age } + * Custom config parameters + * { cType: true } Mandatory Settings Content-Type:application/json;charset=UTF-8 + * ...... + */ +export default function(config: AxiosRequestConfig): AxiosPromise { + return request(config).then((response: AxiosResponse) => response.data).catch(error => errorHandler(error)); +} diff --git a/packages/system/src/utils/routes.ts b/packages/system/src/utils/routes.ts new file mode 100644 index 0000000..300b80c --- /dev/null +++ b/packages/system/src/utils/routes.ts @@ -0,0 +1,388 @@ +/** + * Route utils + * @author LiQingSong + */ + +/** + * 面包屑类型 + */ +export interface BreadcrumbType { + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + // 路由地址或外链 + path: string; +} + +/** + * tab导航存储规则类型 + */ +export type TabNavType = 'path' | 'querypath'; + +import 'vue-router' +declare module 'vue-router' { + /** + * 自定义补充扩展 - 路由 - 类型字段 + */ + interface _RouteRecordBase { + // 菜单中是否隐藏 + hidden?: boolean; + // 图标的名称,显示在菜单标题前 + icon?: string; + // 权限控制,页面角色(您可以设置多个角色) + roles?: string[]; + // 标题,路由在菜单、浏览器title 或 面包屑中展示的文字,目前可以使用locales + title: string; + /** + * 面包屑自定义内容: + * 1、默认不配置按照路由自动读取; + * 2、设置为 false , 按照路由自动读取并不读当前自己; + * 3、配置对应的面包屑格式如下: + */ + breadcrumb?: BreadcrumbType[] | false; + /** + * 设置tab导航存储规则类型 + * 1、默认不配置按照path(route.path)规则 + * 2、querypath:path + query (route.path+route.query) 规则 + */ + tabNavType?: TabNavType ; + /** + * 设置该字段,则在关闭当前tab页时,作为关闭前的钩子函数 + * @param close 关闭回调函数 + */ + tabNavCloseBefore?: (close: ()=>void)=> void; + /** + * 左侧菜单选中,如果设置路径,侧栏将突出显示你设置的路径对应的侧栏导航 + * 1、(默认 route.path),此参数是为了满足特殊页面特殊需求, + * 2、如:详情页等选中侧栏导航或在模块A下面的页面,想选模块B为导航选中状态 + */ + selectLeftMenu?: string; + + // 所有父元素的path,下标key按照父元素的顺序 + parentPath?: string[] + } +} +import { RouteRecordRaw, RouteLocationNormalizedLoaded } from 'vue-router'; +import { pathToRegexp } from "path-to-regexp"; + + +/** + * 自定义重命名 - 路由类型 + */ +export type RoutesDataItem = RouteRecordRaw; + +/** + * 头部tab导航类型 + */ +export interface TabNavItem { + route: RouteLocationNormalizedLoaded, + menu: RoutesDataItem +} + +/** + * 用Routes的path作为key的JsonRoutes + */ +export interface PathJsonRoutesDataItem { + [path: string]: RoutesDataItem +} + +import { isExternal } from './validate'; +import { equalObject } from "./object"; + +/** + * 获取 route + * @param pathname path + * @param routesData routes + */ +export const getRouteItem = (pathname: string, routesData: RoutesDataItem[]): RoutesDataItem => { + let item: RoutesDataItem = { title: '', path: '', redirect: '', roles: [] }; + for (let index = 0, len = routesData.length; index < len; index += 1) { + const element = routesData[index]; + //if (element.path === pathname) { + // lqs 20210120 修复用pathToRegexp + if (pathToRegexp(element.path).exec(pathname)) { + item = element; + break; + } + + if (element.children) { + item = getRouteItem(pathname, element.children); + if (item.path !== '') { + break; + } + } + } + + return item; +}; + +/** + * 获取 route + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getJsonRouteItem = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem => { + return jsonRoutesData[pathname] || {}; +} + +/** + * 根据 hidden 判断是否有数据子集 + * @param children RoutesDataItem[] + */ +export const hasChildRoute = (children: RoutesDataItem[]): boolean => { + const showChildren = children.filter(item => { + if (item.hidden) { + return false; + } + return true; + }); + if (showChildren.length > 0) { + return true; + } + return false; +}; + + +/** + * 根据父path 设置当前项 path + * @param pathname path + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const setRoutePathForParent = (pathname: string, parentPath = '/', headStart = '/'): string => { + + if (isExternal(pathname)) { + return pathname; + } + + return pathname.substr(0, headStart.length) === headStart + ? pathname + : `${parentPath}/${pathname}`; +}; + +/** + * 根据路由 pathname 数组 - 返回对应的 route 数组 + * @param pathname 路由path数组 + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getPathsTheRoutes = ( pathname: string[], jsonRoutesData: PathJsonRoutesDataItem): RoutesDataItem[] => { + const routeItem: RoutesDataItem[] = []; + + for (let index = 0, len = pathname.length; index < len; index += 1) { + const element = pathname[index]; + const item = getJsonRouteItem(element,jsonRoutesData); + if (item.path !== '') { + routeItem.push(item); + } + } + + return routeItem; +}; + +/** + * 获取面包屑对应的 route 数组 + * @param pathname 当前路由path + * @param jsonRoutesData 经过jsonPathVueRoutes处理,框架的所有路由 + * @returns + */ +export const getBreadcrumbRoutes = (pathname: string, jsonRoutesData: PathJsonRoutesDataItem): BreadcrumbType[] => { + const route = getJsonRouteItem(pathname,jsonRoutesData); + if(!route.path) { + return []; + } + + if (!route.breadcrumb) { + const parentPath = route.parentPath || [] + const routes = getPathsTheRoutes(parentPath, jsonRoutesData); + + return route.breadcrumb === false ? routes : [...routes, route]; + } + + return route.breadcrumb; +}; + +/** + * 获取当前路由选中的侧边栏菜单path + * @param route route + */ +export const getSelectLeftMenuPath = (route: RoutesDataItem): string => { + return route.selectLeftMenu || route.path; +}; + + +/** + * 格式化返回 vue 路由, 主要处理特殊情况 + * @param routesData routes + * @param parentPath 父path - 默认 / + * @param headStart 路由起始头 - 默认 / + */ +export const vueRoutes = (routesData: RoutesDataItem[], parentPath = '/', headStart = '/'): RoutesDataItem[] => { + return routesData.map(item => { + const { children, ...other } = item; + const itemChildren = children || []; + const newItem: RoutesDataItem = { ...other }; + newItem.path = setRoutePathForParent(newItem.path, parentPath, headStart); + + if (item.children) { + newItem.children = [ + ...vueRoutes(itemChildren, newItem.path, headStart), + ]; + } + + return newItem; + }); +}; + +/** + * 把经过 vueRoutes 处理过的 routes 转换成用path作为key的json,并统一增加了parentPath + * @param vueRoutesData 经过 vueRoutes 处理过的 routes + * @returns PathJsonRoutesDataItem + */ +export const jsonPathVueRoutes = (vueRoutesData: RoutesDataItem[]): PathJsonRoutesDataItem=> { + + const jsonRoutes: PathJsonRoutesDataItem = {}; + + function forRoute(routesData: RoutesDataItem[], parentPath: string[]) { + const len = routesData.length; + for (let index = 0; index < len; index++) { + const item = routesData[index]; + + const pPath = (item.parentPath && item.parentPath.length > 0) ? item.parentPath : parentPath; + + const newItem: RoutesDataItem = { + ...item, + parentPath: [...pPath] + }; + + jsonRoutes[item.path] = newItem; + + if (item.children) { + forRoute(item.children,[...pPath, item.path]) + } + + } + } + + forRoute(vueRoutesData, []); + + return jsonRoutes; +} + +/** + * 批量设置route.meta值 + * @param routesData routes + */ +export const routesSetMeta = (routesData: RoutesDataItem[]): RoutesDataItem[] => { + return routesData.map(item => { + const { children, tabNavType, meta, ...other } = item; + const newItem: RoutesDataItem = { + meta: { + ...meta, + + // 自定义设置的 meta 值 S + + tabNavType: tabNavType || 'path', + + // 自定义设置的 meta 值 E + }, + ...other + }; + + if (item.children) { + const itemChildren = children || []; + newItem.children = [ + ...routesSetMeta(itemChildren), + ]; + } + + return newItem; + }); + +} + +/** + * 根据 自定义传入权限名 判断当前用户是否有权限 + * @param userRoles 用户的权限 + * @param roles 自定义权限名 + */ +export const hasPermissionRouteRoles = (userRoles: string[], roles?: string | string[]): boolean => { + if (userRoles.includes('admin')) { + return true; + } + + if(typeof roles === 'undefined') { + return true; + } + + if (typeof roles === 'string') { + return userRoles.includes(roles); + } + + if(roles instanceof Array && roles.length > 0) { + return roles.some(role => userRoles.includes(role)); + } + + return false; +}; + +/** + * 根据 route.roles 判断当前用户是否有权限 + * @param roles 用户的权限 + * @param route 当前路由 + */ +export const hasPermission = (roles: string[], route: RoutesDataItem): boolean => { + if (roles.includes('admin')) { + return true; + } + + if (route.roles) { + return route.roles.some(role => roles.includes(role)); + //return roles.some(role => route.roles?.includes(role)); + } + + return true; +}; + +/** + * 根据用户权限 获取 对应权限菜单 + * @param roles 用户的权限 + * @param routes 框架对应路由 + */ +export const getPermissionMenuData = ( roles: string[], routes: RoutesDataItem[]): RoutesDataItem[] => { + const menu: RoutesDataItem[] = []; + for (let index = 0, len = routes.length; index < len; index += 1) { + const element = {...routes[index]}; + if (hasPermission(roles, element)) { + if (element.children) { + element.children = getPermissionMenuData(roles, element.children); + } + menu.push(element); + } + } + + return menu; +}; + + + +/** + * 判断tabNav,对应的route是否相等 + * @param route1 vue-route + * @param route2 vue-route + * @param type 判断规则 + * @returns + */ +export const equalTabNavRoute = (route1: RouteLocationNormalizedLoaded, route2: RouteLocationNormalizedLoaded, type: TabNavType = 'path'): boolean=> { + let is = false; + switch (type) { + case 'querypath': // path + query + is = equalObject(route1.query,route2.query) && route1.path === route2.path + break; + default: // path + is = route1.path === route2.path + break; + } + + return is; +} diff --git a/packages/system/src/utils/store.ts b/packages/system/src/utils/store.ts new file mode 100644 index 0000000..f21cae9 --- /dev/null +++ b/packages/system/src/utils/store.ts @@ -0,0 +1,61 @@ +/** + * Store utils + * @author LiQingSong + */ +import { Module, ModuleTree } from 'vuex'; + +/** + * 自定义项目 Store Module 类型 + * 为自动导入的 store 做类型限制 + * [@/store文件夹下定义的 store]与[@/views文件夹下定义的`文件store.ts`] 必须继承此类型 + * @author LiQingSong + */ +export interface StoreModuleType extends Module { + namespaced: true; + name: string; +} + +/** + * 自动导入 Store + * @author LiQingSong + */ +export function importAllStore (): ModuleTree { + const modules: ModuleTree = {}; + try { + // 导入 @/views 下文件,包含子目录,文件名为:store.ts + const viewsRequireContext: __WebpackModuleApi.RequireContext = require.context('../views', true, /[/\\]store\.ts$/); + viewsRequireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = viewsRequireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + + // 导入 @/store 下文件 + const requireContext: __WebpackModuleApi.RequireContext = require.context('../store', false, /\.ts$/); + requireContext.keys().forEach(fileName => { + // 获取内容 + const modulesConent = requireContext(fileName); + if(modulesConent.default) { + const { name, ...module } = modulesConent.default; + // 获取 PascalCase 命名 + const modulesName = name || fileName.replace(/^\.\/(.*)\.\w+$/, "$1"); + + modules[modulesName] = { ...module }; + } + + }); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + + return modules; +} + \ No newline at end of file diff --git a/packages/system/src/utils/trim.ts b/packages/system/src/utils/trim.ts new file mode 100644 index 0000000..1611990 --- /dev/null +++ b/packages/system/src/utils/trim.ts @@ -0,0 +1,44 @@ +/** + * 去除空格 + * @author LiQingSong + */ + + /** + * 去除两端空格 + * @author LiQingSong + */ + export function trim(val: string): string { + return val.replace(/(^\s*)|(\s*$)/g, ""); +} + + /** + * 去除左边空格 + * @author LiQingSong + */ +export function ltrim(val: string): string { + return val.replace(/(^\s*)/g,""); +} + + /** + * 去除右边边空格 + * @author LiQingSong + */ +export function rtrim(val: string): string{ + return val.replace(/(\s*$)/g,""); +} + + /** + * 去除两端 , + * @author LiQingSong + */ +export function trimComma(val: string): string { + return val.replace(/(^,*)|(,*$)/g, ""); +} + + /** + * 去除两端 | + * @author LiQingSong + */ +export function trimVerticalBar(val: string): string{ + return val.replace(/(^\|*)|(\|*$)/g, ""); +} \ No newline at end of file diff --git a/packages/system/src/utils/validate.ts b/packages/system/src/utils/validate.ts new file mode 100644 index 0000000..1c553f6 --- /dev/null +++ b/packages/system/src/utils/validate.ts @@ -0,0 +1,9 @@ +/** + * 判断是否是外链 + * @param {string} path + * @returns {Boolean} + * @author LiQingSong + */ +export const isExternal = (path: string): boolean => { + return /^(https?:|mailto:|tel:)/.test(path); +}; diff --git a/packages/system/src/views/404/index.vue b/packages/system/src/views/404/index.vue new file mode 100644 index 0000000..bf7bc46 --- /dev/null +++ b/packages/system/src/views/404/index.vue @@ -0,0 +1,21 @@ + + \ No newline at end of file diff --git a/packages/system/src/views/accountlist/components/FormDialog/data.d.ts b/packages/system/src/views/accountlist/components/FormDialog/data.d.ts new file mode 100644 index 0000000..9f0093e --- /dev/null +++ b/packages/system/src/views/accountlist/components/FormDialog/data.d.ts @@ -0,0 +1,22 @@ +import { Account } from "../../data.d"; + +export type Account = Account; + + +export interface FormItem { + nickname: string; + username: string; + password: string; + roles: number[]; +} + +export type DataItem = FormItem; + + +export interface FormDialogProps { + visible: boolean; + submitLoading?: boolean; + values?: Account; + title?: string; + onSubmit: (values: DataItem) => Promise; +} \ No newline at end of file diff --git a/packages/system/src/views/accountlist/components/FormDialog/index.vue b/packages/system/src/views/accountlist/components/FormDialog/index.vue new file mode 100644 index 0000000..0aa1c26 --- /dev/null +++ b/packages/system/src/views/accountlist/components/FormDialog/index.vue @@ -0,0 +1,181 @@ + + + diff --git a/packages/system/src/views/accountlist/data.d.ts b/packages/system/src/views/accountlist/data.d.ts new file mode 100644 index 0000000..d3c1565 --- /dev/null +++ b/packages/system/src/views/accountlist/data.d.ts @@ -0,0 +1,31 @@ +import { PaginationConfig } from "@/components/ScreenTable/data.d"; + +export interface Roles { + id: number; + name: string; +} + +export interface Account { + id: number; + nickname: string; + username: string; + password?: string; + roles: Roles[]; +} + +export interface TableListQueryParams { + page: number; + per: number; + keywords?: string; + sort?: number; + order?: number; + refresh?: string | number; +} + +export type TableListItem = Account; + +export interface TableDataType { + loading: boolean; + list: TableListItem[]; + pagination: PaginationConfig; +} \ No newline at end of file diff --git a/packages/system/src/views/accountlist/index.vue b/packages/system/src/views/accountlist/index.vue new file mode 100644 index 0000000..e7ad9ff --- /dev/null +++ b/packages/system/src/views/accountlist/index.vue @@ -0,0 +1,230 @@ + + + + diff --git a/packages/system/src/views/accountlist/locales/en-US.ts b/packages/system/src/views/accountlist/locales/en-US.ts new file mode 100644 index 0000000..5fed220 --- /dev/null +++ b/packages/system/src/views/accountlist/locales/en-US.ts @@ -0,0 +1,34 @@ +export default { + 'views.system.accountlist.button.add': 'Add', + 'views.system.accountlist.search.input.placeholder': 'Enter search content', + 'views.system.accountlist.table.column.index': 'Order', + 'views.system.accountlist.table.column.nickname': 'Nick name', + 'views.system.accountlist.table.column.username': 'Username', + 'views.system.accountlist.table.column.roles': 'Role', + 'views.system.accountlist.table.column.action': 'Action', + 'views.system.accountlist.table.column.action.buttion.edit': 'Edit', + 'views.system.accountlist.table.column.action.buttion.del': 'Delete', + 'views.system.accountlist.table.column.action.buttion.del.popconfirm': 'Are you sure to delete?', + 'views.system.accountlist.table.column.action.buttion.del.success': 'successfully deleted!', + + 'views.system.accountlist.components.formdialog.add.title': 'Add account', + 'views.system.accountlist.components.formdialog.edit.title': 'Modify account', + 'views.system.accountlist.components.formdialog.nickname': 'Nick name', + 'views.system.accountlist.components.formdialog.nickname.placeholder': 'Please enter a nickname', + 'views.system.accountlist.components.formdialog.nickname.max': 'Up to 8 characters', + 'views.system.accountlist.components.formdialog.username': 'Username', + 'views.system.accountlist.components.formdialog.username.placeholder': 'please enter user name', + 'views.system.accountlist.components.formdialog.username.test': 'Must be lowercase letters, numbers', + 'views.system.accountlist.components.formdialog.username.minmax': '6-16 words', + 'views.system.accountlist.components.formdialog.password': 'Password', + 'views.system.accountlist.components.formdialog.password.placeholder': 'Please enter the password', + 'views.system.accountlist.components.formdialog.password.placeholder2': 'If it is empty, the password will not be changed', + 'views.system.accountlist.components.formdialog.password.test': 'Must be letters, numbers', + 'views.system.accountlist.components.formdialog.password.minmax': '6-16 words', + 'views.system.accountlist.components.formdialog.roles': 'Role', + 'views.system.accountlist.components.formdialog.roles.placeholder': 'please choose', + 'views.system.accountlist.components.formdialog.btn.save': 'Save', + 'views.system.accountlist.components.formdialog.btn.cancel': 'Cancel', + 'views.system.accountlist.components.formdialog.addsuccess': 'added successfully!', + 'views.system.accountlist.components.formdialog.editsuccess': 'Successfully modified!', +}; diff --git a/packages/system/src/views/accountlist/locales/zh-CN.ts b/packages/system/src/views/accountlist/locales/zh-CN.ts new file mode 100644 index 0000000..a75aa95 --- /dev/null +++ b/packages/system/src/views/accountlist/locales/zh-CN.ts @@ -0,0 +1,36 @@ +export default { + 'views.system.accountlist.button.add': '新增', + 'views.system.accountlist.search.input.placeholder': '请输入搜索内容', + 'views.system.accountlist.table.column.index': '序号', + 'views.system.accountlist.table.column.nickname': '昵称', + 'views.system.accountlist.table.column.username': '用户名', + 'views.system.accountlist.table.column.roles': '角色', + 'views.system.accountlist.table.column.action': '操作', + 'views.system.accountlist.table.column.action.buttion.edit': '修改', + 'views.system.accountlist.table.column.action.buttion.del': '删除', + 'views.system.accountlist.table.column.action.buttion.del.popconfirm': '是否确认删除?', + 'views.system.accountlist.table.column.action.buttion.del.success': '删除成功!', + + 'views.system.accountlist.components.formdialog.add.title': '新增账号', + 'views.system.accountlist.components.formdialog.edit.title': '修改账号', + 'views.system.accountlist.components.formdialog.nickname': '昵称', + 'views.system.accountlist.components.formdialog.nickname.placeholder': '请输入昵称', + 'views.system.accountlist.components.formdialog.nickname.max': '最长 8 个字', + 'views.system.accountlist.components.formdialog.username': '用户名', + 'views.system.accountlist.components.formdialog.username.placeholder': '请输入用户名', + 'views.system.accountlist.components.formdialog.username.test': '必须是小写字母、数字', + 'views.system.accountlist.components.formdialog.username.minmax': '6-16 个字', + 'views.system.accountlist.components.formdialog.password': '密码', + 'views.system.accountlist.components.formdialog.password.placeholder': '请输入密码', + 'views.system.accountlist.components.formdialog.password.placeholder2': '为空则不修改密码', + 'views.system.accountlist.components.formdialog.password.test': '必须是字母、数字', + 'views.system.accountlist.components.formdialog.password.minmax': '6-16 个字', + 'views.system.accountlist.components.formdialog.roles': '角色', + 'views.system.accountlist.components.formdialog.roles.placeholder': '请选择', + 'views.system.accountlist.components.formdialog.btn.save': '保存', + 'views.system.accountlist.components.formdialog.btn.cancel': '取消', + 'views.system.accountlist.components.formdialog.addsuccess': '新增成功!', + 'views.system.accountlist.components.formdialog.editsuccess': '修改成功!', + + +}; diff --git a/packages/system/src/views/accountlist/locales/zh-TW.ts b/packages/system/src/views/accountlist/locales/zh-TW.ts new file mode 100644 index 0000000..0ea2424 --- /dev/null +++ b/packages/system/src/views/accountlist/locales/zh-TW.ts @@ -0,0 +1,34 @@ +export default { + 'views.system.accountlist.button.add': '新增', + 'views.system.accountlist.search.input.placeholder': '請輸入搜索內容', + 'views.system.accountlist.table.column.index': '序號', + 'views.system.accountlist.table.column.nickname': '昵稱', + 'views.system.accountlist.table.column.username': '用戶名', + 'views.system.accountlist.table.column.roles': '角色', + 'views.system.accountlist.table.column.action': '操作', + 'views.system.accountlist.table.column.action.buttion.edit': '修改', + 'views.system.accountlist.table.column.action.buttion.del': '刪除', + 'views.system.accountlist.table.column.action.buttion.del.popconfirm': '是否確認刪除?', + 'views.system.accountlist.table.column.action.buttion.del.success': '刪除成功!', + + 'views.system.accountlist.components.formdialog.add.title': '新增賬號', + 'views.system.accountlist.components.formdialog.edit.title': '修改賬號', + 'views.system.accountlist.components.formdialog.nickname': '昵稱', + 'views.system.accountlist.components.formdialog.nickname.placeholder': '請輸入昵稱', + 'views.system.accountlist.components.formdialog.nickname.max': '最長 8 個字', + 'views.system.accountlist.components.formdialog.username': '用戶名', + 'views.system.accountlist.components.formdialog.username.placeholder': '請輸入用戶名', + 'views.system.accountlist.components.formdialog.username.test': '必須是小寫字母、數字', + 'views.system.accountlist.components.formdialog.username.minmax': '6-16 個字', + 'views.system.accountlist.components.formdialog.password': '密碼', + 'views.system.accountlist.components.formdialog.password.placeholder': '請輸入密碼', + 'views.system.accountlist.components.formdialog.password.placeholder2': '為空則不修改密碼', + 'views.system.accountlist.components.formdialog.password.test': '必須是字母、數字', + 'views.system.accountlist.components.formdialog.password.minmax': '6-16 個字', + 'views.system.accountlist.components.formdialog.roles': '角色', + 'views.system.accountlist.components.formdialog.roles.placeholder': '請選擇', + 'views.system.accountlist.components.formdialog.btn.save': '保存', + 'views.system.accountlist.components.formdialog.btn.cancel': '取消', + 'views.system.accountlist.components.formdialog.addsuccess': '新增成功!', + 'views.system.accountlist.components.formdialog.editsuccess': '修改成功!', +}; diff --git a/packages/system/src/views/accountlist/service.ts b/packages/system/src/views/accountlist/service.ts new file mode 100644 index 0000000..0d2ba39 --- /dev/null +++ b/packages/system/src/views/accountlist/service.ts @@ -0,0 +1,72 @@ +import request from '@/utils/request'; +import { TableListQueryParams } from './data.d'; +import { DataItem } from "./components/FormDialog/data.d"; + +/** + * 账号 - 列表 - 有分页 + * @param params 请求参数 + * @returns + * @author LiQingSong + */ +export async function queryList(params?: TableListQueryParams): Promise { + return request({ + url: '/accounts', + method: 'get', + params, + }); +} + +/** + * 账号 - 删除 + * @param id ID + * @returns + * @author LiQingSong + */ +export async function removeData(id: number): Promise { + return request({ + url: `/accounts/${id}`, + method: 'delete', + }); +} + + + +/** + * 账号 - 新增 + * @param {Object} data 请求参数 + * @author LiQingSong + */ + export async function accountAdd(data: DataItem): Promise { + return request({ + url: '/accounts', + method: 'post', + data + }); +} + +/** + * 账号 - 编辑 + * @param {Number} id ID + * @param {Object} data 请求参数 + * @author LiQingSong + */ +export async function accountEdit(id: number, data: DataItem): Promise { + return request({ + url: `/accounts/${id}`, + method: 'put', + data + }); +} + + +/** + * 账号 - 获取指定详情 + * @param {Number} id ID + * @author LiQingSong + */ + export async function detailData(id: number): Promise { + return request({ + url: `/accounts/${id}`, + method: 'get' + }); +} diff --git a/packages/system/src/views/analysis/chartcard/index.vue b/packages/system/src/views/analysis/chartcard/index.vue new file mode 100644 index 0000000..235c901 --- /dev/null +++ b/packages/system/src/views/analysis/chartcard/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/packages/system/src/views/apilist/components/FormDialog/data.d.ts b/packages/system/src/views/apilist/components/FormDialog/data.d.ts new file mode 100644 index 0000000..9e24a51 --- /dev/null +++ b/packages/system/src/views/apilist/components/FormDialog/data.d.ts @@ -0,0 +1,22 @@ +import { Api } from "../../data.d"; + +export type Api = Api; + + +export interface FormItem { + name: string; + permission: string; + pid: number; + pName: string; +} + +export type DataItem = FormItem; + + +export interface FormDialogProps { + visible: boolean; + submitLoading?: boolean; + values: Api; + title?: string; + onSubmit: (values: DataItem) => Promise; +} \ No newline at end of file diff --git a/packages/system/src/views/apilist/components/FormDialog/index.vue b/packages/system/src/views/apilist/components/FormDialog/index.vue new file mode 100644 index 0000000..e017b4f --- /dev/null +++ b/packages/system/src/views/apilist/components/FormDialog/index.vue @@ -0,0 +1,130 @@ + + + diff --git a/packages/system/src/views/apilist/data.d.ts b/packages/system/src/views/apilist/data.d.ts new file mode 100644 index 0000000..fdfbdb8 --- /dev/null +++ b/packages/system/src/views/apilist/data.d.ts @@ -0,0 +1,13 @@ +import { ColumnItem } from "@/components/TreeTable/data.d"; +export interface tablePropType { + loading: boolean; + column: ColumnItem[]; +} + +export interface Api { + id: number; + name: string; + permission: string; + pid: number; + pName?: string; +} diff --git a/packages/system/src/views/apilist/index.vue b/packages/system/src/views/apilist/index.vue new file mode 100644 index 0000000..1b738c6 --- /dev/null +++ b/packages/system/src/views/apilist/index.vue @@ -0,0 +1,228 @@ + + diff --git a/packages/system/src/views/apilist/locales/en-US.ts b/packages/system/src/views/apilist/locales/en-US.ts new file mode 100644 index 0000000..d85973d --- /dev/null +++ b/packages/system/src/views/apilist/locales/en-US.ts @@ -0,0 +1,29 @@ +export default { + 'views.system.apilist.button.add': 'Added first level API', + 'views.system.apilist.table.column.name': 'API list', + 'views.system.apilist.table.column.permission': 'API address', + 'views.system.apilist.table.column.action': 'Action', + + 'views.system.apilist.table.column.action.buttion.add': 'Add subordinate', + 'views.system.apilist.table.column.action.buttion.edit': 'Edit', + 'views.system.apilist.table.column.action.buttion.del': 'Delete', + 'views.system.apilist.table.column.action.buttion.del.popconfirm': 'Are you sure to delete?', + 'views.system.apilist.table.column.action.buttion.del.success': 'successfully deleted!', + + 'views.system.apilist.components.formdialog.add.title': 'New API', + 'views.system.apilist.components.formdialog.edit.title': 'Modify API', + 'views.system.apilist.components.formdialog.name': 'API name', + 'views.system.apilist.components.formdialog.name.placeholder': 'Please enter the API name', + 'views.system.apilist.components.formdialog.name.max': 'Up to 8 characters', + 'views.system.apilist.components.formdialog.permission': 'API address', + 'views.system.apilist.components.formdialog.permission.placeholder': 'Please enter the API address', + 'views.system.apilist.components.formdialog.permission.test': 'Must be lowercase letters, numbers, /,:', + 'views.system.apilist.components.formdialog.permission.max': 'Up to 80 characters', + 'views.system.apilist.components.formdialog.pname': 'Advanced API', + 'views.system.apilist.components.formdialog.btn.save': 'Save', + 'views.system.apilist.components.formdialog.btn.cancel': 'Cancel', + 'views.system.apilist.components.formdialog.addsuccess': 'added successfully!', + 'views.system.apilist.components.formdialog.editsuccess': 'Successfully modified!', + + +}; diff --git a/packages/system/src/views/apilist/locales/zh-CN.ts b/packages/system/src/views/apilist/locales/zh-CN.ts new file mode 100644 index 0000000..10b7054 --- /dev/null +++ b/packages/system/src/views/apilist/locales/zh-CN.ts @@ -0,0 +1,29 @@ +export default { + 'views.system.apilist.button.add': '新增一级API', + 'views.system.apilist.table.column.name': 'API列表', + 'views.system.apilist.table.column.permission': 'API地址', + 'views.system.apilist.table.column.action': '操作', + + 'views.system.apilist.table.column.action.buttion.add': '新增下级', + 'views.system.apilist.table.column.action.buttion.edit': '修改', + 'views.system.apilist.table.column.action.buttion.del': '删除', + 'views.system.apilist.table.column.action.buttion.del.popconfirm': '是否确认删除?', + 'views.system.apilist.table.column.action.buttion.del.success': '删除成功!', + + 'views.system.apilist.components.formdialog.add.title': '新增API', + 'views.system.apilist.components.formdialog.edit.title': '修改API', + 'views.system.apilist.components.formdialog.name': 'API名称', + 'views.system.apilist.components.formdialog.name.placeholder': '请输入API名称', + 'views.system.apilist.components.formdialog.name.max': '最长 8 个字', + 'views.system.apilist.components.formdialog.permission': 'API地址', + 'views.system.apilist.components.formdialog.permission.placeholder': '请输入API地址', + 'views.system.apilist.components.formdialog.permission.test': '必须是小写字母、数字、/、:', + 'views.system.apilist.components.formdialog.permission.max': '最长 80 个字符', + 'views.system.apilist.components.formdialog.pname': '上级API', + 'views.system.apilist.components.formdialog.btn.save': '保存', + 'views.system.apilist.components.formdialog.btn.cancel': '取消', + 'views.system.apilist.components.formdialog.addsuccess': '新增成功!', + 'views.system.apilist.components.formdialog.editsuccess': '修改成功!', + + +}; diff --git a/packages/system/src/views/apilist/locales/zh-TW.ts b/packages/system/src/views/apilist/locales/zh-TW.ts new file mode 100644 index 0000000..3535214 --- /dev/null +++ b/packages/system/src/views/apilist/locales/zh-TW.ts @@ -0,0 +1,30 @@ +export default { + 'views.system.apilist.button.add': '新增一級API', + 'views.system.apilist.table.column.name': 'API列表', + 'views.system.apilist.table.column.permission': 'API地址', + 'views.system.apilist.table.column.action': '操作', + + 'views.system.apilist.table.column.action.buttion.add': '新增下級', + 'views.system.apilist.table.column.action.buttion.edit': '修改', + 'views.system.apilist.table.column.action.buttion.del': '刪除', + 'views.system.apilist.table.column.action.buttion.del.popconfirm': '是否確認刪除?', + 'views.system.apilist.table.column.action.buttion.del.success': '刪除成功!', + + 'views.system.apilist.components.formdialog.add.title': '新增API', + 'views.system.apilist.components.formdialog.edit.title': '修改API', + 'views.system.apilist.components.formdialog.name': 'API名稱', + 'views.system.apilist.components.formdialog.name.placeholder': '請輸入API名稱', + 'views.system.apilist.components.formdialog.name.max': '最長 8 個字', + 'views.system.apilist.components.formdialog.permission': 'API地址', + 'views.system.apilist.components.formdialog.permission.placeholder': '請輸入API地址', + 'views.system.apilist.components.formdialog.permission.test': '必須是小寫字母、數字、/、:', + 'views.system.apilist.components.formdialog.permission.max': '最長 80 個字符', + 'views.system.apilist.components.formdialog.pname': '上級API', + 'views.system.apilist.components.formdialog.btn.save': '保存', + 'views.system.apilist.components.formdialog.btn.cancel': '取消', + 'views.system.apilist.components.formdialog.addsuccess': '新增成功!', + 'views.system.apilist.components.formdialog.editsuccess': '修改成功!', + + + +}; diff --git a/packages/system/src/views/apilist/service.ts b/packages/system/src/views/apilist/service.ts new file mode 100644 index 0000000..d40ace0 --- /dev/null +++ b/packages/system/src/views/apilist/service.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { DataItem } from "./components/FormDialog/data.d"; + + +/** + * API管理 - 列表 + * @param pid number 父id + * @returns + * @author LiQingSong + */ +export async function queryList(pid: number): Promise { + return request({ + url: '/apis', + method: 'get', + params: { + pid + } + }); +} + +/** + * API管理 - 添加 + * @param {DataItem} data 请求参数 + * @returns + * @author LiQingSong + */ +export async function add(data: DataItem): Promise { + return request({ + url: '/apis', + method: 'post', + data + }); +} + +/** + * API管理 - 编辑 + * @param {number} id ID + * @param {DataItem} data 请求参数 + * @returns + * @author LiQingSong + */ +export async function edit(id: number,data: DataItem): Promise { + return request({ + url: '/apis/' + id, + method: 'put', + data + }); +} + +/** + * API管理 - 删除 + * @param {number} id ID + * @returns + * @author LiQingSong + */ +export async function remove(id: number): Promise { + return request({ + url: '/apis/' + id, + method: 'delete' + }); +} + + diff --git a/packages/system/src/views/home/index.vue b/packages/system/src/views/home/index.vue new file mode 100644 index 0000000..76c2925 --- /dev/null +++ b/packages/system/src/views/home/index.vue @@ -0,0 +1,7 @@ + + diff --git a/packages/system/src/views/menulist/components/FormDialog/data.d.ts b/packages/system/src/views/menulist/components/FormDialog/data.d.ts new file mode 100644 index 0000000..7d63770 --- /dev/null +++ b/packages/system/src/views/menulist/components/FormDialog/data.d.ts @@ -0,0 +1,24 @@ +import { Menu } from "../../data.d"; + +export type Menu = Menu; + + +export interface FormItem { + name: string; + urlcode: string; + type: number | string; + perms: number[][]; + pid: number; + pName: string; +} + +export type DataItem = Omit; + + +export interface FormDialogProps { + visible: boolean; + submitLoading?: boolean; + values: Menu; + title?: string; + onSubmit: (values: DataItem) => Promise; +} \ No newline at end of file diff --git a/packages/system/src/views/menulist/components/FormDialog/index.vue b/packages/system/src/views/menulist/components/FormDialog/index.vue new file mode 100644 index 0000000..02b002f --- /dev/null +++ b/packages/system/src/views/menulist/components/FormDialog/index.vue @@ -0,0 +1,167 @@ + + + diff --git a/packages/system/src/views/menulist/data.d.ts b/packages/system/src/views/menulist/data.d.ts new file mode 100644 index 0000000..6850864 --- /dev/null +++ b/packages/system/src/views/menulist/data.d.ts @@ -0,0 +1,17 @@ +import { ColumnItem } from "@/components/TreeTable/data.d"; +export interface tablePropType { + loading: boolean; + column: ColumnItem[]; +} + +export interface Menu { + id: number; + name: string; + urlcode: string; + type: number | string; + typeText?: string; + perms: string; + permsLevel: string; + pid: number; + pName?: string; +} \ No newline at end of file diff --git a/packages/system/src/views/menulist/index.vue b/packages/system/src/views/menulist/index.vue new file mode 100644 index 0000000..aee0442 --- /dev/null +++ b/packages/system/src/views/menulist/index.vue @@ -0,0 +1,257 @@ + + diff --git a/packages/system/src/views/menulist/locales/en-US.ts b/packages/system/src/views/menulist/locales/en-US.ts new file mode 100644 index 0000000..0a4c50e --- /dev/null +++ b/packages/system/src/views/menulist/locales/en-US.ts @@ -0,0 +1,34 @@ +export default { + 'views.system.menulist.button.add': 'Added first level menu', + 'views.system.menulist.table.column.name': 'menu list', + 'views.system.menulist.table.column.urlcode': 'menu address', + 'views.system.menulist.table.column.type': 'type', + 'views.system.menulist.table.column.action': 'Action', + + 'views.system.menulist.table.column.action.buttion.add': 'Add subordinate', + 'views.system.menulist.table.column.action.buttion.edit': 'Edit', + 'views.system.menulist.table.column.action.buttion.del': 'Delete', + 'views.system.menulist.table.column.action.buttion.del.popconfirm': 'Are you sure to delete?', + 'views.system.menulist.table.column.action.buttion.del.success': 'successfully deleted!', + + 'views.system.menulist.components.formdialog.add.title': 'New menu', + 'views.system.menulist.components.formdialog.edit.title': 'Modify menu', + 'views.system.menulist.components.formdialog.name': 'menu name', + 'views.system.menulist.components.formdialog.name.placeholder': 'Please enter the menu name', + 'views.system.menulist.components.formdialog.name.max': 'Up to 8 characters', + 'views.system.menulist.components.formdialog.urlcode': 'menu address', + 'views.system.menulist.components.formdialog.urlcode.placeholder': 'Please enter the menu address', + 'views.system.menulist.components.formdialog.urlcode.test': 'Must be lowercase letters, numbers, /,-', + 'views.system.menulist.components.formdialog.urlcode.max': 'Up to 80 characters', + 'views.system.menulist.components.formdialog.type': 'type', + 'views.system.menulist.components.formdialog.type.placeholder': 'please choose', + 'views.system.menulist.components.formdialog.perms': 'Backend API', + 'views.system.menulist.components.formdialog.perms.placeholder': 'please choose', + 'views.system.menulist.components.formdialog.pname': 'Advanced menu', + 'views.system.menulist.components.formdialog.btn.save': 'Save', + 'views.system.menulist.components.formdialog.btn.cancel': 'Cancel', + 'views.system.menulist.components.formdialog.addsuccess': 'added successfully!', + 'views.system.menulist.components.formdialog.editsuccess': 'Successfully modified!', + + +}; diff --git a/packages/system/src/views/menulist/locales/zh-CN.ts b/packages/system/src/views/menulist/locales/zh-CN.ts new file mode 100644 index 0000000..33474ff --- /dev/null +++ b/packages/system/src/views/menulist/locales/zh-CN.ts @@ -0,0 +1,34 @@ +export default { + 'views.system.menulist.button.add': '新增一级菜单', + 'views.system.menulist.table.column.name': '菜单列表', + 'views.system.menulist.table.column.urlcode': '菜单地址', + 'views.system.menulist.table.column.type': '类型', + 'views.system.menulist.table.column.action': '操作', + + 'views.system.menulist.table.column.action.buttion.add': '新增下级', + 'views.system.menulist.table.column.action.buttion.edit': '修改', + 'views.system.menulist.table.column.action.buttion.del': '删除', + 'views.system.menulist.table.column.action.buttion.del.popconfirm': '是否确认删除?', + 'views.system.menulist.table.column.action.buttion.del.success': '删除成功!', + + 'views.system.menulist.components.formdialog.add.title': '新增菜单', + 'views.system.menulist.components.formdialog.edit.title': '修改菜单', + 'views.system.menulist.components.formdialog.name': '菜单名称', + 'views.system.menulist.components.formdialog.name.placeholder': '请输入菜单名称', + 'views.system.menulist.components.formdialog.name.max': '最长 8 个字', + 'views.system.menulist.components.formdialog.urlcode': '菜单地址', + 'views.system.menulist.components.formdialog.urlcode.placeholder': '请输入菜单地址', + 'views.system.menulist.components.formdialog.urlcode.test': '必须是小写字母、数字、/、-', + 'views.system.menulist.components.formdialog.urlcode.max': '最长 80 个字符', + 'views.system.menulist.components.formdialog.type': '类型', + 'views.system.menulist.components.formdialog.type.placeholder': '请选择', + 'views.system.menulist.components.formdialog.perms': '后台API', + 'views.system.menulist.components.formdialog.perms.placeholder': '请选择', + 'views.system.menulist.components.formdialog.pname': '上级菜单', + 'views.system.menulist.components.formdialog.btn.save': '保存', + 'views.system.menulist.components.formdialog.btn.cancel': '取消', + 'views.system.menulist.components.formdialog.addsuccess': '新增成功!', + 'views.system.menulist.components.formdialog.editsuccess': '修改成功!', + + +}; diff --git a/packages/system/src/views/menulist/locales/zh-TW.ts b/packages/system/src/views/menulist/locales/zh-TW.ts new file mode 100644 index 0000000..1475356 --- /dev/null +++ b/packages/system/src/views/menulist/locales/zh-TW.ts @@ -0,0 +1,35 @@ +export default { + 'views.system.menulist.button.add': '新增一級菜單', + 'views.system.menulist.table.column.name': '菜單列表', + 'views.system.menulist.table.column.urlcode': '菜單地址', + 'views.system.menulist.table.column.type': '類型', + 'views.system.menulist.table.column.action': '操作', + + 'views.system.menulist.table.column.action.buttion.add': '新增下級', + 'views.system.menulist.table.column.action.buttion.edit': '修改', + 'views.system.menulist.table.column.action.buttion.del': '刪除', + 'views.system.menulist.table.column.action.buttion.del.popconfirm': '是否確認刪除?', + 'views.system.menulist.table.column.action.buttion.del.success': '刪除成功!', + + 'views.system.menulist.components.formdialog.add.title': '新增菜單', + 'views.system.menulist.components.formdialog.edit.title': '修改菜單', + 'views.system.menulist.components.formdialog.name': '菜單名稱', + 'views.system.menulist.components.formdialog.name.placeholder': '請輸入菜單名稱', + 'views.system.menulist.components.formdialog.name.max': '最長 8 個字', + 'views.system.menulist.components.formdialog.urlcode': '菜單地址', + 'views.system.menulist.components.formdialog.urlcode.placeholder': '請輸入菜單地址', + 'views.system.menulist.components.formdialog.urlcode.test': '必須是小寫字母、數字、/、-', + 'views.system.menulist.components.formdialog.urlcode.max': '最長 80 個字符', + 'views.system.menulist.components.formdialog.type': '类型', + 'views.system.menulist.components.formdialog.type.placeholder': '請選擇', + 'views.system.menulist.components.formdialog.perms': '後臺API', + 'views.system.menulist.components.formdialog.perms.placeholder': '請選擇', + 'views.system.menulist.components.formdialog.pname': '上級菜單', + 'views.system.menulist.components.formdialog.btn.save': '保存', + 'views.system.menulist.components.formdialog.btn.cancel': '取消', + 'views.system.menulist.components.formdialog.addsuccess': '新增成功!', + 'views.system.menulist.components.formdialog.editsuccess': '修改成功!', + + + +}; diff --git a/packages/system/src/views/menulist/service.ts b/packages/system/src/views/menulist/service.ts new file mode 100644 index 0000000..23b4042 --- /dev/null +++ b/packages/system/src/views/menulist/service.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { DataItem } from "./components/FormDialog/data.d"; + + +/** + * 后台菜单 - 列表 + * @param pid number 父id + * @returns + * @author LiQingSong + */ +export async function queryList(pid: number): Promise { + return request({ + url: '/menus', + method: 'get', + params: { + pid + } + }); +} + +/** + * 后台菜单 - 添加 + * @param {DataItem} data 请求参数 + * @returns + * @author LiQingSong + */ +export async function add(data: DataItem): Promise { + return request({ + url: '/menus', + method: 'post', + data + }); +} + +/** + * 后台菜单 - 编辑 + * @param {number} id ID + * @param {DataItem} data 请求参数 + * @returns + * @author LiQingSong + */ +export async function edit(id: number,data: DataItem): Promise { + return request({ + url: '/menus/' + id, + method: 'put', + data + }); +} + +/** + * 后台菜单 - 删除 + * @param {number} id ID + * @returns + * @author LiQingSong + */ +export async function remove(id: number): Promise { + return request({ + url: '/menus/' + id, + method: 'delete' + }); +} + + diff --git a/packages/system/src/views/refresh/index.vue b/packages/system/src/views/refresh/index.vue new file mode 100644 index 0000000..c2b19a5 --- /dev/null +++ b/packages/system/src/views/refresh/index.vue @@ -0,0 +1,17 @@ + diff --git a/packages/system/src/views/rolelist/components/FormDialog/data.d.ts b/packages/system/src/views/rolelist/components/FormDialog/data.d.ts new file mode 100644 index 0000000..8f9426d --- /dev/null +++ b/packages/system/src/views/rolelist/components/FormDialog/data.d.ts @@ -0,0 +1,20 @@ +import { TableListItem } from "../../data.d"; + + + +export interface FormItem { + name: string; + description: string; + resources: number[][]; +} + +export type DataItem = Omit; + + +export interface FormDialogProps { + visible: boolean; + submitLoading?: boolean; + values?: TableListItem; + title?: string; + onSubmit: (values: DataItem) => Promise; +} \ No newline at end of file diff --git a/packages/system/src/views/rolelist/components/FormDialog/index.vue b/packages/system/src/views/rolelist/components/FormDialog/index.vue new file mode 100644 index 0000000..eae9cb9 --- /dev/null +++ b/packages/system/src/views/rolelist/components/FormDialog/index.vue @@ -0,0 +1,130 @@ + + + diff --git a/packages/system/src/views/rolelist/data.d.ts b/packages/system/src/views/rolelist/data.d.ts new file mode 100644 index 0000000..a6c3fb1 --- /dev/null +++ b/packages/system/src/views/rolelist/data.d.ts @@ -0,0 +1,13 @@ + +export interface TableListItem { + id: number; + name: string; + description: string; + resources: string; + resourcesLevel: string; +} + +export interface TableDataType { + loading: boolean; + list: TableListItem[]; +} \ No newline at end of file diff --git a/packages/system/src/views/rolelist/index.vue b/packages/system/src/views/rolelist/index.vue new file mode 100644 index 0000000..97c3105 --- /dev/null +++ b/packages/system/src/views/rolelist/index.vue @@ -0,0 +1,180 @@ + + + + diff --git a/packages/system/src/views/rolelist/locales/en-US.ts b/packages/system/src/views/rolelist/locales/en-US.ts new file mode 100644 index 0000000..85e5d37 --- /dev/null +++ b/packages/system/src/views/rolelist/locales/en-US.ts @@ -0,0 +1,25 @@ +export default { + 'views.system.rolelist.button.add': 'Add', + 'views.system.rolelist.table.column.index': 'Order', + 'views.system.rolelist.table.column.name': 'Name', + 'views.system.rolelist.table.column.description': 'Remark', + 'views.system.rolelist.table.column.action': 'Action', + 'views.system.rolelist.table.column.action.buttion.edit': 'Edit', + 'views.system.rolelist.table.column.action.buttion.del': 'Delete', + 'views.system.rolelist.table.column.action.buttion.del.popconfirm': 'Are you sure to delete?', + 'views.system.rolelist.table.column.action.buttion.del.success': 'successfully deleted!', + + 'views.system.rolelist.components.formdialog.add.title': 'New role', + 'views.system.rolelist.components.formdialog.edit.title': 'Modify role', + 'views.system.rolelist.components.formdialog.name': 'Role Name', + 'views.system.rolelist.components.formdialog.name.placeholder': 'Please enter the role name', + 'views.system.rolelist.components.formdialog.name.max': 'Up to 10 characters', + 'views.system.rolelist.components.formdialog.description': 'Role Remark', + 'views.system.rolelist.components.formdialog.description.placeholder': 'Please enter role remarks', + 'views.system.rolelist.components.formdialog.resources': 'Menu permissions', + 'views.system.rolelist.components.formdialog.resources.placeholder': 'please choose', + 'views.system.rolelist.components.formdialog.btn.save': 'Save', + 'views.system.rolelist.components.formdialog.btn.cancel': 'Cancel', + 'views.system.rolelist.components.formdialog.addsuccess': 'added successfully!', + 'views.system.rolelist.components.formdialog.editsuccess': 'Successfully modified!', +}; diff --git a/packages/system/src/views/rolelist/locales/zh-CN.ts b/packages/system/src/views/rolelist/locales/zh-CN.ts new file mode 100644 index 0000000..654949b --- /dev/null +++ b/packages/system/src/views/rolelist/locales/zh-CN.ts @@ -0,0 +1,27 @@ +export default { + 'views.system.rolelist.button.add': '新增', + 'views.system.rolelist.table.column.index': '序号', + 'views.system.rolelist.table.column.name': '名称', + 'views.system.rolelist.table.column.description': '备注', + 'views.system.rolelist.table.column.action': '操作', + 'views.system.rolelist.table.column.action.buttion.edit': '修改', + 'views.system.rolelist.table.column.action.buttion.del': '删除', + 'views.system.rolelist.table.column.action.buttion.del.popconfirm': '是否确认删除?', + 'views.system.rolelist.table.column.action.buttion.del.success': '删除成功!', + + 'views.system.rolelist.components.formdialog.add.title': '新增角色', + 'views.system.rolelist.components.formdialog.edit.title': '修改角色', + 'views.system.rolelist.components.formdialog.name': '角色名称', + 'views.system.rolelist.components.formdialog.name.placeholder': '请输入角色名称', + 'views.system.rolelist.components.formdialog.name.max': '最长 10 个字', + 'views.system.rolelist.components.formdialog.description': '角色备注', + 'views.system.rolelist.components.formdialog.description.placeholder': '请输入角色备注', + 'views.system.rolelist.components.formdialog.resources': '菜单权限', + 'views.system.rolelist.components.formdialog.resources.placeholder': '请选择', + 'views.system.rolelist.components.formdialog.btn.save': '保存', + 'views.system.rolelist.components.formdialog.btn.cancel': '取消', + 'views.system.rolelist.components.formdialog.addsuccess': '新增成功!', + 'views.system.rolelist.components.formdialog.editsuccess': '修改成功!', + + +}; diff --git a/packages/system/src/views/rolelist/locales/zh-TW.ts b/packages/system/src/views/rolelist/locales/zh-TW.ts new file mode 100644 index 0000000..62cbe64 --- /dev/null +++ b/packages/system/src/views/rolelist/locales/zh-TW.ts @@ -0,0 +1,25 @@ +export default { + 'views.system.rolelist.button.add': '新增', + 'views.system.rolelist.table.column.index': '序號', + 'views.system.rolelist.table.column.name': '名稱', + 'views.system.rolelist.table.column.description': '備註', + 'views.system.rolelist.table.column.action': '操作', + 'views.system.rolelist.table.column.action.buttion.edit': '修改', + 'views.system.rolelist.table.column.action.buttion.del': '刪除', + 'views.system.rolelist.table.column.action.buttion.del.popconfirm': '是否確認刪除?', + 'views.system.rolelist.table.column.action.buttion.del.success': '刪除成功!', + + 'views.system.rolelist.components.formdialog.add.title': '新增角色', + 'views.system.rolelist.components.formdialog.edit.title': '修改角色', + 'views.system.rolelist.components.formdialog.name': '角色名稱', + 'views.system.rolelist.components.formdialog.name.placeholder': '請輸入角色名稱', + 'views.system.rolelist.components.formdialog.name.max': '最長 10 個字', + 'views.system.rolelist.components.formdialog.description': '角色備註', + 'views.system.rolelist.components.formdialog.description.placeholder': '請輸入角色備註', + 'views.system.rolelist.components.formdialog.resources': '菜單權限', + 'views.system.rolelist.components.formdialog.resources.placeholder': '請選擇', + 'views.system.rolelist.components.formdialog.btn.save': '保存', + 'views.system.rolelist.components.formdialog.btn.cancel': '取消', + 'views.system.rolelist.components.formdialog.addsuccess': '新增成功!', + 'views.system.rolelist.components.formdialog.editsuccess': '修改成功!', +}; diff --git a/packages/system/src/views/rolelist/service.ts b/packages/system/src/views/rolelist/service.ts new file mode 100644 index 0000000..1e4ec9e --- /dev/null +++ b/packages/system/src/views/rolelist/service.ts @@ -0,0 +1,58 @@ +import request from '@/utils/request'; +import { DataItem } from "./components/FormDialog/data.d"; + +/** + * 角色 - 列表 - 有分页 + * @param params 请求参数 + * @returns + * @author LiQingSong + */ +export async function queryList(): Promise { + return request({ + url: '/roles', + method: 'get', + }); +} + +/** + * 角色 - 删除 + * @param id ID + * @returns + * @author LiQingSong + */ +export async function removeData(id: number): Promise { + return request({ + url: `/roles/${id}`, + method: 'delete', + }); +} + + + + +/** + * 角色 - 新增 + * @param {Object} data 请求参数 + * @author LiQingSong + */ + export async function roleAdd(data: DataItem): Promise { + return request({ + url: '/roles', + method: 'post', + data + }); +} + +/** + * 角色 - 编辑 + * @param {Number} id ID + * @param {Object} data 请求参数 + * @author LiQingSong + */ +export async function roleEdit(id: number, data: DataItem): Promise { + return request({ + url: `/roles/${id}`, + method: 'put', + data + }); +} diff --git a/packages/system/tests/unit/example.spec.ts b/packages/system/tests/unit/example.spec.ts new file mode 100644 index 0000000..4b21ca7 --- /dev/null +++ b/packages/system/tests/unit/example.spec.ts @@ -0,0 +1,12 @@ +import { shallowMount } from '@vue/test-utils' +import HelloWorld from '@/components/HelloWorld.vue' + +describe('HelloWorld.vue', () => { + it('renders props.msg when passed', () => { + const msg = 'new message' + const wrapper = shallowMount(HelloWorld, { + props: { msg } + }) + expect(wrapper.text()).toMatch(msg) + }) +}) diff --git a/packages/system/tsconfig.json b/packages/system/tsconfig.json new file mode 100644 index 0000000..e2fadb7 --- /dev/null +++ b/packages/system/tsconfig.json @@ -0,0 +1,43 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "noImplicitAny": false, + "baseUrl": ".", + "types": [ + "webpack-env", + "jest", + "element-plus/global" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/system/vue.config.js b/packages/system/vue.config.js new file mode 100644 index 0000000..ff49702 --- /dev/null +++ b/packages/system/vue.config.js @@ -0,0 +1,129 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ + +const { stringified } = require('../../scripts/server/env'); +const { NODE_ENV, VUE_APP_PORT, VUE_APP_MOCK } = process.env; + +const port = process.env.MICRO_SYSTEM_PORT || VUE_APP_PORT || 8076; +const packageName = process.env.MICRO_SYSTEM_ROOT_DIR || 'system'; + +let publicPath = `//${process.env.MICRO_SYSTEM_HOST}:${port}`; +let vuePublicPath = '/' +if(process.env.NODE_ENV === 'production') { + vuePublicPath = publicPath = `/${process.env.MICRO_BUILD_CHILD_NAME}/${packageName}/`; +} + +const bodyParser = require('body-parser') +const mockServer = require('./src/utils/mock/server'); + +module.exports = { + publicPath: vuePublicPath, + outputDir: 'dist', + productionSourceMap: false, + devServer: { + port, + // 配置反向代理 + /* + proxy: { + '/api': { + target: '', + ws: true, + changeOrigin: true + }, + '/foo': { + target: '' + } + }, + */ + before: function(app, server) { + if(NODE_ENV === 'development' && VUE_APP_MOCK === 'true') { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + // create application/json parser + app.use(bodyParser.json()); + // create application/x-www-form-urlencoded parser + app.use(bodyParser.urlencoded({ extended: false})); + mockServer(app); + } + }, + // 关闭主机检查,使微应用可以被 fetch,否则会提示生命周期未注册 + disableHostCheck: true, + // 配置跨域请求头,解决开发环境的跨域问题 + headers: { + 'Access-Control-Allow-Origin': '*' + } + }, + // 修改webpack的配置 + configureWebpack: { + // 不需要打包的插件 + externals: { + // 'vue': 'Vue', + // 'vue-router': 'VueRouter', + // 'element-ui': 'ELEMENT' + }, + output: { + // 微应用的包名,这里与主应用中注册的微应用名称一致 + library: `${packageName}-[name]`, + // 将你的 library 打包成 umd 库格式,暴露为所有的模块定义下都可运行的方式 + libraryTarget: 'umd', + // 按需加载相关,设置为 webpackJsonp_VueMicroApp 即可 + jsonpFunction: `webpackJsonp_${packageName}`, + }, + }, + chainWebpack(config) { + + // 内置的 svg Rule 添加 exclude + config.module + .rule('svg') + .exclude.add(/iconsvg/) + .end(); + + // 添加 svg-sprite-loader Rule + config.module + .rule('svg-sprite-loader') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader'); + + // 添加 svgo Rule + config.module + .rule('svgo') + .test(/.svg$/) + .include.add(/iconsvg/) + .end() + .use('svgo-loader') + .loader('svgo-loader') + .options({ + // externalConfig 配置特殊不是相对路径,起始路径是根目录 + externalConfig: './src/assets/iconsvg/svgo.yml', + }); + + + // 针对图片修改publicPath + config.module + .rule('images') + .use('url-loader') + .loader('url-loader') + .options({ + limit: 4096, // 小于4kb将会被打包成 base64 + fallback: { + loader: 'file-loader', + options: { + publicPath + }, + }, + }); + + // 添加自定义环境变量 + config.plugin('define') + .tap(args => { + args[0]['process.env'] = { + ...args[0]['process.env'], + ...stringified + } + return args + }) + + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..729dbb7 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,18750 @@ +lockfileVersion: 5.3 + +importers: + + .: + specifiers: + '@types/fs-extra': ^9.0.13 + '@types/gulp': ^4.0.9 + chalk: 4.1.2 + dotenv: ^11.0.0 + dotenv-expand: ^5.1.0 + fs-extra: ^10.0.0 + gulp: ^4.0.2 + qiankun: ^2.6.3 + rimraf: ^3.0.2 + sucrase: ^3.20.3 + typescript: ^4.5.4 + dependencies: + qiankun: registry.npmmirror.com/qiankun/2.6.3 + devDependencies: + '@types/fs-extra': registry.npmmirror.com/@types/fs-extra/9.0.13 + '@types/gulp': registry.npmmirror.com/@types/gulp/4.0.9 + chalk: registry.npmmirror.com/chalk/4.1.2 + dotenv: registry.npmmirror.com/dotenv/11.0.0 + dotenv-expand: registry.nlark.com/dotenv-expand/5.1.0 + fs-extra: registry.nlark.com/fs-extra/10.0.0 + gulp: registry.npmmirror.com/gulp/4.0.2 + rimraf: registry.npmmirror.com/rimraf/3.0.2 + sucrase: registry.npmmirror.com/sucrase/3.20.3 + typescript: registry.npmmirror.com/typescript/4.5.4 + + main: + specifiers: + '@ckeditor/ckeditor5-build-decoupled-document': ^23.1.0 + '@ckeditor/ckeditor5-vue': ^2.0.1 + '@toast-ui/editor': ^2.5.3 + '@types/echarts': ^4.9.12 + '@types/jest': ^24.9.1 + '@types/lodash.debounce': ^4.0.6 + '@typescript-eslint/eslint-plugin': ^4.33.0 + '@typescript-eslint/parser': ^4.33.0 + '@vue/cli-plugin-babel': ~4.5.15 + '@vue/cli-plugin-eslint': ~4.5.15 + '@vue/cli-plugin-router': ~4.5.15 + '@vue/cli-plugin-typescript': ~4.5.15 + '@vue/cli-plugin-unit-jest': ~4.5.15 + '@vue/cli-plugin-vuex': ~4.5.15 + '@vue/cli-service': ~4.5.15 + '@vue/compiler-sfc': ^3.2.23 + '@vue/eslint-config-typescript': ^7.0.0 + '@vue/test-utils': ^2.0.0-rc.17 + axios: ^0.21.4 + body-parser: ^1.19.0 + chokidar: ^3.5.2 + core-js: ^3.19.1 + echarts: ^4.9.0 + element-plus: ^1.2.0-beta.4 + eslint: ^6.8.0 + eslint-plugin-vue: ^7.20.0 + lint-staged: ^9.5.0 + localforage: ^1.10.0 + lodash.debounce: ^4.0.8 + mockjs: ^1.1.0 + node-dir: ^0.1.17 + node-sass: ^4.14.1 + normalize.css: ^8.0.1 + nprogress: ^0.2.0 + path-to-regexp: ^6.2.0 + sass: ^1.43.5 + sass-loader: ^8.0.2 + svg-sprite-loader: ^5.2.1 + svgo: ^1.3.2 + svgo-loader: ^2.2.2 + typescript: ~4.1.6 + vue: ^3.2.23 + vue-i18n: ^9.1.9 + vue-jest: ^5.0.0-alpha.10 + vue-router: ^4.0.12 + vuex: ^4.0.2 + dependencies: + '@ckeditor/ckeditor5-build-decoupled-document': registry.npmmirror.com/@ckeditor/ckeditor5-build-decoupled-document/23.1.0 + '@ckeditor/ckeditor5-vue': registry.npmmirror.com/@ckeditor/ckeditor5-vue/2.0.1 + '@toast-ui/editor': registry.npmmirror.com/@toast-ui/editor/2.5.4 + axios: registry.npmmirror.com/axios/0.21.4 + core-js: registry.npmmirror.com/core-js/3.20.2 + echarts: registry.npmmirror.com/echarts/4.9.0 + element-plus: registry.npmmirror.com/element-plus/1.2.0-beta.6_vue@3.2.26 + localforage: registry.npmmirror.com/localforage/1.10.0 + lodash.debounce: registry.nlark.com/lodash.debounce/4.0.8 + normalize.css: registry.npmmirror.com/normalize.css/8.0.1 + nprogress: registry.npmmirror.com/nprogress/0.2.0 + path-to-regexp: registry.npmmirror.com/path-to-regexp/6.2.0 + vue: registry.npmmirror.com/vue/3.2.26 + vue-i18n: registry.npmmirror.com/vue-i18n/9.1.9_vue@3.2.26 + vue-router: registry.npmmirror.com/vue-router/4.0.12_vue@3.2.26 + vuex: registry.npmmirror.com/vuex/4.0.2_vue@3.2.26 + devDependencies: + '@types/echarts': registry.npmmirror.com/@types/echarts/4.9.12 + '@types/jest': registry.npmmirror.com/@types/jest/24.9.1 + '@types/lodash.debounce': registry.npmmirror.com/@types/lodash.debounce/4.0.6 + '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0_e66a0234d36070dcc49614ed7c477ee7 + '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6 + '@vue/cli-plugin-babel': registry.npmmirror.com/@vue/cli-plugin-babel/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-eslint': registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.15_159f9ca94908a7070131e2c321d72521 + '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-plugin-typescript': registry.npmmirror.com/@vue/cli-plugin-typescript/4.5.15_4e4e41b2ba87fa709088a05d00f8eb89 + '@vue/cli-plugin-unit-jest': registry.npmmirror.com/@vue/cli-plugin-unit-jest/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/eslint-config-typescript': registry.npmmirror.com/@vue/eslint-config-typescript/7.0.0_a4026fa076dd8f44e94f0e8ffbcc3f1d + '@vue/test-utils': registry.npmmirror.com/@vue/test-utils/2.0.0-rc.18_vue@3.2.26 + body-parser: registry.npmmirror.com/body-parser/1.19.1 + chokidar: registry.npmmirror.com/chokidar/3.5.2 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/7.20.0_eslint@6.8.0 + lint-staged: registry.npmmirror.com/lint-staged/9.5.0 + mockjs: registry.npmmirror.com/mockjs/1.1.0 + node-dir: registry.nlark.com/node-dir/0.1.17 + node-sass: registry.npmmirror.com/node-sass/4.14.1 + sass: registry.npmmirror.com/sass/1.47.0 + sass-loader: registry.npmmirror.com/sass-loader/8.0.2_node-sass@4.14.1+sass@1.47.0 + svg-sprite-loader: registry.npmmirror.com/svg-sprite-loader/5.2.1 + svgo: registry.npmmirror.com/svgo/1.3.2 + svgo-loader: registry.npmmirror.com/svgo-loader/2.2.2_svgo@1.3.2 + typescript: registry.npmmirror.com/typescript/4.1.6 + vue-jest: registry.npmmirror.com/vue-jest/5.0.0-alpha.10_typescript@4.1.6+vue@3.2.26 + + main-antd: + specifiers: + '@ckeditor/ckeditor5-build-decoupled-document': ^23.1.0 + '@ckeditor/ckeditor5-vue': ^2.0.1 + '@toast-ui/editor': ^2.5.4 + '@types/echarts': ^4.9.12 + '@types/jest': ^24.9.1 + '@types/lodash.debounce': ^4.0.6 + '@typescript-eslint/eslint-plugin': ^4.33.0 + '@typescript-eslint/parser': ^4.33.0 + '@vue/cli-plugin-babel': ~4.5.15 + '@vue/cli-plugin-eslint': ~4.5.15 + '@vue/cli-plugin-router': ~4.5.15 + '@vue/cli-plugin-typescript': ~4.5.15 + '@vue/cli-plugin-unit-jest': ~4.5.15 + '@vue/cli-plugin-vuex': ~4.5.15 + '@vue/cli-service': ~4.5.15 + '@vue/compiler-sfc': ^3.2.24 + '@vue/eslint-config-typescript': ^7.0.0 + '@vue/test-utils': ^2.0.0-rc.17 + ant-design-vue: ^2.2.8 + axios: ^0.21.4 + body-parser: ^1.19.0 + chokidar: ^3.5.2 + core-js: ^3.19.3 + echarts: ^4.9.0 + eslint: ^6.8.0 + eslint-plugin-vue: ^7.20.0 + less: ^3.13.1 + less-loader: ^5.0.0 + lint-staged: ^9.5.0 + localforage: ^1.10.0 + lodash.debounce: ^4.0.8 + mockjs: ^1.1.0 + node-dir: ^0.1.17 + nprogress: ^0.2.0 + path-to-regexp: ^6.2.0 + svg-sprite-loader: ^5.2.1 + svgo: ^1.3.2 + svgo-loader: ^2.2.2 + typescript: ~4.1.6 + vue: ^3.2.24 + vue-i18n: ^9.1.9 + vue-jest: ^5.0.0-alpha.10 + vue-router: ^4.0.12 + vuex: ^4.0.2 + dependencies: + '@ckeditor/ckeditor5-build-decoupled-document': registry.npmmirror.com/@ckeditor/ckeditor5-build-decoupled-document/23.1.0 + '@ckeditor/ckeditor5-vue': registry.npmmirror.com/@ckeditor/ckeditor5-vue/2.0.1 + '@toast-ui/editor': registry.npmmirror.com/@toast-ui/editor/2.5.4 + ant-design-vue: registry.npmmirror.com/ant-design-vue/2.2.8_ae87cbba5ec93a01f3fe1197df446ca3 + axios: registry.npmmirror.com/axios/0.21.4 + core-js: registry.npmmirror.com/core-js/3.20.2 + echarts: registry.npmmirror.com/echarts/4.9.0 + localforage: registry.npmmirror.com/localforage/1.10.0 + lodash.debounce: registry.npmmirror.com/lodash.debounce/4.0.8 + nprogress: registry.npmmirror.com/nprogress/0.2.0 + path-to-regexp: registry.npmmirror.com/path-to-regexp/6.2.0 + vue: registry.npmmirror.com/vue/3.2.26 + vue-i18n: registry.npmmirror.com/vue-i18n/9.1.9_vue@3.2.26 + vue-router: registry.npmmirror.com/vue-router/4.0.12_vue@3.2.26 + vuex: registry.npmmirror.com/vuex/4.0.2_vue@3.2.26 + devDependencies: + '@types/echarts': registry.npmmirror.com/@types/echarts/4.9.12 + '@types/jest': registry.npmmirror.com/@types/jest/24.9.1 + '@types/lodash.debounce': registry.npmmirror.com/@types/lodash.debounce/4.0.6 + '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0_e66a0234d36070dcc49614ed7c477ee7 + '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6 + '@vue/cli-plugin-babel': registry.npmmirror.com/@vue/cli-plugin-babel/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-eslint': registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.15_159f9ca94908a7070131e2c321d72521 + '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-plugin-typescript': registry.npmmirror.com/@vue/cli-plugin-typescript/4.5.15_4e4e41b2ba87fa709088a05d00f8eb89 + '@vue/cli-plugin-unit-jest': registry.npmmirror.com/@vue/cli-plugin-unit-jest/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_cf47954123b56e3367a44047cc25012d + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/eslint-config-typescript': registry.npmmirror.com/@vue/eslint-config-typescript/7.0.0_a4026fa076dd8f44e94f0e8ffbcc3f1d + '@vue/test-utils': registry.npmmirror.com/@vue/test-utils/2.0.0-rc.18_vue@3.2.26 + body-parser: registry.npmmirror.com/body-parser/1.19.1 + chokidar: registry.npmmirror.com/chokidar/3.5.2 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/7.20.0_eslint@6.8.0 + less: registry.npmmirror.com/less/3.13.1 + less-loader: registry.npmmirror.com/less-loader/5.0.0_less@3.13.1 + lint-staged: registry.npmmirror.com/lint-staged/9.5.0 + mockjs: registry.npmmirror.com/mockjs/1.1.0 + node-dir: registry.npmmirror.com/node-dir/0.1.17 + svg-sprite-loader: registry.npmmirror.com/svg-sprite-loader/5.2.1 + svgo: registry.npmmirror.com/svgo/1.3.2 + svgo-loader: registry.npmmirror.com/svgo-loader/2.2.2_svgo@1.3.2 + typescript: registry.npmmirror.com/typescript/4.1.6 + vue-jest: registry.npmmirror.com/vue-jest/5.0.0-alpha.10_typescript@4.1.6+vue@3.2.26 + + packages/article: + specifiers: + '@ckeditor/ckeditor5-build-decoupled-document': ^23.1.0 + '@ckeditor/ckeditor5-vue': ^2.0.1 + '@toast-ui/editor': ^2.5.3 + '@types/echarts': ^4.9.12 + '@types/jest': ^24.9.1 + '@types/lodash.debounce': ^4.0.6 + '@typescript-eslint/eslint-plugin': ^4.33.0 + '@typescript-eslint/parser': ^4.33.0 + '@vue/cli-plugin-babel': ~4.5.15 + '@vue/cli-plugin-eslint': ~4.5.15 + '@vue/cli-plugin-router': ~4.5.15 + '@vue/cli-plugin-typescript': ~4.5.15 + '@vue/cli-plugin-unit-jest': ~4.5.15 + '@vue/cli-plugin-vuex': ~4.5.15 + '@vue/cli-service': ~4.5.15 + '@vue/compiler-sfc': ^3.2.23 + '@vue/eslint-config-typescript': ^7.0.0 + '@vue/test-utils': ^2.0.0-rc.17 + axios: ^0.21.4 + body-parser: ^1.19.0 + chokidar: ^3.5.2 + core-js: ^3.19.1 + echarts: ^4.9.0 + element-plus: ^1.2.0-beta.4 + eslint: ^6.8.0 + eslint-plugin-vue: ^7.20.0 + lint-staged: ^9.5.0 + localforage: ^1.10.0 + lodash.debounce: ^4.0.8 + mockjs: ^1.1.0 + node-dir: ^0.1.17 + node-sass: ^4.14.1 + normalize.css: ^8.0.1 + nprogress: ^0.2.0 + path-to-regexp: ^6.2.0 + sass: ^1.43.5 + sass-loader: ^8.0.2 + svg-sprite-loader: ^5.2.1 + svgo: ^1.3.2 + svgo-loader: ^2.2.2 + typescript: ~4.1.6 + vue: ^3.2.23 + vue-i18n: ^9.1.9 + vue-jest: ^5.0.0-alpha.10 + vue-router: ^4.0.12 + vuex: ^4.0.2 + dependencies: + '@ckeditor/ckeditor5-build-decoupled-document': registry.npmmirror.com/@ckeditor/ckeditor5-build-decoupled-document/23.1.0 + '@ckeditor/ckeditor5-vue': registry.npmmirror.com/@ckeditor/ckeditor5-vue/2.0.1 + '@toast-ui/editor': registry.npmmirror.com/@toast-ui/editor/2.5.4 + axios: registry.npmmirror.com/axios/0.21.4 + core-js: registry.npmmirror.com/core-js/3.20.2 + echarts: registry.npmmirror.com/echarts/4.9.0 + element-plus: registry.npmmirror.com/element-plus/1.2.0-beta.6_vue@3.2.26 + localforage: registry.npmmirror.com/localforage/1.10.0 + lodash.debounce: registry.nlark.com/lodash.debounce/4.0.8 + normalize.css: registry.npmmirror.com/normalize.css/8.0.1 + nprogress: registry.npmmirror.com/nprogress/0.2.0 + path-to-regexp: registry.npmmirror.com/path-to-regexp/6.2.0 + vue: registry.npmmirror.com/vue/3.2.26 + vue-i18n: registry.npmmirror.com/vue-i18n/9.1.9_vue@3.2.26 + vue-router: registry.npmmirror.com/vue-router/4.0.12_vue@3.2.26 + vuex: registry.npmmirror.com/vuex/4.0.2_vue@3.2.26 + devDependencies: + '@types/echarts': registry.npmmirror.com/@types/echarts/4.9.12 + '@types/jest': registry.npmmirror.com/@types/jest/24.9.1 + '@types/lodash.debounce': registry.npmmirror.com/@types/lodash.debounce/4.0.6 + '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0_e66a0234d36070dcc49614ed7c477ee7 + '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6 + '@vue/cli-plugin-babel': registry.npmmirror.com/@vue/cli-plugin-babel/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-eslint': registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.15_159f9ca94908a7070131e2c321d72521 + '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-plugin-typescript': registry.npmmirror.com/@vue/cli-plugin-typescript/4.5.15_4e4e41b2ba87fa709088a05d00f8eb89 + '@vue/cli-plugin-unit-jest': registry.npmmirror.com/@vue/cli-plugin-unit-jest/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/eslint-config-typescript': registry.npmmirror.com/@vue/eslint-config-typescript/7.0.0_a4026fa076dd8f44e94f0e8ffbcc3f1d + '@vue/test-utils': registry.npmmirror.com/@vue/test-utils/2.0.0-rc.18_vue@3.2.26 + body-parser: registry.npmmirror.com/body-parser/1.19.1 + chokidar: registry.npmmirror.com/chokidar/3.5.2 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/7.20.0_eslint@6.8.0 + lint-staged: registry.npmmirror.com/lint-staged/9.5.0 + mockjs: registry.npmmirror.com/mockjs/1.1.0 + node-dir: registry.nlark.com/node-dir/0.1.17 + node-sass: registry.npmmirror.com/node-sass/4.14.1 + sass: registry.npmmirror.com/sass/1.47.0 + sass-loader: registry.npmmirror.com/sass-loader/8.0.2_node-sass@4.14.1+sass@1.47.0 + svg-sprite-loader: registry.npmmirror.com/svg-sprite-loader/5.2.1 + svgo: registry.npmmirror.com/svgo/1.3.2 + svgo-loader: registry.npmmirror.com/svgo-loader/2.2.2_svgo@1.3.2 + typescript: registry.npmmirror.com/typescript/4.1.6 + vue-jest: registry.npmmirror.com/vue-jest/5.0.0-alpha.10_typescript@4.1.6+vue@3.2.26 + + packages/links: + specifiers: + '@ckeditor/ckeditor5-build-decoupled-document': ^23.1.0 + '@ckeditor/ckeditor5-vue': ^2.0.1 + '@toast-ui/editor': ^2.5.4 + '@types/echarts': ^4.9.12 + '@types/jest': ^24.9.1 + '@types/lodash.debounce': ^4.0.6 + '@typescript-eslint/eslint-plugin': ^4.33.0 + '@typescript-eslint/parser': ^4.33.0 + '@vue/cli-plugin-babel': ~4.5.15 + '@vue/cli-plugin-eslint': ~4.5.15 + '@vue/cli-plugin-router': ~4.5.15 + '@vue/cli-plugin-typescript': ~4.5.15 + '@vue/cli-plugin-unit-jest': ~4.5.15 + '@vue/cli-plugin-vuex': ~4.5.15 + '@vue/cli-service': ~4.5.15 + '@vue/compiler-sfc': ^3.2.24 + '@vue/eslint-config-typescript': ^7.0.0 + '@vue/test-utils': ^2.0.0-rc.17 + ant-design-vue: ^2.2.8 + axios: ^0.21.4 + body-parser: ^1.19.0 + chokidar: ^3.5.2 + core-js: ^3.19.3 + echarts: ^4.9.0 + eslint: ^6.8.0 + eslint-plugin-vue: ^7.20.0 + less: ^3.13.1 + less-loader: ^5.0.0 + lint-staged: ^9.5.0 + localforage: ^1.10.0 + lodash.debounce: ^4.0.8 + mockjs: ^1.1.0 + node-dir: ^0.1.17 + nprogress: ^0.2.0 + path-to-regexp: ^6.2.0 + svg-sprite-loader: ^5.2.1 + svgo: ^1.3.2 + svgo-loader: ^2.2.2 + typescript: ~4.1.6 + vue: ^3.2.24 + vue-i18n: ^9.1.9 + vue-jest: ^5.0.0-alpha.10 + vue-router: ^4.0.12 + vuex: ^4.0.2 + dependencies: + '@ckeditor/ckeditor5-build-decoupled-document': registry.npmmirror.com/@ckeditor/ckeditor5-build-decoupled-document/23.1.0 + '@ckeditor/ckeditor5-vue': registry.npmmirror.com/@ckeditor/ckeditor5-vue/2.0.1 + '@toast-ui/editor': registry.npmmirror.com/@toast-ui/editor/2.5.4 + ant-design-vue: registry.npmmirror.com/ant-design-vue/2.2.8_ae87cbba5ec93a01f3fe1197df446ca3 + axios: registry.npmmirror.com/axios/0.21.4 + core-js: registry.npmmirror.com/core-js/3.20.2 + echarts: registry.npmmirror.com/echarts/4.9.0 + localforage: registry.npmmirror.com/localforage/1.10.0 + lodash.debounce: registry.npmmirror.com/lodash.debounce/4.0.8 + nprogress: registry.npmmirror.com/nprogress/0.2.0 + path-to-regexp: registry.npmmirror.com/path-to-regexp/6.2.0 + vue: registry.npmmirror.com/vue/3.2.26 + vue-i18n: registry.npmmirror.com/vue-i18n/9.1.9_vue@3.2.26 + vue-router: registry.npmmirror.com/vue-router/4.0.12_vue@3.2.26 + vuex: registry.npmmirror.com/vuex/4.0.2_vue@3.2.26 + devDependencies: + '@types/echarts': registry.npmmirror.com/@types/echarts/4.9.12 + '@types/jest': registry.npmmirror.com/@types/jest/24.9.1 + '@types/lodash.debounce': registry.npmmirror.com/@types/lodash.debounce/4.0.6 + '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0_e66a0234d36070dcc49614ed7c477ee7 + '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6 + '@vue/cli-plugin-babel': registry.npmmirror.com/@vue/cli-plugin-babel/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-eslint': registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.15_159f9ca94908a7070131e2c321d72521 + '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-plugin-typescript': registry.npmmirror.com/@vue/cli-plugin-typescript/4.5.15_4e4e41b2ba87fa709088a05d00f8eb89 + '@vue/cli-plugin-unit-jest': registry.npmmirror.com/@vue/cli-plugin-unit-jest/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_cf47954123b56e3367a44047cc25012d + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/eslint-config-typescript': registry.npmmirror.com/@vue/eslint-config-typescript/7.0.0_a4026fa076dd8f44e94f0e8ffbcc3f1d + '@vue/test-utils': registry.npmmirror.com/@vue/test-utils/2.0.0-rc.18_vue@3.2.26 + body-parser: registry.npmmirror.com/body-parser/1.19.1 + chokidar: registry.npmmirror.com/chokidar/3.5.2 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/7.20.0_eslint@6.8.0 + less: registry.npmmirror.com/less/3.13.1 + less-loader: registry.npmmirror.com/less-loader/5.0.0_less@3.13.1 + lint-staged: registry.npmmirror.com/lint-staged/9.5.0 + mockjs: registry.npmmirror.com/mockjs/1.1.0 + node-dir: registry.npmmirror.com/node-dir/0.1.17 + svg-sprite-loader: registry.npmmirror.com/svg-sprite-loader/5.2.1 + svgo: registry.npmmirror.com/svgo/1.3.2 + svgo-loader: registry.npmmirror.com/svgo-loader/2.2.2_svgo@1.3.2 + typescript: registry.npmmirror.com/typescript/4.1.6 + vue-jest: registry.npmmirror.com/vue-jest/5.0.0-alpha.10_typescript@4.1.6+vue@3.2.26 + + packages/system: + specifiers: + '@ckeditor/ckeditor5-build-decoupled-document': ^23.1.0 + '@ckeditor/ckeditor5-vue': ^2.0.1 + '@toast-ui/editor': ^2.5.3 + '@types/echarts': ^4.9.12 + '@types/jest': ^24.9.1 + '@types/lodash.debounce': ^4.0.6 + '@typescript-eslint/eslint-plugin': ^4.33.0 + '@typescript-eslint/parser': ^4.33.0 + '@vue/cli-plugin-babel': ~4.5.15 + '@vue/cli-plugin-eslint': ~4.5.15 + '@vue/cli-plugin-router': ~4.5.15 + '@vue/cli-plugin-typescript': ~4.5.15 + '@vue/cli-plugin-unit-jest': ~4.5.15 + '@vue/cli-plugin-vuex': ~4.5.15 + '@vue/cli-service': ~4.5.15 + '@vue/compiler-sfc': ^3.2.23 + '@vue/eslint-config-typescript': ^7.0.0 + '@vue/test-utils': ^2.0.0-rc.17 + axios: ^0.21.4 + body-parser: ^1.19.0 + chokidar: ^3.5.2 + core-js: ^3.19.1 + echarts: ^4.9.0 + element-plus: ^1.2.0-beta.4 + eslint: ^6.8.0 + eslint-plugin-vue: ^7.20.0 + lint-staged: ^9.5.0 + localforage: ^1.10.0 + lodash.debounce: ^4.0.8 + mockjs: ^1.1.0 + node-dir: ^0.1.17 + node-sass: ^4.14.1 + normalize.css: ^8.0.1 + nprogress: ^0.2.0 + path-to-regexp: ^6.2.0 + sass: ^1.43.5 + sass-loader: ^8.0.2 + svg-sprite-loader: ^5.2.1 + svgo: ^1.3.2 + svgo-loader: ^2.2.2 + typescript: ~4.1.6 + vue: ^3.2.23 + vue-i18n: ^9.1.9 + vue-jest: ^5.0.0-alpha.10 + vue-router: ^4.0.12 + vuex: ^4.0.2 + dependencies: + '@ckeditor/ckeditor5-build-decoupled-document': registry.npmmirror.com/@ckeditor/ckeditor5-build-decoupled-document/23.1.0 + '@ckeditor/ckeditor5-vue': registry.npmmirror.com/@ckeditor/ckeditor5-vue/2.0.1 + '@toast-ui/editor': registry.npmmirror.com/@toast-ui/editor/2.5.4 + axios: registry.npmmirror.com/axios/0.21.4 + core-js: registry.npmmirror.com/core-js/3.20.2 + echarts: registry.npmmirror.com/echarts/4.9.0 + element-plus: registry.npmmirror.com/element-plus/1.2.0-beta.6_vue@3.2.26 + localforage: registry.npmmirror.com/localforage/1.10.0 + lodash.debounce: registry.npmmirror.com/lodash.debounce/4.0.8 + normalize.css: registry.npmmirror.com/normalize.css/8.0.1 + nprogress: registry.npmmirror.com/nprogress/0.2.0 + path-to-regexp: registry.npmmirror.com/path-to-regexp/6.2.0 + vue: registry.npmmirror.com/vue/3.2.26 + vue-i18n: registry.npmmirror.com/vue-i18n/9.1.9_vue@3.2.26 + vue-router: registry.npmmirror.com/vue-router/4.0.12_vue@3.2.26 + vuex: registry.npmmirror.com/vuex/4.0.2_vue@3.2.26 + devDependencies: + '@types/echarts': registry.npmmirror.com/@types/echarts/4.9.12 + '@types/jest': registry.npmmirror.com/@types/jest/24.9.1 + '@types/lodash.debounce': registry.npmmirror.com/@types/lodash.debounce/4.0.6 + '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0_e66a0234d36070dcc49614ed7c477ee7 + '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6 + '@vue/cli-plugin-babel': registry.npmmirror.com/@vue/cli-plugin-babel/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-eslint': registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.15_159f9ca94908a7070131e2c321d72521 + '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-plugin-typescript': registry.npmmirror.com/@vue/cli-plugin-typescript/4.5.15_4e4e41b2ba87fa709088a05d00f8eb89 + '@vue/cli-plugin-unit-jest': registry.npmmirror.com/@vue/cli-plugin-unit-jest/4.5.15_f31494664f097394e35421ca86ea1d59 + '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/eslint-config-typescript': registry.npmmirror.com/@vue/eslint-config-typescript/7.0.0_a4026fa076dd8f44e94f0e8ffbcc3f1d + '@vue/test-utils': registry.npmmirror.com/@vue/test-utils/2.0.0-rc.18_vue@3.2.26 + body-parser: registry.npmmirror.com/body-parser/1.19.1 + chokidar: registry.npmmirror.com/chokidar/3.5.2 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/7.20.0_eslint@6.8.0 + lint-staged: registry.npmmirror.com/lint-staged/9.5.0 + mockjs: registry.npmmirror.com/mockjs/1.1.0 + node-dir: registry.npmmirror.com/node-dir/0.1.17 + node-sass: registry.npmmirror.com/node-sass/4.14.1 + sass: registry.npmmirror.com/sass/1.47.0 + sass-loader: registry.npmmirror.com/sass-loader/8.0.2_node-sass@4.14.1+sass@1.47.0 + svg-sprite-loader: registry.npmmirror.com/svg-sprite-loader/5.2.1 + svgo: registry.npmmirror.com/svgo/1.3.2 + svgo-loader: registry.npmmirror.com/svgo-loader/2.2.2_svgo@1.3.2 + typescript: registry.npmmirror.com/typescript/4.1.6 + vue-jest: registry.npmmirror.com/vue-jest/5.0.0-alpha.10_typescript@4.1.6+vue@3.2.26 + +packages: + + registry.nlark.com/@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz} + name: '@nodelib/fs.scandir' + version: 2.1.5 + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 + run-parallel: registry.npmmirror.com/run-parallel/1.2.0 + dev: true + + registry.nlark.com/@types/strip-json-comments/0.0.30: + resolution: {integrity: sha1-mqMMBNshKpoGSdaub9UKzMQHSKE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/strip-json-comments/download/@types/strip-json-comments-0.0.30.tgz} + name: '@types/strip-json-comments' + version: 0.0.30 + dev: true + + registry.nlark.com/@webassemblyjs/ast/1.9.0: + resolution: {integrity: sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz} + name: '@webassemblyjs/ast' + version: 1.9.0 + dependencies: + '@webassemblyjs/helper-module-context': registry.nlark.com/@webassemblyjs/helper-module-context/1.9.0 + '@webassemblyjs/helper-wasm-bytecode': registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/1.9.0 + '@webassemblyjs/wast-parser': registry.nlark.com/@webassemblyjs/wast-parser/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/floating-point-hex-parser/1.9.0: + resolution: {integrity: sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz} + name: '@webassemblyjs/floating-point-hex-parser' + version: 1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/helper-api-error/1.9.0: + resolution: {integrity: sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz} + name: '@webassemblyjs/helper-api-error' + version: 1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/helper-buffer/1.9.0: + resolution: {integrity: sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz} + name: '@webassemblyjs/helper-buffer' + version: 1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/helper-code-frame/1.9.0: + resolution: {integrity: sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz} + name: '@webassemblyjs/helper-code-frame' + version: 1.9.0 + dependencies: + '@webassemblyjs/wast-printer': registry.nlark.com/@webassemblyjs/wast-printer/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/helper-fsm/1.9.0: + resolution: {integrity: sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz} + name: '@webassemblyjs/helper-fsm' + version: 1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/helper-module-context/1.9.0: + resolution: {integrity: sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz} + name: '@webassemblyjs/helper-module-context' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/1.9.0: + resolution: {integrity: sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz} + name: '@webassemblyjs/helper-wasm-bytecode' + version: 1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/helper-wasm-section/1.9.0: + resolution: {integrity: sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz} + name: '@webassemblyjs/helper-wasm-section' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/helper-buffer': registry.nlark.com/@webassemblyjs/helper-buffer/1.9.0 + '@webassemblyjs/helper-wasm-bytecode': registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/1.9.0 + '@webassemblyjs/wasm-gen': registry.nlark.com/@webassemblyjs/wasm-gen/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/ieee754/1.9.0: + resolution: {integrity: sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz} + name: '@webassemblyjs/ieee754' + version: 1.9.0 + dependencies: + '@xtuc/ieee754': registry.npmmirror.com/@xtuc/ieee754/1.2.0 + dev: true + + registry.nlark.com/@webassemblyjs/leb128/1.9.0: + resolution: {integrity: sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz} + name: '@webassemblyjs/leb128' + version: 1.9.0 + dependencies: + '@xtuc/long': registry.nlark.com/@xtuc/long/4.2.2 + dev: true + + registry.nlark.com/@webassemblyjs/utf8/1.9.0: + resolution: {integrity: sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz} + name: '@webassemblyjs/utf8' + version: 1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/wasm-edit/1.9.0: + resolution: {integrity: sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz} + name: '@webassemblyjs/wasm-edit' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/helper-buffer': registry.nlark.com/@webassemblyjs/helper-buffer/1.9.0 + '@webassemblyjs/helper-wasm-bytecode': registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/1.9.0 + '@webassemblyjs/helper-wasm-section': registry.nlark.com/@webassemblyjs/helper-wasm-section/1.9.0 + '@webassemblyjs/wasm-gen': registry.nlark.com/@webassemblyjs/wasm-gen/1.9.0 + '@webassemblyjs/wasm-opt': registry.nlark.com/@webassemblyjs/wasm-opt/1.9.0 + '@webassemblyjs/wasm-parser': registry.nlark.com/@webassemblyjs/wasm-parser/1.9.0 + '@webassemblyjs/wast-printer': registry.nlark.com/@webassemblyjs/wast-printer/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/wasm-gen/1.9.0: + resolution: {integrity: sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz} + name: '@webassemblyjs/wasm-gen' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/helper-wasm-bytecode': registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/1.9.0 + '@webassemblyjs/ieee754': registry.nlark.com/@webassemblyjs/ieee754/1.9.0 + '@webassemblyjs/leb128': registry.nlark.com/@webassemblyjs/leb128/1.9.0 + '@webassemblyjs/utf8': registry.nlark.com/@webassemblyjs/utf8/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/wasm-opt/1.9.0: + resolution: {integrity: sha1-IhEYHlsxMmRDzIES658LkChyGmE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz} + name: '@webassemblyjs/wasm-opt' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/helper-buffer': registry.nlark.com/@webassemblyjs/helper-buffer/1.9.0 + '@webassemblyjs/wasm-gen': registry.nlark.com/@webassemblyjs/wasm-gen/1.9.0 + '@webassemblyjs/wasm-parser': registry.nlark.com/@webassemblyjs/wasm-parser/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/wasm-parser/1.9.0: + resolution: {integrity: sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz} + name: '@webassemblyjs/wasm-parser' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/helper-api-error': registry.nlark.com/@webassemblyjs/helper-api-error/1.9.0 + '@webassemblyjs/helper-wasm-bytecode': registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/1.9.0 + '@webassemblyjs/ieee754': registry.nlark.com/@webassemblyjs/ieee754/1.9.0 + '@webassemblyjs/leb128': registry.nlark.com/@webassemblyjs/leb128/1.9.0 + '@webassemblyjs/utf8': registry.nlark.com/@webassemblyjs/utf8/1.9.0 + dev: true + + registry.nlark.com/@webassemblyjs/wast-parser/1.9.0: + resolution: {integrity: sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz} + name: '@webassemblyjs/wast-parser' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/floating-point-hex-parser': registry.nlark.com/@webassemblyjs/floating-point-hex-parser/1.9.0 + '@webassemblyjs/helper-api-error': registry.nlark.com/@webassemblyjs/helper-api-error/1.9.0 + '@webassemblyjs/helper-code-frame': registry.nlark.com/@webassemblyjs/helper-code-frame/1.9.0 + '@webassemblyjs/helper-fsm': registry.nlark.com/@webassemblyjs/helper-fsm/1.9.0 + '@xtuc/long': registry.nlark.com/@xtuc/long/4.2.2 + dev: true + + registry.nlark.com/@webassemblyjs/wast-printer/1.9.0: + resolution: {integrity: sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz} + name: '@webassemblyjs/wast-printer' + version: 1.9.0 + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/wast-parser': registry.nlark.com/@webassemblyjs/wast-parser/1.9.0 + '@xtuc/long': registry.nlark.com/@xtuc/long/4.2.2 + dev: true + + registry.nlark.com/@xtuc/long/4.2.2: + resolution: {integrity: sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@xtuc/long/download/@xtuc/long-4.2.2.tgz} + name: '@xtuc/long' + version: 4.2.2 + dev: true + + registry.nlark.com/ansi-colors/1.1.0: + resolution: {integrity: sha1-Y3S03V1HGP884npnGjscrQdxMqk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ansi-colors/download/ansi-colors-1.1.0.tgz?cache=0&sync_timestamp=1631509528346&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-colors%2Fdownload%2Fansi-colors-1.1.0.tgz} + name: ansi-colors + version: 1.1.0 + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: registry.nlark.com/ansi-wrap/0.1.0 + dev: true + + registry.nlark.com/ansi-gray/0.1.1: + resolution: {integrity: sha1-KWLPVOyXksSFEKPetSRDaGHvclE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ansi-gray/download/ansi-gray-0.1.1.tgz} + name: ansi-gray + version: 0.1.1 + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: registry.nlark.com/ansi-wrap/0.1.0 + dev: true + + registry.nlark.com/ansi-html-community/0.0.8: + resolution: {integrity: sha1-afvE1sy+OD+XNpNK40w/gpDxv0E=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ansi-html-community/download/ansi-html-community-0.0.8.tgz} + name: ansi-html-community + version: 0.0.8 + engines: {'0': node >= 0.8.0} + hasBin: true + dev: true + + registry.nlark.com/ansi-wrap/0.1.0: + resolution: {integrity: sha1-qCJQ3bABXponyoLoLqYDu/pF768=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ansi-wrap/download/ansi-wrap-0.1.0.tgz} + name: ansi-wrap + version: 0.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/any-promise/1.3.0: + resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/any-promise/download/any-promise-1.3.0.tgz} + name: any-promise + version: 1.3.0 + dev: true + + registry.nlark.com/anymatch/2.0.0: + resolution: {integrity: sha1-vLJLTzeTTZqnrBe0ra+J58du8us=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/anymatch/download/anymatch-2.0.0.tgz} + name: anymatch + version: 2.0.0 + dependencies: + micromatch: registry.nlark.com/micromatch/3.1.10 + normalize-path: registry.nlark.com/normalize-path/2.1.1 + dev: true + + registry.nlark.com/append-buffer/1.0.2: + resolution: {integrity: sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/append-buffer/download/append-buffer-1.0.2.tgz} + name: append-buffer + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + buffer-equal: registry.nlark.com/buffer-equal/1.0.0 + dev: true + + registry.nlark.com/archy/1.0.0: + resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/archy/download/archy-1.0.0.tgz} + name: archy + version: 1.0.0 + dev: true + + registry.nlark.com/arr-diff/4.0.0: + resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/arr-diff/download/arr-diff-4.0.0.tgz} + name: arr-diff + version: 4.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/arr-filter/1.1.2: + resolution: {integrity: sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/arr-filter/download/arr-filter-1.1.2.tgz} + name: arr-filter + version: 1.1.2 + engines: {node: '>=0.10.0'} + dependencies: + make-iterator: registry.nlark.com/make-iterator/1.0.1 + dev: true + + registry.nlark.com/arr-map/2.0.2: + resolution: {integrity: sha1-Onc0X/wc814qkYJWAfnljy4kysQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/arr-map/download/arr-map-2.0.2.tgz} + name: arr-map + version: 2.0.2 + engines: {node: '>=0.10.0'} + dependencies: + make-iterator: registry.nlark.com/make-iterator/1.0.1 + dev: true + + registry.nlark.com/arr-union/3.1.0: + resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/arr-union/download/arr-union-3.1.0.tgz} + name: arr-union + version: 3.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/array-each/1.0.1: + resolution: {integrity: sha1-p5SvDAWrF1KEbudTofIRoFugxE8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/array-each/download/array-each-1.0.1.tgz} + name: array-each + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/array-initial/1.1.0: + resolution: {integrity: sha1-L6dLJnOTccOUe9enrcc74zSz15U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/array-initial/download/array-initial-1.1.0.tgz} + name: array-initial + version: 1.1.0 + engines: {node: '>=0.10.0'} + dependencies: + array-slice: registry.nlark.com/array-slice/1.1.0 + is-number: registry.nlark.com/is-number/4.0.0 + dev: true + + registry.nlark.com/array-last/1.3.0: + resolution: {integrity: sha1-eqdwc/7FZd2rJJP1+IGF9ASp0zY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/array-last/download/array-last-1.3.0.tgz} + name: array-last + version: 1.3.0 + engines: {node: '>=0.10.0'} + dependencies: + is-number: registry.nlark.com/is-number/4.0.0 + dev: true + + registry.nlark.com/array-slice/1.1.0: + resolution: {integrity: sha1-42jqFfibxwaff/uJrsOmx9SsItQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/array-slice/download/array-slice-1.1.0.tgz} + name: array-slice + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/array-sort/1.0.0: + resolution: {integrity: sha1-5MBTVkU/VvU1EqfR1hI/LFTAqIo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/array-sort/download/array-sort-1.0.0.tgz} + name: array-sort + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + default-compare: registry.nlark.com/default-compare/1.0.0 + get-value: registry.nlark.com/get-value/2.0.6 + kind-of: registry.nlark.com/kind-of/5.1.0 + dev: true + + registry.nlark.com/array-union/2.1.0: + resolution: {integrity: sha1-t5hCCtvrHego2ErNii4j0+/oXo0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/array-union/download/array-union-2.1.0.tgz} + name: array-union + version: 2.1.0 + engines: {node: '>=8'} + dev: true + + registry.nlark.com/array-unique/0.3.2: + resolution: {integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/array-unique/download/array-unique-0.3.2.tgz} + name: array-unique + version: 0.3.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/assign-symbols/1.0.0: + resolution: {integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/assign-symbols/download/assign-symbols-1.0.0.tgz} + name: assign-symbols + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/async-done/1.3.2: + resolution: {integrity: sha1-XhWqcplipLB0FPUoqIzfGOCykKI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/async-done/download/async-done-1.3.2.tgz} + name: async-done + version: 1.3.2 + engines: {node: '>= 0.10'} + dependencies: + end-of-stream: registry.nlark.com/end-of-stream/1.4.4 + once: registry.nlark.com/once/1.4.0 + process-nextick-args: registry.nlark.com/process-nextick-args/2.0.1 + stream-exhaust: registry.nlark.com/stream-exhaust/1.0.2 + dev: true + + registry.nlark.com/async-settle/1.0.0: + resolution: {integrity: sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/async-settle/download/async-settle-1.0.0.tgz} + name: async-settle + version: 1.0.0 + engines: {node: '>= 0.10'} + dependencies: + async-done: registry.nlark.com/async-done/1.3.2 + dev: true + + registry.nlark.com/bach/1.2.0: + resolution: {integrity: sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/bach/download/bach-1.2.0.tgz} + name: bach + version: 1.2.0 + engines: {node: '>= 0.10'} + dependencies: + arr-filter: registry.nlark.com/arr-filter/1.1.2 + arr-flatten: registry.npmmirror.com/arr-flatten/1.1.0 + arr-map: registry.nlark.com/arr-map/2.0.2 + array-each: registry.nlark.com/array-each/1.0.1 + array-initial: registry.nlark.com/array-initial/1.1.0 + array-last: registry.nlark.com/array-last/1.3.0 + async-done: registry.nlark.com/async-done/1.3.2 + async-settle: registry.nlark.com/async-settle/1.0.0 + now-and-later: registry.nlark.com/now-and-later/2.0.1 + dev: true + + registry.nlark.com/balanced-match/1.0.2: + resolution: {integrity: sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/balanced-match/download/balanced-match-1.0.2.tgz} + name: balanced-match + version: 1.0.2 + dev: true + + registry.nlark.com/base/0.11.2: + resolution: {integrity: sha1-e95c7RRbbVUakNuH+DxVi060io8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/base/download/base-0.11.2.tgz} + name: base + version: 0.11.2 + engines: {node: '>=0.10.0'} + dependencies: + cache-base: registry.npmmirror.com/cache-base/1.0.1 + class-utils: registry.nlark.com/class-utils/0.3.6 + component-emitter: registry.nlark.com/component-emitter/1.3.0 + define-property: registry.nlark.com/define-property/1.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + mixin-deep: registry.nlark.com/mixin-deep/1.3.2 + pascalcase: registry.npmmirror.com/pascalcase/0.1.1 + dev: true + + registry.nlark.com/brace-expansion/1.1.11: + resolution: {integrity: sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/brace-expansion/download/brace-expansion-1.1.11.tgz} + name: brace-expansion + version: 1.1.11 + dependencies: + balanced-match: registry.nlark.com/balanced-match/1.0.2 + concat-map: registry.nlark.com/concat-map/0.0.1 + dev: true + + registry.nlark.com/braces/2.3.2: + resolution: {integrity: sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/braces/download/braces-2.3.2.tgz} + name: braces + version: 2.3.2 + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: registry.npmmirror.com/arr-flatten/1.1.0 + array-unique: registry.nlark.com/array-unique/0.3.2 + extend-shallow: registry.nlark.com/extend-shallow/2.0.1 + fill-range: registry.nlark.com/fill-range/4.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + repeat-element: registry.nlark.com/repeat-element/1.1.4 + snapdragon: registry.nlark.com/snapdragon/0.8.2 + snapdragon-node: registry.nlark.com/snapdragon-node/2.1.1 + split-string: registry.nlark.com/split-string/3.1.0 + to-regex: registry.nlark.com/to-regex/3.0.2 + dev: true + + registry.nlark.com/buffer-equal/1.0.0: + resolution: {integrity: sha1-WWFrSYME1Var1GaWayLu2j7KX74=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/buffer-equal/download/buffer-equal-1.0.0.tgz} + name: buffer-equal + version: 1.0.0 + engines: {node: '>=0.4.0'} + dev: true + + registry.nlark.com/buffer-from/1.1.2: + resolution: {integrity: sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/buffer-from/download/buffer-from-1.1.2.tgz} + name: buffer-from + version: 1.1.2 + dev: true + + registry.nlark.com/call-bind/1.0.2: + resolution: {integrity: sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz} + name: call-bind + version: 1.0.2 + dependencies: + function-bind: registry.nlark.com/function-bind/1.1.1 + get-intrinsic: registry.nlark.com/get-intrinsic/1.1.1 + dev: true + + registry.nlark.com/class-utils/0.3.6: + resolution: {integrity: sha1-+TNprouafOAv1B+q0MqDAzGQxGM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/class-utils/download/class-utils-0.3.6.tgz} + name: class-utils + version: 0.3.6 + engines: {node: '>=0.10.0'} + dependencies: + arr-union: registry.nlark.com/arr-union/3.1.0 + define-property: registry.nlark.com/define-property/0.2.5 + isobject: registry.npmmirror.com/isobject/3.0.1 + static-extend: registry.nlark.com/static-extend/0.1.2 + dev: true + + registry.nlark.com/cliui/3.2.0: + resolution: {integrity: sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/cliui/download/cliui-3.2.0.tgz} + name: cliui + version: 3.2.0 + dependencies: + string-width: registry.npmmirror.com/string-width/1.0.2 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + wrap-ansi: registry.nlark.com/wrap-ansi/2.1.0 + dev: true + + registry.nlark.com/clone-stats/1.0.0: + resolution: {integrity: sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/clone-stats/download/clone-stats-1.0.0.tgz} + name: clone-stats + version: 1.0.0 + dev: true + + registry.nlark.com/clone/2.1.2: + resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/clone/download/clone-2.1.2.tgz} + name: clone + version: 2.1.2 + engines: {node: '>=0.8'} + dev: true + + registry.nlark.com/cloneable-readable/1.1.3: + resolution: {integrity: sha1-EgoAywU7+2OiIucJ+Wg+ouEdjOw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/cloneable-readable/download/cloneable-readable-1.1.3.tgz} + name: cloneable-readable + version: 1.1.3 + dependencies: + inherits: registry.nlark.com/inherits/2.0.4 + process-nextick-args: registry.nlark.com/process-nextick-args/2.0.1 + readable-stream: registry.nlark.com/readable-stream/2.3.7 + dev: true + + registry.nlark.com/collection-map/1.0.0: + resolution: {integrity: sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/collection-map/download/collection-map-1.0.0.tgz} + name: collection-map + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + arr-map: registry.nlark.com/arr-map/2.0.2 + for-own: registry.nlark.com/for-own/1.0.0 + make-iterator: registry.nlark.com/make-iterator/1.0.1 + dev: true + + registry.nlark.com/color-support/1.1.3: + resolution: {integrity: sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/color-support/download/color-support-1.1.3.tgz} + name: color-support + version: 1.1.3 + hasBin: true + dev: true + + registry.nlark.com/component-emitter/1.3.0: + resolution: {integrity: sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/component-emitter/download/component-emitter-1.3.0.tgz} + name: component-emitter + version: 1.3.0 + dev: true + + registry.nlark.com/concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/concat-map/download/concat-map-0.0.1.tgz} + name: concat-map + version: 0.0.1 + dev: true + + registry.nlark.com/concat-stream/1.6.2: + resolution: {integrity: sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/concat-stream/download/concat-stream-1.6.2.tgz} + name: concat-stream + version: 1.6.2 + engines: {'0': node >= 0.8} + dependencies: + buffer-from: registry.nlark.com/buffer-from/1.1.2 + inherits: registry.nlark.com/inherits/2.0.4 + readable-stream: registry.nlark.com/readable-stream/2.3.7 + typedarray: registry.nlark.com/typedarray/0.0.6 + dev: true + + registry.nlark.com/convert-source-map/1.8.0: + resolution: {integrity: sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz} + name: convert-source-map + version: 1.8.0 + dependencies: + safe-buffer: registry.nlark.com/safe-buffer/5.1.2 + dev: true + + registry.nlark.com/cookie-signature/1.0.6: + resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/cookie-signature/download/cookie-signature-1.0.6.tgz} + name: cookie-signature + version: 1.0.6 + dev: true + + registry.nlark.com/cookie/0.4.1: + resolution: {integrity: sha1-r9cT/ibr0hupXOth+agRblClN9E=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/cookie/download/cookie-0.4.1.tgz} + name: cookie + version: 0.4.1 + engines: {node: '>= 0.6'} + dev: true + + registry.nlark.com/copy-descriptor/0.1.1: + resolution: {integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/copy-descriptor/download/copy-descriptor-0.1.1.tgz} + name: copy-descriptor + version: 0.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/core-util-is/1.0.3: + resolution: {integrity: sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/core-util-is/download/core-util-is-1.0.3.tgz} + name: core-util-is + version: 1.0.3 + dev: true + + registry.nlark.com/d/1.0.1: + resolution: {integrity: sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/d/download/d-1.0.1.tgz} + name: d + version: 1.0.1 + dependencies: + es5-ext: registry.nlark.com/es5-ext/0.10.53 + type: registry.nlark.com/type/1.2.0 + dev: true + + registry.nlark.com/default-compare/1.0.0: + resolution: {integrity: sha1-y2ETGESthNhHiPto/QFoHKd4Gi8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/default-compare/download/default-compare-1.0.0.tgz} + name: default-compare + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/5.1.0 + dev: true + + registry.nlark.com/define-properties/1.1.3: + resolution: {integrity: sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/define-properties/download/define-properties-1.1.3.tgz} + name: define-properties + version: 1.1.3 + engines: {node: '>= 0.4'} + dependencies: + object-keys: registry.nlark.com/object-keys/1.1.1 + dev: true + + registry.nlark.com/define-property/0.2.5: + resolution: {integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/define-property/download/define-property-0.2.5.tgz} + name: define-property + version: 0.2.5 + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: registry.nlark.com/is-descriptor/0.1.6 + dev: true + + registry.nlark.com/define-property/1.0.0: + resolution: {integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/define-property/download/define-property-1.0.0.tgz} + name: define-property + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: registry.nlark.com/is-descriptor/1.0.2 + dev: true + + registry.nlark.com/define-property/2.0.2: + resolution: {integrity: sha1-1Flono1lS6d+AqgX+HENcCyxbp0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/define-property/download/define-property-2.0.2.tgz} + name: define-property + version: 2.0.2 + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: registry.nlark.com/is-descriptor/1.0.2 + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.nlark.com/detect-file/1.0.0: + resolution: {integrity: sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/detect-file/download/detect-file-1.0.0.tgz} + name: detect-file + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/dir-glob/3.0.1: + resolution: {integrity: sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/dir-glob/download/dir-glob-3.0.1.tgz} + name: dir-glob + version: 3.0.1 + engines: {node: '>=8'} + dependencies: + path-type: registry.npmmirror.com/path-type/4.0.0 + dev: true + + registry.nlark.com/dotenv-expand/5.1.0: + resolution: {integrity: sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz} + name: dotenv-expand + version: 5.1.0 + dev: true + + registry.nlark.com/duplexify/3.7.1: + resolution: {integrity: sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/duplexify/download/duplexify-3.7.1.tgz} + name: duplexify + version: 3.7.1 + dependencies: + end-of-stream: registry.nlark.com/end-of-stream/1.4.4 + inherits: registry.nlark.com/inherits/2.0.4 + readable-stream: registry.nlark.com/readable-stream/2.3.7 + stream-shift: registry.nlark.com/stream-shift/1.0.1 + dev: true + + registry.nlark.com/ee-first/1.1.1: + resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ee-first/download/ee-first-1.1.1.tgz} + name: ee-first + version: 1.1.1 + dev: true + + registry.nlark.com/end-of-stream/1.4.4: + resolution: {integrity: sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/end-of-stream/download/end-of-stream-1.4.4.tgz} + name: end-of-stream + version: 1.4.4 + dependencies: + once: registry.nlark.com/once/1.4.0 + dev: true + + registry.nlark.com/es5-ext/0.10.53: + resolution: {integrity: sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/es5-ext/download/es5-ext-0.10.53.tgz} + name: es5-ext + version: 0.10.53 + dependencies: + es6-iterator: registry.nlark.com/es6-iterator/2.0.3 + es6-symbol: registry.nlark.com/es6-symbol/3.1.3 + next-tick: registry.nlark.com/next-tick/1.0.0 + dev: true + + registry.nlark.com/es6-iterator/2.0.3: + resolution: {integrity: sha1-p96IkUGgWpSwhUQDstCg+/qY87c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/es6-iterator/download/es6-iterator-2.0.3.tgz} + name: es6-iterator + version: 2.0.3 + dependencies: + d: registry.nlark.com/d/1.0.1 + es5-ext: registry.nlark.com/es5-ext/0.10.53 + es6-symbol: registry.nlark.com/es6-symbol/3.1.3 + dev: true + + registry.nlark.com/es6-symbol/3.1.3: + resolution: {integrity: sha1-utXTwbzawoJp9MszHkMceKxwXRg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/es6-symbol/download/es6-symbol-3.1.3.tgz} + name: es6-symbol + version: 3.1.3 + dependencies: + d: registry.nlark.com/d/1.0.1 + ext: registry.npmmirror.com/ext/1.6.0 + dev: true + + registry.nlark.com/es6-weak-map/2.0.3: + resolution: {integrity: sha1-ttofFswswNm+Q+a9v8Xn383zHVM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/es6-weak-map/download/es6-weak-map-2.0.3.tgz} + name: es6-weak-map + version: 2.0.3 + dependencies: + d: registry.nlark.com/d/1.0.1 + es5-ext: registry.nlark.com/es5-ext/0.10.53 + es6-iterator: registry.nlark.com/es6-iterator/2.0.3 + es6-symbol: registry.nlark.com/es6-symbol/3.1.3 + dev: true + + registry.nlark.com/eslint-utils/3.0.0_eslint@6.8.0: + resolution: {integrity: sha1-iuuvrOc0W7M1WdsKHxOh0tSMNnI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/eslint-utils/download/eslint-utils-3.0.0.tgz} + id: registry.nlark.com/eslint-utils/3.0.0 + name: eslint-utils + version: 3.0.0 + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/2.1.0 + dev: true + + registry.nlark.com/event-pubsub/4.3.0: + resolution: {integrity: sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/event-pubsub/download/event-pubsub-4.3.0.tgz} + name: event-pubsub + version: 4.3.0 + engines: {node: '>=4.0.0'} + dev: true + + registry.nlark.com/expand-tilde/2.0.2: + resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/expand-tilde/download/expand-tilde-2.0.2.tgz} + name: expand-tilde + version: 2.0.2 + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: registry.nlark.com/homedir-polyfill/1.0.3 + dev: true + + registry.nlark.com/extend-shallow/2.0.1: + resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz} + name: extend-shallow + version: 2.0.1 + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: registry.nlark.com/is-extendable/0.1.1 + dev: true + + registry.nlark.com/extend-shallow/3.0.2: + resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/extend-shallow/download/extend-shallow-3.0.2.tgz} + name: extend-shallow + version: 3.0.2 + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: registry.nlark.com/assign-symbols/1.0.0 + is-extendable: registry.nlark.com/is-extendable/1.0.1 + dev: true + + registry.nlark.com/extend/3.0.2: + resolution: {integrity: sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/extend/download/extend-3.0.2.tgz} + name: extend + version: 3.0.2 + dev: true + + registry.nlark.com/fast-levenshtein/1.1.4: + resolution: {integrity: sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fast-levenshtein/download/fast-levenshtein-1.1.4.tgz} + name: fast-levenshtein + version: 1.1.4 + dev: true + + registry.nlark.com/file-uri-to-path/1.0.0: + resolution: {integrity: sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz} + name: file-uri-to-path + version: 1.0.0 + requiresBuild: true + dev: true + + registry.nlark.com/fill-range/4.0.0: + resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fill-range/download/fill-range-4.0.0.tgz} + name: fill-range + version: 4.0.0 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.nlark.com/extend-shallow/2.0.1 + is-number: registry.nlark.com/is-number/3.0.0 + repeat-string: registry.nlark.com/repeat-string/1.6.1 + to-regex-range: registry.nlark.com/to-regex-range/2.1.1 + dev: true + + registry.nlark.com/flush-write-stream/1.1.1: + resolution: {integrity: sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/flush-write-stream/download/flush-write-stream-1.1.1.tgz} + name: flush-write-stream + version: 1.1.1 + dependencies: + inherits: registry.nlark.com/inherits/2.0.4 + readable-stream: registry.nlark.com/readable-stream/2.3.7 + dev: true + + registry.nlark.com/for-in/1.0.2: + resolution: {integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/for-in/download/for-in-1.0.2.tgz} + name: for-in + version: 1.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/for-own/1.0.0: + resolution: {integrity: sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/for-own/download/for-own-1.0.0.tgz} + name: for-own + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + for-in: registry.nlark.com/for-in/1.0.2 + dev: true + + registry.nlark.com/forwarded/0.2.0: + resolution: {integrity: sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz} + name: forwarded + version: 0.2.0 + engines: {node: '>= 0.6'} + dev: true + + registry.nlark.com/fragment-cache/0.2.1: + resolution: {integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fragment-cache/download/fragment-cache-0.2.1.tgz} + name: fragment-cache + version: 0.2.1 + engines: {node: '>=0.10.0'} + dependencies: + map-cache: registry.nlark.com/map-cache/0.2.2 + dev: true + + registry.nlark.com/fresh/0.5.2: + resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fresh/download/fresh-0.5.2.tgz} + name: fresh + version: 0.5.2 + engines: {node: '>= 0.6'} + dev: true + + registry.nlark.com/fs-extra/10.0.0: + resolution: {integrity: sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fs-extra/download/fs-extra-10.0.0.tgz} + name: fs-extra + version: 10.0.0 + engines: {node: '>=12'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + jsonfile: registry.nlark.com/jsonfile/6.1.0 + universalify: registry.nlark.com/universalify/2.0.0 + dev: true + + registry.nlark.com/fs-mkdirp-stream/1.0.0: + resolution: {integrity: sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fs-mkdirp-stream/download/fs-mkdirp-stream-1.0.0.tgz} + name: fs-mkdirp-stream + version: 1.0.0 + engines: {node: '>= 0.10'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + through2: registry.nlark.com/through2/2.0.5 + dev: true + + registry.nlark.com/fs-monkey/1.0.3: + resolution: {integrity: sha1-rjrJLVO7Mo7+DpodlUH2rY1I4tM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fs-monkey/download/fs-monkey-1.0.3.tgz} + name: fs-monkey + version: 1.0.3 + dev: true + optional: true + + registry.nlark.com/function-bind/1.1.1: + resolution: {integrity: sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz} + name: function-bind + version: 1.1.1 + dev: true + + registry.nlark.com/functional-red-black-tree/1.0.1: + resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz} + name: functional-red-black-tree + version: 1.0.1 + dev: true + + registry.nlark.com/get-caller-file/1.0.3: + resolution: {integrity: sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/get-caller-file/download/get-caller-file-1.0.3.tgz} + name: get-caller-file + version: 1.0.3 + dev: true + + registry.nlark.com/get-intrinsic/1.1.1: + resolution: {integrity: sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz} + name: get-intrinsic + version: 1.1.1 + dependencies: + function-bind: registry.nlark.com/function-bind/1.1.1 + has: registry.nlark.com/has/1.0.3 + has-symbols: registry.nlark.com/has-symbols/1.0.2 + dev: true + + registry.nlark.com/get-value/2.0.6: + resolution: {integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/get-value/download/get-value-2.0.6.tgz} + name: get-value + version: 2.0.6 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/glob-watcher/5.0.5: + resolution: {integrity: sha1-qmvOZIMykk2ahIm+QePlxS1Bhtw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/glob-watcher/download/glob-watcher-5.0.5.tgz} + name: glob-watcher + version: 5.0.5 + engines: {node: '>= 0.10'} + dependencies: + anymatch: registry.nlark.com/anymatch/2.0.0 + async-done: registry.nlark.com/async-done/1.3.2 + chokidar: registry.npmmirror.com/chokidar/2.1.8 + is-negated-glob: registry.nlark.com/is-negated-glob/1.0.0 + just-debounce: registry.nlark.com/just-debounce/1.1.0 + normalize-path: registry.nlark.com/normalize-path/3.0.0 + object.defaults: registry.nlark.com/object.defaults/1.1.0 + dev: true + + registry.nlark.com/global-modules/1.0.0: + resolution: {integrity: sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/global-modules/download/global-modules-1.0.0.tgz} + name: global-modules + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: registry.nlark.com/global-prefix/1.0.2 + is-windows: registry.nlark.com/is-windows/1.0.2 + resolve-dir: registry.nlark.com/resolve-dir/1.0.1 + dev: true + + registry.nlark.com/global-prefix/1.0.2: + resolution: {integrity: sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/global-prefix/download/global-prefix-1.0.2.tgz} + name: global-prefix + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: registry.nlark.com/expand-tilde/2.0.2 + homedir-polyfill: registry.nlark.com/homedir-polyfill/1.0.3 + ini: registry.nlark.com/ini/1.3.8 + is-windows: registry.nlark.com/is-windows/1.0.2 + which: registry.nlark.com/which/1.3.1 + dev: true + + registry.nlark.com/glogg/1.0.2: + resolution: {integrity: sha1-LX3XAr7aIus7/634gGltpthGMT8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/glogg/download/glogg-1.0.2.tgz} + name: glogg + version: 1.0.2 + engines: {node: '>= 0.10'} + dependencies: + sparkles: registry.nlark.com/sparkles/1.0.1 + dev: true + + registry.nlark.com/gulplog/1.0.0: + resolution: {integrity: sha1-4oxNRdBey77YGDY86PnFkmIp/+U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/gulplog/download/gulplog-1.0.0.tgz} + name: gulplog + version: 1.0.0 + engines: {node: '>= 0.10'} + dependencies: + glogg: registry.nlark.com/glogg/1.0.2 + dev: true + + registry.nlark.com/has-symbols/1.0.2: + resolution: {integrity: sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz} + name: has-symbols + version: 1.0.2 + engines: {node: '>= 0.4'} + dev: true + + registry.nlark.com/has/1.0.3: + resolution: {integrity: sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/has/download/has-1.0.3.tgz} + name: has + version: 1.0.3 + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: registry.nlark.com/function-bind/1.1.1 + dev: true + + registry.nlark.com/homedir-polyfill/1.0.3: + resolution: {integrity: sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz} + name: homedir-polyfill + version: 1.0.3 + engines: {node: '>=0.10.0'} + dependencies: + parse-passwd: registry.nlark.com/parse-passwd/1.0.0 + dev: true + + registry.nlark.com/import-html-entry/1.11.1: + resolution: {integrity: sha1-PYxZd5Jr3RIquOZYllwQIGi0r40=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/import-html-entry/download/import-html-entry-1.11.1.tgz} + name: import-html-entry + version: 1.11.1 + dependencies: + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.16.7 + dev: false + + registry.nlark.com/inherits/2.0.4: + resolution: {integrity: sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/inherits/download/inherits-2.0.4.tgz} + name: inherits + version: 2.0.4 + dev: true + + registry.nlark.com/ini/1.3.8: + resolution: {integrity: sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ini/download/ini-1.3.8.tgz} + name: ini + version: 1.3.8 + dev: true + + registry.nlark.com/interpret/1.4.0: + resolution: {integrity: sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/interpret/download/interpret-1.4.0.tgz} + name: interpret + version: 1.4.0 + engines: {node: '>= 0.10'} + dev: true + + registry.nlark.com/invert-kv/1.0.0: + resolution: {integrity: sha1-EEqOSqym09jNFXqO+L+rLXo//bY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/invert-kv/download/invert-kv-1.0.0.tgz} + name: invert-kv + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/is-absolute/1.0.0: + resolution: {integrity: sha1-OV4a6EsR8mrReV5zwXN45IowFXY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-absolute/download/is-absolute-1.0.0.tgz} + name: is-absolute + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-relative: registry.nlark.com/is-relative/1.0.0 + is-windows: registry.nlark.com/is-windows/1.0.2 + dev: true + + registry.nlark.com/is-accessor-descriptor/0.1.6: + resolution: {integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz} + name: is-accessor-descriptor + version: 0.1.6 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/3.2.2 + dev: true + + registry.nlark.com/is-accessor-descriptor/1.0.0: + resolution: {integrity: sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz} + name: is-accessor-descriptor + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/6.0.3 + dev: true + + registry.nlark.com/is-data-descriptor/0.1.4: + resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz} + name: is-data-descriptor + version: 0.1.4 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/3.2.2 + dev: true + + registry.nlark.com/is-data-descriptor/1.0.0: + resolution: {integrity: sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz} + name: is-data-descriptor + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/6.0.3 + dev: true + + registry.nlark.com/is-descriptor/0.1.6: + resolution: {integrity: sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-descriptor/download/is-descriptor-0.1.6.tgz} + name: is-descriptor + version: 0.1.6 + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: registry.nlark.com/is-accessor-descriptor/0.1.6 + is-data-descriptor: registry.nlark.com/is-data-descriptor/0.1.4 + kind-of: registry.nlark.com/kind-of/5.1.0 + dev: true + + registry.nlark.com/is-descriptor/1.0.2: + resolution: {integrity: sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-descriptor/download/is-descriptor-1.0.2.tgz} + name: is-descriptor + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: registry.nlark.com/is-accessor-descriptor/1.0.0 + is-data-descriptor: registry.nlark.com/is-data-descriptor/1.0.0 + kind-of: registry.nlark.com/kind-of/6.0.3 + dev: true + + registry.nlark.com/is-extendable/0.1.1: + resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz} + name: is-extendable + version: 0.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/is-extendable/1.0.1: + resolution: {integrity: sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-extendable/download/is-extendable-1.0.1.tgz} + name: is-extendable + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: registry.nlark.com/is-plain-object/2.0.4 + dev: true + + registry.nlark.com/is-negated-glob/1.0.0: + resolution: {integrity: sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-negated-glob/download/is-negated-glob-1.0.0.tgz} + name: is-negated-glob + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/is-number/3.0.0: + resolution: {integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-number/download/is-number-3.0.0.tgz} + name: is-number + version: 3.0.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/3.2.2 + dev: true + + registry.nlark.com/is-number/4.0.0: + resolution: {integrity: sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-number/download/is-number-4.0.0.tgz} + name: is-number + version: 4.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/is-plain-object/2.0.4: + resolution: {integrity: sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-plain-object/download/is-plain-object-2.0.4.tgz} + name: is-plain-object + version: 2.0.4 + engines: {node: '>=0.10.0'} + dependencies: + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.nlark.com/is-plain-object/5.0.0: + resolution: {integrity: sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-plain-object/download/is-plain-object-5.0.0.tgz} + name: is-plain-object + version: 5.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/is-relative/1.0.0: + resolution: {integrity: sha1-obtpNc6MXboei5dUubLcwCDiJg0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-relative/download/is-relative-1.0.0.tgz} + name: is-relative + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: registry.nlark.com/is-unc-path/1.0.0 + dev: true + + registry.nlark.com/is-unc-path/1.0.0: + resolution: {integrity: sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-unc-path/download/is-unc-path-1.0.0.tgz} + name: is-unc-path + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: registry.nlark.com/unc-path-regex/0.1.2 + dev: true + + registry.nlark.com/is-utf8/0.2.1: + resolution: {integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-utf8/download/is-utf8-0.2.1.tgz} + name: is-utf8 + version: 0.2.1 + dev: true + + registry.nlark.com/is-valid-glob/1.0.0: + resolution: {integrity: sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-valid-glob/download/is-valid-glob-1.0.0.tgz} + name: is-valid-glob + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/is-windows/1.0.2: + resolution: {integrity: sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-windows/download/is-windows-1.0.2.tgz} + name: is-windows + version: 1.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/isarray/1.0.0: + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/isarray/download/isarray-1.0.0.tgz} + name: isarray + version: 1.0.0 + dev: true + + registry.nlark.com/isexe/2.0.0: + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/isexe/download/isexe-2.0.0.tgz?cache=0&sync_timestamp=1631509552476&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz} + name: isexe + version: 2.0.0 + dev: true + + registry.nlark.com/js-message/1.0.7: + resolution: {integrity: sha1-+93QU8ekcCGHG7iyyVOXzBfCDkc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/js-message/download/js-message-1.0.7.tgz} + name: js-message + version: 1.0.7 + engines: {node: '>=0.6.0'} + dev: true + + registry.nlark.com/js-queue/2.0.2: + resolution: {integrity: sha1-C+WQM4+QOzbHPTPDGIOoIUEs1II=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/js-queue/download/js-queue-2.0.2.tgz} + name: js-queue + version: 2.0.2 + engines: {node: '>=1.0.0'} + dependencies: + easy-stack: registry.npmmirror.com/easy-stack/1.0.1 + dev: true + + registry.nlark.com/json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz} + name: json-stable-stringify-without-jsonify + version: 1.0.1 + dev: true + + registry.nlark.com/jsonfile/6.1.0: + resolution: {integrity: sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/jsonfile/download/jsonfile-6.1.0.tgz} + name: jsonfile + version: 6.1.0 + dependencies: + universalify: registry.nlark.com/universalify/2.0.0 + optionalDependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + dev: true + + registry.nlark.com/just-debounce/1.1.0: + resolution: {integrity: sha1-L4GjrUEhp2vHy0Xb9wTA12qOXd8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/just-debounce/download/just-debounce-1.1.0.tgz} + name: just-debounce + version: 1.1.0 + dev: true + + registry.nlark.com/kind-of/3.2.2: + resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/kind-of/download/kind-of-3.2.2.tgz} + name: kind-of + version: 3.2.2 + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: registry.npmmirror.com/is-buffer/1.1.6 + dev: true + + registry.nlark.com/kind-of/5.1.0: + resolution: {integrity: sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/kind-of/download/kind-of-5.1.0.tgz} + name: kind-of + version: 5.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/kind-of/6.0.3: + resolution: {integrity: sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz} + name: kind-of + version: 6.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/lcid/1.0.0: + resolution: {integrity: sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/lcid/download/lcid-1.0.0.tgz} + name: lcid + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + invert-kv: registry.nlark.com/invert-kv/1.0.0 + dev: true + + registry.nlark.com/lead/1.0.0: + resolution: {integrity: sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/lead/download/lead-1.0.0.tgz} + name: lead + version: 1.0.0 + engines: {node: '>= 0.10'} + dependencies: + flush-write-stream: registry.nlark.com/flush-write-stream/1.1.1 + dev: true + + registry.nlark.com/lie/3.1.1: + resolution: {integrity: sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/lie/download/lie-3.1.1.tgz} + name: lie + version: 3.1.1 + dependencies: + immediate: registry.npmmirror.com/immediate/3.0.6 + dev: false + + registry.nlark.com/lodash.debounce/4.0.8: + resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/lodash.debounce/download/lodash.debounce-4.0.8.tgz} + name: lodash.debounce + version: 4.0.8 + dev: false + + registry.nlark.com/lru-cache/6.0.0: + resolution: {integrity: sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz} + name: lru-cache + version: 6.0.0 + engines: {node: '>=10'} + dependencies: + yallist: registry.npmmirror.com/yallist/4.0.0 + dev: true + + registry.nlark.com/make-iterator/1.0.1: + resolution: {integrity: sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/make-iterator/download/make-iterator-1.0.1.tgz} + name: make-iterator + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/6.0.3 + dev: true + + registry.nlark.com/map-cache/0.2.2: + resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/map-cache/download/map-cache-0.2.2.tgz} + name: map-cache + version: 0.2.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/matchdep/2.0.0: + resolution: {integrity: sha1-xvNINKDY28OzfCfui7yyfHd1WC4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/matchdep/download/matchdep-2.0.0.tgz} + name: matchdep + version: 2.0.0 + engines: {node: '>= 0.10.0'} + dependencies: + findup-sync: registry.npmmirror.com/findup-sync/2.0.0 + micromatch: registry.nlark.com/micromatch/3.1.10 + resolve: registry.npmmirror.com/resolve/1.21.0 + stack-trace: registry.nlark.com/stack-trace/0.0.10 + dev: true + + registry.nlark.com/media-typer/0.3.0: + resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/media-typer/download/media-typer-0.3.0.tgz} + name: media-typer + version: 0.3.0 + engines: {node: '>= 0.6'} + dev: true + + registry.nlark.com/merge-descriptors/1.0.1: + resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/merge-descriptors/download/merge-descriptors-1.0.1.tgz} + name: merge-descriptors + version: 1.0.1 + dev: true + + registry.nlark.com/merge-options/1.0.1: + resolution: {integrity: sha1-KmSyRFe+zU5NxggoMkfpTOWJqjI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/merge-options/download/merge-options-1.0.1.tgz} + name: merge-options + version: 1.0.1 + engines: {node: '>=4'} + dependencies: + is-plain-obj: registry.npmmirror.com/is-plain-obj/1.1.0 + dev: true + + registry.nlark.com/merge2/1.4.1: + resolution: {integrity: sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/merge2/download/merge2-1.4.1.tgz} + name: merge2 + version: 1.4.1 + engines: {node: '>= 8'} + dev: true + + registry.nlark.com/micromatch/3.1.10: + resolution: {integrity: sha1-cIWbyVyYQJUvNZoGij/En57PrCM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/micromatch/download/micromatch-3.1.10.tgz} + name: micromatch + version: 3.1.10 + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: registry.nlark.com/arr-diff/4.0.0 + array-unique: registry.nlark.com/array-unique/0.3.2 + braces: registry.nlark.com/braces/2.3.2 + define-property: registry.nlark.com/define-property/2.0.2 + extend-shallow: registry.nlark.com/extend-shallow/3.0.2 + extglob: registry.npmmirror.com/extglob/2.0.4 + fragment-cache: registry.nlark.com/fragment-cache/0.2.1 + kind-of: registry.nlark.com/kind-of/6.0.3 + nanomatch: registry.nlark.com/nanomatch/1.2.13 + object.pick: registry.nlark.com/object.pick/1.3.0 + regex-not: registry.nlark.com/regex-not/1.0.2 + snapdragon: registry.nlark.com/snapdragon/0.8.2 + to-regex: registry.nlark.com/to-regex/3.0.2 + dev: true + + registry.nlark.com/minimatch/3.0.4: + resolution: {integrity: sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/minimatch/download/minimatch-3.0.4.tgz} + name: minimatch + version: 3.0.4 + dependencies: + brace-expansion: registry.nlark.com/brace-expansion/1.1.11 + dev: true + + registry.nlark.com/mixin-deep/1.3.2: + resolution: {integrity: sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/mixin-deep/download/mixin-deep-1.3.2.tgz} + name: mixin-deep + version: 1.3.2 + engines: {node: '>=0.10.0'} + dependencies: + for-in: registry.nlark.com/for-in/1.0.2 + is-extendable: registry.nlark.com/is-extendable/1.0.1 + dev: true + + registry.nlark.com/mute-stream/0.0.8: + resolution: {integrity: sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/mute-stream/download/mute-stream-0.0.8.tgz} + name: mute-stream + version: 0.0.8 + dev: true + + registry.nlark.com/mz/2.7.0: + resolution: {integrity: sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/mz/download/mz-2.7.0.tgz} + name: mz + version: 2.7.0 + dependencies: + any-promise: registry.nlark.com/any-promise/1.3.0 + object-assign: registry.nlark.com/object-assign/4.1.1 + thenify-all: registry.nlark.com/thenify-all/1.6.0 + dev: true + + registry.nlark.com/nanomatch/1.2.13: + resolution: {integrity: sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/nanomatch/download/nanomatch-1.2.13.tgz} + name: nanomatch + version: 1.2.13 + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: registry.nlark.com/arr-diff/4.0.0 + array-unique: registry.nlark.com/array-unique/0.3.2 + define-property: registry.nlark.com/define-property/2.0.2 + extend-shallow: registry.nlark.com/extend-shallow/3.0.2 + fragment-cache: registry.nlark.com/fragment-cache/0.2.1 + is-windows: registry.nlark.com/is-windows/1.0.2 + kind-of: registry.nlark.com/kind-of/6.0.3 + object.pick: registry.nlark.com/object.pick/1.3.0 + regex-not: registry.nlark.com/regex-not/1.0.2 + snapdragon: registry.nlark.com/snapdragon/0.8.2 + to-regex: registry.nlark.com/to-regex/3.0.2 + dev: true + + registry.nlark.com/negotiator/0.6.2: + resolution: {integrity: sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/negotiator/download/negotiator-0.6.2.tgz} + name: negotiator + version: 0.6.2 + engines: {node: '>= 0.6'} + dev: true + + registry.nlark.com/next-tick/1.0.0: + resolution: {integrity: sha1-yobR/ogoFpsBICCOPchCS524NCw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/next-tick/download/next-tick-1.0.0.tgz} + name: next-tick + version: 1.0.0 + dev: true + + registry.nlark.com/node-dir/0.1.17: + resolution: {integrity: sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/node-dir/download/node-dir-0.1.17.tgz} + name: node-dir + version: 0.1.17 + engines: {node: '>= 0.10.5'} + dependencies: + minimatch: registry.nlark.com/minimatch/3.0.4 + dev: true + + registry.nlark.com/normalize-path/2.1.1: + resolution: {integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/normalize-path/download/normalize-path-2.1.1.tgz} + name: normalize-path + version: 2.1.1 + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: registry.nlark.com/remove-trailing-separator/1.1.0 + dev: true + + registry.nlark.com/normalize-path/3.0.0: + resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/normalize-path/download/normalize-path-3.0.0.tgz} + name: normalize-path + version: 3.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/now-and-later/2.0.1: + resolution: {integrity: sha1-jlechoV2SnzALLaAOA6U9DzLH3w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/now-and-later/download/now-and-later-2.0.1.tgz} + name: now-and-later + version: 2.0.1 + engines: {node: '>= 0.10'} + dependencies: + once: registry.nlark.com/once/1.4.0 + dev: true + + registry.nlark.com/object-assign/4.1.1: + resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz} + name: object-assign + version: 4.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/object-copy/0.1.0: + resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object-copy/download/object-copy-0.1.0.tgz} + name: object-copy + version: 0.1.0 + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: registry.nlark.com/copy-descriptor/0.1.1 + define-property: registry.nlark.com/define-property/0.2.5 + kind-of: registry.nlark.com/kind-of/3.2.2 + dev: true + + registry.nlark.com/object-keys/1.1.1: + resolution: {integrity: sha1-HEfyct8nfzsdrwYWd9nILiMixg4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object-keys/download/object-keys-1.1.1.tgz} + name: object-keys + version: 1.1.1 + engines: {node: '>= 0.4'} + dev: true + + registry.nlark.com/object.assign/4.1.2: + resolution: {integrity: sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz} + name: object.assign + version: 4.1.2 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.nlark.com/call-bind/1.0.2 + define-properties: registry.nlark.com/define-properties/1.1.3 + has-symbols: registry.nlark.com/has-symbols/1.0.2 + object-keys: registry.nlark.com/object-keys/1.1.1 + dev: true + + registry.nlark.com/object.defaults/1.1.0: + resolution: {integrity: sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object.defaults/download/object.defaults-1.1.0.tgz} + name: object.defaults + version: 1.1.0 + engines: {node: '>=0.10.0'} + dependencies: + array-each: registry.nlark.com/array-each/1.0.1 + array-slice: registry.nlark.com/array-slice/1.1.0 + for-own: registry.nlark.com/for-own/1.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.nlark.com/object.map/1.0.1: + resolution: {integrity: sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object.map/download/object.map-1.0.1.tgz} + name: object.map + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + for-own: registry.nlark.com/for-own/1.0.0 + make-iterator: registry.nlark.com/make-iterator/1.0.1 + dev: true + + registry.nlark.com/object.pick/1.3.0: + resolution: {integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object.pick/download/object.pick-1.3.0.tgz} + name: object.pick + version: 1.3.0 + engines: {node: '>=0.10.0'} + dependencies: + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.nlark.com/object.reduce/1.0.1: + resolution: {integrity: sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object.reduce/download/object.reduce-1.0.1.tgz} + name: object.reduce + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + for-own: registry.nlark.com/for-own/1.0.0 + make-iterator: registry.nlark.com/make-iterator/1.0.1 + dev: true + + registry.nlark.com/once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/once/download/once-1.4.0.tgz} + name: once + version: 1.4.0 + dependencies: + wrappy: registry.nlark.com/wrappy/1.0.2 + dev: true + + registry.nlark.com/ordered-read-streams/1.0.1: + resolution: {integrity: sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ordered-read-streams/download/ordered-read-streams-1.0.1.tgz} + name: ordered-read-streams + version: 1.0.1 + dependencies: + readable-stream: registry.nlark.com/readable-stream/2.3.7 + dev: true + + registry.nlark.com/parse-filepath/1.0.2: + resolution: {integrity: sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/parse-filepath/download/parse-filepath-1.0.2.tgz} + name: parse-filepath + version: 1.0.2 + engines: {node: '>=0.8'} + dependencies: + is-absolute: registry.nlark.com/is-absolute/1.0.0 + map-cache: registry.nlark.com/map-cache/0.2.2 + path-root: registry.nlark.com/path-root/0.1.1 + dev: true + + registry.nlark.com/parse-passwd/1.0.0: + resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/parse-passwd/download/parse-passwd-1.0.0.tgz} + name: parse-passwd + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/path-browserify/0.0.1: + resolution: {integrity: sha1-5sTd1+06onxoogzE5Q4aTug7vEo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/path-browserify/download/path-browserify-0.0.1.tgz} + name: path-browserify + version: 0.0.1 + dev: true + + registry.nlark.com/path-root-regex/0.1.2: + resolution: {integrity: sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/path-root-regex/download/path-root-regex-0.1.2.tgz} + name: path-root-regex + version: 0.1.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/path-root/0.1.1: + resolution: {integrity: sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/path-root/download/path-root-0.1.1.tgz} + name: path-root + version: 0.1.1 + engines: {node: '>=0.10.0'} + dependencies: + path-root-regex: registry.nlark.com/path-root-regex/0.1.2 + dev: true + + registry.nlark.com/pretty-hrtime/1.0.3: + resolution: {integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/pretty-hrtime/download/pretty-hrtime-1.0.3.tgz} + name: pretty-hrtime + version: 1.0.3 + engines: {node: '>= 0.8'} + dev: true + + registry.nlark.com/process-nextick-args/2.0.1: + resolution: {integrity: sha1-eCDZsWEgzFXKmud5JoCufbptf+I=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/process-nextick-args/download/process-nextick-args-2.0.1.tgz} + name: process-nextick-args + version: 2.0.1 + dev: true + + registry.nlark.com/pump/2.0.1: + resolution: {integrity: sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/pump/download/pump-2.0.1.tgz} + name: pump + version: 2.0.1 + dependencies: + end-of-stream: registry.nlark.com/end-of-stream/1.4.4 + once: registry.nlark.com/once/1.4.0 + dev: true + + registry.nlark.com/pumpify/1.5.1: + resolution: {integrity: sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/pumpify/download/pumpify-1.5.1.tgz} + name: pumpify + version: 1.5.1 + dependencies: + duplexify: registry.nlark.com/duplexify/3.7.1 + inherits: registry.nlark.com/inherits/2.0.4 + pump: registry.nlark.com/pump/2.0.1 + dev: true + + registry.nlark.com/readable-stream/2.3.7: + resolution: {integrity: sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz} + name: readable-stream + version: 2.3.7 + dependencies: + core-util-is: registry.nlark.com/core-util-is/1.0.3 + inherits: registry.nlark.com/inherits/2.0.4 + isarray: registry.nlark.com/isarray/1.0.0 + process-nextick-args: registry.nlark.com/process-nextick-args/2.0.1 + safe-buffer: registry.nlark.com/safe-buffer/5.1.2 + string_decoder: registry.nlark.com/string_decoder/1.1.1 + util-deprecate: registry.nlark.com/util-deprecate/1.0.2 + dev: true + + registry.nlark.com/rechoir/0.6.2: + resolution: {integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/rechoir/download/rechoir-0.6.2.tgz} + name: rechoir + version: 0.6.2 + engines: {node: '>= 0.10'} + dependencies: + resolve: registry.npmmirror.com/resolve/1.21.0 + dev: true + + registry.nlark.com/regex-not/1.0.2: + resolution: {integrity: sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/regex-not/download/regex-not-1.0.2.tgz} + name: regex-not + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.nlark.com/extend-shallow/3.0.2 + safe-regex: registry.nlark.com/safe-regex/1.1.0 + dev: true + + registry.nlark.com/regexpp/3.2.0: + resolution: {integrity: sha1-BCWido2PI7rXDKS5BGH6LxIT4bI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/regexpp/download/regexpp-3.2.0.tgz} + name: regexpp + version: 3.2.0 + engines: {node: '>=8'} + dev: true + + registry.nlark.com/remove-bom-buffer/3.0.0: + resolution: {integrity: sha1-wr8eN3Ug0yT2I4kuM8EMrCwlK1M=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/remove-bom-buffer/download/remove-bom-buffer-3.0.0.tgz} + name: remove-bom-buffer + version: 3.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: registry.npmmirror.com/is-buffer/1.1.6 + is-utf8: registry.nlark.com/is-utf8/0.2.1 + dev: true + + registry.nlark.com/remove-bom-stream/1.2.0: + resolution: {integrity: sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/remove-bom-stream/download/remove-bom-stream-1.2.0.tgz} + name: remove-bom-stream + version: 1.2.0 + engines: {node: '>= 0.10'} + dependencies: + remove-bom-buffer: registry.nlark.com/remove-bom-buffer/3.0.0 + safe-buffer: registry.nlark.com/safe-buffer/5.2.1 + through2: registry.nlark.com/through2/2.0.5 + dev: true + + registry.nlark.com/remove-trailing-separator/1.1.0: + resolution: {integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz} + name: remove-trailing-separator + version: 1.1.0 + dev: true + + registry.nlark.com/repeat-element/1.1.4: + resolution: {integrity: sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/repeat-element/download/repeat-element-1.1.4.tgz} + name: repeat-element + version: 1.1.4 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/repeat-string/1.6.1: + resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/repeat-string/download/repeat-string-1.6.1.tgz} + name: repeat-string + version: 1.6.1 + engines: {node: '>=0.10'} + dev: true + + registry.nlark.com/replace-ext/1.0.1: + resolution: {integrity: sha1-LW2ZbQShWFXZZ0Q2Md1fd4JbAWo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/replace-ext/download/replace-ext-1.0.1.tgz} + name: replace-ext + version: 1.0.1 + engines: {node: '>= 0.10'} + dev: true + + registry.nlark.com/replace-homedir/1.0.0: + resolution: {integrity: sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/replace-homedir/download/replace-homedir-1.0.0.tgz} + name: replace-homedir + version: 1.0.0 + engines: {node: '>= 0.10'} + dependencies: + homedir-polyfill: registry.nlark.com/homedir-polyfill/1.0.3 + is-absolute: registry.nlark.com/is-absolute/1.0.0 + remove-trailing-separator: registry.nlark.com/remove-trailing-separator/1.1.0 + dev: true + + registry.nlark.com/request-promise-core/1.1.4_request@2.88.2: + resolution: {integrity: sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/request-promise-core/download/request-promise-core-1.1.4.tgz} + id: registry.nlark.com/request-promise-core/1.1.4 + name: request-promise-core + version: 1.1.4 + engines: {node: '>=0.10.0'} + peerDependencies: + request: ^2.34 + dependencies: + lodash: registry.npmmirror.com/lodash/4.17.21 + request: registry.npmmirror.com/request/2.88.2 + dev: true + + registry.nlark.com/require-directory/2.1.1: + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz} + name: require-directory + version: 2.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/require-main-filename/1.0.1: + resolution: {integrity: sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/require-main-filename/download/require-main-filename-1.0.1.tgz} + name: require-main-filename + version: 1.0.1 + dev: true + + registry.nlark.com/resolve-dir/1.0.1: + resolution: {integrity: sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/resolve-dir/download/resolve-dir-1.0.1.tgz} + name: resolve-dir + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: registry.nlark.com/expand-tilde/2.0.2 + global-modules: registry.nlark.com/global-modules/1.0.0 + dev: true + + registry.nlark.com/resolve-options/1.1.0: + resolution: {integrity: sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/resolve-options/download/resolve-options-1.1.0.tgz} + name: resolve-options + version: 1.1.0 + engines: {node: '>= 0.10'} + dependencies: + value-or-function: registry.nlark.com/value-or-function/3.0.0 + dev: true + + registry.nlark.com/ret/0.1.15: + resolution: {integrity: sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ret/download/ret-0.1.15.tgz} + name: ret + version: 0.1.15 + engines: {node: '>=0.12'} + dev: true + + registry.nlark.com/safe-buffer/5.1.2: + resolution: {integrity: sha1-mR7GnSluAxN0fVm9/St0XDX4go0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz} + name: safe-buffer + version: 5.1.2 + dev: true + + registry.nlark.com/safe-buffer/5.2.1: + resolution: {integrity: sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/safe-buffer/download/safe-buffer-5.2.1.tgz} + name: safe-buffer + version: 5.2.1 + dev: true + + registry.nlark.com/safe-regex/1.1.0: + resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/safe-regex/download/safe-regex-1.1.0.tgz} + name: safe-regex + version: 1.1.0 + dependencies: + ret: registry.nlark.com/ret/0.1.15 + dev: true + + registry.nlark.com/semver-greatest-satisfied-range/1.1.0: + resolution: {integrity: sha1-E+jCZYq5aRywzXEJMkAoDTb3els=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/semver-greatest-satisfied-range/download/semver-greatest-satisfied-range-1.1.0.tgz} + name: semver-greatest-satisfied-range + version: 1.1.0 + engines: {node: '>= 0.10'} + dependencies: + sver-compat: registry.nlark.com/sver-compat/1.5.0 + dev: true + + registry.nlark.com/semver/7.3.5: + resolution: {integrity: sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1631501920740&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz} + name: semver + version: 7.3.5 + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: registry.nlark.com/lru-cache/6.0.0 + dev: true + + registry.nlark.com/set-blocking/2.0.0: + resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/set-blocking/download/set-blocking-2.0.0.tgz} + name: set-blocking + version: 2.0.0 + dev: true + + registry.nlark.com/setprototypeof/1.1.0: + resolution: {integrity: sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/setprototypeof/download/setprototypeof-1.1.0.tgz} + name: setprototypeof + version: 1.1.0 + dev: true + + registry.nlark.com/setprototypeof/1.2.0: + resolution: {integrity: sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/setprototypeof/download/setprototypeof-1.2.0.tgz} + name: setprototypeof + version: 1.2.0 + dev: true + + registry.nlark.com/slash/3.0.0: + resolution: {integrity: sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/slash/download/slash-3.0.0.tgz} + name: slash + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.nlark.com/snapdragon-node/2.1.1: + resolution: {integrity: sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/snapdragon-node/download/snapdragon-node-2.1.1.tgz} + name: snapdragon-node + version: 2.1.1 + engines: {node: '>=0.10.0'} + dependencies: + define-property: registry.nlark.com/define-property/1.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + snapdragon-util: registry.nlark.com/snapdragon-util/3.0.1 + dev: true + + registry.nlark.com/snapdragon-util/3.0.1: + resolution: {integrity: sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/snapdragon-util/download/snapdragon-util-3.0.1.tgz} + name: snapdragon-util + version: 3.0.1 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.nlark.com/kind-of/3.2.2 + dev: true + + registry.nlark.com/snapdragon/0.8.2: + resolution: {integrity: sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/snapdragon/download/snapdragon-0.8.2.tgz} + name: snapdragon + version: 0.8.2 + engines: {node: '>=0.10.0'} + dependencies: + base: registry.nlark.com/base/0.11.2 + debug: registry.npmmirror.com/debug/2.6.9 + define-property: registry.nlark.com/define-property/0.2.5 + extend-shallow: registry.nlark.com/extend-shallow/2.0.1 + map-cache: registry.nlark.com/map-cache/0.2.2 + source-map: registry.nlark.com/source-map/0.5.7 + source-map-resolve: registry.npmmirror.com/source-map-resolve/0.5.3 + use: registry.nlark.com/use/3.1.1 + dev: true + + registry.nlark.com/source-map/0.5.7: + resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz} + name: source-map + version: 0.5.7 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/sparkles/1.0.1: + resolution: {integrity: sha1-AI22XtzmxQ7sDF4ijhlFBh3QQ3w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/sparkles/download/sparkles-1.0.1.tgz} + name: sparkles + version: 1.0.1 + engines: {node: '>= 0.10'} + dev: true + + registry.nlark.com/split-string/3.1.0: + resolution: {integrity: sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/split-string/download/split-string-3.1.0.tgz} + name: split-string + version: 3.1.0 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.nlark.com/extend-shallow/3.0.2 + dev: true + + registry.nlark.com/stack-trace/0.0.10: + resolution: {integrity: sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/stack-trace/download/stack-trace-0.0.10.tgz} + name: stack-trace + version: 0.0.10 + dev: true + + registry.nlark.com/static-extend/0.1.2: + resolution: {integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/static-extend/download/static-extend-0.1.2.tgz} + name: static-extend + version: 0.1.2 + engines: {node: '>=0.10.0'} + dependencies: + define-property: registry.nlark.com/define-property/0.2.5 + object-copy: registry.nlark.com/object-copy/0.1.0 + dev: true + + registry.nlark.com/stream-exhaust/1.0.2: + resolution: {integrity: sha1-rNrI2lnvK8HheiwMz2wyDRIOVV0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/stream-exhaust/download/stream-exhaust-1.0.2.tgz} + name: stream-exhaust + version: 1.0.2 + dev: true + + registry.nlark.com/stream-shift/1.0.1: + resolution: {integrity: sha1-1wiCgVWasneEJCebCHfaPDktWj0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/stream-shift/download/stream-shift-1.0.1.tgz} + name: stream-shift + version: 1.0.1 + dev: true + + registry.nlark.com/string_decoder/1.1.1: + resolution: {integrity: sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz} + name: string_decoder + version: 1.1.1 + dependencies: + safe-buffer: registry.nlark.com/safe-buffer/5.1.2 + dev: true + + registry.nlark.com/sver-compat/1.5.0: + resolution: {integrity: sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/sver-compat/download/sver-compat-1.5.0.tgz} + name: sver-compat + version: 1.5.0 + dependencies: + es6-iterator: registry.nlark.com/es6-iterator/2.0.3 + es6-symbol: registry.nlark.com/es6-symbol/3.1.3 + dev: true + + registry.nlark.com/thenify-all/1.6.0: + resolution: {integrity: sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/thenify-all/download/thenify-all-1.6.0.tgz} + name: thenify-all + version: 1.6.0 + engines: {node: '>=0.8'} + dependencies: + thenify: registry.nlark.com/thenify/3.3.1 + dev: true + + registry.nlark.com/thenify/3.3.1: + resolution: {integrity: sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/thenify/download/thenify-3.3.1.tgz} + name: thenify + version: 3.3.1 + dependencies: + any-promise: registry.nlark.com/any-promise/1.3.0 + dev: true + + registry.nlark.com/through2-filter/3.0.0: + resolution: {integrity: sha1-cA54bfI2fCyIzYqlvkz5weeDElQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/through2-filter/download/through2-filter-3.0.0.tgz} + name: through2-filter + version: 3.0.0 + dependencies: + through2: registry.nlark.com/through2/2.0.5 + xtend: registry.nlark.com/xtend/4.0.2 + dev: true + + registry.nlark.com/through2/2.0.5: + resolution: {integrity: sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/through2/download/through2-2.0.5.tgz} + name: through2 + version: 2.0.5 + dependencies: + readable-stream: registry.nlark.com/readable-stream/2.3.7 + xtend: registry.nlark.com/xtend/4.0.2 + dev: true + + registry.nlark.com/tmpl/1.0.5: + resolution: {integrity: sha1-hoPguQK7nCDE9ybjwLafNlGMB8w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/tmpl/download/tmpl-1.0.5.tgz} + name: tmpl + version: 1.0.5 + dev: true + + registry.nlark.com/to-absolute-glob/2.0.2: + resolution: {integrity: sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/to-absolute-glob/download/to-absolute-glob-2.0.2.tgz} + name: to-absolute-glob + version: 2.0.2 + engines: {node: '>=0.10.0'} + dependencies: + is-absolute: registry.nlark.com/is-absolute/1.0.0 + is-negated-glob: registry.nlark.com/is-negated-glob/1.0.0 + dev: true + + registry.nlark.com/to-regex-range/2.1.1: + resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/to-regex-range/download/to-regex-range-2.1.1.tgz} + name: to-regex-range + version: 2.1.1 + engines: {node: '>=0.10.0'} + dependencies: + is-number: registry.nlark.com/is-number/3.0.0 + repeat-string: registry.nlark.com/repeat-string/1.6.1 + dev: true + + registry.nlark.com/to-regex/3.0.2: + resolution: {integrity: sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/to-regex/download/to-regex-3.0.2.tgz} + name: to-regex + version: 3.0.2 + engines: {node: '>=0.10.0'} + dependencies: + define-property: registry.nlark.com/define-property/2.0.2 + extend-shallow: registry.nlark.com/extend-shallow/3.0.2 + regex-not: registry.nlark.com/regex-not/1.0.2 + safe-regex: registry.nlark.com/safe-regex/1.1.0 + dev: true + + registry.nlark.com/to-through/2.0.0: + resolution: {integrity: sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/to-through/download/to-through-2.0.0.tgz} + name: to-through + version: 2.0.0 + engines: {node: '>= 0.10'} + dependencies: + through2: registry.nlark.com/through2/2.0.5 + dev: true + + registry.nlark.com/tty-browserify/0.0.0: + resolution: {integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/tty-browserify/download/tty-browserify-0.0.0.tgz} + name: tty-browserify + version: 0.0.0 + dev: true + + registry.nlark.com/type/1.2.0: + resolution: {integrity: sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/type/download/type-1.2.0.tgz} + name: type + version: 1.2.0 + dev: true + + registry.nlark.com/type/2.5.0: + resolution: {integrity: sha1-Ci54wud5B7JSq+XymMGwHGPw2z0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/type/download/type-2.5.0.tgz} + name: type + version: 2.5.0 + dev: true + + registry.nlark.com/typedarray/0.0.6: + resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/typedarray/download/typedarray-0.0.6.tgz} + name: typedarray + version: 0.0.6 + dev: true + + registry.nlark.com/unc-path-regex/0.1.2: + resolution: {integrity: sha1-5z3T17DXxe2G+6xrCufYxqadUPo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/unc-path-regex/download/unc-path-regex-0.1.2.tgz} + name: unc-path-regex + version: 0.1.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/undertaker/1.3.0: + resolution: {integrity: sha1-NjpuVB8nlU1Xkdb6PB0yFmb4bRg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/undertaker/download/undertaker-1.3.0.tgz} + name: undertaker + version: 1.3.0 + engines: {node: '>= 0.10'} + dependencies: + arr-flatten: registry.npmmirror.com/arr-flatten/1.1.0 + arr-map: registry.nlark.com/arr-map/2.0.2 + bach: registry.nlark.com/bach/1.2.0 + collection-map: registry.nlark.com/collection-map/1.0.0 + es6-weak-map: registry.nlark.com/es6-weak-map/2.0.3 + fast-levenshtein: registry.nlark.com/fast-levenshtein/1.1.4 + last-run: registry.npmmirror.com/last-run/1.1.1 + object.defaults: registry.nlark.com/object.defaults/1.1.0 + object.reduce: registry.nlark.com/object.reduce/1.0.1 + undertaker-registry: registry.npmmirror.com/undertaker-registry/1.0.1 + dev: true + + registry.nlark.com/unidecode/0.1.8: + resolution: {integrity: sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/unidecode/download/unidecode-0.1.8.tgz} + name: unidecode + version: 0.1.8 + engines: {node: '>= 0.4.12'} + dev: true + + registry.nlark.com/unique-stream/2.3.1: + resolution: {integrity: sha1-xl0RDppK35psWUiygFPZqNBMvqw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/unique-stream/download/unique-stream-2.3.1.tgz} + name: unique-stream + version: 2.3.1 + dependencies: + json-stable-stringify-without-jsonify: registry.nlark.com/json-stable-stringify-without-jsonify/1.0.1 + through2-filter: registry.nlark.com/through2-filter/3.0.0 + dev: true + + registry.nlark.com/universalify/2.0.0: + resolution: {integrity: sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/universalify/download/universalify-2.0.0.tgz} + name: universalify + version: 2.0.0 + engines: {node: '>= 10.0.0'} + dev: true + + registry.nlark.com/url-slug/2.0.0: + resolution: {integrity: sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/url-slug/download/url-slug-2.0.0.tgz} + name: url-slug + version: 2.0.0 + dependencies: + unidecode: registry.nlark.com/unidecode/0.1.8 + dev: true + + registry.nlark.com/use/3.1.1: + resolution: {integrity: sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/use/download/use-3.1.1.tgz} + name: use + version: 3.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.nlark.com/util-deprecate/1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz} + name: util-deprecate + version: 1.0.2 + dev: true + + registry.nlark.com/utils-merge/1.0.1: + resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/utils-merge/download/utils-merge-1.0.1.tgz} + name: utils-merge + version: 1.0.1 + engines: {node: '>= 0.4.0'} + dev: true + + registry.nlark.com/value-or-function/3.0.0: + resolution: {integrity: sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/value-or-function/download/value-or-function-3.0.0.tgz} + name: value-or-function + version: 3.0.0 + engines: {node: '>= 0.10'} + dev: true + + registry.nlark.com/vinyl-fs/3.0.3: + resolution: {integrity: sha1-yFhJQF9nQo/qu71cXb3WT0fTG8c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/vinyl-fs/download/vinyl-fs-3.0.3.tgz} + name: vinyl-fs + version: 3.0.3 + engines: {node: '>= 0.10'} + dependencies: + fs-mkdirp-stream: registry.nlark.com/fs-mkdirp-stream/1.0.0 + glob-stream: registry.npmmirror.com/glob-stream/6.1.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + is-valid-glob: registry.nlark.com/is-valid-glob/1.0.0 + lazystream: registry.npmmirror.com/lazystream/1.0.1 + lead: registry.nlark.com/lead/1.0.0 + object.assign: registry.nlark.com/object.assign/4.1.2 + pumpify: registry.nlark.com/pumpify/1.5.1 + readable-stream: registry.nlark.com/readable-stream/2.3.7 + remove-bom-buffer: registry.nlark.com/remove-bom-buffer/3.0.0 + remove-bom-stream: registry.nlark.com/remove-bom-stream/1.2.0 + resolve-options: registry.nlark.com/resolve-options/1.1.0 + through2: registry.nlark.com/through2/2.0.5 + to-through: registry.nlark.com/to-through/2.0.0 + value-or-function: registry.nlark.com/value-or-function/3.0.0 + vinyl: registry.nlark.com/vinyl/2.2.1 + vinyl-sourcemap: registry.nlark.com/vinyl-sourcemap/1.1.0 + dev: true + + registry.nlark.com/vinyl-sourcemap/1.1.0: + resolution: {integrity: sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/vinyl-sourcemap/download/vinyl-sourcemap-1.1.0.tgz} + name: vinyl-sourcemap + version: 1.1.0 + engines: {node: '>= 0.10'} + dependencies: + append-buffer: registry.nlark.com/append-buffer/1.0.2 + convert-source-map: registry.nlark.com/convert-source-map/1.8.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + normalize-path: registry.nlark.com/normalize-path/2.1.1 + now-and-later: registry.nlark.com/now-and-later/2.0.1 + remove-bom-buffer: registry.nlark.com/remove-bom-buffer/3.0.0 + vinyl: registry.nlark.com/vinyl/2.2.1 + dev: true + + registry.nlark.com/vinyl/2.2.1: + resolution: {integrity: sha1-I8+4u6tezjgDqiwKHrKK98u6GXQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/vinyl/download/vinyl-2.2.1.tgz} + name: vinyl + version: 2.2.1 + engines: {node: '>= 0.10'} + dependencies: + clone: registry.nlark.com/clone/2.1.2 + clone-buffer: registry.npmmirror.com/clone-buffer/1.0.0 + clone-stats: registry.nlark.com/clone-stats/1.0.0 + cloneable-readable: registry.nlark.com/cloneable-readable/1.1.3 + remove-trailing-separator: registry.nlark.com/remove-trailing-separator/1.1.0 + replace-ext: registry.nlark.com/replace-ext/1.0.1 + dev: true + + registry.nlark.com/which-module/1.0.0: + resolution: {integrity: sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/which-module/download/which-module-1.0.0.tgz} + name: which-module + version: 1.0.0 + dev: true + + registry.nlark.com/which/1.3.1: + resolution: {integrity: sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1631509556835&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz} + name: which + version: 1.3.1 + hasBin: true + dependencies: + isexe: registry.nlark.com/isexe/2.0.0 + dev: true + + registry.nlark.com/wrap-ansi/2.1.0: + resolution: {integrity: sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/wrap-ansi/download/wrap-ansi-2.1.0.tgz} + name: wrap-ansi + version: 2.1.0 + engines: {node: '>=0.10.0'} + dependencies: + string-width: registry.npmmirror.com/string-width/1.0.2 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + dev: true + + registry.nlark.com/wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz} + name: wrappy + version: 1.0.2 + dev: true + + registry.nlark.com/write-file-atomic/2.4.1: + resolution: {integrity: sha1-0LBUY8GIroBDlv1asqNwBir4dSk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/write-file-atomic/download/write-file-atomic-2.4.1.tgz} + name: write-file-atomic + version: 2.4.1 + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + dev: true + + registry.nlark.com/write/1.0.3: + resolution: {integrity: sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/write/download/write-1.0.3.tgz} + name: write + version: 1.0.3 + engines: {node: '>=4'} + dependencies: + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + dev: true + + registry.nlark.com/xtend/4.0.2: + resolution: {integrity: sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/xtend/download/xtend-4.0.2.tgz} + name: xtend + version: 4.0.2 + engines: {node: '>=0.4'} + dev: true + + registry.nlark.com/y18n/3.2.2: + resolution: {integrity: sha1-hckBvWRwznH8S7cjrSCbcPfyhpY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/y18n/download/y18n-3.2.2.tgz} + name: y18n + version: 3.2.2 + dev: true + + registry.nlark.com/zrender/4.3.2: + resolution: {integrity: sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/zrender/download/zrender-4.3.2.tgz} + name: zrender + version: 4.3.2 + dev: false + + registry.npmmirror.com/@ant-design/colors/5.1.1: + resolution: {integrity: sha512-Txy4KpHrp3q4XZdfgOBqLl+lkQIc3tEvHXOimRN1giX1AEC7mGtyrO9p8iRGJ3FLuVMGa2gNEzQyghVymLttKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/colors/-/colors-5.1.1.tgz} + name: '@ant-design/colors' + version: 5.1.1 + dependencies: + '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor/3.4.0 + dev: false + + registry.npmmirror.com/@ant-design/icons-svg/4.2.1: + resolution: {integrity: sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz} + name: '@ant-design/icons-svg' + version: 4.2.1 + dev: false + + registry.npmmirror.com/@ant-design/icons-vue/6.0.1_vue@3.2.26: + resolution: {integrity: sha512-HigIgEVV6bbcrz2A92/qDzi/aKWB5EC6b6E1mxMB6aQA7ksiKY+gi4U94TpqyEIIhR23uaDrjufJ+xCZQ+vx6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.0.1.tgz} + id: registry.npmmirror.com/@ant-design/icons-vue/6.0.1 + name: '@ant-design/icons-vue' + version: 6.0.1 + peerDependencies: + vue: '>=3.0.3' + dependencies: + '@ant-design/colors': registry.npmmirror.com/@ant-design/colors/5.1.1 + '@ant-design/icons-svg': registry.npmmirror.com/@ant-design/icons-svg/4.2.1 + '@types/lodash': registry.npmmirror.com/@types/lodash/4.14.178 + lodash: registry.npmmirror.com/lodash/4.17.21 + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/@babel/code-frame/7.16.7: + resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz} + name: '@babel/code-frame' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': registry.npmmirror.com/@babel/highlight/7.16.7 + dev: true + + registry.npmmirror.com/@babel/compat-data/7.16.8: + resolution: {integrity: sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.16.8.tgz} + name: '@babel/compat-data' + version: 7.16.8 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/@babel/core/7.16.7: + resolution: {integrity: sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.16.7.tgz} + name: '@babel/core' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + '@babel/generator': registry.npmmirror.com/@babel/generator/7.16.8 + '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7 + '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.16.7 + '@babel/helpers': registry.npmmirror.com/@babel/helpers/7.16.7 + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + convert-source-map: registry.npmmirror.com/convert-source-map/1.8.0 + debug: registry.npmmirror.com/debug/4.3.3 + gensync: registry.npmmirror.com/gensync/1.0.0-beta.2 + json5: registry.npmmirror.com/json5/2.2.0 + semver: registry.npmmirror.com/semver/6.3.0 + source-map: registry.npmmirror.com/source-map/0.5.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/generator/7.16.8: + resolution: {integrity: sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.16.8.tgz} + name: '@babel/generator' + version: 7.16.8 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + jsesc: registry.npmmirror.com/jsesc/2.5.2 + source-map: registry.npmmirror.com/source-map/0.5.7 + dev: true + + registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7: + resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz} + name: '@babel/helper-annotate-as-pure' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.16.7: + resolution: {integrity: sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz} + name: '@babel/helper-builder-binary-assignment-operator-visitor' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-explode-assignable-expression': registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.16.7 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz} + id: registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7 + name: '@babel/helper-compilation-targets' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.16.8 + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.16.7 + browserslist: registry.npmmirror.com/browserslist/4.19.1 + semver: registry.npmmirror.com/semver/6.3.0 + dev: true + + registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz} + id: registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.16.7 + name: '@babel/helper-create-class-features-plugin' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 + '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 + '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.16.7 + '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.16.7 + '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7 + '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.16.7 + '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz} + id: registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.16.7 + name: '@babel/helper-create-regexp-features-plugin' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 + regexpu-core: registry.npmmirror.com/regexpu-core/4.8.0 + dev: true + + registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.0_@babel+core@7.16.7: + resolution: {integrity: sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz} + id: registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.0 + name: '@babel/helper-define-polyfill-provider' + version: 0.3.0 + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7 + '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + debug: registry.npmmirror.com/debug/4.3.3 + lodash.debounce: registry.npmmirror.com/lodash.debounce/4.0.8 + resolve: registry.npmmirror.com/resolve/1.21.0 + semver: registry.npmmirror.com/semver/6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7: + resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz} + name: '@babel/helper-environment-visitor' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.16.7: + resolution: {integrity: sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz} + name: '@babel/helper-explode-assignable-expression' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-function-name/7.16.7: + resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz} + name: '@babel/helper-function-name' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-get-function-arity': registry.npmmirror.com/@babel/helper-get-function-arity/7.16.7 + '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-get-function-arity/7.16.7: + resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz} + name: '@babel/helper-get-function-arity' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-hoist-variables/7.16.7: + resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz} + name: '@babel/helper-hoist-variables' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.16.7: + resolution: {integrity: sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz} + name: '@babel/helper-member-expression-to-functions' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-module-imports/7.16.7: + resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz} + name: '@babel/helper-module-imports' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-module-transforms/7.16.7: + resolution: {integrity: sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz} + name: '@babel/helper-module-transforms' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 + '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 + '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.16.7 + '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 + '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 + '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7: + resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz} + name: '@babel/helper-optimise-call-expression' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7: + resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz} + name: '@babel/helper-plugin-utils' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.16.8: + resolution: {integrity: sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz} + name: '@babel/helper-remap-async-to-generator' + version: 7.16.8 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 + '@babel/helper-wrap-function': registry.npmmirror.com/@babel/helper-wrap-function/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/helper-replace-supers/7.16.7: + resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz} + name: '@babel/helper-replace-supers' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 + '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.16.7 + '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/helper-simple-access/7.16.7: + resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz} + name: '@babel/helper-simple-access' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0: + resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz} + name: '@babel/helper-skip-transparent-expression-wrappers' + version: 7.16.0 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7: + resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz} + name: '@babel/helper-split-export-declaration' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7: + resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz} + name: '@babel/helper-validator-identifier' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/@babel/helper-validator-option/7.16.7: + resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz} + name: '@babel/helper-validator-option' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/@babel/helper-wrap-function/7.16.8: + resolution: {integrity: sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz} + name: '@babel/helper-wrap-function' + version: 7.16.8 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.16.7 + '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/helpers/7.16.7: + resolution: {integrity: sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.16.7.tgz} + name: '@babel/helpers' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/highlight/7.16.7: + resolution: {integrity: sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.16.7.tgz} + name: '@babel/highlight' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 + chalk: registry.npmmirror.com/chalk/2.4.2 + js-tokens: registry.npmmirror.com/js-tokens/4.0.0 + dev: true + + registry.npmmirror.com/@babel/parser/7.16.8: + resolution: {integrity: sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.16.8.tgz} + name: '@babel/parser' + version: 7.16.8 + engines: {node: '>=6.0.0'} + hasBin: true + + registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7 + name: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7 + name: '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0 + '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.16.7: + resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.16.8 + name: '@babel/plugin-proposal-async-generator-functions' + version: 7.16.8 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.16.8 + '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.16.7 + name: '@babel/plugin-proposal-class-properties' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.16.7 + name: '@babel/plugin-proposal-class-static-block' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-decorators/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-DoEpnuXK14XV9btI1k8tzNGCutMclpj4yru8aXKoHlVmbO1s+2A+g2+h4JhcjrxkFJqzbymnLG6j/niOf3iFXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-decorators/7.16.7 + name: '@babel/plugin-proposal-decorators' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-decorators': registry.npmmirror.com/@babel/plugin-syntax-decorators/7.16.7_@babel+core@7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.16.7 + name: '@babel/plugin-proposal-dynamic-import' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.16.7 + name: '@babel/plugin-proposal-export-namespace-from' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.16.7 + name: '@babel/plugin-proposal-json-strings' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.16.7 + name: '@babel/plugin-proposal-logical-assignment-operators' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.16.7 + name: '@babel/plugin-proposal-nullish-coalescing-operator' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.16.7 + name: '@babel/plugin-proposal-numeric-separator' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.16.7 + name: '@babel/plugin-proposal-object-rest-spread' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.16.8 + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.7 + '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.16.7 + name: '@babel/plugin-proposal-optional-catch-binding' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7 + name: '@babel/plugin-proposal-optional-chaining' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0 + '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.16.7 + name: '@babel/plugin-proposal-private-methods' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.16.7 + name: '@babel/plugin-proposal-private-property-in-object' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 + '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7 + name: '@babel/plugin-proposal-unicode-property-regex' + version: 7.16.7 + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.16.7: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4 + name: '@babel/plugin-syntax-async-generators' + version: 7.8.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.16.7: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13 + name: '@babel/plugin-syntax-class-properties' + version: 7.12.13 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.16.7: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5 + name: '@babel/plugin-syntax-class-static-block' + version: 7.14.5 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-decorators/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-decorators/7.16.7 + name: '@babel/plugin-syntax-decorators' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.16.7: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3 + name: '@babel/plugin-syntax-dynamic-import' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.16.7: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3 + name: '@babel/plugin-syntax-export-namespace-from' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.16.7: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3 + name: '@babel/plugin-syntax-json-strings' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7 + name: '@babel/plugin-syntax-jsx' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.16.7: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4 + name: '@babel/plugin-syntax-logical-assignment-operators' + version: 7.10.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.16.7: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3 + name: '@babel/plugin-syntax-nullish-coalescing-operator' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.16.7: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4 + name: '@babel/plugin-syntax-numeric-separator' + version: 7.10.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.7: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3 + name: '@babel/plugin-syntax-object-rest-spread' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.16.7: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3 + name: '@babel/plugin-syntax-optional-catch-binding' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.16.7: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3 + name: '@babel/plugin-syntax-optional-chaining' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.16.7: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5 + name: '@babel/plugin-syntax-private-property-in-object' + version: 7.14.5 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.16.7: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz} + id: registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5 + name: '@babel/plugin-syntax-top-level-await' + version: 7.14.5 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.16.7 + name: '@babel/plugin-transform-arrow-functions' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.16.7: + resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.16.8 + name: '@babel/plugin-transform-async-to-generator' + version: 7.16.8 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.16.7 + name: '@babel/plugin-transform-block-scoped-functions' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.16.7 + name: '@babel/plugin-transform-block-scoping' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-classes/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-classes/7.16.7 + name: '@babel/plugin-transform-classes' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 + '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 + '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.16.7 + '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.16.7 + '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 + globals: registry.npmmirror.com/globals/11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.16.7 + name: '@babel/plugin-transform-computed-properties' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-destructuring/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-destructuring/7.16.7 + name: '@babel/plugin-transform-destructuring' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7 + name: '@babel/plugin-transform-dotall-regex' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.16.7 + name: '@babel/plugin-transform-duplicate-keys' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.16.7 + name: '@babel/plugin-transform-exponentiation-operator' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-builder-binary-assignment-operator-visitor': registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-for-of/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-for-of/7.16.7 + name: '@babel/plugin-transform-for-of' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-function-name/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-function-name/7.16.7 + name: '@babel/plugin-transform-function-name' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7 + '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-literals/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-literals/7.16.7 + name: '@babel/plugin-transform-literals' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.16.7 + name: '@babel/plugin-transform-member-expression-literals' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.16.7 + name: '@babel/plugin-transform-modules-amd' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.16.8: + resolution: {integrity: sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz} + name: '@babel/plugin-transform-modules-commonjs' + version: 7.16.8 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.16.7 + babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.16.8_@babel+core@7.16.7: + resolution: {integrity: sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.16.8 + name: '@babel/plugin-transform-modules-commonjs' + version: 7.16.8 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.16.7 + babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.16.7 + name: '@babel/plugin-transform-modules-systemjs' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.16.7 + '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 + babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.16.7 + name: '@babel/plugin-transform-modules-umd' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.16.7: + resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.16.8 + name: '@babel/plugin-transform-named-capturing-groups-regex' + version: 7.16.8 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.16.7_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-new-target/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-new-target/7.16.7 + name: '@babel/plugin-transform-new-target' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-object-super/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-object-super/7.16.7 + name: '@babel/plugin-transform-object-super' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7 + name: '@babel/plugin-transform-parameters' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-property-literals/7.16.7 + name: '@babel/plugin-transform-property-literals' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-regenerator/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-regenerator/7.16.7 + name: '@babel/plugin-transform-regenerator' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + regenerator-transform: registry.npmmirror.com/regenerator-transform/0.14.5 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.16.7 + name: '@babel/plugin-transform-reserved-words' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-runtime/7.16.8_@babel+core@7.16.7: + resolution: {integrity: sha512-6Kg2XHPFnIarNweZxmzbgYnnWsXxkx9WQUVk2sksBRL80lBC1RAQV3wQagWxdCHiYHqPN+oenwNIuttlYgIbQQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.8.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-runtime/7.16.8 + name: '@babel/plugin-transform-runtime' + version: 7.16.8 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + babel-plugin-polyfill-corejs2: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.0_@babel+core@7.16.7 + babel-plugin-polyfill-corejs3: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.5.0_@babel+core@7.16.7 + babel-plugin-polyfill-regenerator: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.3.0_@babel+core@7.16.7 + semver: registry.npmmirror.com/semver/6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.16.7 + name: '@babel/plugin-transform-shorthand-properties' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-spread/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-spread/7.16.7 + name: '@babel/plugin-transform-spread' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.16.7 + name: '@babel/plugin-transform-sticky-regex' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-template-literals/7.16.7 + name: '@babel/plugin-transform-template-literals' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.16.7 + name: '@babel/plugin-transform-typeof-symbol' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.16.7 + name: '@babel/plugin-transform-unicode-escapes' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz} + id: registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.16.7 + name: '@babel/plugin-transform-unicode-regex' + version: 7.16.7 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + dev: true + + registry.npmmirror.com/@babel/preset-env/7.16.8_@babel+core@7.16.7: + resolution: {integrity: sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.16.8.tgz} + id: registry.npmmirror.com/@babel/preset-env/7.16.8 + name: '@babel/preset-env' + version: 7.16.8 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.16.8 + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.16.7 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.16.7 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-async-generator-functions': registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.16.7 + '@babel/plugin-proposal-class-properties': registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-class-static-block': registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-dynamic-import': registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-export-namespace-from': registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-json-strings': registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-numeric-separator': registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-object-rest-spread': registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-optional-catch-binding': registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-private-methods': registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-private-property-in-object': registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.16.7 + '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.16.7 + '@babel/plugin-syntax-class-properties': registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.16.7 + '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.16.7 + '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.16.7 + '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.16.7 + '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.16.7 + '@babel/plugin-syntax-top-level-await': registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.16.7 + '@babel/plugin-transform-arrow-functions': registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-async-to-generator': registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.16.7 + '@babel/plugin-transform-block-scoped-functions': registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-block-scoping': registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-classes': registry.npmmirror.com/@babel/plugin-transform-classes/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-computed-properties': registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-destructuring': registry.npmmirror.com/@babel/plugin-transform-destructuring/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-duplicate-keys': registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-exponentiation-operator': registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-for-of': registry.npmmirror.com/@babel/plugin-transform-for-of/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-function-name': registry.npmmirror.com/@babel/plugin-transform-function-name/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-literals': registry.npmmirror.com/@babel/plugin-transform-literals/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-member-expression-literals': registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-modules-amd': registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-modules-commonjs': registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.16.8_@babel+core@7.16.7 + '@babel/plugin-transform-modules-systemjs': registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-modules-umd': registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-named-capturing-groups-regex': registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.16.7 + '@babel/plugin-transform-new-target': registry.npmmirror.com/@babel/plugin-transform-new-target/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-object-super': registry.npmmirror.com/@babel/plugin-transform-object-super/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-property-literals': registry.npmmirror.com/@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-regenerator': registry.npmmirror.com/@babel/plugin-transform-regenerator/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-reserved-words': registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-shorthand-properties': registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-spread': registry.npmmirror.com/@babel/plugin-transform-spread/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-sticky-regex': registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-template-literals': registry.npmmirror.com/@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-typeof-symbol': registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-unicode-escapes': registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-unicode-regex': registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.16.7 + '@babel/preset-modules': registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.16.7 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + babel-plugin-polyfill-corejs2: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.0_@babel+core@7.16.7 + babel-plugin-polyfill-corejs3: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.5.0_@babel+core@7.16.7 + babel-plugin-polyfill-regenerator: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.3.0_@babel+core@7.16.7 + core-js-compat: registry.npmmirror.com/core-js-compat/3.20.2 + semver: registry.npmmirror.com/semver/6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.16.7: + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz} + id: registry.npmmirror.com/@babel/preset-modules/0.1.5 + name: '@babel/preset-modules' + version: 0.1.5 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.16.7 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + esutils: registry.npmmirror.com/esutils/2.0.3 + dev: true + + registry.npmmirror.com/@babel/runtime/7.16.7: + resolution: {integrity: sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.16.7.tgz} + name: '@babel/runtime' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.9 + + registry.npmmirror.com/@babel/template/7.16.7: + resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.16.7.tgz} + name: '@babel/template' + version: 7.16.7 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@babel/traverse/7.16.8: + resolution: {integrity: sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.16.8.tgz} + name: '@babel/traverse' + version: 7.16.8 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + '@babel/generator': registry.npmmirror.com/@babel/generator/7.16.8 + '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 + '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.16.7 + '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.16.7 + '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + debug: registry.npmmirror.com/debug/4.3.3 + globals: registry.npmmirror.com/globals/11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@babel/types/7.16.8: + resolution: {integrity: sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.16.8.tgz} + name: '@babel/types' + version: 7.16.8 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 + to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0 + dev: true + + registry.npmmirror.com/@ckeditor/ckeditor5-build-decoupled-document/23.1.0: + resolution: {integrity: sha512-dn8/Cw3wf75ZybMLfmPy1ZtitObi6YTHPeavkyu0TVDbJhefpBL+gKWRrTptpvNk3Txw40zWU5MYq0225FpPkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ckeditor/ckeditor5-build-decoupled-document/-/ckeditor5-build-decoupled-document-23.1.0.tgz} + name: '@ckeditor/ckeditor5-build-decoupled-document' + version: 23.1.0 + engines: {node: '>=12.0.0', npm: '>=5.7.1'} + dev: false + + registry.npmmirror.com/@ckeditor/ckeditor5-vue/2.0.1: + resolution: {integrity: sha512-EriE1OQVNj1uhn3UL3myYY3JTfcUWHO46Yqga8U+/61V5vU3tIV6Z7/9q/MYe8UcFk0AM1sZcYXaKvWW57vnwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ckeditor/ckeditor5-vue/-/ckeditor5-vue-2.0.1.tgz} + name: '@ckeditor/ckeditor5-vue' + version: 2.0.1 + engines: {node: '>=8.0.0', npm: '>=5.7.1'} + dev: false + + registry.npmmirror.com/@cnakazawa/watch/1.0.4: + resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@cnakazawa/watch/-/watch-1.0.4.tgz} + name: '@cnakazawa/watch' + version: 1.0.4 + engines: {node: '>=0.1.95'} + hasBin: true + dependencies: + exec-sh: registry.npmmirror.com/exec-sh/0.3.6 + minimist: registry.npmmirror.com/minimist/1.2.5 + dev: true + + registry.npmmirror.com/@ctrl/tinycolor/3.4.0: + resolution: {integrity: sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz} + name: '@ctrl/tinycolor' + version: 3.4.0 + engines: {node: '>=10'} + dev: false + + registry.npmmirror.com/@element-plus/icons-vue/0.2.4_vue@3.2.26: + resolution: {integrity: sha512-RsJNyL58rwxtsjeMy34o8txkL6UlME1stWsUlRpTac6UE9Bx9gdJvnDXbIKhOJqBLX17fBjmposdrn6VTqim2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-0.2.4.tgz} + id: registry.npmmirror.com/@element-plus/icons-vue/0.2.4 + name: '@element-plus/icons-vue' + version: 0.2.4 + peerDependencies: + vue: ^3.2.0 + dependencies: + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/@hapi/address/2.1.4: + resolution: {integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/address/-/address-2.1.4.tgz} + name: '@hapi/address' + version: 2.1.4 + deprecated: Moved to 'npm install @sideway/address' + dev: true + + registry.npmmirror.com/@hapi/bourne/1.3.2: + resolution: {integrity: sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/bourne/-/bourne-1.3.2.tgz} + name: '@hapi/bourne' + version: 1.3.2 + deprecated: This version has been deprecated and is no longer supported or maintained + dev: true + + registry.npmmirror.com/@hapi/hoek/8.5.1: + resolution: {integrity: sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/hoek/-/hoek-8.5.1.tgz} + name: '@hapi/hoek' + version: 8.5.1 + deprecated: This version has been deprecated and is no longer supported or maintained + dev: true + + registry.npmmirror.com/@hapi/joi/15.1.1: + resolution: {integrity: sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/joi/-/joi-15.1.1.tgz} + name: '@hapi/joi' + version: 15.1.1 + deprecated: Switch to 'npm install joi' + dependencies: + '@hapi/address': registry.npmmirror.com/@hapi/address/2.1.4 + '@hapi/bourne': registry.npmmirror.com/@hapi/bourne/1.3.2 + '@hapi/hoek': registry.npmmirror.com/@hapi/hoek/8.5.1 + '@hapi/topo': registry.npmmirror.com/@hapi/topo/3.1.6 + dev: true + + registry.npmmirror.com/@hapi/topo/3.1.6: + resolution: {integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hapi/topo/-/topo-3.1.6.tgz} + name: '@hapi/topo' + version: 3.1.6 + deprecated: This version has been deprecated and is no longer supported or maintained + dependencies: + '@hapi/hoek': registry.npmmirror.com/@hapi/hoek/8.5.1 + dev: true + + registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/1.0.6_webpack@4.46.0: + resolution: {integrity: sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz} + id: registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/1.0.6 + name: '@intervolga/optimize-cssnano-plugin' + version: 1.0.6 + peerDependencies: + webpack: ^4.0.0 + dependencies: + cssnano: registry.npmmirror.com/cssnano/4.1.11 + cssnano-preset-default: registry.npmmirror.com/cssnano-preset-default/4.0.8 + postcss: registry.npmmirror.com/postcss/7.0.39 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/@intlify/core-base/9.1.9: + resolution: {integrity: sha1-5OjJUQEHKOSvOg0T10zz+eet1/Y=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/core-base/download/@intlify/core-base-9.1.9.tgz} + name: '@intlify/core-base' + version: 9.1.9 + engines: {node: '>= 10'} + dependencies: + '@intlify/devtools-if': registry.npmmirror.com/@intlify/devtools-if/9.1.9 + '@intlify/message-compiler': registry.npmmirror.com/@intlify/message-compiler/9.1.9 + '@intlify/message-resolver': registry.npmmirror.com/@intlify/message-resolver/9.1.9 + '@intlify/runtime': registry.npmmirror.com/@intlify/runtime/9.1.9 + '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.1.9 + '@intlify/vue-devtools': registry.npmmirror.com/@intlify/vue-devtools/9.1.9 + dev: false + + registry.npmmirror.com/@intlify/devtools-if/9.1.9: + resolution: {integrity: sha1-ow4d0SVv8sXJjY110HU4T7qJjl0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/devtools-if/download/@intlify/devtools-if-9.1.9.tgz} + name: '@intlify/devtools-if' + version: 9.1.9 + engines: {node: '>= 10'} + dependencies: + '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.1.9 + dev: false + + registry.npmmirror.com/@intlify/message-compiler/9.1.9: + resolution: {integrity: sha1-EZPL0iSnHC+5gUVbhTSjx2bSlI0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/message-compiler/download/@intlify/message-compiler-9.1.9.tgz} + name: '@intlify/message-compiler' + version: 9.1.9 + engines: {node: '>= 10'} + dependencies: + '@intlify/message-resolver': registry.npmmirror.com/@intlify/message-resolver/9.1.9 + '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.1.9 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: false + + registry.npmmirror.com/@intlify/message-resolver/9.1.9: + resolution: {integrity: sha1-MVXM0vXm0NwWyti38djpf82gW/w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/message-resolver/download/@intlify/message-resolver-9.1.9.tgz} + name: '@intlify/message-resolver' + version: 9.1.9 + engines: {node: '>= 10'} + dev: false + + registry.npmmirror.com/@intlify/runtime/9.1.9: + resolution: {integrity: sha1-LBLOKVGKB1Yp7+0KjtKT7nQMsoU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/runtime/download/@intlify/runtime-9.1.9.tgz} + name: '@intlify/runtime' + version: 9.1.9 + engines: {node: '>= 10'} + dependencies: + '@intlify/message-compiler': registry.npmmirror.com/@intlify/message-compiler/9.1.9 + '@intlify/message-resolver': registry.npmmirror.com/@intlify/message-resolver/9.1.9 + '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.1.9 + dev: false + + registry.npmmirror.com/@intlify/shared/9.1.9: + resolution: {integrity: sha1-C6r5YSi4VWBma+x4T/sB9mI8wXo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/shared/download/@intlify/shared-9.1.9.tgz} + name: '@intlify/shared' + version: 9.1.9 + engines: {node: '>= 10'} + dev: false + + registry.npmmirror.com/@intlify/vue-devtools/9.1.9: + resolution: {integrity: sha1-K+j02+f37UEVZ26zI0gUHUEeQms=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/vue-devtools/download/@intlify/vue-devtools-9.1.9.tgz} + name: '@intlify/vue-devtools' + version: 9.1.9 + engines: {node: '>= 10'} + dependencies: + '@intlify/message-resolver': registry.npmmirror.com/@intlify/message-resolver/9.1.9 + '@intlify/runtime': registry.npmmirror.com/@intlify/runtime/9.1.9 + '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.1.9 + dev: false + + registry.npmmirror.com/@jest/console/24.9.0: + resolution: {integrity: sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/console/-/console-24.9.0.tgz} + name: '@jest/console' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/source-map': registry.npmmirror.com/@jest/source-map/24.9.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + slash: registry.npmmirror.com/slash/2.0.0 + dev: true + + registry.npmmirror.com/@jest/core/24.9.0: + resolution: {integrity: sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/core/-/core-24.9.0.tgz} + name: '@jest/core' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/console': registry.npmmirror.com/@jest/console/24.9.0 + '@jest/reporters': registry.npmmirror.com/@jest/reporters/24.9.0 + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/transform': registry.npmmirror.com/@jest/transform/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + ansi-escapes: registry.npmmirror.com/ansi-escapes/3.2.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + exit: registry.npmmirror.com/exit/0.1.2 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + jest-changed-files: registry.npmmirror.com/jest-changed-files/24.9.0 + jest-config: registry.npmmirror.com/jest-config/24.9.0 + jest-haste-map: registry.npmmirror.com/jest-haste-map/24.9.0 + jest-message-util: registry.npmmirror.com/jest-message-util/24.9.0 + jest-regex-util: registry.npmmirror.com/jest-regex-util/24.9.0 + jest-resolve: registry.npmmirror.com/jest-resolve/24.9.0 + jest-resolve-dependencies: registry.npmmirror.com/jest-resolve-dependencies/24.9.0 + jest-runner: registry.npmmirror.com/jest-runner/24.9.0 + jest-runtime: registry.npmmirror.com/jest-runtime/24.9.0 + jest-snapshot: registry.npmmirror.com/jest-snapshot/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jest-validate: registry.npmmirror.com/jest-validate/24.9.0 + jest-watcher: registry.npmmirror.com/jest-watcher/24.9.0 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + p-each-series: registry.npmmirror.com/p-each-series/1.0.0 + realpath-native: registry.npmmirror.com/realpath-native/1.1.0 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + slash: registry.npmmirror.com/slash/2.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@jest/environment/24.9.0: + resolution: {integrity: sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/environment/-/environment-24.9.0.tgz} + name: '@jest/environment' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/24.9.0 + '@jest/transform': registry.npmmirror.com/@jest/transform/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + jest-mock: registry.npmmirror.com/jest-mock/24.9.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@jest/fake-timers/24.9.0: + resolution: {integrity: sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz} + name: '@jest/fake-timers' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + jest-message-util: registry.npmmirror.com/jest-message-util/24.9.0 + jest-mock: registry.npmmirror.com/jest-mock/24.9.0 + dev: true + + registry.npmmirror.com/@jest/reporters/24.9.0: + resolution: {integrity: sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/reporters/-/reporters-24.9.0.tgz} + name: '@jest/reporters' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/environment': registry.npmmirror.com/@jest/environment/24.9.0 + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/transform': registry.npmmirror.com/@jest/transform/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + exit: registry.npmmirror.com/exit/0.1.2 + glob: registry.npmmirror.com/glob/7.2.0 + istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/2.0.5 + istanbul-lib-instrument: registry.npmmirror.com/istanbul-lib-instrument/3.3.0 + istanbul-lib-report: registry.npmmirror.com/istanbul-lib-report/2.0.8 + istanbul-lib-source-maps: registry.npmmirror.com/istanbul-lib-source-maps/3.0.6 + istanbul-reports: registry.npmmirror.com/istanbul-reports/2.2.7 + jest-haste-map: registry.npmmirror.com/jest-haste-map/24.9.0 + jest-resolve: registry.npmmirror.com/jest-resolve/24.9.0 + jest-runtime: registry.npmmirror.com/jest-runtime/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jest-worker: registry.npmmirror.com/jest-worker/24.9.0 + node-notifier: registry.npmmirror.com/node-notifier/5.4.5 + slash: registry.npmmirror.com/slash/2.0.0 + source-map: registry.npmmirror.com/source-map/0.6.1 + string-length: registry.npmmirror.com/string-length/2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@jest/source-map/24.9.0: + resolution: {integrity: sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/source-map/-/source-map-24.9.0.tgz} + name: '@jest/source-map' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + callsites: registry.npmmirror.com/callsites/3.1.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/@jest/test-result/24.9.0: + resolution: {integrity: sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/test-result/-/test-result-24.9.0.tgz} + name: '@jest/test-result' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/console': registry.npmmirror.com/@jest/console/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4 + dev: true + + registry.npmmirror.com/@jest/test-sequencer/24.9.0: + resolution: {integrity: sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz} + name: '@jest/test-sequencer' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + jest-haste-map: registry.npmmirror.com/jest-haste-map/24.9.0 + jest-runner: registry.npmmirror.com/jest-runner/24.9.0 + jest-runtime: registry.npmmirror.com/jest-runtime/24.9.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@jest/transform/24.9.0: + resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/transform/-/transform-24.9.0.tgz} + name: '@jest/transform' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + babel-plugin-istanbul: registry.npmmirror.com/babel-plugin-istanbul/5.2.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + convert-source-map: registry.npmmirror.com/convert-source-map/1.8.0 + fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + jest-haste-map: registry.npmmirror.com/jest-haste-map/24.9.0 + jest-regex-util: registry.npmmirror.com/jest-regex-util/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + pirates: registry.npmmirror.com/pirates/4.0.4 + realpath-native: registry.npmmirror.com/realpath-native/1.1.0 + slash: registry.npmmirror.com/slash/2.0.0 + source-map: registry.npmmirror.com/source-map/0.6.1 + write-file-atomic: registry.nlark.com/write-file-atomic/2.4.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@jest/types/24.9.0: + resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/types/-/types-24.9.0.tgz} + name: '@jest/types' + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4 + '@types/istanbul-reports': registry.npmmirror.com/@types/istanbul-reports/1.1.2 + '@types/yargs': registry.npmmirror.com/@types/yargs/13.0.12 + dev: true + + registry.npmmirror.com/@mrmlnc/readdir-enhanced/2.2.1: + resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz} + name: '@mrmlnc/readdir-enhanced' + version: 2.2.1 + engines: {node: '>=4'} + dependencies: + call-me-maybe: registry.npmmirror.com/call-me-maybe/1.0.1 + glob-to-regexp: registry.npmmirror.com/glob-to-regexp/0.3.0 + dev: true + + registry.npmmirror.com/@nodelib/fs.stat/1.1.3: + resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz} + name: '@nodelib/fs.stat' + version: 1.1.3 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} + name: '@nodelib/fs.stat' + version: 2.0.5 + engines: {node: '>= 8'} + dev: true + + registry.npmmirror.com/@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} + name: '@nodelib/fs.walk' + version: 1.2.8 + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': registry.nlark.com/@nodelib/fs.scandir/2.1.5 + fastq: registry.npmmirror.com/fastq/1.13.0 + dev: true + + registry.npmmirror.com/@popperjs/core/2.11.2: + resolution: {integrity: sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@popperjs/core/-/core-2.11.2.tgz} + name: '@popperjs/core' + version: 2.11.2 + dev: false + + registry.npmmirror.com/@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.7: + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz} + id: registry.npmmirror.com/@samverschueren/stream-to-observable/0.3.1 + name: '@samverschueren/stream-to-observable' + version: 0.3.1 + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + dependencies: + any-observable: registry.npmmirror.com/any-observable/0.3.0 + rxjs: registry.npmmirror.com/rxjs/6.6.7 + dev: true + + registry.npmmirror.com/@simonwep/pickr/1.8.2: + resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz} + name: '@simonwep/pickr' + version: 1.8.2 + dependencies: + core-js: registry.npmmirror.com/core-js/3.20.2 + nanopop: registry.npmmirror.com/nanopop/2.1.0 + dev: false + + registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/1.8.1_webpack@4.46.0: + resolution: {integrity: sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz} + id: registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/1.8.1 + name: '@soda/friendly-errors-webpack-plugin' + version: 1.8.1 + engines: {node: '>=8.0.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + chalk: registry.npmmirror.com/chalk/3.0.0 + error-stack-parser: registry.npmmirror.com/error-stack-parser/2.0.6 + string-width: registry.npmmirror.com/string-width/4.2.3 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/@soda/get-current-script/1.0.2: + resolution: {integrity: sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz} + name: '@soda/get-current-script' + version: 1.0.2 + dev: true + + registry.npmmirror.com/@toast-ui/editor/2.5.4: + resolution: {integrity: sha512-XsuYlPQxhec9dHQREFAigjE4enHSuGMF7D0YQ6wW7phmusvAu0FnJfZUPjJBoU/GKz7WP5U6fKU9/P+8j65D8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@toast-ui/editor/-/editor-2.5.4.tgz} + name: '@toast-ui/editor' + version: 2.5.4 + dependencies: + '@types/codemirror': registry.npmmirror.com/@types/codemirror/0.0.71 + codemirror: registry.npmmirror.com/codemirror/5.65.0 + dev: false + + registry.npmmirror.com/@types/babel__core/7.1.18: + resolution: {integrity: sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.1.18.tgz} + name: '@types/babel__core' + version: 7.1.18 + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + '@types/babel__generator': registry.npmmirror.com/@types/babel__generator/7.6.4 + '@types/babel__template': registry.npmmirror.com/@types/babel__template/7.4.1 + '@types/babel__traverse': registry.npmmirror.com/@types/babel__traverse/7.14.2 + dev: true + + registry.npmmirror.com/@types/babel__generator/7.6.4: + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.4.tgz} + name: '@types/babel__generator' + version: 7.6.4 + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@types/babel__template/7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.1.tgz} + name: '@types/babel__template' + version: 7.4.1 + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@types/babel__traverse/7.14.2: + resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz} + name: '@types/babel__traverse' + version: 7.14.2 + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + dev: true + + registry.npmmirror.com/@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz} + name: '@types/body-parser' + version: 1.19.2 + dependencies: + '@types/connect': registry.npmmirror.com/@types/connect/3.4.35 + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/codemirror/0.0.71: + resolution: {integrity: sha1-hh8byzEAwKBkVnxUAPKYHPSujKc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/codemirror/download/@types/codemirror-0.0.71.tgz?cache=0&sync_timestamp=1637288006585&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fcodemirror%2Fdownload%2F%40types%2Fcodemirror-0.0.71.tgz} + name: '@types/codemirror' + version: 0.0.71 + dependencies: + '@types/tern': registry.npmmirror.com/@types/tern/0.23.4 + dev: false + + registry.npmmirror.com/@types/connect-history-api-fallback/1.3.5: + resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz} + name: '@types/connect-history-api-fallback' + version: 1.3.5 + dependencies: + '@types/express-serve-static-core': registry.npmmirror.com/@types/express-serve-static-core/4.17.27 + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/connect/3.4.35: + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz} + name: '@types/connect' + version: 3.4.35 + dependencies: + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/echarts/4.9.12: + resolution: {integrity: sha512-yi5yzCRQCZDXeMcTD0W1sRENILJ98PjwG0UH/gZwADU2wsGt523RmocXakbpUOch6FHJqWwwJijsoSGNhGp4kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/echarts/-/echarts-4.9.12.tgz} + name: '@types/echarts' + version: 4.9.12 + dependencies: + '@types/zrender': registry.npmmirror.com/@types/zrender/4.0.1 + dev: true + + registry.npmmirror.com/@types/estree/0.0.50: + resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/estree/-/estree-0.0.50.tgz} + name: '@types/estree' + version: 0.0.50 + dev: false + + registry.npmmirror.com/@types/expect/1.20.4: + resolution: {integrity: sha1-gojlFze/fjq118d7+mlYg3RSZOU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/expect/download/@types/expect-1.20.4.tgz} + name: '@types/expect' + version: 1.20.4 + dev: true + + registry.npmmirror.com/@types/express-serve-static-core/4.17.27: + resolution: {integrity: sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.27.tgz} + name: '@types/express-serve-static-core' + version: 4.17.27 + dependencies: + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + '@types/qs': registry.npmmirror.com/@types/qs/6.9.7 + '@types/range-parser': registry.npmmirror.com/@types/range-parser/1.2.4 + dev: true + + registry.npmmirror.com/@types/express/4.17.13: + resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/express/-/express-4.17.13.tgz} + name: '@types/express' + version: 4.17.13 + dependencies: + '@types/body-parser': registry.npmmirror.com/@types/body-parser/1.19.2 + '@types/express-serve-static-core': registry.npmmirror.com/@types/express-serve-static-core/4.17.27 + '@types/qs': registry.npmmirror.com/@types/qs/6.9.7 + '@types/serve-static': registry.npmmirror.com/@types/serve-static/1.13.10 + dev: true + + registry.npmmirror.com/@types/fs-extra/9.0.13: + resolution: {integrity: sha1-dZT7rgT+fxkYzos9IT90/0SsH0U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/fs-extra/download/@types/fs-extra-9.0.13.tgz} + name: '@types/fs-extra' + version: 9.0.13 + dependencies: + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/glob-stream/6.1.1: + resolution: {integrity: sha1-x5LY0VFCeP8DytVomrpMSrT7yAU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/glob-stream/download/@types/glob-stream-6.1.1.tgz} + name: '@types/glob-stream' + version: 6.1.1 + dependencies: + '@types/glob': registry.npmmirror.com/@types/glob/7.2.0 + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/glob/7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz} + name: '@types/glob' + version: 7.2.0 + dependencies: + '@types/minimatch': registry.npmmirror.com/@types/minimatch/3.0.5 + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/gulp/4.0.9: + resolution: {integrity: sha1-ovlme8wmvHK0iZ3RYhbWWEoSNGw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/gulp/download/@types/gulp-4.0.9.tgz} + name: '@types/gulp' + version: 4.0.9 + dependencies: + '@types/undertaker': registry.npmmirror.com/@types/undertaker/1.2.7 + '@types/vinyl-fs': registry.npmmirror.com/@types/vinyl-fs/2.4.12 + chokidar: registry.npmmirror.com/chokidar/3.5.2 + dev: true + + registry.npmmirror.com/@types/http-proxy/1.17.8: + resolution: {integrity: sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.8.tgz} + name: '@types/http-proxy' + version: 1.17.8 + dependencies: + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz} + name: '@types/istanbul-lib-coverage' + version: 2.0.4 + dev: true + + registry.npmmirror.com/@types/istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz} + name: '@types/istanbul-lib-report' + version: 3.0.0 + dependencies: + '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4 + dev: true + + registry.npmmirror.com/@types/istanbul-reports/1.1.2: + resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz} + name: '@types/istanbul-reports' + version: 1.1.2 + dependencies: + '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4 + '@types/istanbul-lib-report': registry.npmmirror.com/@types/istanbul-lib-report/3.0.0 + dev: true + + registry.npmmirror.com/@types/jest/24.9.1: + resolution: {integrity: sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/jest/-/jest-24.9.1.tgz} + name: '@types/jest' + version: 24.9.1 + dependencies: + jest-diff: registry.npmmirror.com/jest-diff/24.9.0 + dev: true + + registry.npmmirror.com/@types/json-schema/7.0.9: + resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.9.tgz} + name: '@types/json-schema' + version: 7.0.9 + dev: true + + registry.npmmirror.com/@types/lodash.debounce/4.0.6: + resolution: {integrity: sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz} + name: '@types/lodash.debounce' + version: 4.0.6 + dependencies: + '@types/lodash': registry.npmmirror.com/@types/lodash/4.14.178 + dev: true + + registry.npmmirror.com/@types/lodash/4.14.178: + resolution: {integrity: sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.178.tgz} + name: '@types/lodash' + version: 4.14.178 + + registry.npmmirror.com/@types/mime/1.3.2: + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz} + name: '@types/mime' + version: 1.3.2 + dev: true + + registry.npmmirror.com/@types/minimatch/3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz} + name: '@types/minimatch' + version: 3.0.5 + dev: true + + registry.npmmirror.com/@types/minimist/1.2.2: + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz} + name: '@types/minimist' + version: 1.2.2 + dev: true + + registry.npmmirror.com/@types/node/17.0.8: + resolution: {integrity: sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-17.0.8.tgz} + name: '@types/node' + version: 17.0.8 + dev: true + + registry.npmmirror.com/@types/normalize-package-data/2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz} + name: '@types/normalize-package-data' + version: 2.4.1 + dev: true + + registry.npmmirror.com/@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz} + name: '@types/parse-json' + version: 4.0.0 + dev: true + optional: true + + registry.npmmirror.com/@types/q/1.5.5: + resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz} + name: '@types/q' + version: 1.5.5 + dev: true + + registry.npmmirror.com/@types/qs/6.9.7: + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz} + name: '@types/qs' + version: 6.9.7 + dev: true + + registry.npmmirror.com/@types/range-parser/1.2.4: + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz} + name: '@types/range-parser' + version: 1.2.4 + dev: true + + registry.npmmirror.com/@types/serve-static/1.13.10: + resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.13.10.tgz} + name: '@types/serve-static' + version: 1.13.10 + dependencies: + '@types/mime': registry.npmmirror.com/@types/mime/1.3.2 + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/source-list-map/0.1.2: + resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/source-list-map/-/source-list-map-0.1.2.tgz} + name: '@types/source-list-map' + version: 0.1.2 + dev: true + + registry.npmmirror.com/@types/stack-utils/1.0.1: + resolution: {integrity: sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-1.0.1.tgz} + name: '@types/stack-utils' + version: 1.0.1 + dev: true + + registry.npmmirror.com/@types/strip-bom/3.0.0: + resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/strip-bom/-/strip-bom-3.0.0.tgz} + name: '@types/strip-bom' + version: 3.0.0 + dev: true + + registry.npmmirror.com/@types/tapable/1.0.8: + resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/tapable/-/tapable-1.0.8.tgz} + name: '@types/tapable' + version: 1.0.8 + dev: true + + registry.npmmirror.com/@types/tern/0.23.4: + resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/tern/-/tern-0.23.4.tgz} + name: '@types/tern' + version: 0.23.4 + dependencies: + '@types/estree': registry.npmmirror.com/@types/estree/0.0.50 + dev: false + + registry.npmmirror.com/@types/uglify-js/3.13.1: + resolution: {integrity: sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/uglify-js/-/uglify-js-3.13.1.tgz} + name: '@types/uglify-js' + version: 3.13.1 + dependencies: + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/@types/undertaker-registry/1.0.1: + resolution: {integrity: sha1-QwbUoD16ztuXS2ZTCDK5Bynh0do=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/undertaker-registry/download/@types/undertaker-registry-1.0.1.tgz} + name: '@types/undertaker-registry' + version: 1.0.1 + dev: true + + registry.npmmirror.com/@types/undertaker/1.2.7: + resolution: {integrity: sha1-icN/075VYUGkCSs4+LxQMHaAPSE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/undertaker/download/@types/undertaker-1.2.7.tgz} + name: '@types/undertaker' + version: 1.2.7 + dependencies: + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + '@types/undertaker-registry': registry.npmmirror.com/@types/undertaker-registry/1.0.1 + async-done: registry.nlark.com/async-done/1.3.2 + dev: true + + registry.npmmirror.com/@types/vinyl-fs/2.4.12: + resolution: {integrity: sha1-e0Zz2bTVqHTIZS0Q8PAmVHkBTI4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/vinyl-fs/download/@types/vinyl-fs-2.4.12.tgz} + name: '@types/vinyl-fs' + version: 2.4.12 + dependencies: + '@types/glob-stream': registry.npmmirror.com/@types/glob-stream/6.1.1 + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + '@types/vinyl': registry.npmmirror.com/@types/vinyl/2.0.6 + dev: true + + registry.npmmirror.com/@types/vinyl/2.0.6: + resolution: {integrity: sha1-stE0YDVXp8PStdPcI4Y+orXrKbA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/vinyl/download/@types/vinyl-2.0.6.tgz} + name: '@types/vinyl' + version: 2.0.6 + dependencies: + '@types/expect': registry.npmmirror.com/@types/expect/1.20.4 + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + dev: true + + registry.npmmirror.com/@types/webpack-dev-server/3.11.6_debug@4.3.3: + resolution: {integrity: sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz} + id: registry.npmmirror.com/@types/webpack-dev-server/3.11.6 + name: '@types/webpack-dev-server' + version: 3.11.6 + dependencies: + '@types/connect-history-api-fallback': registry.npmmirror.com/@types/connect-history-api-fallback/1.3.5 + '@types/express': registry.npmmirror.com/@types/express/4.17.13 + '@types/serve-static': registry.npmmirror.com/@types/serve-static/1.13.10 + '@types/webpack': registry.npmmirror.com/@types/webpack/4.41.32 + http-proxy-middleware: registry.npmmirror.com/http-proxy-middleware/1.3.1_debug@4.3.3 + transitivePeerDependencies: + - debug + dev: true + + registry.npmmirror.com/@types/webpack-env/1.16.3: + resolution: {integrity: sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/webpack-env/-/webpack-env-1.16.3.tgz} + name: '@types/webpack-env' + version: 1.16.3 + dev: true + + registry.npmmirror.com/@types/webpack-sources/3.2.0: + resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz} + name: '@types/webpack-sources' + version: 3.2.0 + dependencies: + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + '@types/source-list-map': registry.npmmirror.com/@types/source-list-map/0.1.2 + source-map: registry.npmmirror.com/source-map/0.7.3 + dev: true + + registry.npmmirror.com/@types/webpack/4.41.32: + resolution: {integrity: sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/webpack/-/webpack-4.41.32.tgz} + name: '@types/webpack' + version: 4.41.32 + dependencies: + '@types/node': registry.npmmirror.com/@types/node/17.0.8 + '@types/tapable': registry.npmmirror.com/@types/tapable/1.0.8 + '@types/uglify-js': registry.npmmirror.com/@types/uglify-js/3.13.1 + '@types/webpack-sources': registry.npmmirror.com/@types/webpack-sources/3.2.0 + anymatch: registry.npmmirror.com/anymatch/3.1.2 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/@types/yargs-parser/20.2.1: + resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz} + name: '@types/yargs-parser' + version: 20.2.1 + dev: true + + registry.npmmirror.com/@types/yargs/13.0.12: + resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/yargs/-/yargs-13.0.12.tgz} + name: '@types/yargs' + version: 13.0.12 + dependencies: + '@types/yargs-parser': registry.npmmirror.com/@types/yargs-parser/20.2.1 + dev: true + + registry.npmmirror.com/@types/zrender/4.0.1: + resolution: {integrity: sha512-IyTRf30jPOXK1+1RChI/78U6aV9hyWYf/vhL96Vt66oDz9es/BDjeKpvbNZSOHVA7zAReOwJcmdZS5AGAqhygw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/zrender/-/zrender-4.0.1.tgz} + name: '@types/zrender' + version: 4.0.1 + dev: true + + registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0_e66a0234d36070dcc49614ed7c477ee7: + resolution: {integrity: sha1-wk3HyAacdwa8QNmfb6h+3LIAUnY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.33.0.tgz} + id: registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0 + name: '@typescript-eslint/eslint-plugin' + version: 4.33.0 + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/experimental-utils': registry.npmmirror.com/@typescript-eslint/experimental-utils/4.33.0_eslint@6.8.0+typescript@4.1.6 + '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6 + '@typescript-eslint/scope-manager': registry.npmmirror.com/@typescript-eslint/scope-manager/4.33.0 + debug: registry.npmmirror.com/debug/4.3.3 + eslint: registry.npmmirror.com/eslint/6.8.0 + functional-red-black-tree: registry.nlark.com/functional-red-black-tree/1.0.1 + ignore: registry.npmmirror.com/ignore/5.2.0 + regexpp: registry.nlark.com/regexpp/3.2.0 + semver: registry.nlark.com/semver/7.3.5 + tsutils: registry.npmmirror.com/tsutils/3.21.0_typescript@4.1.6 + typescript: registry.npmmirror.com/typescript/4.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@typescript-eslint/experimental-utils/4.33.0_eslint@6.8.0+typescript@4.1.6: + resolution: {integrity: sha1-byp4akIJ+iIimJ6TgLUzGygQ9/0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.33.0.tgz} + id: registry.npmmirror.com/@typescript-eslint/experimental-utils/4.33.0 + name: '@typescript-eslint/experimental-utils' + version: 4.33.0 + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' + dependencies: + '@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.9 + '@typescript-eslint/scope-manager': registry.npmmirror.com/@typescript-eslint/scope-manager/4.33.0 + '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/4.33.0 + '@typescript-eslint/typescript-estree': registry.npmmirror.com/@typescript-eslint/typescript-estree/4.33.0_typescript@4.1.6 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-scope: registry.npmmirror.com/eslint-scope/5.1.1 + eslint-utils: registry.nlark.com/eslint-utils/3.0.0_eslint@6.8.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6: + resolution: {integrity: sha1-3+eXVw2WlOVgUo0Y7srYbIx0SJk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/parser/download/@typescript-eslint/parser-4.33.0.tgz} + id: registry.npmmirror.com/@typescript-eslint/parser/4.33.0 + name: '@typescript-eslint/parser' + version: 4.33.0 + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': registry.npmmirror.com/@typescript-eslint/scope-manager/4.33.0 + '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/4.33.0 + '@typescript-eslint/typescript-estree': registry.npmmirror.com/@typescript-eslint/typescript-estree/4.33.0_typescript@4.1.6 + debug: registry.npmmirror.com/debug/4.3.3 + eslint: registry.npmmirror.com/eslint/6.8.0 + typescript: registry.npmmirror.com/typescript/4.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@typescript-eslint/scope-manager/4.33.0: + resolution: {integrity: sha1-045JKA2YPody4pEhz4xukiHygKM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.33.0.tgz} + name: '@typescript-eslint/scope-manager' + version: 4.33.0 + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/4.33.0 + '@typescript-eslint/visitor-keys': registry.npmmirror.com/@typescript-eslint/visitor-keys/4.33.0 + dev: true + + registry.npmmirror.com/@typescript-eslint/types/4.33.0: + resolution: {integrity: sha1-oeWQNqO1OuhDDO6/KpGdx/mvbXI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/types/download/@typescript-eslint/types-4.33.0.tgz} + name: '@typescript-eslint/types' + version: 4.33.0 + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dev: true + + registry.npmmirror.com/@typescript-eslint/typescript-estree/4.33.0_typescript@4.1.6: + resolution: {integrity: sha1-DftRwpCPaMXAjYKu/q8WahfCRgk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.33.0.tgz} + id: registry.npmmirror.com/@typescript-eslint/typescript-estree/4.33.0 + name: '@typescript-eslint/typescript-estree' + version: 4.33.0 + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/4.33.0 + '@typescript-eslint/visitor-keys': registry.npmmirror.com/@typescript-eslint/visitor-keys/4.33.0 + debug: registry.npmmirror.com/debug/4.3.3 + globby: registry.npmmirror.com/globby/11.1.0 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + semver: registry.nlark.com/semver/7.3.5 + tsutils: registry.npmmirror.com/tsutils/3.21.0_typescript@4.1.6 + typescript: registry.npmmirror.com/typescript/4.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@typescript-eslint/visitor-keys/4.33.0: + resolution: {integrity: sha1-KiL3ekFgQom3oYZYbp7EjKku8d0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.33.0.tgz} + name: '@typescript-eslint/visitor-keys' + version: 4.33.0 + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/4.33.0 + eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/2.1.0 + dev: true + + registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.2.1: + resolution: {integrity: sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz} + name: '@vue/babel-helper-vue-jsx-merge-props' + version: 1.2.1 + dev: true + + registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2: + resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz} + name: '@vue/babel-helper-vue-transform-on' + version: 1.0.2 + dev: true + + registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.16.7: + resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz} + id: registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1 + name: '@vue/babel-plugin-jsx' + version: 1.1.1 + dependencies: + '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + '@vue/babel-helper-vue-transform-on': registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2 + camelcase: registry.npmmirror.com/camelcase/6.3.0 + html-tags: registry.npmmirror.com/html-tags/3.1.0 + svg-tags: registry.npmmirror.com/svg-tags/1.0.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.2.1_@babel+core@7.16.7: + resolution: {integrity: sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz} + id: registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.2.1 + name: '@vue/babel-plugin-transform-vue-jsx' + version: 1.2.1 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + '@vue/babel-helper-vue-jsx-merge-props': registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.2.1 + html-tags: registry.npmmirror.com/html-tags/2.0.0 + lodash.kebabcase: registry.npmmirror.com/lodash.kebabcase/4.1.1 + svg-tags: registry.npmmirror.com/svg-tags/1.0.0 + dev: true + + registry.npmmirror.com/@vue/babel-preset-app/4.5.15_vue@3.2.26: + resolution: {integrity: sha512-J+YttzvwRfV1BPczf8r3qCevznYk+jh531agVF+5EYlHF4Sgh/cGXTz9qkkiux3LQgvhEGXgmCteg1n38WuuKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-4.5.15.tgz} + id: registry.npmmirror.com/@vue/babel-preset-app/4.5.15 + name: '@vue/babel-preset-app' + version: 4.5.15 + peerDependencies: + vue: ^2 || ^3.0.0-0 + peerDependenciesMeta: + core-js: + optional: true + vue: + optional: true + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7 + '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 + '@babel/plugin-proposal-class-properties': registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.16.7 + '@babel/plugin-proposal-decorators': registry.npmmirror.com/@babel/plugin-proposal-decorators/7.16.7_@babel+core@7.16.7 + '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + '@babel/plugin-transform-runtime': registry.npmmirror.com/@babel/plugin-transform-runtime/7.16.8_@babel+core@7.16.7 + '@babel/preset-env': registry.npmmirror.com/@babel/preset-env/7.16.8_@babel+core@7.16.7 + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.16.7 + '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.16.7 + '@vue/babel-preset-jsx': registry.npmmirror.com/@vue/babel-preset-jsx/1.2.4_@babel+core@7.16.7 + babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 + core-js: registry.npmmirror.com/core-js/3.20.2 + core-js-compat: registry.npmmirror.com/core-js-compat/3.20.2 + semver: registry.npmmirror.com/semver/6.3.0 + vue: registry.npmmirror.com/vue/3.2.26 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@vue/babel-preset-jsx/1.2.4_@babel+core@7.16.7: + resolution: {integrity: sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz} + id: registry.npmmirror.com/@vue/babel-preset-jsx/1.2.4 + name: '@vue/babel-preset-jsx' + version: 1.2.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@vue/babel-helper-vue-jsx-merge-props': registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.2.1 + '@vue/babel-plugin-transform-vue-jsx': registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.2.1_@babel+core@7.16.7 + '@vue/babel-sugar-composition-api-inject-h': registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/1.2.1_@babel+core@7.16.7 + '@vue/babel-sugar-composition-api-render-instance': registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/1.2.4_@babel+core@7.16.7 + '@vue/babel-sugar-functional-vue': registry.npmmirror.com/@vue/babel-sugar-functional-vue/1.2.2_@babel+core@7.16.7 + '@vue/babel-sugar-inject-h': registry.npmmirror.com/@vue/babel-sugar-inject-h/1.2.2_@babel+core@7.16.7 + '@vue/babel-sugar-v-model': registry.npmmirror.com/@vue/babel-sugar-v-model/1.2.3_@babel+core@7.16.7 + '@vue/babel-sugar-v-on': registry.npmmirror.com/@vue/babel-sugar-v-on/1.2.3_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/1.2.1_@babel+core@7.16.7: + resolution: {integrity: sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz} + id: registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/1.2.1 + name: '@vue/babel-sugar-composition-api-inject-h' + version: 1.2.1 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/1.2.4_@babel+core@7.16.7: + resolution: {integrity: sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz} + id: registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/1.2.4 + name: '@vue/babel-sugar-composition-api-render-instance' + version: 1.2.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@vue/babel-sugar-functional-vue/1.2.2_@babel+core@7.16.7: + resolution: {integrity: sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz} + id: registry.npmmirror.com/@vue/babel-sugar-functional-vue/1.2.2 + name: '@vue/babel-sugar-functional-vue' + version: 1.2.2 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@vue/babel-sugar-inject-h/1.2.2_@babel+core@7.16.7: + resolution: {integrity: sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz} + id: registry.npmmirror.com/@vue/babel-sugar-inject-h/1.2.2 + name: '@vue/babel-sugar-inject-h' + version: 1.2.2 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + dev: true + + registry.npmmirror.com/@vue/babel-sugar-v-model/1.2.3_@babel+core@7.16.7: + resolution: {integrity: sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz} + id: registry.npmmirror.com/@vue/babel-sugar-v-model/1.2.3 + name: '@vue/babel-sugar-v-model' + version: 1.2.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + '@vue/babel-helper-vue-jsx-merge-props': registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/1.2.1 + '@vue/babel-plugin-transform-vue-jsx': registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.2.1_@babel+core@7.16.7 + camelcase: registry.npmmirror.com/camelcase/5.3.1 + html-tags: registry.npmmirror.com/html-tags/2.0.0 + svg-tags: registry.npmmirror.com/svg-tags/1.0.0 + dev: true + + registry.npmmirror.com/@vue/babel-sugar-v-on/1.2.3_@babel+core@7.16.7: + resolution: {integrity: sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz} + id: registry.npmmirror.com/@vue/babel-sugar-v-on/1.2.3 + name: '@vue/babel-sugar-v-on' + version: 1.2.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7 + '@vue/babel-plugin-transform-vue-jsx': registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/1.2.1_@babel+core@7.16.7 + camelcase: registry.npmmirror.com/camelcase/5.3.1 + dev: true + + registry.npmmirror.com/@vue/cli-overlay/4.5.15: + resolution: {integrity: sha512-0zI0kANAVmjFO2LWGUIzdGPMeE3+9k+KeRDXsUqB30YfRF7abjfiiRPq5BU9pOzlJbVdpRkisschBrvdJqDuDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-4.5.15.tgz} + name: '@vue/cli-overlay' + version: 4.5.15 + dev: true + + registry.npmmirror.com/@vue/cli-plugin-babel/4.5.15_f31494664f097394e35421ca86ea1d59: + resolution: {integrity: sha512-hBLrwYfFkHldEe34op/YNgPhpOWI5n5DB2Qt9I/1Epeif4M4iFaayrgjvOR9AVM6WbD3Yx7WCFszYpWrQZpBzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-plugin-babel/4.5.15 + name: '@vue/cli-plugin-babel' + version: 4.5.15 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@vue/babel-preset-app': registry.npmmirror.com/@vue/babel-preset-app/4.5.15_vue@3.2.26 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.15 + babel-loader: registry.npmmirror.com/babel-loader/8.2.3_174483de130731162278521ff93b7183 + cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0 + thread-loader: registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + transitivePeerDependencies: + - supports-color + - vue + - webpack-cli + - webpack-command + dev: true + + registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.15_159f9ca94908a7070131e2c321d72521: + resolution: {integrity: sha512-/2Fl6wY/5bz3HD035oSnFRMsKNxDxU396KqBdpCQdwdvqk4mm6JAbXqihpcBRTNPeTO6w+LwGe6FE56PVbJdbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-plugin-eslint/4.5.15 + name: '@vue/cli-plugin-eslint' + version: 4.5.15 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + eslint: '>= 1.6.0 < 7.0.0' + dependencies: + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.15 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-loader: registry.npmmirror.com/eslint-loader/2.2.1_eslint@6.8.0+webpack@4.46.0 + globby: registry.npmmirror.com/globby/9.2.0 + inquirer: registry.npmmirror.com/inquirer/7.3.3 + webpack: registry.npmmirror.com/webpack/4.46.0 + yorkie: registry.npmmirror.com/yorkie/2.0.0 + transitivePeerDependencies: + - webpack-cli + - webpack-command + dev: true + + registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15: + resolution: {integrity: sha512-q7Y6kP9b3k55Ca2j59xJ7XPA6x+iSRB+N4ac0ZbcL1TbInVQ4j5wCzyE+uqid40hLy4fUdlpl4X9fHJEwuVxPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-plugin-router/4.5.15 + name: '@vue/cli-plugin-router' + version: 4.5.15 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.15 + dev: true + + registry.npmmirror.com/@vue/cli-plugin-typescript/4.5.15_4e4e41b2ba87fa709088a05d00f8eb89: + resolution: {integrity: sha512-g2HDBwWBboTzNvVrS+w4Ctl7CCErboTlx7PyQrXgY+7uGdPVUT9PWuv4DjaZhosSk7WI3qSIpruCBIkdHX5bwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-plugin-typescript/4.5.15 + name: '@vue/cli-plugin-typescript' + version: 4.5.15 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + '@vue/compiler-sfc': ^3.0.0-beta.14 + typescript: '>=2' + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@types/webpack-env': registry.npmmirror.com/@types/webpack-env/1.16.3 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.15 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0 + fork-ts-checker-webpack-plugin: registry.npmmirror.com/fork-ts-checker-webpack-plugin/3.1.1 + globby: registry.npmmirror.com/globby/9.2.0 + thread-loader: registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0 + ts-loader: registry.npmmirror.com/ts-loader/6.2.2_typescript@4.1.6 + tslint: registry.npmmirror.com/tslint/5.20.1_typescript@4.1.6 + typescript: registry.npmmirror.com/typescript/4.1.6 + webpack: registry.npmmirror.com/webpack/4.46.0 + yorkie: registry.npmmirror.com/yorkie/2.0.0 + optionalDependencies: + fork-ts-checker-webpack-plugin-v5: registry.npmmirror.com/fork-ts-checker-webpack-plugin/5.2.1 + transitivePeerDependencies: + - webpack-cli + - webpack-command + dev: true + + registry.npmmirror.com/@vue/cli-plugin-unit-jest/4.5.15_f31494664f097394e35421ca86ea1d59: + resolution: {integrity: sha512-oE3RDMerb21P6ALg70Zh2zU+RYYjoe09/7ZXYUj03uTb2obqUbcINpFfeVwM0B/J6H1YmqWJpnNBxWURhrqQHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-plugin-unit-jest/4.5.15 + name: '@vue/cli-plugin-unit-jest' + version: 4.5.15 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-transform-modules-commonjs': registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.16.8_@babel+core@7.16.7 + '@types/jest': registry.npmmirror.com/@types/jest/24.9.1 + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.15 + babel-core: registry.npmmirror.com/babel-core/7.0.0-bridge.0_@babel+core@7.16.7 + babel-jest: registry.npmmirror.com/babel-jest/24.9.0_@babel+core@7.16.7 + babel-plugin-transform-es2015-modules-commonjs: registry.npmmirror.com/babel-plugin-transform-es2015-modules-commonjs/6.26.2 + deepmerge: registry.npmmirror.com/deepmerge/4.2.2 + jest: registry.npmmirror.com/jest/24.9.0 + jest-environment-jsdom-fifteen: registry.npmmirror.com/jest-environment-jsdom-fifteen/1.0.2 + jest-serializer-vue: registry.npmmirror.com/jest-serializer-vue/2.0.2 + jest-transform-stub: registry.npmmirror.com/jest-transform-stub/2.0.0 + jest-watch-typeahead: registry.npmmirror.com/jest-watch-typeahead/0.4.2 + ts-jest: registry.npmmirror.com/ts-jest/24.3.0_jest@24.9.0 + vue-jest: registry.npmmirror.com/vue-jest/3.0.7_fa7b9b114f7d1823abcda9541f12deb9 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + - vue + - vue-template-compiler + dev: true + + registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15: + resolution: {integrity: sha512-fqap+4HN+w+InDxlA3hZTOGE0tzBTgXhKLoDydhywqgmhQ1D9JA6Feh94ze6tG8DsWX58/ujYUqA8jAz17FJtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15 + name: '@vue/cli-plugin-vuex' + version: 4.5.15 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@vue/cli-service': registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5 + dev: true + + registry.npmmirror.com/@vue/cli-service/4.5.15_cf47954123b56e3367a44047cc25012d: + resolution: {integrity: sha512-sFWnLYVCn4zRfu45IcsIE9eXM0YpDV3S11vlM2/DVbIPAGoYo5ySpSof6aHcIvkeGsIsrHFpPHzNvDZ/efs7jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-service/4.5.15 + name: '@vue/cli-service' + version: 4.5.15 + engines: {node: '>=8'} + hasBin: true + peerDependencies: + '@vue/compiler-sfc': ^3.0.0-beta.14 + less-loader: '*' + pug-plain-loader: '*' + raw-loader: '*' + sass-loader: '*' + stylus-loader: '*' + vue-template-compiler: ^2.0.0 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + less-loader: + optional: true + pug-plain-loader: + optional: true + raw-loader: + optional: true + sass-loader: + optional: true + stylus-loader: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@intervolga/optimize-cssnano-plugin': registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/1.0.6_webpack@4.46.0 + '@soda/friendly-errors-webpack-plugin': registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/1.8.1_webpack@4.46.0 + '@soda/get-current-script': registry.npmmirror.com/@soda/get-current-script/1.0.2 + '@types/minimist': registry.npmmirror.com/@types/minimist/1.2.2 + '@types/webpack': registry.npmmirror.com/@types/webpack/4.41.32 + '@types/webpack-dev-server': registry.npmmirror.com/@types/webpack-dev-server/3.11.6_debug@4.3.3 + '@vue/cli-overlay': registry.npmmirror.com/@vue/cli-overlay/4.5.15 + '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.15 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/component-compiler-utils': registry.npmmirror.com/@vue/component-compiler-utils/3.3.0 + '@vue/preload-webpack-plugin': registry.npmmirror.com/@vue/preload-webpack-plugin/1.1.2_502c618fc8a7d35df07e93275324a2d0 + '@vue/web-component-wrapper': registry.npmmirror.com/@vue/web-component-wrapper/1.3.0 + acorn: registry.npmmirror.com/acorn/7.4.1 + acorn-walk: registry.npmmirror.com/acorn-walk/7.2.0 + address: registry.npmmirror.com/address/1.1.2 + autoprefixer: registry.npmmirror.com/autoprefixer/9.8.8 + browserslist: registry.npmmirror.com/browserslist/4.19.1 + cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0 + case-sensitive-paths-webpack-plugin: registry.npmmirror.com/case-sensitive-paths-webpack-plugin/2.4.0 + cli-highlight: registry.npmmirror.com/cli-highlight/2.1.11 + clipboardy: registry.npmmirror.com/clipboardy/2.3.0 + cliui: registry.npmmirror.com/cliui/6.0.0 + copy-webpack-plugin: registry.npmmirror.com/copy-webpack-plugin/5.1.2_webpack@4.46.0 + css-loader: registry.npmmirror.com/css-loader/3.6.0_webpack@4.46.0 + cssnano: registry.npmmirror.com/cssnano/4.1.11 + debug: registry.npmmirror.com/debug/4.3.3 + default-gateway: registry.npmmirror.com/default-gateway/5.0.5 + dotenv: registry.npmmirror.com/dotenv/8.6.0 + dotenv-expand: registry.npmmirror.com/dotenv-expand/5.1.0 + file-loader: registry.npmmirror.com/file-loader/4.3.0_webpack@4.46.0 + fs-extra: registry.npmmirror.com/fs-extra/7.0.1 + globby: registry.npmmirror.com/globby/9.2.0 + hash-sum: registry.npmmirror.com/hash-sum/2.0.0 + html-webpack-plugin: registry.npmmirror.com/html-webpack-plugin/3.2.0_webpack@4.46.0 + launch-editor-middleware: registry.npmmirror.com/launch-editor-middleware/2.3.0 + less-loader: registry.npmmirror.com/less-loader/5.0.0_less@3.13.1 + lodash.defaultsdeep: registry.npmmirror.com/lodash.defaultsdeep/4.6.1 + lodash.mapvalues: registry.npmmirror.com/lodash.mapvalues/4.6.0 + lodash.transform: registry.npmmirror.com/lodash.transform/4.6.0 + mini-css-extract-plugin: registry.npmmirror.com/mini-css-extract-plugin/0.9.0_webpack@4.46.0 + minimist: registry.npmmirror.com/minimist/1.2.5 + pnp-webpack-plugin: registry.npmmirror.com/pnp-webpack-plugin/1.7.0_typescript@4.1.6 + portfinder: registry.npmmirror.com/portfinder/1.0.28 + postcss-loader: registry.npmmirror.com/postcss-loader/3.0.0 + ssri: registry.npmmirror.com/ssri/8.0.1 + terser-webpack-plugin: registry.npmmirror.com/terser-webpack-plugin/1.4.5_webpack@4.46.0 + thread-loader: registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0 + url-loader: registry.npmmirror.com/url-loader/2.3.0_file-loader@4.3.0+webpack@4.46.0 + vue-loader: registry.npmmirror.com/vue-loader/15.9.8_0aadd186e864c83cab1284bae568d6ae + vue-style-loader: registry.npmmirror.com/vue-style-loader/4.1.3 + webpack: registry.npmmirror.com/webpack/4.46.0 + webpack-bundle-analyzer: registry.npmmirror.com/webpack-bundle-analyzer/3.9.0 + webpack-chain: registry.npmmirror.com/webpack-chain/6.5.1 + webpack-dev-server: registry.npmmirror.com/webpack-dev-server/3.11.3_webpack@4.46.0 + webpack-merge: registry.npmmirror.com/webpack-merge/4.2.2 + optionalDependencies: + vue-loader-v16: registry.npmmirror.com/vue-loader/16.8.3_webpack@4.46.0 + transitivePeerDependencies: + - supports-color + - typescript + - webpack-cli + - webpack-command + dev: true + + registry.npmmirror.com/@vue/cli-service/4.5.15_dc198eb2f3cb119d2e5c65ee40a62fd5: + resolution: {integrity: sha512-sFWnLYVCn4zRfu45IcsIE9eXM0YpDV3S11vlM2/DVbIPAGoYo5ySpSof6aHcIvkeGsIsrHFpPHzNvDZ/efs7jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.15.tgz} + id: registry.npmmirror.com/@vue/cli-service/4.5.15 + name: '@vue/cli-service' + version: 4.5.15 + engines: {node: '>=8'} + hasBin: true + peerDependencies: + '@vue/compiler-sfc': ^3.0.0-beta.14 + less-loader: '*' + pug-plain-loader: '*' + raw-loader: '*' + sass-loader: '*' + stylus-loader: '*' + vue-template-compiler: ^2.0.0 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + less-loader: + optional: true + pug-plain-loader: + optional: true + raw-loader: + optional: true + sass-loader: + optional: true + stylus-loader: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@intervolga/optimize-cssnano-plugin': registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/1.0.6_webpack@4.46.0 + '@soda/friendly-errors-webpack-plugin': registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/1.8.1_webpack@4.46.0 + '@soda/get-current-script': registry.npmmirror.com/@soda/get-current-script/1.0.2 + '@types/minimist': registry.npmmirror.com/@types/minimist/1.2.2 + '@types/webpack': registry.npmmirror.com/@types/webpack/4.41.32 + '@types/webpack-dev-server': registry.npmmirror.com/@types/webpack-dev-server/3.11.6_debug@4.3.3 + '@vue/cli-overlay': registry.npmmirror.com/@vue/cli-overlay/4.5.15 + '@vue/cli-plugin-router': registry.npmmirror.com/@vue/cli-plugin-router/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex/4.5.15_@vue+cli-service@4.5.15 + '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils/4.5.15 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/component-compiler-utils': registry.npmmirror.com/@vue/component-compiler-utils/3.3.0 + '@vue/preload-webpack-plugin': registry.npmmirror.com/@vue/preload-webpack-plugin/1.1.2_502c618fc8a7d35df07e93275324a2d0 + '@vue/web-component-wrapper': registry.npmmirror.com/@vue/web-component-wrapper/1.3.0 + acorn: registry.npmmirror.com/acorn/7.4.1 + acorn-walk: registry.npmmirror.com/acorn-walk/7.2.0 + address: registry.npmmirror.com/address/1.1.2 + autoprefixer: registry.npmmirror.com/autoprefixer/9.8.8 + browserslist: registry.npmmirror.com/browserslist/4.19.1 + cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0 + case-sensitive-paths-webpack-plugin: registry.npmmirror.com/case-sensitive-paths-webpack-plugin/2.4.0 + cli-highlight: registry.npmmirror.com/cli-highlight/2.1.11 + clipboardy: registry.npmmirror.com/clipboardy/2.3.0 + cliui: registry.npmmirror.com/cliui/6.0.0 + copy-webpack-plugin: registry.npmmirror.com/copy-webpack-plugin/5.1.2_webpack@4.46.0 + css-loader: registry.npmmirror.com/css-loader/3.6.0_webpack@4.46.0 + cssnano: registry.npmmirror.com/cssnano/4.1.11 + debug: registry.npmmirror.com/debug/4.3.3 + default-gateway: registry.npmmirror.com/default-gateway/5.0.5 + dotenv: registry.npmmirror.com/dotenv/8.6.0 + dotenv-expand: registry.npmmirror.com/dotenv-expand/5.1.0 + file-loader: registry.npmmirror.com/file-loader/4.3.0_webpack@4.46.0 + fs-extra: registry.npmmirror.com/fs-extra/7.0.1 + globby: registry.npmmirror.com/globby/9.2.0 + hash-sum: registry.npmmirror.com/hash-sum/2.0.0 + html-webpack-plugin: registry.npmmirror.com/html-webpack-plugin/3.2.0_webpack@4.46.0 + launch-editor-middleware: registry.npmmirror.com/launch-editor-middleware/2.3.0 + lodash.defaultsdeep: registry.npmmirror.com/lodash.defaultsdeep/4.6.1 + lodash.mapvalues: registry.npmmirror.com/lodash.mapvalues/4.6.0 + lodash.transform: registry.npmmirror.com/lodash.transform/4.6.0 + mini-css-extract-plugin: registry.npmmirror.com/mini-css-extract-plugin/0.9.0_webpack@4.46.0 + minimist: registry.npmmirror.com/minimist/1.2.5 + pnp-webpack-plugin: registry.npmmirror.com/pnp-webpack-plugin/1.7.0_typescript@4.1.6 + portfinder: registry.npmmirror.com/portfinder/1.0.28 + postcss-loader: registry.npmmirror.com/postcss-loader/3.0.0 + sass-loader: registry.npmmirror.com/sass-loader/8.0.2_node-sass@4.14.1+sass@1.47.0 + ssri: registry.npmmirror.com/ssri/8.0.1 + terser-webpack-plugin: registry.npmmirror.com/terser-webpack-plugin/1.4.5_webpack@4.46.0 + thread-loader: registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0 + url-loader: registry.npmmirror.com/url-loader/2.3.0_file-loader@4.3.0+webpack@4.46.0 + vue-loader: registry.npmmirror.com/vue-loader/15.9.8_0aadd186e864c83cab1284bae568d6ae + vue-style-loader: registry.npmmirror.com/vue-style-loader/4.1.3 + webpack: registry.npmmirror.com/webpack/4.46.0 + webpack-bundle-analyzer: registry.npmmirror.com/webpack-bundle-analyzer/3.9.0 + webpack-chain: registry.npmmirror.com/webpack-chain/6.5.1 + webpack-dev-server: registry.npmmirror.com/webpack-dev-server/3.11.3_webpack@4.46.0 + webpack-merge: registry.npmmirror.com/webpack-merge/4.2.2 + optionalDependencies: + vue-loader-v16: registry.npmmirror.com/vue-loader/16.8.3_webpack@4.46.0 + transitivePeerDependencies: + - supports-color + - typescript + - webpack-cli + - webpack-command + dev: true + + registry.npmmirror.com/@vue/cli-shared-utils/4.5.15: + resolution: {integrity: sha512-SKaej9hHzzjKSOw1NlFmc6BSE0vcqUQMQiv1cxQ2DhVyy4QxZXBmzmiLBUBe+hYZZs1neXW7n//udeN9bCAY+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.15.tgz} + name: '@vue/cli-shared-utils' + version: 4.5.15 + dependencies: + '@hapi/joi': registry.npmmirror.com/@hapi/joi/15.1.1 + chalk: registry.npmmirror.com/chalk/2.4.2 + execa: registry.npmmirror.com/execa/1.0.0 + launch-editor: registry.npmmirror.com/launch-editor/2.3.0 + lru-cache: registry.npmmirror.com/lru-cache/5.1.1 + node-ipc: registry.npmmirror.com/node-ipc/9.2.1 + open: registry.npmmirror.com/open/6.4.0 + ora: registry.npmmirror.com/ora/3.4.0 + read-pkg: registry.npmmirror.com/read-pkg/5.2.0 + request: registry.npmmirror.com/request/2.88.2 + semver: registry.npmmirror.com/semver/6.3.0 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + dev: true + + registry.npmmirror.com/@vue/compiler-core/3.2.26: + resolution: {integrity: sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/download/@vue/compiler-core-3.2.26.tgz} + name: '@vue/compiler-core' + version: 3.2.26 + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + estree-walker: registry.npmmirror.com/estree-walker/2.0.2 + source-map: registry.npmmirror.com/source-map/0.6.1 + + registry.npmmirror.com/@vue/compiler-dom/3.2.26: + resolution: {integrity: sha512-smBfaOW6mQDxcT3p9TKT6mE22vjxjJL50GFVJiI0chXYGU/xzC05QRGrW3HHVuJrmLTLx5zBhsZ2dIATERbarg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/download/@vue/compiler-dom-3.2.26.tgz} + name: '@vue/compiler-dom' + version: 3.2.26 + dependencies: + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + + registry.npmmirror.com/@vue/compiler-sfc/3.2.26: + resolution: {integrity: sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.26.tgz} + name: '@vue/compiler-sfc' + version: 3.2.26 + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.26 + '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.26 + '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.26 + '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform/3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + estree-walker: registry.npmmirror.com/estree-walker/2.0.2 + magic-string: registry.npmmirror.com/magic-string/0.25.7 + postcss: registry.npmmirror.com/postcss/8.4.5 + source-map: registry.npmmirror.com/source-map/0.6.1 + + registry.npmmirror.com/@vue/compiler-ssr/3.2.26: + resolution: {integrity: sha512-2mywLX0ODc4Zn8qBoA2PDCsLEZfpUGZcyoFRLSOjyGGK6wDy2/5kyDOWtf0S0UvtoyVq95OTSGIALjZ4k2q/ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.26.tgz} + name: '@vue/compiler-ssr' + version: 3.2.26 + dependencies: + '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + + registry.npmmirror.com/@vue/component-compiler-utils/3.3.0: + resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz} + name: '@vue/component-compiler-utils' + version: 3.3.0 + dependencies: + consolidate: registry.npmmirror.com/consolidate/0.15.1 + hash-sum: registry.npmmirror.com/hash-sum/1.0.2 + lru-cache: registry.npmmirror.com/lru-cache/4.1.5 + merge-source-map: registry.npmmirror.com/merge-source-map/1.1.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.8 + source-map: registry.npmmirror.com/source-map/0.6.1 + vue-template-es2015-compiler: registry.npmmirror.com/vue-template-es2015-compiler/1.9.1 + optionalDependencies: + prettier: registry.npmmirror.com/prettier/2.5.1 + dev: true + + registry.npmmirror.com/@vue/devtools-api/6.0.0-beta.21.1: + resolution: {integrity: sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.21.1.tgz} + name: '@vue/devtools-api' + version: 6.0.0-beta.21.1 + dev: false + + registry.npmmirror.com/@vue/eslint-config-typescript/7.0.0_a4026fa076dd8f44e94f0e8ffbcc3f1d: + resolution: {integrity: sha512-UxUlvpSrFOoF8aQ+zX1leYiEBEm7CZmXYn/ZEM1zwSadUzpamx56RB4+Htdjisv1mX2tOjBegNUqH3kz2OL+Aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/eslint-config-typescript/-/eslint-config-typescript-7.0.0.tgz} + id: registry.npmmirror.com/@vue/eslint-config-typescript/7.0.0 + name: '@vue/eslint-config-typescript' + version: 7.0.0 + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.4.0 + '@typescript-eslint/parser': ^4.4.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint-plugin-vue: ^5.2.3 || ^6.0.0 || ^7.0.0 + dependencies: + '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/4.33.0_e66a0234d36070dcc49614ed7c477ee7 + '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/4.33.0_eslint@6.8.0+typescript@4.1.6 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/7.20.0_eslint@6.8.0 + vue-eslint-parser: registry.npmmirror.com/vue-eslint-parser/7.11.0_eslint@6.8.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/@vue/preload-webpack-plugin/1.1.2_502c618fc8a7d35df07e93275324a2d0: + resolution: {integrity: sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz} + id: registry.npmmirror.com/@vue/preload-webpack-plugin/1.1.2 + name: '@vue/preload-webpack-plugin' + version: 1.1.2 + engines: {node: '>=6.0.0'} + peerDependencies: + html-webpack-plugin: '>=2.26.0' + webpack: '>=4.0.0' + dependencies: + html-webpack-plugin: registry.npmmirror.com/html-webpack-plugin/3.2.0_webpack@4.46.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/@vue/reactivity-transform/3.2.26: + resolution: {integrity: sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/download/@vue/reactivity-transform-3.2.26.tgz} + name: '@vue/reactivity-transform' + version: 3.2.26 + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + estree-walker: registry.npmmirror.com/estree-walker/2.0.2 + magic-string: registry.npmmirror.com/magic-string/0.25.7 + + registry.npmmirror.com/@vue/reactivity/3.2.26: + resolution: {integrity: sha512-h38bxCZLW6oFJVDlCcAiUKFnXI8xP8d+eO0pcDxx+7dQfSPje2AO6M9S9QO6MrxQB7fGP0DH0dYQ8ksf6hrXKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/download/@vue/reactivity-3.2.26.tgz} + name: '@vue/reactivity' + version: 3.2.26 + dependencies: + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + dev: false + + registry.npmmirror.com/@vue/runtime-core/3.2.26: + resolution: {integrity: sha512-BcYi7qZ9Nn+CJDJrHQ6Zsmxei2hDW0L6AB4vPvUQGBm2fZyC0GXd/4nVbyA2ubmuhctD5RbYY8L+5GUJszv9mQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-core/download/@vue/runtime-core-3.2.26.tgz} + name: '@vue/runtime-core' + version: 3.2.26 + dependencies: + '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + dev: false + + registry.npmmirror.com/@vue/runtime-dom/3.2.26: + resolution: {integrity: sha512-dY56UIiZI+gjc4e8JQBwAifljyexfVCkIAu/WX8snh8vSOt/gMSEGwPRcl2UpYpBYeyExV8WCbgvwWRNt9cHhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-dom/download/@vue/runtime-dom-3.2.26.tgz} + name: '@vue/runtime-dom' + version: 3.2.26 + dependencies: + '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core/3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + csstype: registry.npmmirror.com/csstype/2.6.19 + dev: false + + registry.npmmirror.com/@vue/server-renderer/3.2.26_vue@3.2.26: + resolution: {integrity: sha512-Jp5SggDUvvUYSBIvYEhy76t4nr1vapY/FIFloWmQzn7UxqaHrrBpbxrqPcTrSgGrcaglj0VBp22BKJNre4aA1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/server-renderer/download/@vue/server-renderer-3.2.26.tgz} + id: registry.npmmirror.com/@vue/server-renderer/3.2.26 + name: '@vue/server-renderer' + version: 3.2.26 + peerDependencies: + vue: 3.2.26 + dependencies: + '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/@vue/shared/3.2.26: + resolution: {integrity: sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/download/@vue/shared-3.2.26.tgz} + name: '@vue/shared' + version: 3.2.26 + + registry.npmmirror.com/@vue/test-utils/2.0.0-rc.18_vue@3.2.26: + resolution: {integrity: sha512-aifolXjVdsogjaLmDoZ0FU8vN+R67aWmg9OuVeED4w5Ij5GFQLrlhM19uhWe/r5xXUL4fXMk3pX5wW6FJP1NcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/test-utils/-/test-utils-2.0.0-rc.18.tgz} + id: registry.npmmirror.com/@vue/test-utils/2.0.0-rc.18 + name: '@vue/test-utils' + version: 2.0.0-rc.18 + peerDependencies: + vue: ^3.0.1 + dependencies: + vue: registry.npmmirror.com/vue/3.2.26 + dev: true + + registry.npmmirror.com/@vue/web-component-wrapper/1.3.0: + resolution: {integrity: sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz} + name: '@vue/web-component-wrapper' + version: 1.3.0 + dev: true + + registry.npmmirror.com/@vueuse/core/7.5.3_vue@3.2.26: + resolution: {integrity: sha512-D9j5ymHFMFRXQqCp0yZJkf/bvBGiz0MrKUa364p+L8dMyd5zyq2K1JmHyvoBd4xbTFRfmQ1h878u6YE5LCkDVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-7.5.3.tgz} + id: registry.npmmirror.com/@vueuse/core/7.5.3 + name: '@vueuse/core' + version: 7.5.3 + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + dependencies: + '@vueuse/shared': registry.npmmirror.com/@vueuse/shared/7.5.3_vue@3.2.26 + vue: registry.npmmirror.com/vue/3.2.26 + vue-demi: registry.npmmirror.com/vue-demi/0.12.1_vue@3.2.26 + dev: false + + registry.npmmirror.com/@vueuse/shared/7.5.3_vue@3.2.26: + resolution: {integrity: sha512-BJ71cxHN5VByW1S58Gl85NFJaQu93F7Vs7K/MuAKsIIuHm9PBbkR5Vxkg9ko9cBdiKVt+FNoo13BhdbA+Vwycg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/shared/download/@vueuse/shared-7.5.3.tgz} + id: registry.npmmirror.com/@vueuse/shared/7.5.3 + name: '@vueuse/shared' + version: 7.5.3 + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + dependencies: + vue: registry.npmmirror.com/vue/3.2.26 + vue-demi: registry.npmmirror.com/vue-demi/0.12.1_vue@3.2.26 + dev: false + + registry.npmmirror.com/@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz} + name: '@xtuc/ieee754' + version: 1.2.0 + dev: true + + registry.npmmirror.com/abab/2.0.5: + resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/abab/-/abab-2.0.5.tgz} + name: abab + version: 2.0.5 + dev: true + + registry.npmmirror.com/abbrev/1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz} + name: abbrev + version: 1.1.1 + dev: true + + registry.npmmirror.com/accepts/1.3.7: + resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/accepts/-/accepts-1.3.7.tgz} + name: accepts + version: 1.3.7 + engines: {node: '>= 0.6'} + dependencies: + mime-types: registry.npmmirror.com/mime-types/2.1.34 + negotiator: registry.nlark.com/negotiator/0.6.2 + dev: true + + registry.npmmirror.com/acorn-globals/4.3.4: + resolution: {integrity: sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-globals/-/acorn-globals-4.3.4.tgz} + name: acorn-globals + version: 4.3.4 + dependencies: + acorn: registry.npmmirror.com/acorn/6.4.2 + acorn-walk: registry.npmmirror.com/acorn-walk/6.2.0 + dev: true + + registry.npmmirror.com/acorn-jsx/5.3.2_acorn@7.4.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz} + id: registry.npmmirror.com/acorn-jsx/5.3.2 + name: acorn-jsx + version: 5.3.2 + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: registry.npmmirror.com/acorn/7.4.1 + dev: true + + registry.npmmirror.com/acorn-walk/6.2.0: + resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-6.2.0.tgz} + name: acorn-walk + version: 6.2.0 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmmirror.com/acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz} + name: acorn-walk + version: 7.2.0 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmmirror.com/acorn/5.7.4: + resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-5.7.4.tgz} + name: acorn + version: 5.7.4 + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + registry.npmmirror.com/acorn/6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz} + name: acorn + version: 6.4.2 + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + registry.npmmirror.com/acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz} + name: acorn + version: 7.4.1 + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + registry.npmmirror.com/address/1.1.2: + resolution: {integrity: sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/address/-/address-1.1.2.tgz} + name: address + version: 1.1.2 + engines: {node: '>= 0.12.0'} + dev: true + + registry.npmmirror.com/aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz} + name: aggregate-error + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + clean-stack: registry.npmmirror.com/clean-stack/2.2.0 + indent-string: registry.npmmirror.com/indent-string/4.0.0 + dev: true + + registry.npmmirror.com/ajv-errors/1.0.1_ajv@6.12.6: + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz} + id: registry.npmmirror.com/ajv-errors/1.0.1 + name: ajv-errors + version: 1.0.1 + peerDependencies: + ajv: '>=5.0.0' + dependencies: + ajv: registry.npmmirror.com/ajv/6.12.6 + dev: true + + registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz} + id: registry.npmmirror.com/ajv-keywords/3.5.2 + name: ajv-keywords + version: 3.5.2 + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: registry.npmmirror.com/ajv/6.12.6 + dev: true + + registry.npmmirror.com/ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz} + name: ajv + version: 6.12.6 + dependencies: + fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3 + fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0 + json-schema-traverse: registry.npmmirror.com/json-schema-traverse/0.4.1 + uri-js: registry.npmmirror.com/uri-js/4.4.1 + dev: true + + registry.npmmirror.com/alphanum-sort/1.0.2: + resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz} + name: alphanum-sort + version: 1.0.2 + dev: true + + registry.npmmirror.com/amdefine/1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/amdefine/-/amdefine-1.0.1.tgz} + name: amdefine + version: 1.0.1 + engines: {node: '>=0.4.2'} + dev: true + + registry.npmmirror.com/ansi-colors/3.2.4: + resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz} + name: ansi-colors + version: 3.2.4 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/ansi-escapes/3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz} + name: ansi-escapes + version: 3.2.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz} + name: ansi-escapes + version: 4.3.2 + engines: {node: '>=8'} + dependencies: + type-fest: registry.npmmirror.com/type-fest/0.21.3 + dev: true + + registry.npmmirror.com/ansi-regex/2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz} + name: ansi-regex + version: 2.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/ansi-regex/3.0.0: + resolution: {integrity: sha512-wFUFA5bg5dviipbQQ32yOQhl6gcJaJXiHE7dvR8VYPG97+J/GNC5FKGepKdEDUFeXRzDxPF1X/Btc8L+v7oqIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.0.tgz} + name: ansi-regex + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/ansi-regex/4.1.0: + resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.0.tgz} + name: ansi-regex + version: 4.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz} + name: ansi-regex + version: 5.0.1 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/ansi-styles/2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz} + name: ansi-styles + version: 2.2.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz} + name: ansi-styles + version: 3.2.1 + engines: {node: '>=4'} + dependencies: + color-convert: registry.npmmirror.com/color-convert/1.9.3 + dev: true + + registry.npmmirror.com/ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz} + name: ansi-styles + version: 4.3.0 + engines: {node: '>=8'} + dependencies: + color-convert: registry.npmmirror.com/color-convert/2.0.1 + dev: true + + registry.npmmirror.com/ant-design-vue/2.2.8_ae87cbba5ec93a01f3fe1197df446ca3: + resolution: {integrity: sha512-3graq9/gCfJQs6hznrHV6sa9oDmk/D1H3Oo0vLdVpPS/I61fZPk8NEyNKCHpNA6fT2cx6xx9U3QS63uuyikg/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-2.2.8.tgz} + id: registry.npmmirror.com/ant-design-vue/2.2.8 + name: ant-design-vue + version: 2.2.8 + peerDependencies: + '@vue/compiler-sfc': '>=3.1.0' + vue: '>=3.1.0' + dependencies: + '@ant-design/icons-vue': registry.npmmirror.com/@ant-design/icons-vue/6.0.1_vue@3.2.26 + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.16.7 + '@simonwep/pickr': registry.npmmirror.com/@simonwep/pickr/1.8.2 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + array-tree-filter: registry.npmmirror.com/array-tree-filter/2.1.0 + async-validator: registry.npmmirror.com/async-validator/3.5.2 + dom-align: registry.npmmirror.com/dom-align/1.12.2 + dom-scroll-into-view: registry.npmmirror.com/dom-scroll-into-view/2.0.1 + lodash: registry.npmmirror.com/lodash/4.17.21 + lodash-es: registry.npmmirror.com/lodash-es/4.17.21 + moment: registry.npmmirror.com/moment/2.29.1 + omit.js: registry.npmmirror.com/omit.js/2.0.2 + resize-observer-polyfill: registry.npmmirror.com/resize-observer-polyfill/1.5.1 + scroll-into-view-if-needed: registry.npmmirror.com/scroll-into-view-if-needed/2.2.29 + shallow-equal: registry.npmmirror.com/shallow-equal/1.2.1 + vue: registry.npmmirror.com/vue/3.2.26 + vue-types: registry.npmmirror.com/vue-types/3.0.2_vue@3.2.26 + warning: registry.npmmirror.com/warning/4.0.3 + dev: false + + registry.npmmirror.com/any-observable/0.3.0: + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/any-observable/-/any-observable-0.3.0.tgz} + name: any-observable + version: 0.3.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/any-promise/1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz} + name: any-promise + version: 1.3.0 + dev: true + + registry.npmmirror.com/anymatch/2.0.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz} + name: anymatch + version: 2.0.0 + dependencies: + micromatch: registry.npmmirror.com/micromatch/3.1.10 + normalize-path: registry.npmmirror.com/normalize-path/2.1.1 + dev: true + + registry.npmmirror.com/anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz} + name: anymatch + version: 3.1.2 + engines: {node: '>= 8'} + dependencies: + normalize-path: registry.npmmirror.com/normalize-path/3.0.0 + picomatch: registry.npmmirror.com/picomatch/2.3.1 + dev: true + + registry.npmmirror.com/aproba/1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz} + name: aproba + version: 1.2.0 + dev: true + + registry.npmmirror.com/arch/2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz} + name: arch + version: 2.2.0 + dev: true + + registry.npmmirror.com/are-we-there-yet/1.1.7: + resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz} + name: are-we-there-yet + version: 1.1.7 + dependencies: + delegates: registry.npmmirror.com/delegates/1.0.0 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz} + name: argparse + version: 1.0.10 + dependencies: + sprintf-js: registry.npmmirror.com/sprintf-js/1.0.3 + dev: true + + registry.npmmirror.com/arr-diff/4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz} + name: arr-diff + version: 4.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/arr-flatten/1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz} + name: arr-flatten + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/arr-union/3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz} + name: arr-union + version: 3.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/array-equal/1.0.0: + resolution: {integrity: sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-equal/-/array-equal-1.0.0.tgz} + name: array-equal + version: 1.0.0 + dev: true + + registry.npmmirror.com/array-find-index/1.0.2: + resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-find-index/-/array-find-index-1.0.2.tgz} + name: array-find-index + version: 1.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/array-flatten/1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz} + name: array-flatten + version: 1.1.1 + dev: true + + registry.npmmirror.com/array-flatten/2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz} + name: array-flatten + version: 2.1.2 + dev: true + + registry.npmmirror.com/array-tree-filter/2.1.0: + resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz} + name: array-tree-filter + version: 2.1.0 + dev: false + + registry.npmmirror.com/array-union/1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz} + name: array-union + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: registry.npmmirror.com/array-uniq/1.0.3 + dev: true + + registry.npmmirror.com/array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz} + name: array-union + version: 2.1.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/array-uniq/1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz} + name: array-uniq + version: 1.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz} + name: array-unique + version: 0.3.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/asn1.js/5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz} + name: asn1.js + version: 5.4.1 + dependencies: + bn.js: registry.npmmirror.com/bn.js/4.12.0 + inherits: registry.npmmirror.com/inherits/2.0.4 + minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1 + safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2 + dev: true + + registry.npmmirror.com/asn1/0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz} + name: asn1 + version: 0.2.6 + dependencies: + safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2 + dev: true + + registry.npmmirror.com/assert-plus/1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz} + name: assert-plus + version: 1.0.0 + engines: {node: '>=0.8'} + dev: true + + registry.npmmirror.com/assert/1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz} + name: assert + version: 1.5.0 + dependencies: + object-assign: registry.npmmirror.com/object-assign/4.1.1 + util: registry.npmmirror.com/util/0.10.3 + dev: true + + registry.npmmirror.com/assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz} + name: assign-symbols + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/astral-regex/1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz} + name: astral-regex + version: 1.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/async-each/1.0.3: + resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz} + name: async-each + version: 1.0.3 + dev: true + + registry.npmmirror.com/async-foreach/0.1.3: + resolution: {integrity: sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-foreach/-/async-foreach-0.1.3.tgz} + name: async-foreach + version: 0.1.3 + dev: true + + registry.npmmirror.com/async-limiter/1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz} + name: async-limiter + version: 1.0.1 + dev: true + + registry.npmmirror.com/async-validator/3.5.2: + resolution: {integrity: sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz} + name: async-validator + version: 3.5.2 + dev: false + + registry.npmmirror.com/async-validator/4.0.7: + resolution: {integrity: sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.0.7.tgz} + name: async-validator + version: 4.0.7 + dev: false + + registry.npmmirror.com/async/2.6.3: + resolution: {integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async/-/async-2.6.3.tgz} + name: async + version: 2.6.3 + dependencies: + lodash: registry.npmmirror.com/lodash/4.17.21 + dev: true + + registry.npmmirror.com/asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz} + name: asynckit + version: 0.4.0 + dev: true + + registry.npmmirror.com/at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz} + name: at-least-node + version: 1.0.0 + engines: {node: '>= 4.0.0'} + dev: true + optional: true + + registry.npmmirror.com/atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz} + name: atob + version: 2.1.2 + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + registry.npmmirror.com/autoprefixer/9.8.8: + resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz} + name: autoprefixer + version: 9.8.8 + hasBin: true + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001298 + normalize-range: registry.npmmirror.com/normalize-range/0.1.2 + num2fraction: registry.npmmirror.com/num2fraction/1.2.2 + picocolors: registry.npmmirror.com/picocolors/0.2.1 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0 + dev: true + + registry.npmmirror.com/aws-sign2/0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz} + name: aws-sign2 + version: 0.7.0 + dev: true + + registry.npmmirror.com/aws4/1.11.0: + resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz} + name: aws4 + version: 1.11.0 + dev: true + + registry.npmmirror.com/axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz} + name: axios + version: 0.21.4 + dependencies: + follow-redirects: registry.npmmirror.com/follow-redirects/1.14.7 + transitivePeerDependencies: + - debug + dev: false + + registry.npmmirror.com/babel-code-frame/6.26.0: + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz} + name: babel-code-frame + version: 6.26.0 + dependencies: + chalk: registry.npmmirror.com/chalk/1.1.3 + esutils: registry.npmmirror.com/esutils/2.0.3 + js-tokens: registry.npmmirror.com/js-tokens/3.0.2 + dev: true + + registry.npmmirror.com/babel-core/7.0.0-bridge.0_@babel+core@7.16.7: + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz} + id: registry.npmmirror.com/babel-core/7.0.0-bridge.0 + name: babel-core + version: 7.0.0-bridge.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + dev: true + + registry.npmmirror.com/babel-jest/24.9.0_@babel+core@7.16.7: + resolution: {integrity: sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-jest/-/babel-jest-24.9.0.tgz} + id: registry.npmmirror.com/babel-jest/24.9.0 + name: babel-jest + version: 24.9.0 + engines: {node: '>= 6'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@jest/transform': registry.npmmirror.com/@jest/transform/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + '@types/babel__core': registry.npmmirror.com/@types/babel__core/7.1.18 + babel-plugin-istanbul: registry.npmmirror.com/babel-plugin-istanbul/5.2.0 + babel-preset-jest: registry.npmmirror.com/babel-preset-jest/24.9.0_@babel+core@7.16.7 + chalk: registry.npmmirror.com/chalk/2.4.2 + slash: registry.npmmirror.com/slash/2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/babel-loader/8.2.3_174483de130731162278521ff93b7183: + resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.3.tgz} + id: registry.npmmirror.com/babel-loader/8.2.3 + name: babel-loader + version: 8.2.3 + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + find-cache-dir: registry.npmmirror.com/find-cache-dir/3.3.2 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + make-dir: registry.npmmirror.com/make-dir/3.1.0 + schema-utils: registry.npmmirror.com/schema-utils/2.7.1 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/babel-messages/6.23.0: + resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-messages/-/babel-messages-6.23.0.tgz} + name: babel-messages + version: 6.23.0 + dependencies: + babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0 + dev: true + + registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz} + name: babel-plugin-dynamic-import-node + version: 2.3.3 + dependencies: + object.assign: registry.npmmirror.com/object.assign/4.1.2 + dev: true + + registry.npmmirror.com/babel-plugin-istanbul/5.2.0: + resolution: {integrity: sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz} + name: babel-plugin-istanbul + version: 5.2.0 + engines: {node: '>=6'} + dependencies: + '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 + find-up: registry.npmmirror.com/find-up/3.0.0 + istanbul-lib-instrument: registry.npmmirror.com/istanbul-lib-instrument/3.3.0 + test-exclude: registry.npmmirror.com/test-exclude/5.2.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/babel-plugin-jest-hoist/24.9.0: + resolution: {integrity: sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz} + name: babel-plugin-jest-hoist + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@types/babel__traverse': registry.npmmirror.com/@types/babel__traverse/7.14.2 + dev: true + + registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.0_@babel+core@7.16.7: + resolution: {integrity: sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz} + id: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.0 + name: babel-plugin-polyfill-corejs2 + version: 0.3.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.16.8 + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.0_@babel+core@7.16.7 + semver: registry.npmmirror.com/semver/6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.5.0_@babel+core@7.16.7: + resolution: {integrity: sha512-Hcrgnmkf+4JTj73GbK3bBhlVPiLL47owUAnoJIf69Hakl3q+KfodbDXiZWGMM7iqCZTxCG3Z2VRfPNYES4rXqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.0.tgz} + id: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.5.0 + name: babel-plugin-polyfill-corejs3 + version: 0.5.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.0_@babel+core@7.16.7 + core-js-compat: registry.npmmirror.com/core-js-compat/3.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.3.0_@babel+core@7.16.7: + resolution: {integrity: sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz} + id: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.3.0 + name: babel-plugin-polyfill-regenerator + version: 0.3.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.0_@babel+core@7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/babel-plugin-transform-es2015-modules-commonjs/6.26.2: + resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz} + name: babel-plugin-transform-es2015-modules-commonjs + version: 6.26.2 + dependencies: + babel-plugin-transform-strict-mode: registry.npmmirror.com/babel-plugin-transform-strict-mode/6.24.1 + babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0 + babel-template: registry.npmmirror.com/babel-template/6.26.0 + babel-types: registry.npmmirror.com/babel-types/6.26.0 + dev: true + + registry.npmmirror.com/babel-plugin-transform-strict-mode/6.24.1: + resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz} + name: babel-plugin-transform-strict-mode + version: 6.24.1 + dependencies: + babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0 + babel-types: registry.npmmirror.com/babel-types/6.26.0 + dev: true + + registry.npmmirror.com/babel-preset-jest/24.9.0_@babel+core@7.16.7: + resolution: {integrity: sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz} + id: registry.npmmirror.com/babel-preset-jest/24.9.0 + name: babel-preset-jest + version: 24.9.0 + engines: {node: '>= 6'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.7 + babel-plugin-jest-hoist: registry.npmmirror.com/babel-plugin-jest-hoist/24.9.0 + dev: true + + registry.npmmirror.com/babel-runtime/6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz} + name: babel-runtime + version: 6.26.0 + dependencies: + core-js: registry.npmmirror.com/core-js/2.6.12 + regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.11.1 + dev: true + + registry.npmmirror.com/babel-template/6.26.0: + resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-template/-/babel-template-6.26.0.tgz} + name: babel-template + version: 6.26.0 + dependencies: + babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0 + babel-traverse: registry.npmmirror.com/babel-traverse/6.26.0 + babel-types: registry.npmmirror.com/babel-types/6.26.0 + babylon: registry.npmmirror.com/babylon/6.18.0 + lodash: registry.npmmirror.com/lodash/4.17.21 + dev: true + + registry.npmmirror.com/babel-traverse/6.26.0: + resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-traverse/-/babel-traverse-6.26.0.tgz} + name: babel-traverse + version: 6.26.0 + dependencies: + babel-code-frame: registry.npmmirror.com/babel-code-frame/6.26.0 + babel-messages: registry.npmmirror.com/babel-messages/6.23.0 + babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0 + babel-types: registry.npmmirror.com/babel-types/6.26.0 + babylon: registry.npmmirror.com/babylon/6.18.0 + debug: registry.npmmirror.com/debug/2.6.9 + globals: registry.npmmirror.com/globals/9.18.0 + invariant: registry.npmmirror.com/invariant/2.2.4 + lodash: registry.npmmirror.com/lodash/4.17.21 + dev: true + + registry.npmmirror.com/babel-types/6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-types/-/babel-types-6.26.0.tgz} + name: babel-types + version: 6.26.0 + dependencies: + babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0 + esutils: registry.npmmirror.com/esutils/2.0.3 + lodash: registry.npmmirror.com/lodash/4.17.21 + to-fast-properties: registry.npmmirror.com/to-fast-properties/1.0.3 + dev: true + + registry.npmmirror.com/babylon/6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babylon/-/babylon-6.18.0.tgz} + name: babylon + version: 6.18.0 + hasBin: true + dev: true + + registry.npmmirror.com/balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} + name: balanced-match + version: 1.0.2 + dev: true + + registry.npmmirror.com/base/0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base/-/base-0.11.2.tgz} + name: base + version: 0.11.2 + engines: {node: '>=0.10.0'} + dependencies: + cache-base: registry.npmmirror.com/cache-base/1.0.1 + class-utils: registry.npmmirror.com/class-utils/0.3.6 + component-emitter: registry.npmmirror.com/component-emitter/1.3.0 + define-property: registry.npmmirror.com/define-property/1.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + mixin-deep: registry.npmmirror.com/mixin-deep/1.3.2 + pascalcase: registry.npmmirror.com/pascalcase/0.1.1 + dev: true + + registry.npmmirror.com/base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz} + name: base64-js + version: 1.5.1 + dev: true + + registry.npmmirror.com/batch/0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/batch/download/batch-0.6.1.tgz} + name: batch + version: 0.6.1 + dev: true + + registry.npmmirror.com/bcrypt-pbkdf/1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz} + name: bcrypt-pbkdf + version: 1.0.2 + dependencies: + tweetnacl: registry.npmmirror.com/tweetnacl/0.14.5 + dev: true + + registry.npmmirror.com/bfj/6.1.2: + resolution: {integrity: sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bfj/-/bfj-6.1.2.tgz} + name: bfj + version: 6.1.2 + engines: {node: '>= 6.0.0'} + dependencies: + bluebird: registry.npmmirror.com/bluebird/3.7.2 + check-types: registry.npmmirror.com/check-types/8.0.3 + hoopy: registry.npmmirror.com/hoopy/0.1.4 + tryer: registry.npmmirror.com/tryer/1.0.1 + dev: true + + registry.npmmirror.com/big.js/3.2.0: + resolution: {integrity: sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz} + name: big.js + version: 3.2.0 + dev: true + + registry.npmmirror.com/big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz} + name: big.js + version: 5.2.2 + dev: true + + registry.npmmirror.com/binary-extensions/1.13.1: + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz} + name: binary-extensions + version: 1.13.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz} + name: binary-extensions + version: 2.2.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/bindings/1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz} + name: bindings + version: 1.5.0 + requiresBuild: true + dependencies: + file-uri-to-path: registry.nlark.com/file-uri-to-path/1.0.0 + dev: true + + registry.npmmirror.com/block-stream/0.0.9: + resolution: {integrity: sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/block-stream/-/block-stream-0.0.9.tgz} + name: block-stream + version: 0.0.9 + engines: {node: 0.4 || >=0.5.8} + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + dev: true + + registry.npmmirror.com/bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz} + name: bluebird + version: 3.7.2 + dev: true + + registry.npmmirror.com/bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz} + name: bn.js + version: 4.12.0 + dev: true + + registry.npmmirror.com/bn.js/5.2.0: + resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bn.js/-/bn.js-5.2.0.tgz} + name: bn.js + version: 5.2.0 + dev: true + + registry.npmmirror.com/body-parser/1.19.1: + resolution: {integrity: sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/body-parser/-/body-parser-1.19.1.tgz} + name: body-parser + version: 1.19.1 + engines: {node: '>= 0.8'} + dependencies: + bytes: registry.npmmirror.com/bytes/3.1.1 + content-type: registry.npmmirror.com/content-type/1.0.4 + debug: registry.npmmirror.com/debug/2.6.9 + depd: registry.npmmirror.com/depd/1.1.2 + http-errors: registry.npmmirror.com/http-errors/1.8.1 + iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24 + on-finished: registry.npmmirror.com/on-finished/2.3.0 + qs: registry.npmmirror.com/qs/6.9.6 + raw-body: registry.npmmirror.com/raw-body/2.4.2 + type-is: registry.npmmirror.com/type-is/1.6.18 + dev: true + + registry.npmmirror.com/bonjour/3.5.0: + resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz} + name: bonjour + version: 3.5.0 + dependencies: + array-flatten: registry.npmmirror.com/array-flatten/2.1.2 + deep-equal: registry.npmmirror.com/deep-equal/1.1.1 + dns-equal: registry.npmmirror.com/dns-equal/1.0.0 + dns-txt: registry.npmmirror.com/dns-txt/2.0.2 + multicast-dns: registry.npmmirror.com/multicast-dns/6.2.3 + multicast-dns-service-types: registry.npmmirror.com/multicast-dns-service-types/1.1.0 + dev: true + + registry.npmmirror.com/boolbase/1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz} + name: boolbase + version: 1.0.0 + dev: true + + registry.npmmirror.com/brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz} + name: brace-expansion + version: 1.1.11 + dependencies: + balanced-match: registry.npmmirror.com/balanced-match/1.0.2 + concat-map: registry.nlark.com/concat-map/0.0.1 + dev: true + + registry.npmmirror.com/braces/2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz} + name: braces + version: 2.3.2 + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: registry.npmmirror.com/arr-flatten/1.1.0 + array-unique: registry.npmmirror.com/array-unique/0.3.2 + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + fill-range: registry.npmmirror.com/fill-range/4.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + repeat-element: registry.npmmirror.com/repeat-element/1.1.4 + snapdragon: registry.npmmirror.com/snapdragon/0.8.2 + snapdragon-node: registry.npmmirror.com/snapdragon-node/2.1.1 + split-string: registry.npmmirror.com/split-string/3.1.0 + to-regex: registry.npmmirror.com/to-regex/3.0.2 + dev: true + + registry.npmmirror.com/braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz} + name: braces + version: 3.0.2 + engines: {node: '>=8'} + dependencies: + fill-range: registry.npmmirror.com/fill-range/7.0.1 + dev: true + + registry.npmmirror.com/brorand/1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz} + name: brorand + version: 1.1.0 + dev: true + + registry.npmmirror.com/browser-process-hrtime/1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz} + name: browser-process-hrtime + version: 1.0.0 + dev: true + + registry.npmmirror.com/browser-resolve/1.11.3: + resolution: {integrity: sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browser-resolve/-/browser-resolve-1.11.3.tgz} + name: browser-resolve + version: 1.11.3 + dependencies: + resolve: registry.npmmirror.com/resolve/1.1.7 + dev: true + + registry.npmmirror.com/browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz} + name: browserify-aes + version: 1.2.0 + dependencies: + buffer-xor: registry.npmmirror.com/buffer-xor/1.0.3 + cipher-base: registry.npmmirror.com/cipher-base/1.0.4 + create-hash: registry.npmmirror.com/create-hash/1.2.0 + evp_bytestokey: registry.npmmirror.com/evp_bytestokey/1.0.3 + inherits: registry.npmmirror.com/inherits/2.0.4 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/browserify-cipher/1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz} + name: browserify-cipher + version: 1.0.1 + dependencies: + browserify-aes: registry.npmmirror.com/browserify-aes/1.2.0 + browserify-des: registry.npmmirror.com/browserify-des/1.0.2 + evp_bytestokey: registry.npmmirror.com/evp_bytestokey/1.0.3 + dev: true + + registry.npmmirror.com/browserify-des/1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz} + name: browserify-des + version: 1.0.2 + dependencies: + cipher-base: registry.npmmirror.com/cipher-base/1.0.4 + des.js: registry.npmmirror.com/des.js/1.0.1 + inherits: registry.npmmirror.com/inherits/2.0.4 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/browserify-rsa/4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz} + name: browserify-rsa + version: 4.1.0 + dependencies: + bn.js: registry.npmmirror.com/bn.js/5.2.0 + randombytes: registry.npmmirror.com/randombytes/2.1.0 + dev: true + + registry.npmmirror.com/browserify-sign/4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz} + name: browserify-sign + version: 4.2.1 + dependencies: + bn.js: registry.npmmirror.com/bn.js/5.2.0 + browserify-rsa: registry.npmmirror.com/browserify-rsa/4.1.0 + create-hash: registry.npmmirror.com/create-hash/1.2.0 + create-hmac: registry.npmmirror.com/create-hmac/1.1.7 + elliptic: registry.npmmirror.com/elliptic/6.5.4 + inherits: registry.npmmirror.com/inherits/2.0.4 + parse-asn1: registry.npmmirror.com/parse-asn1/5.1.6 + readable-stream: registry.npmmirror.com/readable-stream/3.6.0 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/browserify-zlib/0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz} + name: browserify-zlib + version: 0.2.0 + dependencies: + pako: registry.npmmirror.com/pako/1.0.11 + dev: true + + registry.npmmirror.com/browserslist/4.19.1: + resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.19.1.tgz} + name: browserslist + version: 4.19.1 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001298 + electron-to-chromium: registry.npmmirror.com/electron-to-chromium/1.4.39 + escalade: registry.npmmirror.com/escalade/3.1.1 + node-releases: registry.npmmirror.com/node-releases/2.0.1 + picocolors: registry.npmmirror.com/picocolors/1.0.0 + dev: true + + registry.npmmirror.com/bs-logger/0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bs-logger/-/bs-logger-0.2.6.tgz} + name: bs-logger + version: 0.2.6 + engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0 + dev: true + + registry.npmmirror.com/bser/2.1.1: + resolution: {integrity: sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bser/download/bser-2.1.1.tgz} + name: bser + version: 2.1.1 + dependencies: + node-int64: registry.npmmirror.com/node-int64/0.4.0 + dev: true + + registry.npmmirror.com/buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz} + name: buffer-from + version: 1.1.2 + dev: true + + registry.npmmirror.com/buffer-indexof/1.1.1: + resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz} + name: buffer-indexof + version: 1.1.1 + dev: true + + registry.npmmirror.com/buffer-json/2.0.0: + resolution: {integrity: sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-json/-/buffer-json-2.0.0.tgz} + name: buffer-json + version: 2.0.0 + dev: true + + registry.npmmirror.com/buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz} + name: buffer-xor + version: 1.0.3 + dev: true + + registry.npmmirror.com/buffer/4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz} + name: buffer + version: 4.9.2 + dependencies: + base64-js: registry.npmmirror.com/base64-js/1.5.1 + ieee754: registry.npmmirror.com/ieee754/1.2.1 + isarray: registry.npmmirror.com/isarray/1.0.0 + dev: true + + registry.npmmirror.com/builtin-modules/1.1.1: + resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builtin-modules/-/builtin-modules-1.1.1.tgz} + name: builtin-modules + version: 1.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/builtin-status-codes/3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz} + name: builtin-status-codes + version: 3.0.0 + dev: true + + registry.npmmirror.com/bytes/3.0.0: + resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bytes/download/bytes-3.0.0.tgz} + name: bytes + version: 3.0.0 + engines: {node: '>= 0.8'} + dev: true + + registry.npmmirror.com/bytes/3.1.1: + resolution: {integrity: sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bytes/download/bytes-3.1.1.tgz} + name: bytes + version: 3.1.1 + engines: {node: '>= 0.8'} + dev: true + + registry.npmmirror.com/cacache/12.0.4: + resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz} + name: cacache + version: 12.0.4 + dependencies: + bluebird: registry.npmmirror.com/bluebird/3.7.2 + chownr: registry.npmmirror.com/chownr/1.1.4 + figgy-pudding: registry.npmmirror.com/figgy-pudding/3.5.2 + glob: registry.npmmirror.com/glob/7.2.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + infer-owner: registry.npmmirror.com/infer-owner/1.0.4 + lru-cache: registry.npmmirror.com/lru-cache/5.1.1 + mississippi: registry.npmmirror.com/mississippi/3.0.0 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + move-concurrently: registry.npmmirror.com/move-concurrently/1.0.1 + promise-inflight: registry.npmmirror.com/promise-inflight/1.0.1 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + ssri: registry.npmmirror.com/ssri/6.0.2 + unique-filename: registry.npmmirror.com/unique-filename/1.1.1 + y18n: registry.npmmirror.com/y18n/4.0.3 + dev: true + + registry.npmmirror.com/cache-base/1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz} + name: cache-base + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: registry.npmmirror.com/collection-visit/1.0.0 + component-emitter: registry.npmmirror.com/component-emitter/1.3.0 + get-value: registry.npmmirror.com/get-value/2.0.6 + has-value: registry.npmmirror.com/has-value/1.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + set-value: registry.npmmirror.com/set-value/2.0.1 + to-object-path: registry.npmmirror.com/to-object-path/0.3.0 + union-value: registry.npmmirror.com/union-value/1.0.1 + unset-value: registry.npmmirror.com/unset-value/1.0.0 + dev: true + + registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0: + resolution: {integrity: sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cache-loader/-/cache-loader-4.1.0.tgz} + id: registry.npmmirror.com/cache-loader/4.1.0 + name: cache-loader + version: 4.1.0 + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + buffer-json: registry.npmmirror.com/buffer-json/2.0.0 + find-cache-dir: registry.npmmirror.com/find-cache-dir/3.3.2 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + neo-async: registry.npmmirror.com/neo-async/2.6.2 + schema-utils: registry.npmmirror.com/schema-utils/2.7.1 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz} + name: call-bind + version: 1.0.2 + dependencies: + function-bind: registry.npmmirror.com/function-bind/1.1.1 + get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 + dev: true + + registry.npmmirror.com/call-me-maybe/1.0.1: + resolution: {integrity: sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz} + name: call-me-maybe + version: 1.0.1 + dev: true + + registry.npmmirror.com/caller-callsite/2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz} + name: caller-callsite + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + callsites: registry.npmmirror.com/callsites/2.0.0 + dev: true + + registry.npmmirror.com/caller-path/2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz} + name: caller-path + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + caller-callsite: registry.npmmirror.com/caller-callsite/2.0.0 + dev: true + + registry.npmmirror.com/callsites/2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz} + name: callsites + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz} + name: callsites + version: 3.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/camel-case/3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz} + name: camel-case + version: 3.0.0 + dependencies: + no-case: registry.npmmirror.com/no-case/2.3.2 + upper-case: registry.npmmirror.com/upper-case/1.1.3 + dev: true + + registry.npmmirror.com/camelcase-keys/2.1.0: + resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz} + name: camelcase-keys + version: 2.1.0 + engines: {node: '>=0.10.0'} + dependencies: + camelcase: registry.npmmirror.com/camelcase/2.1.1 + map-obj: registry.npmmirror.com/map-obj/1.0.1 + dev: true + + registry.npmmirror.com/camelcase/2.1.1: + resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-2.1.1.tgz} + name: camelcase + version: 2.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/camelcase/3.0.0: + resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/download/camelcase-3.0.0.tgz} + name: camelcase + version: 3.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/camelcase/4.1.0: + resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-4.1.0.tgz} + name: camelcase + version: 4.1.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz} + name: camelcase + version: 5.3.1 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz} + name: camelcase + version: 6.3.0 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/caniuse-api/3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz} + name: caniuse-api + version: 3.0.0 + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001298 + lodash.memoize: registry.npmmirror.com/lodash.memoize/4.1.2 + lodash.uniq: registry.npmmirror.com/lodash.uniq/4.5.0 + dev: true + + registry.npmmirror.com/caniuse-lite/1.0.30001298: + resolution: {integrity: sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz} + name: caniuse-lite + version: 1.0.30001298 + dev: true + + registry.npmmirror.com/capture-exit/2.0.0: + resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/capture-exit/-/capture-exit-2.0.0.tgz} + name: capture-exit + version: 2.0.0 + engines: {node: 6.* || 8.* || >= 10.*} + dependencies: + rsvp: registry.npmmirror.com/rsvp/4.8.5 + dev: true + + registry.npmmirror.com/case-sensitive-paths-webpack-plugin/2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz} + name: case-sensitive-paths-webpack-plugin + version: 2.4.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/caseless/0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz} + name: caseless + version: 0.12.0 + dev: true + + registry.npmmirror.com/chalk/1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz} + name: chalk + version: 1.1.3 + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/2.2.1 + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 + has-ansi: registry.npmmirror.com/has-ansi/2.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + supports-color: registry.npmmirror.com/supports-color/2.0.0 + dev: true + + registry.npmmirror.com/chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz} + name: chalk + version: 2.4.2 + engines: {node: '>=4'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 + supports-color: registry.npmmirror.com/supports-color/5.5.0 + dev: true + + registry.npmmirror.com/chalk/3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz} + name: chalk + version: 3.0.0 + engines: {node: '>=8'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 + supports-color: registry.npmmirror.com/supports-color/7.2.0 + dev: true + + registry.npmmirror.com/chalk/4.1.2: + resolution: {integrity: sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/download/chalk-4.1.2.tgz} + name: chalk + version: 4.1.2 + engines: {node: '>=10'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 + supports-color: registry.npmmirror.com/supports-color/7.2.0 + dev: true + + registry.npmmirror.com/chardet/0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz} + name: chardet + version: 0.7.0 + dev: true + + registry.npmmirror.com/check-types/8.0.3: + resolution: {integrity: sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz} + name: check-types + version: 8.0.3 + dev: true + + registry.npmmirror.com/chokidar/2.1.8: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz} + name: chokidar + version: 2.1.8 + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + dependencies: + anymatch: registry.npmmirror.com/anymatch/2.0.0 + async-each: registry.npmmirror.com/async-each/1.0.3 + braces: registry.npmmirror.com/braces/2.3.2 + glob-parent: registry.npmmirror.com/glob-parent/3.1.0 + inherits: registry.npmmirror.com/inherits/2.0.4 + is-binary-path: registry.npmmirror.com/is-binary-path/1.0.1 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + normalize-path: registry.npmmirror.com/normalize-path/3.0.0 + path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1 + readdirp: registry.npmmirror.com/readdirp/2.2.1 + upath: registry.npmmirror.com/upath/1.2.0 + optionalDependencies: + fsevents: registry.npmmirror.com/fsevents/1.2.13 + dev: true + + registry.npmmirror.com/chokidar/3.5.2: + resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.2.tgz} + name: chokidar + version: 3.5.2 + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: registry.npmmirror.com/anymatch/3.1.2 + braces: registry.npmmirror.com/braces/3.0.2 + glob-parent: registry.npmmirror.com/glob-parent/5.1.2 + is-binary-path: registry.npmmirror.com/is-binary-path/2.1.0 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + normalize-path: registry.npmmirror.com/normalize-path/3.0.0 + readdirp: registry.npmmirror.com/readdirp/3.6.0 + optionalDependencies: + fsevents: registry.npmmirror.com/fsevents/2.3.2 + dev: true + + registry.npmmirror.com/chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz} + name: chownr + version: 1.1.4 + dev: true + + registry.npmmirror.com/chrome-trace-event/1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz} + name: chrome-trace-event + version: 1.0.3 + engines: {node: '>=6.0'} + dev: true + + registry.npmmirror.com/ci-info/1.6.0: + resolution: {integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz} + name: ci-info + version: 1.6.0 + dev: true + + registry.npmmirror.com/ci-info/2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz} + name: ci-info + version: 2.0.0 + dev: true + + registry.npmmirror.com/cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz} + name: cipher-base + version: 1.0.4 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/class-utils/0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz} + name: class-utils + version: 0.3.6 + engines: {node: '>=0.10.0'} + dependencies: + arr-union: registry.npmmirror.com/arr-union/3.1.0 + define-property: registry.npmmirror.com/define-property/0.2.5 + isobject: registry.npmmirror.com/isobject/3.0.1 + static-extend: registry.npmmirror.com/static-extend/0.1.2 + dev: true + + registry.npmmirror.com/clean-css/4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz} + name: clean-css + version: 4.2.4 + engines: {node: '>= 4.0'} + dependencies: + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz} + name: clean-stack + version: 2.2.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/cli-cursor/2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz} + name: cli-cursor + version: 2.1.0 + engines: {node: '>=4'} + dependencies: + restore-cursor: registry.npmmirror.com/restore-cursor/2.0.0 + dev: true + + registry.npmmirror.com/cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz} + name: cli-cursor + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + restore-cursor: registry.npmmirror.com/restore-cursor/3.1.0 + dev: true + + registry.npmmirror.com/cli-highlight/2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz} + name: cli-highlight + version: 2.1.11 + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + dependencies: + chalk: registry.npmmirror.com/chalk/4.1.2 + highlight.js: registry.npmmirror.com/highlight.js/10.7.3 + mz: registry.npmmirror.com/mz/2.7.0 + parse5: registry.npmmirror.com/parse5/5.1.1 + parse5-htmlparser2-tree-adapter: registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1 + yargs: registry.npmmirror.com/yargs/16.2.0 + dev: true + + registry.npmmirror.com/cli-spinners/2.6.1: + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz} + name: cli-spinners + version: 2.6.1 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/cli-truncate/0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-truncate/-/cli-truncate-0.2.1.tgz} + name: cli-truncate + version: 0.2.1 + engines: {node: '>=0.10.0'} + dependencies: + slice-ansi: registry.npmmirror.com/slice-ansi/0.0.4 + string-width: registry.npmmirror.com/string-width/1.0.2 + dev: true + + registry.npmmirror.com/cli-width/3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz} + name: cli-width + version: 3.0.0 + engines: {node: '>= 10'} + dev: true + + registry.npmmirror.com/clipboardy/2.3.0: + resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz} + name: clipboardy + version: 2.3.0 + engines: {node: '>=8'} + dependencies: + arch: registry.npmmirror.com/arch/2.2.0 + execa: registry.npmmirror.com/execa/1.0.0 + is-wsl: registry.npmmirror.com/is-wsl/2.2.0 + dev: true + + registry.npmmirror.com/cliui/5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz} + name: cliui + version: 5.0.0 + dependencies: + string-width: registry.npmmirror.com/string-width/3.1.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + wrap-ansi: registry.npmmirror.com/wrap-ansi/5.1.0 + dev: true + + registry.npmmirror.com/cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz} + name: cliui + version: 6.0.0 + dependencies: + string-width: registry.npmmirror.com/string-width/4.2.3 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + wrap-ansi: registry.npmmirror.com/wrap-ansi/6.2.0 + dev: true + + registry.npmmirror.com/cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz} + name: cliui + version: 7.0.4 + dependencies: + string-width: registry.npmmirror.com/string-width/4.2.3 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + wrap-ansi: registry.npmmirror.com/wrap-ansi/7.0.0 + dev: true + + registry.npmmirror.com/clone-buffer/1.0.0: + resolution: {integrity: sha1-4+JbIHrE5wGvch4staFnksrD3Fg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone-buffer/download/clone-buffer-1.0.0.tgz} + name: clone-buffer + version: 1.0.0 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/clone-deep/4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz} + name: clone-deep + version: 4.0.1 + engines: {node: '>=6'} + dependencies: + is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4 + kind-of: registry.npmmirror.com/kind-of/6.0.3 + shallow-clone: registry.npmmirror.com/shallow-clone/3.0.1 + dev: true + + registry.npmmirror.com/clone/1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz} + name: clone + version: 1.0.4 + engines: {node: '>=0.8'} + dev: true + + registry.npmmirror.com/clone/2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz} + name: clone + version: 2.1.2 + engines: {node: '>=0.8'} + dev: true + + registry.npmmirror.com/co/4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/co/-/co-4.6.0.tgz} + name: co + version: 4.6.0 + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + registry.npmmirror.com/coa/2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz} + name: coa + version: 2.0.2 + engines: {node: '>= 4.0'} + dependencies: + '@types/q': registry.npmmirror.com/@types/q/1.5.5 + chalk: registry.npmmirror.com/chalk/2.4.2 + q: registry.npmmirror.com/q/1.5.1 + dev: true + + registry.npmmirror.com/code-point-at/1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz} + name: code-point-at + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/codemirror/5.65.0: + resolution: {integrity: sha512-gWEnHKEcz1Hyz7fsQWpK7P0sPI2/kSkRX2tc7DFA6TmZuDN75x/1ejnH/Pn8adYKrLEA1V2ww6L00GudHZbSKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/codemirror/-/codemirror-5.65.0.tgz} + name: codemirror + version: 5.65.0 + dev: false + + registry.npmmirror.com/collection-visit/1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz} + name: collection-visit + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + map-visit: registry.npmmirror.com/map-visit/1.0.0 + object-visit: registry.npmmirror.com/object-visit/1.0.1 + dev: true + + registry.npmmirror.com/color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz} + name: color-convert + version: 1.9.3 + dependencies: + color-name: registry.npmmirror.com/color-name/1.1.3 + dev: true + + registry.npmmirror.com/color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz} + name: color-convert + version: 2.0.1 + engines: {node: '>=7.0.0'} + dependencies: + color-name: registry.npmmirror.com/color-name/1.1.4 + dev: true + + registry.npmmirror.com/color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz} + name: color-name + version: 1.1.3 + dev: true + + registry.npmmirror.com/color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz} + name: color-name + version: 1.1.4 + dev: true + + registry.npmmirror.com/color-string/1.9.0: + resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-string/-/color-string-1.9.0.tgz} + name: color-string + version: 1.9.0 + dependencies: + color-name: registry.npmmirror.com/color-name/1.1.4 + simple-swizzle: registry.npmmirror.com/simple-swizzle/0.2.2 + dev: true + + registry.npmmirror.com/color/3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color/-/color-3.2.1.tgz} + name: color + version: 3.2.1 + dependencies: + color-convert: registry.npmmirror.com/color-convert/1.9.3 + color-string: registry.npmmirror.com/color-string/1.9.0 + dev: true + + registry.npmmirror.com/combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz} + name: combined-stream + version: 1.0.8 + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: registry.npmmirror.com/delayed-stream/1.0.0 + dev: true + + registry.npmmirror.com/commander/2.17.1: + resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz} + name: commander + version: 2.17.1 + dev: true + + registry.npmmirror.com/commander/2.19.0: + resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz} + name: commander + version: 2.19.0 + dev: true + + registry.npmmirror.com/commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz} + name: commander + version: 2.20.3 + dev: true + + registry.npmmirror.com/commander/4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz} + name: commander + version: 4.1.1 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/commondir/1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz} + name: commondir + version: 1.0.1 + dev: true + + registry.npmmirror.com/component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz} + name: component-emitter + version: 1.3.0 + dev: true + + registry.npmmirror.com/compressible/2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz} + name: compressible + version: 2.0.18 + engines: {node: '>= 0.6'} + dependencies: + mime-db: registry.npmmirror.com/mime-db/1.51.0 + dev: true + + registry.npmmirror.com/compression/1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz} + name: compression + version: 1.7.4 + engines: {node: '>= 0.8.0'} + dependencies: + accepts: registry.npmmirror.com/accepts/1.3.7 + bytes: registry.npmmirror.com/bytes/3.0.0 + compressible: registry.npmmirror.com/compressible/2.0.18 + debug: registry.npmmirror.com/debug/2.6.9 + on-headers: registry.npmmirror.com/on-headers/1.0.2 + safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2 + vary: registry.npmmirror.com/vary/1.1.2 + dev: true + + registry.npmmirror.com/compute-scroll-into-view/1.0.17: + resolution: {integrity: sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz} + name: compute-scroll-into-view + version: 1.0.17 + dev: false + + registry.npmmirror.com/concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz} + name: concat-stream + version: 1.6.2 + engines: {'0': node >= 0.8} + dependencies: + buffer-from: registry.npmmirror.com/buffer-from/1.1.2 + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + typedarray: registry.npmmirror.com/typedarray/0.0.6 + dev: true + + registry.npmmirror.com/condense-newlines/0.2.1: + resolution: {integrity: sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/condense-newlines/-/condense-newlines-0.2.1.tgz} + name: condense-newlines + version: 0.2.1 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + is-whitespace: registry.npmmirror.com/is-whitespace/0.3.0 + kind-of: registry.npmmirror.com/kind-of/3.2.2 + dev: true + + registry.npmmirror.com/config-chain/1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz} + name: config-chain + version: 1.1.13 + dependencies: + ini: registry.npmmirror.com/ini/1.3.8 + proto-list: registry.npmmirror.com/proto-list/1.2.4 + dev: true + + registry.npmmirror.com/connect-history-api-fallback/1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz} + name: connect-history-api-fallback + version: 1.6.0 + engines: {node: '>=0.8'} + dev: true + + registry.npmmirror.com/console-browserify/1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz} + name: console-browserify + version: 1.2.0 + dev: true + + registry.npmmirror.com/console-control-strings/1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz} + name: console-control-strings + version: 1.1.0 + dev: true + + registry.npmmirror.com/consolidate/0.15.1: + resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz} + name: consolidate + version: 0.15.1 + engines: {node: '>= 0.10.0'} + dependencies: + bluebird: registry.npmmirror.com/bluebird/3.7.2 + dev: true + + registry.npmmirror.com/constants-browserify/1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz} + name: constants-browserify + version: 1.0.0 + dev: true + + registry.npmmirror.com/content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/content-disposition/download/content-disposition-0.5.4.tgz} + name: content-disposition + version: 0.5.4 + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/content-type/1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/content-type/-/content-type-1.0.4.tgz} + name: content-type + version: 1.0.4 + engines: {node: '>= 0.6'} + dev: true + + registry.npmmirror.com/convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz} + name: convert-source-map + version: 1.8.0 + dependencies: + safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2 + dev: true + + registry.npmmirror.com/copy-anything/2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz} + name: copy-anything + version: 2.0.6 + dependencies: + is-what: registry.npmmirror.com/is-what/3.14.1 + dev: true + + registry.npmmirror.com/copy-concurrently/1.0.5: + resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz} + name: copy-concurrently + version: 1.0.5 + dependencies: + aproba: registry.npmmirror.com/aproba/1.2.0 + fs-write-stream-atomic: registry.npmmirror.com/fs-write-stream-atomic/1.0.10 + iferr: registry.npmmirror.com/iferr/0.1.5 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + run-queue: registry.npmmirror.com/run-queue/1.0.3 + dev: true + + registry.npmmirror.com/copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz} + name: copy-descriptor + version: 0.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/copy-props/2.0.5: + resolution: {integrity: sha1-A8+a4yjU67Nvjx2AREimr57j8tI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-props/download/copy-props-2.0.5.tgz} + name: copy-props + version: 2.0.5 + dependencies: + each-props: registry.npmmirror.com/each-props/1.3.2 + is-plain-object: registry.nlark.com/is-plain-object/5.0.0 + dev: true + + registry.npmmirror.com/copy-webpack-plugin/5.1.2_webpack@4.46.0: + resolution: {integrity: sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz} + id: registry.npmmirror.com/copy-webpack-plugin/5.1.2 + name: copy-webpack-plugin + version: 5.1.2 + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + cacache: registry.npmmirror.com/cacache/12.0.4 + find-cache-dir: registry.npmmirror.com/find-cache-dir/2.1.0 + glob-parent: registry.npmmirror.com/glob-parent/3.1.0 + globby: registry.npmmirror.com/globby/7.1.1 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + normalize-path: registry.npmmirror.com/normalize-path/3.0.0 + p-limit: registry.npmmirror.com/p-limit/2.3.0 + schema-utils: registry.npmmirror.com/schema-utils/1.0.0 + serialize-javascript: registry.npmmirror.com/serialize-javascript/4.0.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + webpack-log: registry.npmmirror.com/webpack-log/2.0.0 + dev: true + + registry.npmmirror.com/core-js-compat/3.20.2: + resolution: {integrity: sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.20.2.tgz} + name: core-js-compat + version: 3.20.2 + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + semver: registry.npmmirror.com/semver/7.0.0 + dev: true + + registry.npmmirror.com/core-js/2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz} + name: core-js + version: 2.6.12 + deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: true + + registry.npmmirror.com/core-js/3.20.2: + resolution: {integrity: sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-3.20.2.tgz} + name: core-js + version: 3.20.2 + requiresBuild: true + + registry.npmmirror.com/core-util-is/1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz} + name: core-util-is + version: 1.0.2 + dev: true + + registry.npmmirror.com/core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz} + name: core-util-is + version: 1.0.3 + dev: true + + registry.npmmirror.com/cosmiconfig/5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz} + name: cosmiconfig + version: 5.2.1 + engines: {node: '>=4'} + dependencies: + import-fresh: registry.npmmirror.com/import-fresh/2.0.0 + is-directory: registry.npmmirror.com/is-directory/0.3.1 + js-yaml: registry.npmmirror.com/js-yaml/3.14.1 + parse-json: registry.npmmirror.com/parse-json/4.0.0 + dev: true + + registry.npmmirror.com/cosmiconfig/6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz} + name: cosmiconfig + version: 6.0.0 + engines: {node: '>=8'} + dependencies: + '@types/parse-json': registry.npmmirror.com/@types/parse-json/4.0.0 + import-fresh: registry.npmmirror.com/import-fresh/3.3.0 + parse-json: registry.npmmirror.com/parse-json/5.2.0 + path-type: registry.npmmirror.com/path-type/4.0.0 + yaml: registry.npmmirror.com/yaml/1.10.2 + dev: true + optional: true + + registry.npmmirror.com/create-ecdh/4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz} + name: create-ecdh + version: 4.0.4 + dependencies: + bn.js: registry.npmmirror.com/bn.js/4.12.0 + elliptic: registry.npmmirror.com/elliptic/6.5.4 + dev: true + + registry.npmmirror.com/create-hash/1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz} + name: create-hash + version: 1.2.0 + dependencies: + cipher-base: registry.npmmirror.com/cipher-base/1.0.4 + inherits: registry.npmmirror.com/inherits/2.0.4 + md5.js: registry.npmmirror.com/md5.js/1.3.5 + ripemd160: registry.npmmirror.com/ripemd160/2.0.2 + sha.js: registry.npmmirror.com/sha.js/2.4.11 + dev: true + + registry.npmmirror.com/create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz} + name: create-hmac + version: 1.1.7 + dependencies: + cipher-base: registry.npmmirror.com/cipher-base/1.0.4 + create-hash: registry.npmmirror.com/create-hash/1.2.0 + inherits: registry.npmmirror.com/inherits/2.0.4 + ripemd160: registry.npmmirror.com/ripemd160/2.0.2 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + sha.js: registry.npmmirror.com/sha.js/2.4.11 + dev: true + + registry.npmmirror.com/cross-spawn/3.0.1: + resolution: {integrity: sha512-eZ+m1WNhSZutOa/uRblAc9Ut5MQfukFrFMtPSm3bZCA888NmMd5AWXWdgRZ80zd+pTk1P2JrGjg9pUPTvl2PWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-3.0.1.tgz} + name: cross-spawn + version: 3.0.1 + dependencies: + lru-cache: registry.npmmirror.com/lru-cache/4.1.5 + which: registry.npmmirror.com/which/1.3.1 + dev: true + + registry.npmmirror.com/cross-spawn/5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz} + name: cross-spawn + version: 5.1.0 + dependencies: + lru-cache: registry.npmmirror.com/lru-cache/4.1.5 + shebang-command: registry.npmmirror.com/shebang-command/1.2.0 + which: registry.npmmirror.com/which/1.3.1 + dev: true + + registry.npmmirror.com/cross-spawn/6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz} + name: cross-spawn + version: 6.0.5 + engines: {node: '>=4.8'} + dependencies: + nice-try: registry.npmmirror.com/nice-try/1.0.5 + path-key: registry.npmmirror.com/path-key/2.0.1 + semver: registry.npmmirror.com/semver/5.7.1 + shebang-command: registry.npmmirror.com/shebang-command/1.2.0 + which: registry.npmmirror.com/which/1.3.1 + dev: true + + registry.npmmirror.com/cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz} + name: cross-spawn + version: 7.0.3 + engines: {node: '>= 8'} + dependencies: + path-key: registry.npmmirror.com/path-key/3.1.1 + shebang-command: registry.npmmirror.com/shebang-command/2.0.0 + which: registry.npmmirror.com/which/2.0.2 + dev: true + + registry.npmmirror.com/crypto-browserify/3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz} + name: crypto-browserify + version: 3.12.0 + dependencies: + browserify-cipher: registry.npmmirror.com/browserify-cipher/1.0.1 + browserify-sign: registry.npmmirror.com/browserify-sign/4.2.1 + create-ecdh: registry.npmmirror.com/create-ecdh/4.0.4 + create-hash: registry.npmmirror.com/create-hash/1.2.0 + create-hmac: registry.npmmirror.com/create-hmac/1.1.7 + diffie-hellman: registry.npmmirror.com/diffie-hellman/5.0.3 + inherits: registry.npmmirror.com/inherits/2.0.4 + pbkdf2: registry.npmmirror.com/pbkdf2/3.1.2 + public-encrypt: registry.npmmirror.com/public-encrypt/4.0.3 + randombytes: registry.npmmirror.com/randombytes/2.1.0 + randomfill: registry.npmmirror.com/randomfill/1.0.4 + dev: true + + registry.npmmirror.com/css-color-names/0.0.4: + resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz} + name: css-color-names + version: 0.0.4 + dev: true + + registry.npmmirror.com/css-declaration-sorter/4.0.1: + resolution: {integrity: sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz} + name: css-declaration-sorter + version: 4.0.1 + engines: {node: '>4'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + timsort: registry.npmmirror.com/timsort/0.3.0 + dev: true + + registry.npmmirror.com/css-loader/3.6.0_webpack@4.46.0: + resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz} + id: registry.npmmirror.com/css-loader/3.6.0 + name: css-loader + version: 3.6.0 + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + camelcase: registry.npmmirror.com/camelcase/5.3.1 + cssesc: registry.npmmirror.com/cssesc/3.0.0 + icss-utils: registry.npmmirror.com/icss-utils/4.1.1 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + normalize-path: registry.npmmirror.com/normalize-path/3.0.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-modules-extract-imports: registry.npmmirror.com/postcss-modules-extract-imports/2.0.0 + postcss-modules-local-by-default: registry.npmmirror.com/postcss-modules-local-by-default/3.0.3 + postcss-modules-scope: registry.npmmirror.com/postcss-modules-scope/2.2.0 + postcss-modules-values: registry.npmmirror.com/postcss-modules-values/3.0.0 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0 + schema-utils: registry.npmmirror.com/schema-utils/2.7.1 + semver: registry.npmmirror.com/semver/6.3.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/css-select-base-adapter/0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz} + name: css-select-base-adapter + version: 0.1.1 + dev: true + + registry.npmmirror.com/css-select/2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz} + name: css-select + version: 2.1.0 + dependencies: + boolbase: registry.npmmirror.com/boolbase/1.0.0 + css-what: registry.npmmirror.com/css-what/3.4.2 + domutils: registry.npmmirror.com/domutils/1.7.0 + nth-check: registry.npmmirror.com/nth-check/1.0.2 + dev: true + + registry.npmmirror.com/css-select/4.2.1: + resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select/-/css-select-4.2.1.tgz} + name: css-select + version: 4.2.1 + dependencies: + boolbase: registry.npmmirror.com/boolbase/1.0.0 + css-what: registry.npmmirror.com/css-what/5.1.0 + domhandler: registry.npmmirror.com/domhandler/4.3.0 + domutils: registry.npmmirror.com/domutils/2.8.0 + nth-check: registry.npmmirror.com/nth-check/2.0.1 + dev: true + + registry.npmmirror.com/css-tree/1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz} + name: css-tree + version: 1.0.0-alpha.37 + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: registry.npmmirror.com/mdn-data/2.0.4 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/css-tree/1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz} + name: css-tree + version: 1.1.3 + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: registry.npmmirror.com/mdn-data/2.0.14 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/css-what/3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz} + name: css-what + version: 3.4.2 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/css-what/5.1.0: + resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-what/-/css-what-5.1.0.tgz} + name: css-what + version: 5.1.0 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/css/2.2.4: + resolution: {integrity: sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css/-/css-2.2.4.tgz} + name: css + version: 2.2.4 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + source-map: registry.npmmirror.com/source-map/0.6.1 + source-map-resolve: registry.npmmirror.com/source-map-resolve/0.5.3 + urix: registry.npmmirror.com/urix/0.1.0 + dev: true + + registry.npmmirror.com/cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz} + name: cssesc + version: 3.0.0 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmmirror.com/cssnano-preset-default/4.0.8: + resolution: {integrity: sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz} + name: cssnano-preset-default + version: 4.0.8 + engines: {node: '>=6.9.0'} + dependencies: + css-declaration-sorter: registry.npmmirror.com/css-declaration-sorter/4.0.1 + cssnano-util-raw-cache: registry.npmmirror.com/cssnano-util-raw-cache/4.0.1 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-calc: registry.npmmirror.com/postcss-calc/7.0.5 + postcss-colormin: registry.npmmirror.com/postcss-colormin/4.0.3 + postcss-convert-values: registry.npmmirror.com/postcss-convert-values/4.0.1 + postcss-discard-comments: registry.npmmirror.com/postcss-discard-comments/4.0.2 + postcss-discard-duplicates: registry.npmmirror.com/postcss-discard-duplicates/4.0.2 + postcss-discard-empty: registry.npmmirror.com/postcss-discard-empty/4.0.1 + postcss-discard-overridden: registry.npmmirror.com/postcss-discard-overridden/4.0.1 + postcss-merge-longhand: registry.npmmirror.com/postcss-merge-longhand/4.0.11 + postcss-merge-rules: registry.npmmirror.com/postcss-merge-rules/4.0.3 + postcss-minify-font-values: registry.npmmirror.com/postcss-minify-font-values/4.0.2 + postcss-minify-gradients: registry.npmmirror.com/postcss-minify-gradients/4.0.2 + postcss-minify-params: registry.npmmirror.com/postcss-minify-params/4.0.2 + postcss-minify-selectors: registry.npmmirror.com/postcss-minify-selectors/4.0.2 + postcss-normalize-charset: registry.npmmirror.com/postcss-normalize-charset/4.0.1 + postcss-normalize-display-values: registry.npmmirror.com/postcss-normalize-display-values/4.0.2 + postcss-normalize-positions: registry.npmmirror.com/postcss-normalize-positions/4.0.2 + postcss-normalize-repeat-style: registry.npmmirror.com/postcss-normalize-repeat-style/4.0.2 + postcss-normalize-string: registry.npmmirror.com/postcss-normalize-string/4.0.2 + postcss-normalize-timing-functions: registry.npmmirror.com/postcss-normalize-timing-functions/4.0.2 + postcss-normalize-unicode: registry.npmmirror.com/postcss-normalize-unicode/4.0.1 + postcss-normalize-url: registry.npmmirror.com/postcss-normalize-url/4.0.1 + postcss-normalize-whitespace: registry.npmmirror.com/postcss-normalize-whitespace/4.0.2 + postcss-ordered-values: registry.npmmirror.com/postcss-ordered-values/4.1.2 + postcss-reduce-initial: registry.npmmirror.com/postcss-reduce-initial/4.0.3 + postcss-reduce-transforms: registry.npmmirror.com/postcss-reduce-transforms/4.0.2 + postcss-svgo: registry.npmmirror.com/postcss-svgo/4.0.3 + postcss-unique-selectors: registry.npmmirror.com/postcss-unique-selectors/4.0.1 + dev: true + + registry.npmmirror.com/cssnano-util-get-arguments/4.0.0: + resolution: {integrity: sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz} + name: cssnano-util-get-arguments + version: 4.0.0 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/cssnano-util-get-match/4.0.0: + resolution: {integrity: sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz} + name: cssnano-util-get-match + version: 4.0.0 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/cssnano-util-raw-cache/4.0.1: + resolution: {integrity: sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz} + name: cssnano-util-raw-cache + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/cssnano-util-same-parent/4.0.1: + resolution: {integrity: sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz} + name: cssnano-util-same-parent + version: 4.0.1 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/cssnano/4.1.11: + resolution: {integrity: sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz} + name: cssnano + version: 4.1.11 + engines: {node: '>=6.9.0'} + dependencies: + cosmiconfig: registry.npmmirror.com/cosmiconfig/5.2.1 + cssnano-preset-default: registry.npmmirror.com/cssnano-preset-default/4.0.8 + is-resolvable: registry.npmmirror.com/is-resolvable/1.1.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/csso/4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz} + name: csso + version: 4.2.0 + engines: {node: '>=8.0.0'} + dependencies: + css-tree: registry.npmmirror.com/css-tree/1.1.3 + dev: true + + registry.npmmirror.com/cssom/0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz} + name: cssom + version: 0.3.8 + dev: true + + registry.npmmirror.com/cssom/0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz} + name: cssom + version: 0.4.4 + dev: true + + registry.npmmirror.com/cssstyle/1.4.0: + resolution: {integrity: sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssstyle/-/cssstyle-1.4.0.tgz} + name: cssstyle + version: 1.4.0 + dependencies: + cssom: registry.npmmirror.com/cssom/0.3.8 + dev: true + + registry.npmmirror.com/cssstyle/2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz} + name: cssstyle + version: 2.3.0 + engines: {node: '>=8'} + dependencies: + cssom: registry.npmmirror.com/cssom/0.3.8 + dev: true + + registry.npmmirror.com/csstype/2.6.19: + resolution: {integrity: sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.19.tgz} + name: csstype + version: 2.6.19 + dev: false + + registry.npmmirror.com/currently-unhandled/0.4.1: + resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz} + name: currently-unhandled + version: 0.4.1 + engines: {node: '>=0.10.0'} + dependencies: + array-find-index: registry.npmmirror.com/array-find-index/1.0.2 + dev: true + + registry.npmmirror.com/cyclist/1.0.1: + resolution: {integrity: sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz} + name: cyclist + version: 1.0.1 + dev: true + + registry.npmmirror.com/dashdash/1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz} + name: dashdash + version: 1.14.1 + engines: {node: '>=0.10'} + dependencies: + assert-plus: registry.npmmirror.com/assert-plus/1.0.0 + dev: true + + registry.npmmirror.com/data-urls/1.1.0: + resolution: {integrity: sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/data-urls/-/data-urls-1.1.0.tgz} + name: data-urls + version: 1.1.0 + dependencies: + abab: registry.npmmirror.com/abab/2.0.5 + whatwg-mimetype: registry.npmmirror.com/whatwg-mimetype/2.3.0 + whatwg-url: registry.npmmirror.com/whatwg-url/7.1.0 + dev: true + + registry.npmmirror.com/date-fns/1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns/-/date-fns-1.30.1.tgz} + name: date-fns + version: 1.30.1 + dev: true + + registry.npmmirror.com/dayjs/1.10.7: + resolution: {integrity: sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.10.7.tgz} + name: dayjs + version: 1.10.7 + dev: false + + registry.npmmirror.com/deasync/0.1.24: + resolution: {integrity: sha512-i98vg42xNfRZCymummMAN0rIcQ1gZFinSe3btvPIvy6JFTaeHcumeKybRo2HTv86nasfmT0nEgAn2ggLZhOCVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deasync/-/deasync-0.1.24.tgz} + name: deasync + version: 0.1.24 + engines: {node: '>=0.11.0'} + requiresBuild: true + dependencies: + bindings: registry.npmmirror.com/bindings/1.5.0 + node-addon-api: registry.npmmirror.com/node-addon-api/1.7.2 + dev: true + + registry.npmmirror.com/debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz} + name: debug + version: 2.6.9 + dependencies: + ms: registry.npmmirror.com/ms/2.0.0 + dev: true + + registry.npmmirror.com/debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz} + name: debug + version: 3.2.7 + dependencies: + ms: registry.npmmirror.com/ms/2.1.3 + dev: true + + registry.npmmirror.com/debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.3.tgz} + name: debug + version: 4.3.3 + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: registry.npmmirror.com/ms/2.1.2 + dev: true + + registry.npmmirror.com/debug/4.3.3_supports-color@6.1.0: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.3.tgz} + id: registry.npmmirror.com/debug/4.3.3 + name: debug + version: 4.3.3 + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: registry.npmmirror.com/ms/2.1.2 + supports-color: registry.npmmirror.com/supports-color/6.1.0 + dev: true + + registry.npmmirror.com/decamelize/1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz} + name: decamelize + version: 1.2.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/decode-uri-component/0.2.0: + resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz} + name: decode-uri-component + version: 0.2.0 + engines: {node: '>=0.10'} + dev: true + + registry.npmmirror.com/dedent/0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz} + name: dedent + version: 0.7.0 + dev: true + + registry.npmmirror.com/deep-equal/1.1.1: + resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz} + name: deep-equal + version: 1.1.1 + dependencies: + is-arguments: registry.npmmirror.com/is-arguments/1.1.1 + is-date-object: registry.npmmirror.com/is-date-object/1.0.5 + is-regex: registry.npmmirror.com/is-regex/1.1.4 + object-is: registry.npmmirror.com/object-is/1.1.5 + object-keys: registry.npmmirror.com/object-keys/1.1.1 + regexp.prototype.flags: registry.npmmirror.com/regexp.prototype.flags/1.3.1 + dev: true + + registry.npmmirror.com/deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz} + name: deep-is + version: 0.1.4 + dev: true + + registry.npmmirror.com/deepmerge/1.3.2: + resolution: {integrity: sha512-qjMjTrk+RKv/sp4RPDpV5CnKhxjFI9p+GkLBOls5A8EEElldYWCWA9zceAkmfd0xIo2aU1nxiaLFoiya2sb6Cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-1.3.2.tgz} + name: deepmerge + version: 1.3.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/deepmerge/1.5.2: + resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz} + name: deepmerge + version: 1.5.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/deepmerge/4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz} + name: deepmerge + version: 4.2.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/default-gateway/4.2.0: + resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz} + name: default-gateway + version: 4.2.0 + engines: {node: '>=6'} + dependencies: + execa: registry.npmmirror.com/execa/1.0.0 + ip-regex: registry.npmmirror.com/ip-regex/2.1.0 + dev: true + + registry.npmmirror.com/default-gateway/5.0.5: + resolution: {integrity: sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/default-gateway/-/default-gateway-5.0.5.tgz} + name: default-gateway + version: 5.0.5 + engines: {node: ^8.12.0 || >=9.7.0} + dependencies: + execa: registry.npmmirror.com/execa/3.4.0 + dev: true + + registry.npmmirror.com/default-resolution/2.0.0: + resolution: {integrity: sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/default-resolution/download/default-resolution-2.0.0.tgz} + name: default-resolution + version: 2.0.0 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/defaults/1.0.3: + resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz} + name: defaults + version: 1.0.3 + dependencies: + clone: registry.npmmirror.com/clone/1.0.4 + dev: true + + registry.npmmirror.com/define-properties/1.1.3: + resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-properties/-/define-properties-1.1.3.tgz} + name: define-properties + version: 1.1.3 + engines: {node: '>= 0.4'} + dependencies: + object-keys: registry.npmmirror.com/object-keys/1.1.1 + dev: true + + registry.npmmirror.com/define-property/0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz} + name: define-property + version: 0.2.5 + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: registry.npmmirror.com/is-descriptor/0.1.6 + dev: true + + registry.npmmirror.com/define-property/1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz} + name: define-property + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: registry.npmmirror.com/is-descriptor/1.0.2 + dev: true + + registry.npmmirror.com/define-property/2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz} + name: define-property + version: 2.0.2 + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: registry.npmmirror.com/is-descriptor/1.0.2 + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.npmmirror.com/del/4.1.1: + resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/del/-/del-4.1.1.tgz} + name: del + version: 4.1.1 + engines: {node: '>=6'} + dependencies: + '@types/glob': registry.npmmirror.com/@types/glob/7.2.0 + globby: registry.npmmirror.com/globby/6.1.0 + is-path-cwd: registry.npmmirror.com/is-path-cwd/2.2.0 + is-path-in-cwd: registry.npmmirror.com/is-path-in-cwd/2.1.0 + p-map: registry.npmmirror.com/p-map/2.1.0 + pify: registry.npmmirror.com/pify/4.0.1 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + dev: true + + registry.npmmirror.com/del/5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/del/-/del-5.1.0.tgz} + name: del + version: 5.1.0 + engines: {node: '>=8'} + dependencies: + globby: registry.npmmirror.com/globby/10.0.2 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + is-path-cwd: registry.npmmirror.com/is-path-cwd/2.2.0 + is-path-inside: registry.npmmirror.com/is-path-inside/3.0.3 + p-map: registry.npmmirror.com/p-map/3.0.0 + rimraf: registry.npmmirror.com/rimraf/3.0.2 + slash: registry.npmmirror.com/slash/3.0.0 + dev: true + + registry.npmmirror.com/delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz} + name: delayed-stream + version: 1.0.0 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmmirror.com/delegates/1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz} + name: delegates + version: 1.0.0 + dev: true + + registry.npmmirror.com/depd/1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz} + name: depd + version: 1.1.2 + engines: {node: '>= 0.6'} + dev: true + + registry.npmmirror.com/des.js/1.0.1: + resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz} + name: des.js + version: 1.0.1 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1 + dev: true + + registry.npmmirror.com/destroy/1.0.4: + resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/destroy/-/destroy-1.0.4.tgz} + name: destroy + version: 1.0.4 + dev: true + + registry.npmmirror.com/detect-newline/2.1.0: + resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/detect-newline/-/detect-newline-2.1.0.tgz} + name: detect-newline + version: 2.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/detect-node/2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz} + name: detect-node + version: 2.1.0 + dev: true + + registry.npmmirror.com/diff-sequences/24.9.0: + resolution: {integrity: sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diff-sequences/-/diff-sequences-24.9.0.tgz} + name: diff-sequences + version: 24.9.0 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz} + name: diff + version: 4.0.2 + engines: {node: '>=0.3.1'} + dev: true + + registry.npmmirror.com/diffie-hellman/5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz} + name: diffie-hellman + version: 5.0.3 + dependencies: + bn.js: registry.npmmirror.com/bn.js/4.12.0 + miller-rabin: registry.npmmirror.com/miller-rabin/4.0.1 + randombytes: registry.npmmirror.com/randombytes/2.1.0 + dev: true + + registry.npmmirror.com/dir-glob/2.2.2: + resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz} + name: dir-glob + version: 2.2.2 + engines: {node: '>=4'} + dependencies: + path-type: registry.npmmirror.com/path-type/3.0.0 + dev: true + + registry.npmmirror.com/dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz} + name: dir-glob + version: 3.0.1 + engines: {node: '>=8'} + dependencies: + path-type: registry.npmmirror.com/path-type/4.0.0 + dev: true + + registry.npmmirror.com/dns-equal/1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz} + name: dns-equal + version: 1.0.0 + dev: true + + registry.npmmirror.com/dns-packet/1.3.4: + resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz} + name: dns-packet + version: 1.3.4 + dependencies: + ip: registry.npmmirror.com/ip/1.1.5 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/dns-txt/2.0.2: + resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz} + name: dns-txt + version: 2.0.2 + dependencies: + buffer-indexof: registry.npmmirror.com/buffer-indexof/1.1.1 + dev: true + + registry.npmmirror.com/doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz} + name: doctrine + version: 3.0.0 + engines: {node: '>=6.0.0'} + dependencies: + esutils: registry.npmmirror.com/esutils/2.0.3 + dev: true + + registry.npmmirror.com/dom-align/1.12.2: + resolution: {integrity: sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-align/-/dom-align-1.12.2.tgz} + name: dom-align + version: 1.12.2 + dev: false + + registry.npmmirror.com/dom-converter/0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz} + name: dom-converter + version: 0.2.0 + dependencies: + utila: registry.npmmirror.com/utila/0.4.0 + dev: true + + registry.npmmirror.com/dom-scroll-into-view/2.0.1: + resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz} + name: dom-scroll-into-view + version: 2.0.1 + dev: false + + registry.npmmirror.com/dom-serializer/0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz} + name: dom-serializer + version: 0.2.2 + dependencies: + domelementtype: registry.npmmirror.com/domelementtype/2.2.0 + entities: registry.npmmirror.com/entities/2.2.0 + dev: true + + registry.npmmirror.com/dom-serializer/1.3.2: + resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.3.2.tgz} + name: dom-serializer + version: 1.3.2 + dependencies: + domelementtype: registry.npmmirror.com/domelementtype/2.2.0 + domhandler: registry.npmmirror.com/domhandler/4.3.0 + entities: registry.npmmirror.com/entities/2.2.0 + dev: true + + registry.npmmirror.com/domain-browser/1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz} + name: domain-browser + version: 1.2.0 + engines: {node: '>=0.4', npm: '>=1.2'} + dev: true + + registry.npmmirror.com/domelementtype/1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz} + name: domelementtype + version: 1.3.1 + dev: true + + registry.npmmirror.com/domelementtype/2.2.0: + resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-2.2.0.tgz} + name: domelementtype + version: 2.2.0 + dev: true + + registry.npmmirror.com/domexception/1.0.1: + resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domexception/-/domexception-1.0.1.tgz} + name: domexception + version: 1.0.1 + dependencies: + webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2 + dev: true + + registry.npmmirror.com/domhandler/2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz} + name: domhandler + version: 2.4.2 + dependencies: + domelementtype: registry.npmmirror.com/domelementtype/1.3.1 + dev: true + + registry.npmmirror.com/domhandler/4.3.0: + resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-4.3.0.tgz} + name: domhandler + version: 4.3.0 + engines: {node: '>= 4'} + dependencies: + domelementtype: registry.npmmirror.com/domelementtype/2.2.0 + dev: true + + registry.npmmirror.com/domready/1.0.8: + resolution: {integrity: sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domready/download/domready-1.0.8.tgz} + name: domready + version: 1.0.8 + dev: true + + registry.npmmirror.com/domutils/1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz} + name: domutils + version: 1.7.0 + dependencies: + dom-serializer: registry.npmmirror.com/dom-serializer/0.2.2 + domelementtype: registry.npmmirror.com/domelementtype/1.3.1 + dev: true + + registry.npmmirror.com/domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz} + name: domutils + version: 2.8.0 + dependencies: + dom-serializer: registry.npmmirror.com/dom-serializer/1.3.2 + domelementtype: registry.npmmirror.com/domelementtype/2.2.0 + domhandler: registry.npmmirror.com/domhandler/4.3.0 + dev: true + + registry.npmmirror.com/dot-prop/5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz} + name: dot-prop + version: 5.3.0 + engines: {node: '>=8'} + dependencies: + is-obj: registry.npmmirror.com/is-obj/2.0.0 + dev: true + + registry.npmmirror.com/dotenv-expand/5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz} + name: dotenv-expand + version: 5.1.0 + dev: true + + registry.npmmirror.com/dotenv/11.0.0: + resolution: {integrity: sha512-Fp/b504Y5W+e+FpCxTFMUZ7ZEQkQYF0rx+KZtmwixJxGQbLHrhCwo3FjZgNC8vIfrSi29PABNbMoCGD9YoiXbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dotenv/download/dotenv-11.0.0.tgz} + name: dotenv + version: 11.0.0 + engines: {node: '>=12'} + dev: true + + registry.npmmirror.com/dotenv/8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dotenv/-/dotenv-8.6.0.tgz} + name: dotenv + version: 8.6.0 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz} + name: duplexer + version: 0.1.2 + dev: true + + registry.npmmirror.com/duplexify/3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz} + name: duplexify + version: 3.7.1 + dependencies: + end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4 + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + stream-shift: registry.npmmirror.com/stream-shift/1.0.1 + dev: true + + registry.npmmirror.com/each-props/1.3.2: + resolution: {integrity: sha1-6kWkFNFt1c+kGbGoFyDVygaJIzM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/each-props/download/each-props-1.3.2.tgz} + name: each-props + version: 1.3.2 + dependencies: + is-plain-object: registry.nlark.com/is-plain-object/2.0.4 + object.defaults: registry.nlark.com/object.defaults/1.1.0 + dev: true + + registry.npmmirror.com/easy-stack/1.0.1: + resolution: {integrity: sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz} + name: easy-stack + version: 1.0.1 + engines: {node: '>=6.0.0'} + dev: true + + registry.npmmirror.com/ecc-jsbn/0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz} + name: ecc-jsbn + version: 0.1.2 + dependencies: + jsbn: registry.npmmirror.com/jsbn/0.1.1 + safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2 + dev: true + + registry.npmmirror.com/echarts/4.9.0: + resolution: {integrity: sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts/-/echarts-4.9.0.tgz} + name: echarts + version: 4.9.0 + dependencies: + zrender: registry.nlark.com/zrender/4.3.2 + dev: false + + registry.npmmirror.com/editorconfig/0.15.3: + resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/editorconfig/-/editorconfig-0.15.3.tgz} + name: editorconfig + version: 0.15.3 + hasBin: true + dependencies: + commander: registry.npmmirror.com/commander/2.20.3 + lru-cache: registry.npmmirror.com/lru-cache/4.1.5 + semver: registry.npmmirror.com/semver/5.7.1 + sigmund: registry.npmmirror.com/sigmund/1.0.1 + dev: true + + registry.npmmirror.com/ejs/2.7.4: + resolution: {integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ejs/-/ejs-2.7.4.tgz} + name: ejs + version: 2.7.4 + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: true + + registry.npmmirror.com/electron-to-chromium/1.4.39: + resolution: {integrity: sha512-bFH3gdRq/l7WlzSleiO6dwpZH3RhiJ8vlMq0tOJMfT+5nb+x397eJn2RHF6Ho/9GCKv+BkimNlUMHl9+Yh+Qcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.39.tgz} + name: electron-to-chromium + version: 1.4.39 + dev: true + + registry.npmmirror.com/elegant-spinner/1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz} + name: elegant-spinner + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/element-plus/1.2.0-beta.6_vue@3.2.26: + resolution: {integrity: sha512-8EdSIR/5/FHcSB8w1diAh+gJMHgxIvxuZoayY99k6taAR1QyEFHuPTgFccZLopJ1+iP4UEsZFz49l57qS08Utw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/element-plus/-/element-plus-1.2.0-beta.6.tgz} + id: registry.npmmirror.com/element-plus/1.2.0-beta.6 + name: element-plus + version: 1.2.0-beta.6 + peerDependencies: + vue: ^3.2.0 + dependencies: + '@element-plus/icons-vue': registry.npmmirror.com/@element-plus/icons-vue/0.2.4_vue@3.2.26 + '@popperjs/core': registry.npmmirror.com/@popperjs/core/2.11.2 + '@vueuse/core': registry.npmmirror.com/@vueuse/core/7.5.3_vue@3.2.26 + async-validator: registry.npmmirror.com/async-validator/4.0.7 + dayjs: registry.npmmirror.com/dayjs/1.10.7 + lodash: registry.npmmirror.com/lodash/4.17.21 + memoize-one: registry.npmmirror.com/memoize-one/6.0.0 + normalize-wheel-es: registry.npmmirror.com/normalize-wheel-es/1.1.1 + vue: registry.npmmirror.com/vue/3.2.26 + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + + registry.npmmirror.com/elliptic/6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz} + name: elliptic + version: 6.5.4 + dependencies: + bn.js: registry.npmmirror.com/bn.js/4.12.0 + brorand: registry.npmmirror.com/brorand/1.1.0 + hash.js: registry.npmmirror.com/hash.js/1.1.7 + hmac-drbg: registry.npmmirror.com/hmac-drbg/1.0.1 + inherits: registry.npmmirror.com/inherits/2.0.4 + minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1 + minimalistic-crypto-utils: registry.npmmirror.com/minimalistic-crypto-utils/1.0.1 + dev: true + + registry.npmmirror.com/emoji-regex/7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz} + name: emoji-regex + version: 7.0.3 + dev: true + + registry.npmmirror.com/emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz} + name: emoji-regex + version: 8.0.0 + dev: true + + registry.npmmirror.com/emojis-list/2.1.0: + resolution: {integrity: sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz} + name: emojis-list + version: 2.1.0 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz} + name: emojis-list + version: 3.0.0 + engines: {node: '>= 4'} + dev: true + + registry.npmmirror.com/encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz} + name: encodeurl + version: 1.0.2 + engines: {node: '>= 0.8'} + dev: true + + registry.npmmirror.com/end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz} + name: end-of-stream + version: 1.4.4 + dependencies: + once: registry.npmmirror.com/once/1.4.0 + dev: true + + registry.npmmirror.com/enhanced-resolve/4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz} + name: enhanced-resolve + version: 4.5.0 + engines: {node: '>=6.9.0'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + memory-fs: registry.npmmirror.com/memory-fs/0.5.0 + tapable: registry.npmmirror.com/tapable/1.1.3 + dev: true + + registry.npmmirror.com/entities/1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz} + name: entities + version: 1.1.2 + dev: true + + registry.npmmirror.com/entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz} + name: entities + version: 2.2.0 + dev: true + + registry.npmmirror.com/errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz} + name: errno + version: 0.1.8 + hasBin: true + dependencies: + prr: registry.npmmirror.com/prr/1.0.1 + dev: true + + registry.npmmirror.com/error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz} + name: error-ex + version: 1.3.2 + dependencies: + is-arrayish: registry.npmmirror.com/is-arrayish/0.2.1 + dev: true + + registry.npmmirror.com/error-stack-parser/2.0.6: + resolution: {integrity: sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz} + name: error-stack-parser + version: 2.0.6 + dependencies: + stackframe: registry.npmmirror.com/stackframe/1.2.0 + dev: true + + registry.npmmirror.com/es-abstract/1.19.1: + resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-abstract/-/es-abstract-1.19.1.tgz} + name: es-abstract + version: 1.19.1 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + es-to-primitive: registry.npmmirror.com/es-to-primitive/1.2.1 + function-bind: registry.npmmirror.com/function-bind/1.1.1 + get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 + get-symbol-description: registry.npmmirror.com/get-symbol-description/1.0.0 + has: registry.npmmirror.com/has/1.0.3 + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + internal-slot: registry.npmmirror.com/internal-slot/1.0.3 + is-callable: registry.npmmirror.com/is-callable/1.2.4 + is-negative-zero: registry.npmmirror.com/is-negative-zero/2.0.2 + is-regex: registry.npmmirror.com/is-regex/1.1.4 + is-shared-array-buffer: registry.npmmirror.com/is-shared-array-buffer/1.0.1 + is-string: registry.npmmirror.com/is-string/1.0.7 + is-weakref: registry.npmmirror.com/is-weakref/1.0.2 + object-inspect: registry.npmmirror.com/object-inspect/1.12.0 + object-keys: registry.npmmirror.com/object-keys/1.1.1 + object.assign: registry.npmmirror.com/object.assign/4.1.2 + string.prototype.trimend: registry.npmmirror.com/string.prototype.trimend/1.0.4 + string.prototype.trimstart: registry.npmmirror.com/string.prototype.trimstart/1.0.4 + unbox-primitive: registry.npmmirror.com/unbox-primitive/1.0.1 + dev: true + + registry.npmmirror.com/es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz} + name: es-to-primitive + version: 1.2.1 + engines: {node: '>= 0.4'} + dependencies: + is-callable: registry.npmmirror.com/is-callable/1.2.4 + is-date-object: registry.npmmirror.com/is-date-object/1.0.5 + is-symbol: registry.npmmirror.com/is-symbol/1.0.4 + dev: true + + registry.npmmirror.com/escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz} + name: escalade + version: 3.1.1 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz} + name: escape-html + version: 1.0.3 + dev: true + + registry.npmmirror.com/escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} + name: escape-string-regexp + version: 1.0.5 + engines: {node: '>=0.8.0'} + dev: true + + registry.npmmirror.com/escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz} + name: escape-string-regexp + version: 2.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/escodegen/1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escodegen/-/escodegen-1.14.3.tgz} + name: escodegen + version: 1.14.3 + engines: {node: '>=4.0'} + hasBin: true + dependencies: + esprima: registry.npmmirror.com/esprima/4.0.1 + estraverse: registry.npmmirror.com/estraverse/4.3.0 + esutils: registry.npmmirror.com/esutils/2.0.3 + optionator: registry.npmmirror.com/optionator/0.8.3 + optionalDependencies: + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/eslint-loader/2.2.1_eslint@6.8.0+webpack@4.46.0: + resolution: {integrity: sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-loader/-/eslint-loader-2.2.1.tgz} + id: registry.npmmirror.com/eslint-loader/2.2.1 + name: eslint-loader + version: 2.2.1 + deprecated: This loader has been deprecated. Please use eslint-webpack-plugin + peerDependencies: + eslint: '>=1.6.0 <7.0.0' + webpack: '>=2.0.0 <5.0.0' + dependencies: + eslint: registry.npmmirror.com/eslint/6.8.0 + loader-fs-cache: registry.npmmirror.com/loader-fs-cache/1.0.3 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + object-hash: registry.npmmirror.com/object-hash/1.3.1 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/eslint-plugin-vue/7.20.0_eslint@6.8.0: + resolution: {integrity: sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz} + id: registry.npmmirror.com/eslint-plugin-vue/7.20.0 + name: eslint-plugin-vue + version: 7.20.0 + engines: {node: '>=8.10'} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + dependencies: + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-utils: registry.npmmirror.com/eslint-utils/2.1.0 + natural-compare: registry.npmmirror.com/natural-compare/1.4.0 + semver: registry.npmmirror.com/semver/6.3.0 + vue-eslint-parser: registry.npmmirror.com/vue-eslint-parser/7.11.0_eslint@6.8.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/eslint-scope/4.0.3: + resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz} + name: eslint-scope + version: 4.0.3 + engines: {node: '>=4.0.0'} + dependencies: + esrecurse: registry.npmmirror.com/esrecurse/4.3.0 + estraverse: registry.npmmirror.com/estraverse/4.3.0 + dev: true + + registry.npmmirror.com/eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz} + name: eslint-scope + version: 5.1.1 + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: registry.npmmirror.com/esrecurse/4.3.0 + estraverse: registry.npmmirror.com/estraverse/4.3.0 + dev: true + + registry.npmmirror.com/eslint-utils/1.4.3: + resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-utils/-/eslint-utils-1.4.3.tgz} + name: eslint-utils + version: 1.4.3 + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0 + dev: true + + registry.npmmirror.com/eslint-utils/2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-utils/-/eslint-utils-2.1.0.tgz} + name: eslint-utils + version: 2.1.0 + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0 + dev: true + + registry.npmmirror.com/eslint-visitor-keys/1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz} + name: eslint-visitor-keys + version: 1.3.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/eslint-visitor-keys/2.1.0: + resolution: {integrity: sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz?cache=0&sync_timestamp=1636378498011&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.1.0.tgz} + name: eslint-visitor-keys + version: 2.1.0 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/eslint/6.8.0: + resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint/-/eslint-6.8.0.tgz} + name: eslint + version: 6.8.0 + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + hasBin: true + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + ajv: registry.npmmirror.com/ajv/6.12.6 + chalk: registry.npmmirror.com/chalk/2.4.2 + cross-spawn: registry.npmmirror.com/cross-spawn/6.0.5 + debug: registry.npmmirror.com/debug/4.3.3 + doctrine: registry.npmmirror.com/doctrine/3.0.0 + eslint-scope: registry.npmmirror.com/eslint-scope/5.1.1 + eslint-utils: registry.npmmirror.com/eslint-utils/1.4.3 + eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0 + espree: registry.npmmirror.com/espree/6.2.1 + esquery: registry.npmmirror.com/esquery/1.4.0 + esutils: registry.npmmirror.com/esutils/2.0.3 + file-entry-cache: registry.npmmirror.com/file-entry-cache/5.0.1 + functional-red-black-tree: registry.npmmirror.com/functional-red-black-tree/1.0.1 + glob-parent: registry.npmmirror.com/glob-parent/5.1.2 + globals: registry.npmmirror.com/globals/12.4.0 + ignore: registry.npmmirror.com/ignore/4.0.6 + import-fresh: registry.npmmirror.com/import-fresh/3.3.0 + imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4 + inquirer: registry.npmmirror.com/inquirer/7.3.3 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + js-yaml: registry.npmmirror.com/js-yaml/3.14.1 + json-stable-stringify-without-jsonify: registry.npmmirror.com/json-stable-stringify-without-jsonify/1.0.1 + levn: registry.npmmirror.com/levn/0.3.0 + lodash: registry.npmmirror.com/lodash/4.17.21 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + natural-compare: registry.npmmirror.com/natural-compare/1.4.0 + optionator: registry.npmmirror.com/optionator/0.8.3 + progress: registry.npmmirror.com/progress/2.0.3 + regexpp: registry.npmmirror.com/regexpp/2.0.1 + semver: registry.npmmirror.com/semver/6.3.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + strip-json-comments: registry.npmmirror.com/strip-json-comments/3.1.1 + table: registry.npmmirror.com/table/5.4.6 + text-table: registry.npmmirror.com/text-table/0.2.0 + v8-compile-cache: registry.npmmirror.com/v8-compile-cache/2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/espree/6.2.1: + resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz} + name: espree + version: 6.2.1 + engines: {node: '>=6.0.0'} + dependencies: + acorn: registry.npmmirror.com/acorn/7.4.1 + acorn-jsx: registry.npmmirror.com/acorn-jsx/5.3.2_acorn@7.4.1 + eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0 + dev: true + + registry.npmmirror.com/esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz} + name: esprima + version: 4.0.1 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmmirror.com/esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz} + name: esquery + version: 1.4.0 + engines: {node: '>=0.10'} + dependencies: + estraverse: registry.npmmirror.com/estraverse/5.3.0 + dev: true + + registry.npmmirror.com/esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz} + name: esrecurse + version: 4.3.0 + engines: {node: '>=4.0'} + dependencies: + estraverse: registry.npmmirror.com/estraverse/5.3.0 + dev: true + + registry.npmmirror.com/estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz} + name: estraverse + version: 4.3.0 + engines: {node: '>=4.0'} + dev: true + + registry.npmmirror.com/estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz} + name: estraverse + version: 5.3.0 + engines: {node: '>=4.0'} + dev: true + + registry.npmmirror.com/estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} + name: estree-walker + version: 2.0.2 + + registry.npmmirror.com/esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz} + name: esutils + version: 2.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz} + name: etag + version: 1.8.1 + engines: {node: '>= 0.6'} + dev: true + + registry.npmmirror.com/eventemitter3/4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz} + name: eventemitter3 + version: 4.0.7 + dev: true + + registry.npmmirror.com/events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/events/-/events-3.3.0.tgz} + name: events + version: 3.3.0 + engines: {node: '>=0.8.x'} + dev: true + + registry.npmmirror.com/eventsource/1.1.0: + resolution: {integrity: sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventsource/-/eventsource-1.1.0.tgz} + name: eventsource + version: 1.1.0 + engines: {node: '>=0.12.0'} + dependencies: + original: registry.npmmirror.com/original/1.0.2 + dev: true + + registry.npmmirror.com/evp_bytestokey/1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz} + name: evp_bytestokey + version: 1.0.3 + dependencies: + md5.js: registry.npmmirror.com/md5.js/1.3.5 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/exec-sh/0.3.6: + resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/exec-sh/-/exec-sh-0.3.6.tgz} + name: exec-sh + version: 0.3.6 + dev: true + + registry.npmmirror.com/execa/0.8.0: + resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-0.8.0.tgz} + name: execa + version: 0.8.0 + engines: {node: '>=4'} + dependencies: + cross-spawn: registry.npmmirror.com/cross-spawn/5.1.0 + get-stream: registry.npmmirror.com/get-stream/3.0.0 + is-stream: registry.npmmirror.com/is-stream/1.1.0 + npm-run-path: registry.npmmirror.com/npm-run-path/2.0.2 + p-finally: registry.npmmirror.com/p-finally/1.0.0 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + strip-eof: registry.npmmirror.com/strip-eof/1.0.0 + dev: true + + registry.npmmirror.com/execa/1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz} + name: execa + version: 1.0.0 + engines: {node: '>=6'} + dependencies: + cross-spawn: registry.npmmirror.com/cross-spawn/6.0.5 + get-stream: registry.npmmirror.com/get-stream/4.1.0 + is-stream: registry.npmmirror.com/is-stream/1.1.0 + npm-run-path: registry.npmmirror.com/npm-run-path/2.0.2 + p-finally: registry.npmmirror.com/p-finally/1.0.0 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + strip-eof: registry.npmmirror.com/strip-eof/1.0.0 + dev: true + + registry.npmmirror.com/execa/2.1.0: + resolution: {integrity: sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-2.1.0.tgz} + name: execa + version: 2.1.0 + engines: {node: ^8.12.0 || >=9.7.0} + dependencies: + cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3 + get-stream: registry.npmmirror.com/get-stream/5.2.0 + is-stream: registry.npmmirror.com/is-stream/2.0.1 + merge-stream: registry.npmmirror.com/merge-stream/2.0.0 + npm-run-path: registry.npmmirror.com/npm-run-path/3.1.0 + onetime: registry.npmmirror.com/onetime/5.1.2 + p-finally: registry.npmmirror.com/p-finally/2.0.1 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0 + dev: true + + registry.npmmirror.com/execa/3.4.0: + resolution: {integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-3.4.0.tgz} + name: execa + version: 3.4.0 + engines: {node: ^8.12.0 || >=9.7.0} + dependencies: + cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3 + get-stream: registry.npmmirror.com/get-stream/5.2.0 + human-signals: registry.npmmirror.com/human-signals/1.1.1 + is-stream: registry.npmmirror.com/is-stream/2.0.1 + merge-stream: registry.npmmirror.com/merge-stream/2.0.0 + npm-run-path: registry.npmmirror.com/npm-run-path/4.0.1 + onetime: registry.npmmirror.com/onetime/5.1.2 + p-finally: registry.npmmirror.com/p-finally/2.0.1 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0 + dev: true + + registry.npmmirror.com/exit/0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz} + name: exit + version: 0.1.2 + engines: {node: '>= 0.8.0'} + dev: true + + registry.npmmirror.com/expand-brackets/2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz} + name: expand-brackets + version: 2.1.4 + engines: {node: '>=0.10.0'} + dependencies: + debug: registry.npmmirror.com/debug/2.6.9 + define-property: registry.npmmirror.com/define-property/0.2.5 + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + posix-character-classes: registry.npmmirror.com/posix-character-classes/0.1.1 + regex-not: registry.npmmirror.com/regex-not/1.0.2 + snapdragon: registry.npmmirror.com/snapdragon/0.8.2 + to-regex: registry.npmmirror.com/to-regex/3.0.2 + dev: true + + registry.npmmirror.com/expect/24.9.0: + resolution: {integrity: sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/expect/-/expect-24.9.0.tgz} + name: expect + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/24.9.0 + jest-message-util: registry.npmmirror.com/jest-message-util/24.9.0 + jest-regex-util: registry.npmmirror.com/jest-regex-util/24.9.0 + dev: true + + registry.npmmirror.com/express/4.17.2: + resolution: {integrity: sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/express/-/express-4.17.2.tgz} + name: express + version: 4.17.2 + engines: {node: '>= 0.10.0'} + dependencies: + accepts: registry.npmmirror.com/accepts/1.3.7 + array-flatten: registry.npmmirror.com/array-flatten/1.1.1 + body-parser: registry.npmmirror.com/body-parser/1.19.1 + content-disposition: registry.npmmirror.com/content-disposition/0.5.4 + content-type: registry.npmmirror.com/content-type/1.0.4 + cookie: registry.nlark.com/cookie/0.4.1 + cookie-signature: registry.nlark.com/cookie-signature/1.0.6 + debug: registry.npmmirror.com/debug/2.6.9 + depd: registry.npmmirror.com/depd/1.1.2 + encodeurl: registry.npmmirror.com/encodeurl/1.0.2 + escape-html: registry.npmmirror.com/escape-html/1.0.3 + etag: registry.npmmirror.com/etag/1.8.1 + finalhandler: registry.npmmirror.com/finalhandler/1.1.2 + fresh: registry.nlark.com/fresh/0.5.2 + merge-descriptors: registry.nlark.com/merge-descriptors/1.0.1 + methods: registry.npmmirror.com/methods/1.1.2 + on-finished: registry.npmmirror.com/on-finished/2.3.0 + parseurl: registry.npmmirror.com/parseurl/1.3.3 + path-to-regexp: registry.npmmirror.com/path-to-regexp/0.1.7 + proxy-addr: registry.npmmirror.com/proxy-addr/2.0.7 + qs: registry.npmmirror.com/qs/6.9.6 + range-parser: registry.npmmirror.com/range-parser/1.2.1 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + send: registry.npmmirror.com/send/0.17.2 + serve-static: registry.npmmirror.com/serve-static/1.14.2 + setprototypeof: registry.nlark.com/setprototypeof/1.2.0 + statuses: registry.npmmirror.com/statuses/1.5.0 + type-is: registry.npmmirror.com/type-is/1.6.18 + utils-merge: registry.nlark.com/utils-merge/1.0.1 + vary: registry.npmmirror.com/vary/1.1.2 + dev: true + + registry.npmmirror.com/ext/1.6.0: + resolution: {integrity: sha1-OHHVBkHodMwXLitT+RmELRnbTFI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ext/download/ext-1.6.0.tgz} + name: ext + version: 1.6.0 + dependencies: + type: registry.nlark.com/type/2.5.0 + dev: true + + registry.npmmirror.com/extend-shallow/2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz} + name: extend-shallow + version: 2.0.1 + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: registry.npmmirror.com/is-extendable/0.1.1 + dev: true + + registry.npmmirror.com/extend-shallow/3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz} + name: extend-shallow + version: 3.0.2 + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: registry.npmmirror.com/assign-symbols/1.0.0 + is-extendable: registry.npmmirror.com/is-extendable/1.0.1 + dev: true + + registry.npmmirror.com/extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz} + name: extend + version: 3.0.2 + dev: true + + registry.npmmirror.com/external-editor/3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz} + name: external-editor + version: 3.1.0 + engines: {node: '>=4'} + dependencies: + chardet: registry.npmmirror.com/chardet/0.7.0 + iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24 + tmp: registry.npmmirror.com/tmp/0.0.33 + dev: true + + registry.npmmirror.com/extglob/2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz} + name: extglob + version: 2.0.4 + engines: {node: '>=0.10.0'} + dependencies: + array-unique: registry.npmmirror.com/array-unique/0.3.2 + define-property: registry.npmmirror.com/define-property/1.0.0 + expand-brackets: registry.npmmirror.com/expand-brackets/2.1.4 + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1 + regex-not: registry.npmmirror.com/regex-not/1.0.2 + snapdragon: registry.npmmirror.com/snapdragon/0.8.2 + to-regex: registry.npmmirror.com/to-regex/3.0.2 + dev: true + + registry.npmmirror.com/extract-from-css/0.4.4: + resolution: {integrity: sha512-41qWGBdtKp9U7sgBxAQ7vonYqSXzgW/SiAYzq4tdWSVhAShvpVCH1nyvPQgjse6EdgbW7Y7ERdT3674/lKr65A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extract-from-css/-/extract-from-css-0.4.4.tgz} + name: extract-from-css + version: 0.4.4 + engines: {node: '>=0.10.0', npm: '>=2.0.0'} + dependencies: + css: registry.npmmirror.com/css/2.2.4 + dev: true + + registry.npmmirror.com/extsprintf/1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz} + name: extsprintf + version: 1.3.0 + engines: {'0': node >=0.6.0} + dev: true + + registry.npmmirror.com/fancy-log/1.3.3: + resolution: {integrity: sha1-28GRVPVYaQFQojlToK29A1vkX8c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fancy-log/download/fancy-log-1.3.3.tgz} + name: fancy-log + version: 1.3.3 + engines: {node: '>= 0.10'} + dependencies: + ansi-gray: registry.nlark.com/ansi-gray/0.1.1 + color-support: registry.nlark.com/color-support/1.1.3 + parse-node-version: registry.npmmirror.com/parse-node-version/1.0.1 + time-stamp: registry.npmmirror.com/time-stamp/1.1.0 + dev: true + + registry.npmmirror.com/fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} + name: fast-deep-equal + version: 3.1.3 + dev: true + + registry.npmmirror.com/fast-glob/2.2.7: + resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz} + name: fast-glob + version: 2.2.7 + engines: {node: '>=4.0.0'} + dependencies: + '@mrmlnc/readdir-enhanced': registry.npmmirror.com/@mrmlnc/readdir-enhanced/2.2.1 + '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/1.1.3 + glob-parent: registry.npmmirror.com/glob-parent/3.1.0 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + merge2: registry.npmmirror.com/merge2/1.4.1 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + dev: true + + registry.npmmirror.com/fast-glob/3.2.10: + resolution: {integrity: sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.10.tgz} + name: fast-glob + version: 3.2.10 + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 + '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk/1.2.8 + glob-parent: registry.npmmirror.com/glob-parent/5.1.2 + merge2: registry.npmmirror.com/merge2/1.4.1 + micromatch: registry.npmmirror.com/micromatch/4.0.4 + dev: true + + registry.npmmirror.com/fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} + name: fast-json-stable-stringify + version: 2.1.0 + dev: true + + registry.npmmirror.com/fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} + name: fast-levenshtein + version: 2.0.6 + dev: true + + registry.npmmirror.com/fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz} + name: fastq + version: 1.13.0 + dependencies: + reusify: registry.npmmirror.com/reusify/1.0.4 + dev: true + + registry.npmmirror.com/faye-websocket/0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz} + name: faye-websocket + version: 0.11.4 + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: registry.npmmirror.com/websocket-driver/0.7.4 + dev: true + + registry.npmmirror.com/fb-watchman/2.0.1: + resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.1.tgz} + name: fb-watchman + version: 2.0.1 + dependencies: + bser: registry.npmmirror.com/bser/2.1.1 + dev: true + + registry.npmmirror.com/figgy-pudding/3.5.2: + resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz} + name: figgy-pudding + version: 3.5.2 + dev: true + + registry.npmmirror.com/figures/1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-1.7.0.tgz} + name: figures + version: 1.7.0 + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + dev: true + + registry.npmmirror.com/figures/2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz} + name: figures + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 + dev: true + + registry.npmmirror.com/figures/3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz} + name: figures + version: 3.2.0 + engines: {node: '>=8'} + dependencies: + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 + dev: true + + registry.npmmirror.com/file-entry-cache/5.0.1: + resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz} + name: file-entry-cache + version: 5.0.1 + engines: {node: '>=4'} + dependencies: + flat-cache: registry.npmmirror.com/flat-cache/2.0.1 + dev: true + + registry.npmmirror.com/file-loader/4.3.0_webpack@4.46.0: + resolution: {integrity: sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-loader/-/file-loader-4.3.0.tgz} + id: registry.npmmirror.com/file-loader/4.3.0 + name: file-loader + version: 4.3.0 + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + schema-utils: registry.npmmirror.com/schema-utils/2.7.1 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/filesize/3.6.1: + resolution: {integrity: sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz} + name: filesize + version: 3.6.1 + engines: {node: '>= 0.4.0'} + dev: true + + registry.npmmirror.com/fill-range/4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz} + name: fill-range + version: 4.0.0 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + is-number: registry.npmmirror.com/is-number/3.0.0 + repeat-string: registry.npmmirror.com/repeat-string/1.6.1 + to-regex-range: registry.npmmirror.com/to-regex-range/2.1.1 + dev: true + + registry.npmmirror.com/fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz} + name: fill-range + version: 7.0.1 + engines: {node: '>=8'} + dependencies: + to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1 + dev: true + + registry.npmmirror.com/finalhandler/1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz} + name: finalhandler + version: 1.1.2 + engines: {node: '>= 0.8'} + dependencies: + debug: registry.npmmirror.com/debug/2.6.9 + encodeurl: registry.npmmirror.com/encodeurl/1.0.2 + escape-html: registry.npmmirror.com/escape-html/1.0.3 + on-finished: registry.npmmirror.com/on-finished/2.3.0 + parseurl: registry.npmmirror.com/parseurl/1.3.3 + statuses: registry.npmmirror.com/statuses/1.5.0 + unpipe: registry.npmmirror.com/unpipe/1.0.0 + dev: true + + registry.npmmirror.com/find-babel-config/1.2.0: + resolution: {integrity: sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-babel-config/-/find-babel-config-1.2.0.tgz} + name: find-babel-config + version: 1.2.0 + engines: {node: '>=4.0.0'} + dependencies: + json5: registry.npmmirror.com/json5/0.5.1 + path-exists: registry.npmmirror.com/path-exists/3.0.0 + dev: true + + registry.npmmirror.com/find-cache-dir/0.1.1: + resolution: {integrity: sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz} + name: find-cache-dir + version: 0.1.1 + engines: {node: '>=0.10.0'} + dependencies: + commondir: registry.npmmirror.com/commondir/1.0.1 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + pkg-dir: registry.npmmirror.com/pkg-dir/1.0.0 + dev: true + + registry.npmmirror.com/find-cache-dir/2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz} + name: find-cache-dir + version: 2.1.0 + engines: {node: '>=6'} + dependencies: + commondir: registry.npmmirror.com/commondir/1.0.1 + make-dir: registry.npmmirror.com/make-dir/2.1.0 + pkg-dir: registry.npmmirror.com/pkg-dir/3.0.0 + dev: true + + registry.npmmirror.com/find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz} + name: find-cache-dir + version: 3.3.2 + engines: {node: '>=8'} + dependencies: + commondir: registry.npmmirror.com/commondir/1.0.1 + make-dir: registry.npmmirror.com/make-dir/3.1.0 + pkg-dir: registry.npmmirror.com/pkg-dir/4.2.0 + dev: true + + registry.npmmirror.com/find-up/1.1.2: + resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz} + name: find-up + version: 1.1.2 + engines: {node: '>=0.10.0'} + dependencies: + path-exists: registry.npmmirror.com/path-exists/2.1.0 + pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1 + dev: true + + registry.npmmirror.com/find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz} + name: find-up + version: 3.0.0 + engines: {node: '>=6'} + dependencies: + locate-path: registry.npmmirror.com/locate-path/3.0.0 + dev: true + + registry.npmmirror.com/find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz} + name: find-up + version: 4.1.0 + engines: {node: '>=8'} + dependencies: + locate-path: registry.npmmirror.com/locate-path/5.0.0 + path-exists: registry.npmmirror.com/path-exists/4.0.0 + dev: true + + registry.npmmirror.com/findup-sync/2.0.0: + resolution: {integrity: sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/findup-sync/download/findup-sync-2.0.0.tgz} + name: findup-sync + version: 2.0.0 + engines: {node: '>= 0.10'} + dependencies: + detect-file: registry.nlark.com/detect-file/1.0.0 + is-glob: registry.npmmirror.com/is-glob/3.1.0 + micromatch: registry.nlark.com/micromatch/3.1.10 + resolve-dir: registry.nlark.com/resolve-dir/1.0.1 + dev: true + + registry.npmmirror.com/findup-sync/3.0.0: + resolution: {integrity: sha1-F7EI+e5RLft6XH88iyfqnhqcCNE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/findup-sync/download/findup-sync-3.0.0.tgz} + name: findup-sync + version: 3.0.0 + engines: {node: '>= 0.10'} + dependencies: + detect-file: registry.nlark.com/detect-file/1.0.0 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + micromatch: registry.nlark.com/micromatch/3.1.10 + resolve-dir: registry.nlark.com/resolve-dir/1.0.1 + dev: true + + registry.npmmirror.com/fined/1.2.0: + resolution: {integrity: sha1-0AvszxqitHXRbUI7Aji3E6LEo3s=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fined/download/fined-1.2.0.tgz} + name: fined + version: 1.2.0 + engines: {node: '>= 0.10'} + dependencies: + expand-tilde: registry.nlark.com/expand-tilde/2.0.2 + is-plain-object: registry.nlark.com/is-plain-object/2.0.4 + object.defaults: registry.nlark.com/object.defaults/1.1.0 + object.pick: registry.nlark.com/object.pick/1.3.0 + parse-filepath: registry.nlark.com/parse-filepath/1.0.2 + dev: true + + registry.npmmirror.com/flagged-respawn/1.0.1: + resolution: {integrity: sha1-595vEnnd2cqarIpZcdYYYGs6q0E=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flagged-respawn/download/flagged-respawn-1.0.1.tgz} + name: flagged-respawn + version: 1.0.1 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/flat-cache/2.0.1: + resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flat-cache/-/flat-cache-2.0.1.tgz} + name: flat-cache + version: 2.0.1 + engines: {node: '>=4'} + dependencies: + flatted: registry.npmmirror.com/flatted/2.0.2 + rimraf: registry.npmmirror.com/rimraf/2.6.3 + write: registry.nlark.com/write/1.0.3 + dev: true + + registry.npmmirror.com/flatted/2.0.2: + resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz} + name: flatted + version: 2.0.2 + dev: true + + registry.npmmirror.com/flush-write-stream/1.1.1: + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz} + name: flush-write-stream + version: 1.1.1 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/follow-redirects/1.14.7: + resolution: {integrity: sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.7.tgz} + name: follow-redirects + version: 1.14.7 + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + registry.npmmirror.com/follow-redirects/1.14.7_debug@4.3.3: + resolution: {integrity: sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.7.tgz} + id: registry.npmmirror.com/follow-redirects/1.14.7 + name: follow-redirects + version: 1.14.7 + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: registry.npmmirror.com/debug/4.3.3 + dev: true + + registry.npmmirror.com/for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz} + name: for-each + version: 0.3.3 + dependencies: + is-callable: registry.npmmirror.com/is-callable/1.2.4 + dev: true + + registry.npmmirror.com/for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz} + name: for-in + version: 1.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/forever-agent/0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz} + name: forever-agent + version: 0.6.1 + dev: true + + registry.npmmirror.com/fork-ts-checker-webpack-plugin/3.1.1: + resolution: {integrity: sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz} + name: fork-ts-checker-webpack-plugin + version: 3.1.1 + engines: {node: '>=6.11.5', yarn: '>=1.0.0'} + dependencies: + babel-code-frame: registry.npmmirror.com/babel-code-frame/6.26.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + chokidar: registry.npmmirror.com/chokidar/3.5.2 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + semver: registry.npmmirror.com/semver/5.7.1 + tapable: registry.npmmirror.com/tapable/1.1.3 + worker-rpc: registry.npmmirror.com/worker-rpc/0.1.1 + dev: true + + registry.npmmirror.com/fork-ts-checker-webpack-plugin/5.2.1: + resolution: {integrity: sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz} + name: fork-ts-checker-webpack-plugin + version: 5.2.1 + engines: {node: '>=10', yarn: '>=1.0.0'} + requiresBuild: true + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + '@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.9 + chalk: registry.npmmirror.com/chalk/4.1.2 + cosmiconfig: registry.npmmirror.com/cosmiconfig/6.0.0 + deepmerge: registry.npmmirror.com/deepmerge/4.2.2 + fs-extra: registry.npmmirror.com/fs-extra/9.1.0 + memfs: registry.npmmirror.com/memfs/3.4.1 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + schema-utils: registry.npmmirror.com/schema-utils/2.7.0 + semver: registry.npmmirror.com/semver/7.3.5 + tapable: registry.npmmirror.com/tapable/1.1.3 + dev: true + optional: true + + registry.npmmirror.com/form-data/2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz} + name: form-data + version: 2.3.3 + engines: {node: '>= 0.12'} + dependencies: + asynckit: registry.npmmirror.com/asynckit/0.4.0 + combined-stream: registry.npmmirror.com/combined-stream/1.0.8 + mime-types: registry.npmmirror.com/mime-types/2.1.34 + dev: true + + registry.npmmirror.com/fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz} + name: fragment-cache + version: 0.2.1 + engines: {node: '>=0.10.0'} + dependencies: + map-cache: registry.npmmirror.com/map-cache/0.2.2 + dev: true + + registry.npmmirror.com/from2/2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz} + name: from2 + version: 2.3.0 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/fs-extra/7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz} + name: fs-extra + version: 7.0.1 + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + jsonfile: registry.npmmirror.com/jsonfile/4.0.0 + universalify: registry.npmmirror.com/universalify/0.1.2 + dev: true + + registry.npmmirror.com/fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz} + name: fs-extra + version: 9.1.0 + engines: {node: '>=10'} + dependencies: + at-least-node: registry.npmmirror.com/at-least-node/1.0.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + jsonfile: registry.npmmirror.com/jsonfile/6.1.0 + universalify: registry.npmmirror.com/universalify/2.0.0 + dev: true + optional: true + + registry.npmmirror.com/fs-write-stream-atomic/1.0.10: + resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz} + name: fs-write-stream-atomic + version: 1.0.10 + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + iferr: registry.npmmirror.com/iferr/0.1.5 + imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz} + name: fs.realpath + version: 1.0.0 + dev: true + + registry.npmmirror.com/fsevents/1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz} + name: fsevents + version: 1.2.13 + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. + requiresBuild: true + dependencies: + bindings: registry.npmmirror.com/bindings/1.5.0 + nan: registry.npmmirror.com/nan/2.15.0 + dev: true + optional: true + + registry.npmmirror.com/fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} + name: fsevents + version: 2.3.2 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/fstream/1.0.12: + resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz} + name: fstream + version: 1.0.12 + engines: {node: '>=0.6'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + inherits: registry.npmmirror.com/inherits/2.0.4 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + dev: true + + registry.npmmirror.com/function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} + name: function-bind + version: 1.1.1 + dev: true + + registry.npmmirror.com/functional-red-black-tree/1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz} + name: functional-red-black-tree + version: 1.0.1 + dev: true + + registry.npmmirror.com/gauge/2.7.4: + resolution: {integrity: sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gauge/-/gauge-2.7.4.tgz} + name: gauge + version: 2.7.4 + dependencies: + aproba: registry.npmmirror.com/aproba/1.2.0 + console-control-strings: registry.npmmirror.com/console-control-strings/1.1.0 + has-unicode: registry.npmmirror.com/has-unicode/2.0.1 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + string-width: registry.npmmirror.com/string-width/1.0.2 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + wide-align: registry.npmmirror.com/wide-align/1.1.5 + dev: true + + registry.npmmirror.com/gaze/1.1.3: + resolution: {integrity: sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gaze/-/gaze-1.1.3.tgz} + name: gaze + version: 1.1.3 + engines: {node: '>= 4.0.0'} + dependencies: + globule: registry.npmmirror.com/globule/1.3.3 + dev: true + + registry.npmmirror.com/gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz} + name: gensync + version: 1.0.0-beta.2 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmmirror.com/get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz} + name: get-caller-file + version: 2.0.5 + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + registry.npmmirror.com/get-intrinsic/1.1.1: + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz} + name: get-intrinsic + version: 1.1.1 + dependencies: + function-bind: registry.npmmirror.com/function-bind/1.1.1 + has: registry.npmmirror.com/has/1.0.3 + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + dev: true + + registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz} + name: get-own-enumerable-property-symbols + version: 3.0.2 + dev: true + + registry.npmmirror.com/get-stdin/4.0.1: + resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stdin/-/get-stdin-4.0.1.tgz} + name: get-stdin + version: 4.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/get-stream/3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz} + name: get-stream + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/get-stream/4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz} + name: get-stream + version: 4.1.0 + engines: {node: '>=6'} + dependencies: + pump: registry.npmmirror.com/pump/3.0.0 + dev: true + + registry.npmmirror.com/get-stream/5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz} + name: get-stream + version: 5.2.0 + engines: {node: '>=8'} + dependencies: + pump: registry.npmmirror.com/pump/3.0.0 + dev: true + + registry.npmmirror.com/get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz} + name: get-symbol-description + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 + dev: true + + registry.npmmirror.com/get-value/2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz} + name: get-value + version: 2.0.6 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/getpass/0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz} + name: getpass + version: 0.1.7 + dependencies: + assert-plus: registry.npmmirror.com/assert-plus/1.0.0 + dev: true + + registry.npmmirror.com/glob-parent/3.1.0: + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz} + name: glob-parent + version: 3.1.0 + dependencies: + is-glob: registry.npmmirror.com/is-glob/3.1.0 + path-dirname: registry.npmmirror.com/path-dirname/1.0.2 + dev: true + + registry.npmmirror.com/glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz} + name: glob-parent + version: 5.1.2 + engines: {node: '>= 6'} + dependencies: + is-glob: registry.npmmirror.com/is-glob/4.0.3 + dev: true + + registry.npmmirror.com/glob-stream/6.1.0: + resolution: {integrity: sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-stream/download/glob-stream-6.1.0.tgz} + name: glob-stream + version: 6.1.0 + engines: {node: '>= 0.10'} + dependencies: + extend: registry.nlark.com/extend/3.0.2 + glob: registry.npmmirror.com/glob/7.2.0 + glob-parent: registry.npmmirror.com/glob-parent/3.1.0 + is-negated-glob: registry.nlark.com/is-negated-glob/1.0.0 + ordered-read-streams: registry.nlark.com/ordered-read-streams/1.0.1 + pumpify: registry.nlark.com/pumpify/1.5.1 + readable-stream: registry.nlark.com/readable-stream/2.3.7 + remove-trailing-separator: registry.nlark.com/remove-trailing-separator/1.1.0 + to-absolute-glob: registry.nlark.com/to-absolute-glob/2.0.2 + unique-stream: registry.nlark.com/unique-stream/2.3.1 + dev: true + + registry.npmmirror.com/glob-to-regexp/0.3.0: + resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz} + name: glob-to-regexp + version: 0.3.0 + dev: true + + registry.npmmirror.com/glob/7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.1.6.tgz} + name: glob + version: 7.1.6 + dependencies: + fs.realpath: registry.npmmirror.com/fs.realpath/1.0.0 + inflight: registry.npmmirror.com/inflight/1.0.6 + inherits: registry.npmmirror.com/inherits/2.0.4 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + once: registry.npmmirror.com/once/1.4.0 + path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1 + dev: true + + registry.npmmirror.com/glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz} + name: glob + version: 7.2.0 + dependencies: + fs.realpath: registry.npmmirror.com/fs.realpath/1.0.0 + inflight: registry.npmmirror.com/inflight/1.0.6 + inherits: registry.npmmirror.com/inherits/2.0.4 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + once: registry.npmmirror.com/once/1.4.0 + path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1 + dev: true + + registry.npmmirror.com/globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz} + name: globals + version: 11.12.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/globals/12.4.0: + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-12.4.0.tgz} + name: globals + version: 12.4.0 + engines: {node: '>=8'} + dependencies: + type-fest: registry.npmmirror.com/type-fest/0.8.1 + dev: true + + registry.npmmirror.com/globals/9.18.0: + resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-9.18.0.tgz} + name: globals + version: 9.18.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/globby/10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-10.0.2.tgz} + name: globby + version: 10.0.2 + engines: {node: '>=8'} + dependencies: + '@types/glob': registry.npmmirror.com/@types/glob/7.2.0 + array-union: registry.npmmirror.com/array-union/2.1.0 + dir-glob: registry.npmmirror.com/dir-glob/3.0.1 + fast-glob: registry.npmmirror.com/fast-glob/3.2.10 + glob: registry.npmmirror.com/glob/7.2.0 + ignore: registry.npmmirror.com/ignore/5.2.0 + merge2: registry.npmmirror.com/merge2/1.4.1 + slash: registry.npmmirror.com/slash/3.0.0 + dev: true + + registry.npmmirror.com/globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/download/globby-11.1.0.tgz} + name: globby + version: 11.1.0 + engines: {node: '>=10'} + dependencies: + array-union: registry.nlark.com/array-union/2.1.0 + dir-glob: registry.nlark.com/dir-glob/3.0.1 + fast-glob: registry.npmmirror.com/fast-glob/3.2.10 + ignore: registry.npmmirror.com/ignore/5.2.0 + merge2: registry.nlark.com/merge2/1.4.1 + slash: registry.nlark.com/slash/3.0.0 + dev: true + + registry.npmmirror.com/globby/6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz} + name: globby + version: 6.1.0 + engines: {node: '>=0.10.0'} + dependencies: + array-union: registry.npmmirror.com/array-union/1.0.2 + glob: registry.npmmirror.com/glob/7.2.0 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + pify: registry.npmmirror.com/pify/2.3.0 + pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1 + dev: true + + registry.npmmirror.com/globby/7.1.1: + resolution: {integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz} + name: globby + version: 7.1.1 + engines: {node: '>=4'} + dependencies: + array-union: registry.npmmirror.com/array-union/1.0.2 + dir-glob: registry.npmmirror.com/dir-glob/2.2.2 + glob: registry.npmmirror.com/glob/7.2.0 + ignore: registry.npmmirror.com/ignore/3.3.10 + pify: registry.npmmirror.com/pify/3.0.0 + slash: registry.npmmirror.com/slash/1.0.0 + dev: true + + registry.npmmirror.com/globby/9.2.0: + resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-9.2.0.tgz} + name: globby + version: 9.2.0 + engines: {node: '>=6'} + dependencies: + '@types/glob': registry.npmmirror.com/@types/glob/7.2.0 + array-union: registry.npmmirror.com/array-union/1.0.2 + dir-glob: registry.npmmirror.com/dir-glob/2.2.2 + fast-glob: registry.npmmirror.com/fast-glob/2.2.7 + glob: registry.npmmirror.com/glob/7.2.0 + ignore: registry.npmmirror.com/ignore/4.0.6 + pify: registry.npmmirror.com/pify/4.0.1 + slash: registry.npmmirror.com/slash/2.0.0 + dev: true + + registry.npmmirror.com/globule/1.3.3: + resolution: {integrity: sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globule/-/globule-1.3.3.tgz} + name: globule + version: 1.3.3 + engines: {node: '>= 0.10'} + dependencies: + glob: registry.npmmirror.com/glob/7.1.6 + lodash: registry.npmmirror.com/lodash/4.17.21 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + dev: true + + registry.npmmirror.com/graceful-fs/4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.9.tgz} + name: graceful-fs + version: 4.2.9 + dev: true + + registry.npmmirror.com/growly/1.3.0: + resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/growly/-/growly-1.3.0.tgz} + name: growly + version: 1.3.0 + dev: true + + registry.npmmirror.com/gulp-cli/2.3.0: + resolution: {integrity: sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gulp-cli/download/gulp-cli-2.3.0.tgz} + name: gulp-cli + version: 2.3.0 + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + ansi-colors: registry.nlark.com/ansi-colors/1.1.0 + archy: registry.nlark.com/archy/1.0.0 + array-sort: registry.nlark.com/array-sort/1.0.0 + color-support: registry.nlark.com/color-support/1.1.3 + concat-stream: registry.nlark.com/concat-stream/1.6.2 + copy-props: registry.npmmirror.com/copy-props/2.0.5 + fancy-log: registry.npmmirror.com/fancy-log/1.3.3 + gulplog: registry.nlark.com/gulplog/1.0.0 + interpret: registry.nlark.com/interpret/1.4.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + liftoff: registry.npmmirror.com/liftoff/3.1.0 + matchdep: registry.nlark.com/matchdep/2.0.0 + mute-stdout: registry.npmmirror.com/mute-stdout/1.0.1 + pretty-hrtime: registry.nlark.com/pretty-hrtime/1.0.3 + replace-homedir: registry.nlark.com/replace-homedir/1.0.0 + semver-greatest-satisfied-range: registry.nlark.com/semver-greatest-satisfied-range/1.1.0 + v8flags: registry.npmmirror.com/v8flags/3.2.0 + yargs: registry.npmmirror.com/yargs/7.1.2 + dev: true + + registry.npmmirror.com/gulp/4.0.2: + resolution: {integrity: sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gulp/download/gulp-4.0.2.tgz} + name: gulp + version: 4.0.2 + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + glob-watcher: registry.nlark.com/glob-watcher/5.0.5 + gulp-cli: registry.npmmirror.com/gulp-cli/2.3.0 + undertaker: registry.nlark.com/undertaker/1.3.0 + vinyl-fs: registry.nlark.com/vinyl-fs/3.0.3 + dev: true + + registry.npmmirror.com/gzip-size/5.1.1: + resolution: {integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gzip-size/-/gzip-size-5.1.1.tgz} + name: gzip-size + version: 5.1.1 + engines: {node: '>=6'} + dependencies: + duplexer: registry.npmmirror.com/duplexer/0.1.2 + pify: registry.npmmirror.com/pify/4.0.1 + dev: true + + registry.npmmirror.com/handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz} + name: handle-thing + version: 2.0.1 + dev: true + + registry.npmmirror.com/har-schema/2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz} + name: har-schema + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/har-validator/5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz} + name: har-validator + version: 5.1.5 + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: registry.npmmirror.com/ajv/6.12.6 + har-schema: registry.npmmirror.com/har-schema/2.0.0 + dev: true + + registry.npmmirror.com/has-ansi/2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz} + name: has-ansi + version: 2.0.0 + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: registry.npmmirror.com/ansi-regex/2.1.1 + dev: true + + registry.npmmirror.com/has-bigints/1.0.1: + resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.1.tgz} + name: has-bigints + version: 1.0.1 + dev: true + + registry.npmmirror.com/has-flag/1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz} + name: has-flag + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz} + name: has-flag + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz} + name: has-flag + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/has-symbols/1.0.2: + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.2.tgz} + name: has-symbols + version: 1.0.2 + engines: {node: '>= 0.4'} + dev: true + + registry.npmmirror.com/has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz} + name: has-tostringtag + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + dev: true + + registry.npmmirror.com/has-unicode/2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz} + name: has-unicode + version: 2.0.1 + dev: true + + registry.npmmirror.com/has-value/0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz} + name: has-value + version: 0.3.1 + engines: {node: '>=0.10.0'} + dependencies: + get-value: registry.npmmirror.com/get-value/2.0.6 + has-values: registry.npmmirror.com/has-values/0.1.4 + isobject: registry.npmmirror.com/isobject/2.1.0 + dev: true + + registry.npmmirror.com/has-value/1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz} + name: has-value + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + get-value: registry.npmmirror.com/get-value/2.0.6 + has-values: registry.npmmirror.com/has-values/1.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.npmmirror.com/has-values/0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz} + name: has-values + version: 0.1.4 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/has-values/1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz} + name: has-values + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-number: registry.npmmirror.com/is-number/3.0.0 + kind-of: registry.npmmirror.com/kind-of/4.0.0 + dev: true + + registry.npmmirror.com/has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz} + name: has + version: 1.0.3 + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: registry.npmmirror.com/function-bind/1.1.1 + dev: true + + registry.npmmirror.com/hash-base/3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz} + name: hash-base + version: 3.1.0 + engines: {node: '>=4'} + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/3.6.0 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/hash-sum/1.0.2: + resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz} + name: hash-sum + version: 1.0.2 + dev: true + + registry.npmmirror.com/hash-sum/2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz} + name: hash-sum + version: 2.0.0 + dev: true + + registry.npmmirror.com/hash.js/1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz} + name: hash.js + version: 1.1.7 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1 + dev: true + + registry.npmmirror.com/he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz} + name: he + version: 1.2.0 + hasBin: true + dev: true + + registry.npmmirror.com/hex-color-regex/1.1.0: + resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz} + name: hex-color-regex + version: 1.1.0 + dev: true + + registry.npmmirror.com/highlight.js/10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz} + name: highlight.js + version: 10.7.3 + dev: true + + registry.npmmirror.com/hmac-drbg/1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz} + name: hmac-drbg + version: 1.0.1 + dependencies: + hash.js: registry.npmmirror.com/hash.js/1.1.7 + minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1 + minimalistic-crypto-utils: registry.npmmirror.com/minimalistic-crypto-utils/1.0.1 + dev: true + + registry.npmmirror.com/hoopy/0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz} + name: hoopy + version: 0.1.4 + engines: {node: '>= 6.0.0'} + dev: true + + registry.npmmirror.com/hosted-git-info/2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz} + name: hosted-git-info + version: 2.8.9 + dev: true + + registry.npmmirror.com/hpack.js/2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz} + name: hpack.js + version: 2.1.6 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + obuf: registry.npmmirror.com/obuf/1.1.2 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + wbuf: registry.npmmirror.com/wbuf/1.7.3 + dev: true + + registry.npmmirror.com/hsl-regex/1.0.0: + resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz} + name: hsl-regex + version: 1.0.0 + dev: true + + registry.npmmirror.com/hsla-regex/1.0.0: + resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz} + name: hsla-regex + version: 1.0.0 + dev: true + + registry.npmmirror.com/html-encoding-sniffer/1.0.2: + resolution: {integrity: sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz} + name: html-encoding-sniffer + version: 1.0.2 + dependencies: + whatwg-encoding: registry.npmmirror.com/whatwg-encoding/1.0.5 + dev: true + + registry.npmmirror.com/html-entities/1.4.0: + resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz} + name: html-entities + version: 1.4.0 + dev: true + + registry.npmmirror.com/html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz} + name: html-escaper + version: 2.0.2 + dev: true + + registry.npmmirror.com/html-minifier/3.5.21: + resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz} + name: html-minifier + version: 3.5.21 + engines: {node: '>=4'} + hasBin: true + dependencies: + camel-case: registry.npmmirror.com/camel-case/3.0.0 + clean-css: registry.npmmirror.com/clean-css/4.2.4 + commander: registry.npmmirror.com/commander/2.17.1 + he: registry.npmmirror.com/he/1.2.0 + param-case: registry.npmmirror.com/param-case/2.1.1 + relateurl: registry.npmmirror.com/relateurl/0.2.7 + uglify-js: registry.npmmirror.com/uglify-js/3.4.10 + dev: true + + registry.npmmirror.com/html-tags/2.0.0: + resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz} + name: html-tags + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/html-tags/3.1.0: + resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-3.1.0.tgz} + name: html-tags + version: 3.1.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/html-webpack-plugin/3.2.0_webpack@4.46.0: + resolution: {integrity: sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz} + id: registry.npmmirror.com/html-webpack-plugin/3.2.0 + name: html-webpack-plugin + version: 3.2.0 + engines: {node: '>=6.9'} + deprecated: 3.x is no longer supported + peerDependencies: + webpack: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + html-minifier: registry.npmmirror.com/html-minifier/3.5.21 + loader-utils: registry.npmmirror.com/loader-utils/0.2.17 + lodash: registry.npmmirror.com/lodash/4.17.21 + pretty-error: registry.npmmirror.com/pretty-error/2.1.2 + tapable: registry.npmmirror.com/tapable/1.1.3 + toposort: registry.npmmirror.com/toposort/1.0.7 + util.promisify: registry.npmmirror.com/util.promisify/1.0.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/htmlparser2/3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz} + name: htmlparser2 + version: 3.10.1 + dependencies: + domelementtype: registry.npmmirror.com/domelementtype/1.3.1 + domhandler: registry.npmmirror.com/domhandler/2.4.2 + domutils: registry.npmmirror.com/domutils/1.7.0 + entities: registry.npmmirror.com/entities/1.1.2 + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/3.6.0 + dev: true + + registry.npmmirror.com/htmlparser2/6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz} + name: htmlparser2 + version: 6.1.0 + dependencies: + domelementtype: registry.npmmirror.com/domelementtype/2.2.0 + domhandler: registry.npmmirror.com/domhandler/4.3.0 + domutils: registry.npmmirror.com/domutils/2.8.0 + entities: registry.npmmirror.com/entities/2.2.0 + dev: true + + registry.npmmirror.com/http-deceiver/1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz} + name: http-deceiver + version: 1.2.7 + dev: true + + registry.npmmirror.com/http-errors/1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz} + name: http-errors + version: 1.6.3 + engines: {node: '>= 0.6'} + dependencies: + depd: registry.npmmirror.com/depd/1.1.2 + inherits: registry.npmmirror.com/inherits/2.0.3 + setprototypeof: registry.nlark.com/setprototypeof/1.1.0 + statuses: registry.npmmirror.com/statuses/1.5.0 + dev: true + + registry.npmmirror.com/http-errors/1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz} + name: http-errors + version: 1.8.1 + engines: {node: '>= 0.6'} + dependencies: + depd: registry.npmmirror.com/depd/1.1.2 + inherits: registry.npmmirror.com/inherits/2.0.4 + setprototypeof: registry.nlark.com/setprototypeof/1.2.0 + statuses: registry.npmmirror.com/statuses/1.5.0 + toidentifier: registry.npmmirror.com/toidentifier/1.0.1 + dev: true + + registry.npmmirror.com/http-parser-js/0.5.5: + resolution: {integrity: sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.5.tgz} + name: http-parser-js + version: 0.5.5 + dev: true + + registry.npmmirror.com/http-proxy-middleware/0.19.1_debug@4.3.3: + resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz} + id: registry.npmmirror.com/http-proxy-middleware/0.19.1 + name: http-proxy-middleware + version: 0.19.1 + engines: {node: '>=4.0.0'} + dependencies: + http-proxy: registry.npmmirror.com/http-proxy/1.18.1_debug@4.3.3 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + lodash: registry.npmmirror.com/lodash/4.17.21 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + transitivePeerDependencies: + - debug + dev: true + + registry.npmmirror.com/http-proxy-middleware/1.3.1_debug@4.3.3: + resolution: {integrity: sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz} + id: registry.npmmirror.com/http-proxy-middleware/1.3.1 + name: http-proxy-middleware + version: 1.3.1 + engines: {node: '>=8.0.0'} + dependencies: + '@types/http-proxy': registry.npmmirror.com/@types/http-proxy/1.17.8 + http-proxy: registry.npmmirror.com/http-proxy/1.18.1_debug@4.3.3 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + is-plain-obj: registry.npmmirror.com/is-plain-obj/3.0.0 + micromatch: registry.npmmirror.com/micromatch/4.0.4 + transitivePeerDependencies: + - debug + dev: true + + registry.npmmirror.com/http-proxy/1.18.1_debug@4.3.3: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz} + id: registry.npmmirror.com/http-proxy/1.18.1 + name: http-proxy + version: 1.18.1 + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: registry.npmmirror.com/eventemitter3/4.0.7 + follow-redirects: registry.npmmirror.com/follow-redirects/1.14.7_debug@4.3.3 + requires-port: registry.npmmirror.com/requires-port/1.0.0 + transitivePeerDependencies: + - debug + dev: true + + registry.npmmirror.com/http-signature/1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz} + name: http-signature + version: 1.2.0 + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: registry.npmmirror.com/assert-plus/1.0.0 + jsprim: registry.npmmirror.com/jsprim/1.4.2 + sshpk: registry.npmmirror.com/sshpk/1.17.0 + dev: true + + registry.npmmirror.com/https-browserify/1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz} + name: https-browserify + version: 1.0.0 + dev: true + + registry.npmmirror.com/human-signals/1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz} + name: human-signals + version: 1.1.1 + engines: {node: '>=8.12.0'} + dev: true + + registry.npmmirror.com/iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz} + name: iconv-lite + version: 0.4.24 + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2 + dev: true + + registry.npmmirror.com/icss-utils/4.1.1: + resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz} + name: icss-utils + version: 4.1.1 + engines: {node: '>= 6'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz} + name: ieee754 + version: 1.2.1 + dev: true + + registry.npmmirror.com/iferr/0.1.5: + resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz} + name: iferr + version: 0.1.5 + dev: true + + registry.npmmirror.com/ignore/3.3.10: + resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz} + name: ignore + version: 3.3.10 + dev: true + + registry.npmmirror.com/ignore/4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz} + name: ignore + version: 4.0.6 + engines: {node: '>= 4'} + dev: true + + registry.npmmirror.com/ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz} + name: ignore + version: 5.2.0 + engines: {node: '>= 4'} + dev: true + + registry.npmmirror.com/image-size/0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz} + name: image-size + version: 0.5.5 + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + + registry.npmmirror.com/immediate/3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz} + name: immediate + version: 3.0.6 + dev: false + + registry.npmmirror.com/immutable/4.0.0: + resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.0.0.tgz} + name: immutable + version: 4.0.0 + dev: true + + registry.npmmirror.com/import-cwd/2.1.0: + resolution: {integrity: sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz} + name: import-cwd + version: 2.1.0 + engines: {node: '>=4'} + dependencies: + import-from: registry.npmmirror.com/import-from/2.1.0 + dev: true + + registry.npmmirror.com/import-fresh/2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz} + name: import-fresh + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + caller-path: registry.npmmirror.com/caller-path/2.0.0 + resolve-from: registry.npmmirror.com/resolve-from/3.0.0 + dev: true + + registry.npmmirror.com/import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz} + name: import-fresh + version: 3.3.0 + engines: {node: '>=6'} + dependencies: + parent-module: registry.npmmirror.com/parent-module/1.0.1 + resolve-from: registry.npmmirror.com/resolve-from/4.0.0 + dev: true + + registry.npmmirror.com/import-from/2.1.0: + resolution: {integrity: sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz} + name: import-from + version: 2.1.0 + engines: {node: '>=4'} + dependencies: + resolve-from: registry.npmmirror.com/resolve-from/3.0.0 + dev: true + + registry.npmmirror.com/import-local/2.0.0: + resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz} + name: import-local + version: 2.0.0 + engines: {node: '>=6'} + hasBin: true + dependencies: + pkg-dir: registry.npmmirror.com/pkg-dir/3.0.0 + resolve-cwd: registry.npmmirror.com/resolve-cwd/2.0.0 + dev: true + + registry.npmmirror.com/imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz} + name: imurmurhash + version: 0.1.4 + engines: {node: '>=0.8.19'} + dev: true + + registry.npmmirror.com/in-publish/2.0.1: + resolution: {integrity: sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/in-publish/-/in-publish-2.0.1.tgz} + name: in-publish + version: 2.0.1 + hasBin: true + dev: true + + registry.npmmirror.com/indent-string/2.1.0: + resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-2.1.0.tgz} + name: indent-string + version: 2.1.0 + engines: {node: '>=0.10.0'} + dependencies: + repeating: registry.npmmirror.com/repeating/2.0.1 + dev: true + + registry.npmmirror.com/indent-string/3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-3.2.0.tgz} + name: indent-string + version: 3.2.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz} + name: indent-string + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/indexes-of/1.0.1: + resolution: {integrity: sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz} + name: indexes-of + version: 1.0.1 + dev: true + + registry.npmmirror.com/infer-owner/1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz} + name: infer-owner + version: 1.0.4 + dev: true + + registry.npmmirror.com/inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz} + name: inflight + version: 1.0.6 + dependencies: + once: registry.npmmirror.com/once/1.4.0 + wrappy: registry.npmmirror.com/wrappy/1.0.2 + dev: true + + registry.npmmirror.com/inherits/2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz} + name: inherits + version: 2.0.1 + dev: true + + registry.npmmirror.com/inherits/2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz} + name: inherits + version: 2.0.3 + dev: true + + registry.npmmirror.com/inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz} + name: inherits + version: 2.0.4 + dev: true + + registry.npmmirror.com/ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz} + name: ini + version: 1.3.8 + dev: true + + registry.npmmirror.com/inquirer/7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz} + name: inquirer + version: 7.3.3 + engines: {node: '>=8.0.0'} + dependencies: + ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2 + chalk: registry.npmmirror.com/chalk/4.1.2 + cli-cursor: registry.npmmirror.com/cli-cursor/3.1.0 + cli-width: registry.npmmirror.com/cli-width/3.0.0 + external-editor: registry.npmmirror.com/external-editor/3.1.0 + figures: registry.npmmirror.com/figures/3.2.0 + lodash: registry.npmmirror.com/lodash/4.17.21 + mute-stream: registry.nlark.com/mute-stream/0.0.8 + run-async: registry.npmmirror.com/run-async/2.4.1 + rxjs: registry.npmmirror.com/rxjs/6.6.7 + string-width: registry.npmmirror.com/string-width/4.2.3 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + through: registry.npmmirror.com/through/2.3.8 + dev: true + + registry.npmmirror.com/internal-ip/4.3.0: + resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz} + name: internal-ip + version: 4.3.0 + engines: {node: '>=6'} + dependencies: + default-gateway: registry.npmmirror.com/default-gateway/4.2.0 + ipaddr.js: registry.npmmirror.com/ipaddr.js/1.9.1 + dev: true + + registry.npmmirror.com/internal-slot/1.0.3: + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz} + name: internal-slot + version: 1.0.3 + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 + has: registry.npmmirror.com/has/1.0.3 + side-channel: registry.npmmirror.com/side-channel/1.0.4 + dev: true + + registry.npmmirror.com/invariant/2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz} + name: invariant + version: 2.2.4 + dependencies: + loose-envify: registry.npmmirror.com/loose-envify/1.4.0 + dev: true + + registry.npmmirror.com/ip-regex/2.1.0: + resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz} + name: ip-regex + version: 2.1.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/ip/1.1.5: + resolution: {integrity: sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ip/-/ip-1.1.5.tgz} + name: ip + version: 1.1.5 + dev: true + + registry.npmmirror.com/ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz} + name: ipaddr.js + version: 1.9.1 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/is-absolute-url/2.1.0: + resolution: {integrity: sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz} + name: is-absolute-url + version: 2.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-absolute-url/3.0.3: + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz} + name: is-absolute-url + version: 3.0.3 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/is-accessor-descriptor/0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz} + name: is-accessor-descriptor + version: 0.1.6 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/3.2.2 + dev: true + + registry.npmmirror.com/is-accessor-descriptor/1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz} + name: is-accessor-descriptor + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/6.0.3 + dev: true + + registry.npmmirror.com/is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz} + name: is-arguments + version: 1.1.1 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 + dev: true + + registry.npmmirror.com/is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz} + name: is-arrayish + version: 0.2.1 + dev: true + + registry.npmmirror.com/is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz} + name: is-arrayish + version: 0.3.2 + dev: true + + registry.npmmirror.com/is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz} + name: is-bigint + version: 1.0.4 + dependencies: + has-bigints: registry.npmmirror.com/has-bigints/1.0.1 + dev: true + + registry.npmmirror.com/is-binary-path/1.0.1: + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz} + name: is-binary-path + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + binary-extensions: registry.npmmirror.com/binary-extensions/1.13.1 + dev: true + + registry.npmmirror.com/is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz} + name: is-binary-path + version: 2.1.0 + engines: {node: '>=8'} + dependencies: + binary-extensions: registry.npmmirror.com/binary-extensions/2.2.0 + dev: true + + registry.npmmirror.com/is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz} + name: is-boolean-object + version: 1.1.2 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 + dev: true + + registry.npmmirror.com/is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz} + name: is-buffer + version: 1.1.6 + dev: true + + registry.npmmirror.com/is-callable/1.2.4: + resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz} + name: is-callable + version: 1.2.4 + engines: {node: '>= 0.4'} + dev: true + + registry.npmmirror.com/is-ci/1.2.1: + resolution: {integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz} + name: is-ci + version: 1.2.1 + hasBin: true + dependencies: + ci-info: registry.npmmirror.com/ci-info/1.6.0 + dev: true + + registry.npmmirror.com/is-ci/2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-ci/-/is-ci-2.0.0.tgz} + name: is-ci + version: 2.0.0 + hasBin: true + dependencies: + ci-info: registry.npmmirror.com/ci-info/2.0.0 + dev: true + + registry.npmmirror.com/is-color-stop/1.1.0: + resolution: {integrity: sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz} + name: is-color-stop + version: 1.1.0 + dependencies: + css-color-names: registry.npmmirror.com/css-color-names/0.0.4 + hex-color-regex: registry.npmmirror.com/hex-color-regex/1.1.0 + hsl-regex: registry.npmmirror.com/hsl-regex/1.0.0 + hsla-regex: registry.npmmirror.com/hsla-regex/1.0.0 + rgb-regex: registry.npmmirror.com/rgb-regex/1.0.1 + rgba-regex: registry.npmmirror.com/rgba-regex/1.0.0 + dev: true + + registry.npmmirror.com/is-core-module/2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.8.1.tgz} + name: is-core-module + version: 2.8.1 + dependencies: + has: registry.npmmirror.com/has/1.0.3 + dev: true + + registry.npmmirror.com/is-data-descriptor/0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz} + name: is-data-descriptor + version: 0.1.4 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/3.2.2 + dev: true + + registry.npmmirror.com/is-data-descriptor/1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz} + name: is-data-descriptor + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/6.0.3 + dev: true + + registry.npmmirror.com/is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz} + name: is-date-object + version: 1.0.5 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 + dev: true + + registry.npmmirror.com/is-descriptor/0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz} + name: is-descriptor + version: 0.1.6 + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: registry.npmmirror.com/is-accessor-descriptor/0.1.6 + is-data-descriptor: registry.npmmirror.com/is-data-descriptor/0.1.4 + kind-of: registry.npmmirror.com/kind-of/5.1.0 + dev: true + + registry.npmmirror.com/is-descriptor/1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz} + name: is-descriptor + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: registry.npmmirror.com/is-accessor-descriptor/1.0.0 + is-data-descriptor: registry.npmmirror.com/is-data-descriptor/1.0.0 + kind-of: registry.npmmirror.com/kind-of/6.0.3 + dev: true + + registry.npmmirror.com/is-directory/0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz} + name: is-directory + version: 0.3.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz} + name: is-docker + version: 2.2.1 + engines: {node: '>=8'} + hasBin: true + dev: true + + registry.npmmirror.com/is-extendable/0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz} + name: is-extendable + version: 0.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-extendable/1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz} + name: is-extendable + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4 + dev: true + + registry.npmmirror.com/is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz} + name: is-extglob + version: 2.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-finite/1.1.0: + resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-finite/-/is-finite-1.1.0.tgz} + name: is-finite + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-fullwidth-code-point/1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz} + name: is-fullwidth-code-point + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: registry.npmmirror.com/number-is-nan/1.0.1 + dev: true + + registry.npmmirror.com/is-fullwidth-code-point/2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz} + name: is-fullwidth-code-point + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz} + name: is-fullwidth-code-point + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/is-generator-fn/2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz} + name: is-generator-fn + version: 2.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/is-glob/3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz} + name: is-glob + version: 3.1.0 + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: registry.npmmirror.com/is-extglob/2.1.1 + dev: true + + registry.npmmirror.com/is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz} + name: is-glob + version: 4.0.3 + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: registry.npmmirror.com/is-extglob/2.1.1 + dev: true + + registry.npmmirror.com/is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz} + name: is-negative-zero + version: 2.0.2 + engines: {node: '>= 0.4'} + dev: true + + registry.npmmirror.com/is-number-object/1.0.6: + resolution: {integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.6.tgz} + name: is-number-object + version: 1.0.6 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 + dev: true + + registry.npmmirror.com/is-number/3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz} + name: is-number + version: 3.0.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/3.2.2 + dev: true + + registry.npmmirror.com/is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz} + name: is-number + version: 7.0.0 + engines: {node: '>=0.12.0'} + dev: true + + registry.npmmirror.com/is-obj/1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz} + name: is-obj + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz} + name: is-obj + version: 2.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/is-observable/1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-observable/-/is-observable-1.1.0.tgz} + name: is-observable + version: 1.1.0 + engines: {node: '>=4'} + dependencies: + symbol-observable: registry.npmmirror.com/symbol-observable/1.2.0 + dev: true + + registry.npmmirror.com/is-path-cwd/2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz} + name: is-path-cwd + version: 2.2.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/is-path-in-cwd/2.1.0: + resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz} + name: is-path-in-cwd + version: 2.1.0 + engines: {node: '>=6'} + dependencies: + is-path-inside: registry.npmmirror.com/is-path-inside/2.1.0 + dev: true + + registry.npmmirror.com/is-path-inside/2.1.0: + resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz} + name: is-path-inside + version: 2.1.0 + engines: {node: '>=6'} + dependencies: + path-is-inside: registry.npmmirror.com/path-is-inside/1.0.2 + dev: true + + registry.npmmirror.com/is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz} + name: is-path-inside + version: 3.0.3 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/is-plain-obj/1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz} + name: is-plain-obj + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-plain-obj/3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz} + name: is-plain-obj + version: 3.0.0 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/is-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz} + name: is-plain-object + version: 2.0.4 + engines: {node: '>=0.10.0'} + dependencies: + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.npmmirror.com/is-plain-object/3.0.1: + resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz} + name: is-plain-object + version: 3.0.1 + engines: {node: '>=0.10.0'} + dev: false + + registry.npmmirror.com/is-promise/2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz} + name: is-promise + version: 2.2.2 + dev: true + + registry.npmmirror.com/is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz} + name: is-regex + version: 1.1.4 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 + dev: true + + registry.npmmirror.com/is-regexp/1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz} + name: is-regexp + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-resolvable/1.1.0: + resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz} + name: is-resolvable + version: 1.1.0 + dev: true + + registry.npmmirror.com/is-shared-array-buffer/1.0.1: + resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz} + name: is-shared-array-buffer + version: 1.0.1 + dev: true + + registry.npmmirror.com/is-stream/1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz} + name: is-stream + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz} + name: is-stream + version: 2.0.1 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz} + name: is-string + version: 1.0.7 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 + dev: true + + registry.npmmirror.com/is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz} + name: is-symbol + version: 1.0.4 + engines: {node: '>= 0.4'} + dependencies: + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + dev: true + + registry.npmmirror.com/is-typedarray/1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz} + name: is-typedarray + version: 1.0.0 + dev: true + + registry.npmmirror.com/is-utf8/0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz} + name: is-utf8 + version: 0.2.1 + dev: true + + registry.npmmirror.com/is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz} + name: is-weakref + version: 1.0.2 + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + dev: true + + registry.npmmirror.com/is-what/3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz} + name: is-what + version: 3.14.1 + dev: true + + registry.npmmirror.com/is-whitespace/0.3.0: + resolution: {integrity: sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-whitespace/-/is-whitespace-0.3.0.tgz} + name: is-whitespace + version: 0.3.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz} + name: is-windows + version: 1.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/is-wsl/1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz} + name: is-wsl + version: 1.1.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz} + name: is-wsl + version: 2.2.0 + engines: {node: '>=8'} + dependencies: + is-docker: registry.npmmirror.com/is-docker/2.2.1 + dev: true + + registry.npmmirror.com/isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz} + name: isarray + version: 1.0.0 + dev: true + + registry.npmmirror.com/isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz} + name: isexe + version: 2.0.0 + dev: true + + registry.npmmirror.com/isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz} + name: isobject + version: 2.1.0 + engines: {node: '>=0.10.0'} + dependencies: + isarray: registry.npmmirror.com/isarray/1.0.0 + dev: true + + registry.npmmirror.com/isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz} + name: isobject + version: 3.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/isstream/0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz} + name: isstream + version: 0.1.2 + dev: true + + registry.npmmirror.com/istanbul-lib-coverage/2.0.5: + resolution: {integrity: sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz} + name: istanbul-lib-coverage + version: 2.0.5 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/istanbul-lib-instrument/3.3.0: + resolution: {integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz} + name: istanbul-lib-instrument + version: 3.3.0 + engines: {node: '>=6'} + dependencies: + '@babel/generator': registry.npmmirror.com/@babel/generator/7.16.8 + '@babel/parser': registry.npmmirror.com/@babel/parser/7.16.8 + '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/2.0.5 + semver: registry.npmmirror.com/semver/6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/istanbul-lib-report/2.0.8: + resolution: {integrity: sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz} + name: istanbul-lib-report + version: 2.0.8 + engines: {node: '>=6'} + dependencies: + istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/2.0.5 + make-dir: registry.npmmirror.com/make-dir/2.1.0 + supports-color: registry.npmmirror.com/supports-color/6.1.0 + dev: true + + registry.npmmirror.com/istanbul-lib-source-maps/3.0.6: + resolution: {integrity: sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz} + name: istanbul-lib-source-maps + version: 3.0.6 + engines: {node: '>=6'} + dependencies: + debug: registry.npmmirror.com/debug/4.3.3 + istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/2.0.5 + make-dir: registry.npmmirror.com/make-dir/2.1.0 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + source-map: registry.npmmirror.com/source-map/0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/istanbul-reports/2.2.7: + resolution: {integrity: sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz} + name: istanbul-reports + version: 2.2.7 + engines: {node: '>=6'} + dependencies: + html-escaper: registry.npmmirror.com/html-escaper/2.0.2 + dev: true + + registry.npmmirror.com/javascript-stringify/2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz} + name: javascript-stringify + version: 2.1.0 + dev: true + + registry.npmmirror.com/jest-changed-files/24.9.0: + resolution: {integrity: sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz} + name: jest-changed-files + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + execa: registry.npmmirror.com/execa/1.0.0 + throat: registry.npmmirror.com/throat/4.1.0 + dev: true + + registry.npmmirror.com/jest-cli/24.9.0: + resolution: {integrity: sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-cli/-/jest-cli-24.9.0.tgz} + name: jest-cli + version: 24.9.0 + engines: {node: '>= 6'} + hasBin: true + dependencies: + '@jest/core': registry.npmmirror.com/@jest/core/24.9.0 + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + exit: registry.npmmirror.com/exit/0.1.2 + import-local: registry.npmmirror.com/import-local/2.0.0 + is-ci: registry.npmmirror.com/is-ci/2.0.0 + jest-config: registry.npmmirror.com/jest-config/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jest-validate: registry.npmmirror.com/jest-validate/24.9.0 + prompts: registry.npmmirror.com/prompts/2.4.2 + realpath-native: registry.npmmirror.com/realpath-native/1.1.0 + yargs: registry.npmmirror.com/yargs/13.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/jest-config/24.9.0: + resolution: {integrity: sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-config/-/jest-config-24.9.0.tgz} + name: jest-config + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@babel/core': registry.npmmirror.com/@babel/core/7.16.7 + '@jest/test-sequencer': registry.npmmirror.com/@jest/test-sequencer/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + babel-jest: registry.npmmirror.com/babel-jest/24.9.0_@babel+core@7.16.7 + chalk: registry.npmmirror.com/chalk/2.4.2 + glob: registry.npmmirror.com/glob/7.2.0 + jest-environment-jsdom: registry.npmmirror.com/jest-environment-jsdom/24.9.0 + jest-environment-node: registry.npmmirror.com/jest-environment-node/24.9.0 + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + jest-jasmine2: registry.npmmirror.com/jest-jasmine2/24.9.0 + jest-regex-util: registry.npmmirror.com/jest-regex-util/24.9.0 + jest-resolve: registry.npmmirror.com/jest-resolve/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jest-validate: registry.npmmirror.com/jest-validate/24.9.0 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + realpath-native: registry.npmmirror.com/realpath-native/1.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/jest-diff/24.9.0: + resolution: {integrity: sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-diff/-/jest-diff-24.9.0.tgz} + name: jest-diff + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + diff-sequences: registry.npmmirror.com/diff-sequences/24.9.0 + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + dev: true + + registry.npmmirror.com/jest-docblock/24.9.0: + resolution: {integrity: sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-docblock/-/jest-docblock-24.9.0.tgz} + name: jest-docblock + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + detect-newline: registry.npmmirror.com/detect-newline/2.1.0 + dev: true + + registry.npmmirror.com/jest-each/24.9.0: + resolution: {integrity: sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-each/-/jest-each-24.9.0.tgz} + name: jest-each + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + dev: true + + registry.npmmirror.com/jest-environment-jsdom-fifteen/1.0.2: + resolution: {integrity: sha512-nfrnAfwklE1872LIB31HcjM65cWTh1wzvMSp10IYtPJjLDUbTTvDpajZgIxUnhRmzGvogdHDayCIlerLK0OBBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-environment-jsdom-fifteen/-/jest-environment-jsdom-fifteen-1.0.2.tgz} + name: jest-environment-jsdom-fifteen + version: 1.0.2 + dependencies: + '@jest/environment': registry.npmmirror.com/@jest/environment/24.9.0 + '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + jest-mock: registry.npmmirror.com/jest-mock/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jsdom: registry.npmmirror.com/jsdom/15.2.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + registry.npmmirror.com/jest-environment-jsdom/24.9.0: + resolution: {integrity: sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz} + name: jest-environment-jsdom + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/environment': registry.npmmirror.com/@jest/environment/24.9.0 + '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + jest-mock: registry.npmmirror.com/jest-mock/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jsdom: registry.npmmirror.com/jsdom/11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/jest-environment-node/24.9.0: + resolution: {integrity: sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz} + name: jest-environment-node + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/environment': registry.npmmirror.com/@jest/environment/24.9.0 + '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + jest-mock: registry.npmmirror.com/jest-mock/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/jest-get-type/24.9.0: + resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-get-type/-/jest-get-type-24.9.0.tgz} + name: jest-get-type + version: 24.9.0 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/jest-haste-map/24.9.0: + resolution: {integrity: sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz} + name: jest-haste-map + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + anymatch: registry.npmmirror.com/anymatch/2.0.0 + fb-watchman: registry.npmmirror.com/fb-watchman/2.0.1 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + invariant: registry.npmmirror.com/invariant/2.2.4 + jest-serializer: registry.npmmirror.com/jest-serializer/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jest-worker: registry.npmmirror.com/jest-worker/24.9.0 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + sane: registry.npmmirror.com/sane/4.1.0 + walker: registry.npmmirror.com/walker/1.0.8 + optionalDependencies: + fsevents: registry.npmmirror.com/fsevents/1.2.13 + dev: true + + registry.npmmirror.com/jest-jasmine2/24.9.0: + resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz} + name: jest-jasmine2 + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.16.8 + '@jest/environment': registry.npmmirror.com/@jest/environment/24.9.0 + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + co: registry.npmmirror.com/co/4.6.0 + expect: registry.npmmirror.com/expect/24.9.0 + is-generator-fn: registry.npmmirror.com/is-generator-fn/2.1.0 + jest-each: registry.npmmirror.com/jest-each/24.9.0 + jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/24.9.0 + jest-message-util: registry.npmmirror.com/jest-message-util/24.9.0 + jest-runtime: registry.npmmirror.com/jest-runtime/24.9.0 + jest-snapshot: registry.npmmirror.com/jest-snapshot/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + throat: registry.npmmirror.com/throat/4.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/jest-leak-detector/24.9.0: + resolution: {integrity: sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz} + name: jest-leak-detector + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + dev: true + + registry.npmmirror.com/jest-matcher-utils/24.9.0: + resolution: {integrity: sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz} + name: jest-matcher-utils + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + jest-diff: registry.npmmirror.com/jest-diff/24.9.0 + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + dev: true + + registry.npmmirror.com/jest-message-util/24.9.0: + resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-message-util/-/jest-message-util-24.9.0.tgz} + name: jest-message-util + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + '@types/stack-utils': registry.npmmirror.com/@types/stack-utils/1.0.1 + chalk: registry.npmmirror.com/chalk/2.4.2 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + slash: registry.npmmirror.com/slash/2.0.0 + stack-utils: registry.npmmirror.com/stack-utils/1.0.5 + dev: true + + registry.npmmirror.com/jest-mock/24.9.0: + resolution: {integrity: sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-mock/-/jest-mock-24.9.0.tgz} + name: jest-mock + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + dev: true + + registry.npmmirror.com/jest-pnp-resolver/1.2.2_jest-resolve@24.9.0: + resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz} + id: registry.npmmirror.com/jest-pnp-resolver/1.2.2 + name: jest-pnp-resolver + version: 1.2.2 + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: registry.npmmirror.com/jest-resolve/24.9.0 + dev: true + + registry.npmmirror.com/jest-regex-util/24.9.0: + resolution: {integrity: sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz} + name: jest-regex-util + version: 24.9.0 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/jest-resolve-dependencies/24.9.0: + resolution: {integrity: sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz} + name: jest-resolve-dependencies + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + jest-regex-util: registry.npmmirror.com/jest-regex-util/24.9.0 + jest-snapshot: registry.npmmirror.com/jest-snapshot/24.9.0 + dev: true + + registry.npmmirror.com/jest-resolve/24.9.0: + resolution: {integrity: sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-resolve/-/jest-resolve-24.9.0.tgz} + name: jest-resolve + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + browser-resolve: registry.npmmirror.com/browser-resolve/1.11.3 + chalk: registry.npmmirror.com/chalk/2.4.2 + jest-pnp-resolver: registry.npmmirror.com/jest-pnp-resolver/1.2.2_jest-resolve@24.9.0 + realpath-native: registry.npmmirror.com/realpath-native/1.1.0 + dev: true + + registry.npmmirror.com/jest-runner/24.9.0: + resolution: {integrity: sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-runner/-/jest-runner-24.9.0.tgz} + name: jest-runner + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/console': registry.npmmirror.com/@jest/console/24.9.0 + '@jest/environment': registry.npmmirror.com/@jest/environment/24.9.0 + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + exit: registry.npmmirror.com/exit/0.1.2 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + jest-config: registry.npmmirror.com/jest-config/24.9.0 + jest-docblock: registry.npmmirror.com/jest-docblock/24.9.0 + jest-haste-map: registry.npmmirror.com/jest-haste-map/24.9.0 + jest-jasmine2: registry.npmmirror.com/jest-jasmine2/24.9.0 + jest-leak-detector: registry.npmmirror.com/jest-leak-detector/24.9.0 + jest-message-util: registry.npmmirror.com/jest-message-util/24.9.0 + jest-resolve: registry.npmmirror.com/jest-resolve/24.9.0 + jest-runtime: registry.npmmirror.com/jest-runtime/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jest-worker: registry.npmmirror.com/jest-worker/24.9.0 + source-map-support: registry.npmmirror.com/source-map-support/0.5.21 + throat: registry.npmmirror.com/throat/4.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/jest-runtime/24.9.0: + resolution: {integrity: sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-runtime/-/jest-runtime-24.9.0.tgz} + name: jest-runtime + version: 24.9.0 + engines: {node: '>= 6'} + hasBin: true + dependencies: + '@jest/console': registry.npmmirror.com/@jest/console/24.9.0 + '@jest/environment': registry.npmmirror.com/@jest/environment/24.9.0 + '@jest/source-map': registry.npmmirror.com/@jest/source-map/24.9.0 + '@jest/transform': registry.npmmirror.com/@jest/transform/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + '@types/yargs': registry.npmmirror.com/@types/yargs/13.0.12 + chalk: registry.npmmirror.com/chalk/2.4.2 + exit: registry.npmmirror.com/exit/0.1.2 + glob: registry.npmmirror.com/glob/7.2.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + jest-config: registry.npmmirror.com/jest-config/24.9.0 + jest-haste-map: registry.npmmirror.com/jest-haste-map/24.9.0 + jest-message-util: registry.npmmirror.com/jest-message-util/24.9.0 + jest-mock: registry.npmmirror.com/jest-mock/24.9.0 + jest-regex-util: registry.npmmirror.com/jest-regex-util/24.9.0 + jest-resolve: registry.npmmirror.com/jest-resolve/24.9.0 + jest-snapshot: registry.npmmirror.com/jest-snapshot/24.9.0 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + jest-validate: registry.npmmirror.com/jest-validate/24.9.0 + realpath-native: registry.npmmirror.com/realpath-native/1.1.0 + slash: registry.npmmirror.com/slash/2.0.0 + strip-bom: registry.npmmirror.com/strip-bom/3.0.0 + yargs: registry.npmmirror.com/yargs/13.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/jest-serializer-vue/2.0.2: + resolution: {integrity: sha512-nK/YIFo6qe3i9Ge+hr3h4PpRehuPPGZFt8LDBdTHYldMb7ZWlkanZS8Ls7D8h6qmQP2lBQVDLP0DKn5bJ9QApQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz} + name: jest-serializer-vue + version: 2.0.2 + dependencies: + pretty: registry.npmmirror.com/pretty/2.0.0 + dev: true + + registry.npmmirror.com/jest-serializer/24.9.0: + resolution: {integrity: sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-serializer/-/jest-serializer-24.9.0.tgz} + name: jest-serializer + version: 24.9.0 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/jest-snapshot/24.9.0: + resolution: {integrity: sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz} + name: jest-snapshot + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types/7.16.8 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + expect: registry.npmmirror.com/expect/24.9.0 + jest-diff: registry.npmmirror.com/jest-diff/24.9.0 + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/24.9.0 + jest-message-util: registry.npmmirror.com/jest-message-util/24.9.0 + jest-resolve: registry.npmmirror.com/jest-resolve/24.9.0 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + natural-compare: registry.npmmirror.com/natural-compare/1.4.0 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + semver: registry.npmmirror.com/semver/6.3.0 + dev: true + + registry.npmmirror.com/jest-transform-stub/2.0.0: + resolution: {integrity: sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz} + name: jest-transform-stub + version: 2.0.0 + dev: true + + registry.npmmirror.com/jest-util/24.9.0: + resolution: {integrity: sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-util/-/jest-util-24.9.0.tgz} + name: jest-util + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/console': registry.npmmirror.com/@jest/console/24.9.0 + '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/24.9.0 + '@jest/source-map': registry.npmmirror.com/@jest/source-map/24.9.0 + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + callsites: registry.npmmirror.com/callsites/3.1.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + is-ci: registry.npmmirror.com/is-ci/2.0.0 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + slash: registry.npmmirror.com/slash/2.0.0 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/jest-validate/24.9.0: + resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-validate/-/jest-validate-24.9.0.tgz} + name: jest-validate + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + camelcase: registry.npmmirror.com/camelcase/5.3.1 + chalk: registry.npmmirror.com/chalk/2.4.2 + jest-get-type: registry.npmmirror.com/jest-get-type/24.9.0 + leven: registry.npmmirror.com/leven/3.1.0 + pretty-format: registry.npmmirror.com/pretty-format/24.9.0 + dev: true + + registry.npmmirror.com/jest-watch-typeahead/0.4.2: + resolution: {integrity: sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz} + name: jest-watch-typeahead + version: 0.4.2 + dependencies: + ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2 + chalk: registry.npmmirror.com/chalk/2.4.2 + jest-regex-util: registry.npmmirror.com/jest-regex-util/24.9.0 + jest-watcher: registry.npmmirror.com/jest-watcher/24.9.0 + slash: registry.npmmirror.com/slash/3.0.0 + string-length: registry.npmmirror.com/string-length/3.1.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + dev: true + + registry.npmmirror.com/jest-watcher/24.9.0: + resolution: {integrity: sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-watcher/-/jest-watcher-24.9.0.tgz} + name: jest-watcher + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/test-result': registry.npmmirror.com/@jest/test-result/24.9.0 + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + '@types/yargs': registry.npmmirror.com/@types/yargs/13.0.12 + ansi-escapes: registry.npmmirror.com/ansi-escapes/3.2.0 + chalk: registry.npmmirror.com/chalk/2.4.2 + jest-util: registry.npmmirror.com/jest-util/24.9.0 + string-length: registry.npmmirror.com/string-length/2.0.0 + dev: true + + registry.npmmirror.com/jest-worker/24.9.0: + resolution: {integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-24.9.0.tgz} + name: jest-worker + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + merge-stream: registry.npmmirror.com/merge-stream/2.0.0 + supports-color: registry.npmmirror.com/supports-color/6.1.0 + dev: true + + registry.npmmirror.com/jest/24.9.0: + resolution: {integrity: sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest/-/jest-24.9.0.tgz} + name: jest + version: 24.9.0 + engines: {node: '>= 6'} + hasBin: true + dependencies: + import-local: registry.npmmirror.com/import-local/2.0.0 + jest-cli: registry.npmmirror.com/jest-cli/24.9.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/js-base64/2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz} + name: js-base64 + version: 2.6.4 + dev: true + + registry.npmmirror.com/js-beautify/1.14.0: + resolution: {integrity: sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-beautify/-/js-beautify-1.14.0.tgz} + name: js-beautify + version: 1.14.0 + engines: {node: '>=10'} + hasBin: true + dependencies: + config-chain: registry.npmmirror.com/config-chain/1.1.13 + editorconfig: registry.npmmirror.com/editorconfig/0.15.3 + glob: registry.npmmirror.com/glob/7.2.0 + nopt: registry.npmmirror.com/nopt/5.0.0 + dev: true + + registry.npmmirror.com/js-tokens/3.0.2: + resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-3.0.2.tgz} + name: js-tokens + version: 3.0.2 + dev: true + + registry.npmmirror.com/js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz} + name: js-tokens + version: 4.0.0 + + registry.npmmirror.com/js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz} + name: js-yaml + version: 3.14.1 + hasBin: true + dependencies: + argparse: registry.npmmirror.com/argparse/1.0.10 + esprima: registry.npmmirror.com/esprima/4.0.1 + dev: true + + registry.npmmirror.com/jsbn/0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz} + name: jsbn + version: 0.1.1 + dev: true + + registry.npmmirror.com/jsdom/11.12.0: + resolution: {integrity: sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsdom/-/jsdom-11.12.0.tgz} + name: jsdom + version: 11.12.0 + dependencies: + abab: registry.npmmirror.com/abab/2.0.5 + acorn: registry.npmmirror.com/acorn/5.7.4 + acorn-globals: registry.npmmirror.com/acorn-globals/4.3.4 + array-equal: registry.npmmirror.com/array-equal/1.0.0 + cssom: registry.npmmirror.com/cssom/0.3.8 + cssstyle: registry.npmmirror.com/cssstyle/1.4.0 + data-urls: registry.npmmirror.com/data-urls/1.1.0 + domexception: registry.npmmirror.com/domexception/1.0.1 + escodegen: registry.npmmirror.com/escodegen/1.14.3 + html-encoding-sniffer: registry.npmmirror.com/html-encoding-sniffer/1.0.2 + left-pad: registry.npmmirror.com/left-pad/1.3.0 + nwsapi: registry.npmmirror.com/nwsapi/2.2.0 + parse5: registry.npmmirror.com/parse5/4.0.0 + pn: registry.npmmirror.com/pn/1.1.0 + request: registry.npmmirror.com/request/2.88.2 + request-promise-native: registry.npmmirror.com/request-promise-native/1.0.9_request@2.88.2 + sax: registry.npmmirror.com/sax/1.2.4 + symbol-tree: registry.npmmirror.com/symbol-tree/3.2.4 + tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0 + w3c-hr-time: registry.npmmirror.com/w3c-hr-time/1.0.2 + webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2 + whatwg-encoding: registry.npmmirror.com/whatwg-encoding/1.0.5 + whatwg-mimetype: registry.npmmirror.com/whatwg-mimetype/2.3.0 + whatwg-url: registry.npmmirror.com/whatwg-url/6.5.0 + ws: registry.npmmirror.com/ws/5.2.3 + xml-name-validator: registry.npmmirror.com/xml-name-validator/3.0.0 + dev: true + + registry.npmmirror.com/jsdom/15.2.1: + resolution: {integrity: sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsdom/-/jsdom-15.2.1.tgz} + name: jsdom + version: 15.2.1 + engines: {node: '>=8'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: registry.npmmirror.com/abab/2.0.5 + acorn: registry.npmmirror.com/acorn/7.4.1 + acorn-globals: registry.npmmirror.com/acorn-globals/4.3.4 + array-equal: registry.npmmirror.com/array-equal/1.0.0 + cssom: registry.npmmirror.com/cssom/0.4.4 + cssstyle: registry.npmmirror.com/cssstyle/2.3.0 + data-urls: registry.npmmirror.com/data-urls/1.1.0 + domexception: registry.npmmirror.com/domexception/1.0.1 + escodegen: registry.npmmirror.com/escodegen/1.14.3 + html-encoding-sniffer: registry.npmmirror.com/html-encoding-sniffer/1.0.2 + nwsapi: registry.npmmirror.com/nwsapi/2.2.0 + parse5: registry.npmmirror.com/parse5/5.1.0 + pn: registry.npmmirror.com/pn/1.1.0 + request: registry.npmmirror.com/request/2.88.2 + request-promise-native: registry.npmmirror.com/request-promise-native/1.0.9_request@2.88.2 + saxes: registry.npmmirror.com/saxes/3.1.11 + symbol-tree: registry.npmmirror.com/symbol-tree/3.2.4 + tough-cookie: registry.npmmirror.com/tough-cookie/3.0.1 + w3c-hr-time: registry.npmmirror.com/w3c-hr-time/1.0.2 + w3c-xmlserializer: registry.npmmirror.com/w3c-xmlserializer/1.1.2 + webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2 + whatwg-encoding: registry.npmmirror.com/whatwg-encoding/1.0.5 + whatwg-mimetype: registry.npmmirror.com/whatwg-mimetype/2.3.0 + whatwg-url: registry.npmmirror.com/whatwg-url/7.1.0 + ws: registry.npmmirror.com/ws/7.5.6 + xml-name-validator: registry.npmmirror.com/xml-name-validator/3.0.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + registry.npmmirror.com/jsesc/0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz} + name: jsesc + version: 0.5.0 + hasBin: true + dev: true + + registry.npmmirror.com/jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz} + name: jsesc + version: 2.5.2 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmmirror.com/json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz} + name: json-parse-better-errors + version: 1.0.2 + dev: true + + registry.npmmirror.com/json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz} + name: json-parse-even-better-errors + version: 2.3.1 + dev: true + + registry.npmmirror.com/json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} + name: json-schema-traverse + version: 0.4.1 + dev: true + + registry.npmmirror.com/json-schema/0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema/download/json-schema-0.4.0.tgz} + name: json-schema + version: 0.4.0 + dev: true + + registry.npmmirror.com/json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} + name: json-stable-stringify-without-jsonify + version: 1.0.1 + dev: true + + registry.npmmirror.com/json-stringify-safe/5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz} + name: json-stringify-safe + version: 5.0.1 + dev: true + + registry.npmmirror.com/json3/3.3.3: + resolution: {integrity: sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json3/-/json3-3.3.3.tgz} + name: json3 + version: 3.3.3 + dev: true + + registry.npmmirror.com/json5/0.5.1: + resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz} + name: json5 + version: 0.5.1 + hasBin: true + dev: true + + registry.npmmirror.com/json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz} + name: json5 + version: 1.0.1 + hasBin: true + dependencies: + minimist: registry.npmmirror.com/minimist/1.2.5 + dev: true + + registry.npmmirror.com/json5/2.2.0: + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.0.tgz} + name: json5 + version: 2.2.0 + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: registry.npmmirror.com/minimist/1.2.5 + dev: true + + registry.npmmirror.com/jsonfile/4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz} + name: jsonfile + version: 4.0.0 + optionalDependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + dev: true + + registry.npmmirror.com/jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz} + name: jsonfile + version: 6.1.0 + dependencies: + universalify: registry.npmmirror.com/universalify/2.0.0 + optionalDependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + dev: true + optional: true + + registry.npmmirror.com/jsprim/1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz} + name: jsprim + version: 1.4.2 + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: registry.npmmirror.com/assert-plus/1.0.0 + extsprintf: registry.npmmirror.com/extsprintf/1.3.0 + json-schema: registry.npmmirror.com/json-schema/0.4.0 + verror: registry.npmmirror.com/verror/1.10.0 + dev: true + + registry.npmmirror.com/killable/1.0.1: + resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz} + name: killable + version: 1.0.1 + dev: true + + registry.npmmirror.com/kind-of/3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz} + name: kind-of + version: 3.2.2 + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: registry.npmmirror.com/is-buffer/1.1.6 + dev: true + + registry.npmmirror.com/kind-of/4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz} + name: kind-of + version: 4.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: registry.npmmirror.com/is-buffer/1.1.6 + dev: true + + registry.npmmirror.com/kind-of/5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz} + name: kind-of + version: 5.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz} + name: kind-of + version: 6.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/kleur/3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz} + name: kleur + version: 3.0.3 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/last-run/1.1.1: + resolution: {integrity: sha1-RblpQsF7HHnHchmCWbqUO+v4yls=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/last-run/download/last-run-1.1.1.tgz} + name: last-run + version: 1.1.1 + engines: {node: '>= 0.10'} + dependencies: + default-resolution: registry.npmmirror.com/default-resolution/2.0.0 + es6-weak-map: registry.nlark.com/es6-weak-map/2.0.3 + dev: true + + registry.npmmirror.com/launch-editor-middleware/2.3.0: + resolution: {integrity: sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz} + name: launch-editor-middleware + version: 2.3.0 + dependencies: + launch-editor: registry.npmmirror.com/launch-editor/2.3.0 + dev: true + + registry.npmmirror.com/launch-editor/2.3.0: + resolution: {integrity: sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/launch-editor/-/launch-editor-2.3.0.tgz} + name: launch-editor + version: 2.3.0 + dependencies: + picocolors: registry.npmmirror.com/picocolors/1.0.0 + shell-quote: registry.npmmirror.com/shell-quote/1.7.3 + dev: true + + registry.npmmirror.com/lazystream/1.0.1: + resolution: {integrity: sha1-SUyDEGLx+UCCUexE2xy6KSQqJjg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lazystream/download/lazystream-1.0.1.tgz} + name: lazystream + version: 1.0.1 + engines: {node: '>= 0.6.3'} + dependencies: + readable-stream: registry.nlark.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/left-pad/1.3.0: + resolution: {integrity: sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/left-pad/-/left-pad-1.3.0.tgz} + name: left-pad + version: 1.3.0 + deprecated: use String.prototype.padStart() + dev: true + + registry.npmmirror.com/less-loader/5.0.0_less@3.13.1: + resolution: {integrity: sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/less-loader/-/less-loader-5.0.0.tgz} + id: registry.npmmirror.com/less-loader/5.0.0 + name: less-loader + version: 5.0.0 + engines: {node: '>= 4.8.0'} + peerDependencies: + less: ^2.3.1 || ^3.0.0 + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + clone: registry.npmmirror.com/clone/2.1.2 + less: registry.npmmirror.com/less/3.13.1 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + pify: registry.npmmirror.com/pify/4.0.1 + dev: true + + registry.npmmirror.com/less/3.13.1: + resolution: {integrity: sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/less/-/less-3.13.1.tgz} + name: less + version: 3.13.1 + engines: {node: '>=6'} + hasBin: true + dependencies: + copy-anything: registry.npmmirror.com/copy-anything/2.0.6 + tslib: registry.npmmirror.com/tslib/1.14.1 + optionalDependencies: + errno: registry.npmmirror.com/errno/0.1.8 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + image-size: registry.npmmirror.com/image-size/0.5.5 + make-dir: registry.npmmirror.com/make-dir/2.1.0 + mime: registry.npmmirror.com/mime/1.6.0 + native-request: registry.npmmirror.com/native-request/1.1.0 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz} + name: leven + version: 3.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz} + name: levn + version: 0.3.0 + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2 + type-check: registry.npmmirror.com/type-check/0.3.2 + dev: true + + registry.npmmirror.com/liftoff/3.1.0: + resolution: {integrity: sha1-ybpggfkIZwYH7nkGLXAN8GLFLtM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/liftoff/download/liftoff-3.1.0.tgz} + name: liftoff + version: 3.1.0 + engines: {node: '>= 0.8'} + dependencies: + extend: registry.nlark.com/extend/3.0.2 + findup-sync: registry.npmmirror.com/findup-sync/3.0.0 + fined: registry.npmmirror.com/fined/1.2.0 + flagged-respawn: registry.npmmirror.com/flagged-respawn/1.0.1 + is-plain-object: registry.nlark.com/is-plain-object/2.0.4 + object.map: registry.nlark.com/object.map/1.0.1 + rechoir: registry.nlark.com/rechoir/0.6.2 + resolve: registry.npmmirror.com/resolve/1.21.0 + dev: true + + registry.npmmirror.com/lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz} + name: lines-and-columns + version: 1.2.4 + dev: true + + registry.npmmirror.com/lint-staged/9.5.0: + resolution: {integrity: sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lint-staged/-/lint-staged-9.5.0.tgz} + name: lint-staged + version: 9.5.0 + hasBin: true + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + commander: registry.npmmirror.com/commander/2.20.3 + cosmiconfig: registry.npmmirror.com/cosmiconfig/5.2.1 + debug: registry.npmmirror.com/debug/4.3.3 + dedent: registry.npmmirror.com/dedent/0.7.0 + del: registry.npmmirror.com/del/5.1.0 + execa: registry.npmmirror.com/execa/2.1.0 + listr: registry.npmmirror.com/listr/0.14.3 + log-symbols: registry.npmmirror.com/log-symbols/3.0.0 + micromatch: registry.npmmirror.com/micromatch/4.0.4 + normalize-path: registry.npmmirror.com/normalize-path/3.0.0 + please-upgrade-node: registry.npmmirror.com/please-upgrade-node/3.2.0 + string-argv: registry.npmmirror.com/string-argv/0.3.1 + stringify-object: registry.npmmirror.com/stringify-object/3.3.0 + transitivePeerDependencies: + - supports-color + - zen-observable + dev: true + + registry.npmmirror.com/listr-silent-renderer/1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz} + name: listr-silent-renderer + version: 1.1.1 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/listr-update-renderer/0.5.0_listr@0.14.3: + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz} + id: registry.npmmirror.com/listr-update-renderer/0.5.0 + name: listr-update-renderer + version: 0.5.0 + engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 + dependencies: + chalk: registry.npmmirror.com/chalk/1.1.3 + cli-truncate: registry.npmmirror.com/cli-truncate/0.2.1 + elegant-spinner: registry.npmmirror.com/elegant-spinner/1.0.1 + figures: registry.npmmirror.com/figures/1.7.0 + indent-string: registry.npmmirror.com/indent-string/3.2.0 + listr: registry.npmmirror.com/listr/0.14.3 + log-symbols: registry.npmmirror.com/log-symbols/1.0.2 + log-update: registry.npmmirror.com/log-update/2.3.0 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + dev: true + + registry.npmmirror.com/listr-verbose-renderer/0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz} + name: listr-verbose-renderer + version: 0.5.0 + engines: {node: '>=4'} + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + cli-cursor: registry.npmmirror.com/cli-cursor/2.1.0 + date-fns: registry.npmmirror.com/date-fns/1.30.1 + figures: registry.npmmirror.com/figures/2.0.0 + dev: true + + registry.npmmirror.com/listr/0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr/-/listr-0.14.3.tgz} + name: listr + version: 0.14.3 + engines: {node: '>=6'} + dependencies: + '@samverschueren/stream-to-observable': registry.npmmirror.com/@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.7 + is-observable: registry.npmmirror.com/is-observable/1.1.0 + is-promise: registry.npmmirror.com/is-promise/2.2.2 + is-stream: registry.npmmirror.com/is-stream/1.1.0 + listr-silent-renderer: registry.npmmirror.com/listr-silent-renderer/1.1.1 + listr-update-renderer: registry.npmmirror.com/listr-update-renderer/0.5.0_listr@0.14.3 + listr-verbose-renderer: registry.npmmirror.com/listr-verbose-renderer/0.5.0 + p-map: registry.npmmirror.com/p-map/2.1.0 + rxjs: registry.npmmirror.com/rxjs/6.6.7 + transitivePeerDependencies: + - zen-observable + dev: true + + registry.npmmirror.com/load-json-file/1.1.0: + resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/load-json-file/-/load-json-file-1.1.0.tgz} + name: load-json-file + version: 1.1.0 + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + parse-json: registry.npmmirror.com/parse-json/2.2.0 + pify: registry.npmmirror.com/pify/2.3.0 + pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1 + strip-bom: registry.npmmirror.com/strip-bom/2.0.0 + dev: true + + registry.npmmirror.com/load-json-file/4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz} + name: load-json-file + version: 4.0.0 + engines: {node: '>=4'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + parse-json: registry.npmmirror.com/parse-json/4.0.0 + pify: registry.npmmirror.com/pify/3.0.0 + strip-bom: registry.npmmirror.com/strip-bom/3.0.0 + dev: true + + registry.npmmirror.com/loader-fs-cache/1.0.3: + resolution: {integrity: sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz} + name: loader-fs-cache + version: 1.0.3 + dependencies: + find-cache-dir: registry.npmmirror.com/find-cache-dir/0.1.1 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + dev: true + + registry.npmmirror.com/loader-runner/2.4.0: + resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz} + name: loader-runner + version: 2.4.0 + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dev: true + + registry.npmmirror.com/loader-utils/0.2.17: + resolution: {integrity: sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz} + name: loader-utils + version: 0.2.17 + dependencies: + big.js: registry.npmmirror.com/big.js/3.2.0 + emojis-list: registry.npmmirror.com/emojis-list/2.1.0 + json5: registry.npmmirror.com/json5/0.5.1 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + dev: true + + registry.npmmirror.com/loader-utils/1.4.0: + resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.0.tgz} + name: loader-utils + version: 1.4.0 + engines: {node: '>=4.0.0'} + dependencies: + big.js: registry.npmmirror.com/big.js/5.2.2 + emojis-list: registry.npmmirror.com/emojis-list/3.0.0 + json5: registry.npmmirror.com/json5/1.0.1 + dev: true + + registry.npmmirror.com/loader-utils/2.0.2: + resolution: {integrity: sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz} + name: loader-utils + version: 2.0.2 + engines: {node: '>=8.9.0'} + dependencies: + big.js: registry.npmmirror.com/big.js/5.2.2 + emojis-list: registry.npmmirror.com/emojis-list/3.0.0 + json5: registry.npmmirror.com/json5/2.2.0 + dev: true + optional: true + + registry.npmmirror.com/localforage/1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/localforage/-/localforage-1.10.0.tgz} + name: localforage + version: 1.10.0 + dependencies: + lie: registry.nlark.com/lie/3.1.1 + dev: false + + registry.npmmirror.com/locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz} + name: locate-path + version: 3.0.0 + engines: {node: '>=6'} + dependencies: + p-locate: registry.npmmirror.com/p-locate/3.0.0 + path-exists: registry.npmmirror.com/path-exists/3.0.0 + dev: true + + registry.npmmirror.com/locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz} + name: locate-path + version: 5.0.0 + engines: {node: '>=8'} + dependencies: + p-locate: registry.npmmirror.com/p-locate/4.1.0 + dev: true + + registry.npmmirror.com/lodash-es/4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz} + name: lodash-es + version: 4.17.21 + dev: false + + registry.npmmirror.com/lodash.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz} + name: lodash.debounce + version: 4.0.8 + + registry.npmmirror.com/lodash.defaultsdeep/4.6.1: + resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz} + name: lodash.defaultsdeep + version: 4.6.1 + dev: true + + registry.npmmirror.com/lodash.kebabcase/4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz} + name: lodash.kebabcase + version: 4.1.1 + dev: true + + registry.npmmirror.com/lodash.mapvalues/4.6.0: + resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz} + name: lodash.mapvalues + version: 4.6.0 + dev: true + + registry.npmmirror.com/lodash.memoize/4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz} + name: lodash.memoize + version: 4.1.2 + dev: true + + registry.npmmirror.com/lodash.sortby/4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz} + name: lodash.sortby + version: 4.7.0 + dev: true + + registry.npmmirror.com/lodash.transform/4.6.0: + resolution: {integrity: sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz} + name: lodash.transform + version: 4.6.0 + dev: true + + registry.npmmirror.com/lodash.uniq/4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz} + name: lodash.uniq + version: 4.5.0 + dev: true + + registry.npmmirror.com/lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz} + name: lodash + version: 4.17.21 + + registry.npmmirror.com/log-symbols/1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-1.0.2.tgz} + name: log-symbols + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + chalk: registry.npmmirror.com/chalk/1.1.3 + dev: true + + registry.npmmirror.com/log-symbols/2.2.0: + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz} + name: log-symbols + version: 2.2.0 + engines: {node: '>=4'} + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + dev: true + + registry.npmmirror.com/log-symbols/3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-3.0.0.tgz} + name: log-symbols + version: 3.0.0 + engines: {node: '>=8'} + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + dev: true + + registry.npmmirror.com/log-update/2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz} + name: log-update + version: 2.3.0 + engines: {node: '>=4'} + dependencies: + ansi-escapes: registry.npmmirror.com/ansi-escapes/3.2.0 + cli-cursor: registry.npmmirror.com/cli-cursor/2.1.0 + wrap-ansi: registry.npmmirror.com/wrap-ansi/3.0.1 + dev: true + + registry.npmmirror.com/loglevel/1.8.0: + resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loglevel/-/loglevel-1.8.0.tgz} + name: loglevel + version: 1.8.0 + engines: {node: '>= 0.6.0'} + dev: true + + registry.npmmirror.com/loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz} + name: loose-envify + version: 1.4.0 + hasBin: true + dependencies: + js-tokens: registry.npmmirror.com/js-tokens/4.0.0 + + registry.npmmirror.com/loud-rejection/1.6.0: + resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loud-rejection/-/loud-rejection-1.6.0.tgz} + name: loud-rejection + version: 1.6.0 + engines: {node: '>=0.10.0'} + dependencies: + currently-unhandled: registry.npmmirror.com/currently-unhandled/0.4.1 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + dev: true + + registry.npmmirror.com/lower-case/1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz} + name: lower-case + version: 1.1.4 + dev: true + + registry.npmmirror.com/lru-cache/4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz} + name: lru-cache + version: 4.1.5 + dependencies: + pseudomap: registry.npmmirror.com/pseudomap/1.0.2 + yallist: registry.npmmirror.com/yallist/2.1.2 + dev: true + + registry.npmmirror.com/lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz} + name: lru-cache + version: 5.1.1 + dependencies: + yallist: registry.npmmirror.com/yallist/3.1.1 + dev: true + + registry.npmmirror.com/lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz} + name: lru-cache + version: 6.0.0 + engines: {node: '>=10'} + dependencies: + yallist: registry.npmmirror.com/yallist/4.0.0 + dev: true + optional: true + + registry.npmmirror.com/magic-string/0.25.7: + resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.7.tgz} + name: magic-string + version: 0.25.7 + dependencies: + sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8 + + registry.npmmirror.com/make-dir/2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz} + name: make-dir + version: 2.1.0 + engines: {node: '>=6'} + dependencies: + pify: registry.npmmirror.com/pify/4.0.1 + semver: registry.npmmirror.com/semver/5.7.1 + dev: true + + registry.npmmirror.com/make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz} + name: make-dir + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + semver: registry.npmmirror.com/semver/6.3.0 + dev: true + + registry.npmmirror.com/make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz} + name: make-error + version: 1.3.6 + dev: true + + registry.npmmirror.com/makeerror/1.0.12: + resolution: {integrity: sha1-Pl3SB5qC6BLpg8xmEMSiyw6qgBo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/makeerror/download/makeerror-1.0.12.tgz} + name: makeerror + version: 1.0.12 + dependencies: + tmpl: registry.nlark.com/tmpl/1.0.5 + dev: true + + registry.npmmirror.com/map-cache/0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz} + name: map-cache + version: 0.2.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/map-obj/1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz} + name: map-obj + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/map-visit/1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz} + name: map-visit + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + object-visit: registry.npmmirror.com/object-visit/1.0.1 + dev: true + + registry.npmmirror.com/md5.js/1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz} + name: md5.js + version: 1.3.5 + dependencies: + hash-base: registry.npmmirror.com/hash-base/3.1.0 + inherits: registry.npmmirror.com/inherits/2.0.4 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/mdn-data/2.0.14: + resolution: {integrity: sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.14.tgz} + name: mdn-data + version: 2.0.14 + dev: true + + registry.npmmirror.com/mdn-data/2.0.4: + resolution: {integrity: sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.4.tgz} + name: mdn-data + version: 2.0.4 + dev: true + + registry.npmmirror.com/memfs/3.4.1: + resolution: {integrity: sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memfs/-/memfs-3.4.1.tgz} + name: memfs + version: 3.4.1 + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: registry.nlark.com/fs-monkey/1.0.3 + dev: true + optional: true + + registry.npmmirror.com/memoize-one/6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz} + name: memoize-one + version: 6.0.0 + dev: false + + registry.npmmirror.com/memory-fs/0.4.1: + resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz} + name: memory-fs + version: 0.4.1 + dependencies: + errno: registry.npmmirror.com/errno/0.1.8 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/memory-fs/0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz} + name: memory-fs + version: 0.5.0 + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dependencies: + errno: registry.npmmirror.com/errno/0.1.8 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/meow/3.7.0: + resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/meow/-/meow-3.7.0.tgz} + name: meow + version: 3.7.0 + engines: {node: '>=0.10.0'} + dependencies: + camelcase-keys: registry.npmmirror.com/camelcase-keys/2.1.0 + decamelize: registry.npmmirror.com/decamelize/1.2.0 + loud-rejection: registry.npmmirror.com/loud-rejection/1.6.0 + map-obj: registry.npmmirror.com/map-obj/1.0.1 + minimist: registry.npmmirror.com/minimist/1.2.5 + normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + read-pkg-up: registry.npmmirror.com/read-pkg-up/1.0.1 + redent: registry.npmmirror.com/redent/1.0.0 + trim-newlines: registry.npmmirror.com/trim-newlines/1.0.0 + dev: true + + registry.npmmirror.com/merge-source-map/1.1.0: + resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz} + name: merge-source-map + version: 1.1.0 + dependencies: + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz} + name: merge-stream + version: 2.0.0 + dev: true + + registry.npmmirror.com/merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz} + name: merge2 + version: 1.4.1 + engines: {node: '>= 8'} + dev: true + + registry.npmmirror.com/methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz} + name: methods + version: 1.1.2 + engines: {node: '>= 0.6'} + dev: true + + registry.npmmirror.com/microevent.ts/0.1.1: + resolution: {integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/microevent.ts/-/microevent.ts-0.1.1.tgz} + name: microevent.ts + version: 0.1.1 + dev: true + + registry.npmmirror.com/micromatch/3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-3.1.0.tgz} + name: micromatch + version: 3.1.0 + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: registry.npmmirror.com/arr-diff/4.0.0 + array-unique: registry.npmmirror.com/array-unique/0.3.2 + braces: registry.npmmirror.com/braces/2.3.2 + define-property: registry.npmmirror.com/define-property/1.0.0 + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + extglob: registry.npmmirror.com/extglob/2.0.4 + fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1 + kind-of: registry.npmmirror.com/kind-of/5.1.0 + nanomatch: registry.npmmirror.com/nanomatch/1.2.13 + object.pick: registry.npmmirror.com/object.pick/1.3.0 + regex-not: registry.npmmirror.com/regex-not/1.0.2 + snapdragon: registry.npmmirror.com/snapdragon/0.8.2 + to-regex: registry.npmmirror.com/to-regex/3.0.2 + dev: true + + registry.npmmirror.com/micromatch/3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz} + name: micromatch + version: 3.1.10 + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: registry.npmmirror.com/arr-diff/4.0.0 + array-unique: registry.npmmirror.com/array-unique/0.3.2 + braces: registry.npmmirror.com/braces/2.3.2 + define-property: registry.npmmirror.com/define-property/2.0.2 + extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2 + extglob: registry.npmmirror.com/extglob/2.0.4 + fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1 + kind-of: registry.npmmirror.com/kind-of/6.0.3 + nanomatch: registry.npmmirror.com/nanomatch/1.2.13 + object.pick: registry.npmmirror.com/object.pick/1.3.0 + regex-not: registry.npmmirror.com/regex-not/1.0.2 + snapdragon: registry.npmmirror.com/snapdragon/0.8.2 + to-regex: registry.npmmirror.com/to-regex/3.0.2 + dev: true + + registry.npmmirror.com/micromatch/4.0.4: + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.4.tgz} + name: micromatch + version: 4.0.4 + engines: {node: '>=8.6'} + dependencies: + braces: registry.npmmirror.com/braces/3.0.2 + picomatch: registry.npmmirror.com/picomatch/2.3.1 + dev: true + + registry.npmmirror.com/miller-rabin/4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz} + name: miller-rabin + version: 4.0.1 + hasBin: true + dependencies: + bn.js: registry.npmmirror.com/bn.js/4.12.0 + brorand: registry.npmmirror.com/brorand/1.1.0 + dev: true + + registry.npmmirror.com/mime-db/1.51.0: + resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.51.0.tgz} + name: mime-db + version: 1.51.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmmirror.com/mime-types/2.1.34: + resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.34.tgz} + name: mime-types + version: 2.1.34 + engines: {node: '>= 0.6'} + dependencies: + mime-db: registry.npmmirror.com/mime-db/1.51.0 + dev: true + + registry.npmmirror.com/mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz} + name: mime + version: 1.6.0 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmmirror.com/mime/2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz} + name: mime + version: 2.6.0 + engines: {node: '>=4.0.0'} + hasBin: true + dev: true + + registry.npmmirror.com/mimic-fn/1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz} + name: mimic-fn + version: 1.2.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz} + name: mimic-fn + version: 2.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/mini-css-extract-plugin/0.9.0_webpack@4.46.0: + resolution: {integrity: sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz} + id: registry.npmmirror.com/mini-css-extract-plugin/0.9.0 + name: mini-css-extract-plugin + version: 0.9.0 + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.4.0 + dependencies: + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + normalize-url: registry.npmmirror.com/normalize-url/1.9.1 + schema-utils: registry.npmmirror.com/schema-utils/1.0.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + webpack-sources: registry.npmmirror.com/webpack-sources/1.4.3 + dev: true + + registry.npmmirror.com/minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz} + name: minimalistic-assert + version: 1.0.1 + dev: true + + registry.npmmirror.com/minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz} + name: minimalistic-crypto-utils + version: 1.0.1 + dev: true + + registry.npmmirror.com/minimatch/3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.0.4.tgz} + name: minimatch + version: 3.0.4 + dependencies: + brace-expansion: registry.npmmirror.com/brace-expansion/1.1.11 + dev: true + + registry.npmmirror.com/minimist/1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.5.tgz} + name: minimist + version: 1.2.5 + dev: true + + registry.npmmirror.com/minipass/3.1.6: + resolution: {integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz} + name: minipass + version: 3.1.6 + engines: {node: '>=8'} + dependencies: + yallist: registry.npmmirror.com/yallist/4.0.0 + dev: true + + registry.npmmirror.com/mississippi/3.0.0: + resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz} + name: mississippi + version: 3.0.0 + engines: {node: '>=4.0.0'} + dependencies: + concat-stream: registry.npmmirror.com/concat-stream/1.6.2 + duplexify: registry.npmmirror.com/duplexify/3.7.1 + end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4 + flush-write-stream: registry.npmmirror.com/flush-write-stream/1.1.1 + from2: registry.npmmirror.com/from2/2.3.0 + parallel-transform: registry.npmmirror.com/parallel-transform/1.2.0 + pump: registry.npmmirror.com/pump/3.0.0 + pumpify: registry.npmmirror.com/pumpify/1.5.1 + stream-each: registry.npmmirror.com/stream-each/1.2.3 + through2: registry.npmmirror.com/through2/2.0.5 + dev: true + + registry.npmmirror.com/mitt/1.1.2: + resolution: {integrity: sha512-3btxP0O9iGADGWAkteQ8mzDtEspZqu4I32y4GZYCV5BrwtzdcRpF4dQgNdJadCrbBx7Lu6Sq9AVrerMHR0Hkmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mitt/download/mitt-1.1.2.tgz} + name: mitt + version: 1.1.2 + dev: true + + registry.npmmirror.com/mixin-deep/1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz} + name: mixin-deep + version: 1.3.2 + engines: {node: '>=0.10.0'} + dependencies: + for-in: registry.npmmirror.com/for-in/1.0.2 + is-extendable: registry.npmmirror.com/is-extendable/1.0.1 + dev: true + + registry.npmmirror.com/mkdirp/0.5.5: + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.5.tgz} + name: mkdirp + version: 0.5.5 + hasBin: true + dependencies: + minimist: registry.npmmirror.com/minimist/1.2.5 + dev: true + + registry.npmmirror.com/mockjs/1.1.0: + resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz} + name: mockjs + version: 1.1.0 + hasBin: true + dependencies: + commander: registry.npmmirror.com/commander/4.1.1 + dev: true + + registry.npmmirror.com/moment/2.29.1: + resolution: {integrity: sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/moment/-/moment-2.29.1.tgz} + name: moment + version: 2.29.1 + dev: false + + registry.npmmirror.com/move-concurrently/1.0.1: + resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz} + name: move-concurrently + version: 1.0.1 + dependencies: + aproba: registry.npmmirror.com/aproba/1.2.0 + copy-concurrently: registry.npmmirror.com/copy-concurrently/1.0.5 + fs-write-stream-atomic: registry.npmmirror.com/fs-write-stream-atomic/1.0.10 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + run-queue: registry.npmmirror.com/run-queue/1.0.3 + dev: true + + registry.npmmirror.com/ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz} + name: ms + version: 2.0.0 + dev: true + + registry.npmmirror.com/ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz} + name: ms + version: 2.1.2 + dev: true + + registry.npmmirror.com/ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz} + name: ms + version: 2.1.3 + dev: true + + registry.npmmirror.com/multicast-dns-service-types/1.1.0: + resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz} + name: multicast-dns-service-types + version: 1.1.0 + dev: true + + registry.npmmirror.com/multicast-dns/6.2.3: + resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz} + name: multicast-dns + version: 6.2.3 + hasBin: true + dependencies: + dns-packet: registry.npmmirror.com/dns-packet/1.3.4 + thunky: registry.npmmirror.com/thunky/1.1.0 + dev: true + + registry.npmmirror.com/mute-stdout/1.0.1: + resolution: {integrity: sha1-rLAwDrTeI6fd7sAU4+lgRLNHIzE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mute-stdout/download/mute-stdout-1.0.1.tgz} + name: mute-stdout + version: 1.0.1 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/mz/2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz} + name: mz + version: 2.7.0 + dependencies: + any-promise: registry.npmmirror.com/any-promise/1.3.0 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + thenify-all: registry.npmmirror.com/thenify-all/1.6.0 + dev: true + + registry.npmmirror.com/nan/2.15.0: + resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz} + name: nan + version: 2.15.0 + dev: true + + registry.npmmirror.com/nanoid/3.1.30: + resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.1.30.tgz} + name: nanoid + version: 3.1.30 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + registry.npmmirror.com/nanomatch/1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz} + name: nanomatch + version: 1.2.13 + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: registry.npmmirror.com/arr-diff/4.0.0 + array-unique: registry.npmmirror.com/array-unique/0.3.2 + define-property: registry.npmmirror.com/define-property/2.0.2 + extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2 + fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1 + is-windows: registry.npmmirror.com/is-windows/1.0.2 + kind-of: registry.npmmirror.com/kind-of/6.0.3 + object.pick: registry.npmmirror.com/object.pick/1.3.0 + regex-not: registry.npmmirror.com/regex-not/1.0.2 + snapdragon: registry.npmmirror.com/snapdragon/0.8.2 + to-regex: registry.npmmirror.com/to-regex/3.0.2 + dev: true + + registry.npmmirror.com/nanopop/2.1.0: + resolution: {integrity: sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanopop/-/nanopop-2.1.0.tgz} + name: nanopop + version: 2.1.0 + dev: false + + registry.npmmirror.com/native-request/1.1.0: + resolution: {integrity: sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/native-request/-/native-request-1.1.0.tgz} + name: native-request + version: 1.1.0 + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz} + name: natural-compare + version: 1.4.0 + dev: true + + registry.npmmirror.com/neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz} + name: neo-async + version: 2.6.2 + dev: true + + registry.npmmirror.com/nice-try/1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz} + name: nice-try + version: 1.0.5 + dev: true + + registry.npmmirror.com/no-case/2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz} + name: no-case + version: 2.3.2 + dependencies: + lower-case: registry.npmmirror.com/lower-case/1.1.4 + dev: true + + registry.npmmirror.com/node-addon-api/1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-addon-api/-/node-addon-api-1.7.2.tgz} + name: node-addon-api + version: 1.7.2 + dev: true + + registry.npmmirror.com/node-cache/4.2.1: + resolution: {integrity: sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-cache/-/node-cache-4.2.1.tgz} + name: node-cache + version: 4.2.1 + engines: {node: '>= 0.4.6'} + dependencies: + clone: registry.npmmirror.com/clone/2.1.2 + lodash: registry.npmmirror.com/lodash/4.17.21 + dev: true + + registry.npmmirror.com/node-dir/0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-dir/-/node-dir-0.1.17.tgz} + name: node-dir + version: 0.1.17 + engines: {node: '>= 0.10.5'} + dependencies: + minimatch: registry.npmmirror.com/minimatch/3.0.4 + dev: true + + registry.npmmirror.com/node-forge/1.2.0: + resolution: {integrity: sha512-M4AsdaP0bGNaSPtatd/+f76asocI0cFaURRdeQVZvrJBrYp2Qohv5hDbGHykuNqCb1BYjWHjdS6HlN50qbztwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-forge/-/node-forge-1.2.0.tgz} + name: node-forge + version: 1.2.0 + engines: {node: '>= 6.13.0'} + dev: true + + registry.npmmirror.com/node-gyp/3.8.0: + resolution: {integrity: sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-gyp/-/node-gyp-3.8.0.tgz} + name: node-gyp + version: 3.8.0 + engines: {node: '>= 0.8.0'} + hasBin: true + dependencies: + fstream: registry.npmmirror.com/fstream/1.0.12 + glob: registry.npmmirror.com/glob/7.2.0 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + nopt: registry.npmmirror.com/nopt/3.0.6 + npmlog: registry.npmmirror.com/npmlog/4.1.2 + osenv: registry.npmmirror.com/osenv/0.1.5 + request: registry.npmmirror.com/request/2.88.2 + rimraf: registry.npmmirror.com/rimraf/2.7.1 + semver: registry.npmmirror.com/semver/5.3.0 + tar: registry.npmmirror.com/tar/2.2.2 + which: registry.npmmirror.com/which/1.3.1 + dev: true + + registry.npmmirror.com/node-int64/0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz} + name: node-int64 + version: 0.4.0 + dev: true + + registry.npmmirror.com/node-ipc/9.2.1: + resolution: {integrity: sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-ipc/-/node-ipc-9.2.1.tgz} + name: node-ipc + version: 9.2.1 + engines: {node: '>=8.0.0'} + dependencies: + event-pubsub: registry.nlark.com/event-pubsub/4.3.0 + js-message: registry.nlark.com/js-message/1.0.7 + js-queue: registry.nlark.com/js-queue/2.0.2 + dev: true + + registry.npmmirror.com/node-libs-browser/2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz} + name: node-libs-browser + version: 2.2.1 + dependencies: + assert: registry.npmmirror.com/assert/1.5.0 + browserify-zlib: registry.npmmirror.com/browserify-zlib/0.2.0 + buffer: registry.npmmirror.com/buffer/4.9.2 + console-browserify: registry.npmmirror.com/console-browserify/1.2.0 + constants-browserify: registry.npmmirror.com/constants-browserify/1.0.0 + crypto-browserify: registry.npmmirror.com/crypto-browserify/3.12.0 + domain-browser: registry.npmmirror.com/domain-browser/1.2.0 + events: registry.npmmirror.com/events/3.3.0 + https-browserify: registry.npmmirror.com/https-browserify/1.0.0 + os-browserify: registry.npmmirror.com/os-browserify/0.3.0 + path-browserify: registry.nlark.com/path-browserify/0.0.1 + process: registry.npmmirror.com/process/0.11.10 + punycode: registry.npmmirror.com/punycode/1.4.1 + querystring-es3: registry.npmmirror.com/querystring-es3/0.2.1 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + stream-browserify: registry.npmmirror.com/stream-browserify/2.0.2 + stream-http: registry.npmmirror.com/stream-http/2.8.3 + string_decoder: registry.npmmirror.com/string_decoder/1.3.0 + timers-browserify: registry.npmmirror.com/timers-browserify/2.0.12 + tty-browserify: registry.nlark.com/tty-browserify/0.0.0 + url: registry.npmmirror.com/url/0.11.0 + util: registry.npmmirror.com/util/0.11.1 + vm-browserify: registry.npmmirror.com/vm-browserify/1.1.2 + dev: true + + registry.npmmirror.com/node-notifier/5.4.5: + resolution: {integrity: sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-notifier/-/node-notifier-5.4.5.tgz} + name: node-notifier + version: 5.4.5 + dependencies: + growly: registry.npmmirror.com/growly/1.3.0 + is-wsl: registry.npmmirror.com/is-wsl/1.1.0 + semver: registry.npmmirror.com/semver/5.7.1 + shellwords: registry.npmmirror.com/shellwords/0.1.1 + which: registry.npmmirror.com/which/1.3.1 + dev: true + + registry.npmmirror.com/node-releases/2.0.1: + resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.1.tgz} + name: node-releases + version: 2.0.1 + dev: true + + registry.npmmirror.com/node-sass/4.14.1: + resolution: {integrity: sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-sass/-/node-sass-4.14.1.tgz} + name: node-sass + version: 4.14.1 + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + dependencies: + async-foreach: registry.npmmirror.com/async-foreach/0.1.3 + chalk: registry.npmmirror.com/chalk/1.1.3 + cross-spawn: registry.npmmirror.com/cross-spawn/3.0.1 + gaze: registry.npmmirror.com/gaze/1.1.3 + get-stdin: registry.npmmirror.com/get-stdin/4.0.1 + glob: registry.npmmirror.com/glob/7.2.0 + in-publish: registry.npmmirror.com/in-publish/2.0.1 + lodash: registry.npmmirror.com/lodash/4.17.21 + meow: registry.npmmirror.com/meow/3.7.0 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + nan: registry.npmmirror.com/nan/2.15.0 + node-gyp: registry.npmmirror.com/node-gyp/3.8.0 + npmlog: registry.npmmirror.com/npmlog/4.1.2 + request: registry.npmmirror.com/request/2.88.2 + sass-graph: registry.npmmirror.com/sass-graph/2.2.5 + stdout-stream: registry.npmmirror.com/stdout-stream/1.4.1 + true-case-path: registry.npmmirror.com/true-case-path/1.0.3 + dev: true + + registry.npmmirror.com/nopt/3.0.6: + resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nopt/-/nopt-3.0.6.tgz} + name: nopt + version: 3.0.6 + hasBin: true + dependencies: + abbrev: registry.npmmirror.com/abbrev/1.1.1 + dev: true + + registry.npmmirror.com/nopt/5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz} + name: nopt + version: 5.0.0 + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: registry.npmmirror.com/abbrev/1.1.1 + dev: true + + registry.npmmirror.com/normalize-package-data/2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz} + name: normalize-package-data + version: 2.5.0 + dependencies: + hosted-git-info: registry.npmmirror.com/hosted-git-info/2.8.9 + resolve: registry.npmmirror.com/resolve/1.21.0 + semver: registry.npmmirror.com/semver/5.7.1 + validate-npm-package-license: registry.npmmirror.com/validate-npm-package-license/3.0.4 + dev: true + + registry.npmmirror.com/normalize-path/1.0.0: + resolution: {integrity: sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-1.0.0.tgz} + name: normalize-path + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/normalize-path/2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz} + name: normalize-path + version: 2.1.1 + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: registry.npmmirror.com/remove-trailing-separator/1.1.0 + dev: true + + registry.npmmirror.com/normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz} + name: normalize-path + version: 3.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz} + name: normalize-range + version: 0.1.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/normalize-url/1.9.1: + resolution: {integrity: sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz} + name: normalize-url + version: 1.9.1 + engines: {node: '>=4'} + dependencies: + object-assign: registry.npmmirror.com/object-assign/4.1.1 + prepend-http: registry.npmmirror.com/prepend-http/1.0.4 + query-string: registry.npmmirror.com/query-string/4.3.4 + sort-keys: registry.npmmirror.com/sort-keys/1.1.2 + dev: true + + registry.npmmirror.com/normalize-url/3.3.0: + resolution: {integrity: sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz} + name: normalize-url + version: 3.3.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/normalize-wheel-es/1.1.1: + resolution: {integrity: sha512-157VNH4CngrcsvF8xOVOe22cwniIR3nxSltdctvQeHZj8JttEeOXffK28jucWfWBXs0QNetAumjc1GiInnwX4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.1.1.tgz} + name: normalize-wheel-es + version: 1.1.1 + dev: false + + registry.npmmirror.com/normalize.css/8.0.1: + resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize.css/-/normalize.css-8.0.1.tgz} + name: normalize.css + version: 8.0.1 + dev: false + + registry.npmmirror.com/npm-run-path/2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz} + name: npm-run-path + version: 2.0.2 + engines: {node: '>=4'} + dependencies: + path-key: registry.npmmirror.com/path-key/2.0.1 + dev: true + + registry.npmmirror.com/npm-run-path/3.1.0: + resolution: {integrity: sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-3.1.0.tgz} + name: npm-run-path + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + path-key: registry.npmmirror.com/path-key/3.1.1 + dev: true + + registry.npmmirror.com/npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz} + name: npm-run-path + version: 4.0.1 + engines: {node: '>=8'} + dependencies: + path-key: registry.npmmirror.com/path-key/3.1.1 + dev: true + + registry.npmmirror.com/npmlog/4.1.2: + resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npmlog/-/npmlog-4.1.2.tgz} + name: npmlog + version: 4.1.2 + dependencies: + are-we-there-yet: registry.npmmirror.com/are-we-there-yet/1.1.7 + console-control-strings: registry.npmmirror.com/console-control-strings/1.1.0 + gauge: registry.npmmirror.com/gauge/2.7.4 + set-blocking: registry.npmmirror.com/set-blocking/2.0.0 + dev: true + + registry.npmmirror.com/nprogress/0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz} + name: nprogress + version: 0.2.0 + dev: false + + registry.npmmirror.com/nth-check/1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz} + name: nth-check + version: 1.0.2 + dependencies: + boolbase: registry.npmmirror.com/boolbase/1.0.0 + dev: true + + registry.npmmirror.com/nth-check/2.0.1: + resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-2.0.1.tgz} + name: nth-check + version: 2.0.1 + dependencies: + boolbase: registry.npmmirror.com/boolbase/1.0.0 + dev: true + + registry.npmmirror.com/num2fraction/1.2.2: + resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz} + name: num2fraction + version: 1.2.2 + dev: true + + registry.npmmirror.com/number-is-nan/1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz} + name: number-is-nan + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/nwsapi/2.2.0: + resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.0.tgz} + name: nwsapi + version: 2.2.0 + dev: true + + registry.npmmirror.com/oauth-sign/0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz} + name: oauth-sign + version: 0.9.0 + dev: true + + registry.npmmirror.com/object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz} + name: object-assign + version: 4.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/object-copy/0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz} + name: object-copy + version: 0.1.0 + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: registry.npmmirror.com/copy-descriptor/0.1.1 + define-property: registry.npmmirror.com/define-property/0.2.5 + kind-of: registry.npmmirror.com/kind-of/3.2.2 + dev: true + + registry.npmmirror.com/object-hash/1.3.1: + resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-hash/-/object-hash-1.3.1.tgz} + name: object-hash + version: 1.3.1 + engines: {node: '>= 0.10.0'} + dev: true + + registry.npmmirror.com/object-inspect/1.12.0: + resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz} + name: object-inspect + version: 1.12.0 + dev: true + + registry.npmmirror.com/object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz} + name: object-is + version: 1.1.5 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + dev: true + + registry.npmmirror.com/object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz} + name: object-keys + version: 1.1.1 + engines: {node: '>= 0.4'} + dev: true + + registry.npmmirror.com/object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz} + name: object-visit + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.npmmirror.com/object.assign/4.1.2: + resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz} + name: object.assign + version: 4.1.2 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + object-keys: registry.npmmirror.com/object-keys/1.1.1 + dev: true + + registry.npmmirror.com/object.getownpropertydescriptors/2.1.3: + resolution: {integrity: sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz} + name: object.getownpropertydescriptors + version: 2.1.3 + engines: {node: '>= 0.8'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + es-abstract: registry.npmmirror.com/es-abstract/1.19.1 + dev: true + + registry.npmmirror.com/object.pick/1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz} + name: object.pick + version: 1.3.0 + engines: {node: '>=0.10.0'} + dependencies: + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.npmmirror.com/object.values/1.1.5: + resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz} + name: object.values + version: 1.1.5 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + es-abstract: registry.npmmirror.com/es-abstract/1.19.1 + dev: true + + registry.npmmirror.com/obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz} + name: obuf + version: 1.1.2 + dev: true + + registry.npmmirror.com/omit.js/2.0.2: + resolution: {integrity: sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/omit.js/-/omit.js-2.0.2.tgz} + name: omit.js + version: 2.0.2 + dev: false + + registry.npmmirror.com/on-finished/2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz} + name: on-finished + version: 2.3.0 + engines: {node: '>= 0.8'} + dependencies: + ee-first: registry.nlark.com/ee-first/1.1.1 + dev: true + + registry.npmmirror.com/on-headers/1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz} + name: on-headers + version: 1.0.2 + engines: {node: '>= 0.8'} + dev: true + + registry.npmmirror.com/once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz} + name: once + version: 1.4.0 + dependencies: + wrappy: registry.npmmirror.com/wrappy/1.0.2 + dev: true + + registry.npmmirror.com/onetime/2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz} + name: onetime + version: 2.0.1 + engines: {node: '>=4'} + dependencies: + mimic-fn: registry.npmmirror.com/mimic-fn/1.2.0 + dev: true + + registry.npmmirror.com/onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz} + name: onetime + version: 5.1.2 + engines: {node: '>=6'} + dependencies: + mimic-fn: registry.npmmirror.com/mimic-fn/2.1.0 + dev: true + + registry.npmmirror.com/open/6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/open/-/open-6.4.0.tgz} + name: open + version: 6.4.0 + engines: {node: '>=8'} + dependencies: + is-wsl: registry.npmmirror.com/is-wsl/1.1.0 + dev: true + + registry.npmmirror.com/opener/1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz} + name: opener + version: 1.5.2 + hasBin: true + dev: true + + registry.npmmirror.com/opn/5.5.0: + resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz} + name: opn + version: 5.5.0 + engines: {node: '>=4'} + dependencies: + is-wsl: registry.npmmirror.com/is-wsl/1.1.0 + dev: true + + registry.npmmirror.com/optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz} + name: optionator + version: 0.8.3 + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: registry.npmmirror.com/deep-is/0.1.4 + fast-levenshtein: registry.npmmirror.com/fast-levenshtein/2.0.6 + levn: registry.npmmirror.com/levn/0.3.0 + prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2 + type-check: registry.npmmirror.com/type-check/0.3.2 + word-wrap: registry.npmmirror.com/word-wrap/1.2.3 + dev: true + + registry.npmmirror.com/ora/3.4.0: + resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz} + name: ora + version: 3.4.0 + engines: {node: '>=6'} + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + cli-cursor: registry.npmmirror.com/cli-cursor/2.1.0 + cli-spinners: registry.npmmirror.com/cli-spinners/2.6.1 + log-symbols: registry.npmmirror.com/log-symbols/2.2.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + wcwidth: registry.npmmirror.com/wcwidth/1.0.1 + dev: true + + registry.npmmirror.com/original/1.0.2: + resolution: {integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/original/-/original-1.0.2.tgz} + name: original + version: 1.0.2 + dependencies: + url-parse: registry.npmmirror.com/url-parse/1.5.4 + dev: true + + registry.npmmirror.com/os-browserify/0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz} + name: os-browserify + version: 0.3.0 + dev: true + + registry.npmmirror.com/os-homedir/1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/os-homedir/-/os-homedir-1.0.2.tgz} + name: os-homedir + version: 1.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/os-locale/1.4.0: + resolution: {integrity: sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/os-locale/download/os-locale-1.4.0.tgz} + name: os-locale + version: 1.4.0 + engines: {node: '>=0.10.0'} + dependencies: + lcid: registry.nlark.com/lcid/1.0.0 + dev: true + + registry.npmmirror.com/os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz} + name: os-tmpdir + version: 1.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/osenv/0.1.5: + resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/osenv/-/osenv-0.1.5.tgz} + name: osenv + version: 0.1.5 + dependencies: + os-homedir: registry.npmmirror.com/os-homedir/1.0.2 + os-tmpdir: registry.npmmirror.com/os-tmpdir/1.0.2 + dev: true + + registry.npmmirror.com/p-each-series/1.0.0: + resolution: {integrity: sha512-J/e9xiZZQNrt+958FFzJ+auItsBGq+UrQ7nE89AUP7UOTtjHnkISANXLdayhVzh538UnLMCSlf13lFfRIAKQOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-each-series/-/p-each-series-1.0.0.tgz} + name: p-each-series + version: 1.0.0 + engines: {node: '>=4'} + dependencies: + p-reduce: registry.npmmirror.com/p-reduce/1.0.0 + dev: true + + registry.npmmirror.com/p-finally/1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz} + name: p-finally + version: 1.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/p-finally/2.0.1: + resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-finally/-/p-finally-2.0.1.tgz} + name: p-finally + version: 2.0.1 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz} + name: p-limit + version: 2.3.0 + engines: {node: '>=6'} + dependencies: + p-try: registry.npmmirror.com/p-try/2.2.0 + dev: true + + registry.npmmirror.com/p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz} + name: p-locate + version: 3.0.0 + engines: {node: '>=6'} + dependencies: + p-limit: registry.npmmirror.com/p-limit/2.3.0 + dev: true + + registry.npmmirror.com/p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz} + name: p-locate + version: 4.1.0 + engines: {node: '>=8'} + dependencies: + p-limit: registry.npmmirror.com/p-limit/2.3.0 + dev: true + + registry.npmmirror.com/p-map/2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz} + name: p-map + version: 2.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/p-map/3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-map/-/p-map-3.0.0.tgz} + name: p-map + version: 3.0.0 + engines: {node: '>=8'} + dependencies: + aggregate-error: registry.npmmirror.com/aggregate-error/3.1.0 + dev: true + + registry.npmmirror.com/p-reduce/1.0.0: + resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-reduce/-/p-reduce-1.0.0.tgz} + name: p-reduce + version: 1.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/p-retry/3.0.1: + resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz} + name: p-retry + version: 3.0.1 + engines: {node: '>=6'} + dependencies: + retry: registry.npmmirror.com/retry/0.12.0 + dev: true + + registry.npmmirror.com/p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz} + name: p-try + version: 2.2.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz} + name: pako + version: 1.0.11 + dev: true + + registry.npmmirror.com/parallel-transform/1.2.0: + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz} + name: parallel-transform + version: 1.2.0 + dependencies: + cyclist: registry.npmmirror.com/cyclist/1.0.1 + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/param-case/2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz} + name: param-case + version: 2.1.1 + dependencies: + no-case: registry.npmmirror.com/no-case/2.3.2 + dev: true + + registry.npmmirror.com/parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz} + name: parent-module + version: 1.0.1 + engines: {node: '>=6'} + dependencies: + callsites: registry.npmmirror.com/callsites/3.1.0 + dev: true + + registry.npmmirror.com/parse-asn1/5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz} + name: parse-asn1 + version: 5.1.6 + dependencies: + asn1.js: registry.npmmirror.com/asn1.js/5.4.1 + browserify-aes: registry.npmmirror.com/browserify-aes/1.2.0 + evp_bytestokey: registry.npmmirror.com/evp_bytestokey/1.0.3 + pbkdf2: registry.npmmirror.com/pbkdf2/3.1.2 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/parse-json/2.2.0: + resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz} + name: parse-json + version: 2.2.0 + engines: {node: '>=0.10.0'} + dependencies: + error-ex: registry.npmmirror.com/error-ex/1.3.2 + dev: true + + registry.npmmirror.com/parse-json/4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz} + name: parse-json + version: 4.0.0 + engines: {node: '>=4'} + dependencies: + error-ex: registry.npmmirror.com/error-ex/1.3.2 + json-parse-better-errors: registry.npmmirror.com/json-parse-better-errors/1.0.2 + dev: true + + registry.npmmirror.com/parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz} + name: parse-json + version: 5.2.0 + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + error-ex: registry.npmmirror.com/error-ex/1.3.2 + json-parse-even-better-errors: registry.npmmirror.com/json-parse-even-better-errors/2.3.1 + lines-and-columns: registry.npmmirror.com/lines-and-columns/1.2.4 + dev: true + + registry.npmmirror.com/parse-node-version/1.0.1: + resolution: {integrity: sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-node-version/download/parse-node-version-1.0.1.tgz} + name: parse-node-version + version: 1.0.1 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz} + name: parse5-htmlparser2-tree-adapter + version: 6.0.1 + dependencies: + parse5: registry.npmmirror.com/parse5/6.0.1 + dev: true + + registry.npmmirror.com/parse5/4.0.0: + resolution: {integrity: sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-4.0.0.tgz} + name: parse5 + version: 4.0.0 + dev: true + + registry.npmmirror.com/parse5/5.1.0: + resolution: {integrity: sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-5.1.0.tgz} + name: parse5 + version: 5.1.0 + dev: true + + registry.npmmirror.com/parse5/5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz} + name: parse5 + version: 5.1.1 + dev: true + + registry.npmmirror.com/parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz} + name: parse5 + version: 6.0.1 + dev: true + + registry.npmmirror.com/parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz} + name: parseurl + version: 1.3.3 + engines: {node: '>= 0.8'} + dev: true + + registry.npmmirror.com/pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz} + name: pascalcase + version: 0.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/path-dirname/1.0.2: + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz} + name: path-dirname + version: 1.0.2 + dev: true + + registry.npmmirror.com/path-exists/2.1.0: + resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz} + name: path-exists + version: 2.1.0 + engines: {node: '>=0.10.0'} + dependencies: + pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1 + dev: true + + registry.npmmirror.com/path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz} + name: path-exists + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz} + name: path-exists + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz} + name: path-is-absolute + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/path-is-inside/1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz} + name: path-is-inside + version: 1.0.2 + dev: true + + registry.npmmirror.com/path-key/2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz} + name: path-key + version: 2.0.1 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz} + name: path-key + version: 3.1.1 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} + name: path-parse + version: 1.0.7 + dev: true + + registry.npmmirror.com/path-to-regexp/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz} + name: path-to-regexp + version: 0.1.7 + dev: true + + registry.npmmirror.com/path-to-regexp/6.2.0: + resolution: {integrity: sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz} + name: path-to-regexp + version: 6.2.0 + dev: false + + registry.npmmirror.com/path-type/1.1.0: + resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-1.1.0.tgz} + name: path-type + version: 1.1.0 + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + pify: registry.npmmirror.com/pify/2.3.0 + pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1 + dev: true + + registry.npmmirror.com/path-type/3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz} + name: path-type + version: 3.0.0 + engines: {node: '>=4'} + dependencies: + pify: registry.npmmirror.com/pify/3.0.0 + dev: true + + registry.npmmirror.com/path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz} + name: path-type + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/pbkdf2/3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz} + name: pbkdf2 + version: 3.1.2 + engines: {node: '>=0.12'} + dependencies: + create-hash: registry.npmmirror.com/create-hash/1.2.0 + create-hmac: registry.npmmirror.com/create-hmac/1.1.7 + ripemd160: registry.npmmirror.com/ripemd160/2.0.2 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + sha.js: registry.npmmirror.com/sha.js/2.4.11 + dev: true + + registry.npmmirror.com/performance-now/2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz} + name: performance-now + version: 2.1.0 + dev: true + + registry.npmmirror.com/picocolors/0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz} + name: picocolors + version: 0.2.1 + dev: true + + registry.npmmirror.com/picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz} + name: picocolors + version: 1.0.0 + + registry.npmmirror.com/picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz} + name: picomatch + version: 2.3.1 + engines: {node: '>=8.6'} + dev: true + + registry.npmmirror.com/pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz} + name: pify + version: 2.3.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/pify/3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz} + name: pify + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/pify/4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz} + name: pify + version: 4.0.1 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/pinkie-promise/2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz} + name: pinkie-promise + version: 2.0.1 + engines: {node: '>=0.10.0'} + dependencies: + pinkie: registry.npmmirror.com/pinkie/2.0.4 + dev: true + + registry.npmmirror.com/pinkie/2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz} + name: pinkie + version: 2.0.4 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/pirates/4.0.4: + resolution: {integrity: sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pirates/-/pirates-4.0.4.tgz} + name: pirates + version: 4.0.4 + engines: {node: '>= 6'} + dev: true + + registry.npmmirror.com/pkg-dir/1.0.0: + resolution: {integrity: sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-1.0.0.tgz} + name: pkg-dir + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + find-up: registry.npmmirror.com/find-up/1.1.2 + dev: true + + registry.npmmirror.com/pkg-dir/3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz} + name: pkg-dir + version: 3.0.0 + engines: {node: '>=6'} + dependencies: + find-up: registry.npmmirror.com/find-up/3.0.0 + dev: true + + registry.npmmirror.com/pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz} + name: pkg-dir + version: 4.2.0 + engines: {node: '>=8'} + dependencies: + find-up: registry.npmmirror.com/find-up/4.1.0 + dev: true + + registry.npmmirror.com/please-upgrade-node/3.2.0: + resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz} + name: please-upgrade-node + version: 3.2.0 + dependencies: + semver-compare: registry.npmmirror.com/semver-compare/1.0.0 + dev: true + + registry.npmmirror.com/pn/1.1.0: + resolution: {integrity: sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pn/-/pn-1.1.0.tgz} + name: pn + version: 1.1.0 + dev: true + + registry.npmmirror.com/pnp-webpack-plugin/1.7.0_typescript@4.1.6: + resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz} + id: registry.npmmirror.com/pnp-webpack-plugin/1.7.0 + name: pnp-webpack-plugin + version: 1.7.0 + engines: {node: '>=6'} + dependencies: + ts-pnp: registry.npmmirror.com/ts-pnp/1.2.0_typescript@4.1.6 + transitivePeerDependencies: + - typescript + dev: true + + registry.npmmirror.com/portfinder/1.0.28: + resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/portfinder/-/portfinder-1.0.28.tgz} + name: portfinder + version: 1.0.28 + engines: {node: '>= 0.12.0'} + dependencies: + async: registry.npmmirror.com/async/2.6.3 + debug: registry.npmmirror.com/debug/3.2.7 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + dev: true + + registry.npmmirror.com/posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz} + name: posix-character-classes + version: 0.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/postcss-calc/7.0.5: + resolution: {integrity: sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz} + name: postcss-calc + version: 7.0.5 + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.8 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0 + dev: true + + registry.npmmirror.com/postcss-colormin/4.0.3: + resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz} + name: postcss-colormin + version: 4.0.3 + engines: {node: '>=6.9.0'} + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + color: registry.npmmirror.com/color/3.2.1 + has: registry.npmmirror.com/has/1.0.3 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-convert-values/4.0.1: + resolution: {integrity: sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz} + name: postcss-convert-values + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-discard-comments/4.0.2: + resolution: {integrity: sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz} + name: postcss-discard-comments + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-discard-duplicates/4.0.2: + resolution: {integrity: sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz} + name: postcss-discard-duplicates + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-discard-empty/4.0.1: + resolution: {integrity: sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz} + name: postcss-discard-empty + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-discard-overridden/4.0.1: + resolution: {integrity: sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz} + name: postcss-discard-overridden + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-load-config/2.1.2: + resolution: {integrity: sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz} + name: postcss-load-config + version: 2.1.2 + engines: {node: '>= 4'} + dependencies: + cosmiconfig: registry.npmmirror.com/cosmiconfig/5.2.1 + import-cwd: registry.npmmirror.com/import-cwd/2.1.0 + dev: true + + registry.npmmirror.com/postcss-loader/3.0.0: + resolution: {integrity: sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz} + name: postcss-loader + version: 3.0.0 + engines: {node: '>= 6'} + dependencies: + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-load-config: registry.npmmirror.com/postcss-load-config/2.1.2 + schema-utils: registry.npmmirror.com/schema-utils/1.0.0 + dev: true + + registry.npmmirror.com/postcss-merge-longhand/4.0.11: + resolution: {integrity: sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz} + name: postcss-merge-longhand + version: 4.0.11 + engines: {node: '>=6.9.0'} + dependencies: + css-color-names: registry.npmmirror.com/css-color-names/0.0.4 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + stylehacks: registry.npmmirror.com/stylehacks/4.0.3 + dev: true + + registry.npmmirror.com/postcss-merge-rules/4.0.3: + resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz} + name: postcss-merge-rules + version: 4.0.3 + engines: {node: '>=6.9.0'} + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + caniuse-api: registry.npmmirror.com/caniuse-api/3.0.0 + cssnano-util-same-parent: registry.npmmirror.com/cssnano-util-same-parent/4.0.1 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/3.1.2 + vendors: registry.npmmirror.com/vendors/1.0.4 + dev: true + + registry.npmmirror.com/postcss-minify-font-values/4.0.2: + resolution: {integrity: sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz} + name: postcss-minify-font-values + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-minify-gradients/4.0.2: + resolution: {integrity: sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz} + name: postcss-minify-gradients + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0 + is-color-stop: registry.npmmirror.com/is-color-stop/1.1.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-minify-params/4.0.2: + resolution: {integrity: sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz} + name: postcss-minify-params + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + alphanum-sort: registry.npmmirror.com/alphanum-sort/1.0.2 + browserslist: registry.npmmirror.com/browserslist/4.19.1 + cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + uniqs: registry.npmmirror.com/uniqs/2.0.0 + dev: true + + registry.npmmirror.com/postcss-minify-selectors/4.0.2: + resolution: {integrity: sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz} + name: postcss-minify-selectors + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + alphanum-sort: registry.npmmirror.com/alphanum-sort/1.0.2 + has: registry.npmmirror.com/has/1.0.3 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/3.1.2 + dev: true + + registry.npmmirror.com/postcss-modules-extract-imports/2.0.0: + resolution: {integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz} + name: postcss-modules-extract-imports + version: 2.0.0 + engines: {node: '>= 6'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-modules-local-by-default/3.0.3: + resolution: {integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz} + name: postcss-modules-local-by-default + version: 3.0.3 + engines: {node: '>= 6'} + dependencies: + icss-utils: registry.npmmirror.com/icss-utils/4.1.1 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.8 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0 + dev: true + + registry.npmmirror.com/postcss-modules-scope/2.2.0: + resolution: {integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz} + name: postcss-modules-scope + version: 2.2.0 + engines: {node: '>= 6'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.8 + dev: true + + registry.npmmirror.com/postcss-modules-values/3.0.0: + resolution: {integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz} + name: postcss-modules-values + version: 3.0.0 + dependencies: + icss-utils: registry.npmmirror.com/icss-utils/4.1.1 + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-normalize-charset/4.0.1: + resolution: {integrity: sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz} + name: postcss-normalize-charset + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-normalize-display-values/4.0.2: + resolution: {integrity: sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz} + name: postcss-normalize-display-values + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-normalize-positions/4.0.2: + resolution: {integrity: sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz} + name: postcss-normalize-positions + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0 + has: registry.npmmirror.com/has/1.0.3 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-normalize-repeat-style/4.0.2: + resolution: {integrity: sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz} + name: postcss-normalize-repeat-style + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0 + cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-normalize-string/4.0.2: + resolution: {integrity: sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz} + name: postcss-normalize-string + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + has: registry.npmmirror.com/has/1.0.3 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-normalize-timing-functions/4.0.2: + resolution: {integrity: sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz} + name: postcss-normalize-timing-functions + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-normalize-unicode/4.0.1: + resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz} + name: postcss-normalize-unicode + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-normalize-url/4.0.1: + resolution: {integrity: sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz} + name: postcss-normalize-url + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + is-absolute-url: registry.npmmirror.com/is-absolute-url/2.1.0 + normalize-url: registry.npmmirror.com/normalize-url/3.3.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-normalize-whitespace/4.0.2: + resolution: {integrity: sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz} + name: postcss-normalize-whitespace + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-ordered-values/4.1.2: + resolution: {integrity: sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz} + name: postcss-ordered-values + version: 4.1.2 + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: registry.npmmirror.com/cssnano-util-get-arguments/4.0.0 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-prefix-selector/1.14.0_postcss@5.2.18: + resolution: {integrity: sha512-8d5fiBQZWMtGWH/7ewEeo6RnBNyT2kLD5wTIfV2oHYqH4hjiofg/rP5X3SUwnqOINzE4mM/K/UOAiNrIaKzd4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-prefix-selector/-/postcss-prefix-selector-1.14.0.tgz} + id: registry.npmmirror.com/postcss-prefix-selector/1.14.0 + name: postcss-prefix-selector + version: 1.14.0 + peerDependencies: + postcss: 7.x || 8.x + dependencies: + postcss: registry.npmmirror.com/postcss/5.2.18 + dev: true + + registry.npmmirror.com/postcss-reduce-initial/4.0.3: + resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz} + name: postcss-reduce-initial + version: 4.0.3 + engines: {node: '>=6.9.0'} + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + caniuse-api: registry.npmmirror.com/caniuse-api/3.0.0 + has: registry.npmmirror.com/has/1.0.3 + postcss: registry.npmmirror.com/postcss/7.0.39 + dev: true + + registry.npmmirror.com/postcss-reduce-transforms/4.0.2: + resolution: {integrity: sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz} + name: postcss-reduce-transforms + version: 4.0.2 + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-match: registry.npmmirror.com/cssnano-util-get-match/4.0.0 + has: registry.npmmirror.com/has/1.0.3 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + dev: true + + registry.npmmirror.com/postcss-selector-parser/3.1.2: + resolution: {integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz} + name: postcss-selector-parser + version: 3.1.2 + engines: {node: '>=8'} + dependencies: + dot-prop: registry.npmmirror.com/dot-prop/5.3.0 + indexes-of: registry.npmmirror.com/indexes-of/1.0.1 + uniq: registry.npmmirror.com/uniq/1.0.1 + dev: true + + registry.npmmirror.com/postcss-selector-parser/6.0.8: + resolution: {integrity: sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz} + name: postcss-selector-parser + version: 6.0.8 + engines: {node: '>=4'} + dependencies: + cssesc: registry.npmmirror.com/cssesc/3.0.0 + util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2 + dev: true + + registry.npmmirror.com/postcss-svgo/4.0.3: + resolution: {integrity: sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz} + name: postcss-svgo + version: 4.0.3 + engines: {node: '>=6.9.0'} + dependencies: + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-value-parser: registry.npmmirror.com/postcss-value-parser/3.3.1 + svgo: registry.npmmirror.com/svgo/1.3.2 + dev: true + + registry.npmmirror.com/postcss-unique-selectors/4.0.1: + resolution: {integrity: sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz} + name: postcss-unique-selectors + version: 4.0.1 + engines: {node: '>=6.9.0'} + dependencies: + alphanum-sort: registry.npmmirror.com/alphanum-sort/1.0.2 + postcss: registry.npmmirror.com/postcss/7.0.39 + uniqs: registry.npmmirror.com/uniqs/2.0.0 + dev: true + + registry.npmmirror.com/postcss-value-parser/3.3.1: + resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz} + name: postcss-value-parser + version: 3.3.1 + dev: true + + registry.npmmirror.com/postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} + name: postcss-value-parser + version: 4.2.0 + dev: true + + registry.npmmirror.com/postcss/5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz} + name: postcss + version: 5.2.18 + engines: {node: '>=0.12'} + dependencies: + chalk: registry.npmmirror.com/chalk/1.1.3 + js-base64: registry.npmmirror.com/js-base64/2.6.4 + source-map: registry.npmmirror.com/source-map/0.5.7 + supports-color: registry.npmmirror.com/supports-color/3.2.3 + dev: true + + registry.npmmirror.com/postcss/7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz} + name: postcss + version: 7.0.39 + engines: {node: '>=6.0.0'} + dependencies: + picocolors: registry.npmmirror.com/picocolors/0.2.1 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/postcss/8.4.5: + resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.5.tgz} + name: postcss + version: 8.4.5 + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: registry.npmmirror.com/nanoid/3.1.30 + picocolors: registry.npmmirror.com/picocolors/1.0.0 + source-map-js: registry.npmmirror.com/source-map-js/1.0.1 + + registry.npmmirror.com/posthtml-parser/0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz} + name: posthtml-parser + version: 0.2.1 + dependencies: + htmlparser2: registry.npmmirror.com/htmlparser2/3.10.1 + isobject: registry.npmmirror.com/isobject/2.1.0 + dev: true + + registry.npmmirror.com/posthtml-rename-id/1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz} + name: posthtml-rename-id + version: 1.0.12 + dependencies: + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 + dev: true + + registry.npmmirror.com/posthtml-render/1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-render/-/posthtml-render-1.4.0.tgz} + name: posthtml-render + version: 1.4.0 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/posthtml-svg-mode/1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz} + name: posthtml-svg-mode + version: 1.0.3 + dependencies: + merge-options: registry.nlark.com/merge-options/1.0.1 + posthtml: registry.npmmirror.com/posthtml/0.9.2 + posthtml-parser: registry.npmmirror.com/posthtml-parser/0.2.1 + posthtml-render: registry.npmmirror.com/posthtml-render/1.4.0 + dev: true + + registry.npmmirror.com/posthtml/0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml/-/posthtml-0.9.2.tgz} + name: posthtml + version: 0.9.2 + engines: {node: '>=0.10.0'} + dependencies: + posthtml-parser: registry.npmmirror.com/posthtml-parser/0.2.1 + posthtml-render: registry.npmmirror.com/posthtml-render/1.4.0 + dev: true + + registry.npmmirror.com/prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz} + name: prelude-ls + version: 1.1.2 + engines: {node: '>= 0.8.0'} + dev: true + + registry.npmmirror.com/prepend-http/1.0.4: + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz} + name: prepend-http + version: 1.0.4 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/prettier/2.5.1: + resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier/-/prettier-2.5.1.tgz} + name: prettier + version: 2.5.1 + engines: {node: '>=10.13.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/pretty-error/2.1.2: + resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz} + name: pretty-error + version: 2.1.2 + dependencies: + lodash: registry.npmmirror.com/lodash/4.17.21 + renderkid: registry.npmmirror.com/renderkid/2.0.7 + dev: true + + registry.npmmirror.com/pretty-format/24.9.0: + resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-24.9.0.tgz} + name: pretty-format + version: 24.9.0 + engines: {node: '>= 6'} + dependencies: + '@jest/types': registry.npmmirror.com/@jest/types/24.9.0 + ansi-regex: registry.npmmirror.com/ansi-regex/4.1.0 + ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 + react-is: registry.npmmirror.com/react-is/16.13.1 + dev: true + + registry.npmmirror.com/pretty/2.0.0: + resolution: {integrity: sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty/download/pretty-2.0.0.tgz} + name: pretty + version: 2.0.0 + engines: {node: '>=0.10.0'} + dependencies: + condense-newlines: registry.npmmirror.com/condense-newlines/0.2.1 + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + js-beautify: registry.npmmirror.com/js-beautify/1.14.0 + dev: true + + registry.npmmirror.com/process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz} + name: process-nextick-args + version: 2.0.1 + dev: true + + registry.npmmirror.com/process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/process/-/process-0.11.10.tgz} + name: process + version: 0.11.10 + engines: {node: '>= 0.6.0'} + dev: true + + registry.npmmirror.com/progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz} + name: progress + version: 2.0.3 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmmirror.com/promise-inflight/1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz} + name: promise-inflight + version: 1.0.1 + dev: true + + registry.npmmirror.com/prompts/2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz} + name: prompts + version: 2.4.2 + engines: {node: '>= 6'} + dependencies: + kleur: registry.npmmirror.com/kleur/3.0.3 + sisteransi: registry.npmmirror.com/sisteransi/1.0.5 + dev: true + + registry.npmmirror.com/proto-list/1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz} + name: proto-list + version: 1.2.4 + dev: true + + registry.npmmirror.com/proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz} + name: proxy-addr + version: 2.0.7 + engines: {node: '>= 0.10'} + dependencies: + forwarded: registry.nlark.com/forwarded/0.2.0 + ipaddr.js: registry.npmmirror.com/ipaddr.js/1.9.1 + dev: true + + registry.npmmirror.com/prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz} + name: prr + version: 1.0.1 + dev: true + + registry.npmmirror.com/pseudomap/1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz} + name: pseudomap + version: 1.0.2 + dev: true + + registry.npmmirror.com/psl/1.8.0: + resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/psl/-/psl-1.8.0.tgz} + name: psl + version: 1.8.0 + dev: true + + registry.npmmirror.com/public-encrypt/4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz} + name: public-encrypt + version: 4.0.3 + dependencies: + bn.js: registry.npmmirror.com/bn.js/4.12.0 + browserify-rsa: registry.npmmirror.com/browserify-rsa/4.1.0 + create-hash: registry.npmmirror.com/create-hash/1.2.0 + parse-asn1: registry.npmmirror.com/parse-asn1/5.1.6 + randombytes: registry.npmmirror.com/randombytes/2.1.0 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/pump/2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz} + name: pump + version: 2.0.1 + dependencies: + end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4 + once: registry.npmmirror.com/once/1.4.0 + dev: true + + registry.npmmirror.com/pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz} + name: pump + version: 3.0.0 + dependencies: + end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4 + once: registry.npmmirror.com/once/1.4.0 + dev: true + + registry.npmmirror.com/pumpify/1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz} + name: pumpify + version: 1.5.1 + dependencies: + duplexify: registry.npmmirror.com/duplexify/3.7.1 + inherits: registry.npmmirror.com/inherits/2.0.4 + pump: registry.npmmirror.com/pump/2.0.1 + dev: true + + registry.npmmirror.com/punycode/1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz} + name: punycode + version: 1.3.2 + dev: true + + registry.npmmirror.com/punycode/1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz} + name: punycode + version: 1.4.1 + dev: true + + registry.npmmirror.com/punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz} + name: punycode + version: 2.1.1 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/q/1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/q/-/q-1.5.1.tgz} + name: q + version: 1.5.1 + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: true + + registry.npmmirror.com/qiankun/2.6.3: + resolution: {integrity: sha512-h1NIokwjdt508HNPcWBdzoYFDJvhbpUUlFSa5dDkpJYVCl55iqqHgdyi1YayinmLmr/9s/zD+WQv+A2mbzkMQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qiankun/download/qiankun-2.6.3.tgz} + name: qiankun + version: 2.6.3 + dependencies: + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.16.7 + import-html-entry: registry.nlark.com/import-html-entry/1.11.1 + lodash: registry.npmmirror.com/lodash/4.17.21 + single-spa: registry.npmmirror.com/single-spa/5.9.3 + tslib: registry.npmmirror.com/tslib/1.14.1 + dev: false + + registry.npmmirror.com/qs/6.5.2: + resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qs/-/qs-6.5.2.tgz} + name: qs + version: 6.5.2 + engines: {node: '>=0.6'} + dev: true + + registry.npmmirror.com/qs/6.9.6: + resolution: {integrity: sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qs/-/qs-6.9.6.tgz} + name: qs + version: 6.9.6 + engines: {node: '>=0.6'} + dev: true + + registry.npmmirror.com/query-string/4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz} + name: query-string + version: 4.3.4 + engines: {node: '>=0.10.0'} + dependencies: + object-assign: registry.npmmirror.com/object-assign/4.1.1 + strict-uri-encode: registry.npmmirror.com/strict-uri-encode/1.1.0 + dev: true + + registry.npmmirror.com/querystring-es3/0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz} + name: querystring-es3 + version: 0.2.1 + engines: {node: '>=0.4.x'} + dev: true + + registry.npmmirror.com/querystring/0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz} + name: querystring + version: 0.2.0 + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + + registry.npmmirror.com/querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz} + name: querystringify + version: 2.2.0 + dev: true + + registry.npmmirror.com/queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz} + name: queue-microtask + version: 1.2.3 + dev: true + + registry.npmmirror.com/randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz} + name: randombytes + version: 2.1.0 + dependencies: + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/randomfill/1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz} + name: randomfill + version: 1.0.4 + dependencies: + randombytes: registry.npmmirror.com/randombytes/2.1.0 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz} + name: range-parser + version: 1.2.1 + engines: {node: '>= 0.6'} + dev: true + + registry.npmmirror.com/raw-body/2.4.2: + resolution: {integrity: sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/raw-body/download/raw-body-2.4.2.tgz?cache=0&sync_timestamp=1637116653600&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fraw-body%2Fdownload%2Fraw-body-2.4.2.tgz} + name: raw-body + version: 2.4.2 + engines: {node: '>= 0.8'} + dependencies: + bytes: registry.npmmirror.com/bytes/3.1.1 + http-errors: registry.npmmirror.com/http-errors/1.8.1 + iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24 + unpipe: registry.npmmirror.com/unpipe/1.0.0 + dev: true + + registry.npmmirror.com/react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz} + name: react-is + version: 16.13.1 + dev: true + + registry.npmmirror.com/read-pkg-up/1.0.1: + resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz} + name: read-pkg-up + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + find-up: registry.npmmirror.com/find-up/1.1.2 + read-pkg: registry.npmmirror.com/read-pkg/1.1.0 + dev: true + + registry.npmmirror.com/read-pkg-up/4.0.0: + resolution: {integrity: sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz} + name: read-pkg-up + version: 4.0.0 + engines: {node: '>=6'} + dependencies: + find-up: registry.npmmirror.com/find-up/3.0.0 + read-pkg: registry.npmmirror.com/read-pkg/3.0.0 + dev: true + + registry.npmmirror.com/read-pkg/1.1.0: + resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-1.1.0.tgz} + name: read-pkg + version: 1.1.0 + engines: {node: '>=0.10.0'} + dependencies: + load-json-file: registry.npmmirror.com/load-json-file/1.1.0 + normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0 + path-type: registry.npmmirror.com/path-type/1.1.0 + dev: true + + registry.npmmirror.com/read-pkg/3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz} + name: read-pkg + version: 3.0.0 + engines: {node: '>=4'} + dependencies: + load-json-file: registry.npmmirror.com/load-json-file/4.0.0 + normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0 + path-type: registry.npmmirror.com/path-type/3.0.0 + dev: true + + registry.npmmirror.com/read-pkg/5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz} + name: read-pkg + version: 5.2.0 + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': registry.npmmirror.com/@types/normalize-package-data/2.4.1 + normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0 + parse-json: registry.npmmirror.com/parse-json/5.2.0 + type-fest: registry.npmmirror.com/type-fest/0.6.0 + dev: true + + registry.npmmirror.com/readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz} + name: readable-stream + version: 2.3.7 + dependencies: + core-util-is: registry.npmmirror.com/core-util-is/1.0.3 + inherits: registry.npmmirror.com/inherits/2.0.4 + isarray: registry.npmmirror.com/isarray/1.0.0 + process-nextick-args: registry.npmmirror.com/process-nextick-args/2.0.1 + safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2 + string_decoder: registry.npmmirror.com/string_decoder/1.1.1 + util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2 + dev: true + + registry.npmmirror.com/readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz} + name: readable-stream + version: 3.6.0 + engines: {node: '>= 6'} + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + string_decoder: registry.npmmirror.com/string_decoder/1.3.0 + util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2 + dev: true + + registry.npmmirror.com/readdirp/2.2.1: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz} + name: readdirp + version: 2.2.1 + engines: {node: '>=0.10'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} + name: readdirp + version: 3.6.0 + engines: {node: '>=8.10.0'} + dependencies: + picomatch: registry.npmmirror.com/picomatch/2.3.1 + dev: true + + registry.npmmirror.com/realpath-native/1.1.0: + resolution: {integrity: sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/realpath-native/-/realpath-native-1.1.0.tgz} + name: realpath-native + version: 1.1.0 + engines: {node: '>=4'} + dependencies: + util.promisify: registry.npmmirror.com/util.promisify/1.1.1 + dev: true + + registry.npmmirror.com/redent/1.0.0: + resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/redent/-/redent-1.0.0.tgz} + name: redent + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + indent-string: registry.npmmirror.com/indent-string/2.1.0 + strip-indent: registry.npmmirror.com/strip-indent/1.0.1 + dev: true + + registry.npmmirror.com/regenerate-unicode-properties/9.0.0: + resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz} + name: regenerate-unicode-properties + version: 9.0.0 + engines: {node: '>=4'} + dependencies: + regenerate: registry.npmmirror.com/regenerate/1.4.2 + dev: true + + registry.npmmirror.com/regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz} + name: regenerate + version: 1.4.2 + dev: true + + registry.npmmirror.com/regenerator-runtime/0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz} + name: regenerator-runtime + version: 0.11.1 + dev: true + + registry.npmmirror.com/regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz} + name: regenerator-runtime + version: 0.13.9 + + registry.npmmirror.com/regenerator-transform/0.14.5: + resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz} + name: regenerator-transform + version: 0.14.5 + dependencies: + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.16.7 + dev: true + + registry.npmmirror.com/regex-not/1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz} + name: regex-not + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2 + safe-regex: registry.npmmirror.com/safe-regex/1.1.0 + dev: true + + registry.npmmirror.com/regexp.prototype.flags/1.3.1: + resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz} + name: regexp.prototype.flags + version: 1.3.1 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + dev: true + + registry.npmmirror.com/regexpp/2.0.1: + resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz} + name: regexpp + version: 2.0.1 + engines: {node: '>=6.5.0'} + dev: true + + registry.npmmirror.com/regexpu-core/4.8.0: + resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexpu-core/-/regexpu-core-4.8.0.tgz} + name: regexpu-core + version: 4.8.0 + engines: {node: '>=4'} + dependencies: + regenerate: registry.npmmirror.com/regenerate/1.4.2 + regenerate-unicode-properties: registry.npmmirror.com/regenerate-unicode-properties/9.0.0 + regjsgen: registry.npmmirror.com/regjsgen/0.5.2 + regjsparser: registry.npmmirror.com/regjsparser/0.7.0 + unicode-match-property-ecmascript: registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0 + unicode-match-property-value-ecmascript: registry.npmmirror.com/unicode-match-property-value-ecmascript/2.0.0 + dev: true + + registry.npmmirror.com/regjsgen/0.5.2: + resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regjsgen/-/regjsgen-0.5.2.tgz} + name: regjsgen + version: 0.5.2 + dev: true + + registry.npmmirror.com/regjsparser/0.7.0: + resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regjsparser/-/regjsparser-0.7.0.tgz} + name: regjsparser + version: 0.7.0 + hasBin: true + dependencies: + jsesc: registry.npmmirror.com/jsesc/0.5.0 + dev: true + + registry.npmmirror.com/relateurl/0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz} + name: relateurl + version: 0.2.7 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/remove-trailing-separator/1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz} + name: remove-trailing-separator + version: 1.1.0 + dev: true + + registry.npmmirror.com/renderkid/2.0.7: + resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz} + name: renderkid + version: 2.0.7 + dependencies: + css-select: registry.npmmirror.com/css-select/4.2.1 + dom-converter: registry.npmmirror.com/dom-converter/0.2.0 + htmlparser2: registry.npmmirror.com/htmlparser2/6.1.0 + lodash: registry.npmmirror.com/lodash/4.17.21 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + dev: true + + registry.npmmirror.com/repeat-element/1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz} + name: repeat-element + version: 1.1.4 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz} + name: repeat-string + version: 1.6.1 + engines: {node: '>=0.10'} + dev: true + + registry.npmmirror.com/repeating/2.0.1: + resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeating/-/repeating-2.0.1.tgz} + name: repeating + version: 2.0.1 + engines: {node: '>=0.10.0'} + dependencies: + is-finite: registry.npmmirror.com/is-finite/1.1.0 + dev: true + + registry.npmmirror.com/request-promise-native/1.0.9_request@2.88.2: + resolution: {integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/request-promise-native/-/request-promise-native-1.0.9.tgz} + id: registry.npmmirror.com/request-promise-native/1.0.9 + name: request-promise-native + version: 1.0.9 + engines: {node: '>=0.12.0'} + deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 + peerDependencies: + request: ^2.34 + dependencies: + request: registry.npmmirror.com/request/2.88.2 + request-promise-core: registry.nlark.com/request-promise-core/1.1.4_request@2.88.2 + stealthy-require: registry.npmmirror.com/stealthy-require/1.1.1 + tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0 + dev: true + + registry.npmmirror.com/request/2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/request/-/request-2.88.2.tgz} + name: request + version: 2.88.2 + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: registry.npmmirror.com/aws-sign2/0.7.0 + aws4: registry.npmmirror.com/aws4/1.11.0 + caseless: registry.npmmirror.com/caseless/0.12.0 + combined-stream: registry.npmmirror.com/combined-stream/1.0.8 + extend: registry.npmmirror.com/extend/3.0.2 + forever-agent: registry.npmmirror.com/forever-agent/0.6.1 + form-data: registry.npmmirror.com/form-data/2.3.3 + har-validator: registry.npmmirror.com/har-validator/5.1.5 + http-signature: registry.npmmirror.com/http-signature/1.2.0 + is-typedarray: registry.npmmirror.com/is-typedarray/1.0.0 + isstream: registry.npmmirror.com/isstream/0.1.2 + json-stringify-safe: registry.npmmirror.com/json-stringify-safe/5.0.1 + mime-types: registry.npmmirror.com/mime-types/2.1.34 + oauth-sign: registry.npmmirror.com/oauth-sign/0.9.0 + performance-now: registry.npmmirror.com/performance-now/2.1.0 + qs: registry.npmmirror.com/qs/6.5.2 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0 + tunnel-agent: registry.npmmirror.com/tunnel-agent/0.6.0 + uuid: registry.npmmirror.com/uuid/3.4.0 + dev: true + + registry.npmmirror.com/require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz} + name: require-directory + version: 2.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/require-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz} + name: require-main-filename + version: 2.0.0 + dev: true + + registry.npmmirror.com/requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz} + name: requires-port + version: 1.0.0 + dev: true + + registry.npmmirror.com/resize-observer-polyfill/1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz} + name: resize-observer-polyfill + version: 1.5.1 + dev: false + + registry.npmmirror.com/resolve-cwd/2.0.0: + resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz} + name: resolve-cwd + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + resolve-from: registry.npmmirror.com/resolve-from/3.0.0 + dev: true + + registry.npmmirror.com/resolve-from/3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz} + name: resolve-from + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz} + name: resolve-from + version: 4.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz} + name: resolve-url + version: 0.2.1 + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + registry.npmmirror.com/resolve/1.1.7: + resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.1.7.tgz} + name: resolve + version: 1.1.7 + dev: true + + registry.npmmirror.com/resolve/1.21.0: + resolution: {integrity: sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.21.0.tgz} + name: resolve + version: 1.21.0 + hasBin: true + dependencies: + is-core-module: registry.npmmirror.com/is-core-module/2.8.1 + path-parse: registry.npmmirror.com/path-parse/1.0.7 + supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0 + dev: true + + registry.npmmirror.com/restore-cursor/2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz} + name: restore-cursor + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + onetime: registry.npmmirror.com/onetime/2.0.1 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + dev: true + + registry.npmmirror.com/restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz} + name: restore-cursor + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + onetime: registry.npmmirror.com/onetime/5.1.2 + signal-exit: registry.npmmirror.com/signal-exit/3.0.6 + dev: true + + registry.npmmirror.com/ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz} + name: ret + version: 0.1.15 + engines: {node: '>=0.12'} + dev: true + + registry.npmmirror.com/retry/0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz} + name: retry + version: 0.12.0 + engines: {node: '>= 4'} + dev: true + + registry.npmmirror.com/reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz} + name: reusify + version: 1.0.4 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/rgb-regex/1.0.1: + resolution: {integrity: sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz} + name: rgb-regex + version: 1.0.1 + dev: true + + registry.npmmirror.com/rgba-regex/1.0.0: + resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz} + name: rgba-regex + version: 1.0.0 + dev: true + + registry.npmmirror.com/rimraf/2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz} + name: rimraf + version: 2.6.3 + hasBin: true + dependencies: + glob: registry.npmmirror.com/glob/7.2.0 + dev: true + + registry.npmmirror.com/rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz} + name: rimraf + version: 2.7.1 + hasBin: true + dependencies: + glob: registry.npmmirror.com/glob/7.2.0 + dev: true + + registry.npmmirror.com/rimraf/3.0.2: + resolution: {integrity: sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/download/rimraf-3.0.2.tgz} + name: rimraf + version: 3.0.2 + hasBin: true + dependencies: + glob: registry.npmmirror.com/glob/7.2.0 + dev: true + + registry.npmmirror.com/ripemd160/2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz} + name: ripemd160 + version: 2.0.2 + dependencies: + hash-base: registry.npmmirror.com/hash-base/3.1.0 + inherits: registry.npmmirror.com/inherits/2.0.4 + dev: true + + registry.npmmirror.com/rsvp/4.8.5: + resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rsvp/-/rsvp-4.8.5.tgz} + name: rsvp + version: 4.8.5 + engines: {node: 6.* || >= 7.*} + dev: true + + registry.npmmirror.com/run-async/2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz} + name: run-async + version: 2.4.1 + engines: {node: '>=0.12.0'} + dev: true + + registry.npmmirror.com/run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz} + name: run-parallel + version: 1.2.0 + dependencies: + queue-microtask: registry.npmmirror.com/queue-microtask/1.2.3 + dev: true + + registry.npmmirror.com/run-queue/1.0.3: + resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz} + name: run-queue + version: 1.0.3 + dependencies: + aproba: registry.npmmirror.com/aproba/1.2.0 + dev: true + + registry.npmmirror.com/rxjs/6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz} + name: rxjs + version: 6.6.7 + engines: {npm: '>=2.0.0'} + dependencies: + tslib: registry.npmmirror.com/tslib/1.14.1 + dev: true + + registry.npmmirror.com/safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz} + name: safe-buffer + version: 5.1.2 + dev: true + + registry.npmmirror.com/safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz} + name: safe-buffer + version: 5.2.1 + dev: true + + registry.npmmirror.com/safe-regex/1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz} + name: safe-regex + version: 1.1.0 + dependencies: + ret: registry.npmmirror.com/ret/0.1.15 + dev: true + + registry.npmmirror.com/safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz} + name: safer-buffer + version: 2.1.2 + dev: true + + registry.npmmirror.com/sane/4.1.0: + resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sane/-/sane-4.1.0.tgz} + name: sane + version: 4.1.0 + engines: {node: 6.* || 8.* || >= 10.*} + deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added + hasBin: true + dependencies: + '@cnakazawa/watch': registry.npmmirror.com/@cnakazawa/watch/1.0.4 + anymatch: registry.npmmirror.com/anymatch/2.0.0 + capture-exit: registry.npmmirror.com/capture-exit/2.0.0 + exec-sh: registry.npmmirror.com/exec-sh/0.3.6 + execa: registry.npmmirror.com/execa/1.0.0 + fb-watchman: registry.npmmirror.com/fb-watchman/2.0.1 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + minimist: registry.npmmirror.com/minimist/1.2.5 + walker: registry.npmmirror.com/walker/1.0.8 + dev: true + + registry.npmmirror.com/sass-graph/2.2.5: + resolution: {integrity: sha1-qYHIdEa4MZ2W3OBnHkh4eb0kwug=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass-graph/download/sass-graph-2.2.5.tgz} + name: sass-graph + version: 2.2.5 + hasBin: true + dependencies: + glob: registry.npmmirror.com/glob/7.2.0 + lodash: registry.npmmirror.com/lodash/4.17.21 + scss-tokenizer: registry.npmmirror.com/scss-tokenizer/0.2.3 + yargs: registry.npmmirror.com/yargs/13.3.2 + dev: true + + registry.npmmirror.com/sass-loader/8.0.2_node-sass@4.14.1+sass@1.47.0: + resolution: {integrity: sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass-loader/-/sass-loader-8.0.2.tgz} + id: registry.npmmirror.com/sass-loader/8.0.2 + name: sass-loader + version: 8.0.2 + engines: {node: '>= 8.9.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 + sass: ^1.3.0 + webpack: ^4.36.0 || ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + clone-deep: registry.npmmirror.com/clone-deep/4.0.1 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + neo-async: registry.npmmirror.com/neo-async/2.6.2 + node-sass: registry.npmmirror.com/node-sass/4.14.1 + sass: registry.npmmirror.com/sass/1.47.0 + schema-utils: registry.npmmirror.com/schema-utils/2.7.1 + semver: registry.npmmirror.com/semver/6.3.0 + dev: true + + registry.npmmirror.com/sass/1.47.0: + resolution: {integrity: sha512-GtXwvwgD7/6MLUZPnlA5/8cdRgC9SzT5kAnnJMRmEZQFRE3J56Foswig4NyyyQGsnmNvg6EUM/FP0Pe9Y2zywQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/-/sass-1.47.0.tgz} + name: sass + version: 1.47.0 + engines: {node: '>=8.9.0'} + hasBin: true + dependencies: + chokidar: registry.npmmirror.com/chokidar/3.5.2 + immutable: registry.npmmirror.com/immutable/4.0.0 + source-map-js: registry.npmmirror.com/source-map-js/1.0.1 + dev: true + + registry.npmmirror.com/sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz} + name: sax + version: 1.2.4 + dev: true + + registry.npmmirror.com/saxes/3.1.11: + resolution: {integrity: sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/saxes/-/saxes-3.1.11.tgz} + name: saxes + version: 3.1.11 + engines: {node: '>=8'} + dependencies: + xmlchars: registry.npmmirror.com/xmlchars/2.2.0 + dev: true + + registry.npmmirror.com/schema-utils/1.0.0: + resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz} + name: schema-utils + version: 1.0.0 + engines: {node: '>= 4'} + dependencies: + ajv: registry.npmmirror.com/ajv/6.12.6 + ajv-errors: registry.npmmirror.com/ajv-errors/1.0.1_ajv@6.12.6 + ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6 + dev: true + + registry.npmmirror.com/schema-utils/2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.0.tgz} + name: schema-utils + version: 2.7.0 + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.9 + ajv: registry.npmmirror.com/ajv/6.12.6 + ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6 + dev: true + optional: true + + registry.npmmirror.com/schema-utils/2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz} + name: schema-utils + version: 2.7.1 + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.9 + ajv: registry.npmmirror.com/ajv/6.12.6 + ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6 + dev: true + + registry.npmmirror.com/scroll-into-view-if-needed/2.2.29: + resolution: {integrity: sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz} + name: scroll-into-view-if-needed + version: 2.2.29 + dependencies: + compute-scroll-into-view: registry.npmmirror.com/compute-scroll-into-view/1.0.17 + dev: false + + registry.npmmirror.com/scss-tokenizer/0.2.3: + resolution: {integrity: sha512-dYE8LhncfBUar6POCxMTm0Ln+erjeczqEvCJib5/7XNkdw1FkUGgwMPY360FY0FgPWQxHWCx29Jl3oejyGLM9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz} + name: scss-tokenizer + version: 0.2.3 + dependencies: + js-base64: registry.npmmirror.com/js-base64/2.6.4 + source-map: registry.npmmirror.com/source-map/0.4.4 + dev: true + + registry.npmmirror.com/select-hose/2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz} + name: select-hose + version: 2.0.0 + dev: true + + registry.npmmirror.com/selfsigned/1.10.13: + resolution: {integrity: sha512-UmLwTKZwNmXYDAlRFhaEdgEg0dp9k5gfJXuO7uKvSqioN1M0+Mgf4V39IlVZMSuqGoCi6h5legkhNXvWy0rFSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.13.tgz} + name: selfsigned + version: 1.10.13 + dependencies: + node-forge: registry.npmmirror.com/node-forge/1.2.0 + dev: true + + registry.npmmirror.com/semver-compare/1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz} + name: semver-compare + version: 1.0.0 + dev: true + + registry.npmmirror.com/semver/5.3.0: + resolution: {integrity: sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-5.3.0.tgz} + name: semver + version: 5.3.0 + hasBin: true + dev: true + + registry.npmmirror.com/semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz} + name: semver + version: 5.7.1 + hasBin: true + dev: true + + registry.npmmirror.com/semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz} + name: semver + version: 6.3.0 + hasBin: true + dev: true + + registry.npmmirror.com/semver/7.0.0: + resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz} + name: semver + version: 7.0.0 + hasBin: true + dev: true + + registry.npmmirror.com/semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.3.5.tgz} + name: semver + version: 7.3.5 + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: registry.npmmirror.com/lru-cache/6.0.0 + dev: true + optional: true + + registry.npmmirror.com/send/0.17.2: + resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/send/download/send-0.17.2.tgz} + name: send + version: 0.17.2 + engines: {node: '>= 0.8.0'} + dependencies: + debug: registry.npmmirror.com/debug/2.6.9 + depd: registry.npmmirror.com/depd/1.1.2 + destroy: registry.npmmirror.com/destroy/1.0.4 + encodeurl: registry.npmmirror.com/encodeurl/1.0.2 + escape-html: registry.npmmirror.com/escape-html/1.0.3 + etag: registry.npmmirror.com/etag/1.8.1 + fresh: registry.nlark.com/fresh/0.5.2 + http-errors: registry.npmmirror.com/http-errors/1.8.1 + mime: registry.npmmirror.com/mime/1.6.0 + ms: registry.npmmirror.com/ms/2.1.3 + on-finished: registry.npmmirror.com/on-finished/2.3.0 + range-parser: registry.npmmirror.com/range-parser/1.2.1 + statuses: registry.npmmirror.com/statuses/1.5.0 + dev: true + + registry.npmmirror.com/serialize-javascript/4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz} + name: serialize-javascript + version: 4.0.0 + dependencies: + randombytes: registry.npmmirror.com/randombytes/2.1.0 + dev: true + + registry.npmmirror.com/serve-index/1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz} + name: serve-index + version: 1.9.1 + engines: {node: '>= 0.8.0'} + dependencies: + accepts: registry.npmmirror.com/accepts/1.3.7 + batch: registry.npmmirror.com/batch/0.6.1 + debug: registry.npmmirror.com/debug/2.6.9 + escape-html: registry.npmmirror.com/escape-html/1.0.3 + http-errors: registry.npmmirror.com/http-errors/1.6.3 + mime-types: registry.npmmirror.com/mime-types/2.1.34 + parseurl: registry.npmmirror.com/parseurl/1.3.3 + dev: true + + registry.npmmirror.com/serve-static/1.14.2: + resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serve-static/download/serve-static-1.14.2.tgz} + name: serve-static + version: 1.14.2 + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: registry.npmmirror.com/encodeurl/1.0.2 + escape-html: registry.npmmirror.com/escape-html/1.0.3 + parseurl: registry.npmmirror.com/parseurl/1.3.3 + send: registry.npmmirror.com/send/0.17.2 + dev: true + + registry.npmmirror.com/set-blocking/2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz} + name: set-blocking + version: 2.0.0 + dev: true + + registry.npmmirror.com/set-value/2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz} + name: set-value + version: 2.0.1 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + is-extendable: registry.npmmirror.com/is-extendable/0.1.1 + is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4 + split-string: registry.npmmirror.com/split-string/3.1.0 + dev: true + + registry.npmmirror.com/setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz} + name: setimmediate + version: 1.0.5 + dev: true + + registry.npmmirror.com/sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz} + name: sha.js + version: 2.4.11 + hasBin: true + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/shallow-clone/3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz} + name: shallow-clone + version: 3.0.1 + engines: {node: '>=8'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/6.0.3 + dev: true + + registry.npmmirror.com/shallow-equal/1.2.1: + resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz} + name: shallow-equal + version: 1.2.1 + dev: false + + registry.npmmirror.com/shebang-command/1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz} + name: shebang-command + version: 1.2.0 + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: registry.npmmirror.com/shebang-regex/1.0.0 + dev: true + + registry.npmmirror.com/shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz} + name: shebang-command + version: 2.0.0 + engines: {node: '>=8'} + dependencies: + shebang-regex: registry.npmmirror.com/shebang-regex/3.0.0 + dev: true + + registry.npmmirror.com/shebang-regex/1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz} + name: shebang-regex + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz} + name: shebang-regex + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/shell-quote/1.7.3: + resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.3.tgz} + name: shell-quote + version: 1.7.3 + dev: true + + registry.npmmirror.com/shellwords/0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shellwords/-/shellwords-0.1.1.tgz} + name: shellwords + version: 0.1.1 + dev: true + + registry.npmmirror.com/side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz} + name: side-channel + version: 1.0.4 + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 + object-inspect: registry.npmmirror.com/object-inspect/1.12.0 + dev: true + + registry.npmmirror.com/sigmund/1.0.1: + resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sigmund/-/sigmund-1.0.1.tgz} + name: sigmund + version: 1.0.1 + dev: true + + registry.npmmirror.com/signal-exit/3.0.6: + resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.6.tgz} + name: signal-exit + version: 3.0.6 + dev: true + + registry.npmmirror.com/simple-swizzle/0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz} + name: simple-swizzle + version: 0.2.2 + dependencies: + is-arrayish: registry.npmmirror.com/is-arrayish/0.3.2 + dev: true + + registry.npmmirror.com/single-spa/5.9.3: + resolution: {integrity: sha1-LRUcuzsnNimlsnswo7jKhH3LpMU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/single-spa/download/single-spa-5.9.3.tgz} + name: single-spa + version: 5.9.3 + dev: false + + registry.npmmirror.com/sisteransi/1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz} + name: sisteransi + version: 1.0.5 + dev: true + + registry.npmmirror.com/slash/1.0.0: + resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz} + name: slash + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/slash/2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz} + name: slash + version: 2.0.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz} + name: slash + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/slice-ansi/0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-0.0.4.tgz} + name: slice-ansi + version: 0.0.4 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/slice-ansi/2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz} + name: slice-ansi + version: 2.1.0 + engines: {node: '>=6'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 + astral-regex: registry.npmmirror.com/astral-regex/1.0.0 + is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/2.0.0 + dev: true + + registry.npmmirror.com/snapdragon-node/2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz} + name: snapdragon-node + version: 2.1.1 + engines: {node: '>=0.10.0'} + dependencies: + define-property: registry.npmmirror.com/define-property/1.0.0 + isobject: registry.npmmirror.com/isobject/3.0.1 + snapdragon-util: registry.npmmirror.com/snapdragon-util/3.0.1 + dev: true + + registry.npmmirror.com/snapdragon-util/3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz} + name: snapdragon-util + version: 3.0.1 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/3.2.2 + dev: true + + registry.npmmirror.com/snapdragon/0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz} + name: snapdragon + version: 0.8.2 + engines: {node: '>=0.10.0'} + dependencies: + base: registry.npmmirror.com/base/0.11.2 + debug: registry.npmmirror.com/debug/2.6.9 + define-property: registry.npmmirror.com/define-property/0.2.5 + extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 + map-cache: registry.npmmirror.com/map-cache/0.2.2 + source-map: registry.npmmirror.com/source-map/0.5.7 + source-map-resolve: registry.npmmirror.com/source-map-resolve/0.5.3 + use: registry.npmmirror.com/use/3.1.1 + dev: true + + registry.npmmirror.com/sockjs-client/1.5.2: + resolution: {integrity: sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.5.2.tgz} + name: sockjs-client + version: 1.5.2 + dependencies: + debug: registry.npmmirror.com/debug/3.2.7 + eventsource: registry.npmmirror.com/eventsource/1.1.0 + faye-websocket: registry.npmmirror.com/faye-websocket/0.11.4 + inherits: registry.npmmirror.com/inherits/2.0.4 + json3: registry.npmmirror.com/json3/3.3.3 + url-parse: registry.npmmirror.com/url-parse/1.5.4 + dev: true + + registry.npmmirror.com/sockjs/0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz} + name: sockjs + version: 0.3.24 + dependencies: + faye-websocket: registry.npmmirror.com/faye-websocket/0.11.4 + uuid: registry.npmmirror.com/uuid/8.3.2 + websocket-driver: registry.npmmirror.com/websocket-driver/0.7.4 + dev: true + + registry.npmmirror.com/sort-keys/1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz} + name: sort-keys + version: 1.1.2 + engines: {node: '>=0.10.0'} + dependencies: + is-plain-obj: registry.npmmirror.com/is-plain-obj/1.1.0 + dev: true + + registry.npmmirror.com/source-list-map/2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz} + name: source-list-map + version: 2.0.1 + dev: true + + registry.npmmirror.com/source-map-js/1.0.1: + resolution: {integrity: sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.1.tgz} + name: source-map-js + version: 1.0.1 + engines: {node: '>=0.10.0'} + + registry.npmmirror.com/source-map-resolve/0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz} + name: source-map-resolve + version: 0.5.3 + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: registry.npmmirror.com/atob/2.1.2 + decode-uri-component: registry.npmmirror.com/decode-uri-component/0.2.0 + resolve-url: registry.npmmirror.com/resolve-url/0.2.1 + source-map-url: registry.npmmirror.com/source-map-url/0.4.1 + urix: registry.npmmirror.com/urix/0.1.0 + dev: true + + registry.npmmirror.com/source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz} + name: source-map-support + version: 0.5.21 + dependencies: + buffer-from: registry.npmmirror.com/buffer-from/1.1.2 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/source-map-url/0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz} + name: source-map-url + version: 0.4.1 + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + registry.npmmirror.com/source-map/0.4.4: + resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.4.4.tgz} + name: source-map + version: 0.4.4 + engines: {node: '>=0.8.0'} + dependencies: + amdefine: registry.npmmirror.com/amdefine/1.0.1 + dev: true + + registry.npmmirror.com/source-map/0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.6.tgz} + name: source-map + version: 0.5.6 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz} + name: source-map + version: 0.5.7 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} + name: source-map + version: 0.6.1 + engines: {node: '>=0.10.0'} + + registry.npmmirror.com/source-map/0.7.3: + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.7.3.tgz} + name: source-map + version: 0.7.3 + engines: {node: '>= 8'} + dev: true + + registry.npmmirror.com/sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz} + name: sourcemap-codec + version: 1.4.8 + + registry.npmmirror.com/spdx-correct/3.1.1: + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz} + name: spdx-correct + version: 3.1.1 + dependencies: + spdx-expression-parse: registry.npmmirror.com/spdx-expression-parse/3.0.1 + spdx-license-ids: registry.npmmirror.com/spdx-license-ids/3.0.11 + dev: true + + registry.npmmirror.com/spdx-exceptions/2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz} + name: spdx-exceptions + version: 2.3.0 + dev: true + + registry.npmmirror.com/spdx-expression-parse/3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz} + name: spdx-expression-parse + version: 3.0.1 + dependencies: + spdx-exceptions: registry.npmmirror.com/spdx-exceptions/2.3.0 + spdx-license-ids: registry.npmmirror.com/spdx-license-ids/3.0.11 + dev: true + + registry.npmmirror.com/spdx-license-ids/3.0.11: + resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz} + name: spdx-license-ids + version: 3.0.11 + dev: true + + registry.npmmirror.com/spdy-transport/3.0.0_supports-color@6.1.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz} + id: registry.npmmirror.com/spdy-transport/3.0.0 + name: spdy-transport + version: 3.0.0 + dependencies: + debug: registry.npmmirror.com/debug/4.3.3_supports-color@6.1.0 + detect-node: registry.npmmirror.com/detect-node/2.1.0 + hpack.js: registry.npmmirror.com/hpack.js/2.1.6 + obuf: registry.npmmirror.com/obuf/1.1.2 + readable-stream: registry.npmmirror.com/readable-stream/3.6.0 + wbuf: registry.npmmirror.com/wbuf/1.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/spdy/4.0.2_supports-color@6.1.0: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz} + id: registry.npmmirror.com/spdy/4.0.2 + name: spdy + version: 4.0.2 + engines: {node: '>=6.0.0'} + dependencies: + debug: registry.npmmirror.com/debug/4.3.3_supports-color@6.1.0 + handle-thing: registry.npmmirror.com/handle-thing/2.0.1 + http-deceiver: registry.npmmirror.com/http-deceiver/1.2.7 + select-hose: registry.npmmirror.com/select-hose/2.0.0 + spdy-transport: registry.npmmirror.com/spdy-transport/3.0.0_supports-color@6.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/split-string/3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz} + name: split-string + version: 3.1.0 + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2 + dev: true + + registry.npmmirror.com/sprintf-js/1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz} + name: sprintf-js + version: 1.0.3 + dev: true + + registry.npmmirror.com/sshpk/1.17.0: + resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz} + name: sshpk + version: 1.17.0 + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: registry.npmmirror.com/asn1/0.2.6 + assert-plus: registry.npmmirror.com/assert-plus/1.0.0 + bcrypt-pbkdf: registry.npmmirror.com/bcrypt-pbkdf/1.0.2 + dashdash: registry.npmmirror.com/dashdash/1.14.1 + ecc-jsbn: registry.npmmirror.com/ecc-jsbn/0.1.2 + getpass: registry.npmmirror.com/getpass/0.1.7 + jsbn: registry.npmmirror.com/jsbn/0.1.1 + safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2 + tweetnacl: registry.npmmirror.com/tweetnacl/0.14.5 + dev: true + + registry.npmmirror.com/ssri/6.0.2: + resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz} + name: ssri + version: 6.0.2 + dependencies: + figgy-pudding: registry.npmmirror.com/figgy-pudding/3.5.2 + dev: true + + registry.npmmirror.com/ssri/8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz} + name: ssri + version: 8.0.1 + engines: {node: '>= 8'} + dependencies: + minipass: registry.npmmirror.com/minipass/3.1.6 + dev: true + + registry.npmmirror.com/stable/0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz} + name: stable + version: 0.1.8 + dev: true + + registry.npmmirror.com/stack-utils/1.0.5: + resolution: {integrity: sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stack-utils/-/stack-utils-1.0.5.tgz} + name: stack-utils + version: 1.0.5 + engines: {node: '>=8'} + dependencies: + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/2.0.0 + dev: true + + registry.npmmirror.com/stackframe/1.2.0: + resolution: {integrity: sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stackframe/-/stackframe-1.2.0.tgz} + name: stackframe + version: 1.2.0 + dev: true + + registry.npmmirror.com/static-extend/0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz} + name: static-extend + version: 0.1.2 + engines: {node: '>=0.10.0'} + dependencies: + define-property: registry.npmmirror.com/define-property/0.2.5 + object-copy: registry.npmmirror.com/object-copy/0.1.0 + dev: true + + registry.npmmirror.com/statuses/1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz} + name: statuses + version: 1.5.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmmirror.com/stdout-stream/1.4.1: + resolution: {integrity: sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stdout-stream/-/stdout-stream-1.4.1.tgz} + name: stdout-stream + version: 1.4.1 + dependencies: + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/stealthy-require/1.1.1: + resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stealthy-require/-/stealthy-require-1.1.1.tgz} + name: stealthy-require + version: 1.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/stream-browserify/2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz} + name: stream-browserify + version: 2.0.2 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + dev: true + + registry.npmmirror.com/stream-each/1.2.3: + resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz} + name: stream-each + version: 1.2.3 + dependencies: + end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4 + stream-shift: registry.npmmirror.com/stream-shift/1.0.1 + dev: true + + registry.npmmirror.com/stream-http/2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz} + name: stream-http + version: 2.8.3 + dependencies: + builtin-status-codes: registry.npmmirror.com/builtin-status-codes/3.0.0 + inherits: registry.npmmirror.com/inherits/2.0.4 + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + to-arraybuffer: registry.npmmirror.com/to-arraybuffer/1.0.1 + xtend: registry.npmmirror.com/xtend/4.0.2 + dev: true + + registry.npmmirror.com/stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz} + name: stream-shift + version: 1.0.1 + dev: true + + registry.npmmirror.com/strict-uri-encode/1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz} + name: strict-uri-encode + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/string-argv/0.3.1: + resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz} + name: string-argv + version: 0.3.1 + engines: {node: '>=0.6.19'} + dev: true + + registry.npmmirror.com/string-length/2.0.0: + resolution: {integrity: sha512-Qka42GGrS8Mm3SZ+7cH8UXiIWI867/b/Z/feQSpQx/rbfB8UGknGEZVaUQMOUVj+soY6NpWAxily63HI1OckVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-length/-/string-length-2.0.0.tgz} + name: string-length + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + astral-regex: registry.npmmirror.com/astral-regex/1.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/4.0.0 + dev: true + + registry.npmmirror.com/string-length/3.1.0: + resolution: {integrity: sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-length/-/string-length-3.1.0.tgz} + name: string-length + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + astral-regex: registry.npmmirror.com/astral-regex/1.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + dev: true + + registry.npmmirror.com/string-width/1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz} + name: string-width + version: 1.0.2 + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: registry.npmmirror.com/code-point-at/1.1.0 + is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/1.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + dev: true + + registry.npmmirror.com/string-width/2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz} + name: string-width + version: 2.1.1 + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/2.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/4.0.0 + dev: true + + registry.npmmirror.com/string-width/3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz} + name: string-width + version: 3.1.0 + engines: {node: '>=6'} + dependencies: + emoji-regex: registry.npmmirror.com/emoji-regex/7.0.3 + is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/2.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + dev: true + + registry.npmmirror.com/string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz} + name: string-width + version: 4.2.3 + engines: {node: '>=8'} + dependencies: + emoji-regex: registry.npmmirror.com/emoji-regex/8.0.0 + is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/3.0.0 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + dev: true + + registry.npmmirror.com/string.prototype.trimend/1.0.4: + resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz} + name: string.prototype.trimend + version: 1.0.4 + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + dev: true + + registry.npmmirror.com/string.prototype.trimstart/1.0.4: + resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz} + name: string.prototype.trimstart + version: 1.0.4 + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + dev: true + + registry.npmmirror.com/string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz} + name: string_decoder + version: 1.1.1 + dependencies: + safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2 + dev: true + + registry.npmmirror.com/string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz} + name: string_decoder + version: 1.3.0 + dependencies: + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/stringify-object/3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz} + name: stringify-object + version: 3.3.0 + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2 + is-obj: registry.npmmirror.com/is-obj/1.0.1 + is-regexp: registry.npmmirror.com/is-regexp/1.0.0 + dev: true + + registry.npmmirror.com/strip-ansi/3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz} + name: strip-ansi + version: 3.0.1 + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: registry.npmmirror.com/ansi-regex/2.1.1 + dev: true + + registry.npmmirror.com/strip-ansi/4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz} + name: strip-ansi + version: 4.0.0 + engines: {node: '>=4'} + dependencies: + ansi-regex: registry.npmmirror.com/ansi-regex/3.0.0 + dev: true + + registry.npmmirror.com/strip-ansi/5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz} + name: strip-ansi + version: 5.2.0 + engines: {node: '>=6'} + dependencies: + ansi-regex: registry.npmmirror.com/ansi-regex/4.1.0 + dev: true + + registry.npmmirror.com/strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz} + name: strip-ansi + version: 6.0.1 + engines: {node: '>=8'} + dependencies: + ansi-regex: registry.npmmirror.com/ansi-regex/5.0.1 + dev: true + + registry.npmmirror.com/strip-bom/2.0.0: + resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-bom/-/strip-bom-2.0.0.tgz} + name: strip-bom + version: 2.0.0 + engines: {node: '>=0.10.0'} + dependencies: + is-utf8: registry.npmmirror.com/is-utf8/0.2.1 + dev: true + + registry.npmmirror.com/strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz} + name: strip-bom + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/strip-eof/1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz} + name: strip-eof + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz} + name: strip-final-newline + version: 2.0.0 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/strip-indent/1.0.1: + resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-indent/-/strip-indent-1.0.1.tgz} + name: strip-indent + version: 1.0.1 + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + get-stdin: registry.npmmirror.com/get-stdin/4.0.1 + dev: true + + registry.npmmirror.com/strip-indent/2.0.0: + resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-indent/-/strip-indent-2.0.0.tgz} + name: strip-indent + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/strip-json-comments/2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz} + name: strip-json-comments + version: 2.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz} + name: strip-json-comments + version: 3.1.1 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/stylehacks/4.0.3: + resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz} + name: stylehacks + version: 4.0.3 + engines: {node: '>=6.9.0'} + dependencies: + browserslist: registry.npmmirror.com/browserslist/4.19.1 + postcss: registry.npmmirror.com/postcss/7.0.39 + postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/3.1.2 + dev: true + + registry.npmmirror.com/sucrase/3.20.3: + resolution: {integrity: sha1-Qk8edbd/lVcksGBg8a5wj18JNc8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sucrase/download/sucrase-3.20.3.tgz} + name: sucrase + version: 3.20.3 + engines: {node: '>=8'} + hasBin: true + dependencies: + commander: registry.npmmirror.com/commander/4.1.1 + glob: registry.npmmirror.com/glob/7.1.6 + lines-and-columns: registry.npmmirror.com/lines-and-columns/1.2.4 + mz: registry.nlark.com/mz/2.7.0 + pirates: registry.npmmirror.com/pirates/4.0.4 + ts-interface-checker: registry.npmmirror.com/ts-interface-checker/0.1.13 + dev: true + + registry.npmmirror.com/supports-color/2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz} + name: supports-color + version: 2.0.0 + engines: {node: '>=0.8.0'} + dev: true + + registry.npmmirror.com/supports-color/3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz} + name: supports-color + version: 3.2.3 + engines: {node: '>=0.8.0'} + dependencies: + has-flag: registry.npmmirror.com/has-flag/1.0.0 + dev: true + + registry.npmmirror.com/supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz} + name: supports-color + version: 5.5.0 + engines: {node: '>=4'} + dependencies: + has-flag: registry.npmmirror.com/has-flag/3.0.0 + dev: true + + registry.npmmirror.com/supports-color/6.1.0: + resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz} + name: supports-color + version: 6.1.0 + engines: {node: '>=6'} + dependencies: + has-flag: registry.npmmirror.com/has-flag/3.0.0 + dev: true + + registry.npmmirror.com/supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz} + name: supports-color + version: 7.2.0 + engines: {node: '>=8'} + dependencies: + has-flag: registry.npmmirror.com/has-flag/4.0.0 + dev: true + + registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} + name: supports-preserve-symlinks-flag + version: 1.0.0 + engines: {node: '>= 0.4'} + dev: true + + registry.npmmirror.com/svg-baker-runtime/1.4.7: + resolution: {integrity: sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz} + name: svg-baker-runtime + version: 1.4.7 + dependencies: + deepmerge: registry.npmmirror.com/deepmerge/1.3.2 + mitt: registry.npmmirror.com/mitt/1.1.2 + svg-baker: registry.npmmirror.com/svg-baker/1.7.0 + dev: true + + registry.npmmirror.com/svg-baker/1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-baker/-/svg-baker-1.7.0.tgz} + name: svg-baker + version: 1.7.0 + dependencies: + bluebird: registry.npmmirror.com/bluebird/3.7.2 + clone: registry.npmmirror.com/clone/2.1.2 + he: registry.npmmirror.com/he/1.2.0 + image-size: registry.npmmirror.com/image-size/0.5.5 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + merge-options: registry.nlark.com/merge-options/1.0.1 + micromatch: registry.npmmirror.com/micromatch/3.1.0 + postcss: registry.npmmirror.com/postcss/5.2.18 + postcss-prefix-selector: registry.npmmirror.com/postcss-prefix-selector/1.14.0_postcss@5.2.18 + posthtml-rename-id: registry.npmmirror.com/posthtml-rename-id/1.0.12 + posthtml-svg-mode: registry.npmmirror.com/posthtml-svg-mode/1.0.3 + query-string: registry.npmmirror.com/query-string/4.3.4 + traverse: registry.npmmirror.com/traverse/0.6.6 + dev: true + + registry.npmmirror.com/svg-sprite-loader/5.2.1: + resolution: {integrity: sha512-n2IZc87rpOeXh+PQFksFMGCfMV/BT01YG+Dlbyjoh2Cz8BSTL5Vi/7KDr86Pt/u1NRDCVb3vY74BF5rKCmqbNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-sprite-loader/-/svg-sprite-loader-5.2.1.tgz} + name: svg-sprite-loader + version: 5.2.1 + engines: {node: '>=6'} + dependencies: + bluebird: registry.npmmirror.com/bluebird/3.7.2 + deepmerge: registry.npmmirror.com/deepmerge/1.3.2 + domready: registry.npmmirror.com/domready/1.0.8 + escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + svg-baker: registry.npmmirror.com/svg-baker/1.7.0 + svg-baker-runtime: registry.npmmirror.com/svg-baker-runtime/1.4.7 + url-slug: registry.nlark.com/url-slug/2.0.0 + dev: true + + registry.npmmirror.com/svg-tags/1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz} + name: svg-tags + version: 1.0.0 + dev: true + + registry.npmmirror.com/svgo-loader/2.2.2_svgo@1.3.2: + resolution: {integrity: sha512-UeE/4yZEK96LoYqvxwh8YqCOJCjXwRY9K6YT99vXE+nYhs/W8hAY2hNf5zg/lRsyKshJkR79V+4beV3cbGL40Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svgo-loader/-/svgo-loader-2.2.2.tgz} + id: registry.npmmirror.com/svgo-loader/2.2.2 + name: svgo-loader + version: 2.2.2 + peerDependencies: + svgo: ^1.0.0 + dependencies: + js-yaml: registry.npmmirror.com/js-yaml/3.14.1 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + svgo: registry.npmmirror.com/svgo/1.3.2 + dev: true + + registry.npmmirror.com/svgo/1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz} + name: svgo + version: 1.3.2 + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + coa: registry.npmmirror.com/coa/2.0.2 + css-select: registry.npmmirror.com/css-select/2.1.0 + css-select-base-adapter: registry.npmmirror.com/css-select-base-adapter/0.1.1 + css-tree: registry.npmmirror.com/css-tree/1.0.0-alpha.37 + csso: registry.npmmirror.com/csso/4.2.0 + js-yaml: registry.npmmirror.com/js-yaml/3.14.1 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + object.values: registry.npmmirror.com/object.values/1.1.5 + sax: registry.npmmirror.com/sax/1.2.4 + stable: registry.npmmirror.com/stable/0.1.8 + unquote: registry.npmmirror.com/unquote/1.1.1 + util.promisify: registry.npmmirror.com/util.promisify/1.0.1 + dev: true + + registry.npmmirror.com/symbol-observable/1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/symbol-observable/-/symbol-observable-1.2.0.tgz} + name: symbol-observable + version: 1.2.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/symbol-tree/3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz} + name: symbol-tree + version: 3.2.4 + dev: true + + registry.npmmirror.com/table/5.4.6: + resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/table/-/table-5.4.6.tgz} + name: table + version: 5.4.6 + engines: {node: '>=6.0.0'} + dependencies: + ajv: registry.npmmirror.com/ajv/6.12.6 + lodash: registry.npmmirror.com/lodash/4.17.21 + slice-ansi: registry.npmmirror.com/slice-ansi/2.1.0 + string-width: registry.npmmirror.com/string-width/3.1.0 + dev: true + + registry.npmmirror.com/tapable/1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz} + name: tapable + version: 1.1.3 + engines: {node: '>=6'} + dev: true + + registry.npmmirror.com/tar/2.2.2: + resolution: {integrity: sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tar/-/tar-2.2.2.tgz} + name: tar + version: 2.2.2 + deprecated: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap. + dependencies: + block-stream: registry.npmmirror.com/block-stream/0.0.9 + fstream: registry.npmmirror.com/fstream/1.0.12 + inherits: registry.npmmirror.com/inherits/2.0.4 + dev: true + + registry.npmmirror.com/terser-webpack-plugin/1.4.5_webpack@4.46.0: + resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz} + id: registry.npmmirror.com/terser-webpack-plugin/1.4.5 + name: terser-webpack-plugin + version: 1.4.5 + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + cacache: registry.npmmirror.com/cacache/12.0.4 + find-cache-dir: registry.npmmirror.com/find-cache-dir/2.1.0 + is-wsl: registry.npmmirror.com/is-wsl/1.1.0 + schema-utils: registry.npmmirror.com/schema-utils/1.0.0 + serialize-javascript: registry.npmmirror.com/serialize-javascript/4.0.0 + source-map: registry.npmmirror.com/source-map/0.6.1 + terser: registry.npmmirror.com/terser/4.8.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + webpack-sources: registry.npmmirror.com/webpack-sources/1.4.3 + worker-farm: registry.npmmirror.com/worker-farm/1.7.0 + dev: true + + registry.npmmirror.com/terser/4.8.0: + resolution: {integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terser/-/terser-4.8.0.tgz} + name: terser + version: 4.8.0 + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + commander: registry.npmmirror.com/commander/2.20.3 + source-map: registry.npmmirror.com/source-map/0.6.1 + source-map-support: registry.npmmirror.com/source-map-support/0.5.21 + dev: true + + registry.npmmirror.com/test-exclude/5.2.3: + resolution: {integrity: sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/test-exclude/-/test-exclude-5.2.3.tgz} + name: test-exclude + version: 5.2.3 + engines: {node: '>=6'} + dependencies: + glob: registry.npmmirror.com/glob/7.2.0 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + read-pkg-up: registry.npmmirror.com/read-pkg-up/4.0.0 + require-main-filename: registry.npmmirror.com/require-main-filename/2.0.0 + dev: true + + registry.npmmirror.com/text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz} + name: text-table + version: 0.2.0 + dev: true + + registry.npmmirror.com/thenify-all/1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz} + name: thenify-all + version: 1.6.0 + engines: {node: '>=0.8'} + dependencies: + thenify: registry.npmmirror.com/thenify/3.3.1 + dev: true + + registry.npmmirror.com/thenify/3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz} + name: thenify + version: 3.3.1 + dependencies: + any-promise: registry.npmmirror.com/any-promise/1.3.0 + dev: true + + registry.npmmirror.com/thread-loader/2.1.3_webpack@4.46.0: + resolution: {integrity: sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thread-loader/-/thread-loader-2.1.3.tgz} + id: registry.npmmirror.com/thread-loader/2.1.3 + name: thread-loader + version: 2.1.3 + engines: {node: '>= 6.9.0 <7.0.0 || >= 8.9.0'} + peerDependencies: + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + loader-runner: registry.npmmirror.com/loader-runner/2.4.0 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + neo-async: registry.npmmirror.com/neo-async/2.6.2 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/throat/4.1.0: + resolution: {integrity: sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/throat/-/throat-4.1.0.tgz} + name: throat + version: 4.1.0 + dev: true + + registry.npmmirror.com/through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/through/-/through-2.3.8.tgz} + name: through + version: 2.3.8 + dev: true + + registry.npmmirror.com/through2/2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz} + name: through2 + version: 2.0.5 + dependencies: + readable-stream: registry.npmmirror.com/readable-stream/2.3.7 + xtend: registry.npmmirror.com/xtend/4.0.2 + dev: true + + registry.npmmirror.com/thunky/1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz} + name: thunky + version: 1.1.0 + dev: true + + registry.npmmirror.com/time-stamp/1.1.0: + resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/time-stamp/download/time-stamp-1.1.0.tgz} + name: time-stamp + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/timers-browserify/2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz} + name: timers-browserify + version: 2.0.12 + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: registry.npmmirror.com/setimmediate/1.0.5 + dev: true + + registry.npmmirror.com/timsort/0.3.0: + resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz} + name: timsort + version: 0.3.0 + dev: true + + registry.npmmirror.com/tmp/0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz} + name: tmp + version: 0.0.33 + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: registry.npmmirror.com/os-tmpdir/1.0.2 + dev: true + + registry.npmmirror.com/to-arraybuffer/1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz} + name: to-arraybuffer + version: 1.0.1 + dev: true + + registry.npmmirror.com/to-fast-properties/1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz} + name: to-fast-properties + version: 1.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz} + name: to-fast-properties + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/to-object-path/0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz} + name: to-object-path + version: 0.3.0 + engines: {node: '>=0.10.0'} + dependencies: + kind-of: registry.npmmirror.com/kind-of/3.2.2 + dev: true + + registry.npmmirror.com/to-regex-range/2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz} + name: to-regex-range + version: 2.1.1 + engines: {node: '>=0.10.0'} + dependencies: + is-number: registry.npmmirror.com/is-number/3.0.0 + repeat-string: registry.npmmirror.com/repeat-string/1.6.1 + dev: true + + registry.npmmirror.com/to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz} + name: to-regex-range + version: 5.0.1 + engines: {node: '>=8.0'} + dependencies: + is-number: registry.npmmirror.com/is-number/7.0.0 + dev: true + + registry.npmmirror.com/to-regex/3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz} + name: to-regex + version: 3.0.2 + engines: {node: '>=0.10.0'} + dependencies: + define-property: registry.npmmirror.com/define-property/2.0.2 + extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2 + regex-not: registry.npmmirror.com/regex-not/1.0.2 + safe-regex: registry.npmmirror.com/safe-regex/1.1.0 + dev: true + + registry.npmmirror.com/toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/toidentifier/download/toidentifier-1.0.1.tgz} + name: toidentifier + version: 1.0.1 + engines: {node: '>=0.6'} + dev: true + + registry.npmmirror.com/toposort/1.0.7: + resolution: {integrity: sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz} + name: toposort + version: 1.0.7 + dev: true + + registry.npmmirror.com/tough-cookie/2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz} + name: tough-cookie + version: 2.5.0 + engines: {node: '>=0.8'} + dependencies: + psl: registry.npmmirror.com/psl/1.8.0 + punycode: registry.npmmirror.com/punycode/2.1.1 + dev: true + + registry.npmmirror.com/tough-cookie/3.0.1: + resolution: {integrity: sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tough-cookie/-/tough-cookie-3.0.1.tgz} + name: tough-cookie + version: 3.0.1 + engines: {node: '>=6'} + dependencies: + ip-regex: registry.npmmirror.com/ip-regex/2.1.0 + psl: registry.npmmirror.com/psl/1.8.0 + punycode: registry.npmmirror.com/punycode/2.1.1 + dev: true + + registry.npmmirror.com/tr46/1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz} + name: tr46 + version: 1.0.1 + dependencies: + punycode: registry.npmmirror.com/punycode/2.1.1 + dev: true + + registry.npmmirror.com/traverse/0.6.6: + resolution: {integrity: sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/traverse/-/traverse-0.6.6.tgz} + name: traverse + version: 0.6.6 + dev: true + + registry.npmmirror.com/trim-newlines/1.0.0: + resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/trim-newlines/-/trim-newlines-1.0.0.tgz} + name: trim-newlines + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/true-case-path/1.0.3: + resolution: {integrity: sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/true-case-path/-/true-case-path-1.0.3.tgz} + name: true-case-path + version: 1.0.3 + dependencies: + glob: registry.npmmirror.com/glob/7.2.0 + dev: true + + registry.npmmirror.com/tryer/1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz} + name: tryer + version: 1.0.1 + dev: true + + registry.npmmirror.com/ts-interface-checker/0.1.13: + resolution: {integrity: sha1-eE/T1nlyK8EDsbS4AwvN212yppk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-interface-checker/download/ts-interface-checker-0.1.13.tgz} + name: ts-interface-checker + version: 0.1.13 + dev: true + + registry.npmmirror.com/ts-jest/24.3.0_jest@24.9.0: + resolution: {integrity: sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-jest/-/ts-jest-24.3.0.tgz} + id: registry.npmmirror.com/ts-jest/24.3.0 + name: ts-jest + version: 24.3.0 + engines: {node: '>= 6'} + hasBin: true + peerDependencies: + jest: '>=24 <25' + dependencies: + bs-logger: registry.npmmirror.com/bs-logger/0.2.6 + buffer-from: registry.npmmirror.com/buffer-from/1.1.2 + fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0 + jest: registry.npmmirror.com/jest/24.9.0 + json5: registry.npmmirror.com/json5/2.2.0 + lodash.memoize: registry.npmmirror.com/lodash.memoize/4.1.2 + make-error: registry.npmmirror.com/make-error/1.3.6 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + resolve: registry.npmmirror.com/resolve/1.21.0 + semver: registry.npmmirror.com/semver/5.7.1 + yargs-parser: registry.npmmirror.com/yargs-parser/10.1.0 + dev: true + + registry.npmmirror.com/ts-loader/6.2.2_typescript@4.1.6: + resolution: {integrity: sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-loader/-/ts-loader-6.2.2.tgz} + id: registry.npmmirror.com/ts-loader/6.2.2 + name: ts-loader + version: 6.2.2 + engines: {node: '>=8.6'} + peerDependencies: + typescript: '*' + dependencies: + chalk: registry.npmmirror.com/chalk/2.4.2 + enhanced-resolve: registry.npmmirror.com/enhanced-resolve/4.5.0 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + micromatch: registry.npmmirror.com/micromatch/4.0.4 + semver: registry.npmmirror.com/semver/6.3.0 + typescript: registry.npmmirror.com/typescript/4.1.6 + dev: true + + registry.npmmirror.com/ts-pnp/1.2.0_typescript@4.1.6: + resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-pnp/-/ts-pnp-1.2.0.tgz} + id: registry.npmmirror.com/ts-pnp/1.2.0 + name: ts-pnp + version: 1.2.0 + engines: {node: '>=6'} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: registry.npmmirror.com/typescript/4.1.6 + dev: true + + registry.npmmirror.com/tsconfig/7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tsconfig/-/tsconfig-7.0.0.tgz} + name: tsconfig + version: 7.0.0 + dependencies: + '@types/strip-bom': registry.npmmirror.com/@types/strip-bom/3.0.0 + '@types/strip-json-comments': registry.nlark.com/@types/strip-json-comments/0.0.30 + strip-bom: registry.npmmirror.com/strip-bom/3.0.0 + strip-json-comments: registry.npmmirror.com/strip-json-comments/2.0.1 + dev: true + + registry.npmmirror.com/tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz} + name: tslib + version: 1.14.1 + + registry.npmmirror.com/tslint/5.20.1_typescript@4.1.6: + resolution: {integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslint/-/tslint-5.20.1.tgz} + id: registry.npmmirror.com/tslint/5.20.1 + name: tslint + version: 5.20.1 + engines: {node: '>=4.8.0'} + hasBin: true + peerDependencies: + typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' + dependencies: + '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 + builtin-modules: registry.npmmirror.com/builtin-modules/1.1.1 + chalk: registry.npmmirror.com/chalk/2.4.2 + commander: registry.npmmirror.com/commander/2.20.3 + diff: registry.npmmirror.com/diff/4.0.2 + glob: registry.npmmirror.com/glob/7.2.0 + js-yaml: registry.npmmirror.com/js-yaml/3.14.1 + minimatch: registry.npmmirror.com/minimatch/3.0.4 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + resolve: registry.npmmirror.com/resolve/1.21.0 + semver: registry.npmmirror.com/semver/5.7.1 + tslib: registry.npmmirror.com/tslib/1.14.1 + tsutils: registry.npmmirror.com/tsutils/2.29.0_typescript@4.1.6 + typescript: registry.npmmirror.com/typescript/4.1.6 + dev: true + + registry.npmmirror.com/tsutils/2.29.0_typescript@4.1.6: + resolution: {integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tsutils/-/tsutils-2.29.0.tgz} + id: registry.npmmirror.com/tsutils/2.29.0 + name: tsutils + version: 2.29.0 + peerDependencies: + typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' + dependencies: + tslib: registry.npmmirror.com/tslib/1.14.1 + typescript: registry.npmmirror.com/typescript/4.1.6 + dev: true + + registry.npmmirror.com/tsutils/3.21.0_typescript@4.1.6: + resolution: {integrity: sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tsutils/download/tsutils-3.21.0.tgz} + id: registry.npmmirror.com/tsutils/3.21.0 + name: tsutils + version: 3.21.0 + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: registry.npmmirror.com/tslib/1.14.1 + typescript: registry.npmmirror.com/typescript/4.1.6 + dev: true + + registry.npmmirror.com/tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz} + name: tunnel-agent + version: 0.6.0 + dependencies: + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + dev: true + + registry.npmmirror.com/tweetnacl/0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz} + name: tweetnacl + version: 0.14.5 + dev: true + + registry.npmmirror.com/type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz} + name: type-check + version: 0.3.2 + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2 + dev: true + + registry.npmmirror.com/type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz} + name: type-fest + version: 0.21.3 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/type-fest/0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz} + name: type-fest + version: 0.6.0 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/type-fest/0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz} + name: type-fest + version: 0.8.1 + engines: {node: '>=8'} + dev: true + + registry.npmmirror.com/type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz} + name: type-is + version: 1.6.18 + engines: {node: '>= 0.6'} + dependencies: + media-typer: registry.nlark.com/media-typer/0.3.0 + mime-types: registry.npmmirror.com/mime-types/2.1.34 + dev: true + + registry.npmmirror.com/typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz} + name: typedarray + version: 0.0.6 + dev: true + + registry.npmmirror.com/typescript/4.1.6: + resolution: {integrity: sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typescript/-/typescript-4.1.6.tgz} + name: typescript + version: 4.1.6 + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + registry.npmmirror.com/typescript/4.5.4: + resolution: {integrity: sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typescript/download/typescript-4.5.4.tgz} + name: typescript + version: 4.5.4 + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + registry.npmmirror.com/uglify-js/3.4.10: + resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz} + name: uglify-js + version: 3.4.10 + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + commander: registry.npmmirror.com/commander/2.19.0 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/unbox-primitive/1.0.1: + resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz} + name: unbox-primitive + version: 1.0.1 + dependencies: + function-bind: registry.npmmirror.com/function-bind/1.1.1 + has-bigints: registry.npmmirror.com/has-bigints/1.0.1 + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + which-boxed-primitive: registry.npmmirror.com/which-boxed-primitive/1.0.2 + dev: true + + registry.npmmirror.com/undertaker-registry/1.0.1: + resolution: {integrity: sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/undertaker-registry/download/undertaker-registry-1.0.1.tgz} + name: undertaker-registry + version: 1.0.1 + engines: {node: '>= 0.10'} + dev: true + + registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz} + name: unicode-canonical-property-names-ecmascript + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz} + name: unicode-match-property-ecmascript + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0 + unicode-property-aliases-ecmascript: registry.npmmirror.com/unicode-property-aliases-ecmascript/2.0.0 + dev: true + + registry.npmmirror.com/unicode-match-property-value-ecmascript/2.0.0: + resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz} + name: unicode-match-property-value-ecmascript + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/unicode-property-aliases-ecmascript/2.0.0: + resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz} + name: unicode-property-aliases-ecmascript + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/union-value/1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz} + name: union-value + version: 1.0.1 + engines: {node: '>=0.10.0'} + dependencies: + arr-union: registry.npmmirror.com/arr-union/3.1.0 + get-value: registry.npmmirror.com/get-value/2.0.6 + is-extendable: registry.npmmirror.com/is-extendable/0.1.1 + set-value: registry.npmmirror.com/set-value/2.0.1 + dev: true + + registry.npmmirror.com/uniq/1.0.1: + resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz} + name: uniq + version: 1.0.1 + dev: true + + registry.npmmirror.com/uniqs/2.0.0: + resolution: {integrity: sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz} + name: uniqs + version: 2.0.0 + dev: true + + registry.npmmirror.com/unique-filename/1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz} + name: unique-filename + version: 1.1.1 + dependencies: + unique-slug: registry.npmmirror.com/unique-slug/2.0.2 + dev: true + + registry.npmmirror.com/unique-slug/2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz} + name: unique-slug + version: 2.0.2 + dependencies: + imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4 + dev: true + + registry.npmmirror.com/universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz} + name: universalify + version: 0.1.2 + engines: {node: '>= 4.0.0'} + dev: true + + registry.npmmirror.com/universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz} + name: universalify + version: 2.0.0 + engines: {node: '>= 10.0.0'} + dev: true + optional: true + + registry.npmmirror.com/unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz} + name: unpipe + version: 1.0.0 + engines: {node: '>= 0.8'} + dev: true + + registry.npmmirror.com/unquote/1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz} + name: unquote + version: 1.1.1 + dev: true + + registry.npmmirror.com/unset-value/1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz} + name: unset-value + version: 1.0.0 + engines: {node: '>=0.10.0'} + dependencies: + has-value: registry.npmmirror.com/has-value/0.3.1 + isobject: registry.npmmirror.com/isobject/3.0.1 + dev: true + + registry.npmmirror.com/upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz} + name: upath + version: 1.2.0 + engines: {node: '>=4'} + dev: true + + registry.npmmirror.com/upper-case/1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz} + name: upper-case + version: 1.1.3 + dev: true + + registry.npmmirror.com/uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz} + name: uri-js + version: 4.4.1 + dependencies: + punycode: registry.npmmirror.com/punycode/2.1.1 + dev: true + + registry.npmmirror.com/urix/0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz} + name: urix + version: 0.1.0 + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + registry.npmmirror.com/url-loader/2.3.0_file-loader@4.3.0+webpack@4.46.0: + resolution: {integrity: sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url-loader/-/url-loader-2.3.0.tgz} + id: registry.npmmirror.com/url-loader/2.3.0 + name: url-loader + version: 2.3.0 + engines: {node: '>= 8.9.0'} + peerDependencies: + file-loader: '*' + webpack: ^4.0.0 + peerDependenciesMeta: + file-loader: + optional: true + dependencies: + file-loader: registry.npmmirror.com/file-loader/4.3.0_webpack@4.46.0 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + mime: registry.npmmirror.com/mime/2.6.0 + schema-utils: registry.npmmirror.com/schema-utils/2.7.1 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/url-parse/1.5.4: + resolution: {integrity: sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url-parse/-/url-parse-1.5.4.tgz} + name: url-parse + version: 1.5.4 + dependencies: + querystringify: registry.npmmirror.com/querystringify/2.2.0 + requires-port: registry.npmmirror.com/requires-port/1.0.0 + dev: true + + registry.npmmirror.com/url/0.11.0: + resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url/-/url-0.11.0.tgz} + name: url + version: 0.11.0 + dependencies: + punycode: registry.npmmirror.com/punycode/1.3.2 + querystring: registry.npmmirror.com/querystring/0.2.0 + dev: true + + registry.npmmirror.com/use/3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/use/-/use-3.1.1.tgz} + name: use + version: 3.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz} + name: util-deprecate + version: 1.0.2 + dev: true + + registry.npmmirror.com/util.promisify/1.0.0: + resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz} + name: util.promisify + version: 1.0.0 + dependencies: + define-properties: registry.npmmirror.com/define-properties/1.1.3 + object.getownpropertydescriptors: registry.npmmirror.com/object.getownpropertydescriptors/2.1.3 + dev: true + + registry.npmmirror.com/util.promisify/1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz} + name: util.promisify + version: 1.0.1 + dependencies: + define-properties: registry.npmmirror.com/define-properties/1.1.3 + es-abstract: registry.npmmirror.com/es-abstract/1.19.1 + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + object.getownpropertydescriptors: registry.npmmirror.com/object.getownpropertydescriptors/2.1.3 + dev: true + + registry.npmmirror.com/util.promisify/1.1.1: + resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util.promisify/-/util.promisify-1.1.1.tgz} + name: util.promisify + version: 1.1.1 + dependencies: + call-bind: registry.npmmirror.com/call-bind/1.0.2 + define-properties: registry.npmmirror.com/define-properties/1.1.3 + for-each: registry.npmmirror.com/for-each/0.3.3 + has-symbols: registry.npmmirror.com/has-symbols/1.0.2 + object.getownpropertydescriptors: registry.npmmirror.com/object.getownpropertydescriptors/2.1.3 + dev: true + + registry.npmmirror.com/util/0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util/-/util-0.10.3.tgz} + name: util + version: 0.10.3 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.1 + dev: true + + registry.npmmirror.com/util/0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util/-/util-0.11.1.tgz} + name: util + version: 0.11.1 + dependencies: + inherits: registry.npmmirror.com/inherits/2.0.3 + dev: true + + registry.npmmirror.com/utila/0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz} + name: utila + version: 0.4.0 + dev: true + + registry.npmmirror.com/uuid/3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz} + name: uuid + version: 3.4.0 + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: true + + registry.npmmirror.com/uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz} + name: uuid + version: 8.3.2 + hasBin: true + dev: true + + registry.npmmirror.com/v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz} + name: v8-compile-cache + version: 2.3.0 + dev: true + + registry.npmmirror.com/v8flags/3.2.0: + resolution: {integrity: sha1-skPjtN/XMfp3TnSSEoEJoP5m1lY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/v8flags/download/v8flags-3.2.0.tgz} + name: v8flags + version: 3.2.0 + engines: {node: '>= 0.10'} + dependencies: + homedir-polyfill: registry.nlark.com/homedir-polyfill/1.0.3 + dev: true + + registry.npmmirror.com/validate-npm-package-license/3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz} + name: validate-npm-package-license + version: 3.0.4 + dependencies: + spdx-correct: registry.npmmirror.com/spdx-correct/3.1.1 + spdx-expression-parse: registry.npmmirror.com/spdx-expression-parse/3.0.1 + dev: true + + registry.npmmirror.com/vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz} + name: vary + version: 1.1.2 + engines: {node: '>= 0.8'} + dev: true + + registry.npmmirror.com/vendors/1.0.4: + resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz} + name: vendors + version: 1.0.4 + dev: true + + registry.npmmirror.com/verror/1.10.0: + resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/verror/download/verror-1.10.0.tgz} + name: verror + version: 1.10.0 + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: registry.npmmirror.com/assert-plus/1.0.0 + core-util-is: registry.npmmirror.com/core-util-is/1.0.2 + extsprintf: registry.npmmirror.com/extsprintf/1.3.0 + dev: true + + registry.npmmirror.com/vm-browserify/1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz} + name: vm-browserify + version: 1.1.2 + dev: true + + registry.npmmirror.com/vue-demi/0.12.1_vue@3.2.26: + resolution: {integrity: sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.1.tgz} + id: registry.npmmirror.com/vue-demi/0.12.1 + name: vue-demi + version: 0.12.1 + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/vue-eslint-parser/7.11.0_eslint@6.8.0: + resolution: {integrity: sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz} + id: registry.npmmirror.com/vue-eslint-parser/7.11.0 + name: vue-eslint-parser + version: 7.11.0 + engines: {node: '>=8.10'} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + debug: registry.npmmirror.com/debug/4.3.3 + eslint: registry.npmmirror.com/eslint/6.8.0 + eslint-scope: registry.npmmirror.com/eslint-scope/5.1.1 + eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/1.3.0 + espree: registry.npmmirror.com/espree/6.2.1 + esquery: registry.npmmirror.com/esquery/1.4.0 + lodash: registry.npmmirror.com/lodash/4.17.21 + semver: registry.npmmirror.com/semver/6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/vue-hot-reload-api/2.3.4: + resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz} + name: vue-hot-reload-api + version: 2.3.4 + dev: true + + registry.npmmirror.com/vue-i18n/9.1.9_vue@3.2.26: + resolution: {integrity: sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.1.9.tgz} + id: registry.npmmirror.com/vue-i18n/9.1.9 + name: vue-i18n + version: 9.1.9 + engines: {node: '>= 10'} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@intlify/core-base': registry.npmmirror.com/@intlify/core-base/9.1.9 + '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.1.9 + '@intlify/vue-devtools': registry.npmmirror.com/@intlify/vue-devtools/9.1.9 + '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.0.0-beta.21.1 + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/vue-jest/3.0.7_fa7b9b114f7d1823abcda9541f12deb9: + resolution: {integrity: sha512-PIOxFM+wsBMry26ZpfBvUQ/DGH2hvp5khDQ1n51g3bN0TwFwTy4J85XVfxTRMukqHji/GnAoGUnlZ5Ao73K62w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-jest/-/vue-jest-3.0.7.tgz} + id: registry.npmmirror.com/vue-jest/3.0.7 + name: vue-jest + version: 3.0.7 + peerDependencies: + babel-core: ^6.25.0 || ^7.0.0-0 + vue: ^2.x + vue-template-compiler: ^2.x + dependencies: + babel-core: registry.npmmirror.com/babel-core/7.0.0-bridge.0_@babel+core@7.16.7 + babel-plugin-transform-es2015-modules-commonjs: registry.npmmirror.com/babel-plugin-transform-es2015-modules-commonjs/6.26.2 + chalk: registry.npmmirror.com/chalk/2.4.2 + deasync: registry.npmmirror.com/deasync/0.1.24 + extract-from-css: registry.npmmirror.com/extract-from-css/0.4.4 + find-babel-config: registry.npmmirror.com/find-babel-config/1.2.0 + js-beautify: registry.npmmirror.com/js-beautify/1.14.0 + node-cache: registry.npmmirror.com/node-cache/4.2.1 + object-assign: registry.npmmirror.com/object-assign/4.1.1 + source-map: registry.npmmirror.com/source-map/0.5.7 + tsconfig: registry.npmmirror.com/tsconfig/7.0.0 + vue: registry.npmmirror.com/vue/3.2.26 + vue-template-es2015-compiler: registry.npmmirror.com/vue-template-es2015-compiler/1.9.1 + dev: true + + registry.npmmirror.com/vue-jest/5.0.0-alpha.10_typescript@4.1.6+vue@3.2.26: + resolution: {integrity: sha512-iN62cTi4AL0UsgxEyVeJtHG6qXEv+8Ci2wX1vP3b/dAZvyBRmqy5aJHQrP6VCEuio+HgHQ1LAZ+ccM2pouBmlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-jest/-/vue-jest-5.0.0-alpha.10.tgz} + id: registry.npmmirror.com/vue-jest/5.0.0-alpha.10 + name: vue-jest + version: 5.0.0-alpha.10 + peerDependencies: + '@babel/core': 7.x + babel-jest: '>= 24 < 27' + jest: '>= 24 < 27 ' + ts-jest: '>= 24 < 27 ' + typescript: '>= 3.x' + vue: ^3.0.0-0 + peerDependenciesMeta: + ts-jest: + optional: true + typescript: + optional: true + dependencies: + '@babel/plugin-transform-modules-commonjs': registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.16.8 + chalk: registry.npmmirror.com/chalk/2.4.2 + convert-source-map: registry.npmmirror.com/convert-source-map/1.8.0 + extract-from-css: registry.npmmirror.com/extract-from-css/0.4.4 + source-map: registry.npmmirror.com/source-map/0.5.6 + tsconfig: registry.npmmirror.com/tsconfig/7.0.0 + typescript: registry.npmmirror.com/typescript/4.1.6 + vue: registry.npmmirror.com/vue/3.2.26 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/vue-loader/15.9.8_0aadd186e864c83cab1284bae568d6ae: + resolution: {integrity: sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-loader/-/vue-loader-15.9.8.tgz} + id: registry.npmmirror.com/vue-loader/15.9.8 + name: vue-loader + version: 15.9.8 + peerDependencies: + cache-loader: '*' + css-loader: '*' + vue-template-compiler: '*' + webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0 + peerDependenciesMeta: + cache-loader: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@vue/component-compiler-utils': registry.npmmirror.com/@vue/component-compiler-utils/3.3.0 + cache-loader: registry.npmmirror.com/cache-loader/4.1.0_webpack@4.46.0 + css-loader: registry.npmmirror.com/css-loader/3.6.0_webpack@4.46.0 + hash-sum: registry.npmmirror.com/hash-sum/1.0.2 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + vue-hot-reload-api: registry.npmmirror.com/vue-hot-reload-api/2.3.4 + vue-style-loader: registry.npmmirror.com/vue-style-loader/4.1.3 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + + registry.npmmirror.com/vue-loader/16.8.3_webpack@4.46.0: + resolution: {integrity: sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz} + id: registry.npmmirror.com/vue-loader/16.8.3 + name: vue-loader + version: 16.8.3 + requiresBuild: true + peerDependencies: + webpack: ^4.1.0 || ^5.0.0-0 + dependencies: + chalk: registry.npmmirror.com/chalk/4.1.2 + hash-sum: registry.npmmirror.com/hash-sum/2.0.0 + loader-utils: registry.npmmirror.com/loader-utils/2.0.2 + webpack: registry.npmmirror.com/webpack/4.46.0 + dev: true + optional: true + + registry.npmmirror.com/vue-router/4.0.12_vue@3.2.26: + resolution: {integrity: sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.0.12.tgz} + id: registry.npmmirror.com/vue-router/4.0.12 + name: vue-router + version: 4.0.12 + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.0.0-beta.21.1 + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/vue-style-loader/4.1.3: + resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz} + name: vue-style-loader + version: 4.1.3 + dependencies: + hash-sum: registry.npmmirror.com/hash-sum/1.0.2 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + dev: true + + registry.npmmirror.com/vue-template-es2015-compiler/1.9.1: + resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz} + name: vue-template-es2015-compiler + version: 1.9.1 + dev: true + + registry.npmmirror.com/vue-types/3.0.2_vue@3.2.26: + resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz} + id: registry.npmmirror.com/vue-types/3.0.2 + name: vue-types + version: 3.0.2 + engines: {node: '>=10.15.0'} + peerDependencies: + vue: ^3.0.0 + dependencies: + is-plain-object: registry.npmmirror.com/is-plain-object/3.0.1 + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/vue/3.2.26: + resolution: {integrity: sha512-KD4lULmskL5cCsEkfhERVRIOEDrfEL9CwAsLYpzptOGjaGFNWo3BQ9g8MAb7RaIO71rmVOziZ/uEN/rHwcUIhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-3.2.26.tgz} + name: vue + version: 3.2.26 + dependencies: + '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.26 + '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.26 + '@vue/runtime-dom': registry.npmmirror.com/@vue/runtime-dom/3.2.26 + '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer/3.2.26_vue@3.2.26 + '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.26 + dev: false + + registry.npmmirror.com/vuex/4.0.2_vue@3.2.26: + resolution: {integrity: sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz} + id: registry.npmmirror.com/vuex/4.0.2 + name: vuex + version: 4.0.2 + peerDependencies: + vue: ^3.0.2 + dependencies: + '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.0.0-beta.21.1 + vue: registry.npmmirror.com/vue/3.2.26 + dev: false + + registry.npmmirror.com/w3c-hr-time/1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz} + name: w3c-hr-time + version: 1.0.2 + dependencies: + browser-process-hrtime: registry.npmmirror.com/browser-process-hrtime/1.0.0 + dev: true + + registry.npmmirror.com/w3c-xmlserializer/1.1.2: + resolution: {integrity: sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz} + name: w3c-xmlserializer + version: 1.1.2 + dependencies: + domexception: registry.npmmirror.com/domexception/1.0.1 + webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2 + xml-name-validator: registry.npmmirror.com/xml-name-validator/3.0.0 + dev: true + + registry.npmmirror.com/walker/1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz} + name: walker + version: 1.0.8 + dependencies: + makeerror: registry.npmmirror.com/makeerror/1.0.12 + dev: true + + registry.npmmirror.com/warning/4.0.3: + resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz} + name: warning + version: 4.0.3 + dependencies: + loose-envify: registry.npmmirror.com/loose-envify/1.4.0 + dev: false + + registry.npmmirror.com/watchpack-chokidar2/2.0.1: + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz} + name: watchpack-chokidar2 + version: 2.0.1 + requiresBuild: true + dependencies: + chokidar: registry.npmmirror.com/chokidar/2.1.8 + dev: true + optional: true + + registry.npmmirror.com/watchpack/1.7.5: + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz} + name: watchpack + version: 1.7.5 + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + neo-async: registry.npmmirror.com/neo-async/2.6.2 + optionalDependencies: + chokidar: registry.npmmirror.com/chokidar/3.5.2 + watchpack-chokidar2: registry.npmmirror.com/watchpack-chokidar2/2.0.1 + dev: true + + registry.npmmirror.com/wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz} + name: wbuf + version: 1.7.3 + dependencies: + minimalistic-assert: registry.npmmirror.com/minimalistic-assert/1.0.1 + dev: true + + registry.npmmirror.com/wcwidth/1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz} + name: wcwidth + version: 1.0.1 + dependencies: + defaults: registry.npmmirror.com/defaults/1.0.3 + dev: true + + registry.npmmirror.com/webidl-conversions/4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz} + name: webidl-conversions + version: 4.0.2 + dev: true + + registry.npmmirror.com/webpack-bundle-analyzer/3.9.0: + resolution: {integrity: sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz} + name: webpack-bundle-analyzer + version: 3.9.0 + engines: {node: '>= 6.14.4'} + hasBin: true + dependencies: + acorn: registry.npmmirror.com/acorn/7.4.1 + acorn-walk: registry.npmmirror.com/acorn-walk/7.2.0 + bfj: registry.npmmirror.com/bfj/6.1.2 + chalk: registry.npmmirror.com/chalk/2.4.2 + commander: registry.npmmirror.com/commander/2.20.3 + ejs: registry.npmmirror.com/ejs/2.7.4 + express: registry.npmmirror.com/express/4.17.2 + filesize: registry.npmmirror.com/filesize/3.6.1 + gzip-size: registry.npmmirror.com/gzip-size/5.1.1 + lodash: registry.npmmirror.com/lodash/4.17.21 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + opener: registry.npmmirror.com/opener/1.5.2 + ws: registry.npmmirror.com/ws/6.2.2 + dev: true + + registry.npmmirror.com/webpack-chain/6.5.1: + resolution: {integrity: sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz} + name: webpack-chain + version: 6.5.1 + engines: {node: '>=8'} + dependencies: + deepmerge: registry.npmmirror.com/deepmerge/1.5.2 + javascript-stringify: registry.npmmirror.com/javascript-stringify/2.1.0 + dev: true + + registry.npmmirror.com/webpack-dev-middleware/3.7.3_webpack@4.46.0: + resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz} + id: registry.npmmirror.com/webpack-dev-middleware/3.7.3 + name: webpack-dev-middleware + version: 3.7.3 + engines: {node: '>= 6'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + memory-fs: registry.npmmirror.com/memory-fs/0.4.1 + mime: registry.npmmirror.com/mime/2.6.0 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + range-parser: registry.npmmirror.com/range-parser/1.2.1 + webpack: registry.npmmirror.com/webpack/4.46.0 + webpack-log: registry.npmmirror.com/webpack-log/2.0.0 + dev: true + + registry.npmmirror.com/webpack-dev-server/3.11.3_webpack@4.46.0: + resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz} + id: registry.npmmirror.com/webpack-dev-server/3.11.3 + name: webpack-dev-server + version: 3.11.3 + engines: {node: '>= 6.11.5'} + hasBin: true + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + ansi-html-community: registry.nlark.com/ansi-html-community/0.0.8 + bonjour: registry.npmmirror.com/bonjour/3.5.0 + chokidar: registry.npmmirror.com/chokidar/2.1.8 + compression: registry.npmmirror.com/compression/1.7.4 + connect-history-api-fallback: registry.npmmirror.com/connect-history-api-fallback/1.6.0 + debug: registry.npmmirror.com/debug/4.3.3_supports-color@6.1.0 + del: registry.npmmirror.com/del/4.1.1 + express: registry.npmmirror.com/express/4.17.2 + html-entities: registry.npmmirror.com/html-entities/1.4.0 + http-proxy-middleware: registry.npmmirror.com/http-proxy-middleware/0.19.1_debug@4.3.3 + import-local: registry.npmmirror.com/import-local/2.0.0 + internal-ip: registry.npmmirror.com/internal-ip/4.3.0 + ip: registry.npmmirror.com/ip/1.1.5 + is-absolute-url: registry.npmmirror.com/is-absolute-url/3.0.3 + killable: registry.npmmirror.com/killable/1.0.1 + loglevel: registry.npmmirror.com/loglevel/1.8.0 + opn: registry.npmmirror.com/opn/5.5.0 + p-retry: registry.npmmirror.com/p-retry/3.0.1 + portfinder: registry.npmmirror.com/portfinder/1.0.28 + schema-utils: registry.npmmirror.com/schema-utils/1.0.0 + selfsigned: registry.npmmirror.com/selfsigned/1.10.13 + semver: registry.npmmirror.com/semver/6.3.0 + serve-index: registry.npmmirror.com/serve-index/1.9.1 + sockjs: registry.npmmirror.com/sockjs/0.3.24 + sockjs-client: registry.npmmirror.com/sockjs-client/1.5.2 + spdy: registry.npmmirror.com/spdy/4.0.2_supports-color@6.1.0 + strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1 + supports-color: registry.npmmirror.com/supports-color/6.1.0 + url: registry.npmmirror.com/url/0.11.0 + webpack: registry.npmmirror.com/webpack/4.46.0 + webpack-dev-middleware: registry.npmmirror.com/webpack-dev-middleware/3.7.3_webpack@4.46.0 + webpack-log: registry.npmmirror.com/webpack-log/2.0.0 + ws: registry.npmmirror.com/ws/6.2.2 + yargs: registry.npmmirror.com/yargs/13.3.2 + dev: true + + registry.npmmirror.com/webpack-log/2.0.0: + resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz} + name: webpack-log + version: 2.0.0 + engines: {node: '>= 6'} + dependencies: + ansi-colors: registry.npmmirror.com/ansi-colors/3.2.4 + uuid: registry.npmmirror.com/uuid/3.4.0 + dev: true + + registry.npmmirror.com/webpack-merge/4.2.2: + resolution: {integrity: sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz} + name: webpack-merge + version: 4.2.2 + dependencies: + lodash: registry.npmmirror.com/lodash/4.17.21 + dev: true + + registry.npmmirror.com/webpack-sources/1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz} + name: webpack-sources + version: 1.4.3 + dependencies: + source-list-map: registry.npmmirror.com/source-list-map/2.0.1 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: true + + registry.npmmirror.com/webpack/4.46.0: + resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz} + name: webpack + version: 4.46.0 + engines: {node: '>=6.11.5'} + hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + dependencies: + '@webassemblyjs/ast': registry.nlark.com/@webassemblyjs/ast/1.9.0 + '@webassemblyjs/helper-module-context': registry.nlark.com/@webassemblyjs/helper-module-context/1.9.0 + '@webassemblyjs/wasm-edit': registry.nlark.com/@webassemblyjs/wasm-edit/1.9.0 + '@webassemblyjs/wasm-parser': registry.nlark.com/@webassemblyjs/wasm-parser/1.9.0 + acorn: registry.npmmirror.com/acorn/6.4.2 + ajv: registry.npmmirror.com/ajv/6.12.6 + ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6 + chrome-trace-event: registry.npmmirror.com/chrome-trace-event/1.0.3 + enhanced-resolve: registry.npmmirror.com/enhanced-resolve/4.5.0 + eslint-scope: registry.npmmirror.com/eslint-scope/4.0.3 + json-parse-better-errors: registry.npmmirror.com/json-parse-better-errors/1.0.2 + loader-runner: registry.npmmirror.com/loader-runner/2.4.0 + loader-utils: registry.npmmirror.com/loader-utils/1.4.0 + memory-fs: registry.npmmirror.com/memory-fs/0.4.1 + micromatch: registry.npmmirror.com/micromatch/3.1.10 + mkdirp: registry.npmmirror.com/mkdirp/0.5.5 + neo-async: registry.npmmirror.com/neo-async/2.6.2 + node-libs-browser: registry.npmmirror.com/node-libs-browser/2.2.1 + schema-utils: registry.npmmirror.com/schema-utils/1.0.0 + tapable: registry.npmmirror.com/tapable/1.1.3 + terser-webpack-plugin: registry.npmmirror.com/terser-webpack-plugin/1.4.5_webpack@4.46.0 + watchpack: registry.npmmirror.com/watchpack/1.7.5 + webpack-sources: registry.npmmirror.com/webpack-sources/1.4.3 + dev: true + + registry.npmmirror.com/websocket-driver/0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz} + name: websocket-driver + version: 0.7.4 + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: registry.npmmirror.com/http-parser-js/0.5.5 + safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 + websocket-extensions: registry.npmmirror.com/websocket-extensions/0.1.4 + dev: true + + registry.npmmirror.com/websocket-extensions/0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz} + name: websocket-extensions + version: 0.1.4 + engines: {node: '>=0.8.0'} + dev: true + + registry.npmmirror.com/whatwg-encoding/1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz} + name: whatwg-encoding + version: 1.0.5 + dependencies: + iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24 + dev: true + + registry.npmmirror.com/whatwg-mimetype/2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz} + name: whatwg-mimetype + version: 2.3.0 + dev: true + + registry.npmmirror.com/whatwg-url/6.5.0: + resolution: {integrity: sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-6.5.0.tgz} + name: whatwg-url + version: 6.5.0 + dependencies: + lodash.sortby: registry.npmmirror.com/lodash.sortby/4.7.0 + tr46: registry.npmmirror.com/tr46/1.0.1 + webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2 + dev: true + + registry.npmmirror.com/whatwg-url/7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz} + name: whatwg-url + version: 7.1.0 + dependencies: + lodash.sortby: registry.npmmirror.com/lodash.sortby/4.7.0 + tr46: registry.npmmirror.com/tr46/1.0.1 + webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2 + dev: true + + registry.npmmirror.com/which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz} + name: which-boxed-primitive + version: 1.0.2 + dependencies: + is-bigint: registry.npmmirror.com/is-bigint/1.0.4 + is-boolean-object: registry.npmmirror.com/is-boolean-object/1.1.2 + is-number-object: registry.npmmirror.com/is-number-object/1.0.6 + is-string: registry.npmmirror.com/is-string/1.0.7 + is-symbol: registry.npmmirror.com/is-symbol/1.0.4 + dev: true + + registry.npmmirror.com/which-module/2.0.0: + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz} + name: which-module + version: 2.0.0 + dev: true + + registry.npmmirror.com/which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-1.3.1.tgz} + name: which + version: 1.3.1 + hasBin: true + dependencies: + isexe: registry.npmmirror.com/isexe/2.0.0 + dev: true + + registry.npmmirror.com/which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-2.0.2.tgz} + name: which + version: 2.0.2 + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: registry.npmmirror.com/isexe/2.0.0 + dev: true + + registry.npmmirror.com/wide-align/1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz} + name: wide-align + version: 1.1.5 + dependencies: + string-width: registry.npmmirror.com/string-width/4.2.3 + dev: true + + registry.npmmirror.com/word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz} + name: word-wrap + version: 1.2.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmmirror.com/worker-farm/1.7.0: + resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz} + name: worker-farm + version: 1.7.0 + dependencies: + errno: registry.npmmirror.com/errno/0.1.8 + dev: true + + registry.npmmirror.com/worker-rpc/0.1.1: + resolution: {integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/worker-rpc/-/worker-rpc-0.1.1.tgz} + name: worker-rpc + version: 0.1.1 + dependencies: + microevent.ts: registry.npmmirror.com/microevent.ts/0.1.1 + dev: true + + registry.npmmirror.com/wrap-ansi/3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz} + name: wrap-ansi + version: 3.0.1 + engines: {node: '>=4'} + dependencies: + string-width: registry.npmmirror.com/string-width/2.1.1 + strip-ansi: registry.npmmirror.com/strip-ansi/4.0.0 + dev: true + + registry.npmmirror.com/wrap-ansi/5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz} + name: wrap-ansi + version: 5.1.0 + engines: {node: '>=6'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 + string-width: registry.npmmirror.com/string-width/3.1.0 + strip-ansi: registry.npmmirror.com/strip-ansi/5.2.0 + dev: true + + registry.npmmirror.com/wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz} + name: wrap-ansi + version: 6.2.0 + engines: {node: '>=8'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 + string-width: registry.npmmirror.com/string-width/4.2.3 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + dev: true + + registry.npmmirror.com/wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz} + name: wrap-ansi + version: 7.0.0 + engines: {node: '>=10'} + dependencies: + ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 + string-width: registry.npmmirror.com/string-width/4.2.3 + strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 + dev: true + + registry.npmmirror.com/wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz} + name: wrappy + version: 1.0.2 + dev: true + + registry.npmmirror.com/ws/5.2.3: + resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ws/-/ws-5.2.3.tgz} + name: ws + version: 5.2.3 + dependencies: + async-limiter: registry.npmmirror.com/async-limiter/1.0.1 + dev: true + + registry.npmmirror.com/ws/6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz} + name: ws + version: 6.2.2 + dependencies: + async-limiter: registry.npmmirror.com/async-limiter/1.0.1 + dev: true + + registry.npmmirror.com/ws/7.5.6: + resolution: {integrity: sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ws/-/ws-7.5.6.tgz} + name: ws + version: 7.5.6 + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + registry.npmmirror.com/xml-name-validator/3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz} + name: xml-name-validator + version: 3.0.0 + dev: true + + registry.npmmirror.com/xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz} + name: xmlchars + version: 2.2.0 + dev: true + + registry.npmmirror.com/xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz} + name: xtend + version: 4.0.2 + engines: {node: '>=0.4'} + dev: true + + registry.npmmirror.com/y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz} + name: y18n + version: 4.0.3 + dev: true + + registry.npmmirror.com/y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz} + name: y18n + version: 5.0.8 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/yallist/2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz} + name: yallist + version: 2.1.2 + dev: true + + registry.npmmirror.com/yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz} + name: yallist + version: 3.1.1 + dev: true + + registry.npmmirror.com/yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz} + name: yallist + version: 4.0.0 + dev: true + + registry.npmmirror.com/yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz} + name: yaml + version: 1.10.2 + engines: {node: '>= 6'} + dev: true + optional: true + + registry.npmmirror.com/yargs-parser/10.1.0: + resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-10.1.0.tgz} + name: yargs-parser + version: 10.1.0 + dependencies: + camelcase: registry.npmmirror.com/camelcase/4.1.0 + dev: true + + registry.npmmirror.com/yargs-parser/13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz} + name: yargs-parser + version: 13.1.2 + dependencies: + camelcase: registry.npmmirror.com/camelcase/5.3.1 + decamelize: registry.npmmirror.com/decamelize/1.2.0 + dev: true + + registry.npmmirror.com/yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz} + name: yargs-parser + version: 20.2.9 + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/yargs-parser/5.0.1: + resolution: {integrity: sha1-ft4ynB2M274gm9Jc25kOmx67s5Q=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/download/yargs-parser-5.0.1.tgz} + name: yargs-parser + version: 5.0.1 + dependencies: + camelcase: registry.npmmirror.com/camelcase/3.0.0 + object.assign: registry.nlark.com/object.assign/4.1.2 + dev: true + + registry.npmmirror.com/yargs/13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz} + name: yargs + version: 13.3.2 + dependencies: + cliui: registry.npmmirror.com/cliui/5.0.0 + find-up: registry.npmmirror.com/find-up/3.0.0 + get-caller-file: registry.npmmirror.com/get-caller-file/2.0.5 + require-directory: registry.npmmirror.com/require-directory/2.1.1 + require-main-filename: registry.npmmirror.com/require-main-filename/2.0.0 + set-blocking: registry.npmmirror.com/set-blocking/2.0.0 + string-width: registry.npmmirror.com/string-width/3.1.0 + which-module: registry.npmmirror.com/which-module/2.0.0 + y18n: registry.npmmirror.com/y18n/4.0.3 + yargs-parser: registry.npmmirror.com/yargs-parser/13.1.2 + dev: true + + registry.npmmirror.com/yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz} + name: yargs + version: 16.2.0 + engines: {node: '>=10'} + dependencies: + cliui: registry.npmmirror.com/cliui/7.0.4 + escalade: registry.npmmirror.com/escalade/3.1.1 + get-caller-file: registry.npmmirror.com/get-caller-file/2.0.5 + require-directory: registry.npmmirror.com/require-directory/2.1.1 + string-width: registry.npmmirror.com/string-width/4.2.3 + y18n: registry.npmmirror.com/y18n/5.0.8 + yargs-parser: registry.npmmirror.com/yargs-parser/20.2.9 + dev: true + + registry.npmmirror.com/yargs/7.1.2: + resolution: {integrity: sha1-Y6Cl1CFDh5/bswNwdBN04GQdVds=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/download/yargs-7.1.2.tgz} + name: yargs + version: 7.1.2 + dependencies: + camelcase: registry.npmmirror.com/camelcase/3.0.0 + cliui: registry.nlark.com/cliui/3.2.0 + decamelize: registry.npmmirror.com/decamelize/1.2.0 + get-caller-file: registry.nlark.com/get-caller-file/1.0.3 + os-locale: registry.npmmirror.com/os-locale/1.4.0 + read-pkg-up: registry.npmmirror.com/read-pkg-up/1.0.1 + require-directory: registry.nlark.com/require-directory/2.1.1 + require-main-filename: registry.nlark.com/require-main-filename/1.0.1 + set-blocking: registry.nlark.com/set-blocking/2.0.0 + string-width: registry.npmmirror.com/string-width/1.0.2 + which-module: registry.nlark.com/which-module/1.0.0 + y18n: registry.nlark.com/y18n/3.2.2 + yargs-parser: registry.npmmirror.com/yargs-parser/5.0.1 + dev: true + + registry.npmmirror.com/yorkie/2.0.0: + resolution: {integrity: sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz} + name: yorkie + version: 2.0.0 + engines: {node: '>=4'} + requiresBuild: true + dependencies: + execa: registry.npmmirror.com/execa/0.8.0 + is-ci: registry.npmmirror.com/is-ci/1.2.1 + normalize-path: registry.npmmirror.com/normalize-path/1.0.0 + strip-indent: registry.npmmirror.com/strip-indent/2.0.0 + dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..9e55d78 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,8 @@ +packages: + # 所有在 packages/ 和 components/ 子目录下的 package + - 'packages/**' + - 'components/**' + - main + - main-antd + # 不包括在 tests 文件夹下的 package + - '!**/tests/**' diff --git a/scripts/config/constants.ts b/scripts/config/constants.ts new file mode 100644 index 0000000..4669844 --- /dev/null +++ b/scripts/config/constants.ts @@ -0,0 +1,5 @@ +// 子项目上级目录包名 +export const PKG_NAME: string = 'packages'; + +// 构建跟目录名 +export const BUILD_NAME: string = 'dist'; diff --git a/scripts/config/index.ts b/scripts/config/index.ts new file mode 100644 index 0000000..060db01 --- /dev/null +++ b/scripts/config/index.ts @@ -0,0 +1,91 @@ +/** + * 配置 + */ + +// 主框架配置 +export interface MainProjectConfigItem { + // 主框架项目目录名,也作为生产主应用目录名 + rootDir: string; + // 主框架项目内部构建目录名 + outputDir: string; + // 主框架项目的子项目上级目录名 + buildChildParentName: string; + // 开发命令,需要在框架根目录/package.json中scripts内配置好 + serveRun: string; + // 构建命令,需要在框架根目录/package.json中scripts内配置好 + buildRun: string; + // 子项目名称(childProjectConfig的key)数组 + subproject: string[]; +} + +// 子项目配置 +export interface ChildProjectConfigItem { + // 子项目目录名,也作为生产子应用目录名 + rootDir: string; + // 子项目内部构建目录名 + outputDir: string; + // 开发 localhost 或者 ip + host: string; + // 开发端口 + port: number; + // 开发命令,需要在框架根目录/package.json中scripts内配置好 + serveRun: string; + // 构建命令,需要在框架根目录/package.json中scripts内配置好 + buildRun: string; +} + +export const mainProjectConfig: Record = { + 'main': { + buildChildParentName: process.env.MICRO_BUILD_CHILD_NAME, + rootDir: 'main', + outputDir: 'dist', + serveRun: 'serve:main', + buildRun: 'build:main', + subproject: [ + 'system', + 'article', + 'links', + ] + }, + 'main-antd': { + buildChildParentName: process.env.MICRO_BUILD_CHILD_NAME, + rootDir: 'main-antd', + outputDir: 'dist', + serveRun: 'serve:main-antd', + buildRun: 'build:main-antd', + subproject: [ + 'system', + 'article', + 'links', + ] + } +} + +export const childProjectConfig: Record = { + 'system': { + rootDir: process.env.MICRO_SYSTEM_ROOT_DIR, + outputDir: 'dist', + host: process.env.MICRO_SYSTEM_HOST, + port: Number(process.env.MICRO_SYSTEM_PORT || 0), + serveRun: 'serve:system', + buildRun: 'build:system' + }, + 'article': { + rootDir: process.env.MICRO_ARTICLE_ROOT_DIR, + outputDir: 'dist', + host: process.env.MICRO_ARTICLE_HOST, + port: Number(process.env.MICRO_ARTICLE_PORT || 0), + serveRun: 'serve:article', + buildRun: 'build:article' + }, + 'links': { + rootDir: process.env.MICRO_LINKS_ROOT_DIR, + outputDir: 'dist', + host: process.env.MICRO_LINKS_HOST, + port: Number(process.env.MICRO_LINKS_PORT || 0), + serveRun: 'serve:links', + buildRun: 'build:links' + }, +} + +export default {} diff --git a/scripts/config/paths.ts b/scripts/config/paths.ts new file mode 100644 index 0000000..40be70c --- /dev/null +++ b/scripts/config/paths.ts @@ -0,0 +1,12 @@ +import { resolve } from 'path' +import { PKG_NAME, BUILD_NAME } from "./constants" + +// 项目根路径 +export const projectRoot = resolve(__dirname, '..', '..') + +// 子项目上级目录包路径 +export const pkgRoot = resolve(projectRoot, PKG_NAME) + +/* 构建跟目录路径 /dist */ +export const buildOutput = resolve(projectRoot, BUILD_NAME) + diff --git a/scripts/gulpbuild.ts b/scripts/gulpbuild.ts new file mode 100644 index 0000000..a4bc59f --- /dev/null +++ b/scripts/gulpbuild.ts @@ -0,0 +1,108 @@ +import './gulpinit' +import { resolve } from 'path' +import { mkdir } from 'fs/promises' +import { copy } from 'fs-extra' +// series 串行(顺序)执行 ,parallel并行执行 +import { series, parallel } from 'gulp' +import { run } from './utils/process' +import { withTaskName } from './utils/gulp' +import { projectRoot, pkgRoot, buildOutput } from "./config/paths" +import { mainProjectConfig, childProjectConfig } from "./config" +import type { MainProjectConfigItem } from "./config" + +const MICRO_BUILD_MAIN = process.env.MICRO_BUILD_MAIN || 'all' +const Main = mainProjectConfig[MICRO_BUILD_MAIN] || null + +// 构建主应用与子应用 +export const buildMainChild = () => { + const result = [] + if(Main) { + result.push(withTaskName(`buildMain:${MICRO_BUILD_MAIN}`, () => + run(`pnpm run ${Main.buildRun}`) + )) + + const subPro = Main['subproject'] + subPro.map(subProKey => { + const subProItem = childProjectConfig[subProKey] || null + if(subProItem) { + result.push(withTaskName(`buildChild:${subProKey}`, () => + run(`pnpm run ${subProItem.buildRun}`) + )) + } + }) + } else { + for(let key in mainProjectConfig){ + const item = mainProjectConfig[key] + result.push(withTaskName(`buildMain:${key}`, () => + run(`pnpm run ${item.buildRun}`) + )) + } + + for(let key in childProjectConfig){ + const item = childProjectConfig[key] + result.push(withTaskName(`buildChild:${key}`, () => + run(`pnpm run ${item.buildRun}`) + )) + } + } + + return result +} + +// 复制生成的子应用到指定生成的主应用中 +export const copyChildFilesToMain = (mainKey: string, main: MainProjectConfigItem) => { + const result = [] + const subPro = main['subproject'] + subPro.map(subProKey => { + const subProItem = childProjectConfig[subProKey] || null + if(subProItem) { + result.push(withTaskName(`copyChild:${subProKey}:to:${mainKey}`, () => + copy(resolve(pkgRoot, subProItem.rootDir, subProItem.outputDir), resolve(buildOutput, main.rootDir, main.buildChildParentName, subProItem.rootDir), { recursive: true }) + )) + } + }) + + return parallel(...result) +} + +// 复制指定生成完的主应用与旗下子应用 +export const copyBuildMainChild = (mainKey: string, main: MainProjectConfigItem) => { + const seriesResult = []; + + // 复制主框架 + seriesResult.push(withTaskName(`copyMain:${mainKey}`, () => + copy(resolve(projectRoot, main.rootDir, main.outputDir), resolve(buildOutput, main.rootDir), { recursive: true }) + )) + + // 在复制的主框架内部创建子应用上级目录 + seriesResult.push(withTaskName(`${mainKey}:createChildOutput`, () => + mkdir(resolve(buildOutput, main.rootDir, main.buildChildParentName), { recursive: true }) + )) + + // 复制生成的子应用到指定主应用 + seriesResult.push(copyChildFilesToMain(mainKey, main)) + + return series(...seriesResult) + +} + +// 复制所有生成完的主应用与子应用入口 +export const copyMainChildFiles = () => { + const result = [] + if(Main) { + result.push(copyBuildMainChild(MICRO_BUILD_MAIN, Main)) + } else { + for(let key in mainProjectConfig){ + const item = mainProjectConfig[key] + result.push(copyBuildMainChild(key, item)) + } + } + return result +} + +export default series( + withTaskName('clean', () => run('pnpm run clean')), + withTaskName('createOutput', () => mkdir(buildOutput, { recursive: true })), + parallel(...buildMainChild()), + parallel(...copyMainChildFiles()) +) diff --git a/scripts/gulpinit.ts b/scripts/gulpinit.ts new file mode 100644 index 0000000..48001d4 --- /dev/null +++ b/scripts/gulpinit.ts @@ -0,0 +1 @@ +import './server/env' diff --git a/scripts/gulpserve.ts b/scripts/gulpserve.ts new file mode 100644 index 0000000..27314dd --- /dev/null +++ b/scripts/gulpserve.ts @@ -0,0 +1,54 @@ +import './gulpinit' +// series 串行(顺序)执行 ,parallel并行执行 +import { /* series, */ parallel } from 'gulp' +import { run } from './utils/process' +import { withTaskName } from './utils/gulp' +import { mainProjectConfig, childProjectConfig } from "./config" + +// 启动主应用与子应用 +export const serveMainChild = () => { + + const result = [] + + const MICRO_SERVE_MAIN = process.env.MICRO_SERVE_MAIN || 'all' + const Main = mainProjectConfig[MICRO_SERVE_MAIN] || null + if(Main) { + + const subPro = Main['subproject'] + subPro.map(subProKey => { + const subProItem = childProjectConfig[subProKey] || null + if(subProItem) { + result.push(withTaskName(`serveChild:${subProKey}`, () => + run(`pnpm run ${subProItem.serveRun}`) + )) + } + }) + + result.push(withTaskName(`serveMain:${MICRO_SERVE_MAIN}`, () => + run(`pnpm run ${Main.serveRun}`) + )) + + } else { + + for(let key in childProjectConfig){ + const item = childProjectConfig[key] + result.push(withTaskName(`serveChild:${key}`, () => + run(`pnpm run ${item.serveRun}`) + )) + } + + + for(let key in mainProjectConfig){ + const item = mainProjectConfig[key] + result.push(withTaskName(`serveMain:${key}`, () => + run(`pnpm run ${item.serveRun}`) + )) + } + } + + return result +} + +export default parallel( + ...serveMainChild() +) diff --git a/scripts/server/env.js b/scripts/server/env.js new file mode 100644 index 0000000..fb70c1f --- /dev/null +++ b/scripts/server/env.js @@ -0,0 +1,57 @@ +/* eslint-disable */ +const fs = require("fs"); +const path = require("path"); + +const NODE_ENV = process.env.NODE_ENV || 'development'; + +function resolve (dir) { + return path.join(__dirname, '../../', dir);// .env文件的位置,项目根目录下 +} + +const envFile = resolve('.env'); + +// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use +const dotenvFiles = [ + `${envFile}.${NODE_ENV}.local`, + `${envFile}.${NODE_ENV}`, + // Don't include `.env.local` for `test` environment + // since normally you expect tests to produce the same + // results for everyone + NODE_ENV !== 'test' && `${envFile}.local`, + envFile, +].filter(Boolean); + + +// Load environment variables from .env* files. Suppress warnings using silent +// if this file is missing. dotenv will never modify any environment variables +// that have already been set. Variable expansion is supported in .env files. +// https://github.com/motdotla/dotenv +// https://github.com/motdotla/dotenv-expand +dotenvFiles.forEach(dotenvFile => { + if (fs.existsSync(dotenvFile)) { + require('dotenv-expand')( + require('dotenv').config({ + path: dotenvFile, + }) + ); + } +}); + + +const reg = /^(MICRO_)/; +const raw = Object.keys(process.env).filter(key => reg.test(key)).reduce( + (env, key) => { + env[key] = process.env[key]; + return env; + },{} +); + +const stringified = Object.keys(raw).reduce((env, key) => { + env[key] = JSON.stringify(raw[key]); + return env; +}, {}); + +module.exports = { + raw, + stringified +}; diff --git a/scripts/server/qiankun.ts b/scripts/server/qiankun.ts new file mode 100644 index 0000000..4f757d3 --- /dev/null +++ b/scripts/server/qiankun.ts @@ -0,0 +1,48 @@ +import { mainProjectConfig, childProjectConfig } from "../config"; + +export function childProjectAll(mainKey: string, props: Record = {}, container: string = '#subapp-viewport') { + const Apps: any = []; + const Main = mainProjectConfig[mainKey] || null; + if(!Main) { + return Apps; + } + + const subPro = Main['subproject'] + subPro.map(subProKey => { + const subProItem = childProjectConfig[subProKey] || null + if(subProItem) { + + Apps.push({ + name: subProKey, + entry: process.env.NODE_ENV === 'production' ? `/${Main.buildChildParentName}/${subProItem.rootDir}/`: `//${subProItem.host}:${subProItem.port}/`, + activeRule: `/${subProItem.rootDir}`, + container: container, // 子应用挂载的div + props: { + routerBase: `/${subProItem.rootDir}`, + ...props + }, + }) + + } + }) + + return Apps; +} + +/** + * 返回子项目入口 + * @param childKey 子项目名 + * @returns + */ +export function childProjectEntry(childKey: string): string { + const childProItem = childProjectConfig[childKey] || null + if(childProItem) { + return process.env.NODE_ENV === 'production' ? `/${process.env.MICRO_BUILD_CHILD_NAME}/${childProItem.rootDir}/`: `//${childProItem.host}:${childProItem.port}/` + } + return '' + +} + +export * from 'qiankun' +export * from '../config' +export * from './qiankunActions' diff --git a/scripts/server/qiankunActions.ts b/scripts/server/qiankunActions.ts new file mode 100644 index 0000000..fad9a61 --- /dev/null +++ b/scripts/server/qiankunActions.ts @@ -0,0 +1,8 @@ +import { initGlobalState, MicroAppStateActions } from 'qiankun' + +export const initState = { + i18nLocale: '' +} + +// 初始化 state +export const actions: MicroAppStateActions = initGlobalState(initState) diff --git a/scripts/utils/gulp.ts b/scripts/utils/gulp.ts new file mode 100644 index 0000000..300d8d0 --- /dev/null +++ b/scripts/utils/gulp.ts @@ -0,0 +1,4 @@ +import type { TaskFunction } from 'gulp' + +export const withTaskName = (name: string, fn: T) => + Object.assign(fn, { displayName: name }) diff --git a/scripts/utils/process.ts b/scripts/utils/process.ts new file mode 100644 index 0000000..a40aa90 --- /dev/null +++ b/scripts/utils/process.ts @@ -0,0 +1,27 @@ +import { spawn } from 'child_process' +import { green } from 'chalk' +import { projectRoot } from '../config/paths' + +export const run = async (command: string, cwd: string = projectRoot) => + new Promise((resolve, reject) => { + const [cmd, ...args] = command.split(' ') + console.log(`run: ${green(`${cmd} ${args.join(' ')}`)}`) + const app = spawn(cmd, args, { + cwd, + stdio: 'inherit', + shell: process.platform === 'win32', + }) + + const onProcessExit = () => app.kill('SIGHUP') + + app.on('close', (code) => { + process.removeListener('exit', onProcessExit) + + if (code === 0) resolve() + else + reject( + new Error(`Command failed. \n Command: ${command} \n Code: ${code}`) + ) + }) + process.on('exit', onProcessExit) + }) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..89edf05 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "baseUrl": ".", + "types": [ + "webpack-env", + "jest" + ], + "paths": { + "@@/*": [ + "/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "typings/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/typings/global.d.ts b/typings/global.d.ts new file mode 100644 index 0000000..98f38b7 --- /dev/null +++ b/typings/global.d.ts @@ -0,0 +1,9 @@ +declare global { + interface Window { + __QIANKUN_STARTED__: boolean; + __POWERED_BY_QIANKUN__: string; + __INJECTED_PUBLIC_PATH_BY_QIANKUN__: string; + } +} + +export {}