aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp
diff options
context:
space:
mode:
Diffstat (limited to 'Timeline/ClientApp')
-rw-r--r--Timeline/ClientApp/.editorconfig1
-rw-r--r--Timeline/ClientApp/.eslintrc.js17
-rw-r--r--Timeline/ClientApp/.pnp.js797
-rw-r--r--Timeline/ClientApp/package.json35
-rw-r--r--Timeline/ClientApp/src/app/App.tsx99
-rw-r--r--Timeline/ClientApp/src/app/about/About.tsx172
-rw-r--r--Timeline/ClientApp/src/app/common/AppBar.tsx107
-rw-r--r--Timeline/ClientApp/src/app/common/FileInput.tsx41
-rw-r--r--Timeline/ClientApp/src/app/index.sass44
-rw-r--r--Timeline/ClientApp/src/app/service-worker.tsx12
-rw-r--r--Timeline/ClientApp/src/app/services/DataHub.ts (renamed from Timeline/ClientApp/src/app/data/DataHub.ts)0
-rw-r--r--Timeline/ClientApp/src/app/services/alert.ts (renamed from Timeline/ClientApp/src/app/common/alert-service.ts)0
-rw-r--r--Timeline/ClientApp/src/app/services/common.ts (renamed from Timeline/ClientApp/src/app/data/common.ts)2
-rw-r--r--Timeline/ClientApp/src/app/services/timeline.ts (renamed from Timeline/ClientApp/src/app/data/timeline.ts)16
-rw-r--r--Timeline/ClientApp/src/app/services/user.ts (renamed from Timeline/ClientApp/src/app/data/user.ts)15
-rw-r--r--Timeline/ClientApp/src/app/settings/Settings.tsx221
-rw-r--r--Timeline/ClientApp/src/app/timeline/TimelineInfoCard.tsx110
-rw-r--r--Timeline/ClientApp/src/app/timeline/timeline-ui.sass35
-rw-r--r--Timeline/ClientApp/src/app/user/Login.tsx147
-rw-r--r--Timeline/ClientApp/src/app/user/UserInfoCard.tsx104
-rw-r--r--Timeline/ClientApp/src/app/utilities/type.ts1
-rw-r--r--Timeline/ClientApp/src/app/views/about/about.sass (renamed from Timeline/ClientApp/src/app/about/about.sass)0
-rw-r--r--Timeline/ClientApp/src/app/views/about/author-avatar.png (renamed from Timeline/ClientApp/src/app/about/author-avatar.png)bin12038 -> 12038 bytes
-rw-r--r--Timeline/ClientApp/src/app/views/about/github.png (renamed from Timeline/ClientApp/src/app/about/github.png)bin4268 -> 4268 bytes
-rw-r--r--Timeline/ClientApp/src/app/views/about/index.tsx164
-rw-r--r--Timeline/ClientApp/src/app/views/admin/Admin.tsx (renamed from Timeline/ClientApp/src/app/admin/Admin.tsx)29
-rw-r--r--Timeline/ClientApp/src/app/views/admin/UserAdmin.tsx (renamed from Timeline/ClientApp/src/app/admin/UserAdmin.tsx)49
-rw-r--r--Timeline/ClientApp/src/app/views/common/AppBar.tsx64
-rw-r--r--Timeline/ClientApp/src/app/views/common/BlobImage.tsx (renamed from Timeline/ClientApp/src/app/common/BlobImage.tsx)4
-rw-r--r--Timeline/ClientApp/src/app/views/common/ImageCropper.tsx (renamed from Timeline/ClientApp/src/app/common/ImageCropper.tsx)4
-rw-r--r--Timeline/ClientApp/src/app/views/common/LoadingButton.tsx29
-rw-r--r--Timeline/ClientApp/src/app/views/common/LoadingPage.tsx (renamed from Timeline/ClientApp/src/app/common/LoadingPage.tsx)4
-rw-r--r--Timeline/ClientApp/src/app/views/common/OperationDialog.tsx (renamed from Timeline/ClientApp/src/app/common/OperationDialog.tsx)125
-rw-r--r--Timeline/ClientApp/src/app/views/common/SearchInput.tsx (renamed from Timeline/ClientApp/src/app/common/SearchInput.tsx)14
-rw-r--r--Timeline/ClientApp/src/app/views/common/TimelineLogo.tsx (renamed from Timeline/ClientApp/src/app/common/TimelineLogo.tsx)0
-rw-r--r--Timeline/ClientApp/src/app/views/common/UserTimelineLogo.tsx (renamed from Timeline/ClientApp/src/app/common/UserTimelineLogo.tsx)0
-rw-r--r--Timeline/ClientApp/src/app/views/common/alert/AlertHost.tsx (renamed from Timeline/ClientApp/src/app/common/AlertHost.tsx)11
-rw-r--r--Timeline/ClientApp/src/app/views/common/alert/alert.sass (renamed from Timeline/ClientApp/src/app/common/alert.sass)0
-rw-r--r--Timeline/ClientApp/src/app/views/common/common.sass (renamed from Timeline/ClientApp/src/app/common/common.sass)0
-rw-r--r--Timeline/ClientApp/src/app/views/home/BoardWithUser.tsx (renamed from Timeline/ClientApp/src/app/home/BoardWithUser.tsx)8
-rw-r--r--Timeline/ClientApp/src/app/views/home/BoardWithoutUser.tsx (renamed from Timeline/ClientApp/src/app/home/BoardWithoutUser.tsx)6
-rw-r--r--Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx (renamed from Timeline/ClientApp/src/app/home/OfflineBoard.tsx)2
-rw-r--r--Timeline/ClientApp/src/app/views/home/TimelineBoard.tsx (renamed from Timeline/ClientApp/src/app/home/TimelineBoard.tsx)6
-rw-r--r--Timeline/ClientApp/src/app/views/home/TimelineCreateDialog.tsx (renamed from Timeline/ClientApp/src/app/home/TimelineCreateDialog.tsx)2
-rw-r--r--Timeline/ClientApp/src/app/views/home/home.sass (renamed from Timeline/ClientApp/src/app/home/home.sass)0
-rw-r--r--Timeline/ClientApp/src/app/views/home/index.tsx (renamed from Timeline/ClientApp/src/app/home/Home.tsx)19
-rw-r--r--Timeline/ClientApp/src/app/views/login/index.tsx151
-rw-r--r--Timeline/ClientApp/src/app/views/login/login.sass2
-rw-r--r--Timeline/ClientApp/src/app/views/settings/index.tsx209
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/CollapseButton.tsx23
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/InfoCardTemplate.tsx26
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/SyncStatusBadge.tsx58
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/Timeline.tsx (renamed from Timeline/ClientApp/src/app/timeline/Timeline.tsx)8
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/TimelineItem.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelineItem.tsx)91
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/TimelineMember.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelineMember.tsx)27
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/TimelinePageTemplate.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelinePageTemplate.tsx)17
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/TimelinePageTemplateUI.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelinePageTemplateUI.tsx)165
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/TimelinePostEdit.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelinePostEdit.tsx)35
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelinePropertyChangeDialog.tsx)3
-rw-r--r--Timeline/ClientApp/src/app/views/timeline-common/timeline-common.sass (renamed from Timeline/ClientApp/src/app/timeline/timeline.sass)61
-rw-r--r--Timeline/ClientApp/src/app/views/timeline/TimelineDeleteDialog.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelineDeleteDialog.tsx)3
-rw-r--r--Timeline/ClientApp/src/app/views/timeline/TimelineInfoCard.tsx85
-rw-r--r--Timeline/ClientApp/src/app/views/timeline/TimelinePageUI.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelinePageUI.tsx)7
-rw-r--r--Timeline/ClientApp/src/app/views/timeline/index.tsx (renamed from Timeline/ClientApp/src/app/timeline/TimelinePage.tsx)2
-rw-r--r--Timeline/ClientApp/src/app/views/timeline/timeline.sass0
-rw-r--r--Timeline/ClientApp/src/app/views/user/ChangeAvatarDialog.tsx (renamed from Timeline/ClientApp/src/app/user/ChangeAvatarDialog.tsx)96
-rw-r--r--Timeline/ClientApp/src/app/views/user/ChangeNicknameDialog.tsx (renamed from Timeline/ClientApp/src/app/user/ChangeNicknameDialog.tsx)0
-rw-r--r--Timeline/ClientApp/src/app/views/user/UserInfoCard.tsx80
-rw-r--r--Timeline/ClientApp/src/app/views/user/UserPageUI.tsx (renamed from Timeline/ClientApp/src/app/user/UserPage.tsx)9
-rw-r--r--Timeline/ClientApp/src/app/views/user/index.tsx (renamed from Timeline/ClientApp/src/app/user/User.tsx)17
-rw-r--r--Timeline/ClientApp/src/app/views/user/user.sass (renamed from Timeline/ClientApp/src/app/user/user-page.sass)3
-rw-r--r--Timeline/ClientApp/src/tsconfig.json8
-rw-r--r--Timeline/ClientApp/webpack.common.js2
-rw-r--r--Timeline/ClientApp/yarn.lock732
74 files changed, 2263 insertions, 2173 deletions
diff --git a/Timeline/ClientApp/.editorconfig b/Timeline/ClientApp/.editorconfig
index 54d8316a..779719e0 100644
--- a/Timeline/ClientApp/.editorconfig
+++ b/Timeline/ClientApp/.editorconfig
@@ -1,4 +1,5 @@
root = true
+end_of_line = lf
[*.ts]
tab_width = 2
diff --git a/Timeline/ClientApp/.eslintrc.js b/Timeline/ClientApp/.eslintrc.js
index 830a2aa4..900489ed 100644
--- a/Timeline/ClientApp/.eslintrc.js
+++ b/Timeline/ClientApp/.eslintrc.js
@@ -1,5 +1,3 @@
-const path = require("path");
-
module.exports = {
env: {
browser: true,
@@ -15,8 +13,6 @@ module.exports = {
"prettier/react",
"prettier/@typescript-eslint",
"plugin:react-hooks/recommended",
- "plugin:import/recommended",
- "plugin:import/typescript",
],
globals: {
Atomics: "readonly",
@@ -30,16 +26,11 @@ module.exports = {
},
sourceType: "module",
},
- plugins: ["react", "@typescript-eslint", "react-hooks", "import"],
+ plugins: ["react", "@typescript-eslint", "react-hooks"],
settings: {
react: {
version: "detect",
},
- "import/resolver": {
- webpack: {
- config: path.resolve(__dirname, "webpack.config.dev.js"),
- },
- },
},
rules: {
"react/prop-types": "off",
@@ -52,11 +43,5 @@ module.exports = {
allowHigherOrderFunctions: true,
},
],
- "import/order": [
- "warn",
- {
- "newlines-between": "always",
- },
- ],
},
};
diff --git a/Timeline/ClientApp/.pnp.js b/Timeline/ClientApp/.pnp.js
index ef53bd2c..fbd1b188 100644
--- a/Timeline/ClientApp/.pnp.js
+++ b/Timeline/ClientApp/.pnp.js
@@ -79,15 +79,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"@types/lodash",
- "npm:4.14.159::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.159.tgz"
+ "npm:4.14.161::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz"
],
[
"@types/node",
- "npm:14.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.0.tgz"
+ "npm:14.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.2.tgz"
],
[
"@types/react",
- "npm:16.9.46::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.46.tgz"
+ "npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"
],
[
"@types/react-dom",
@@ -102,12 +102,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"npm:5.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router%2Fdownload%2F%40types%2Freact-router-5.1.8.tgz"
],
[
- "@types/react-router-dom",
- "npm:5.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-dom%2Fdownload%2F%40types%2Freact-router-dom-5.1.5.tgz"
+ "@types/react-router-bootstrap",
+ "npm:0.24.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-bootstrap%2Fdownload%2F%40types%2Freact-router-bootstrap-0.24.5.tgz"
],
[
- "@types/reactstrap",
- "npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freactstrap%2Fdownload%2F%40types%2Freactstrap-8.5.1.tgz"
+ "@types/react-router-dom",
+ "npm:5.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-dom%2Fdownload%2F%40types%2Freact-router-dom-5.1.5.tgz"
],
[
"@types/webpack-env",
@@ -119,15 +119,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"@typescript-eslint/eslint-plugin",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.9.1.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.10.1.tgz"
],
[
"@typescript-eslint/parser",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.9.1.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.10.1.tgz"
],
[
"@yarnpkg/pnpify",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.1.0.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.2.1.tgz"
],
[
"axios",
@@ -147,7 +147,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"bootstrap-icons",
- "npm:1.0.0-alpha5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0-alpha5.tgz"
+ "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"
],
[
"classnames",
@@ -163,7 +163,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"copy-webpack-plugin",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.0.3.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.1.0.tgz"
],
[
"core-js",
@@ -175,7 +175,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"css-loader",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.1.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.2.tgz"
],
[
"eslint",
@@ -207,11 +207,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"file-loader",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.0.0.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.1.0.tgz"
],
[
"html-webpack-plugin",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.3.0.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.4.1.tgz"
],
[
"http-server",
@@ -235,7 +235,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"mini-css-extract-plugin",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.10.0.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.11.0.tgz"
],
[
"pepjs",
@@ -255,13 +255,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"prettier",
- "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.0.tgz"
+ "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.1.tgz"
],
[
"react",
"npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"
],
[
+ "react-bootstrap",
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-bootstrap%2Fdownload%2Freact-bootstrap-1.3.0.tgz"
+ ],
+ [
"react-dom",
"virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"
],
@@ -271,7 +275,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"react-i18next",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.1.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.2.tgz"
],
[
"react-inlinesvg",
@@ -286,12 +290,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router%2Fdownload%2Freact-router-5.2.0.tgz"
],
[
- "react-router-dom",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-dom%2Fdownload%2Freact-router-dom-5.2.0.tgz"
+ "react-router-bootstrap",
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.25.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-bootstrap%2Fdownload%2Freact-router-bootstrap-0.25.0.tgz"
],
[
- "reactstrap",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freactstrap%2Fdownload%2Freactstrap-8.5.1.tgz"
+ "react-router-dom",
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-dom%2Fdownload%2Freact-router-dom-5.2.0.tgz"
],
[
"regenerator-runtime",
@@ -307,7 +311,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
[
"sass-loader",
- "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:9.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-9.0.3.tgz"
+ "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-10.0.1.tgz"
],
[
"style-loader",
@@ -385,31 +389,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@hot-loader/react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hot-loader%2Freact-dom%2Fdownload%2F%40hot-loader%2Freact-dom-16.13.0.tgz"],
["@types/classnames", "npm:2.2.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fclassnames%2Fdownload%2F%40types%2Fclassnames-2.2.10.tgz"],
["@types/crypto-js", "npm:3.1.47::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcrypto-js%2Fdownload%2F%40types%2Fcrypto-js-3.1.47.tgz"],
- ["@types/lodash", "npm:4.14.159::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.159.tgz"],
- ["@types/node", "npm:14.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.0.tgz"],
- ["@types/react", "npm:16.9.46::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.46.tgz"],
+ ["@types/lodash", "npm:4.14.161::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz"],
+ ["@types/node", "npm:14.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.2.tgz"],
+ ["@types/react", "npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"],
["@types/react-dom", "npm:16.9.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-dom%2Fdownload%2F%40types%2Freact-dom-16.9.8.tgz"],
["@types/react-responsive", "npm:8.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-responsive%2Fdownload%2F%40types%2Freact-responsive-8.0.2.tgz"],
["@types/react-router", "npm:5.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router%2Fdownload%2F%40types%2Freact-router-5.1.8.tgz"],
+ ["@types/react-router-bootstrap", "npm:0.24.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-bootstrap%2Fdownload%2F%40types%2Freact-router-bootstrap-0.24.5.tgz"],
["@types/react-router-dom", "npm:5.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-dom%2Fdownload%2F%40types%2Freact-router-dom-5.1.5.tgz"],
- ["@types/reactstrap", "npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freactstrap%2Fdownload%2F%40types%2Freactstrap-8.5.1.tgz"],
["@types/webpack-env", "npm:1.15.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-env%2Fdownload%2F%40types%2Fwebpack-env-1.15.2.tgz"],
["@types/xregexp", "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fxregexp%2Fdownload%2F%40types%2Fxregexp-4.3.0.tgz"],
- ["@typescript-eslint/eslint-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.9.1.tgz"],
- ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.9.1.tgz"],
- ["@yarnpkg/pnpify", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.1.0.tgz"],
+ ["@typescript-eslint/eslint-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.10.1.tgz"],
+ ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.10.1.tgz"],
+ ["@yarnpkg/pnpify", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.2.1.tgz"],
["axios", "npm:0.20.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.20.0.tgz"],
["babel-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz"],
["babel-plugin-transform-builtin-extend", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-transform-builtin-extend%2Fdownload%2Fbabel-plugin-transform-builtin-extend-1.1.2.tgz"],
["bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap%2Fdownload%2Fbootstrap-4.5.2.tgz"],
- ["bootstrap-icons", "npm:1.0.0-alpha5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0-alpha5.tgz"],
+ ["bootstrap-icons", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"],
["classnames", "npm:2.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.2.6.tgz"],
["clean-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-webpack-plugin%2Fdownload%2Fclean-webpack-plugin-3.0.0.tgz"],
["clsx", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclsx%2Fdownload%2Fclsx-1.1.1.tgz"],
- ["copy-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.0.3.tgz"],
+ ["copy-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.1.0.tgz"],
["core-js", "npm:3.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz"],
["crypto-js", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-js%2Fdownload%2Fcrypto-js-4.0.0.tgz"],
- ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.1.tgz"],
+ ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.2.tgz"],
["eslint", "npm:7.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.7.0.tgz"],
["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.11.0.tgz"],
["eslint-import-resolver-webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.12.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-import-resolver-webpack%2Fdownload%2Feslint-import-resolver-webpack-0.12.2.tgz"],
@@ -417,32 +421,33 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["eslint-plugin-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prettier%2Fdownload%2Feslint-plugin-prettier-3.1.4.tgz"],
["eslint-plugin-react", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.20.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react%2Fdownload%2Feslint-plugin-react-7.20.6.tgz"],
["eslint-plugin-react-hooks", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react-hooks%2Fdownload%2Feslint-plugin-react-hooks-4.1.0.tgz"],
- ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.0.0.tgz"],
- ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.3.0.tgz"],
+ ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.1.0.tgz"],
+ ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.4.1.tgz"],
["http-server", "npm:0.12.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-server%2Fdownload%2Fhttp-server-0.12.3.tgz"],
["i18next", "npm:19.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fi18next%2Fdownload%2Fi18next-19.7.0.tgz"],
["i18next-browser-languagedetector", "npm:6.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fi18next-browser-languagedetector%2Fdownload%2Fi18next-browser-languagedetector-6.0.1.tgz"],
["localforage", "npm:1.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flocalforage%2Fdownload%2Flocalforage-1.9.0.tgz"],
["lodash", "npm:4.17.20::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz"],
- ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.10.0.tgz"],
+ ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.11.0.tgz"],
["pepjs", "npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpepjs%2Fdownload%2Fpepjs-0.5.2.tgz"],
["pnp-webpack-plugin", "npm:1.6.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpnp-webpack-plugin%2Fdownload%2Fpnp-webpack-plugin-1.6.4.tgz"],
["postcss-loader", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz"],
["postcss-preset-env", "npm:6.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-preset-env%2Fdownload%2Fpostcss-preset-env-6.7.0.tgz"],
- ["prettier", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.0.tgz"],
+ ["prettier", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.1.tgz"],
["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
+ ["react-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-bootstrap%2Fdownload%2Freact-bootstrap-1.3.0.tgz"],
["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"],
["react-hot-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.12.21::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-hot-loader%2Fdownload%2Freact-hot-loader-4.12.21.tgz"],
- ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.1.tgz"],
+ ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.2.tgz"],
["react-inlinesvg", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-inlinesvg%2Fdownload%2Freact-inlinesvg-2.0.0.tgz"],
["react-responsive", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-responsive%2Fdownload%2Freact-responsive-8.1.0.tgz"],
["react-router", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router%2Fdownload%2Freact-router-5.2.0.tgz"],
+ ["react-router-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.25.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-bootstrap%2Fdownload%2Freact-router-bootstrap-0.25.0.tgz"],
["react-router-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-dom%2Fdownload%2Freact-router-dom-5.2.0.tgz"],
- ["reactstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freactstrap%2Fdownload%2Freactstrap-8.5.1.tgz"],
["regenerator-runtime", "npm:0.13.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz"],
["rxjs", "npm:6.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.2.tgz"],
["sass", "npm:1.26.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass%2Fdownload%2Fsass-1.26.10.tgz"],
- ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:9.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-9.0.3.tgz"],
+ ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-10.0.1.tgz"],
["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstyle-loader%2Fdownload%2Fstyle-loader-1.2.1.tgz"],
["ts-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-loader%2Fdownload%2Fts-loader-8.0.3.tgz"],
["typescript", "patch:typescript@npm%3A4.0.2%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ftypescript%252Fdownload%252Ftypescript-4.0.2.tgz#builtin<compat/typescript>::version=4.0.2&hash=5b02a2"],
@@ -2894,6 +2899,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["regenerator-runtime", "npm:0.13.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz"]
],
"linkType": "HARD",
+ }],
+ ["npm:7.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz", {
+ "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.11.2-84d52b99b9-2f127ad60a.zip/node_modules/@babel/runtime/",
+ "packageDependencies": [
+ ["@babel/runtime", "npm:7.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz"],
+ ["regenerator-runtime", "npm:0.13.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz"]
+ ],
+ "linkType": "HARD",
}]
]],
["@babel/runtime-corejs3", [
@@ -3092,6 +3105,43 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["@popperjs/core", [
+ ["npm:2.4.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.4.4.tgz", {
+ "packageLocation": "./.yarn/cache/@popperjs-core-npm-2.4.4-0690f2896b-49a1e6cfa2.zip/node_modules/@popperjs/core/",
+ "packageDependencies": [
+ ["@popperjs/core", "npm:2.4.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.4.4.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
+ ["@restart/context", [
+ ["virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fcontext%2Fdownload%2F%40restart%2Fcontext-2.1.4.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@restart-context-virtual-27eb50dd8d/0/cache/@restart-context-npm-2.1.4-ad630f5721-f9dd1416c1.zip/node_modules/@restart/context/",
+ "packageDependencies": [
+ ["@restart/context", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fcontext%2Fdownload%2F%40restart%2Fcontext-2.1.4.tgz"],
+ ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"]
+ ],
+ "packagePeers": [
+ "react"
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
+ ["@restart/hooks", [
+ ["virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:0.3.25::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fhooks%2Fdownload%2F%40restart%2Fhooks-0.3.25.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@restart-hooks-virtual-a2069ac77d/0/cache/@restart-hooks-npm-0.3.25-f85d375986-08aefc359f.zip/node_modules/@restart/hooks/",
+ "packageDependencies": [
+ ["@restart/hooks", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:0.3.25::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fhooks%2Fdownload%2F%40restart%2Fhooks-0.3.25.tgz"],
+ ["lodash", "npm:4.17.19::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz"],
+ ["lodash-es", "npm:4.17.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash-es%2Fdownload%2Flodash-es-4.17.15.tgz"],
+ ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"]
+ ],
+ "packagePeers": [
+ "react"
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["@rollup/plugin-node-resolve", [
["virtual:3e7d201acb70f99b496fd22382494a547adba7ced83157fcf203a35a809a1a86e9fcdadc98baf8c5919858aa7474058982ca7332a042017e29b0e7f90348de11#npm:7.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40rollup%2Fplugin-node-resolve%2Fdownload%2F%40rollup%2Fplugin-node-resolve-7.1.3.tgz", {
"packageLocation": "./.yarn/$$virtual/@rollup-plugin-node-resolve-virtual-1eac73bdde/0/cache/@rollup-plugin-node-resolve-npm-7.1.3-07432edf25-4d751a407f.zip/node_modules/@rollup/plugin-node-resolve/",
@@ -3292,6 +3342,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["@types/invariant", [
+ ["npm:2.2.34::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Finvariant%2Fdownload%2F%40types%2Finvariant-2.2.34.tgz", {
+ "packageLocation": "./.yarn/cache/@types-invariant-npm-2.2.34-dc486af7a1-d0ecc665e5.zip/node_modules/@types/invariant/",
+ "packageDependencies": [
+ ["@types/invariant", "npm:2.2.34::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Finvariant%2Fdownload%2F%40types%2Finvariant-2.2.34.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["@types/json-schema", [
["npm:7.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz", {
"packageLocation": "./.yarn/cache/@types-json-schema-npm-7.0.5-8c7a0ff5b6-6290f9fe93.zip/node_modules/@types/json-schema/",
@@ -3321,10 +3380,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@types/lodash", [
- ["npm:4.14.159::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.159.tgz", {
- "packageLocation": "./.yarn/cache/@types-lodash-npm-4.14.159-de2da0836d-15fc1b6909.zip/node_modules/@types/lodash/",
+ ["npm:4.14.161::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz", {
+ "packageLocation": "./.yarn/cache/@types-lodash-npm-4.14.161-fc1b1238ad-c3657517da.zip/node_modules/@types/lodash/",
"packageDependencies": [
- ["@types/lodash", "npm:4.14.159::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.159.tgz"]
+ ["@types/lodash", "npm:4.14.161::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz"]
],
"linkType": "HARD",
}]
@@ -3353,10 +3412,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
"linkType": "HARD",
}],
- ["npm:14.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.0.tgz", {
- "packageLocation": "./.yarn/cache/@types-node-npm-14.6.0-8de88b91df-ff23553ab7.zip/node_modules/@types/node/",
+ ["npm:14.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.2.tgz", {
+ "packageLocation": "./.yarn/cache/@types-node-npm-14.6.2-46f5ae4338-e88f4749fd.zip/node_modules/@types/node/",
"packageDependencies": [
- ["@types/node", "npm:14.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.0.tgz"]
+ ["@types/node", "npm:14.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.2.tgz"]
],
"linkType": "HARD",
}]
@@ -3380,10 +3439,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
"linkType": "HARD",
}],
- ["npm:16.9.46::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.46.tgz", {
- "packageLocation": "./.yarn/cache/@types-react-npm-16.9.46-49309c9681-ad8d07195d.zip/node_modules/@types/react/",
+ ["npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz", {
+ "packageLocation": "./.yarn/cache/@types-react-npm-16.9.49-eebeaec305-cf5dabe1e9.zip/node_modules/@types/react/",
"packageDependencies": [
- ["@types/react", "npm:16.9.46::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.46.tgz"],
+ ["@types/react", "npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"],
["@types/prop-types", "npm:15.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fprop-types%2Fdownload%2F%40types%2Fprop-types-15.7.3.tgz"],
["csstype", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsstype%2Fdownload%2Fcsstype-3.0.2.tgz"]
],
@@ -3421,6 +3480,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["@types/react-router-bootstrap", [
+ ["npm:0.24.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-bootstrap%2Fdownload%2F%40types%2Freact-router-bootstrap-0.24.5.tgz", {
+ "packageLocation": "./.yarn/cache/@types-react-router-bootstrap-npm-0.24.5-e11aa3d45e-08b8ed99b7.zip/node_modules/@types/react-router-bootstrap/",
+ "packageDependencies": [
+ ["@types/react-router-bootstrap", "npm:0.24.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-bootstrap%2Fdownload%2F%40types%2Freact-router-bootstrap-0.24.5.tgz"],
+ ["@types/react", "npm:16.9.43::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.43.tgz"],
+ ["@types/react-router-dom", "npm:5.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-dom%2Fdownload%2F%40types%2Freact-router-dom-5.1.5.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["@types/react-router-dom", [
["npm:5.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-dom%2Fdownload%2F%40types%2Freact-router-dom-5.1.5.tgz", {
"packageLocation": "./.yarn/cache/@types-react-router-dom-npm-5.1.5-bb10e455cb-d25c11cb71.zip/node_modules/@types/react-router-dom/",
@@ -3433,13 +3503,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
- ["@types/reactstrap", [
- ["npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freactstrap%2Fdownload%2F%40types%2Freactstrap-8.5.1.tgz", {
- "packageLocation": "./.yarn/cache/@types-reactstrap-npm-8.5.1-9008a6014f-87b383af72.zip/node_modules/@types/reactstrap/",
+ ["@types/react-transition-group", [
+ ["npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-transition-group%2Fdownload%2F%40types%2Freact-transition-group-4.4.0.tgz", {
+ "packageLocation": "./.yarn/cache/@types-react-transition-group-npm-4.4.0-44ecca32b5-b761f70623.zip/node_modules/@types/react-transition-group/",
"packageDependencies": [
- ["@types/reactstrap", "npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freactstrap%2Fdownload%2F%40types%2Freactstrap-8.5.1.tgz"],
- ["@types/react", "npm:16.9.43::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.43.tgz"],
- ["popper.js", "npm:1.16.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpopper.js%2Fdownload%2Fpopper.js-1.16.1.tgz"]
+ ["@types/react-transition-group", "npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-transition-group%2Fdownload%2F%40types%2Freact-transition-group-4.4.0.tgz"],
+ ["@types/react", "npm:16.9.43::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.43.tgz"]
],
"linkType": "HARD",
}]
@@ -3492,6 +3561,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["@types/warning", [
+ ["npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwarning%2Fdownload%2F%40types%2Fwarning-3.0.0.tgz", {
+ "packageLocation": "./.yarn/cache/@types-warning-npm-3.0.0-32d6269905-cb7a16aa88.zip/node_modules/@types/warning/",
+ "packageDependencies": [
+ ["@types/warning", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwarning%2Fdownload%2F%40types%2Fwarning-3.0.0.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["@types/webpack", [
["npm:4.41.21::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack%2Fdownload%2F%40types%2Fwebpack-4.41.21.tgz", {
"packageLocation": "./.yarn/cache/@types-webpack-npm-4.41.21-bf9d77607b-3a02667221.zip/node_modules/@types/webpack/",
@@ -3538,18 +3616,18 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@typescript-eslint/eslint-plugin", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.9.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/@typescript-eslint-eslint-plugin-virtual-6b090f53c6/0/cache/@typescript-eslint-eslint-plugin-npm-3.9.1-2cda56b7cb-252bab346c.zip/node_modules/@typescript-eslint/eslint-plugin/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.10.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@typescript-eslint-eslint-plugin-virtual-5165ea3fda/0/cache/@typescript-eslint-eslint-plugin-npm-3.10.1-5f5250615d-c50fefc3df.zip/node_modules/@typescript-eslint/eslint-plugin/",
"packageDependencies": [
- ["@typescript-eslint/eslint-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.9.1.tgz"],
- ["@typescript-eslint/experimental-utils", "virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.9.1.tgz"],
- ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.9.1.tgz"],
+ ["@typescript-eslint/eslint-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.10.1.tgz"],
+ ["@typescript-eslint/experimental-utils", "virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.10.1.tgz"],
+ ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.10.1.tgz"],
["debug", "virtual:1e7fd7cbf468e9bdfe63ec86a342d405dc91ac84c8bb9894805983f8c23226bd5a88ff6423eed3317b91c46b7e9258b9c2030fa7275a62d19703cdbb018c2efc#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"],
["eslint", "npm:7.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.7.0.tgz"],
["functional-red-black-tree", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffunctional-red-black-tree%2Fdownload%2Ffunctional-red-black-tree-1.0.1.tgz"],
["regexpp", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpp%2Fdownload%2Fregexpp-3.1.0.tgz"],
["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"],
- ["tsutils", "virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
+ ["tsutils", "virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
["typescript", "patch:typescript@npm%3A4.0.2%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ftypescript%252Fdownload%252Ftypescript-4.0.2.tgz#builtin<compat/typescript>::version=4.0.2&hash=5b02a2"]
],
"packagePeers": [
@@ -3561,13 +3639,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@typescript-eslint/experimental-utils", [
- ["virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.9.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/@typescript-eslint-experimental-utils-virtual-df4286ad2d/0/cache/@typescript-eslint-experimental-utils-npm-3.9.1-40f2b41373-8092e411ad.zip/node_modules/@typescript-eslint/experimental-utils/",
+ ["virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.10.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@typescript-eslint-experimental-utils-virtual-2aaf9155e2/0/cache/@typescript-eslint-experimental-utils-npm-3.10.1-38f855098b-b1be2620f0.zip/node_modules/@typescript-eslint/experimental-utils/",
"packageDependencies": [
- ["@typescript-eslint/experimental-utils", "virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.9.1.tgz"],
+ ["@typescript-eslint/experimental-utils", "virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.10.1.tgz"],
["@types/json-schema", "npm:7.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz"],
- ["@typescript-eslint/types", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.9.1.tgz"],
- ["@typescript-eslint/typescript-estree", "virtual:df4286ad2dbd8990171b878316c1fe9598308406e0387a68bb607fb89d218a32cd304b92b54ad46892acd7ac98d4f454c214ce71de95737e5e709e231b69559a#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.9.1.tgz"],
+ ["@typescript-eslint/types", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.10.1.tgz"],
+ ["@typescript-eslint/typescript-estree", "virtual:2aaf9155e27a46699b8ab0fab5a7fc4aa4e8b01913d518650e012efac9650a41434f0a7045bc4d70555ec62247fdff5527dd1814a9902551924ffdfc74f8a707#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.10.1.tgz"],
["eslint", "npm:7.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.7.0.tgz"],
["eslint-scope", "npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.0.tgz"],
["eslint-utils", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz"]
@@ -3579,14 +3657,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@typescript-eslint/parser", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.9.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/@typescript-eslint-parser-virtual-da4b860a85/0/cache/@typescript-eslint-parser-npm-3.9.1-b73c5ce5bf-ed9a482969.zip/node_modules/@typescript-eslint/parser/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.10.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@typescript-eslint-parser-virtual-b54e8cb824/0/cache/@typescript-eslint-parser-npm-3.10.1-0b833151a5-17289e48d2.zip/node_modules/@typescript-eslint/parser/",
"packageDependencies": [
- ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.9.1.tgz"],
+ ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.10.1.tgz"],
["@types/eslint-visitor-keys", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Feslint-visitor-keys%2Fdownload%2F%40types%2Feslint-visitor-keys-1.0.0.tgz"],
- ["@typescript-eslint/experimental-utils", "virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.9.1.tgz"],
- ["@typescript-eslint/types", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.9.1.tgz"],
- ["@typescript-eslint/typescript-estree", "virtual:da4b860a853ff200ac4ab1f139143c870c7a3642b2e9964b44a445f50c829ca897de6d1c95ed33aa2b04e0f49f3c030468ee540e04dd8c5a3cbd692a0a24d0d4#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.9.1.tgz"],
+ ["@typescript-eslint/experimental-utils", "virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.10.1.tgz"],
+ ["@typescript-eslint/types", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.10.1.tgz"],
+ ["@typescript-eslint/typescript-estree", "virtual:b54e8cb824e5dc88ebabb4d789035b7dfc5e166f8b07c4b2130d969e588c20f1689fe20056292a72feeeb14153969cd5a32e748e1f4605681291d3bea6b15353#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.10.1.tgz"],
["eslint", "npm:7.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.7.0.tgz"],
["eslint-visitor-keys", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz"],
["typescript", "patch:typescript@npm%3A4.0.2%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ftypescript%252Fdownload%252Ftypescript-4.0.2.tgz#builtin<compat/typescript>::version=4.0.2&hash=5b02a2"]
@@ -3599,47 +3677,47 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@typescript-eslint/types", [
- ["npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.9.1.tgz", {
- "packageLocation": "./.yarn/cache/@typescript-eslint-types-npm-3.9.1-cb562eed7e-0591ff7691.zip/node_modules/@typescript-eslint/types/",
+ ["npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.10.1.tgz", {
+ "packageLocation": "./.yarn/cache/@typescript-eslint-types-npm-3.10.1-8619fe939a-cc075f8da4.zip/node_modules/@typescript-eslint/types/",
"packageDependencies": [
- ["@typescript-eslint/types", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.9.1.tgz"]
+ ["@typescript-eslint/types", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.10.1.tgz"]
],
"linkType": "HARD",
}]
]],
["@typescript-eslint/typescript-estree", [
- ["virtual:da4b860a853ff200ac4ab1f139143c870c7a3642b2e9964b44a445f50c829ca897de6d1c95ed33aa2b04e0f49f3c030468ee540e04dd8c5a3cbd692a0a24d0d4#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.9.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/@typescript-eslint-typescript-estree-virtual-da7cc4b7f8/0/cache/@typescript-eslint-typescript-estree-npm-3.9.1-79a46ee31e-f9a962b6ff.zip/node_modules/@typescript-eslint/typescript-estree/",
+ ["virtual:2aaf9155e27a46699b8ab0fab5a7fc4aa4e8b01913d518650e012efac9650a41434f0a7045bc4d70555ec62247fdff5527dd1814a9902551924ffdfc74f8a707#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.10.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@typescript-eslint-typescript-estree-virtual-b6acae5f73/0/cache/@typescript-eslint-typescript-estree-npm-3.10.1-51268eea08-c048aa8b80.zip/node_modules/@typescript-eslint/typescript-estree/",
"packageDependencies": [
- ["@typescript-eslint/typescript-estree", "virtual:da4b860a853ff200ac4ab1f139143c870c7a3642b2e9964b44a445f50c829ca897de6d1c95ed33aa2b04e0f49f3c030468ee540e04dd8c5a3cbd692a0a24d0d4#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.9.1.tgz"],
- ["@typescript-eslint/types", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.9.1.tgz"],
- ["@typescript-eslint/visitor-keys", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.9.1.tgz"],
+ ["@typescript-eslint/typescript-estree", "virtual:2aaf9155e27a46699b8ab0fab5a7fc4aa4e8b01913d518650e012efac9650a41434f0a7045bc4d70555ec62247fdff5527dd1814a9902551924ffdfc74f8a707#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.10.1.tgz"],
+ ["@typescript-eslint/types", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.10.1.tgz"],
+ ["@typescript-eslint/visitor-keys", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.10.1.tgz"],
["debug", "virtual:1e7fd7cbf468e9bdfe63ec86a342d405dc91ac84c8bb9894805983f8c23226bd5a88ff6423eed3317b91c46b7e9258b9c2030fa7275a62d19703cdbb018c2efc#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"],
["glob", "npm:7.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz"],
["is-glob", "npm:4.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-glob%2Fdownload%2Fis-glob-4.0.1.tgz"],
["lodash", "npm:4.17.19::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz"],
["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"],
- ["tsutils", "virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
- ["typescript", "patch:typescript@npm%3A4.0.2%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ftypescript%252Fdownload%252Ftypescript-4.0.2.tgz#builtin<compat/typescript>::version=4.0.2&hash=5b02a2"]
+ ["tsutils", "virtual:b6acae5f73b5b0902a3e77295572fbd9d3ef34b910a76823f09dad2fa25c16a18217e3e3476447e966fa9244650b893ac9f141ee7ea9e580cdcf46bc125b1efd#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
+ ["typescript", null]
],
"packagePeers": [
"typescript"
],
"linkType": "HARD",
}],
- ["virtual:df4286ad2dbd8990171b878316c1fe9598308406e0387a68bb607fb89d218a32cd304b92b54ad46892acd7ac98d4f454c214ce71de95737e5e709e231b69559a#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.9.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/@typescript-eslint-typescript-estree-virtual-74f3ce4730/0/cache/@typescript-eslint-typescript-estree-npm-3.9.1-79a46ee31e-f9a962b6ff.zip/node_modules/@typescript-eslint/typescript-estree/",
+ ["virtual:b54e8cb824e5dc88ebabb4d789035b7dfc5e166f8b07c4b2130d969e588c20f1689fe20056292a72feeeb14153969cd5a32e748e1f4605681291d3bea6b15353#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.10.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@typescript-eslint-typescript-estree-virtual-9ccca5d320/0/cache/@typescript-eslint-typescript-estree-npm-3.10.1-51268eea08-c048aa8b80.zip/node_modules/@typescript-eslint/typescript-estree/",
"packageDependencies": [
- ["@typescript-eslint/typescript-estree", "virtual:df4286ad2dbd8990171b878316c1fe9598308406e0387a68bb607fb89d218a32cd304b92b54ad46892acd7ac98d4f454c214ce71de95737e5e709e231b69559a#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.9.1.tgz"],
- ["@typescript-eslint/types", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.9.1.tgz"],
- ["@typescript-eslint/visitor-keys", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.9.1.tgz"],
+ ["@typescript-eslint/typescript-estree", "virtual:b54e8cb824e5dc88ebabb4d789035b7dfc5e166f8b07c4b2130d969e588c20f1689fe20056292a72feeeb14153969cd5a32e748e1f4605681291d3bea6b15353#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.10.1.tgz"],
+ ["@typescript-eslint/types", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.10.1.tgz"],
+ ["@typescript-eslint/visitor-keys", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.10.1.tgz"],
["debug", "virtual:1e7fd7cbf468e9bdfe63ec86a342d405dc91ac84c8bb9894805983f8c23226bd5a88ff6423eed3317b91c46b7e9258b9c2030fa7275a62d19703cdbb018c2efc#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"],
["glob", "npm:7.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz"],
["is-glob", "npm:4.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-glob%2Fdownload%2Fis-glob-4.0.1.tgz"],
["lodash", "npm:4.17.19::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz"],
["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"],
- ["tsutils", "virtual:74f3ce4730be82a39c05577948e092efbe436415fbae850d9d5d07bee35df41e3ecfd8a5b58d019a2990d0c5ad4c8a28fe10a468f8ed2307a1f4ca468609e708#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
- ["typescript", null]
+ ["tsutils", "virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
+ ["typescript", "patch:typescript@npm%3A4.0.2%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ftypescript%252Fdownload%252Ftypescript-4.0.2.tgz#builtin<compat/typescript>::version=4.0.2&hash=5b02a2"]
],
"packagePeers": [
"typescript"
@@ -3648,10 +3726,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@typescript-eslint/visitor-keys", [
- ["npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.9.1.tgz", {
- "packageLocation": "./.yarn/cache/@typescript-eslint-visitor-keys-npm-3.9.1-e091c000de-9e54d3a37a.zip/node_modules/@typescript-eslint/visitor-keys/",
+ ["npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.10.1.tgz", {
+ "packageLocation": "./.yarn/cache/@typescript-eslint-visitor-keys-npm-3.10.1-0c61e19ede-58890dc003.zip/node_modules/@typescript-eslint/visitor-keys/",
"packageDependencies": [
- ["@typescript-eslint/visitor-keys", "npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.9.1.tgz"],
+ ["@typescript-eslint/visitor-keys", "npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.10.1.tgz"],
["eslint-visitor-keys", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz"]
],
"linkType": "HARD",
@@ -3881,26 +3959,27 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@yarnpkg/core", [
- ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.1.1.tgz", {
- "packageLocation": "./.yarn/cache/@yarnpkg-core-npm-2.1.1-4c0bb5e4cf-d01e24bde1.zip/node_modules/@yarnpkg/core/",
+ ["npm:2.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.2.2.tgz", {
+ "packageLocation": "./.yarn/cache/@yarnpkg-core-npm-2.2.2-c2a9e57c10-d56fdc230e.zip/node_modules/@yarnpkg/core/",
"packageDependencies": [
- ["@yarnpkg/core", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.1.1.tgz"],
+ ["@yarnpkg/core", "npm:2.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.2.2.tgz"],
["@arcanis/slice-ansi", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40arcanis%2Fslice-ansi%2Fdownload%2F%40arcanis%2Fslice-ansi-1.0.2.tgz"],
- ["@yarnpkg/fslib", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.1.0.tgz"],
+ ["@yarnpkg/fslib", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.2.1.tgz"],
["@yarnpkg/json-proxy", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fjson-proxy%2Fdownload%2F%40yarnpkg%2Fjson-proxy-2.1.0.tgz"],
- ["@yarnpkg/libzip", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Flibzip%2Fdownload%2F%40yarnpkg%2Flibzip-2.1.0.tgz"],
- ["@yarnpkg/parsers", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.1.0.tgz"],
- ["@yarnpkg/pnp", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.1.0.tgz"],
- ["@yarnpkg/shell", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.1.0.tgz"],
+ ["@yarnpkg/libzip", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Flibzip%2Fdownload%2F%40yarnpkg%2Flibzip-2.2.0.tgz"],
+ ["@yarnpkg/parsers", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.2.0.tgz"],
+ ["@yarnpkg/pnp", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.2.1.tgz"],
+ ["@yarnpkg/shell", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.2.0.tgz"],
["camelcase", "npm:5.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz"],
["chalk", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz"],
["ci-info", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fci-info%2Fdownload%2Fci-info-2.0.0.tgz"],
- ["clipanion", "npm:2.4.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.4.2.tgz"],
+ ["clipanion", "npm:2.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.5.0.tgz"],
["cross-spawn", "npm:7.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz"],
["diff", "npm:4.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-4.0.2.tgz"],
- ["globby", "npm:10.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.2.tgz"],
+ ["globby", "npm:11.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.1.tgz"],
["got", "npm:11.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgot%2Fdownload%2Fgot-11.5.1.tgz"],
["json-file-plus", "npm:3.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-file-plus%2Fdownload%2Fjson-file-plus-3.3.1.tgz"],
+ ["lodash", "npm:4.17.19::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz"],
["logic-solver", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flogic-solver%2Fdownload%2Flogic-solver-2.0.1.tgz"],
["micromatch", "npm:4.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.2.tgz"],
["mkdirp", "npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"],
@@ -3909,7 +3988,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["pretty-bytes", "npm:5.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-bytes%2Fdownload%2Fpretty-bytes-5.3.0.tgz"],
["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"],
["stream-to-promise", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-to-promise%2Fdownload%2Fstream-to-promise-2.2.0.tgz"],
- ["tar", "npm:4.4.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz"],
+ ["tar-stream", "npm:2.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar-stream%2Fdownload%2Ftar-stream-2.1.3.tgz"],
["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"],
["tunnel", "npm:0.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftunnel%2Fdownload%2Ftunnel-0.0.6.tgz"]
],
@@ -3925,6 +4004,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"]
],
"linkType": "HARD",
+ }],
+ ["npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.2.1.tgz", {
+ "packageLocation": "./.yarn/cache/@yarnpkg-fslib-npm-2.2.1-87af5cec80-2d5dac27ef.zip/node_modules/@yarnpkg/fslib/",
+ "packageDependencies": [
+ ["@yarnpkg/fslib", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.2.1.tgz"],
+ ["@yarnpkg/libzip", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Flibzip%2Fdownload%2F%40yarnpkg%2Flibzip-2.2.0.tgz"],
+ ["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"]
+ ],
+ "linkType": "HARD",
}]
]],
["@yarnpkg/json-proxy", [
@@ -3947,13 +4035,22 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"]
],
"linkType": "HARD",
+ }],
+ ["npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Flibzip%2Fdownload%2F%40yarnpkg%2Flibzip-2.2.0.tgz", {
+ "packageLocation": "./.yarn/cache/@yarnpkg-libzip-npm-2.2.0-1c1734cc89-5546c330c8.zip/node_modules/@yarnpkg/libzip/",
+ "packageDependencies": [
+ ["@yarnpkg/libzip", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Flibzip%2Fdownload%2F%40yarnpkg%2Flibzip-2.2.0.tgz"],
+ ["@types/emscripten", "npm:1.39.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Femscripten%2Fdownload%2F%40types%2Femscripten-1.39.4.tgz"],
+ ["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"]
+ ],
+ "linkType": "HARD",
}]
]],
["@yarnpkg/parsers", [
- ["npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.1.0.tgz", {
- "packageLocation": "./.yarn/cache/@yarnpkg-parsers-npm-2.1.0-5652e2f6ba-3cd4e35435.zip/node_modules/@yarnpkg/parsers/",
+ ["npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.2.0.tgz", {
+ "packageLocation": "./.yarn/cache/@yarnpkg-parsers-npm-2.2.0-2b072561da-4ff177009d.zip/node_modules/@yarnpkg/parsers/",
"packageDependencies": [
- ["@yarnpkg/parsers", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.1.0.tgz"],
+ ["@yarnpkg/parsers", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.2.0.tgz"],
["js-yaml", "npm:3.14.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz"],
["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"]
],
@@ -3961,27 +4058,27 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@yarnpkg/pnp", [
- ["npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.1.0.tgz", {
- "packageLocation": "./.yarn/cache/@yarnpkg-pnp-npm-2.1.0-0497f94088-610f875f59.zip/node_modules/@yarnpkg/pnp/",
+ ["npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.2.1.tgz", {
+ "packageLocation": "./.yarn/cache/@yarnpkg-pnp-npm-2.2.1-e59427544a-0ea840774c.zip/node_modules/@yarnpkg/pnp/",
"packageDependencies": [
- ["@yarnpkg/pnp", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.1.0.tgz"],
+ ["@yarnpkg/pnp", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.2.1.tgz"],
["@types/node", "npm:13.13.14::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-13.13.14.tgz"],
- ["@yarnpkg/fslib", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.1.0.tgz"],
+ ["@yarnpkg/fslib", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.2.1.tgz"],
["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"]
],
"linkType": "HARD",
}]
]],
["@yarnpkg/pnpify", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.1.0.tgz", {
- "packageLocation": "./.yarn/$$virtual/@yarnpkg-pnpify-virtual-62a5ebbfc7/0/cache/@yarnpkg-pnpify-npm-2.1.0-0c86b1dc2b-334ce4cc6c.zip/node_modules/@yarnpkg/pnpify/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.2.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/@yarnpkg-pnpify-virtual-a47283da2b/0/cache/@yarnpkg-pnpify-npm-2.2.1-a9c4a3cd81-47a6fd0c11.zip/node_modules/@yarnpkg/pnpify/",
"packageDependencies": [
- ["@yarnpkg/pnpify", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.1.0.tgz"],
- ["@yarnpkg/core", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.1.1.tgz"],
- ["@yarnpkg/fslib", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.1.0.tgz"],
- ["@yarnpkg/parsers", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.1.0.tgz"],
+ ["@yarnpkg/pnpify", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.2.1.tgz"],
+ ["@yarnpkg/core", "npm:2.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.2.2.tgz"],
+ ["@yarnpkg/fslib", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.2.1.tgz"],
+ ["@yarnpkg/parsers", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.2.0.tgz"],
["chalk", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz"],
- ["clipanion", "npm:2.4.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.4.2.tgz"],
+ ["clipanion", "npm:2.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.5.0.tgz"],
["comment-json", "npm:2.4.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcomment-json%2Fdownload%2Fcomment-json-2.4.2.tgz"],
["eslint", "npm:7.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.7.0.tgz"],
["lodash", "npm:4.17.19::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz"],
@@ -3996,13 +4093,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["@yarnpkg/shell", [
- ["npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.1.0.tgz", {
- "packageLocation": "./.yarn/cache/@yarnpkg-shell-npm-2.1.0-4bd865f0b3-2e0b808965.zip/node_modules/@yarnpkg/shell/",
+ ["npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.2.0.tgz", {
+ "packageLocation": "./.yarn/cache/@yarnpkg-shell-npm-2.2.0-7709e1bff2-23a26955ca.zip/node_modules/@yarnpkg/shell/",
"packageDependencies": [
- ["@yarnpkg/shell", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.1.0.tgz"],
- ["@yarnpkg/fslib", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.1.0.tgz"],
- ["@yarnpkg/parsers", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.1.0.tgz"],
- ["clipanion", "npm:2.4.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.4.2.tgz"],
+ ["@yarnpkg/shell", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.2.0.tgz"],
+ ["@yarnpkg/fslib", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.2.1.tgz"],
+ ["@yarnpkg/parsers", "npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.2.0.tgz"],
+ ["clipanion", "npm:2.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.5.0.tgz"],
["cross-spawn", "npm:7.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz"],
["fast-glob", "npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz"],
["stream-buffers", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-buffers%2Fdownload%2Fstream-buffers-3.0.2.tgz"],
@@ -4082,6 +4179,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["uri-js", "npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.2.2.tgz"]
],
"linkType": "HARD",
+ }],
+ ["npm:6.12.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.4.tgz", {
+ "packageLocation": "./.yarn/cache/ajv-npm-6.12.4-1badbf9de4-50d72b0a10.zip/node_modules/ajv/",
+ "packageDependencies": [
+ ["ajv", "npm:6.12.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.4.tgz"],
+ ["fast-deep-equal", "npm:3.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz"],
+ ["fast-json-stable-stringify", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz"],
+ ["json-schema-traverse", "npm:0.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz"],
+ ["uri-js", "npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.2.2.tgz"]
+ ],
+ "linkType": "HARD",
}]
]],
["ajv-errors", [
@@ -4108,6 +4216,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"ajv"
],
"linkType": "HARD",
+ }],
+ ["virtual:a06248938e0ae7b71c42d5ddc8d214f9ba6aee0ce451a00cc4d8908fd63a4496f9718e410c3ffbf3ba671de80b30ca2589060c47926cf21323ff14088d009d8a#npm:3.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", {
+ "packageLocation": "./.yarn/$$virtual/ajv-keywords-virtual-ee860929c8/0/cache/ajv-keywords-npm-3.5.2-c36e2f7ee0-01f26c2923.zip/node_modules/ajv-keywords/",
+ "packageDependencies": [
+ ["ajv-keywords", "virtual:a06248938e0ae7b71c42d5ddc8d214f9ba6aee0ce451a00cc4d8908fd63a4496f9718e410c3ffbf3ba671de80b30ca2589060c47926cf21323ff14088d009d8a#npm:3.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz"],
+ ["ajv", "npm:6.12.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.4.tgz"]
+ ],
+ "packagePeers": [
+ "ajv"
+ ],
+ "linkType": "HARD",
}]
]],
["ansi-colors", [
@@ -4779,6 +4898,18 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["bl", [
+ ["npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-4.0.3.tgz", {
+ "packageLocation": "./.yarn/cache/bl-npm-4.0.3-01d162e53b-1f33c5a3da.zip/node_modules/bl/",
+ "packageDependencies": [
+ ["bl", "npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-4.0.3.tgz"],
+ ["buffer", "npm:5.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.6.0.tgz"],
+ ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"],
+ ["readable-stream", "npm:3.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["bluebird", [
["npm:3.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz", {
"packageLocation": "./.yarn/cache/bluebird-npm-3.7.2-6889014ddf-4f2288662f.zip/node_modules/bluebird/",
@@ -4863,10 +4994,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["bootstrap-icons", [
- ["npm:1.0.0-alpha5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0-alpha5.tgz", {
- "packageLocation": "./.yarn/cache/bootstrap-icons-npm-1.0.0-alpha5-6b83807199-a97c110bc9.zip/node_modules/bootstrap-icons/",
+ ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz", {
+ "packageLocation": "./.yarn/cache/bootstrap-icons-npm-1.0.0-b1f8003214-082d8d2aff.zip/node_modules/bootstrap-icons/",
"packageDependencies": [
- ["bootstrap-icons", "npm:1.0.0-alpha5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0-alpha5.tgz"]
+ ["bootstrap-icons", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"]
],
"linkType": "HARD",
}]
@@ -5031,6 +5162,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["isarray", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz"]
],
"linkType": "HARD",
+ }],
+ ["npm:5.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.6.0.tgz", {
+ "packageLocation": "./.yarn/cache/buffer-npm-5.6.0-48010737b7-e18fdf099c.zip/node_modules/buffer/",
+ "packageDependencies": [
+ ["buffer", "npm:5.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.6.0.tgz"],
+ ["base64-js", "npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbase64-js%2Fdownload%2Fbase64-js-1.3.1.tgz"],
+ ["ieee754", "npm:1.1.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fieee754%2Fdownload%2Fieee754-1.1.13.tgz"]
+ ],
+ "linkType": "HARD",
}]
]],
["buffer-from", [
@@ -5454,10 +5594,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["clipanion", [
- ["npm:2.4.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.4.2.tgz", {
- "packageLocation": "./.yarn/cache/clipanion-npm-2.4.2-cb5dd08c9d-4a8aa1c126.zip/node_modules/clipanion/",
+ ["npm:2.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.5.0.tgz", {
+ "packageLocation": "./.yarn/cache/clipanion-npm-2.5.0-434a40cc1a-700ff428c9.zip/node_modules/clipanion/",
"packageDependencies": [
- ["clipanion", "npm:2.4.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.4.2.tgz"]
+ ["clipanion", "npm:2.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.5.0.tgz"]
],
"linkType": "HARD",
}]
@@ -5796,10 +5936,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["copy-webpack-plugin", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.0.3.tgz", {
- "packageLocation": "./.yarn/$$virtual/copy-webpack-plugin-virtual-b826aabc59/0/cache/copy-webpack-plugin-npm-6.0.3-64a6b9536d-02bb71e9ad.zip/node_modules/copy-webpack-plugin/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.1.0.tgz", {
+ "packageLocation": "./.yarn/$$virtual/copy-webpack-plugin-virtual-060b35b0fd/0/cache/copy-webpack-plugin-npm-6.1.0-17dfb1f28f-bb289324cd.zip/node_modules/copy-webpack-plugin/",
"packageDependencies": [
- ["copy-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.0.3.tgz"],
+ ["copy-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.1.0.tgz"],
["cacache", "npm:15.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-15.0.5.tgz"],
["fast-glob", "npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz"],
["find-cache-dir", "npm:3.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.1.tgz"],
@@ -5808,7 +5948,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["loader-utils", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-2.0.0.tgz"],
["normalize-path", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-path%2Fdownload%2Fnormalize-path-3.0.0.tgz"],
["p-limit", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.0.2.tgz"],
- ["schema-utils", "npm:2.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz"],
+ ["schema-utils", "npm:2.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz"],
["serialize-javascript", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-4.0.0.tgz"],
["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.44.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.1.tgz"],
["webpack-sources", "npm:1.4.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz"]
@@ -5926,23 +6066,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
- ["create-react-context", [
- ["virtual:3edf6c5f28de9425dc8acc6598a590fa2241383598df1fae41aa7aced4929105d0fdbdc1efc064936982064228d600f97c6ec4468783d71cc55394fd7509ffb1#npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-react-context%2Fdownload%2Fcreate-react-context-0.3.0.tgz", {
- "packageLocation": "./.yarn/$$virtual/create-react-context-virtual-3b1789c663/0/cache/create-react-context-npm-0.3.0-4a7d9dced4-dfb153bbcf.zip/node_modules/create-react-context/",
- "packageDependencies": [
- ["create-react-context", "virtual:3edf6c5f28de9425dc8acc6598a590fa2241383598df1fae41aa7aced4929105d0fdbdc1efc064936982064228d600f97c6ec4468783d71cc55394fd7509ffb1#npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-react-context%2Fdownload%2Fcreate-react-context-0.3.0.tgz"],
- ["gud", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgud%2Fdownload%2Fgud-1.0.0.tgz"],
- ["prop-types", "npm:15.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz"],
- ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
- ["warning", "npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz"]
- ],
- "packagePeers": [
- "prop-types",
- "react"
- ],
- "linkType": "HARD",
- }]
- ]],
["cross-spawn", [
["npm:6.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz", {
"packageLocation": "./.yarn/cache/cross-spawn-npm-6.0.5-b596e42a26-05fbbf957d.zip/node_modules/cross-spawn/",
@@ -6027,15 +6150,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["css-loader", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/css-loader-virtual-217c7c2352/0/cache/css-loader-npm-4.2.1-093499999a-bd8188efac.zip/node_modules/css-loader/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.2.tgz", {
+ "packageLocation": "./.yarn/$$virtual/css-loader-virtual-b969058b2f/0/cache/css-loader-npm-4.2.2-f0d86c1900-73d83e7f4f.zip/node_modules/css-loader/",
"packageDependencies": [
- ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.1.tgz"],
+ ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.2.tgz"],
["camelcase", "npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.0.0.tgz"],
["cssesc", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssesc%2Fdownload%2Fcssesc-3.0.0.tgz"],
["icss-utils", "npm:4.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz"],
["loader-utils", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-2.0.0.tgz"],
- ["normalize-path", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-path%2Fdownload%2Fnormalize-path-3.0.0.tgz"],
["postcss", "npm:7.0.32::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.32.tgz"],
["postcss-modules-extract-imports", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-2.0.0.tgz"],
["postcss-modules-local-by-default", "npm:3.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.3.tgz"],
@@ -6513,11 +6635,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["dom-helpers", [
- ["npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-3.4.0.tgz", {
- "packageLocation": "./.yarn/cache/dom-helpers-npm-3.4.0-f3b5be067d-7625598dbf.zip/node_modules/dom-helpers/",
+ ["npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-5.2.0.tgz", {
+ "packageLocation": "./.yarn/cache/dom-helpers-npm-5.2.0-50f26cbd58-9ef27628f4.zip/node_modules/dom-helpers/",
"packageDependencies": [
- ["dom-helpers", "npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-3.4.0.tgz"],
- ["@babel/runtime", "npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.10.5.tgz"]
+ ["dom-helpers", "npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-5.2.0.tgz"],
+ ["@babel/runtime", "npm:7.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz"],
+ ["csstype", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsstype%2Fdownload%2Fcsstype-3.0.2.tgz"]
],
"linkType": "HARD",
}]
@@ -7014,7 +7137,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [
["eslint-plugin-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prettier%2Fdownload%2Feslint-plugin-prettier-3.1.4.tgz"],
["eslint", "npm:7.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.7.0.tgz"],
- ["prettier", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.0.tgz"],
+ ["prettier", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.1.tgz"],
["prettier-linter-helpers", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier-linter-helpers%2Fdownload%2Fprettier-linter-helpers-1.0.0.tgz"]
],
"packagePeers": [
@@ -7474,12 +7597,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["file-loader", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.0.0.tgz", {
- "packageLocation": "./.yarn/$$virtual/file-loader-virtual-9eddad773c/0/cache/file-loader-npm-6.0.0-d9747600a6-745f5ee763.zip/node_modules/file-loader/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.1.0.tgz", {
+ "packageLocation": "./.yarn/$$virtual/file-loader-virtual-56ec20141f/0/cache/file-loader-npm-6.1.0-77056709ee-ad930c9e7f.zip/node_modules/file-loader/",
"packageDependencies": [
- ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.0.0.tgz"],
+ ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.1.0.tgz"],
["loader-utils", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-2.0.0.tgz"],
- ["schema-utils", "npm:2.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz"],
+ ["schema-utils", "npm:2.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz"],
["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.44.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.1.tgz"]
],
"packagePeers": [
@@ -7732,6 +7855,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["fs-constants", [
+ ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-constants%2Fdownload%2Ffs-constants-1.0.0.tgz", {
+ "packageLocation": "./.yarn/cache/fs-constants-npm-1.0.0-dd82a48008-b8382395f5.zip/node_modules/fs-constants/",
+ "packageDependencies": [
+ ["fs-constants", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-constants%2Fdownload%2Ffs-constants-1.0.0.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["fs-extra", [
["npm:8.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz", {
"packageLocation": "./.yarn/cache/fs-extra-npm-8.1.0-9656618adb-056a96d4f5.zip/node_modules/fs-extra/",
@@ -7745,14 +7877,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["fs-minipass", [
- ["npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-1.2.7.tgz", {
- "packageLocation": "./.yarn/cache/fs-minipass-npm-1.2.7-21b70badcf-eb59a93065.zip/node_modules/fs-minipass/",
- "packageDependencies": [
- ["fs-minipass", "npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-1.2.7.tgz"],
- ["minipass", "npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz"]
- ],
- "linkType": "HARD",
- }],
["npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-2.1.0.tgz", {
"packageLocation": "./.yarn/cache/fs-minipass-npm-2.1.0-b5d5a6c13e-e14a490658.zip/node_modules/fs-minipass/",
"packageDependencies": [
@@ -8025,21 +8149,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["globby", [
- ["npm:10.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.2.tgz", {
- "packageLocation": "./.yarn/cache/globby-npm-10.0.2-47410f9660-53924c2b46.zip/node_modules/globby/",
- "packageDependencies": [
- ["globby", "npm:10.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.2.tgz"],
- ["@types/glob", "npm:7.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.3.tgz"],
- ["array-union", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-2.1.0.tgz"],
- ["dir-glob", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdir-glob%2Fdownload%2Fdir-glob-3.0.1.tgz"],
- ["fast-glob", "npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz"],
- ["glob", "npm:7.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz"],
- ["ignore", "npm:5.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz"],
- ["merge2", "npm:1.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge2%2Fdownload%2Fmerge2-1.4.1.tgz"],
- ["slash", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fslash%2Fdownload%2Fslash-3.0.0.tgz"]
- ],
- "linkType": "HARD",
- }],
["npm:11.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.1.tgz", {
"packageLocation": "./.yarn/cache/globby-npm-11.0.1-75d4900c36-e7239e9e46.zip/node_modules/globby/",
"packageDependencies": [
@@ -8104,15 +8213,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
- ["gud", [
- ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgud%2Fdownload%2Fgud-1.0.0.tgz", {
- "packageLocation": "./.yarn/cache/gud-npm-1.0.0-e29c6f7e18-08be6bf30e.zip/node_modules/gud/",
- "packageDependencies": [
- ["gud", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgud%2Fdownload%2Fgud-1.0.0.tgz"]
- ],
- "linkType": "HARD",
- }]
- ]],
["handle-thing", [
["npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandle-thing%2Fdownload%2Fhandle-thing-2.0.1.tgz", {
"packageLocation": "./.yarn/cache/handle-thing-npm-2.0.1-05158d71e6-7509fca9eb.zip/node_modules/handle-thing/",
@@ -8382,10 +8482,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["html-webpack-plugin", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.3.0.tgz", {
- "packageLocation": "./.yarn/$$virtual/html-webpack-plugin-virtual-15a3a0f996/0/cache/html-webpack-plugin-npm-4.3.0-295e66dc16-13c23547ac.zip/node_modules/html-webpack-plugin/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.4.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/html-webpack-plugin-virtual-44e518319d/0/cache/html-webpack-plugin-npm-4.4.1-4f918b1bea-5bf56a8c24.zip/node_modules/html-webpack-plugin/",
"packageDependencies": [
- ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.3.0.tgz"],
+ ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.4.1.tgz"],
["@types/html-minifier-terser", "npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhtml-minifier-terser%2Fdownload%2F%40types%2Fhtml-minifier-terser-5.1.0.tgz"],
["@types/tapable", "npm:1.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Ftapable%2Fdownload%2F%40types%2Ftapable-1.0.6.tgz"],
["@types/webpack", "npm:4.41.21::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack%2Fdownload%2F%40types%2Fwebpack-4.41.21.tgz"],
@@ -9510,10 +9610,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["klona", [
- ["npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-1.1.2.tgz", {
- "packageLocation": "./.yarn/cache/klona-npm-1.1.2-1ab33bab4c-357ff7d43c.zip/node_modules/klona/",
+ ["npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-2.0.3.tgz", {
+ "packageLocation": "./.yarn/cache/klona-npm-2.0.3-fb634e77f8-69df085420.zip/node_modules/klona/",
"packageDependencies": [
- ["klona", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-1.1.2.tgz"]
+ ["klona", "npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-2.0.3.tgz"]
],
"linkType": "HARD",
}]
@@ -9656,6 +9756,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["lodash-es", [
+ ["npm:4.17.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash-es%2Fdownload%2Flodash-es-4.17.15.tgz", {
+ "packageLocation": "./.yarn/cache/lodash-es-npm-4.17.15-15cd80072f-ee2871b76d.zip/node_modules/lodash-es/",
+ "packageDependencies": [
+ ["lodash-es", "npm:4.17.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash-es%2Fdownload%2Flodash-es-4.17.15.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["lodash._reinterpolate", [
["npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash._reinterpolate%2Fdownload%2Flodash._reinterpolate-3.0.0.tgz", {
"packageLocation": "./.yarn/cache/lodash._reinterpolate-npm-3.0.0-7f339ed5b7-27513557d6.zip/node_modules/lodash._reinterpolate/",
@@ -10015,10 +10124,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["mini-css-extract-plugin", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.10.0.tgz", {
- "packageLocation": "./.yarn/$$virtual/mini-css-extract-plugin-virtual-c1d40f1e6a/0/cache/mini-css-extract-plugin-npm-0.10.0-64c7df264f-2e133cdd20.zip/node_modules/mini-css-extract-plugin/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.11.0.tgz", {
+ "packageLocation": "./.yarn/$$virtual/mini-css-extract-plugin-virtual-855e3b0d8a/0/cache/mini-css-extract-plugin-npm-0.11.0-9fa42d9c43-79a4a06527.zip/node_modules/mini-css-extract-plugin/",
"packageDependencies": [
- ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.10.0.tgz"],
+ ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.11.0.tgz"],
["loader-utils", "npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz"],
["normalize-url", "npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz"],
["schema-utils", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz"],
@@ -10069,15 +10178,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["minipass", [
- ["npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz", {
- "packageLocation": "./.yarn/cache/minipass-npm-2.9.0-12d0efb52b-57a49f9523.zip/node_modules/minipass/",
- "packageDependencies": [
- ["minipass", "npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz"],
- ["safe-buffer", "npm:5.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz"],
- ["yallist", "npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz"]
- ],
- "linkType": "HARD",
- }],
["npm:3.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-3.1.3.tgz", {
"packageLocation": "./.yarn/cache/minipass-npm-3.1.3-eb45a369b1-d12b95a845.zip/node_modules/minipass/",
"packageDependencies": [
@@ -10118,14 +10218,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["minizlib", [
- ["npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-1.3.3.tgz", {
- "packageLocation": "./.yarn/cache/minizlib-npm-1.3.3-8fc7aa14ba-8d12782dd9.zip/node_modules/minizlib/",
- "packageDependencies": [
- ["minizlib", "npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-1.3.3.tgz"],
- ["minipass", "npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz"]
- ],
- "linkType": "HARD",
- }],
["npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-2.1.0.tgz", {
"packageLocation": "./.yarn/cache/minizlib-npm-2.1.0-0922541795-665346bad8.zip/node_modules/minizlib/",
"packageDependencies": [
@@ -11254,15 +11346,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
- ["popper.js", [
- ["npm:1.16.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpopper.js%2Fdownload%2Fpopper.js-1.16.1.tgz", {
- "packageLocation": "./.yarn/cache/popper.js-npm-1.16.1-45dd821913-eb53806fb7.zip/node_modules/popper.js/",
- "packageDependencies": [
- ["popper.js", "npm:1.16.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpopper.js%2Fdownload%2Fpopper.js-1.16.1.tgz"]
- ],
- "linkType": "HARD",
- }]
- ]],
["portfinder", [
["npm:1.0.27::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.27.tgz", {
"packageLocation": "./.yarn/cache/portfinder-npm-1.0.27-519aa211df-dfecedbaf8.zip/node_modules/portfinder/",
@@ -11784,10 +11867,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["prettier", [
- ["npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.0.tgz", {
- "packageLocation": "./.yarn/cache/prettier-npm-2.1.0-55e4625555-f955d380d2.zip/node_modules/prettier/",
+ ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.1.tgz", {
+ "packageLocation": "./.yarn/cache/prettier-npm-2.1.1-742423e320-420a807cda.zip/node_modules/prettier/",
"packageDependencies": [
- ["prettier", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.0.tgz"]
+ ["prettier", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.1.tgz"]
],
"linkType": "HARD",
}]
@@ -11901,6 +11984,21 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["prop-types-extra", [
+ ["virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types-extra%2Fdownload%2Fprop-types-extra-1.1.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/prop-types-extra-virtual-76d118382a/0/cache/prop-types-extra-npm-1.1.1-20a8bf7d72-f1f1cc23b9.zip/node_modules/prop-types-extra/",
+ "packageDependencies": [
+ ["prop-types-extra", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types-extra%2Fdownload%2Fprop-types-extra-1.1.1.tgz"],
+ ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
+ ["react-is", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz"],
+ ["warning", "npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz"]
+ ],
+ "packagePeers": [
+ "react"
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["proxy-addr", [
["npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fproxy-addr%2Fdownload%2Fproxy-addr-2.0.6.tgz", {
"packageLocation": "./.yarn/cache/proxy-addr-npm-2.0.6-b18b3fba9e-a7dcfd7025.zip/node_modules/proxy-addr/",
@@ -12125,6 +12223,39 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["react-bootstrap", [
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-bootstrap%2Fdownload%2Freact-bootstrap-1.3.0.tgz", {
+ "packageLocation": "./.yarn/$$virtual/react-bootstrap-virtual-1f601461ce/0/cache/react-bootstrap-npm-1.3.0-f2b404ff68-f9dc21c00d.zip/node_modules/react-bootstrap/",
+ "packageDependencies": [
+ ["react-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-bootstrap%2Fdownload%2Freact-bootstrap-1.3.0.tgz"],
+ ["@babel/runtime", "npm:7.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz"],
+ ["@restart/context", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fcontext%2Fdownload%2F%40restart%2Fcontext-2.1.4.tgz"],
+ ["@restart/hooks", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:0.3.25::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fhooks%2Fdownload%2F%40restart%2Fhooks-0.3.25.tgz"],
+ ["@types/classnames", "npm:2.2.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fclassnames%2Fdownload%2F%40types%2Fclassnames-2.2.10.tgz"],
+ ["@types/invariant", "npm:2.2.34::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Finvariant%2Fdownload%2F%40types%2Finvariant-2.2.34.tgz"],
+ ["@types/prop-types", "npm:15.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fprop-types%2Fdownload%2F%40types%2Fprop-types-15.7.3.tgz"],
+ ["@types/react", "npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"],
+ ["@types/react-transition-group", "npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-transition-group%2Fdownload%2F%40types%2Freact-transition-group-4.4.0.tgz"],
+ ["@types/warning", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwarning%2Fdownload%2F%40types%2Fwarning-3.0.0.tgz"],
+ ["classnames", "npm:2.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.2.6.tgz"],
+ ["dom-helpers", "npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-5.2.0.tgz"],
+ ["invariant", "npm:2.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finvariant%2Fdownload%2Finvariant-2.2.4.tgz"],
+ ["prop-types", "npm:15.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz"],
+ ["prop-types-extra", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types-extra%2Fdownload%2Fprop-types-extra-1.1.1.tgz"],
+ ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
+ ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"],
+ ["react-overlays", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-overlays%2Fdownload%2Freact-overlays-4.1.0.tgz"],
+ ["react-transition-group", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-4.4.1.tgz"],
+ ["uncontrollable", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:7.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funcontrollable%2Fdownload%2Funcontrollable-7.1.1.tgz"],
+ ["warning", "npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz"]
+ ],
+ "packagePeers": [
+ "react",
+ "react-dom"
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["react-dom", [
["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz", {
"packageLocation": "./.yarn/$$virtual/react-dom-virtual-cee64bb823/0/cache/react-dom-npm-16.13.1-d5a639d8b8-fb5c3ad413.zip/node_modules/react-dom/",
@@ -12160,7 +12291,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageLocation": "./.yarn/$$virtual/react-hot-loader-virtual-03e83e357e/0/cache/react-hot-loader-npm-4.12.21-5b5b8661aa-371deabe49.zip/node_modules/react-hot-loader/",
"packageDependencies": [
["react-hot-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.12.21::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-hot-loader%2Fdownload%2Freact-hot-loader-4.12.21.tgz"],
- ["@types/react", "npm:16.9.46::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.46.tgz"],
+ ["@types/react", "npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"],
["fast-levenshtein", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-levenshtein%2Fdownload%2Ffast-levenshtein-2.0.6.tgz"],
["global", "npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal%2Fdownload%2Fglobal-4.4.0.tgz"],
["hoist-non-react-statics", "npm:3.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhoist-non-react-statics%2Fdownload%2Fhoist-non-react-statics-3.3.2.tgz"],
@@ -12181,10 +12312,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["react-i18next", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/react-i18next-virtual-b9c7e9253e/0/cache/react-i18next-npm-11.7.1-9665be9025-fc62ae35c3.zip/node_modules/react-i18next/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.2.tgz", {
+ "packageLocation": "./.yarn/$$virtual/react-i18next-virtual-092e49876b/0/cache/react-i18next-npm-11.7.2-db79043177-ea5c989d1b.zip/node_modules/react-i18next/",
"packageDependencies": [
- ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.1.tgz"],
+ ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.2.tgz"],
["@babel/runtime", "npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.10.5.tgz"],
["html-parse-stringify2", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-parse-stringify2%2Fdownload%2Fhtml-parse-stringify2-2.0.1.tgz"],
["i18next", "npm:19.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fi18next%2Fdownload%2Fi18next-19.7.0.tgz"],
@@ -12230,22 +12361,25 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
- ["react-popper", [
- ["virtual:3b2ce7b5c8060bb05f2f5c2935213be0b80cbf02d12c698b50272c06d2940bcce3e52fed2f822d06cfa7b13a6aae64654f797a522ecaeb419458c4c10e644495#npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-popper%2Fdownload%2Freact-popper-1.3.7.tgz", {
- "packageLocation": "./.yarn/$$virtual/react-popper-virtual-3edf6c5f28/0/cache/react-popper-npm-1.3.7-0019173f32-09ef58054b.zip/node_modules/react-popper/",
+ ["react-overlays", [
+ ["virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-overlays%2Fdownload%2Freact-overlays-4.1.0.tgz", {
+ "packageLocation": "./.yarn/$$virtual/react-overlays-virtual-be6c660a55/0/cache/react-overlays-npm-4.1.0-8e31f6545e-64d46694be.zip/node_modules/react-overlays/",
"packageDependencies": [
- ["react-popper", "virtual:3b2ce7b5c8060bb05f2f5c2935213be0b80cbf02d12c698b50272c06d2940bcce3e52fed2f822d06cfa7b13a6aae64654f797a522ecaeb419458c4c10e644495#npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-popper%2Fdownload%2Freact-popper-1.3.7.tgz"],
- ["@babel/runtime", "npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.10.5.tgz"],
- ["create-react-context", "virtual:3edf6c5f28de9425dc8acc6598a590fa2241383598df1fae41aa7aced4929105d0fdbdc1efc064936982064228d600f97c6ec4468783d71cc55394fd7509ffb1#npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-react-context%2Fdownload%2Fcreate-react-context-0.3.0.tgz"],
- ["deep-equal", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz"],
- ["popper.js", "npm:1.16.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpopper.js%2Fdownload%2Fpopper.js-1.16.1.tgz"],
+ ["react-overlays", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-overlays%2Fdownload%2Freact-overlays-4.1.0.tgz"],
+ ["@babel/runtime", "npm:7.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz"],
+ ["@popperjs/core", "npm:2.4.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.4.4.tgz"],
+ ["@restart/hooks", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:0.3.25::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fhooks%2Fdownload%2F%40restart%2Fhooks-0.3.25.tgz"],
+ ["@types/warning", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwarning%2Fdownload%2F%40types%2Fwarning-3.0.0.tgz"],
+ ["dom-helpers", "npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-5.2.0.tgz"],
["prop-types", "npm:15.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz"],
["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
- ["typed-styles", "npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftyped-styles%2Fdownload%2Ftyped-styles-0.0.7.tgz"],
+ ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"],
+ ["uncontrollable", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:7.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funcontrollable%2Fdownload%2Funcontrollable-7.1.1.tgz"],
["warning", "npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz"]
],
"packagePeers": [
- "react"
+ "react",
+ "react-dom"
],
"linkType": "HARD",
}]
@@ -12290,6 +12424,22 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["react-router-bootstrap", [
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.25.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-bootstrap%2Fdownload%2Freact-router-bootstrap-0.25.0.tgz", {
+ "packageLocation": "./.yarn/$$virtual/react-router-bootstrap-virtual-2a8441681c/0/cache/react-router-bootstrap-npm-0.25.0-28ad5f848b-c9a66a8cc9.zip/node_modules/react-router-bootstrap/",
+ "packageDependencies": [
+ ["react-router-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.25.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-bootstrap%2Fdownload%2Freact-router-bootstrap-0.25.0.tgz"],
+ ["prop-types", "npm:15.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz"],
+ ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
+ ["react-router-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-dom%2Fdownload%2Freact-router-dom-5.2.0.tgz"]
+ ],
+ "packagePeers": [
+ "react",
+ "react-router-dom"
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["react-router-dom", [
["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-dom%2Fdownload%2Freact-router-dom-5.2.0.tgz", {
"packageLocation": "./.yarn/$$virtual/react-router-dom-virtual-86c7a05f52/0/cache/react-router-dom-npm-5.2.0-8e78cd9ea8-9ad2d72630.zip/node_modules/react-router-dom/",
@@ -12311,36 +12461,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["react-transition-group", [
- ["virtual:3b2ce7b5c8060bb05f2f5c2935213be0b80cbf02d12c698b50272c06d2940bcce3e52fed2f822d06cfa7b13a6aae64654f797a522ecaeb419458c4c10e644495#npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-2.9.0.tgz", {
- "packageLocation": "./.yarn/$$virtual/react-transition-group-virtual-96734f4ac2/0/cache/react-transition-group-npm-2.9.0-67f8b00a44-eefed08c48.zip/node_modules/react-transition-group/",
- "packageDependencies": [
- ["react-transition-group", "virtual:3b2ce7b5c8060bb05f2f5c2935213be0b80cbf02d12c698b50272c06d2940bcce3e52fed2f822d06cfa7b13a6aae64654f797a522ecaeb419458c4c10e644495#npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-2.9.0.tgz"],
- ["dom-helpers", "npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-3.4.0.tgz"],
- ["loose-envify", "npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floose-envify%2Fdownload%2Floose-envify-1.4.0.tgz"],
- ["prop-types", "npm:15.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz"],
- ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
- ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"],
- ["react-lifecycles-compat", "npm:3.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-lifecycles-compat%2Fdownload%2Freact-lifecycles-compat-3.0.4.tgz"]
- ],
- "packagePeers": [
- "react",
- "react-dom"
- ],
- "linkType": "HARD",
- }]
- ]],
- ["reactstrap", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freactstrap%2Fdownload%2Freactstrap-8.5.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/reactstrap-virtual-3b2ce7b5c8/0/cache/reactstrap-npm-8.5.1-233980b7a4-afa5cba1a9.zip/node_modules/reactstrap/",
+ ["virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-4.4.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/react-transition-group-virtual-de7e044c4a/0/cache/react-transition-group-npm-4.4.1-7d60c95184-e14446123f.zip/node_modules/react-transition-group/",
"packageDependencies": [
- ["reactstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freactstrap%2Fdownload%2Freactstrap-8.5.1.tgz"],
+ ["react-transition-group", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-4.4.1.tgz"],
["@babel/runtime", "npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.10.5.tgz"],
- ["classnames", "npm:2.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.2.6.tgz"],
+ ["dom-helpers", "npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-5.2.0.tgz"],
+ ["loose-envify", "npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floose-envify%2Fdownload%2Floose-envify-1.4.0.tgz"],
["prop-types", "npm:15.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz"],
["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
- ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"],
- ["react-popper", "virtual:3b2ce7b5c8060bb05f2f5c2935213be0b80cbf02d12c698b50272c06d2940bcce3e52fed2f822d06cfa7b13a6aae64654f797a522ecaeb419458c4c10e644495#npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-popper%2Fdownload%2Freact-popper-1.3.7.tgz"],
- ["react-transition-group", "virtual:3b2ce7b5c8060bb05f2f5c2935213be0b80cbf02d12c698b50272c06d2940bcce3e52fed2f822d06cfa7b13a6aae64654f797a522ecaeb419458c4c10e644495#npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-2.9.0.tgz"]
+ ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"]
],
"packagePeers": [
"react",
@@ -12921,12 +13051,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["sass-loader", [
- ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:9.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-9.0.3.tgz", {
- "packageLocation": "./.yarn/$$virtual/sass-loader-virtual-b3384a0ffc/0/cache/sass-loader-npm-9.0.3-681753a244-5ce94bb670.zip/node_modules/sass-loader/",
+ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-10.0.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/sass-loader-virtual-8d4a3f636b/0/cache/sass-loader-npm-10.0.1-7886e9cb40-cc517f3dae.zip/node_modules/sass-loader/",
"packageDependencies": [
- ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:9.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-9.0.3.tgz"],
+ ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-10.0.1.tgz"],
["fibers", null],
- ["klona", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-1.1.2.tgz"],
+ ["klona", "npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-2.0.3.tgz"],
["loader-utils", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-2.0.0.tgz"],
["neo-async", "npm:2.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz"],
["node-sass", null],
@@ -12975,6 +13105,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["ajv-keywords", "virtual:5a053ed7a5aaf24feb20a5f221f0cf99cd71c398eae5cd964b19ff1321e1f4b929d5643e1ddc2a0e5bf7584bf5da2ecbf8ea504506a83c90ac358cd78a8d6ec8#npm:3.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.1.tgz"]
],
"linkType": "HARD",
+ }],
+ ["npm:2.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz", {
+ "packageLocation": "./.yarn/cache/schema-utils-npm-2.7.1-a06248938e-3851bcc7e4.zip/node_modules/schema-utils/",
+ "packageDependencies": [
+ ["schema-utils", "npm:2.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz"],
+ ["@types/json-schema", "npm:7.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz"],
+ ["ajv", "npm:6.12.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.4.tgz"],
+ ["ajv-keywords", "virtual:a06248938e0ae7b71c42d5ddc8d214f9ba6aee0ce451a00cc4d8908fd63a4496f9718e410c3ffbf3ba671de80b30ca2589060c47926cf21323ff14088d009d8a#npm:3.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz"]
+ ],
+ "linkType": "HARD",
}]
]],
["secure-compare", [
@@ -13873,20 +14013,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["tar", [
- ["npm:4.4.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz", {
- "packageLocation": "./.yarn/cache/tar-npm-4.4.13-0a714d6118-d325c316ac.zip/node_modules/tar/",
- "packageDependencies": [
- ["tar", "npm:4.4.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz"],
- ["chownr", "npm:1.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchownr%2Fdownload%2Fchownr-1.1.4.tgz"],
- ["fs-minipass", "npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-1.2.7.tgz"],
- ["minipass", "npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz"],
- ["minizlib", "npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-1.3.3.tgz"],
- ["mkdirp", "npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"],
- ["safe-buffer", "npm:5.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz"],
- ["yallist", "npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz"]
- ],
- "linkType": "HARD",
- }],
["npm:6.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-6.0.2.tgz", {
"packageLocation": "./.yarn/cache/tar-npm-6.0.2-c08102c075-7d28cc13d7.zip/node_modules/tar/",
"packageDependencies": [
@@ -13901,6 +14027,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["tar-stream", [
+ ["npm:2.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar-stream%2Fdownload%2Ftar-stream-2.1.3.tgz", {
+ "packageLocation": "./.yarn/cache/tar-stream-npm-2.1.3-d6be928e6e-57d2284615.zip/node_modules/tar-stream/",
+ "packageDependencies": [
+ ["tar-stream", "npm:2.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar-stream%2Fdownload%2Ftar-stream-2.1.3.tgz"],
+ ["bl", "npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-4.0.3.tgz"],
+ ["end-of-stream", "npm:1.4.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz"],
+ ["fs-constants", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-constants%2Fdownload%2Ffs-constants-1.0.0.tgz"],
+ ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"],
+ ["readable-stream", "npm:3.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz"]
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["temp-dir", [
["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftemp-dir%2Fdownload%2Ftemp-dir-1.0.0.tgz", {
"packageLocation": "./.yarn/cache/temp-dir-npm-1.0.0-31731478b9-4cc703b6ac.zip/node_modules/temp-dir/",
@@ -14002,31 +14142,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@hot-loader/react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hot-loader%2Freact-dom%2Fdownload%2F%40hot-loader%2Freact-dom-16.13.0.tgz"],
["@types/classnames", "npm:2.2.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fclassnames%2Fdownload%2F%40types%2Fclassnames-2.2.10.tgz"],
["@types/crypto-js", "npm:3.1.47::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcrypto-js%2Fdownload%2F%40types%2Fcrypto-js-3.1.47.tgz"],
- ["@types/lodash", "npm:4.14.159::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.159.tgz"],
- ["@types/node", "npm:14.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.0.tgz"],
- ["@types/react", "npm:16.9.46::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.46.tgz"],
+ ["@types/lodash", "npm:4.14.161::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz"],
+ ["@types/node", "npm:14.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.2.tgz"],
+ ["@types/react", "npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"],
["@types/react-dom", "npm:16.9.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-dom%2Fdownload%2F%40types%2Freact-dom-16.9.8.tgz"],
["@types/react-responsive", "npm:8.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-responsive%2Fdownload%2F%40types%2Freact-responsive-8.0.2.tgz"],
["@types/react-router", "npm:5.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router%2Fdownload%2F%40types%2Freact-router-5.1.8.tgz"],
+ ["@types/react-router-bootstrap", "npm:0.24.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-bootstrap%2Fdownload%2F%40types%2Freact-router-bootstrap-0.24.5.tgz"],
["@types/react-router-dom", "npm:5.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-dom%2Fdownload%2F%40types%2Freact-router-dom-5.1.5.tgz"],
- ["@types/reactstrap", "npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freactstrap%2Fdownload%2F%40types%2Freactstrap-8.5.1.tgz"],
["@types/webpack-env", "npm:1.15.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-env%2Fdownload%2F%40types%2Fwebpack-env-1.15.2.tgz"],
["@types/xregexp", "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fxregexp%2Fdownload%2F%40types%2Fxregexp-4.3.0.tgz"],
- ["@typescript-eslint/eslint-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.9.1.tgz"],
- ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.9.1.tgz"],
- ["@yarnpkg/pnpify", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.1.0.tgz"],
+ ["@typescript-eslint/eslint-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.10.1.tgz"],
+ ["@typescript-eslint/parser", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.10.1.tgz"],
+ ["@yarnpkg/pnpify", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.2.1.tgz"],
["axios", "npm:0.20.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.20.0.tgz"],
["babel-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz"],
["babel-plugin-transform-builtin-extend", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-transform-builtin-extend%2Fdownload%2Fbabel-plugin-transform-builtin-extend-1.1.2.tgz"],
["bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap%2Fdownload%2Fbootstrap-4.5.2.tgz"],
- ["bootstrap-icons", "npm:1.0.0-alpha5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0-alpha5.tgz"],
+ ["bootstrap-icons", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"],
["classnames", "npm:2.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.2.6.tgz"],
["clean-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-webpack-plugin%2Fdownload%2Fclean-webpack-plugin-3.0.0.tgz"],
["clsx", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclsx%2Fdownload%2Fclsx-1.1.1.tgz"],
- ["copy-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.0.3.tgz"],
+ ["copy-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.1.0.tgz"],
["core-js", "npm:3.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz"],
["crypto-js", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-js%2Fdownload%2Fcrypto-js-4.0.0.tgz"],
- ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.1.tgz"],
+ ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.2.tgz"],
["eslint", "npm:7.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.7.0.tgz"],
["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.11.0.tgz"],
["eslint-import-resolver-webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.12.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-import-resolver-webpack%2Fdownload%2Feslint-import-resolver-webpack-0.12.2.tgz"],
@@ -14034,32 +14174,33 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["eslint-plugin-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prettier%2Fdownload%2Feslint-plugin-prettier-3.1.4.tgz"],
["eslint-plugin-react", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.20.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react%2Fdownload%2Feslint-plugin-react-7.20.6.tgz"],
["eslint-plugin-react-hooks", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react-hooks%2Fdownload%2Feslint-plugin-react-hooks-4.1.0.tgz"],
- ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.0.0.tgz"],
- ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.3.0.tgz"],
+ ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.1.0.tgz"],
+ ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.4.1.tgz"],
["http-server", "npm:0.12.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-server%2Fdownload%2Fhttp-server-0.12.3.tgz"],
["i18next", "npm:19.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fi18next%2Fdownload%2Fi18next-19.7.0.tgz"],
["i18next-browser-languagedetector", "npm:6.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fi18next-browser-languagedetector%2Fdownload%2Fi18next-browser-languagedetector-6.0.1.tgz"],
["localforage", "npm:1.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flocalforage%2Fdownload%2Flocalforage-1.9.0.tgz"],
["lodash", "npm:4.17.20::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz"],
- ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.10.0.tgz"],
+ ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.11.0.tgz"],
["pepjs", "npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpepjs%2Fdownload%2Fpepjs-0.5.2.tgz"],
["pnp-webpack-plugin", "npm:1.6.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpnp-webpack-plugin%2Fdownload%2Fpnp-webpack-plugin-1.6.4.tgz"],
["postcss-loader", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz"],
["postcss-preset-env", "npm:6.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-preset-env%2Fdownload%2Fpostcss-preset-env-6.7.0.tgz"],
- ["prettier", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.0.tgz"],
+ ["prettier", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.1.tgz"],
["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
+ ["react-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-bootstrap%2Fdownload%2Freact-bootstrap-1.3.0.tgz"],
["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"],
["react-hot-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.12.21::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-hot-loader%2Fdownload%2Freact-hot-loader-4.12.21.tgz"],
- ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.1.tgz"],
+ ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.2.tgz"],
["react-inlinesvg", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-inlinesvg%2Fdownload%2Freact-inlinesvg-2.0.0.tgz"],
["react-responsive", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-responsive%2Fdownload%2Freact-responsive-8.1.0.tgz"],
["react-router", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router%2Fdownload%2Freact-router-5.2.0.tgz"],
+ ["react-router-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.25.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-bootstrap%2Fdownload%2Freact-router-bootstrap-0.25.0.tgz"],
["react-router-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-dom%2Fdownload%2Freact-router-dom-5.2.0.tgz"],
- ["reactstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freactstrap%2Fdownload%2Freactstrap-8.5.1.tgz"],
["regenerator-runtime", "npm:0.13.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz"],
["rxjs", "npm:6.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.2.tgz"],
["sass", "npm:1.26.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass%2Fdownload%2Fsass-1.26.10.tgz"],
- ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:9.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-9.0.3.tgz"],
+ ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-10.0.1.tgz"],
["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstyle-loader%2Fdownload%2Fstyle-loader-1.2.1.tgz"],
["ts-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-loader%2Fdownload%2Fts-loader-8.0.3.tgz"],
["typescript", "patch:typescript@npm%3A4.0.2%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ftypescript%252Fdownload%252Ftypescript-4.0.2.tgz#builtin<compat/typescript>::version=4.0.2&hash=5b02a2"],
@@ -14247,10 +14388,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]
]],
["tsutils", [
- ["virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/tsutils-virtual-099ba65825/0/cache/tsutils-npm-3.17.1-e58260689c-bed8ff7998.zip/node_modules/tsutils/",
+ ["virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/tsutils-virtual-17a9d863f9/0/cache/tsutils-npm-3.17.1-e58260689c-bed8ff7998.zip/node_modules/tsutils/",
"packageDependencies": [
- ["tsutils", "virtual:6b090f53c60ffa0b7aaef0ced1caa498287b02ac23431999e7b6354a77c6335756f1b98cede1091b7477651df82c3e43da90a593747dbb5c19e306c383157b84#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
+ ["tsutils", "virtual:5165ea3fda9c573d430ba711dd0b379352ee8e3de65d102d7f421227e62e2b822a19b27eae495a51c1d5e3521fd2fbb91c50431061d33fbeaa2773258b02fb4b#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"],
["typescript", "patch:typescript@npm%3A4.0.2%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ftypescript%252Fdownload%252Ftypescript-4.0.2.tgz#builtin<compat/typescript>::version=4.0.2&hash=5b02a2"]
],
@@ -14259,10 +14400,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],
"linkType": "HARD",
}],
- ["virtual:74f3ce4730be82a39c05577948e092efbe436415fbae850d9d5d07bee35df41e3ecfd8a5b58d019a2990d0c5ad4c8a28fe10a468f8ed2307a1f4ca468609e708#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz", {
- "packageLocation": "./.yarn/$$virtual/tsutils-virtual-4142714550/0/cache/tsutils-npm-3.17.1-e58260689c-bed8ff7998.zip/node_modules/tsutils/",
+ ["virtual:b6acae5f73b5b0902a3e77295572fbd9d3ef34b910a76823f09dad2fa25c16a18217e3e3476447e966fa9244650b893ac9f141ee7ea9e580cdcf46bc125b1efd#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/tsutils-virtual-691a9c3066/0/cache/tsutils-npm-3.17.1-e58260689c-bed8ff7998.zip/node_modules/tsutils/",
"packageDependencies": [
- ["tsutils", "virtual:74f3ce4730be82a39c05577948e092efbe436415fbae850d9d5d07bee35df41e3ecfd8a5b58d019a2990d0c5ad4c8a28fe10a468f8ed2307a1f4ca468609e708#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
+ ["tsutils", "virtual:b6acae5f73b5b0902a3e77295572fbd9d3ef34b910a76823f09dad2fa25c16a18217e3e3476447e966fa9244650b893ac9f141ee7ea9e580cdcf46bc125b1efd#npm:3.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.17.1.tgz"],
["tslib", "npm:1.13.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz"],
["typescript", null]
],
@@ -14346,15 +14487,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
- ["typed-styles", [
- ["npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftyped-styles%2Fdownload%2Ftyped-styles-0.0.7.tgz", {
- "packageLocation": "./.yarn/cache/typed-styles-npm-0.0.7-ef2e89d04b-4988d78daf.zip/node_modules/typed-styles/",
- "packageDependencies": [
- ["typed-styles", "npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftyped-styles%2Fdownload%2Ftyped-styles-0.0.7.tgz"]
- ],
- "linkType": "HARD",
- }]
- ]],
["typedarray", [
["npm:0.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypedarray%2Fdownload%2Ftypedarray-0.0.6.tgz", {
"packageLocation": "./.yarn/cache/typedarray-npm-0.0.6-9f6b6bcac0-c9ef0176aa.zip/node_modules/typedarray/",
@@ -14373,6 +14505,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD",
}]
]],
+ ["uncontrollable", [
+ ["virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:7.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funcontrollable%2Fdownload%2Funcontrollable-7.1.1.tgz", {
+ "packageLocation": "./.yarn/$$virtual/uncontrollable-virtual-8850ccda84/0/cache/uncontrollable-npm-7.1.1-26d270508f-208d397c41.zip/node_modules/uncontrollable/",
+ "packageDependencies": [
+ ["uncontrollable", "virtual:1f601461ce4bcd02e67eb3e52606d30f8a0e9010becfebdf768394bdced194207f1da63f8bbe3d9dd191b372deda04c1e7c5b145234f01cd0a6a8f90072f9fbc#npm:7.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funcontrollable%2Fdownload%2Funcontrollable-7.1.1.tgz"],
+ ["@babel/runtime", "npm:7.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz"],
+ ["@types/react", "npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"],
+ ["invariant", "npm:2.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finvariant%2Fdownload%2Finvariant-2.2.4.tgz"],
+ ["react", "npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.13.1.tgz"],
+ ["react-lifecycles-compat", "npm:3.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-lifecycles-compat%2Fdownload%2Freact-lifecycles-compat-3.0.4.tgz"]
+ ],
+ "packagePeers": [
+ "react"
+ ],
+ "linkType": "HARD",
+ }]
+ ]],
["underscore", [
["npm:1.10.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funderscore%2Fdownload%2Funderscore-1.10.2.tgz", {
"packageLocation": "./.yarn/cache/underscore-npm-1.10.2-058b625a43-d49b87c03d.zip/node_modules/underscore/",
@@ -14564,7 +14713,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageLocation": "./.yarn/$$virtual/url-loader-virtual-e526163f68/0/cache/url-loader-npm-4.1.0-f69f6e3e88-5870b96968.zip/node_modules/url-loader/",
"packageDependencies": [
["url-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-loader%2Fdownload%2Furl-loader-4.1.0.tgz"],
- ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.0.0.tgz"],
+ ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.1.0.tgz"],
["loader-utils", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-2.0.0.tgz"],
["mime-types", "npm:2.1.27::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz"],
["schema-utils", "npm:2.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz"],
diff --git a/Timeline/ClientApp/package.json b/Timeline/ClientApp/package.json
index b633630b..5ae6a608 100644
--- a/Timeline/ClientApp/package.json
+++ b/Timeline/ClientApp/package.json
@@ -8,7 +8,7 @@
"dependencies": {
"axios": "^0.20.0",
"bootstrap": "^4.5.2",
- "bootstrap-icons": "^1.0.0-alpha5",
+ "bootstrap-icons": "^1.0.0",
"classnames": "^2.2.6",
"clsx": "^1.1.1",
"core-js": "^3.6.5",
@@ -18,14 +18,15 @@
"lodash": "^4.17.20",
"pepjs": "^0.5.2",
"react": "^16.13.1",
+ "react-bootstrap": "^1.3.0",
"react-dom": "^16.13.1",
"react-hot-loader": "^4.12.21",
- "react-i18next": "^11.7.1",
+ "react-i18next": "^11.7.2",
"react-inlinesvg": "^2.0.0",
"react-responsive": "^8.1.0",
"react-router": "^5.2.0",
+ "react-router-bootstrap": "^0.25.0",
"react-router-dom": "^5.2.0",
- "reactstrap": "^8.5.1",
"regenerator-runtime": "^0.13.7",
"rxjs": "^6.6.2",
"workbox-precaching": "^5.1.3",
@@ -65,25 +66,25 @@
"@hot-loader/react-dom": "^16.13.0",
"@types/classnames": "^2.2.10",
"@types/crypto-js": "^3.1.47",
- "@types/lodash": "^4.14.159",
- "@types/node": "^14.6.0",
- "@types/react": "^16.9.46",
+ "@types/lodash": "^4.14.161",
+ "@types/node": "^14.6.2",
+ "@types/react": "^16.9.49",
"@types/react-dom": "^16.9.8",
"@types/react-responsive": "^8.0.2",
"@types/react-router": "^5.1.8",
+ "@types/react-router-bootstrap": "^0.24.5",
"@types/react-router-dom": "^5.1.5",
- "@types/reactstrap": "^8.5.1",
"@types/webpack-env": "^1.15.2",
"@types/xregexp": "^4.3.0",
- "@typescript-eslint/eslint-plugin": "^3.9.1",
- "@typescript-eslint/parser": "^3.9.1",
- "@yarnpkg/pnpify": "^2.1.0",
+ "@typescript-eslint/eslint-plugin": "^3.10.1",
+ "@typescript-eslint/parser": "^3.10.1",
+ "@yarnpkg/pnpify": "^2.2.1",
"babel-loader": "^8.1.0",
"babel-plugin-transform-builtin-extend": "^1.1.2",
"clean-webpack-plugin": "^3.0.0",
- "copy-webpack-plugin": "^6.0.3",
+ "copy-webpack-plugin": "^6.1.0",
"crypto-js": "^4.0.0",
- "css-loader": "^4.2.1",
+ "css-loader": "^4.2.2",
"eslint": "^7.7.0",
"eslint-config-prettier": "^6.11.0",
"eslint-import-resolver-webpack": "^0.12.2",
@@ -91,16 +92,16 @@
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-react": "^7.20.6",
"eslint-plugin-react-hooks": "^4.1.0",
- "file-loader": "^6.0.0",
- "html-webpack-plugin": "^4.3.0",
+ "file-loader": "^6.1.0",
+ "html-webpack-plugin": "^4.4.1",
"http-server": "^0.12.3",
- "mini-css-extract-plugin": "^0.10.0",
+ "mini-css-extract-plugin": "^0.11.0",
"pnp-webpack-plugin": "^1.6.4",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "^6.7.0",
- "prettier": "^2.1.0",
+ "prettier": "^2.1.1",
"sass": "^1.26.10",
- "sass-loader": "^9.0.3",
+ "sass-loader": "^10.0.1",
"style-loader": "^1.2.1",
"ts-loader": "^8.0.3",
"typescript": "^4.0.2",
diff --git a/Timeline/ClientApp/src/app/App.tsx b/Timeline/ClientApp/src/app/App.tsx
index 74deddda..b68eddb6 100644
--- a/Timeline/ClientApp/src/app/App.tsx
+++ b/Timeline/ClientApp/src/app/App.tsx
@@ -2,17 +2,18 @@ import React from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import { hot } from "react-hot-loader/root";
-import AppBar from "./common/AppBar";
-import LoadingPage from "./common/LoadingPage";
-import Home from "./home/Home";
-import Login from "./user/Login";
-import Settings from "./settings/Settings";
-import About from "./about/About";
-import User from "./user/User";
-import TimelinePage from "./timeline/TimelinePage";
-import AlertHost from "./common/AlertHost";
-import { dataStorage } from "./data/common";
-import { userService, useRawUser } from "./data/user";
+import AppBar from "./views/common/AppBar";
+import LoadingPage from "./views/common/LoadingPage";
+import Home from "./views/home";
+import Login from "./views/login";
+import Settings from "./views/settings";
+import About from "./views/about";
+import User from "./views/user";
+import TimelinePage from "./views/timeline";
+import AlertHost from "./views/common/alert/AlertHost";
+
+import { dataStorage } from "./services/common";
+import { userService, useRawUser } from "./services/user";
const NoMatch: React.FC = () => {
return (
@@ -25,7 +26,7 @@ const NoMatch: React.FC = () => {
};
const LazyAdmin = React.lazy(
- () => import(/* webpackChunkName: "admin" */ "./admin/Admin")
+ () => import(/* webpackChunkName: "admin" */ "./views/admin/Admin")
);
const App: React.FC = () => {
@@ -38,50 +39,46 @@ const App: React.FC = () => {
void dataStorage.ready().then(() => setLoading(false));
}, []);
- let body;
if (user === undefined || loading) {
- body = <LoadingPage />;
+ return <LoadingPage />;
} else {
- body = (
- <Router>
- <Switch>
- <Route exact path="/">
- <Home />
- </Route>
- <Route exact path="/login">
- <Login />
- </Route>
- <Route path="/settings">
- <Settings />
- </Route>
- <Route path="/about">
- <About />
- </Route>
- <Route path="/timelines/:name">
- <TimelinePage />
- </Route>
- <Route path="/users/:username">
- <User />
- </Route>
- {user && user.administrator && (
- <Route path="/admin">
- <LazyAdmin user={user} />
+ return (
+ <React.Suspense fallback={<LoadingPage />}>
+ <Router>
+ <AppBar />
+ <Switch>
+ <Route exact path="/">
+ <Home />
+ </Route>
+ <Route exact path="/login">
+ <Login />
+ </Route>
+ <Route path="/settings">
+ <Settings />
+ </Route>
+ <Route path="/about">
+ <About />
+ </Route>
+ <Route path="/timelines/:name">
+ <TimelinePage />
</Route>
- )}
- <Route>
- <NoMatch />
- </Route>
- </Switch>
- </Router>
+ <Route path="/users/:username">
+ <User />
+ </Route>
+ {user && user.administrator && (
+ <Route path="/admin">
+ <LazyAdmin user={user} />
+ </Route>
+ )}
+ <Route>
+ <NoMatch />
+ </Route>
+ </Switch>
+ <AlertHost />
+ </Router>
+ </React.Suspense>
);
}
-
- return (
- <React.Suspense fallback={<LoadingPage />}>
- {body}
- <AlertHost />
- </React.Suspense>
- );
};
export default hot(App);
diff --git a/Timeline/ClientApp/src/app/about/About.tsx b/Timeline/ClientApp/src/app/about/About.tsx
deleted file mode 100644
index 519eef18..00000000
--- a/Timeline/ClientApp/src/app/about/About.tsx
+++ /dev/null
@@ -1,172 +0,0 @@
-import React from "react";
-import { useTranslation, Trans } from "react-i18next";
-
-import AppBar from "../common/AppBar";
-
-import authorAvatarUrl from "./author-avatar.png";
-import githubLogoUrl from "./github.png";
-
-const frontendCredits: {
- name: string;
- url: string;
-}[] = [
- {
- name: "reactjs",
- url: "https://reactjs.org",
- },
- {
- name: "typescript",
- url: "https://www.typescriptlang.org",
- },
- {
- name: "bootstrap",
- url: "https://getbootstrap.com",
- },
- {
- name: "reactstrap",
- url: "https://reactstrap.github.io",
- },
- {
- name: "babeljs",
- url: "https://babeljs.io",
- },
- {
- name: "webpack",
- url: "https://webpack.js.org",
- },
- {
- name: "sass",
- url: "https://sass-lang.com",
- },
- {
- name: "eslint",
- url: "https://eslint.org",
- },
- {
- name: "prettier",
- url: "https://prettier.io",
- },
- {
- name: "pepjs",
- url: "https://github.com/jquery/PEP",
- },
- {
- name: "react-inlinesvg",
- url: "https://github.com/gilbarbara/react-inlinesvg",
- },
-];
-
-const backendCredits: {
- name: string;
- url: string;
-}[] = [
- {
- name: "ASP.NET Core",
- url: "https://dotnet.microsoft.com/learn/aspnet/what-is-aspnet-core",
- },
- { name: "sqlite", url: "https://sqlite.org" },
- {
- name: "ImageSharp",
- url: "https://github.com/SixLabors/ImageSharp",
- },
-];
-
-const About: React.FC = () => {
- const { t } = useTranslation();
-
- return (
- <>
- <AppBar />
- <div className="mt-appbar px-2 mb-4">
- <div className="container mt-4 py-3 shadow border border-primary rounded bg-light">
- <h4 id="author-info">{t("about.author.title")}</h4>
- <div>
- <div className="d-flex">
- <img
- src={authorAvatarUrl}
- className="align-self-start avatar large rounded-circle"
- />
- <div>
- <p>
- <small>{t("about.author.fullname")}</small>
- <span className="text-primary">杨宇千</span>
- </p>
- <p>
- <small>{t("about.author.nickname")}</small>
- <span className="text-primary">crupest</span>
- </p>
- <p>
- <small>{t("about.author.introduction")}</small>
- {t("about.author.introductionContent")}
- </p>
- </div>
- </div>
- <p>
- <small>{t("about.author.links")}</small>
- <a
- href="https://github.com/crupest"
- target="_blank"
- rel="noopener noreferrer"
- >
- <img
- src={githubLogoUrl}
- className="about-link-icon text-body"
- />
- </a>
- </p>
- </div>
- </div>
- <div className="container mt-4 py-3 shadow border border-primary rounded bg-light">
- <h4>{t("about.site.title")}</h4>
- <p>
- <Trans i18nKey="about.site.content">
- 0<span className="text-primary">1</span>2<b>3</b>4
- <a href="#author-info">5</a>6
- </Trans>
- </p>
- <p>
- <a
- href="https://github.com/crupest/Timeline"
- target="_blank"
- rel="noopener noreferrer"
- >
- {t("about.site.repo")}
- </a>
- </p>
- </div>
- <div className="container mt-4 py-3 shadow border border-primary rounded bg-light">
- <h4>{t("about.credits.title")}</h4>
- <p>{t("about.credits.content")}</p>
- <p>{t("about.credits.frontend")}</p>
- <ul>
- {frontendCredits.map((item, index) => {
- return (
- <li key={index}>
- <a href={item.url} target="_blank" rel="noopener noreferrer">
- {item.name}
- </a>
- </li>
- );
- })}
- <li>...</li>
- </ul>
- <p>{t("about.credits.backend")}</p>
- <ul>
- {backendCredits.map((item, index) => {
- return (
- <li key={index}>
- <a href={item.url} target="_blank" rel="noopener noreferrer">
- {item.name}
- </a>
- </li>
- );
- })}
- <li>...</li>
- </ul>
- </div>
- </div>
- </>
- );
-};
-
-export default About;
diff --git a/Timeline/ClientApp/src/app/common/AppBar.tsx b/Timeline/ClientApp/src/app/common/AppBar.tsx
deleted file mode 100644
index 59239696..00000000
--- a/Timeline/ClientApp/src/app/common/AppBar.tsx
+++ /dev/null
@@ -1,107 +0,0 @@
-import React from "react";
-import { useHistory, matchPath } from "react-router";
-import { Link, NavLink } from "react-router-dom";
-import { Navbar, NavbarToggler, Collapse, Nav, NavItem } from "reactstrap";
-import { useMediaQuery } from "react-responsive";
-import { useTranslation } from "react-i18next";
-
-import { useUser, useAvatar } from "../data/user";
-
-import TimelineLogo from "./TimelineLogo";
-import BlobImage from "./BlobImage";
-
-const AppBar: React.FC = (_) => {
- const history = useHistory();
- const user = useUser();
- const avatar = useAvatar(user?.username);
-
- const { t } = useTranslation();
-
- const isUpMd = useMediaQuery({
- minWidth: getComputedStyle(document.documentElement).getPropertyValue(
- "--breakpoint-md"
- ),
- });
-
- const [isMenuOpen, setIsMenuOpen] = React.useState(false);
-
- const toggleMenu = React.useCallback((): void => {
- setIsMenuOpen((oldIsMenuOpen) => !oldIsMenuOpen);
- }, []);
-
- const isAdministrator = user && user.administrator;
-
- const rightArea = (
- <div className="ml-auto mr-2">
- {user != null ? (
- <NavLink to={`/users/${user.username}`}>
- <BlobImage
- className="avatar small rounded-circle bg-white"
- blob={avatar}
- />
- </NavLink>
- ) : (
- <NavLink className="text-light" to="/login">
- {t("nav.login")}
- </NavLink>
- )}
- </div>
- );
-
- return (
- <Navbar dark className="fixed-top w-100 bg-primary app-bar" expand="md">
- <Link to="/" className="navbar-brand d-flex align-items-center">
- <TimelineLogo style={{ height: "1em" }} />
- Timeline
- </Link>
-
- {isUpMd ? null : rightArea}
-
- <NavbarToggler onClick={toggleMenu} />
- <Collapse isOpen={isMenuOpen} navbar>
- <Nav className="mr-auto" navbar>
- <NavItem
- className={
- matchPath(history.location.pathname, "/settings")
- ? "active"
- : undefined
- }
- >
- <NavLink className="nav-link" to="/settings">
- {t("nav.settings")}
- </NavLink>
- </NavItem>
-
- <NavItem
- className={
- matchPath(history.location.pathname, "/about")
- ? "active"
- : undefined
- }
- >
- <NavLink className="nav-link" to="/about">
- {t("nav.about")}
- </NavLink>
- </NavItem>
-
- {isAdministrator && (
- <NavItem
- className={
- matchPath(history.location.pathname, "/admin")
- ? "active"
- : undefined
- }
- >
- <NavLink className="nav-link" to="/admin">
- Administration
- </NavLink>
- </NavItem>
- )}
- </Nav>
- {isUpMd ? rightArea : null}
- </Collapse>
- </Navbar>
- );
-};
-
-export default AppBar;
diff --git a/Timeline/ClientApp/src/app/common/FileInput.tsx b/Timeline/ClientApp/src/app/common/FileInput.tsx
deleted file mode 100644
index 3d1bc2b3..00000000
--- a/Timeline/ClientApp/src/app/common/FileInput.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from "react";
-import clsx from "clsx";
-
-import { ExcludeKey } from "../utilities/type";
-
-export interface FileInputProps
- extends ExcludeKey<
- React.InputHTMLAttributes<HTMLInputElement>,
- "type" | "id"
- > {
- inputId?: string;
- labelText: string;
- color?: string;
- className?: string;
-}
-
-const FileInput: React.FC<FileInputProps> = (props) => {
- const { inputId, labelText, color, className, ...otherProps } = props;
-
- const realInputId = React.useMemo<string>(() => {
- if (inputId != null) return inputId;
- return (
- "file-input-" +
- (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
- );
- }, [inputId]);
-
- return (
- <>
- <input className="d-none" type="file" id={realInputId} {...otherProps} />
- <label
- htmlFor={realInputId}
- className={clsx("btn", "btn-" + (color ?? "primary"), className)}
- >
- {labelText}
- </label>
- </>
- );
-};
-
-export default FileInput;
diff --git a/Timeline/ClientApp/src/app/index.sass b/Timeline/ClientApp/src/app/index.sass
index ef0b03ba..08e03bac 100644
--- a/Timeline/ClientApp/src/app/index.sass
+++ b/Timeline/ClientApp/src/app/index.sass
@@ -1,26 +1,20 @@
@import '~bootstrap/scss/bootstrap'
-@import './common/common'
-@import './common/alert'
-@import './home/home'
-@import './about/about'
-@import './timeline/timeline'
-@import './timeline/timeline-ui'
-@import './user/user-page'
+@import './views/common/common'
+@import './views/common/alert/alert'
+@import './views/home/home'
+@import './views/about/about'
+@import './views/login/login'
+@import './views/timeline-common/timeline-common'
+@import './views/timeline/timeline'
+@import './views/user/user'
body
margin: 0
-#app
- display: flex
- flex-direction: column
-
small
line-height: 1.2
-.width-1px
- width: 1px
-
.flex-fix-length
flex-grow: 0
flex-shrink: 0
@@ -29,30 +23,20 @@ small
left: 0
top: 0
-.position-rb
- right: 0
- bottom: 0
-
-.app-bar
- z-index: 1035
-
.avatar
width: 60px
-
-.avatar.large
- width: 100px
-
-.avatar.small
- width: 40px
+ &.large
+ width: 100px
+ &.small
+ width: 40px
.mt-appbar
margin-top: 56px
.icon-button
font-size: 1.4em
-
-.large-icon-button
- font-size: 1.6em
+ &.large
+ font-size: 1.6em
.cursor-pointer
cursor: pointer
diff --git a/Timeline/ClientApp/src/app/service-worker.tsx b/Timeline/ClientApp/src/app/service-worker.tsx
index f71b23b3..3be54bc1 100644
--- a/Timeline/ClientApp/src/app/service-worker.tsx
+++ b/Timeline/ClientApp/src/app/service-worker.tsx
@@ -1,8 +1,8 @@
import React from "react";
-import { Button } from "reactstrap";
import { useTranslation } from "react-i18next";
+import { Button } from "react-bootstrap";
-import { pushAlert } from "./common/alert-service";
+import { pushAlert } from "./services/alert";
if ("serviceWorker" in navigator) {
let isThisTriggerUpgrade = false;
@@ -39,7 +39,11 @@ if ("serviceWorker" in navigator) {
return (
<>
{t("serviceWorker.externalActivatedPrompt")}
- <Button color="success" size="sm" onClick={upgradeReload} outline>
+ <Button
+ variant="outline-success"
+ size="sm"
+ onClick={upgradeReload}
+ >
{t("serviceWorker.reloadNow")}
</Button>
</>
@@ -83,7 +87,7 @@ if ("serviceWorker" in navigator) {
return (
<>
{t("serviceWorker.upgradePrompt")}
- <Button color="success" size="sm" onClick={upgrade} outline>
+ <Button variant="outline-success" size="sm" onClick={upgrade}>
{t("serviceWorker.upgradeNow")}
</Button>
</>
diff --git a/Timeline/ClientApp/src/app/data/DataHub.ts b/Timeline/ClientApp/src/app/services/DataHub.ts
index 93a9b41f..93a9b41f 100644
--- a/Timeline/ClientApp/src/app/data/DataHub.ts
+++ b/Timeline/ClientApp/src/app/services/DataHub.ts
diff --git a/Timeline/ClientApp/src/app/common/alert-service.ts b/Timeline/ClientApp/src/app/services/alert.ts
index e4c0e653..e4c0e653 100644
--- a/Timeline/ClientApp/src/app/common/alert-service.ts
+++ b/Timeline/ClientApp/src/app/services/alert.ts
diff --git a/Timeline/ClientApp/src/app/data/common.ts b/Timeline/ClientApp/src/app/services/common.ts
index 8d52abe5..3bb6b9d7 100644
--- a/Timeline/ClientApp/src/app/data/common.ts
+++ b/Timeline/ClientApp/src/app/services/common.ts
@@ -1,6 +1,6 @@
import localforage from "localforage";
-import { HttpNetworkError } from "../http/common";
+import { HttpNetworkError } from "@/http/common";
export const dataStorage = localforage.createInstance({
name: "data",
diff --git a/Timeline/ClientApp/src/app/data/timeline.ts b/Timeline/ClientApp/src/app/services/timeline.ts
index 3eda35f9..9db76281 100644
--- a/Timeline/ClientApp/src/app/data/timeline.ts
+++ b/Timeline/ClientApp/src/app/services/timeline.ts
@@ -4,7 +4,7 @@ import { Observable, from, combineLatest, of } from "rxjs";
import { map, switchMap, startWith } from "rxjs/operators";
import { uniqBy } from "lodash";
-import { convertError } from "../utilities/rxjs";
+import { convertError } from "@/utilities/rxjs";
import {
TimelineVisibility,
HttpTimelineInfo,
@@ -18,18 +18,18 @@ import {
getHttpTimelineClient,
HttpTimelineNotExistError,
HttpTimelineNameConflictError,
-} from "../http/timeline";
-import { BlobWithEtag, NotModified, HttpForbiddenError } from "../http/common";
-import { HttpUser } from "../http/user";
+} from "@/http/timeline";
+import { BlobWithEtag, NotModified, HttpForbiddenError } from "@/http/common";
+import { HttpUser } from "@/http/user";
+
+export { kTimelineVisibilities } from "@/http/timeline";
+
+export type { TimelineVisibility } from "@/http/timeline";
import { dataStorage, throwIfNotNetworkError, BlobOrStatus } from "./common";
import { DataHub, WithSyncStatus } from "./DataHub";
import { UserAuthInfo, checkLogin, userService, userInfoService } from "./user";
-export { kTimelineVisibilities } from "../http/timeline";
-
-export type { TimelineVisibility } from "../http/timeline";
-
export type TimelineInfo = HttpTimelineInfo;
export type TimelineChangePropertyRequest = HttpTimelinePatchRequest;
export type TimelineCreatePostRequest = HttpTimelinePostPostRequest;
diff --git a/Timeline/ClientApp/src/app/data/user.ts b/Timeline/ClientApp/src/app/services/user.ts
index b8f163eb..f253fc19 100644
--- a/Timeline/ClientApp/src/app/data/user.ts
+++ b/Timeline/ClientApp/src/app/services/user.ts
@@ -2,22 +2,23 @@ import React, { useState, useEffect } from "react";
import { BehaviorSubject, Observable, from } from "rxjs";
import { map, filter } from "rxjs/operators";
-import { UiLogicError } from "../common";
-import { convertError } from "../utilities/rxjs";
-import { pushAlert } from "../common/alert-service";
-import { HttpNetworkError, BlobWithEtag, NotModified } from "../http/common";
+import { UiLogicError } from "@/common";
+import { convertError } from "@/utilities/rxjs";
+
+import { HttpNetworkError, BlobWithEtag, NotModified } from "@/http/common";
import {
getHttpTokenClient,
HttpCreateTokenBadCredentialError,
-} from "../http/token";
+} from "@/http/token";
import {
getHttpUserClient,
HttpUserNotExistError,
HttpUser,
-} from "../http/user";
+} from "@/http/user";
-import { DataHub } from "./DataHub";
import { dataStorage, throwIfNotNetworkError } from "./common";
+import { DataHub } from "./DataHub";
+import { pushAlert } from "./alert";
export type User = HttpUser;
diff --git a/Timeline/ClientApp/src/app/settings/Settings.tsx b/Timeline/ClientApp/src/app/settings/Settings.tsx
deleted file mode 100644
index 64851ce2..00000000
--- a/Timeline/ClientApp/src/app/settings/Settings.tsx
+++ /dev/null
@@ -1,221 +0,0 @@
-import React, { useState } from "react";
-import { useHistory } from "react-router";
-import { useTranslation } from "react-i18next";
-import {
- Container,
- Row,
- Col,
- Input,
- Modal,
- ModalHeader,
- ModalBody,
- ModalFooter,
- Button,
-} from "reactstrap";
-
-import { useUser, userService } from "../data/user";
-import AppBar from "../common/AppBar";
-import OperationDialog, {
- OperationInputErrorInfo,
-} from "../common/OperationDialog";
-
-interface ChangePasswordDialogProps {
- open: boolean;
- close: () => void;
-}
-
-const ChangePasswordDialog: React.FC<ChangePasswordDialogProps> = (props) => {
- const history = useHistory();
- const { t } = useTranslation();
-
- const [redirect, setRedirect] = useState<boolean>(false);
-
- return (
- <OperationDialog
- open={props.open}
- title={t("settings.dialogChangePassword.title")}
- titleColor="dangerous"
- inputPrompt={t("settings.dialogChangePassword.prompt")}
- inputScheme={[
- {
- type: "text",
- label: t("settings.dialogChangePassword.inputOldPassword"),
- password: true,
- validator: (v) =>
- v === ""
- ? "settings.dialogChangePassword.errorEmptyOldPassword"
- : null,
- },
- {
- type: "text",
- label: t("settings.dialogChangePassword.inputNewPassword"),
- password: true,
- validator: (v, values) => {
- const error: OperationInputErrorInfo = {};
- error[1] =
- v === ""
- ? "settings.dialogChangePassword.errorEmptyNewPassword"
- : null;
- if (v === values[2]) {
- error[2] = null;
- } else {
- if (values[2] !== "") {
- error[2] = "settings.dialogChangePassword.errorRetypeNotMatch";
- }
- }
- return error;
- },
- },
- {
- type: "text",
- label: t("settings.dialogChangePassword.inputRetypeNewPassword"),
- password: true,
- validator: (v, values) =>
- v !== values[1]
- ? "settings.dialogChangePassword.errorRetypeNotMatch"
- : null,
- },
- ]}
- onProcess={async ([oldPassword, newPassword]) => {
- await userService
- .changePassword(oldPassword as string, newPassword as string)
- .toPromise();
- await userService.logout();
- setRedirect(true);
- }}
- close={() => {
- props.close();
- if (redirect) {
- history.push("/login");
- }
- }}
- />
- );
-};
-
-const ConfirmLogoutDialog: React.FC<{
- toggle: () => void;
- onConfirm: () => void;
-}> = ({ toggle, onConfirm }) => {
- const { t } = useTranslation();
-
- return (
- <Modal isOpen centered>
- <ModalHeader className="text-danger">
- {t("settings.dialogConfirmLogout.title")}
- </ModalHeader>
- <ModalBody>{t("settings.dialogConfirmLogout.prompt")}</ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={toggle}>
- {t("operationDialog.cancel")}
- </Button>
- <Button color="danger" onClick={onConfirm}>
- {t("operationDialog.confirm")}
- </Button>
- </ModalFooter>
- </Modal>
- );
-};
-
-const Settings: React.FC = (_) => {
- const { i18n, t } = useTranslation();
- const user = useUser();
- const history = useHistory();
-
- const [dialog, setDialog] = useState<null | "changepassword" | "logout">(
- null
- );
-
- const language = i18n.language.slice(0, 2);
-
- return (
- <>
- <AppBar />
- <Container fluid className="mt-appbar">
- {user ? (
- <>
- <Row className="border-bottom p-3 cursor-pointer">
- <Col xs="12">
- <h5
- onClick={() => {
- history.push(`/users/${user.username}`);
- }}
- >
- {t("settings.gotoSelf")}
- </h5>
- </Col>
- </Row>
- <Row className="border-bottom p-3 cursor-pointer">
- <Col xs="12">
- <h5
- className="text-danger"
- onClick={() => setDialog("changepassword")}
- >
- {t("settings.changePassword")}
- </h5>
- </Col>
- </Row>
- <Row className="border-bottom p-3 cursor-pointer">
- <Col xs="12">
- <h5
- className="text-danger"
- onClick={() => {
- setDialog("logout");
- }}
- >
- {t("settings.logout")}
- </h5>
- </Col>
- </Row>
- </>
- ) : null}
- <Row className="align-items-center border-bottom p-3">
- <Col xs="12" sm="auto">
- <h5>{t("settings.languagePrimary")}</h5>
- <p>{t("settings.languageSecondary")}</p>
- </Col>
- <Col xs="auto" className="ml-auto">
- <Input
- type="select"
- value={language}
- onChange={(e) => {
- void i18n.changeLanguage(e.target.value);
- }}
- >
- <option value="zh">中文</option>
- <option value="en">English</option>
- </Input>
- </Col>
- </Row>
- {(() => {
- switch (dialog) {
- case "changepassword":
- return (
- <ChangePasswordDialog
- open
- close={() => {
- setDialog(null);
- }}
- />
- );
- case "logout":
- return (
- <ConfirmLogoutDialog
- toggle={() => setDialog(null)}
- onConfirm={() => {
- void userService.logout().then(() => {
- history.push("/");
- });
- }}
- />
- );
- default:
- return null;
- }
- })()}
- </Container>
- </>
- );
-};
-
-export default Settings;
diff --git a/Timeline/ClientApp/src/app/timeline/TimelineInfoCard.tsx b/Timeline/ClientApp/src/app/timeline/TimelineInfoCard.tsx
deleted file mode 100644
index c11c3376..00000000
--- a/Timeline/ClientApp/src/app/timeline/TimelineInfoCard.tsx
+++ /dev/null
@@ -1,110 +0,0 @@
-import React from "react";
-import clsx from "clsx";
-import {
- Dropdown,
- DropdownToggle,
- DropdownMenu,
- DropdownItem,
- Button,
-} from "reactstrap";
-import { useTranslation } from "react-i18next";
-import { fromEvent } from "rxjs";
-
-import { useAvatar } from "../data/user";
-import { timelineVisibilityTooltipTranslationMap } from "../data/timeline";
-import BlobImage from "../common/BlobImage";
-
-import { TimelineCardComponentProps } from "./TimelinePageTemplateUI";
-
-export type OrdinaryTimelineManageItem = "delete";
-
-export type TimelineInfoCardProps = TimelineCardComponentProps<
- OrdinaryTimelineManageItem
->;
-
-const TimelineInfoCard: React.FC<TimelineInfoCardProps> = (props) => {
- const { onHeight, onManage } = props;
-
- const { t } = useTranslation();
-
- const avatar = useAvatar(props.timeline.owner.username);
-
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const containerRef = React.useRef<HTMLDivElement>(null!);
-
- const notifyHeight = React.useCallback((): void => {
- if (onHeight) {
- onHeight(containerRef.current.getBoundingClientRect().height);
- }
- }, [onHeight]);
-
- React.useEffect(() => {
- const subscription = fromEvent(window, "resize").subscribe(notifyHeight);
- return () => subscription.unsubscribe();
- });
-
- const [manageDropdownOpen, setManageDropdownOpen] = React.useState<boolean>(
- false
- );
- const toggleManageDropdown = React.useCallback(
- (): void => setManageDropdownOpen((old) => !old),
- []
- );
-
- return (
- <div
- ref={containerRef}
- className={clsx("rounded border p-2 bg-light", props.className)}
- onTransitionEnd={notifyHeight}
- >
- <h3 className="text-primary mx-3 d-inline-block align-middle">
- {props.timeline.name}
- </h3>
- <div className="d-inline-block align-middle">
- <BlobImage
- blob={avatar}
- onLoad={notifyHeight}
- className="avatar small rounded-circle"
- />
- {props.timeline.owner.nickname}
- <small className="ml-3 text-secondary">
- @{props.timeline.owner.username}
- </small>
- </div>
- <p className="mb-0">{props.timeline.description}</p>
- <small className="mt-1 d-block">
- {t(timelineVisibilityTooltipTranslationMap[props.timeline.visibility])}
- </small>
- <div className="text-right mt-2">
- {onManage != null ? (
- <Dropdown isOpen={manageDropdownOpen} toggle={toggleManageDropdown}>
- <DropdownToggle outline color="primary">
- {t("timeline.manage")}
- </DropdownToggle>
- <DropdownMenu>
- <DropdownItem onClick={() => onManage("property")}>
- {t("timeline.manageItem.property")}
- </DropdownItem>
- <DropdownItem onClick={props.onMember}>
- {t("timeline.manageItem.member")}
- </DropdownItem>
- <DropdownItem divider />
- <DropdownItem
- className="text-danger"
- onClick={() => onManage("delete")}
- >
- {t("timeline.manageItem.delete")}
- </DropdownItem>
- </DropdownMenu>
- </Dropdown>
- ) : (
- <Button color="primary" outline onClick={props.onMember}>
- {t("timeline.memberButton")}
- </Button>
- )}
- </div>
- </div>
- );
-};
-
-export default TimelineInfoCard;
diff --git a/Timeline/ClientApp/src/app/timeline/timeline-ui.sass b/Timeline/ClientApp/src/app/timeline/timeline-ui.sass
deleted file mode 100644
index 79be64d3..00000000
--- a/Timeline/ClientApp/src/app/timeline/timeline-ui.sass
+++ /dev/null
@@ -1,35 +0,0 @@
-.info-card-container
- .info-card-collapse-button
- z-index: 1
- position: relative
-
- .info-card-content
- width: 100%
- position: absolute
- transform-origin: right top
- transition: transform 0.5s
-
- &[data-collapse='true']
- .info-card-content
- transform: scale(0)
-
-.timeline-page-top-space
- transition: height 0.5s
-
-.timeline-sync-state-badge
- position: fixed
- top: 0
- right: 0
- z-index: 1
- font-size: 0.8em
- padding: 3px 8px
- border-radius: 5px
- background: #e8fbff
-
-.timeline-sync-state-badge-pin
- display: inline-block
- width: 0.4em
- height: 0.4em
- border-radius: 50%
- vertical-align: middle
- margin-right: 0.6em
diff --git a/Timeline/ClientApp/src/app/user/Login.tsx b/Timeline/ClientApp/src/app/user/Login.tsx
deleted file mode 100644
index db6c43c4..00000000
--- a/Timeline/ClientApp/src/app/user/Login.tsx
+++ /dev/null
@@ -1,147 +0,0 @@
-import React, { Fragment, useState, useEffect } from "react";
-import { useHistory } from "react-router";
-import { useTranslation } from "react-i18next";
-import {
- Label,
- FormGroup,
- Input,
- Form,
- FormFeedback,
- Spinner,
- Button,
-} from "reactstrap";
-
-import AppBar from "../common/AppBar";
-import { useUser, userService } from "../data/user";
-
-const Login: React.FC = (_) => {
- const { t } = useTranslation();
- const history = useHistory();
- const [username, setUsername] = useState<string>("");
- const [usernameDirty, setUsernameDirty] = useState<boolean>(false);
- const [password, setPassword] = useState<string>("");
- const [passwordDirty, setPasswordDirty] = useState<boolean>(false);
- const [rememberMe, setRememberMe] = useState<boolean>(true);
- const [process, setProcess] = useState<boolean>(false);
- const [error, setError] = useState<string | null>(null);
-
- const user = useUser();
-
- useEffect(() => {
- if (user != null) {
- const id = setTimeout(() => history.push("/"), 3000);
- return () => {
- clearTimeout(id);
- };
- }
- }, [history, user]);
-
- if (user != null) {
- return (
- <>
- <AppBar />
- <p className="mt-appbar">{t("login.alreadyLogin")}</p>
- </>
- );
- }
-
- function onSubmit(event: React.SyntheticEvent): void {
- if (username === "" || password === "") {
- setUsernameDirty(true);
- setPasswordDirty(true);
- return;
- }
-
- setProcess(true);
- userService
- .login(
- {
- username: username,
- password: password,
- },
- rememberMe
- )
- .then(
- () => {
- if (history.length === 0) {
- history.push("/");
- } else {
- history.goBack();
- }
- },
- (e: Error) => {
- setProcess(false);
- setError(e.message);
- }
- );
- event.preventDefault();
- }
-
- return (
- <Fragment>
- <AppBar />
- <div className="container login-container mt-appbar">
- <h1>{t("welcome")}</h1>
- <Form>
- <FormGroup>
- <Label for="username">{t("user.username")}</Label>
- <Input
- id="username"
- disabled={process}
- onChange={(e) => {
- setUsername(e.target.value);
- setUsernameDirty(true);
- }}
- value={username}
- invalid={usernameDirty && username === ""}
- />
- {usernameDirty && username === "" && (
- <FormFeedback>{t("login.emptyUsername")}</FormFeedback>
- )}
- </FormGroup>
- <FormGroup>
- <Label for="password">{t("user.password")}</Label>
- <Input
- id="password"
- type="password"
- disabled={process}
- onChange={(e) => {
- setPassword(e.target.value);
- setPasswordDirty(true);
- }}
- value={password}
- invalid={passwordDirty && password === ""}
- />
- {passwordDirty && password === "" && (
- <FormFeedback>{t("login.emptyPassword")}</FormFeedback>
- )}
- </FormGroup>
- <FormGroup check>
- <Input
- id="remember-me"
- type="checkbox"
- checked={rememberMe}
- onChange={(e) => {
- const v = (e.target as HTMLInputElement).checked;
- setRememberMe(v);
- }}
- />
- <Label for="remember-me">{t("user.rememberMe")}</Label>
- </FormGroup>
- {error ? <p className="text-error">{t(error)}</p> : null}
- <div>
- {process ? (
- <Spinner />
- ) : (
- <Button color="primary" onClick={onSubmit}>
- {t("user.login")}
- </Button>
- )}
- </div>
- </Form>
- </div>
- </Fragment>
- );
-};
-
-export default Login;
diff --git a/Timeline/ClientApp/src/app/user/UserInfoCard.tsx b/Timeline/ClientApp/src/app/user/UserInfoCard.tsx
deleted file mode 100644
index d6e648cc..00000000
--- a/Timeline/ClientApp/src/app/user/UserInfoCard.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-import React from "react";
-import clsx from "clsx";
-import {
- Dropdown,
- DropdownToggle,
- DropdownMenu,
- DropdownItem,
- Button,
-} from "reactstrap";
-import { useTranslation } from "react-i18next";
-import { fromEvent } from "rxjs";
-
-import { timelineVisibilityTooltipTranslationMap } from "../data/timeline";
-import { useAvatar } from "../data/user";
-import { TimelineCardComponentProps } from "../timeline/TimelinePageTemplateUI";
-import BlobImage from "../common/BlobImage";
-
-export type PersonalTimelineManageItem = "avatar" | "nickname";
-
-export type UserInfoCardProps = TimelineCardComponentProps<
- PersonalTimelineManageItem
->;
-
-const UserInfoCard: React.FC<UserInfoCardProps> = (props) => {
- const { onHeight, onManage } = props;
- const { t } = useTranslation();
-
- const avatar = useAvatar(props.timeline.owner.username);
-
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const containerRef = React.useRef<HTMLDivElement>(null!);
-
- const notifyHeight = React.useCallback((): void => {
- if (onHeight) {
- onHeight(containerRef.current.getBoundingClientRect().height);
- }
- }, [onHeight]);
-
- React.useEffect(() => {
- const subscription = fromEvent(window, "resize").subscribe(notifyHeight);
- return () => subscription.unsubscribe();
- });
-
- const [manageDropdownOpen, setManageDropdownOpen] = React.useState<boolean>(
- false
- );
- const toggleManageDropdown = React.useCallback(
- (): void => setManageDropdownOpen((old) => !old),
- []
- );
-
- return (
- <div
- ref={containerRef}
- className={clsx("rounded border bg-light p-2", props.className)}
- onTransitionEnd={notifyHeight}
- >
- <BlobImage
- blob={avatar}
- onLoad={notifyHeight}
- className="avatar large mr-2 mb-2 rounded-circle float-left"
- />
- <div>
- {props.timeline.owner.nickname}
- <small className="ml-3 text-secondary">
- @{props.timeline.owner.username}
- </small>
- </div>
- <p className="mb-0">{props.timeline.description}</p>
- <small className="mt-1 d-block">
- {t(timelineVisibilityTooltipTranslationMap[props.timeline.visibility])}
- </small>
- <div className="text-right mt-2">
- {onManage != null ? (
- <Dropdown isOpen={manageDropdownOpen} toggle={toggleManageDropdown}>
- <DropdownToggle outline color="primary">
- {t("timeline.manage")}
- </DropdownToggle>
- <DropdownMenu>
- <DropdownItem onClick={() => onManage("nickname")}>
- {t("timeline.manageItem.nickname")}
- </DropdownItem>
- <DropdownItem onClick={() => onManage("avatar")}>
- {t("timeline.manageItem.avatar")}
- </DropdownItem>
- <DropdownItem onClick={() => onManage("property")}>
- {t("timeline.manageItem.property")}
- </DropdownItem>
- <DropdownItem onClick={props.onMember}>
- {t("timeline.manageItem.member")}
- </DropdownItem>
- </DropdownMenu>
- </Dropdown>
- ) : (
- <Button color="primary" outline onClick={props.onMember}>
- {t("timeline.memberButton")}
- </Button>
- )}
- </div>
- </div>
- );
-};
-
-export default UserInfoCard;
diff --git a/Timeline/ClientApp/src/app/utilities/type.ts b/Timeline/ClientApp/src/app/utilities/type.ts
deleted file mode 100644
index 8df9bf0f..00000000
--- a/Timeline/ClientApp/src/app/utilities/type.ts
+++ /dev/null
@@ -1 +0,0 @@
-export type ExcludeKey<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
diff --git a/Timeline/ClientApp/src/app/about/about.sass b/Timeline/ClientApp/src/app/views/about/about.sass
index 3b5840cd..3b5840cd 100644
--- a/Timeline/ClientApp/src/app/about/about.sass
+++ b/Timeline/ClientApp/src/app/views/about/about.sass
diff --git a/Timeline/ClientApp/src/app/about/author-avatar.png b/Timeline/ClientApp/src/app/views/about/author-avatar.png
index d890d8d0..d890d8d0 100644
--- a/Timeline/ClientApp/src/app/about/author-avatar.png
+++ b/Timeline/ClientApp/src/app/views/about/author-avatar.png
Binary files differ
diff --git a/Timeline/ClientApp/src/app/about/github.png b/Timeline/ClientApp/src/app/views/about/github.png
index ea6ff545..ea6ff545 100644
--- a/Timeline/ClientApp/src/app/about/github.png
+++ b/Timeline/ClientApp/src/app/views/about/github.png
Binary files differ
diff --git a/Timeline/ClientApp/src/app/views/about/index.tsx b/Timeline/ClientApp/src/app/views/about/index.tsx
new file mode 100644
index 00000000..e7771cec
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/about/index.tsx
@@ -0,0 +1,164 @@
+import React from "react";
+import { useTranslation, Trans } from "react-i18next";
+
+import authorAvatarUrl from "./author-avatar.png";
+import githubLogoUrl from "./github.png";
+
+const frontendCredits: {
+ name: string;
+ url: string;
+}[] = [
+ {
+ name: "reactjs",
+ url: "https://reactjs.org",
+ },
+ {
+ name: "typescript",
+ url: "https://www.typescriptlang.org",
+ },
+ {
+ name: "bootstrap",
+ url: "https://getbootstrap.com",
+ },
+ {
+ name: "react-bootstrap",
+ url: "https://react-bootstrap.github.io",
+ },
+ {
+ name: "babeljs",
+ url: "https://babeljs.io",
+ },
+ {
+ name: "webpack",
+ url: "https://webpack.js.org",
+ },
+ {
+ name: "sass",
+ url: "https://sass-lang.com",
+ },
+ {
+ name: "eslint",
+ url: "https://eslint.org",
+ },
+ {
+ name: "prettier",
+ url: "https://prettier.io",
+ },
+ {
+ name: "pepjs",
+ url: "https://github.com/jquery/PEP",
+ },
+ {
+ name: "react-inlinesvg",
+ url: "https://github.com/gilbarbara/react-inlinesvg",
+ },
+];
+
+const backendCredits: {
+ name: string;
+ url: string;
+}[] = [
+ {
+ name: "ASP.NET Core",
+ url: "https://dotnet.microsoft.com/learn/aspnet/what-is-aspnet-core",
+ },
+ { name: "sqlite", url: "https://sqlite.org" },
+ {
+ name: "ImageSharp",
+ url: "https://github.com/SixLabors/ImageSharp",
+ },
+];
+
+const AboutPage: React.FC = () => {
+ const { t } = useTranslation();
+
+ return (
+ <div className="mt-appbar px-2 mb-4">
+ <div className="container mt-4 py-3 shadow border border-primary rounded bg-light">
+ <h4 id="author-info">{t("about.author.title")}</h4>
+ <div>
+ <div className="d-flex">
+ <img
+ src={authorAvatarUrl}
+ className="align-self-start avatar large rounded-circle"
+ />
+ <div>
+ <p>
+ <small>{t("about.author.fullname")}</small>
+ <span className="text-primary">杨宇千</span>
+ </p>
+ <p>
+ <small>{t("about.author.nickname")}</small>
+ <span className="text-primary">crupest</span>
+ </p>
+ <p>
+ <small>{t("about.author.introduction")}</small>
+ {t("about.author.introductionContent")}
+ </p>
+ </div>
+ </div>
+ <p>
+ <small>{t("about.author.links")}</small>
+ <a
+ href="https://github.com/crupest"
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ <img src={githubLogoUrl} className="about-link-icon text-body" />
+ </a>
+ </p>
+ </div>
+ </div>
+ <div className="container mt-4 py-3 shadow border border-primary rounded bg-light">
+ <h4>{t("about.site.title")}</h4>
+ <p>
+ <Trans i18nKey="about.site.content">
+ 0<span className="text-primary">1</span>2<b>3</b>4
+ <a href="#author-info">5</a>6
+ </Trans>
+ </p>
+ <p>
+ <a
+ href="https://github.com/crupest/Timeline"
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ {t("about.site.repo")}
+ </a>
+ </p>
+ </div>
+ <div className="container mt-4 py-3 shadow border border-primary rounded bg-light">
+ <h4>{t("about.credits.title")}</h4>
+ <p>{t("about.credits.content")}</p>
+ <p>{t("about.credits.frontend")}</p>
+ <ul>
+ {frontendCredits.map((item, index) => {
+ return (
+ <li key={index}>
+ <a href={item.url} target="_blank" rel="noopener noreferrer">
+ {item.name}
+ </a>
+ </li>
+ );
+ })}
+ <li>...</li>
+ </ul>
+ <p>{t("about.credits.backend")}</p>
+ <ul>
+ {backendCredits.map((item, index) => {
+ return (
+ <li key={index}>
+ <a href={item.url} target="_blank" rel="noopener noreferrer">
+ {item.name}
+ </a>
+ </li>
+ );
+ })}
+ <li>...</li>
+ </ul>
+ </div>
+ </div>
+ );
+};
+
+export default AboutPage;
diff --git a/Timeline/ClientApp/src/app/admin/Admin.tsx b/Timeline/ClientApp/src/app/views/admin/Admin.tsx
index e2f71091..9c0250e7 100644
--- a/Timeline/ClientApp/src/app/admin/Admin.tsx
+++ b/Timeline/ClientApp/src/app/views/admin/Admin.tsx
@@ -1,5 +1,4 @@
import React, { Fragment } from "react";
-import { Nav, NavItem, NavLink } from "reactstrap";
import {
Redirect,
Route,
@@ -7,10 +6,9 @@ import {
useRouteMatch,
useHistory,
} from "react-router";
-import classnames from "classnames";
+import { Nav } from "react-bootstrap";
-import AppBar from "../common/AppBar";
-import { UserWithToken } from "../data/user";
+import { UserWithToken } from "@/services/user";
import UserAdmin from "./UserAdmin";
@@ -35,29 +33,28 @@ const Admin: React.FC<AdminProps> = (props) => {
): React.ReactNode => {
return (
<Route path={`${match.path}/${name}`}>
- <AppBar />
<div style={{ height: 56 }} className="flex-fix-length" />
- <Nav tabs>
- <NavItem>
- <NavLink
- className={classnames({ active: tabName === "users" })}
+ <Nav variant="tabs">
+ <Nav.Item>
+ <Nav.Link
+ active={tabName === "users"}
onClick={() => {
toggle("users");
}}
>
Users
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={classnames({ active: tabName === "more" })}
+ </Nav.Link>
+ </Nav.Item>
+ <Nav.Item>
+ <Nav.Link
+ active={tabName === "more"}
onClick={() => {
toggle("more");
}}
>
More
- </NavLink>
- </NavItem>
+ </Nav.Link>
+ </Nav.Item>
</Nav>
{body}
</Route>
diff --git a/Timeline/ClientApp/src/app/admin/UserAdmin.tsx b/Timeline/ClientApp/src/app/views/admin/UserAdmin.tsx
index 1bf3bda1..18b77ca8 100644
--- a/Timeline/ClientApp/src/app/admin/UserAdmin.tsx
+++ b/Timeline/ClientApp/src/app/views/admin/UserAdmin.tsx
@@ -1,19 +1,16 @@
import React, { useState, useEffect } from "react";
+import axios from "axios";
import {
- ListGroupItem,
+ ListGroup,
Row,
Col,
- UncontrolledDropdown,
- DropdownToggle,
- DropdownMenu,
- DropdownItem,
+ Dropdown,
Spinner,
Button,
-} from "reactstrap";
-import axios from "axios";
+} from "react-bootstrap";
import OperationDialog from "../common/OperationDialog";
-import { User, UserWithToken } from "../data/user";
+import { User, UserWithToken } from "@/services/user";
const apiBaseUrl = "/api";
@@ -101,7 +98,7 @@ const UserItem: React.FC<UserCardProps> = (props) => {
};
return (
- <ListGroupItem className="container">
+ <ListGroup.Item className="container">
<Row className="align-items-center">
<Col>
<p className="mb-0 text-primary">{user.username}</p>
@@ -112,31 +109,31 @@ const UserItem: React.FC<UserCardProps> = (props) => {
</small>
</Col>
<Col className="col-auto">
- <UncontrolledDropdown>
- <DropdownToggle color="warning" className="text-light" caret>
+ <Dropdown>
+ <Dropdown.Toggle variant="warning" className="text-light">
Manage
- </DropdownToggle>
- <DropdownMenu>
- <DropdownItem onClick={createClickCallback(kChangeUsername)}>
+ </Dropdown.Toggle>
+ <Dropdown.Menu>
+ <Dropdown.Item onClick={createClickCallback(kChangeUsername)}>
Change Username
- </DropdownItem>
- <DropdownItem onClick={createClickCallback(kChangePassword)}>
+ </Dropdown.Item>
+ <Dropdown.Item onClick={createClickCallback(kChangePassword)}>
Change Password
- </DropdownItem>
- <DropdownItem onClick={createClickCallback(kChangePermission)}>
+ </Dropdown.Item>
+ <Dropdown.Item onClick={createClickCallback(kChangePermission)}>
Change Permission
- </DropdownItem>
- <DropdownItem
+ </Dropdown.Item>
+ <Dropdown.Item
className="text-danger"
onClick={createClickCallback(kDelete)}
>
Delete
- </DropdownItem>
- </DropdownMenu>
- </UncontrolledDropdown>
+ </Dropdown.Item>
+ </Dropdown.Menu>
+ </Dropdown>
</Col>
</Row>
- </ListGroupItem>
+ </ListGroup.Item>
);
};
@@ -441,7 +438,7 @@ const UserAdmin: React.FC<UserAdminProps> = (props) => {
return (
<>
<Button
- color="success"
+ variant="success"
onClick={() =>
setDialog({
type: "create",
@@ -456,7 +453,7 @@ const UserAdmin: React.FC<UserAdminProps> = (props) => {
</>
);
} else {
- return <Spinner />;
+ return <Spinner animation="border" />;
}
};
diff --git a/Timeline/ClientApp/src/app/views/common/AppBar.tsx b/Timeline/ClientApp/src/app/views/common/AppBar.tsx
new file mode 100644
index 00000000..ee4ead8f
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/common/AppBar.tsx
@@ -0,0 +1,64 @@
+import React from "react";
+import { useTranslation } from "react-i18next";
+import { LinkContainer } from "react-router-bootstrap";
+import { Navbar, Nav } from "react-bootstrap";
+
+import { useUser, useAvatar } from "@/services/user";
+
+import TimelineLogo from "./TimelineLogo";
+import BlobImage from "./BlobImage";
+
+const AppBar: React.FC = (_) => {
+ const user = useUser();
+ const avatar = useAvatar(user?.username);
+
+ const { t } = useTranslation();
+
+ const isAdministrator = user && user.administrator;
+
+ return (
+ <Navbar bg="primary" variant="dark" expand="md" sticky="top">
+ <LinkContainer to="/">
+ <Navbar.Brand className="d-flex align-items-center">
+ <TimelineLogo style={{ height: "1em" }} />
+ Timeline
+ </Navbar.Brand>
+ </LinkContainer>
+
+ <Navbar.Toggle />
+ <Navbar.Collapse>
+ <Nav className="mr-auto">
+ <LinkContainer to="/settings">
+ <Nav.Link>{t("nav.settings")}</Nav.Link>
+ </LinkContainer>
+
+ <LinkContainer to="/about">
+ <Nav.Link>{t("nav.about")}</Nav.Link>
+ </LinkContainer>
+
+ {isAdministrator && (
+ <LinkContainer to="/admin">
+ <Nav.Link>Administration</Nav.Link>
+ </LinkContainer>
+ )}
+ </Nav>
+ <Nav className="ml-auto mr-2">
+ {user != null ? (
+ <LinkContainer to={`/users/${user.username}`}>
+ <BlobImage
+ className="avatar small rounded-circle bg-white"
+ blob={avatar}
+ />
+ </LinkContainer>
+ ) : (
+ <LinkContainer to="/login">
+ <Nav.Link>{t("nav.login")}</Nav.Link>
+ </LinkContainer>
+ )}
+ </Nav>
+ </Navbar.Collapse>
+ </Navbar>
+ );
+};
+
+export default AppBar;
diff --git a/Timeline/ClientApp/src/app/common/BlobImage.tsx b/Timeline/ClientApp/src/app/views/common/BlobImage.tsx
index 8602f550..0dd25c52 100644
--- a/Timeline/ClientApp/src/app/common/BlobImage.tsx
+++ b/Timeline/ClientApp/src/app/views/common/BlobImage.tsx
@@ -1,9 +1,7 @@
import React from "react";
-import { ExcludeKey } from "../utilities/type";
-
const BlobImage: React.FC<
- ExcludeKey<React.ImgHTMLAttributes<HTMLImageElement>, "src"> & {
+ Omit<React.ImgHTMLAttributes<HTMLImageElement>, "src"> & {
blob?: Blob | unknown;
}
> = (props) => {
diff --git a/Timeline/ClientApp/src/app/common/ImageCropper.tsx b/Timeline/ClientApp/src/app/views/common/ImageCropper.tsx
index cd510969..b9db8b99 100644
--- a/Timeline/ClientApp/src/app/common/ImageCropper.tsx
+++ b/Timeline/ClientApp/src/app/views/common/ImageCropper.tsx
@@ -1,7 +1,7 @@
-import * as React from "react";
+import React from "react";
import clsx from "clsx";
-import { UiLogicError } from "../common";
+import { UiLogicError } from "@/common";
export interface Clip {
left: number;
diff --git a/Timeline/ClientApp/src/app/views/common/LoadingButton.tsx b/Timeline/ClientApp/src/app/views/common/LoadingButton.tsx
new file mode 100644
index 00000000..154334a7
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/common/LoadingButton.tsx
@@ -0,0 +1,29 @@
+import React from "react";
+import { Button, ButtonProps, Spinner } from "react-bootstrap";
+
+const LoadingButton: React.FC<{ loading?: boolean } & ButtonProps> = ({
+ loading,
+ variant,
+ disabled,
+ ...otherProps
+}) => {
+ return (
+ <Button
+ variant={variant != null ? `outline-${variant}` : "outline-primary"}
+ disabled={disabled || loading}
+ {...otherProps}
+ >
+ {otherProps.children}
+ {loading ? (
+ <Spinner
+ className="ml-1"
+ variant={variant}
+ animation="grow"
+ size="sm"
+ />
+ ) : null}
+ </Button>
+ );
+};
+
+export default LoadingButton;
diff --git a/Timeline/ClientApp/src/app/common/LoadingPage.tsx b/Timeline/ClientApp/src/app/views/common/LoadingPage.tsx
index a849126d..590fafa0 100644
--- a/Timeline/ClientApp/src/app/common/LoadingPage.tsx
+++ b/Timeline/ClientApp/src/app/views/common/LoadingPage.tsx
@@ -1,10 +1,10 @@
import React from "react";
-import { Spinner } from "reactstrap";
+import { Spinner } from "react-bootstrap";
const LoadingPage: React.FC = () => {
return (
<div className="position-fixed w-100 h-100 d-flex justify-content-center align-items-center">
- <Spinner style={{ height: "2.5rem", width: "2.5rem" }} color="primary" />
+ <Spinner variant="primary" animation="border" />
</div>
);
};
diff --git a/Timeline/ClientApp/src/app/common/OperationDialog.tsx b/Timeline/ClientApp/src/app/views/common/OperationDialog.tsx
index bca4580c..841392a6 100644
--- a/Timeline/ClientApp/src/app/common/OperationDialog.tsx
+++ b/Timeline/ClientApp/src/app/views/common/OperationDialog.tsx
@@ -1,29 +1,10 @@
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
-import {
- Spinner,
- Container,
- ModalBody,
- Label,
- Input,
- FormGroup,
- FormFeedback,
- ModalFooter,
- Button,
- Modal,
- ModalHeader,
- FormText,
-} from "reactstrap";
-
-import { UiLogicError } from "../common";
-
-const DefaultProcessPrompt: React.FC = (_) => {
- return (
- <Container className="justify-content-center align-items-center">
- <Spinner />
- </Container>
- );
-};
+import { Form, Button, Modal } from "react-bootstrap";
+
+import { UiLogicError } from "@/common";
+
+import LoadingButton from "./LoadingButton";
interface DefaultErrorPromptProps {
error?: string;
@@ -64,7 +45,7 @@ export interface OperationTextInputInfo {
initValue?: string;
textFieldProps?: Omit<
React.InputHTMLAttributes<HTMLInputElement>,
- "type" | "value" | "onChange"
+ "type" | "value" | "onChange" | "aria-relevant"
>;
helperText?: string;
validator?: OperationInputValidator<string>;
@@ -167,7 +148,9 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
};
let body: React.ReactNode;
- if (step === "input") {
+ if (step === "input" || step === "process") {
+ const process = step === "process";
+
let inputPrompt =
typeof props.inputPrompt === "function"
? props.inputPrompt()
@@ -233,7 +216,7 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
body = (
<>
- <ModalBody>
+ <Modal.Body>
{inputPrompt}
{inputScheme.map((item, index) => {
const value = values[index];
@@ -242,9 +225,9 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
if (item.type === "text") {
return (
- <FormGroup key={index}>
- {item.label && <Label>{t(item.label)}</Label>}
- <Input
+ <Form.Group key={index}>
+ {item.label && <Form.Label>{t(item.label)}</Form.Label>}
+ <Form.Control
type={item.password === true ? "password" : "text"}
value={value as string}
onChange={(e) => {
@@ -258,39 +241,44 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
)
);
}}
- invalid={error != null}
- {...item.textFieldProps}
+ isInvalid={error != null}
+ disabled={process}
/>
- {error != null && <FormFeedback>{error}</FormFeedback>}
- {item.helperText && <FormText>{t(item.helperText)}</FormText>}
- </FormGroup>
+ {error != null && (
+ <Form.Control.Feedback type="invalid">
+ {error}
+ </Form.Control.Feedback>
+ )}
+ {item.helperText && (
+ <Form.Text>{t(item.helperText)}</Form.Text>
+ )}
+ </Form.Group>
);
} else if (item.type === "bool") {
return (
- <FormGroup check key={index}>
- <Input
+ <Form.Group key={index}>
+ <Form.Check<"input">
type="checkbox"
- value={value as string}
- onChange={(e) => {
- updateValue(
- index,
- (e.target as HTMLInputElement).checked
- );
+ checked={value as boolean}
+ onChange={(event) => {
+ updateValue(index, event.currentTarget.checked);
}}
+ label={t(item.label)}
+ disabled={process}
/>
- <Label check>{t(item.label)}</Label>
- </FormGroup>
+ </Form.Group>
);
} else if (item.type === "select") {
return (
- <FormGroup key={index}>
- <Label>{t(item.label)}</Label>
- <Input
- type="select"
+ <Form.Group key={index}>
+ <Form.Label>{t(item.label)}</Form.Label>
+ <Form.Control
+ as="select"
value={value as string}
onChange={(event) => {
updateValue(index, event.target.value);
}}
+ disabled={process}
>
{item.options.map((option, i) => {
return (
@@ -300,18 +288,19 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
</option>
);
})}
- </Input>
- </FormGroup>
+ </Form.Control>
+ </Form.Group>
);
}
})}
- </ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={close}>
+ </Modal.Body>
+ <Modal.Footer>
+ <Button variant="outline-secondary" onClick={close}>
{t("operationDialog.cancel")}
</Button>
- <Button
- color="primary"
+ <LoadingButton
+ variant="primary"
+ loading={process}
disabled={testErrorInfo(inputError)}
onClick={() => {
if (validateAll()) {
@@ -320,16 +309,10 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
}}
>
{t("operationDialog.confirm")}
- </Button>
- </ModalFooter>
+ </LoadingButton>
+ </Modal.Footer>
</>
);
- } else if (step === "process") {
- body = (
- <ModalBody>
- {props.processPrompt?.() ?? <DefaultProcessPrompt />}
- </ModalBody>
- );
} else {
let content: React.ReactNode;
const result = step;
@@ -345,12 +328,12 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
}
body = (
<>
- <ModalBody>{content}</ModalBody>
- <ModalFooter>
- <Button color="primary" onClick={close}>
+ <Modal.Body>{content}</Modal.Body>
+ <Modal.Footer>
+ <Button variant="primary" onClick={close}>
{t("operationDialog.ok")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</>
);
}
@@ -358,8 +341,8 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
const title = typeof props.title === "string" ? t(props.title) : props.title;
return (
- <Modal isOpen={props.open} toggle={close}>
- <ModalHeader
+ <Modal show={props.open} onHide={close}>
+ <Modal.Header
className={
props.titleColor != null
? "text-" +
@@ -372,7 +355,7 @@ const OperationDialog: React.FC<OperationDialogProps> = (props) => {
}
>
{title}
- </ModalHeader>
+ </Modal.Header>
{body}
</Modal>
);
diff --git a/Timeline/ClientApp/src/app/common/SearchInput.tsx b/Timeline/ClientApp/src/app/views/common/SearchInput.tsx
index 5a0b0eaa..9833d515 100644
--- a/Timeline/ClientApp/src/app/common/SearchInput.tsx
+++ b/Timeline/ClientApp/src/app/views/common/SearchInput.tsx
@@ -1,7 +1,7 @@
import React, { useCallback } from "react";
import clsx from "clsx";
-import { Spinner, Input, Button } from "reactstrap";
import { useTranslation } from "react-i18next";
+import { Spinner, Form, Button } from "react-bootstrap";
export interface SearchInputProps {
value: string;
@@ -36,9 +36,9 @@ const SearchInput: React.FC<SearchInputProps> = (props) => {
);
return (
- <div className={clsx("form-inline my-2", props.className)}>
- <Input
- className="mr-sm-2"
+ <Form inline className={clsx("my-2", props.className)}>
+ <Form.Control
+ className="mr-sm-2 flex-grow-1"
value={props.value}
onChange={onInputChange}
onKeyPress={onInputKeyPress}
@@ -49,14 +49,14 @@ const SearchInput: React.FC<SearchInputProps> = (props) => {
</div>
<div className="mt-2 mt-sm-0 ml-auto ml-sm-0">
{props.loading ? (
- <Spinner />
+ <Spinner variant="primary" animation="border" />
) : (
- <Button outline color="primary" onClick={props.onButtonClick}>
+ <Button variant="outline-primary" onClick={props.onButtonClick}>
{props.buttonText ?? t("search")}
</Button>
)}
</div>
- </div>
+ </Form>
);
};
diff --git a/Timeline/ClientApp/src/app/common/TimelineLogo.tsx b/Timeline/ClientApp/src/app/views/common/TimelineLogo.tsx
index 27d188fc..27d188fc 100644
--- a/Timeline/ClientApp/src/app/common/TimelineLogo.tsx
+++ b/Timeline/ClientApp/src/app/views/common/TimelineLogo.tsx
diff --git a/Timeline/ClientApp/src/app/common/UserTimelineLogo.tsx b/Timeline/ClientApp/src/app/views/common/UserTimelineLogo.tsx
index 29f6a69f..29f6a69f 100644
--- a/Timeline/ClientApp/src/app/common/UserTimelineLogo.tsx
+++ b/Timeline/ClientApp/src/app/views/common/UserTimelineLogo.tsx
diff --git a/Timeline/ClientApp/src/app/common/AlertHost.tsx b/Timeline/ClientApp/src/app/views/common/alert/AlertHost.tsx
index bfcf5c00..c74f18e2 100644
--- a/Timeline/ClientApp/src/app/common/AlertHost.tsx
+++ b/Timeline/ClientApp/src/app/views/common/alert/AlertHost.tsx
@@ -1,15 +1,15 @@
import React, { useCallback } from "react";
-import { Alert } from "reactstrap";
import without from "lodash/without";
import concat from "lodash/concat";
import { useTranslation } from "react-i18next";
+import { Alert } from "react-bootstrap";
import {
alertService,
AlertInfoEx,
kAlertHostId,
AlertInfo,
-} from "./alert-service";
+} from "@/services/alert";
interface AutoCloseAlertProps {
alert: AlertInfo;
@@ -37,7 +37,12 @@ export const AutoCloseAlert: React.FC<AutoCloseAlertProps> = (props) => {
}, [dismissTime, props.close]);
return (
- <Alert className="m-3" color={alert.type ?? "primary"} toggle={props.close}>
+ <Alert
+ className="m-3"
+ variant={alert.type ?? "primary"}
+ onClose={props.close}
+ dismissible
+ >
{(() => {
const { message } = alert;
if (typeof message === "function") {
diff --git a/Timeline/ClientApp/src/app/common/alert.sass b/Timeline/ClientApp/src/app/views/common/alert/alert.sass
index 5b6e65c2..5b6e65c2 100644
--- a/Timeline/ClientApp/src/app/common/alert.sass
+++ b/Timeline/ClientApp/src/app/views/common/alert/alert.sass
diff --git a/Timeline/ClientApp/src/app/common/common.sass b/Timeline/ClientApp/src/app/views/common/common.sass
index 15d34d7c..15d34d7c 100644
--- a/Timeline/ClientApp/src/app/common/common.sass
+++ b/Timeline/ClientApp/src/app/views/common/common.sass
diff --git a/Timeline/ClientApp/src/app/home/BoardWithUser.tsx b/Timeline/ClientApp/src/app/views/home/BoardWithUser.tsx
index 22a4667c..dcd39cbe 100644
--- a/Timeline/ClientApp/src/app/home/BoardWithUser.tsx
+++ b/Timeline/ClientApp/src/app/views/home/BoardWithUser.tsx
@@ -1,10 +1,10 @@
import React from "react";
-import { Row, Col } from "reactstrap";
+import { Row, Col } from "react-bootstrap";
import { useTranslation } from "react-i18next";
-import { UserWithToken } from "../data/user";
-import { TimelineInfo } from "../data/timeline";
-import { getHttpTimelineClient } from "../http/timeline";
+import { UserWithToken } from "@/services/user";
+import { TimelineInfo } from "@/services/timeline";
+import { getHttpTimelineClient } from "@/http/timeline";
import TimelineBoard from "./TimelineBoard";
import OfflineBoard from "./OfflineBoard";
diff --git a/Timeline/ClientApp/src/app/home/BoardWithoutUser.tsx b/Timeline/ClientApp/src/app/views/home/BoardWithoutUser.tsx
index 972c1b25..ebfddb50 100644
--- a/Timeline/ClientApp/src/app/home/BoardWithoutUser.tsx
+++ b/Timeline/ClientApp/src/app/views/home/BoardWithoutUser.tsx
@@ -1,8 +1,8 @@
import React from "react";
-import { Row, Col } from "reactstrap";
+import { Row, Col } from "react-bootstrap";
-import { TimelineInfo } from "../data/timeline";
-import { getHttpTimelineClient } from "../http/timeline";
+import { TimelineInfo } from "@/services/timeline";
+import { getHttpTimelineClient } from "@/http/timeline";
import TimelineBoard from "./TimelineBoard";
import OfflineBoard from "./OfflineBoard";
diff --git a/Timeline/ClientApp/src/app/home/OfflineBoard.tsx b/Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx
index fbd37efd..fc05bd74 100644
--- a/Timeline/ClientApp/src/app/home/OfflineBoard.tsx
+++ b/Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx
@@ -2,7 +2,7 @@ import React from "react";
import { Link } from "react-router-dom";
import { Trans } from "react-i18next";
-import { getAllCachedTimelineNames } from "../data/timeline";
+import { getAllCachedTimelineNames } from "@/services/timeline";
import UserTimelineLogo from "../common/UserTimelineLogo";
import TimelineLogo from "../common/TimelineLogo";
diff --git a/Timeline/ClientApp/src/app/home/TimelineBoard.tsx b/Timeline/ClientApp/src/app/views/home/TimelineBoard.tsx
index 21dcac3f..a3d176e1 100644
--- a/Timeline/ClientApp/src/app/home/TimelineBoard.tsx
+++ b/Timeline/ClientApp/src/app/views/home/TimelineBoard.tsx
@@ -1,10 +1,10 @@
import React from "react";
import clsx from "clsx";
import { Link } from "react-router-dom";
-import { Spinner } from "reactstrap";
import { Trans } from "react-i18next";
+import { Spinner } from "react-bootstrap";
-import { TimelineInfo } from "../data/timeline";
+import { TimelineInfo } from "@/services/timeline";
import TimelineLogo from "../common/TimelineLogo";
import UserTimelineLogo from "../common/UserTimelineLogo";
@@ -25,7 +25,7 @@ const TimelineBoard: React.FC<TimelineBoardProps> = (props) => {
if (timelines === "loading") {
return (
<div className="d-flex flex-grow-1 justify-content-center align-items-center">
- <Spinner color="primary" />
+ <Spinner variant="primary" animation="border" />
</div>
);
} else if (timelines === "offline") {
diff --git a/Timeline/ClientApp/src/app/home/TimelineCreateDialog.tsx b/Timeline/ClientApp/src/app/views/home/TimelineCreateDialog.tsx
index 911dd60c..d9467719 100644
--- a/Timeline/ClientApp/src/app/home/TimelineCreateDialog.tsx
+++ b/Timeline/ClientApp/src/app/views/home/TimelineCreateDialog.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { useHistory } from "react-router";
-import { validateTimelineName, timelineService } from "../data/timeline";
+import { validateTimelineName, timelineService } from "@/services/timeline";
import OperationDialog from "../common/OperationDialog";
interface TimelineCreateDialogProps {
diff --git a/Timeline/ClientApp/src/app/home/home.sass b/Timeline/ClientApp/src/app/views/home/home.sass
index f5d6ffc3..f5d6ffc3 100644
--- a/Timeline/ClientApp/src/app/home/home.sass
+++ b/Timeline/ClientApp/src/app/views/home/home.sass
diff --git a/Timeline/ClientApp/src/app/home/Home.tsx b/Timeline/ClientApp/src/app/views/home/index.tsx
index 910c9a01..760adcea 100644
--- a/Timeline/ClientApp/src/app/home/Home.tsx
+++ b/Timeline/ClientApp/src/app/views/home/index.tsx
@@ -1,17 +1,16 @@
import React from "react";
import { useHistory } from "react-router";
-import { Row, Container, Button, Col } from "reactstrap";
import { useTranslation } from "react-i18next";
+import { Row, Container, Button, Col } from "react-bootstrap";
-import { useUser } from "../data/user";
-import AppBar from "../common/AppBar";
+import { useUser } from "@/services/user";
import SearchInput from "../common/SearchInput";
import BoardWithoutUser from "./BoardWithoutUser";
import BoardWithUser from "./BoardWithUser";
import TimelineCreateDialog from "./TimelineCreateDialog";
-const Home: React.FC = () => {
+const HomePage: React.FC = () => {
const history = useHistory();
const { t } = useTranslation();
@@ -34,10 +33,9 @@ const Home: React.FC = () => {
return (
<>
- <AppBar />
- <Container fluid style={{ marginTop: "56px" }}>
- <Row>
- <Col>
+ <Container fluid>
+ <Row className="justify-content-center">
+ <Col xs={12} sm={10} md={8} lg={6}>
<SearchInput
className="justify-content-center"
value={navText}
@@ -48,8 +46,7 @@ const Home: React.FC = () => {
additionalButton={
user != null && (
<Button
- color="success"
- outline
+ variant="outline-success"
onClick={() => {
setDialog("create");
}}
@@ -99,4 +96,4 @@ const Home: React.FC = () => {
);
};
-export default Home;
+export default HomePage;
diff --git a/Timeline/ClientApp/src/app/views/login/index.tsx b/Timeline/ClientApp/src/app/views/login/index.tsx
new file mode 100644
index 00000000..265c2172
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/login/index.tsx
@@ -0,0 +1,151 @@
+import React from "react";
+import { useHistory } from "react-router";
+import { useTranslation } from "react-i18next";
+import { Container, Form } from "react-bootstrap";
+
+import { useUser, userService } from "@/services/user";
+
+import AppBar from "../common/AppBar";
+import LoadingButton from "../common/LoadingButton";
+
+const LoginPage: React.FC = (_) => {
+ const { t } = useTranslation();
+ const history = useHistory();
+ const [username, setUsername] = React.useState<string>("");
+ const [usernameDirty, setUsernameDirty] = React.useState<boolean>(false);
+ const [password, setPassword] = React.useState<string>("");
+ const [passwordDirty, setPasswordDirty] = React.useState<boolean>(false);
+ const [rememberMe, setRememberMe] = React.useState<boolean>(true);
+ const [process, setProcess] = React.useState<boolean>(false);
+ const [error, setError] = React.useState<string | null>(null);
+
+ const user = useUser();
+
+ React.useEffect(() => {
+ if (user != null) {
+ const id = setTimeout(() => history.push("/"), 3000);
+ return () => {
+ clearTimeout(id);
+ };
+ }
+ }, [history, user]);
+
+ if (user != null) {
+ return (
+ <>
+ <AppBar />
+ <p className="mt-appbar">{t("login.alreadyLogin")}</p>
+ </>
+ );
+ }
+
+ const submit = (): void => {
+ if (username === "" || password === "") {
+ setUsernameDirty(true);
+ setPasswordDirty(true);
+ return;
+ }
+
+ setProcess(true);
+ userService
+ .login(
+ {
+ username: username,
+ password: password,
+ },
+ rememberMe
+ )
+ .then(
+ () => {
+ if (history.length === 0) {
+ history.push("/");
+ } else {
+ history.goBack();
+ }
+ },
+ (e: Error) => {
+ setProcess(false);
+ setError(e.message);
+ }
+ );
+ };
+
+ const onEnterPressInPassword: React.KeyboardEventHandler = (e) => {
+ if (e.key === "Enter") {
+ submit();
+ }
+ };
+
+ return (
+ <Container fluid className="login-container mt-2">
+ <h1 className="text-center">{t("welcome")}</h1>
+ <Form>
+ <Form.Group>
+ <Form.Label htmlFor="username">{t("user.username")}</Form.Label>
+ <Form.Control
+ id="username"
+ disabled={process}
+ onChange={(e) => {
+ setUsername(e.target.value);
+ setUsernameDirty(true);
+ }}
+ value={username}
+ isInvalid={usernameDirty && username === ""}
+ />
+ {usernameDirty && username === "" && (
+ <Form.Control.Feedback type="invalid">
+ {t("login.emptyUsername")}
+ </Form.Control.Feedback>
+ )}
+ </Form.Group>
+ <Form.Group>
+ <Form.Label htmlFor="password">{t("user.password")}</Form.Label>
+ <Form.Control
+ id="password"
+ type="password"
+ disabled={process}
+ onChange={(e) => {
+ setPassword(e.target.value);
+ setPasswordDirty(true);
+ }}
+ value={password}
+ onKeyDown={onEnterPressInPassword}
+ isInvalid={passwordDirty && password === ""}
+ />
+ {passwordDirty && password === "" && (
+ <Form.Control.Feedback type="invalid">
+ {t("login.emptyPassword")}
+ </Form.Control.Feedback>
+ )}
+ </Form.Group>
+ <Form.Group>
+ <Form.Check<"input">
+ id="remember-me"
+ type="checkbox"
+ checked={rememberMe}
+ onChange={(e) => {
+ setRememberMe(e.target.checked);
+ }}
+ label={t("user.rememberMe")}
+ />
+ </Form.Group>
+ {error ? <p className="text-danger">{t(error)}</p> : null}
+ <div className="text-right">
+ <LoadingButton
+ loading={process}
+ variant="primary"
+ onClick={(e) => {
+ submit();
+ e.preventDefault();
+ }}
+ disabled={username === "" || password === "" ? true : undefined}
+ >
+ {t("user.login")}
+ </LoadingButton>
+ </div>
+ </Form>
+ </Container>
+ );
+};
+
+export default LoginPage;
diff --git a/Timeline/ClientApp/src/app/views/login/login.sass b/Timeline/ClientApp/src/app/views/login/login.sass
new file mode 100644
index 00000000..0bf385f5
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/login/login.sass
@@ -0,0 +1,2 @@
+.login-container
+ max-width: 600px
diff --git a/Timeline/ClientApp/src/app/views/settings/index.tsx b/Timeline/ClientApp/src/app/views/settings/index.tsx
new file mode 100644
index 00000000..964e7442
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/settings/index.tsx
@@ -0,0 +1,209 @@
+import React, { useState } from "react";
+import { useHistory } from "react-router";
+import { useTranslation } from "react-i18next";
+import { Form, Container, Row, Col, Button, Modal } from "react-bootstrap";
+
+import { useUser, userService } from "@/services/user";
+import OperationDialog, {
+ OperationInputErrorInfo,
+} from "../common/OperationDialog";
+
+interface ChangePasswordDialogProps {
+ open: boolean;
+ close: () => void;
+}
+
+const ChangePasswordDialog: React.FC<ChangePasswordDialogProps> = (props) => {
+ const history = useHistory();
+ const { t } = useTranslation();
+
+ const [redirect, setRedirect] = useState<boolean>(false);
+
+ return (
+ <OperationDialog
+ open={props.open}
+ title={t("settings.dialogChangePassword.title")}
+ titleColor="dangerous"
+ inputPrompt={t("settings.dialogChangePassword.prompt")}
+ inputScheme={[
+ {
+ type: "text",
+ label: t("settings.dialogChangePassword.inputOldPassword"),
+ password: true,
+ validator: (v) =>
+ v === ""
+ ? "settings.dialogChangePassword.errorEmptyOldPassword"
+ : null,
+ },
+ {
+ type: "text",
+ label: t("settings.dialogChangePassword.inputNewPassword"),
+ password: true,
+ validator: (v, values) => {
+ const error: OperationInputErrorInfo = {};
+ error[1] =
+ v === ""
+ ? "settings.dialogChangePassword.errorEmptyNewPassword"
+ : null;
+ if (v === values[2]) {
+ error[2] = null;
+ } else {
+ if (values[2] !== "") {
+ error[2] = "settings.dialogChangePassword.errorRetypeNotMatch";
+ }
+ }
+ return error;
+ },
+ },
+ {
+ type: "text",
+ label: t("settings.dialogChangePassword.inputRetypeNewPassword"),
+ password: true,
+ validator: (v, values) =>
+ v !== values[1]
+ ? "settings.dialogChangePassword.errorRetypeNotMatch"
+ : null,
+ },
+ ]}
+ onProcess={async ([oldPassword, newPassword]) => {
+ await userService
+ .changePassword(oldPassword as string, newPassword as string)
+ .toPromise();
+ await userService.logout();
+ setRedirect(true);
+ }}
+ close={() => {
+ props.close();
+ if (redirect) {
+ history.push("/login");
+ }
+ }}
+ />
+ );
+};
+
+const ConfirmLogoutDialog: React.FC<{
+ toggle: () => void;
+ onConfirm: () => void;
+}> = ({ toggle, onConfirm }) => {
+ const { t } = useTranslation();
+
+ return (
+ <Modal show centered onHide={toggle}>
+ <Modal.Header>
+ <Modal.Title className="text-danger">
+ {t("settings.dialogConfirmLogout.title")}
+ </Modal.Title>
+ </Modal.Header>
+ <Modal.Body>{t("settings.dialogConfirmLogout.prompt")}</Modal.Body>
+ <Modal.Footer>
+ <Button variant="secondary" onClick={toggle}>
+ {t("operationDialog.cancel")}
+ </Button>
+ <Button variant="danger" onClick={onConfirm}>
+ {t("operationDialog.confirm")}
+ </Button>
+ </Modal.Footer>
+ </Modal>
+ );
+};
+
+const SettingsPage: React.FC = (_) => {
+ const { i18n, t } = useTranslation();
+ const user = useUser();
+ const history = useHistory();
+
+ const [dialog, setDialog] = useState<null | "changepassword" | "logout">(
+ null
+ );
+
+ const language = i18n.language.slice(0, 2);
+
+ return (
+ <Container fluid>
+ {user ? (
+ <>
+ <Row className="border-bottom p-3 cursor-pointer">
+ <Col xs="12">
+ <h5
+ onClick={() => {
+ history.push(`/users/${user.username}`);
+ }}
+ >
+ {t("settings.gotoSelf")}
+ </h5>
+ </Col>
+ </Row>
+ <Row className="border-bottom p-3 cursor-pointer">
+ <Col xs="12">
+ <h5
+ className="text-danger"
+ onClick={() => setDialog("changepassword")}
+ >
+ {t("settings.changePassword")}
+ </h5>
+ </Col>
+ </Row>
+ <Row className="border-bottom p-3 cursor-pointer">
+ <Col xs="12">
+ <h5
+ className="text-danger"
+ onClick={() => {
+ setDialog("logout");
+ }}
+ >
+ {t("settings.logout")}
+ </h5>
+ </Col>
+ </Row>
+ </>
+ ) : null}
+ <Row className="align-items-center border-bottom p-3">
+ <Col xs="12" sm="auto">
+ <h5>{t("settings.languagePrimary")}</h5>
+ <p>{t("settings.languageSecondary")}</p>
+ </Col>
+ <Col xs="auto" className="ml-auto">
+ <Form.Control
+ as="select"
+ value={language}
+ onChange={(e) => {
+ void i18n.changeLanguage(e.target.value);
+ }}
+ >
+ <option value="zh">中文</option>
+ <option value="en">English</option>
+ </Form.Control>
+ </Col>
+ </Row>
+ {(() => {
+ switch (dialog) {
+ case "changepassword":
+ return (
+ <ChangePasswordDialog
+ open
+ close={() => {
+ setDialog(null);
+ }}
+ />
+ );
+ case "logout":
+ return (
+ <ConfirmLogoutDialog
+ toggle={() => setDialog(null)}
+ onConfirm={() => {
+ void userService.logout().then(() => {
+ history.push("/");
+ });
+ }}
+ />
+ );
+ default:
+ return null;
+ }
+ })()}
+ </Container>
+ );
+};
+
+export default SettingsPage;
diff --git a/Timeline/ClientApp/src/app/views/timeline-common/CollapseButton.tsx b/Timeline/ClientApp/src/app/views/timeline-common/CollapseButton.tsx
new file mode 100644
index 00000000..3c52150f
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/timeline-common/CollapseButton.tsx
@@ -0,0 +1,23 @@
+import React from "react";
+import clsx from "clsx";
+import Svg from "react-inlinesvg";
+import arrowsAngleContractIcon from "bootstrap-icons/icons/arrows-angle-contract.svg";
+import arrowsAngleExpandIcon from "bootstrap-icons/icons/arrows-angle-expand.svg";
+
+const CollapseButton: React.FC<{
+ collapse: boolean;
+ onClick: () => void;
+ className?: string;
+ style?: React.CSSProperties;
+}> = ({ collapse, onClick, className, style }) => {
+ return (
+ <Svg
+ src={collapse ? arrowsAngleExpandIcon : arrowsAngleContractIcon}
+ onClick={onClick}
+ className={clsx("text-primary icon-button", className)}
+ style={style}
+ />
+ );
+};
+
+export default CollapseButton;
diff --git a/Timeline/ClientApp/src/app/views/timeline-common/InfoCardTemplate.tsx b/Timeline/ClientApp/src/app/views/timeline-common/InfoCardTemplate.tsx
new file mode 100644
index 00000000..a8de20aa
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/timeline-common/InfoCardTemplate.tsx
@@ -0,0 +1,26 @@
+import React from "react";
+import clsx from "clsx";
+
+import { TimelineCardComponentProps } from "../timeline-common/TimelinePageTemplateUI";
+import SyncStatusBadge from "../timeline-common/SyncStatusBadge";
+import CollapseButton from "../timeline-common/CollapseButton";
+
+const InfoCardTemplate: React.FC<
+ Pick<
+ TimelineCardComponentProps<"">,
+ "collapse" | "toggleCollapse" | "syncStatus" | "className"
+ > & { children: React.ReactElement[] }
+> = ({ collapse, toggleCollapse, syncStatus, className, children }) => {
+ return (
+ <div className={clsx("cru-card p-2 clearfix", className)}>
+ <div className="float-right d-flex align-items-center">
+ <SyncStatusBadge status={syncStatus} className="mr-2" />
+ <CollapseButton collapse={collapse} onClick={toggleCollapse} />
+ </div>
+
+ <div style={{ display: collapse ? "none" : "block" }}>{children}</div>
+ </div>
+ );
+};
+
+export default InfoCardTemplate;
diff --git a/Timeline/ClientApp/src/app/views/timeline-common/SyncStatusBadge.tsx b/Timeline/ClientApp/src/app/views/timeline-common/SyncStatusBadge.tsx
new file mode 100644
index 00000000..e67cfb43
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/timeline-common/SyncStatusBadge.tsx
@@ -0,0 +1,58 @@
+import React from "react";
+import clsx from "clsx";
+import { useTranslation } from "react-i18next";
+
+import { UiLogicError } from "@/common";
+
+export type TimelineSyncStatus = "syncing" | "synced" | "offline";
+
+const SyncStatusBadge: React.FC<{
+ status: TimelineSyncStatus;
+ style?: React.CSSProperties;
+ className?: string;
+}> = ({ status, style, className }) => {
+ const { t } = useTranslation();
+
+ return (
+ <div style={style} className={clsx("timeline-sync-state-badge", className)}>
+ {(() => {
+ switch (status) {
+ case "syncing": {
+ return (
+ <>
+ <span className="timeline-sync-state-badge-pin bg-warning" />
+ <span className="text-warning">
+ {t("timeline.postSyncState.syncing")}
+ </span>
+ </>
+ );
+ }
+ case "synced": {
+ return (
+ <>
+ <span className="timeline-sync-state-badge-pin bg-success" />
+ <span className="text-success">
+ {t("timeline.postSyncState.synced")}
+ </span>
+ </>
+ );
+ }
+ case "offline": {
+ return (
+ <>
+ <span className="timeline-sync-state-badge-pin bg-danger" />
+ <span className="text-danger">
+ {t("timeline.postSyncState.offline")}
+ </span>
+ </>
+ );
+ }
+ default:
+ throw new UiLogicError("Unknown sync state.");
+ }
+ })()}
+ </div>
+ );
+};
+
+export default SyncStatusBadge;
diff --git a/Timeline/ClientApp/src/app/timeline/Timeline.tsx b/Timeline/ClientApp/src/app/views/timeline-common/Timeline.tsx
index 780588d1..fd051d45 100644
--- a/Timeline/ClientApp/src/app/timeline/Timeline.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline-common/Timeline.tsx
@@ -1,7 +1,7 @@
import React from "react";
import clsx from "clsx";
-import { TimelinePostInfo } from "../data/timeline";
+import { TimelinePostInfo } from "@/services/timeline";
import TimelineItem from "./TimelineItem";
@@ -51,11 +51,7 @@ const Timeline: React.FC<TimelineProps> = (props) => {
}, [posts, onDelete]);
return (
- <div
- ref={props.containerRef}
- className={clsx("container-fluid timeline", props.className)}
- >
- <div className="timeline-enter-animation-mask" />
+ <div ref={props.containerRef} className={clsx("timeline", props.className)}>
{(() => {
const length = posts.length;
return posts.map((post, i) => {
diff --git a/Timeline/ClientApp/src/app/timeline/TimelineItem.tsx b/Timeline/ClientApp/src/app/views/timeline-common/TimelineItem.tsx
index 33f0741e..2b6dcd0a 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelineItem.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline-common/TimelineItem.tsx
@@ -1,23 +1,16 @@
import React from "react";
import clsx from "clsx";
-import {
- Row,
- Col,
- Modal,
- ModalHeader,
- ModalBody,
- ModalFooter,
- Button,
-} from "reactstrap";
import { Link } from "react-router-dom";
import { useTranslation } from "react-i18next";
import Svg from "react-inlinesvg";
import chevronDownIcon from "bootstrap-icons/icons/chevron-down.svg";
import trashIcon from "bootstrap-icons/icons/trash.svg";
+import { Modal, Button } from "react-bootstrap";
+
+import { useAvatar } from "@/services/user";
+import { TimelinePostInfo } from "@/services/timeline";
import BlobImage from "../common/BlobImage";
-import { useAvatar } from "../data/user";
-import { TimelinePostInfo } from "../data/timeline";
const TimelinePostDeleteConfirmDialog: React.FC<{
toggle: () => void;
@@ -27,16 +20,18 @@ const TimelinePostDeleteConfirmDialog: React.FC<{
return (
<Modal toggle={toggle} isOpen centered>
- <ModalHeader className="text-danger">
- {t("timeline.post.deleteDialog.title")}
- </ModalHeader>
- <ModalBody>{t("timeline.post.deleteDialog.prompt")}</ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={toggle}>
+ <Modal.Header>
+ <Modal.Title className="text-danger">
+ {t("timeline.post.deleteDialog.title")}
+ </Modal.Title>
+ </Modal.Header>
+ <Modal.Body>{t("timeline.post.deleteDialog.prompt")}</Modal.Body>
+ <Modal.Footer>
+ <Button variant="secondary" onClick={toggle}>
{t("operationDialog.cancel")}
</Button>
<Button
- color="danger"
+ variant="danger"
onClick={() => {
onConfirm();
toggle();
@@ -44,7 +39,7 @@ const TimelinePostDeleteConfirmDialog: React.FC<{
>
{t("operationDialog.confirm")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</Modal>
);
};
@@ -79,51 +74,45 @@ const TimelineItem: React.FC<TimelineItemProps> = (props) => {
);
return (
- <Row
+ <div
className={clsx(
- "position-relative flex-nowrap",
+ "timeline-item position-relative",
current && "current",
props.className
)}
onClick={props.onClick}
style={props.style}
>
- <Col className="timeline-line-area">
+ <div className="timeline-line-area">
<div className="timeline-line-segment start"></div>
<div className="timeline-line-node-container">
<div className="timeline-line-node"></div>
</div>
<div className="timeline-line-segment end"></div>
{current && <div className="timeline-line-segment current-end" />}
- </Col>
- <Col className="timeline-pt-start">
- <Row className="flex-nowrap">
- <div className="col-auto flex-shrink-1 px-0">
- <Row className="ml-n3 mr-0 align-items-center">
- <span className="ml-3 text-primary white-space-no-wrap">
- {props.post.time.toLocaleString(i18n.languages)}
- </span>
- <small className="text-dark ml-3">
- {props.post.author.nickname}
- </small>
- </Row>
- </div>
+ </div>
+ <div className="timeline-content-area">
+ <div>
+ <span className="mr-2">
+ <span className="text-primary white-space-no-wrap mr-2">
+ {props.post.time.toLocaleString(i18n.languages)}
+ </span>
+ <small className="text-dark">{props.post.author.nickname}</small>
+ </span>
{more != null ? (
- <div className="col-auto px-2 d-flex justify-content-center align-items-center">
- <Svg
- src={chevronDownIcon}
- className="text-info icon-button"
- onClick={(e: Event) => {
- more.toggle();
- e.stopPropagation();
- }}
- />
- </div>
+ <Svg
+ src={chevronDownIcon}
+ className="text-info icon-button"
+ onClick={(e: Event) => {
+ more.toggle();
+ e.stopPropagation();
+ }}
+ />
) : null}
- </Row>
- <div className="row d-block timeline-content">
+ </div>
+ <div className="timeline-content">
<Link
- className="float-right float-sm-left mx-2"
+ className="float-left m-2"
to={"/users/" + props.post.author.username}
>
<BlobImage
@@ -147,7 +136,7 @@ const TimelineItem: React.FC<TimelineItemProps> = (props) => {
}
})()}
</div>
- </Col>
+ </div>
{more != null && more.isOpen ? (
<>
<div
@@ -156,7 +145,7 @@ const TimelineItem: React.FC<TimelineItemProps> = (props) => {
>
<Svg
src={trashIcon}
- className="text-danger large-icon-button"
+ className="text-danger icon-button large"
onClick={(e: Event) => {
toggleDeleteDialog();
e.stopPropagation();
@@ -174,7 +163,7 @@ const TimelineItem: React.FC<TimelineItemProps> = (props) => {
) : null}
</>
) : null}
- </Row>
+ </div>
);
};
diff --git a/Timeline/ClientApp/src/app/timeline/TimelineMember.tsx b/Timeline/ClientApp/src/app/views/timeline-common/TimelineMember.tsx
index f334c6e9..67a8543a 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelineMember.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline-common/TimelineMember.tsx
@@ -1,16 +1,9 @@
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
-import {
- Container,
- ListGroup,
- ListGroupItem,
- Modal,
- Row,
- Col,
- Button,
-} from "reactstrap";
-
-import { User, useAvatar } from "../data/user";
+import { Container, ListGroup, Modal, Row, Col, Button } from "react-bootstrap";
+
+import { User, useAvatar } from "@/services/user";
+
import SearchInput from "../common/SearchInput";
import BlobImage from "../common/BlobImage";
@@ -24,9 +17,9 @@ const TimelineMemberItem: React.FC<{
const avatar = useAvatar(user.username);
return (
- <ListGroupItem className="container">
+ <ListGroup.Item className="container">
<Row>
- <Col className="col-auto">
+ <Col xs="auto">
<BlobImage blob={avatar} className="avatar small" />
</Col>
<Col>
@@ -45,7 +38,7 @@ const TimelineMemberItem: React.FC<{
return (
<Button
className="align-self-center"
- color="danger"
+ variant="danger"
onClick={() => {
onRemove(user.username);
}}
@@ -55,7 +48,7 @@ const TimelineMemberItem: React.FC<{
);
})()}
</Row>
- </ListGroupItem>
+ </ListGroup.Item>
);
};
@@ -168,7 +161,7 @@ const TimelineMember: React.FC<TimelineMemberProps> = (props) => {
</Row>
</Col>
<Button
- color="primary"
+ variant="primary"
className="align-self-center"
disabled={!addable}
onClick={() => {
@@ -211,7 +204,7 @@ export const TimelineMemberDialog: React.FC<TimelineMemberDialogProps> = (
props
) => {
return (
- <Modal isOpen={props.open} toggle={props.onClose}>
+ <Modal show centered onHide={props.onClose}>
<TimelineMember {...props} />
</Modal>
);
diff --git a/Timeline/ClientApp/src/app/timeline/TimelinePageTemplate.tsx b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePageTemplate.tsx
index 62470e63..d5c91622 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelinePageTemplate.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePageTemplate.tsx
@@ -3,15 +3,14 @@ import { useTranslation } from "react-i18next";
import { of } from "rxjs";
import { catchError } from "rxjs/operators";
-import { ExcludeKey } from "../utilities/type";
-import { pushAlert } from "../common/alert-service";
-import { useUser, userInfoService, UserNotExistError } from "../data/user";
+import { UiLogicError } from "@/common";
+import { pushAlert } from "@/services/alert";
+import { useUser, userInfoService, UserNotExistError } from "@/services/user";
import {
timelineService,
usePostList,
useTimelineInfo,
-} from "../data/timeline";
-import { UiLogicError } from "../common";
+} from "@/services/timeline";
import { TimelineDeleteCallback } from "./Timeline";
import { TimelineMemberDialog } from "./TimelineMember";
@@ -23,7 +22,7 @@ export interface TimelinePageTemplateProps<TManageItem> {
name: string;
onManage: (item: TManageItem) => void;
UiComponent: React.ComponentType<
- ExcludeKey<TimelinePageTemplateUIProps<TManageItem>, "CardComponent">
+ Omit<TimelinePageTemplateUIProps<TManageItem>, "CardComponent">
>;
notFoundI18nKey: string;
}
@@ -161,10 +160,6 @@ export default function TimelinePageTemplate<TManageItem>(
[onManageProp]
);
- const onMember = React.useCallback(() => {
- setDialog("member");
- }, []);
-
return (
<>
<UiComponent
@@ -182,7 +177,7 @@ export default function TimelinePageTemplate<TManageItem>(
? onManage
: undefined
}
- onMember={onMember}
+ onMember={() => setDialog("member")}
/>
{dialogElement}
</>
diff --git a/Timeline/ClientApp/src/app/timeline/TimelinePageTemplateUI.tsx b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePageTemplateUI.tsx
index e6514478..58fd024b 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelinePageTemplateUI.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePageTemplateUI.tsx
@@ -1,85 +1,33 @@
-import React, { CSSProperties } from "react";
-import { Spinner } from "reactstrap";
+import React from "react";
import { useTranslation } from "react-i18next";
import { fromEvent } from "rxjs";
-import Svg from "react-inlinesvg";
-import clsx from "clsx";
-import arrowsAngleContractIcon from "bootstrap-icons/icons/arrows-angle-contract.svg";
-import arrowsAngleExpandIcon from "bootstrap-icons/icons/arrows-angle-expand.svg";
+import { Spinner } from "react-bootstrap";
-import { getAlertHost } from "../common/alert-service";
-import { useEventEmiiter, UiLogicError } from "../common";
+import { getAlertHost } from "@/services/alert";
+import { useEventEmiiter, UiLogicError } from "@/common";
import {
TimelineInfo,
TimelinePostsWithSyncState,
timelineService,
-} from "../data/timeline";
-import { userService } from "../data/user";
-import AppBar from "../common/AppBar";
+} from "@/services/timeline";
+import { userService } from "@/services/user";
import Timeline, {
TimelinePostInfoEx,
TimelineDeleteCallback,
} from "./Timeline";
import TimelinePostEdit, { TimelinePostSendCallback } from "./TimelinePostEdit";
-
-type TimelinePostSyncState = "syncing" | "synced" | "offline";
-
-const TimelinePostSyncStateBadge: React.FC<{
- state: TimelinePostSyncState;
- style?: CSSProperties;
- className?: string;
-}> = ({ state, style, className }) => {
- const { t } = useTranslation();
-
- return (
- <div style={style} className={clsx("timeline-sync-state-badge", className)}>
- {(() => {
- switch (state) {
- case "syncing": {
- return (
- <>
- <span className="timeline-sync-state-badge-pin bg-warning" />
- <span className="text-warning">
- {t("timeline.postSyncState.syncing")}
- </span>
- </>
- );
- }
- case "synced": {
- return (
- <>
- <span className="timeline-sync-state-badge-pin bg-success" />
- <span className="text-success">
- {t("timeline.postSyncState.synced")}
- </span>
- </>
- );
- }
- case "offline": {
- return (
- <>
- <span className="timeline-sync-state-badge-pin bg-danger" />
- <span className="text-danger">
- {t("timeline.postSyncState.offline")}
- </span>
- </>
- );
- }
- default:
- throw new UiLogicError("Unknown sync state.");
- }
- })()}
- </div>
- );
-};
+import { TimelineSyncStatus } from "./SyncStatusBadge";
+import clsx from "clsx";
export interface TimelineCardComponentProps<TManageItems> {
timeline: TimelineInfo;
onManage?: (item: TManageItems | "property") => void;
onMember: () => void;
className?: string;
- onHeight?: (height: number) => void;
+ collapse: boolean;
+ syncStatus: TimelineSyncStatus;
+ toggleCollapse: () => void;
}
export interface TimelinePageTemplateUIProps<TManageItems> {
@@ -174,8 +122,6 @@ export default function TimelinePageTemplateUI<TManageItems>(
}
}, [getResizeEvent, triggerResizeEvent, timeline, postListState]);
- const [cardHeight, setCardHeight] = React.useState<number>(0);
-
const genCardCollapseLocalStorageKey = (uniqueId: string): string =>
`timeline.${uniqueId}.cardCollapse`;
@@ -220,29 +166,13 @@ export default function TimelinePageTemplateUI<TManageItems>(
})
);
- const topHeight: string = infoCardCollapse
- ? "calc(68px + 1.5em)"
- : `${cardHeight + 60}px`;
-
- const syncState: TimelinePostSyncState = postListState.syncing
- ? "syncing"
- : postListState.type === "synced"
- ? "synced"
- : "offline";
-
timelineBody = (
- <div>
- <TimelinePostSyncStateBadge
- style={{ top: topHeight }}
- state={syncState}
- />
- <Timeline
- containerRef={timelineRef}
- posts={posts}
- onDelete={props.onDelete}
- onResize={triggerResizeEvent}
- />
- </div>
+ <Timeline
+ containerRef={timelineRef}
+ posts={posts}
+ onDelete={props.onDelete}
+ onResize={triggerResizeEvent}
+ />
);
if (props.onPost != null) {
timelineBody = (
@@ -250,6 +180,7 @@ export default function TimelinePageTemplateUI<TManageItems>(
{timelineBody}
<div ref={bottomSpaceRef} className="flex-fix-length" />
<TimelinePostEdit
+ className="fixed-bottom"
onPost={props.onPost}
onHeightChange={onPostEditHeightChange}
timelineUniqueId={timeline.uniqueId}
@@ -261,40 +192,43 @@ export default function TimelinePageTemplateUI<TManageItems>(
} else {
timelineBody = (
<div className="full-viewport-center-child">
- <Spinner color="primary" type="grow" />
+ <Spinner variant="primary" animation="grow" />
</div>
);
}
+
const { CardComponent } = props;
+ const syncStatus: TimelineSyncStatus =
+ postListState == null || postListState.syncing
+ ? "syncing"
+ : postListState.type === "synced"
+ ? "synced"
+ : "offline";
body = (
<>
<div
- className="fixed-top mt-appbar info-card-container"
- data-collapse={infoCardCollapse ? "true" : "false"}
+ className={clsx(
+ "timeline-template-info-card",
+ infoCardCollapse && "my-collapse"
+ )}
>
- <Svg
- src={
- infoCardCollapse
- ? arrowsAngleExpandIcon
- : arrowsAngleContractIcon
- }
- onClick={() => {
- const newState = !infoCardCollapse;
- setInfoCardCollapse(newState);
- window.localStorage.setItem(
- genCardCollapseLocalStorageKey(timeline.uniqueId),
- newState.toString()
- );
- }}
- className="float-right m-1 info-card-collapse-button text-primary icon-button"
- />
<CardComponent
timeline={timeline}
onManage={props.onManage}
onMember={props.onMember}
- onHeight={setCardHeight}
- className="info-card-content"
+ syncStatus={syncStatus}
+ collapse={infoCardCollapse}
+ toggleCollapse={() => {
+ const newState = !infoCardCollapse;
+ setInfoCardCollapse(newState);
+ if (timeline != null) {
+ window.localStorage.setItem(
+ genCardCollapseLocalStorageKey(timeline.uniqueId),
+ newState.toString()
+ );
+ }
+ }}
/>
</div>
{timelineBody}
@@ -303,22 +237,11 @@ export default function TimelinePageTemplateUI<TManageItems>(
} else {
body = (
<div className="full-viewport-center-child">
- <Spinner color="primary" type="grow" />
+ <Spinner variant="primary" animation="grow" />
</div>
);
}
}
- return (
- <>
- <AppBar />
- <div>
- <div
- style={{ height: 56 + cardHeight }}
- className="timeline-page-top-space flex-fix-length"
- />
- {body}
- </div>
- </>
- );
+ return body;
}
diff --git a/Timeline/ClientApp/src/app/timeline/TimelinePostEdit.tsx b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePostEdit.tsx
index b30dc8d3..dfa2f879 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelinePostEdit.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePostEdit.tsx
@@ -1,14 +1,15 @@
import React from "react";
-import { Button, Spinner, Row, Col } from "reactstrap";
+import clsx from "clsx";
import { useTranslation } from "react-i18next";
import Svg from "react-inlinesvg";
+import { Button, Spinner, Row, Col, Form } from "react-bootstrap";
import textIcon from "bootstrap-icons/icons/card-text.svg";
import imageIcon from "bootstrap-icons/icons/image.svg";
-import { pushAlert } from "../common/alert-service";
-import { TimelineCreatePostRequest } from "../data/timeline";
-import FileInput from "../common/FileInput";
-import { UiLogicError } from "../common";
+import { UiLogicError } from "@/common";
+
+import { pushAlert } from "@/services/alert";
+import { TimelineCreatePostRequest } from "@/services/timeline";
interface TimelinePostEditImageProps {
onSelect: (blob: Blob | null) => void;
@@ -57,11 +58,11 @@ const TimelinePostEditImage: React.FC<TimelinePostEditImageProps> = (props) => {
return (
<>
- <FileInput
- labelText={t("chooseImage")}
+ <Form.File
+ label={t("chooseImage")}
onChange={onInputChange}
accept="image/*"
- className="mx-3 my-1"
+ className="mx-3 my-1 d-inline-block"
/>
{fileUrl && error == null && (
<img
@@ -183,11 +184,15 @@ const TimelinePostEdit: React.FC<TimelinePostEditProps> = (props) => {
}, []);
return (
- <div ref={containerRef} className="container-fluid fixed-bottom bg-light">
+ <div
+ ref={containerRef}
+ className={clsx("container-fluid bg-light", props.className)}
+ >
<Row>
<Col className="px-1 py-1">
{kind === "text" ? (
- <textarea
+ <Form.Control
+ as="textarea"
className="w-100 h-100 timeline-post-edit"
value={text}
disabled={state === "process"}
@@ -201,7 +206,7 @@ const TimelinePostEdit: React.FC<TimelinePostEditProps> = (props) => {
<TimelinePostEditImage onSelect={onImageSelect} />
)}
</Col>
- <Col sm="col-auto align-self-end m-1">
+ <Col xs="auto" className="align-self-end m-1">
{(() => {
if (state === "input") {
return (
@@ -214,13 +219,17 @@ const TimelinePostEdit: React.FC<TimelinePostEditProps> = (props) => {
onClick={toggleKind}
/>
</div>
- <Button color="primary" onClick={onSend} disabled={!canSend}>
+ <Button
+ variant="primary"
+ onClick={onSend}
+ disabled={!canSend}
+ >
{t("timeline.send")}
</Button>
</>
);
} else {
- return <Spinner />;
+ return <Spinner variant="primary" animation="border" />;
}
})()}
</Col>
diff --git a/Timeline/ClientApp/src/app/timeline/TimelinePropertyChangeDialog.tsx b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx
index bb0e3ea2..87638f31 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelinePropertyChangeDialog.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx
@@ -4,7 +4,8 @@ import {
TimelineVisibility,
kTimelineVisibilities,
TimelineChangePropertyRequest,
-} from "../data/timeline";
+} from "@/services/timeline";
+
import OperationDialog, {
OperationSelectInputInfoOption,
} from "../common/OperationDialog";
diff --git a/Timeline/ClientApp/src/app/timeline/timeline.sass b/Timeline/ClientApp/src/app/views/timeline-common/timeline-common.sass
index d431a4c6..79df9249 100644
--- a/Timeline/ClientApp/src/app/timeline/timeline.sass
+++ b/Timeline/ClientApp/src/app/views/timeline-common/timeline-common.sass
@@ -1,24 +1,11 @@
@use 'sass:color'
.timeline
- display: flex
- flex-direction: column
z-index: 0
position: relative
-@keyframes timeline-enter-animation-mask-animation
- to
- height: 0
-
-.timeline-enter-animation-mask
- position: absolute
- left: 0
- top: 0
- height: calc(100% + 300px)
- width: 100%
- background: linear-gradient(to top, #ffffff00 0, 200px, white 300px, white)
- z-index: 100
- animation: timeline-enter-animation-mask-animation 5s 0.3s forwards // Give it 0.3s to load, which I think is reasonable
+ &-item
+ display: flex
$timeline-line-width: 7px
$timeline-line-node-radius: 18px
@@ -33,7 +20,6 @@ $timeline-line-color-current: #36c2e6
background: color.adjust($timeline-line-color, $lightness: +10%)
box-shadow: 0 0 20px 3px color.adjust($timeline-line-color, $lightness: +10%, $alpha: -0.1)
-
@keyframes timeline-line-node-current
from
background: $timeline-line-color-current
@@ -84,7 +70,6 @@ $timeline-line-color-current: #36c2e6
animation: 1s infinite alternate
animation-name: timeline-line-node-noncurrent
-
.current
.timeline-line
&-segment
@@ -98,8 +83,9 @@ $timeline-line-color-current: #36c2e6
&-node
animation-name: timeline-line-node-current
-.timeline-pt-start
+.timeline-content-area
padding-top: 18px
+ flex-grow: 1
.timeline-item-delete-button
position: absolute
@@ -113,7 +99,6 @@ $timeline-line-color-current: #36c2e6
max-width: 60%
max-height: 200px
-
.timeline-post-edit-image
max-width: 100px
max-height: 100px
@@ -122,10 +107,34 @@ $timeline-line-color-current: #36c2e6
background: change-color($color: white, $alpha: 0.8)
z-index: 100
-textarea.timeline-post-edit
- @extend .border-primary
- @extend .rounded
-
- &:focus
- outline: none
- box-shadow: 0 0 5px 0 $primary
+.timeline-page-top-space
+ transition: height 0.5s
+
+.timeline-sync-state-badge
+ font-size: 0.8em
+ padding: 3px 8px
+ border-radius: 5px
+ background: #e8fbff
+
+.timeline-sync-state-badge-pin
+ display: inline-block
+ width: 0.4em
+ height: 0.4em
+ border-radius: 50%
+ vertical-align: middle
+ margin-right: 0.6em
+
+.timeline-template-info-card
+ position: sticky
+ z-index: 1
+ top: 56px
+ padding: 0.5em
+
+ @include media-breakpoint-down(sm)
+ padding-bottom: 0
+
+ &.my-collapse
+ float: right
+
+ @include media-breakpoint-up(sm)
+ float: right
diff --git a/Timeline/ClientApp/src/app/timeline/TimelineDeleteDialog.tsx b/Timeline/ClientApp/src/app/views/timeline/TimelineDeleteDialog.tsx
index 5ebbf9df..894b8195 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelineDeleteDialog.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline/TimelineDeleteDialog.tsx
@@ -2,8 +2,9 @@ import React from "react";
import { useHistory } from "react-router";
import { Trans } from "react-i18next";
+import { timelineService } from "@/services/timeline";
+
import OperationDialog from "../common/OperationDialog";
-import { timelineService } from "../data/timeline";
interface TimelineDeleteDialog {
open: boolean;
diff --git a/Timeline/ClientApp/src/app/views/timeline/TimelineInfoCard.tsx b/Timeline/ClientApp/src/app/views/timeline/TimelineInfoCard.tsx
new file mode 100644
index 00000000..d764a275
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/timeline/TimelineInfoCard.tsx
@@ -0,0 +1,85 @@
+import React from "react";
+import { useTranslation } from "react-i18next";
+import { Dropdown, Button } from "react-bootstrap";
+
+import { useAvatar } from "@/services/user";
+import { timelineVisibilityTooltipTranslationMap } from "@/services/timeline";
+
+import BlobImage from "../common/BlobImage";
+import { TimelineCardComponentProps } from "../timeline-common/TimelinePageTemplateUI";
+import InfoCardTemplate from "../timeline-common/InfoCardTemplate";
+
+export type OrdinaryTimelineManageItem = "delete";
+
+export type TimelineInfoCardProps = TimelineCardComponentProps<
+ OrdinaryTimelineManageItem
+>;
+
+const TimelineInfoCard: React.FC<TimelineInfoCardProps> = (props) => {
+ const {
+ timeline,
+ onMember,
+ onManage,
+ collapse,
+ syncStatus,
+ toggleCollapse,
+ } = props;
+
+ const { t } = useTranslation();
+
+ const avatar = useAvatar(timeline?.owner?.username);
+
+ return (
+ <InfoCardTemplate
+ className={props.className}
+ syncStatus={syncStatus}
+ collapse={collapse}
+ toggleCollapse={toggleCollapse}
+ >
+ <h3 className="text-primary mx-3 d-inline-block align-middle">
+ {timeline.name}
+ </h3>
+ <div className="d-inline-block align-middle">
+ <BlobImage blob={avatar} className="avatar small rounded-circle" />
+ {timeline.owner.nickname}
+ <small className="ml-3 text-secondary">
+ @{timeline.owner.username}
+ </small>
+ </div>
+ <p className="mb-0">{timeline.description}</p>
+ <small className="mt-1 d-block">
+ {t(timelineVisibilityTooltipTranslationMap[timeline.visibility])}
+ </small>
+ <div className="text-right mt-2">
+ {onManage != null ? (
+ <Dropdown>
+ <Dropdown.Toggle variant="outline-primary">
+ {t("timeline.manage")}
+ </Dropdown.Toggle>
+ <Dropdown.Menu>
+ <Dropdown.Item onClick={() => onManage("property")}>
+ {t("timeline.manageItem.property")}
+ </Dropdown.Item>
+ <Dropdown.Item onClick={onMember}>
+ {t("timeline.manageItem.member")}
+ </Dropdown.Item>
+ <Dropdown.Divider />
+ <Dropdown.Item
+ className="text-danger"
+ onClick={() => onManage("delete")}
+ >
+ {t("timeline.manageItem.delete")}
+ </Dropdown.Item>
+ </Dropdown.Menu>
+ </Dropdown>
+ ) : (
+ <Button variant="outline-primary" onClick={onMember}>
+ {t("timeline.memberButton")}
+ </Button>
+ )}
+ </div>
+ </InfoCardTemplate>
+ );
+};
+
+export default TimelineInfoCard;
diff --git a/Timeline/ClientApp/src/app/timeline/TimelinePageUI.tsx b/Timeline/ClientApp/src/app/views/timeline/TimelinePageUI.tsx
index 63751eeb..67ea699e 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelinePageUI.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline/TimelinePageUI.tsx
@@ -1,15 +1,14 @@
import React from "react";
-import { ExcludeKey } from "../utilities/type";
-
import TimelinePageTemplateUI, {
TimelinePageTemplateUIProps,
-} from "./TimelinePageTemplateUI";
+} from "../timeline-common/TimelinePageTemplateUI";
+
import TimelineInfoCard, {
OrdinaryTimelineManageItem,
} from "./TimelineInfoCard";
-export type TimelinePageUIProps = ExcludeKey<
+export type TimelinePageUIProps = Omit<
TimelinePageTemplateUIProps<OrdinaryTimelineManageItem>,
"CardComponent"
>;
diff --git a/Timeline/ClientApp/src/app/timeline/TimelinePage.tsx b/Timeline/ClientApp/src/app/views/timeline/index.tsx
index 21d52db1..225a1a59 100644
--- a/Timeline/ClientApp/src/app/timeline/TimelinePage.tsx
+++ b/Timeline/ClientApp/src/app/views/timeline/index.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { useParams } from "react-router";
-import TimelinePageTemplate from "../timeline/TimelinePageTemplate";
+import TimelinePageTemplate from "../timeline-common/TimelinePageTemplate";
import TimelinePageUI from "./TimelinePageUI";
import { OrdinaryTimelineManageItem } from "./TimelineInfoCard";
diff --git a/Timeline/ClientApp/src/app/views/timeline/timeline.sass b/Timeline/ClientApp/src/app/views/timeline/timeline.sass
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/timeline/timeline.sass
diff --git a/Timeline/ClientApp/src/app/user/ChangeAvatarDialog.tsx b/Timeline/ClientApp/src/app/views/user/ChangeAvatarDialog.tsx
index 7d9f9514..ffa2218b 100644
--- a/Timeline/ClientApp/src/app/user/ChangeAvatarDialog.tsx
+++ b/Timeline/ClientApp/src/app/views/user/ChangeAvatarDialog.tsx
@@ -1,17 +1,11 @@
import React, { useState, useEffect } from "react";
import { useTranslation } from "react-i18next";
-import {
- Modal,
- ModalHeader,
- Row,
- Button,
- ModalBody,
- ModalFooter,
-} from "reactstrap";
import { AxiosError } from "axios";
+import { Modal, Row, Button } from "react-bootstrap";
+
+import { UiLogicError } from "@/common";
import ImageCropper, { Clip, applyClipToImage } from "../common/ImageCropper";
-import { UiLogicError } from "../common";
export interface ChangeAvatarDialogProps {
open: boolean;
@@ -55,7 +49,7 @@ const ChangeAvatarDialog: React.FC<ChangeAvatarDialogProps> = (props) => {
const closeDialog = props.close;
- const toggle = React.useCallback((): void => {
+ const close = React.useCallback((): void => {
if (!(state === "uploading")) {
closeDialog();
}
@@ -162,23 +156,25 @@ const ChangeAvatarDialog: React.FC<ChangeAvatarDialogProps> = (props) => {
};
return (
- <Modal isOpen={props.open} toggle={toggle}>
- <ModalHeader> {t("userPage.dialogChangeAvatar.title")}</ModalHeader>
+ <Modal show={props.open} onHide={close}>
+ <Modal.Header>
+ <Modal.Title> {t("userPage.dialogChangeAvatar.title")}</Modal.Title>
+ </Modal.Header>
{(() => {
if (state === "select") {
return (
<>
- <ModalBody className="container">
+ <Modal.Body className="container">
<Row>{t("userPage.dialogChangeAvatar.prompt.select")}</Row>
<Row>
<input type="file" accept="image/*" onChange={onSelectFile} />
</Row>
- </ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={toggle}>
+ </Modal.Body>
+ <Modal.Footer>
+ <Button variant="secondary" onClick={close}>
{t("operationDialog.cancel")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</>
);
} else if (state === "crop") {
@@ -187,7 +183,7 @@ const ChangeAvatarDialog: React.FC<ChangeAvatarDialogProps> = (props) => {
}
return (
<>
- <ModalBody className="container">
+ <Modal.Body className="container">
<Row className="justify-content-center">
<ImageCropper
clip={clip}
@@ -197,12 +193,12 @@ const ChangeAvatarDialog: React.FC<ChangeAvatarDialogProps> = (props) => {
/>
</Row>
<Row>{t("userPage.dialogChangeAvatar.prompt.crop")}</Row>
- </ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={toggle}>
+ </Modal.Body>
+ <Modal.Footer>
+ <Button variant="secondary" onClick={close}>
{t("operationDialog.cancel")}
</Button>
- <Button color="secondary" onClick={onCropPrevious}>
+ <Button variant="secondary" onClick={onCropPrevious}>
{t("operationDialog.previousStep")}
</Button>
<Button
@@ -214,87 +210,87 @@ const ChangeAvatarDialog: React.FC<ChangeAvatarDialogProps> = (props) => {
>
{t("operationDialog.nextStep")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</>
);
} else if (state === "processcrop") {
return (
<>
- <ModalBody className="container">
+ <Modal.Body className="container">
<Row>
{t("userPage.dialogChangeAvatar.prompt.processingCrop")}
</Row>
- </ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={toggle}>
+ </Modal.Body>
+ <Modal.Footer>
+ <Button variant="secondary" onClick={close}>
{t("operationDialog.cancel")}
</Button>
- <Button color="secondary" onClick={onPreviewPrevious}>
+ <Button variant="secondary" onClick={onPreviewPrevious}>
{t("operationDialog.previousStep")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</>
);
} else if (state === "preview") {
return (
<>
- <ModalBody className="container">
+ <Modal.Body className="container">
{createPreviewRow()}
<Row>{t("userPage.dialogChangeAvatar.prompt.preview")}</Row>
- </ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={toggle}>
+ </Modal.Body>
+ <Modal.Footer>
+ <Button variant="secondary" onClick={close}>
{t("operationDialog.cancel")}
</Button>
- <Button color="secondary" onClick={onPreviewPrevious}>
+ <Button variant="secondary" onClick={onPreviewPrevious}>
{t("operationDialog.previousStep")}
</Button>
- <Button color="primary" onClick={upload}>
+ <Button variant="primary" onClick={upload}>
{t("userPage.dialogChangeAvatar.upload")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</>
);
} else if (state === "uploading") {
return (
<>
- <ModalBody className="container">
+ <Modal.Body className="container">
{createPreviewRow()}
<Row>{t("userPage.dialogChangeAvatar.prompt.uploading")}</Row>
- </ModalBody>
- <ModalFooter></ModalFooter>
+ </Modal.Body>
+ <Modal.Footer></Modal.Footer>
</>
);
} else if (state === "success") {
return (
<>
- <ModalBody className="container">
+ <Modal.Body className="container">
<Row className="p-4 text-success">
{t("operationDialog.success")}
</Row>
- </ModalBody>
- <ModalFooter>
- <Button color="success" onClick={toggle}>
+ </Modal.Body>
+ <Modal.Footer>
+ <Button variant="success" onClick={close}>
{t("operationDialog.ok")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</>
);
} else {
return (
<>
- <ModalBody className="container">
+ <Modal.Body className="container">
{createPreviewRow()}
<Row className="text-danger">{trueMessage}</Row>
- </ModalBody>
- <ModalFooter>
- <Button color="secondary" onClick={toggle}>
+ </Modal.Body>
+ <Modal.Footer>
+ <Button variant="secondary" onClick={close}>
{t("operationDialog.cancel")}
</Button>
- <Button color="primary" onClick={upload}>
+ <Button variant="primary" onClick={upload}>
{t("operationDialog.retry")}
</Button>
- </ModalFooter>
+ </Modal.Footer>
</>
);
}
diff --git a/Timeline/ClientApp/src/app/user/ChangeNicknameDialog.tsx b/Timeline/ClientApp/src/app/views/user/ChangeNicknameDialog.tsx
index 251b18c5..251b18c5 100644
--- a/Timeline/ClientApp/src/app/user/ChangeNicknameDialog.tsx
+++ b/Timeline/ClientApp/src/app/views/user/ChangeNicknameDialog.tsx
diff --git a/Timeline/ClientApp/src/app/views/user/UserInfoCard.tsx b/Timeline/ClientApp/src/app/views/user/UserInfoCard.tsx
new file mode 100644
index 00000000..4cf11e62
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/user/UserInfoCard.tsx
@@ -0,0 +1,80 @@
+import React from "react";
+import { useTranslation } from "react-i18next";
+import { Dropdown, Button } from "react-bootstrap";
+
+import { timelineVisibilityTooltipTranslationMap } from "@/services/timeline";
+import { useAvatar } from "@/services/user";
+
+import BlobImage from "../common/BlobImage";
+import { TimelineCardComponentProps } from "../timeline-common/TimelinePageTemplateUI";
+import InfoCardTemplate from "../timeline-common/InfoCardTemplate";
+
+export type PersonalTimelineManageItem = "avatar" | "nickname";
+
+export type UserInfoCardProps = TimelineCardComponentProps<
+ PersonalTimelineManageItem
+>;
+
+const UserInfoCard: React.FC<UserInfoCardProps> = (props) => {
+ const {
+ timeline,
+ onMember,
+ onManage,
+ syncStatus,
+ collapse,
+ toggleCollapse,
+ } = props;
+ const { t } = useTranslation();
+
+ const avatar = useAvatar(timeline?.owner?.username);
+
+ return (
+ <InfoCardTemplate
+ className={props.className}
+ syncStatus={syncStatus}
+ collapse={collapse}
+ toggleCollapse={toggleCollapse}
+ >
+ <div>
+ <BlobImage blob={avatar} className="avatar" />
+ {timeline.owner.nickname}
+ <small className="ml-3 text-secondary">
+ @{timeline.owner.username}
+ </small>
+ </div>
+ <p className="mb-0">{timeline.description}</p>
+ <small className="mt-1 d-block">
+ {t(timelineVisibilityTooltipTranslationMap[timeline.visibility])}
+ </small>
+ <div className="text-right mt-2">
+ {onManage != null ? (
+ <Dropdown>
+ <Dropdown.Toggle variant="outline-primary">
+ {t("timeline.manage")}
+ </Dropdown.Toggle>
+ <Dropdown.Menu>
+ <Dropdown.Item onClick={() => onManage("nickname")}>
+ {t("timeline.manageItem.nickname")}
+ </Dropdown.Item>
+ <Dropdown.Item onClick={() => onManage("avatar")}>
+ {t("timeline.manageItem.avatar")}
+ </Dropdown.Item>
+ <Dropdown.Item onClick={() => onManage("property")}>
+ {t("timeline.manageItem.property")}
+ </Dropdown.Item>
+ <Dropdown.Item onClick={onMember}>
+ {t("timeline.manageItem.member")}
+ </Dropdown.Item>
+ </Dropdown.Menu>
+ </Dropdown>
+ ) : (
+ <Button variant="outline-primary" onClick={onMember}>
+ {t("timeline.memberButton")}
+ </Button>
+ )}
+ </div>
+ </InfoCardTemplate>
+ );
+};
+
+export default UserInfoCard;
diff --git a/Timeline/ClientApp/src/app/user/UserPage.tsx b/Timeline/ClientApp/src/app/views/user/UserPageUI.tsx
index ab498f30..d405399c 100644
--- a/Timeline/ClientApp/src/app/user/UserPage.tsx
+++ b/Timeline/ClientApp/src/app/views/user/UserPageUI.tsx
@@ -1,19 +1,18 @@
import React from "react";
-import { ExcludeKey } from "../utilities/type";
import TimelinePageTemplateUI, {
TimelinePageTemplateUIProps,
-} from "../timeline/TimelinePageTemplateUI";
+} from "../timeline-common/TimelinePageTemplateUI";
import UserInfoCard, { PersonalTimelineManageItem } from "./UserInfoCard";
-export type UserPageProps = ExcludeKey<
+export type UserPageUIProps = Omit<
TimelinePageTemplateUIProps<PersonalTimelineManageItem>,
"CardComponent"
>;
-const UserPage: React.FC<UserPageProps> = (props) => {
+const UserPageUI: React.FC<UserPageUIProps> = (props) => {
return <TimelinePageTemplateUI {...props} CardComponent={UserInfoCard} />;
};
-export default UserPage;
+export default UserPageUI;
diff --git a/Timeline/ClientApp/src/app/user/User.tsx b/Timeline/ClientApp/src/app/views/user/index.tsx
index db0a6f76..7c0b1563 100644
--- a/Timeline/ClientApp/src/app/user/User.tsx
+++ b/Timeline/ClientApp/src/app/views/user/index.tsx
@@ -1,16 +1,17 @@
import React, { useState } from "react";
import { useParams } from "react-router";
-import { UiLogicError } from "../common";
-import { useUser, userInfoService } from "../data/user";
-import TimelinePageTemplate from "../timeline/TimelinePageTemplate";
+import { UiLogicError } from "@/common";
+import { useUser, userInfoService } from "@/services/user";
-import UserPage from "./UserPage";
+import TimelinePageTemplate from "../timeline-common/TimelinePageTemplate";
+
+import UserPageUI from "./UserPageUI";
+import { PersonalTimelineManageItem } from "./UserInfoCard";
import ChangeNicknameDialog from "./ChangeNicknameDialog";
import ChangeAvatarDialog from "./ChangeAvatarDialog";
-import { PersonalTimelineManageItem } from "./UserInfoCard";
-const User: React.FC = (_) => {
+const UserPage: React.FC = (_) => {
const { username } = useParams<{ username: string }>();
const user = useUser();
@@ -59,7 +60,7 @@ const User: React.FC = (_) => {
<>
<TimelinePageTemplate
name={`@${username}`}
- UiComponent={UserPage}
+ UiComponent={UserPageUI}
onManage={onManage}
notFoundI18nKey="timeline.userNotExist"
/>
@@ -68,4 +69,4 @@ const User: React.FC = (_) => {
);
};
-export default User;
+export default UserPage;
diff --git a/Timeline/ClientApp/src/app/user/user-page.sass b/Timeline/ClientApp/src/app/views/user/user.sass
index ca2d10f5..5b7fcae7 100644
--- a/Timeline/ClientApp/src/app/user/user-page.sass
+++ b/Timeline/ClientApp/src/app/views/user/user.sass
@@ -1,6 +1,3 @@
-.login-container
- max-width: 600px
-
.change-avatar-cropper-row
max-height: 400px
diff --git a/Timeline/ClientApp/src/tsconfig.json b/Timeline/ClientApp/src/tsconfig.json
index 2820b583..6937be63 100644
--- a/Timeline/ClientApp/src/tsconfig.json
+++ b/Timeline/ClientApp/src/tsconfig.json
@@ -12,6 +12,12 @@
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
- "sourceMap": true
+ "sourceMap": true,
+ "baseUrl": "./",
+ "paths": {
+ "@/*": [
+ "app/*"
+ ]
+ }
}
}
diff --git a/Timeline/ClientApp/webpack.common.js b/Timeline/ClientApp/webpack.common.js
index fdfb793e..e13881cb 100644
--- a/Timeline/ClientApp/webpack.common.js
+++ b/Timeline/ClientApp/webpack.common.js
@@ -77,6 +77,8 @@ config.resolve.extensions
.plugin("pnp")
.use(PnpWebpackPlugin);
+config.resolve.alias.set("@", path.resolve(__dirname, "src/app"));
+
config.resolveLoader.plugin("pnp").use(PnpWebpackPlugin.moduleLoader(module));
config.output
diff --git a/Timeline/ClientApp/yarn.lock b/Timeline/ClientApp/yarn.lock
index 8562343a..8ca54343 100644
--- a/Timeline/ClientApp/yarn.lock
+++ b/Timeline/ClientApp/yarn.lock
@@ -1488,7 +1488,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4":
+"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4":
version: 7.10.5
resolution: "@babel/runtime@npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.10.5.tgz"
dependencies:
@@ -1497,6 +1497,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/runtime@npm:^7.4.2, @babel/runtime@npm:^7.4.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7":
+ version: 7.11.2
+ resolution: "@babel/runtime@npm:7.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz"
+ dependencies:
+ regenerator-runtime: ^0.13.4
+ checksum: 2f127ad60a0f0568faa0044e5b48329d8166c7fd3a0a3ce774070010a1c441ebf5570f526dd6bb26e214fb1a01bb987ab6a4c3f60a00f04d02448939f4c61e1e
+ languageName: node
+ linkType: hard
+
"@babel/template@npm:^7.10.4":
version: 7.10.4
resolution: "@babel/template@npm:7.10.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.10.4.tgz"
@@ -1663,6 +1672,34 @@ __metadata:
languageName: node
linkType: hard
+"@popperjs/core@npm:^2.0.0":
+ version: 2.4.4
+ resolution: "@popperjs/core@npm:2.4.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.4.4.tgz"
+ checksum: 49a1e6cfa2ec5004c541b0a1bd7d523c8aa7d728aa26e05df10f0af8c1e6c0db7fb9ebc8bee6dbfcdc7ad422999d9bf7d8a1c2b07dff3292b7dfa61a63af8b49
+ languageName: node
+ linkType: hard
+
+"@restart/context@npm:^2.1.4":
+ version: 2.1.4
+ resolution: "@restart/context@npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fcontext%2Fdownload%2F%40restart%2Fcontext-2.1.4.tgz"
+ peerDependencies:
+ react: ">=16.3.2"
+ checksum: f9dd1416c16988b5bd66d3306dedfc9b95665d3af2c5b88cd2040b0825dfcf778eb9bd992c6e810c62187f981a78ea34923fb582a023f896079634edb3b1bc2c
+ languageName: node
+ linkType: hard
+
+"@restart/hooks@npm:^0.3.12, @restart/hooks@npm:^0.3.21":
+ version: 0.3.25
+ resolution: "@restart/hooks@npm:0.3.25::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40restart%2Fhooks%2Fdownload%2F%40restart%2Fhooks-0.3.25.tgz"
+ dependencies:
+ lodash: ^4.17.15
+ lodash-es: ^4.17.15
+ peerDependencies:
+ react: ^16.8.0
+ checksum: 08aefc359f597f9def83454c182e40efef034ca6e0eac41d28e013d8a3940d354911f60f89e73bad72ac9aee1bff56e84d4b26b95d46877818b733483ed95cad
+ languageName: node
+ linkType: hard
+
"@rollup/plugin-node-resolve@npm:^7.1.1":
version: 7.1.3
resolution: "@rollup/plugin-node-resolve@npm:7.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40rollup%2Fplugin-node-resolve%2Fdownload%2F%40rollup%2Fplugin-node-resolve-7.1.3.tgz"
@@ -1828,7 +1865,14 @@ __metadata:
languageName: node
linkType: hard
-"@types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.4":
+"@types/invariant@npm:^2.2.33":
+ version: 2.2.34
+ resolution: "@types/invariant@npm:2.2.34::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Finvariant%2Fdownload%2F%40types%2Finvariant-2.2.34.tgz"
+ checksum: d0ecc665e5c95abf1ad7263c8cc32604d6b3444cfbc97657fede7e63f3751554a4f35f72ae565d70c28184dfb8b0cd4c058eaec1af972999edfd0a81b365f74b
+ languageName: node
+ linkType: hard
+
+"@types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5":
version: 7.0.5
resolution: "@types/json-schema@npm:7.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz"
checksum: 6290f9fe93ac957b244262d5ff56cfd3045c63da6ed88dcc2d5b84131e6284c8e6213bf0cb81423a4f940182647bcd69057309c982f8db64dfff8f65f800ef80
@@ -1851,10 +1895,10 @@ __metadata:
languageName: node
linkType: hard
-"@types/lodash@npm:^4.14.159":
- version: 4.14.159
- resolution: "@types/lodash@npm:4.14.159::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.159.tgz"
- checksum: 15fc1b690916aec2e169327759fbc71b0cb25ca0cd0003c4d20d2e5b4ed14b7bc2feb2835d643e0335eabc1536e7c11b499de591eb794fbb764523cb06c66eee
+"@types/lodash@npm:^4.14.161":
+ version: 4.14.161
+ resolution: "@types/lodash@npm:4.14.161::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz"
+ checksum: c3657517dab1a23059d86ae379c4e7538212f05ba9c3e108ab694167f086118a5b44ed04bcb6e5cd0a89778c29909668302a755df576e3597df16fda8b603443
languageName: node
linkType: hard
@@ -1879,14 +1923,14 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:^14.6.0":
- version: 14.6.0
- resolution: "@types/node@npm:14.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.0.tgz"
- checksum: ff23553ab77516d0f90b6710a041a49723fc1b1ca33a5379d5746068cac8b9ddbec428d3a4913afaee50bcdc69b9583843740a18a3519ae997982694f5287c6b
+"@types/node@npm:^14.6.2":
+ version: 14.6.2
+ resolution: "@types/node@npm:14.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.2.tgz"
+ checksum: e88f4749fd95d7358a719dee27bb3c02aa7d93a69d95887b4baaeae3fcc21c65d8675e6a9633e499de22fa77651fc12188fd3657a6729dbce9e44a4fe5c0691b
languageName: node
linkType: hard
-"@types/prop-types@npm:*":
+"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.3":
version: 15.7.3
resolution: "@types/prop-types@npm:15.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fprop-types%2Fdownload%2F%40types%2Fprop-types-15.7.3.tgz"
checksum: bd0eab69d5120ad3784d0c9985f902653d5924707a7f2b3702a330e762dfd61b6494954cb54ad0c52b918ffd6f1e7e27c9270e4442bc15250de348596f2f60cb
@@ -1911,7 +1955,17 @@ __metadata:
languageName: node
linkType: hard
-"@types/react-router-dom@npm:^5.1.5":
+"@types/react-router-bootstrap@npm:^0.24.5":
+ version: 0.24.5
+ resolution: "@types/react-router-bootstrap@npm:0.24.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-bootstrap%2Fdownload%2F%40types%2Freact-router-bootstrap-0.24.5.tgz"
+ dependencies:
+ "@types/react": "*"
+ "@types/react-router-dom": "*"
+ checksum: 08b8ed99b750ffa14546653f73bcc2e39ab5149c4a22e1ef8d8dd0d73874bd38b5c7873bba34753cee4942141d9eabd520d5e36a12ead6309626699ba8d85faa
+ languageName: node
+ linkType: hard
+
+"@types/react-router-dom@npm:*, @types/react-router-dom@npm:^5.1.5":
version: 5.1.5
resolution: "@types/react-router-dom@npm:5.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-router-dom%2Fdownload%2F%40types%2Freact-router-dom-5.1.5.tgz"
dependencies:
@@ -1932,6 +1986,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/react-transition-group@npm:^4.4.0":
+ version: 4.4.0
+ resolution: "@types/react-transition-group@npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-transition-group%2Fdownload%2F%40types%2Freact-transition-group-4.4.0.tgz"
+ dependencies:
+ "@types/react": "*"
+ checksum: b761f70623ca2a386a310536886e7ceed15087e59a3b6c68478c9965d38edd819c5b29e3fb79a5d911ee4b1db5ab397ae0ebb5a5ddf98f08708a6d592cb7c256
+ languageName: node
+ linkType: hard
+
"@types/react@npm:*":
version: 16.9.43
resolution: "@types/react@npm:16.9.43::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.43.tgz"
@@ -1942,23 +2005,13 @@ __metadata:
languageName: node
linkType: hard
-"@types/react@npm:^16.9.46":
- version: 16.9.46
- resolution: "@types/react@npm:16.9.46::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.46.tgz"
+"@types/react@npm:^16.9.11, @types/react@npm:^16.9.35, @types/react@npm:^16.9.49":
+ version: 16.9.49
+ resolution: "@types/react@npm:16.9.49::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-16.9.49.tgz"
dependencies:
"@types/prop-types": "*"
csstype: ^3.0.2
- checksum: ad8d07195dc483f9186dc7886bba15c39e6f9c29bbbd97e52a7a117016f07ac6f923b202749d40833bef62fe60f4af6847b82dcfa0c539495e541ad6d819e49a
- languageName: node
- linkType: hard
-
-"@types/reactstrap@npm:^8.5.1":
- version: 8.5.1
- resolution: "@types/reactstrap@npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freactstrap%2Fdownload%2F%40types%2Freactstrap-8.5.1.tgz"
- dependencies:
- "@types/react": "*"
- popper.js: ^1.14.1
- checksum: 87b383af721243214a3ae8bf4867f932ed0fcd56489337290ce090a264e3db6419ee266d57dcdc406bdbf9185c5cf2c742402e870c396c6735f8ebc00c06af09
+ checksum: cf5dabe1e9c893a19a338002ac4bf5a86c9bc3cd88eb07aece54e6d2e5af35debe2a8c72d211ad9133391543ce115219cd7c7f2a6f649b81caf4548e1cc99061
languageName: node
linkType: hard
@@ -2003,6 +2056,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/warning@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "@types/warning@npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwarning%2Fdownload%2F%40types%2Fwarning-3.0.0.tgz"
+ checksum: cb7a16aa88641beceec53ce765274c1ba3a9136e3c7c53cafd769d5063ea96f8899332ce7031c6f374bd23b5713a9a733d42c369ebdb4b62daf9b7562700848c
+ languageName: node
+ linkType: hard
+
"@types/webpack-env@npm:^1.15.2":
version: 1.15.2
resolution: "@types/webpack-env@npm:1.15.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-env%2Fdownload%2F%40types%2Fwebpack-env-1.15.2.tgz"
@@ -2042,11 +2102,11 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:^3.9.1":
- version: 3.9.1
- resolution: "@typescript-eslint/eslint-plugin@npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.9.1.tgz"
+"@typescript-eslint/eslint-plugin@npm:^3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/eslint-plugin@npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.10.1.tgz"
dependencies:
- "@typescript-eslint/experimental-utils": 3.9.1
+ "@typescript-eslint/experimental-utils": 3.10.1
debug: ^4.1.1
functional-red-black-tree: ^1.0.1
regexpp: ^3.0.0
@@ -2059,33 +2119,33 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: 252bab346c02c78f97bc389686230ba0260409f1471c1bea91764ea1ff0aa30d941294c4ae59a4d3f5ca2f8e73311a080709f0d0e5923b9dd4c013b0d9a1f583
+ checksum: c50fefc3dfdc5ed6a6bbeb589a9e30d8df2329aac1a6b4a54b7f405c98a3262db34a7d7e6108a3eb67b90b3fdcd87724143be3a5ecf95c6f3e5c432795fdac87
languageName: node
linkType: hard
-"@typescript-eslint/experimental-utils@npm:3.9.1":
- version: 3.9.1
- resolution: "@typescript-eslint/experimental-utils@npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.9.1.tgz"
+"@typescript-eslint/experimental-utils@npm:3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/experimental-utils@npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.10.1.tgz"
dependencies:
"@types/json-schema": ^7.0.3
- "@typescript-eslint/types": 3.9.1
- "@typescript-eslint/typescript-estree": 3.9.1
+ "@typescript-eslint/types": 3.10.1
+ "@typescript-eslint/typescript-estree": 3.10.1
eslint-scope: ^5.0.0
eslint-utils: ^2.0.0
peerDependencies:
eslint: "*"
- checksum: 8092e411ad2b8c57bb848507f9feffd7c305ca469b494b3d97b4176b73f0d9dbff20715a66537e9916a17b9aff9d76c446a0849967712bac2fba9b237f3df395
+ checksum: b1be2620f017cc325a36903c946b0828c9857e17410083e6d3396c48121ca6e4b8c30475426b39895ac253b8ffd0b08cb10e9c6786c2237ac014a37aac4b6c7f
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:^3.9.1":
- version: 3.9.1
- resolution: "@typescript-eslint/parser@npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.9.1.tgz"
+"@typescript-eslint/parser@npm:^3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/parser@npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.10.1.tgz"
dependencies:
"@types/eslint-visitor-keys": ^1.0.0
- "@typescript-eslint/experimental-utils": 3.9.1
- "@typescript-eslint/types": 3.9.1
- "@typescript-eslint/typescript-estree": 3.9.1
+ "@typescript-eslint/experimental-utils": 3.10.1
+ "@typescript-eslint/types": 3.10.1
+ "@typescript-eslint/typescript-estree": 3.10.1
eslint-visitor-keys: ^1.1.0
peerDependencies:
eslint: ^5.0.0 || ^6.0.0 || ^7.0.0
@@ -2093,23 +2153,23 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: ed9a4829697cb02b18d47b83d8bb5678f37a5eb996e47ded58387dda22f0b6e51800f0a3ecf6136f23827bfc654cd0f38d5082ca66a93c593ee0afa370edcc10
+ checksum: 17289e48d281a04b1a43d09a8098acf86a1fef06297533cf7f54863cb1cf897b3b5f0b050c4eb1fc5c26bd3ab723cae0ac3ac9ecfafb16eccea63279c7bf299e
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:3.9.1":
- version: 3.9.1
- resolution: "@typescript-eslint/types@npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.9.1.tgz"
- checksum: 0591ff76919fb8d19af26f0657329d8fa499484f64e073a76ae2f846ea39074c3cd888ae185d16aa2974eb1ca3a0aa6083040c13872a2aaafb8a10e1b8a38a9e
+"@typescript-eslint/types@npm:3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/types@npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.10.1.tgz"
+ checksum: cc075f8da439ae50a09da950532a8a369855e937e4502cd859829f6dab549e197a2ff2765a193b925e8caa3e16fc3f52bc3d53af0c8cf667c17b0424227055c4
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:3.9.1":
- version: 3.9.1
- resolution: "@typescript-eslint/typescript-estree@npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.9.1.tgz"
+"@typescript-eslint/typescript-estree@npm:3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/typescript-estree@npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.10.1.tgz"
dependencies:
- "@typescript-eslint/types": 3.9.1
- "@typescript-eslint/visitor-keys": 3.9.1
+ "@typescript-eslint/types": 3.10.1
+ "@typescript-eslint/visitor-keys": 3.10.1
debug: ^4.1.1
glob: ^7.1.6
is-glob: ^4.0.1
@@ -2121,16 +2181,16 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: f9a962b6ffd557aff680ccc8a67e79e305002dd90f7637f0d22b9e6e9112dc143f629d12af769e6252c17025cc4bc381218a425fdb4bf9dbd8c12a235356d8c1
+ checksum: c048aa8b80129e0672ba57775072f1d4d9ea1216dee8fd23d224b9064dfebe48b12c1eb8efd823420c35598c423bddd2ec92b49d8c3f04860b91822f104e079f
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:3.9.1":
- version: 3.9.1
- resolution: "@typescript-eslint/visitor-keys@npm:3.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.9.1.tgz"
+"@typescript-eslint/visitor-keys@npm:3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/visitor-keys@npm:3.10.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.10.1.tgz"
dependencies:
eslint-visitor-keys: ^1.1.0
- checksum: 9e54d3a37aef8c177872dcfba59ead2de6bd5c7370a735dc5965d499ca7d93cef6edf297bc07f114098291e797b561cae1bbc74e3e426a3c521d02f03cef95e0
+ checksum: 58890dc003211e47caf05a1ab19cf6d3945d0ee7267ef09bdcf0ff53514a8b93ed778ccf52ae14538fc4e9a03897374efd6e359f6483e8e2f76bb495bb874379
languageName: node
linkType: hard
@@ -2329,26 +2389,27 @@ __metadata:
languageName: node
linkType: hard
-"@yarnpkg/core@npm:^2.1.0":
- version: 2.1.1
- resolution: "@yarnpkg/core@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.1.1.tgz"
+"@yarnpkg/core@npm:^2.2.1":
+ version: 2.2.2
+ resolution: "@yarnpkg/core@npm:2.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fcore%2Fdownload%2F%40yarnpkg%2Fcore-2.2.2.tgz"
dependencies:
"@arcanis/slice-ansi": ^1.0.2
- "@yarnpkg/fslib": ^2.1.0
+ "@yarnpkg/fslib": ^2.2.1
"@yarnpkg/json-proxy": ^2.1.0
- "@yarnpkg/libzip": ^2.1.0
- "@yarnpkg/parsers": ^2.1.0
- "@yarnpkg/pnp": ^2.1.0
- "@yarnpkg/shell": ^2.1.0
+ "@yarnpkg/libzip": ^2.2.0
+ "@yarnpkg/parsers": ^2.2.0
+ "@yarnpkg/pnp": ^2.2.1
+ "@yarnpkg/shell": ^2.2.0
camelcase: ^5.3.1
chalk: ^3.0.0
ci-info: ^2.0.0
- clipanion: ^2.4.2
+ clipanion: ^2.4.4
cross-spawn: 7.0.3
diff: ^4.0.1
- globby: ^10.0.1
+ globby: ^11.0.1
got: ^11.1.3
json-file-plus: ^3.3.1
+ lodash: ^4.17.15
logic-solver: ^2.0.1
micromatch: ^4.0.2
mkdirp: ^0.5.1
@@ -2357,10 +2418,10 @@ __metadata:
pretty-bytes: ^5.1.0
semver: ^7.1.2
stream-to-promise: ^2.2.0
- tar: ^4.4.6
+ tar-stream: ^2.0.1
tslib: ^1.13.0
tunnel: ^0.0.6
- checksum: d01e24bde194feab28bc0524adc8bf1e386041148d436bbb368624f47b1dd5f5e6ca13d3adf9b7501bafff5953d14073880c8c7234cbbaea64bdff793b92bb7d
+ checksum: d56fdc230ee7ebc88c4d06f6e37ab4c2c3ddef0376dc0bc6ebc68ca8aec25d02e666f080a89ad815e1e703c7dc15ebfc459c2428ca8a224408234a3d295dbed0
languageName: node
linkType: hard
@@ -2374,6 +2435,16 @@ __metadata:
languageName: node
linkType: hard
+"@yarnpkg/fslib@npm:^2.2.0, @yarnpkg/fslib@npm:^2.2.1":
+ version: 2.2.1
+ resolution: "@yarnpkg/fslib@npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Ffslib%2Fdownload%2F%40yarnpkg%2Ffslib-2.2.1.tgz"
+ dependencies:
+ "@yarnpkg/libzip": ^2.2.0
+ tslib: ^1.13.0
+ checksum: 2d5dac27eff03191bd6ff5f894a8a941459d1cb8ccccbb8802da8089533cb832b92857825b579336eee74228ca1efe1a4f013f8489c514ed44b55387e0227f16
+ languageName: node
+ linkType: hard
+
"@yarnpkg/json-proxy@npm:^2.1.0":
version: 2.1.0
resolution: "@yarnpkg/json-proxy@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fjson-proxy%2Fdownload%2F%40yarnpkg%2Fjson-proxy-2.1.0.tgz"
@@ -2394,36 +2465,46 @@ __metadata:
languageName: node
linkType: hard
-"@yarnpkg/parsers@npm:^2.1.0":
- version: 2.1.0
- resolution: "@yarnpkg/parsers@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.1.0.tgz"
+"@yarnpkg/libzip@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "@yarnpkg/libzip@npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Flibzip%2Fdownload%2F%40yarnpkg%2Flibzip-2.2.0.tgz"
+ dependencies:
+ "@types/emscripten": ^1.38.0
+ tslib: ^1.13.0
+ checksum: 5546c330c8bf7e288f7446a30dc8b50677746421d14418b12e89c5b7fac33fb90e3c6019ac9fb6ffaa01708759a3540485b7bc69e245d4908f4d3f8436cdc059
+ languageName: node
+ linkType: hard
+
+"@yarnpkg/parsers@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "@yarnpkg/parsers@npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fparsers%2Fdownload%2F%40yarnpkg%2Fparsers-2.2.0.tgz"
dependencies:
js-yaml: ^3.10.0
tslib: ^1.13.0
- checksum: 3cd4e354358ec1562c07872a1132c6eb2817ec3521c89043071b0b2d3fc03946176815f31e930ae24a689321584bf204c7a0fe3a347dc17d359a34062ade6774
+ checksum: 4ff177009d65ace26b4816cd3bffa1377734919b9e9e8d4a21d5491ec218a57de3d87545e4ed0eb06001f00f51e13d0646e33f676df09b2a34f5d892ec2d7348
languageName: node
linkType: hard
-"@yarnpkg/pnp@npm:^2.1.0":
- version: 2.1.0
- resolution: "@yarnpkg/pnp@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.1.0.tgz"
+"@yarnpkg/pnp@npm:^2.2.1":
+ version: 2.2.1
+ resolution: "@yarnpkg/pnp@npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnp%2Fdownload%2F%40yarnpkg%2Fpnp-2.2.1.tgz"
dependencies:
"@types/node": ^13.7.0
- "@yarnpkg/fslib": ^2.1.0
+ "@yarnpkg/fslib": ^2.2.1
tslib: ^1.13.0
- checksum: 610f875f597d6453da5aea96b2abcb1e6e22e210bd9dface366ed2a6e401fa6fdb5ee0884d3fe083c34ab566e59afeb92d13e0dafa8314d57f9cebf5b723a401
+ checksum: 0ea840774c1bba2c357275ad86dbd3f4154a1cb035a8773a94bf37467051180c9ecaf30ed6d64a2474ed8bd9617de56aec5c08b35dd976f285ef666081782e7d
languageName: node
linkType: hard
-"@yarnpkg/pnpify@npm:^2.1.0":
- version: 2.1.0
- resolution: "@yarnpkg/pnpify@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.1.0.tgz"
+"@yarnpkg/pnpify@npm:^2.2.1":
+ version: 2.2.1
+ resolution: "@yarnpkg/pnpify@npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fpnpify%2Fdownload%2F%40yarnpkg%2Fpnpify-2.2.1.tgz"
dependencies:
- "@yarnpkg/core": ^2.1.0
- "@yarnpkg/fslib": ^2.1.0
- "@yarnpkg/parsers": ^2.1.0
+ "@yarnpkg/core": ^2.2.1
+ "@yarnpkg/fslib": ^2.2.1
+ "@yarnpkg/parsers": ^2.2.0
chalk: ^3.0.0
- clipanion: ^2.4.2
+ clipanion: ^2.4.4
comment-json: ^2.2.0
lodash: ^4.17.15
tslib: ^1.13.0
@@ -2437,24 +2518,24 @@ __metadata:
optional: true
bin:
pnpify: ./lib/cli.js
- checksum: 334ce4cc6c6c154fb5aa4f6b4847bb5d7869596d295cc429dedecaa9b4865cbaf104855d856fbbf5f186da09dd7e63bf7d774665f2ce5439c2664c13ef142cf0
+ checksum: 47a6fd0c11403d1dffdac76765ba995bdc8b5430666997e15c70ca285747e01fe831fd875a13fb1118d22458c019bbe1fab60945f9cb0a6ef46d291a5759b244
languageName: node
linkType: hard
-"@yarnpkg/shell@npm:^2.1.0":
- version: 2.1.0
- resolution: "@yarnpkg/shell@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.1.0.tgz"
+"@yarnpkg/shell@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "@yarnpkg/shell@npm:2.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40yarnpkg%2Fshell%2Fdownload%2F%40yarnpkg%2Fshell-2.2.0.tgz"
dependencies:
- "@yarnpkg/fslib": ^2.1.0
- "@yarnpkg/parsers": ^2.1.0
- clipanion: ^2.4.2
+ "@yarnpkg/fslib": ^2.2.0
+ "@yarnpkg/parsers": ^2.2.0
+ clipanion: ^2.4.4
cross-spawn: 7.0.3
fast-glob: ^3.2.2
stream-buffers: ^3.0.2
tslib: ^1.13.0
bin:
shell: ./lib/cli.js
- checksum: 2e0b808965c7b3c8fcce64da6889f087550cd25604cf963ac06a037e08a17d020561457126d1e4bfe19459da3f192f1aef7ed0636895fd619e3c801f64216d4c
+ checksum: 23a26955caf2c3435a1c2dbd960a36a898c001159d36aabf93029c2e19fbb3c0161ada53f6167bcb26a28a038ade347c101bd98771adb7fa1fc5e1aa3542ea32
languageName: node
linkType: hard
@@ -2530,6 +2611,15 @@ __metadata:
languageName: node
linkType: hard
+"ajv-keywords@npm:^3.5.2":
+ version: 3.5.2
+ resolution: "ajv-keywords@npm:3.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz"
+ peerDependencies:
+ ajv: ^6.9.1
+ checksum: 01f26c292304870c03a1cd14fc1ddcf7c713a05611a122c5193694d4050063d5fba46cbf8b5b2ebde364166fddd3c2e0abdcd97df655b7a7fbb3e6634eeb056a
+ languageName: node
+ linkType: hard
+
"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.2, ajv@npm:^6.5.5":
version: 6.12.3
resolution: "ajv@npm:6.12.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz"
@@ -2542,6 +2632,18 @@ __metadata:
languageName: node
linkType: hard
+"ajv@npm:^6.12.4":
+ version: 6.12.4
+ resolution: "ajv@npm:6.12.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.4.tgz"
+ dependencies:
+ fast-deep-equal: ^3.1.1
+ fast-json-stable-stringify: ^2.0.0
+ json-schema-traverse: ^0.4.1
+ uri-js: ^4.2.2
+ checksum: 50d72b0a10326732072f5481b1b6bd5a43f8d770878b8f88ba5bb232abb745cefbf7f87a0e64679bd477d4a8bba0b3aea084675bd34943db5279c15907ee658f
+ languageName: node
+ linkType: hard
+
"ansi-colors@npm:^3.0.0":
version: 3.2.4
resolution: "ansi-colors@npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-colors%2Fdownload%2Fansi-colors-3.2.4.tgz"
@@ -3130,6 +3232,17 @@ __metadata:
languageName: node
linkType: hard
+"bl@npm:^4.0.1":
+ version: 4.0.3
+ resolution: "bl@npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-4.0.3.tgz"
+ dependencies:
+ buffer: ^5.5.0
+ inherits: ^2.0.4
+ readable-stream: ^3.4.0
+ checksum: 1f33c5a3da08a87260a7f11acadf088ef331ebb4b86db1160ec332be9326afdf9f73dca1fd5cc431dba7cc9d5574b508192f9fd7c37a9a11c9e4a50025917690
+ languageName: node
+ linkType: hard
+
"bluebird@npm:^3.5.5":
version: 3.7.2
resolution: "bluebird@npm:3.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz"
@@ -3190,10 +3303,10 @@ __metadata:
languageName: node
linkType: hard
-"bootstrap-icons@npm:^1.0.0-alpha5":
- version: 1.0.0-alpha5
- resolution: "bootstrap-icons@npm:1.0.0-alpha5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0-alpha5.tgz"
- checksum: a97c110bc9bc4ad7497eb2d9b6424a684930a35a0eaddd4577589b97c5efcce52d37270feb372394885d9a81934cf4cb9ece10d7d0c23adaa7fd9e3e86cf74e3
+"bootstrap-icons@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "bootstrap-icons@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"
+ checksum: 082d8d2aff07217289b3a78c0d8eb80c45b42f2ee63ffa27a87c83072745177dd12b0b12d1b73d95a5e69d45b54c739b5db6e2eb7e310aa8b54b6b08ec57772c
languageName: node
linkType: hard
@@ -3384,6 +3497,16 @@ __metadata:
languageName: node
linkType: hard
+"buffer@npm:^5.5.0":
+ version: 5.6.0
+ resolution: "buffer@npm:5.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.6.0.tgz"
+ dependencies:
+ base64-js: ^1.0.2
+ ieee754: ^1.1.4
+ checksum: e18fdf099c25cae354d673c7deee0391978bde5a47b785cf81e118c75853f0f36838b0a5ea5ee7adf8c02eedb9664292608efdcac9945f4f4f514d14054656f7
+ languageName: node
+ linkType: hard
+
"builtin-modules@npm:^3.1.0":
version: 3.1.0
resolution: "builtin-modules@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuiltin-modules%2Fdownload%2Fbuiltin-modules-3.1.0.tgz"
@@ -3435,7 +3558,7 @@ __metadata:
languageName: node
linkType: hard
-"cacache@npm:^15.0.4":
+"cacache@npm:^15.0.5":
version: 15.0.5
resolution: "cacache@npm:15.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-15.0.5.tgz"
dependencies:
@@ -3714,7 +3837,7 @@ __metadata:
languageName: node
linkType: hard
-"classnames@npm:^2.2.3, classnames@npm:^2.2.6":
+"classnames@npm:^2.2.6":
version: 2.2.6
resolution: "classnames@npm:2.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.2.6.tgz"
checksum: 490eaeca5931846737ffd33e472a701d268d5b8bc5717dd4cf108a127b06e86e05350e06799abbbe763a0e4c945b4217f6700b7ae00ddc703505682c370e5cf2
@@ -3749,10 +3872,10 @@ __metadata:
languageName: node
linkType: hard
-"clipanion@npm:^2.4.2":
- version: 2.4.2
- resolution: "clipanion@npm:2.4.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.4.2.tgz"
- checksum: 4a8aa1c126f7c3c0c4555dc5dbf30b9ce49b0654bcac5dd7195e8e0d45b12df411e8a534b3354d46267876f16db885935c4ab67e8fa5efbe4262c9713ea72763
+"clipanion@npm:^2.4.4":
+ version: 2.5.0
+ resolution: "clipanion@npm:2.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipanion%2Fdownload%2Fclipanion-2.5.0.tgz"
+ checksum: 700ff428c971413f4c88e40a47047f98e84e7ce53dd00f9a2f44e603038645f673319a1fb17a27b3dda5c4314f79ef6b2bf7cbbcdc5b94827e377c43f72fa4c3
languageName: node
linkType: hard
@@ -4040,24 +4163,24 @@ __metadata:
languageName: node
linkType: hard
-"copy-webpack-plugin@npm:^6.0.3":
- version: 6.0.3
- resolution: "copy-webpack-plugin@npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.0.3.tgz"
+"copy-webpack-plugin@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "copy-webpack-plugin@npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.1.0.tgz"
dependencies:
- cacache: ^15.0.4
+ cacache: ^15.0.5
fast-glob: ^3.2.4
find-cache-dir: ^3.3.1
glob-parent: ^5.1.1
globby: ^11.0.1
loader-utils: ^2.0.0
normalize-path: ^3.0.0
- p-limit: ^3.0.1
- schema-utils: ^2.7.0
+ p-limit: ^3.0.2
+ schema-utils: ^2.7.1
serialize-javascript: ^4.0.0
webpack-sources: ^1.4.3
peerDependencies:
webpack: ^4.37.0 || ^5.0.0
- checksum: 02bb71e9ad0959c883a6bb3ca7351f15d7d4123cec21aa48d7a879a6116fa07bdc1465cc57eb3616482c0844bfa100acf33123c1c49545e1e0eee0996da782c3
+ checksum: bb289324cdda4c8aaa7fd508c34e499cdad96771703e0c5081c78a0f821eeb133500dcc10439e6258f723c32903dd3df46a5cf07585266e6cd0600c57e8db082
languageName: node
linkType: hard
@@ -4155,19 +4278,6 @@ __metadata:
languageName: node
linkType: hard
-"create-react-context@npm:^0.3.0":
- version: 0.3.0
- resolution: "create-react-context@npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-react-context%2Fdownload%2Fcreate-react-context-0.3.0.tgz"
- dependencies:
- gud: ^1.0.0
- warning: ^4.0.3
- peerDependencies:
- prop-types: ^15.0.0
- react: ^0.14.0 || ^15.0.0 || ^16.0.0
- checksum: dfb153bbcfe44fb0b5d74e097f41fef382c9ea513084f604fea1759aea6683da0eef13b02ede2f0672c4eeacdd8efce0023935ca02909fcb2ae8be28b9aa63f5
- languageName: node
- linkType: hard
-
"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.2":
version: 7.0.3
resolution: "cross-spawn@npm:7.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz"
@@ -4248,15 +4358,14 @@ __metadata:
languageName: node
linkType: hard
-"css-loader@npm:^4.2.1":
- version: 4.2.1
- resolution: "css-loader@npm:4.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.1.tgz"
+"css-loader@npm:^4.2.2":
+ version: 4.2.2
+ resolution: "css-loader@npm:4.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-4.2.2.tgz"
dependencies:
camelcase: ^6.0.0
cssesc: ^3.0.0
icss-utils: ^4.1.1
loader-utils: ^2.0.0
- normalize-path: ^3.0.0
postcss: ^7.0.32
postcss-modules-extract-imports: ^2.0.0
postcss-modules-local-by-default: ^3.0.3
@@ -4267,7 +4376,7 @@ __metadata:
semver: ^7.3.2
peerDependencies:
webpack: ^4.27.0 || ^5.0.0
- checksum: bd8188efac141352371d3c87e90b6c5658018fa2e9438a22ad38e7a3896e492edb535ae7fe7e56e4c14e43ccc88fbb3a235a0929d4f9302bbf12215687edc9fa
+ checksum: 73d83e7f4f0b6288802e654a108e2f7a0476d0504c41ac3718a92354cefa9c3fe25e462cdf262a3943efef73dc2ea12c1962f97bbda44807f6f81b4661717dcb
languageName: node
linkType: hard
@@ -4427,7 +4536,7 @@ __metadata:
languageName: node
linkType: hard
-"deep-equal@npm:^1.0.1, deep-equal@npm:^1.1.1":
+"deep-equal@npm:^1.0.1":
version: 1.1.1
resolution: "deep-equal@npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz"
dependencies:
@@ -4666,12 +4775,13 @@ __metadata:
languageName: node
linkType: hard
-"dom-helpers@npm:^3.4.0":
- version: 3.4.0
- resolution: "dom-helpers@npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-3.4.0.tgz"
+"dom-helpers@npm:^5.0.1, dom-helpers@npm:^5.1.0, dom-helpers@npm:^5.1.2":
+ version: 5.2.0
+ resolution: "dom-helpers@npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-5.2.0.tgz"
dependencies:
- "@babel/runtime": ^7.1.2
- checksum: 7625598dbfef65a50801e194b88f277ab398dd92c27398280fd8d69294326f05d9b0588922560ba50e10d9fe5ee8096f90995d679b7db2b776afd579d495b962
+ "@babel/runtime": ^7.8.7
+ csstype: ^3.0.2
+ checksum: 9ef27628f4ccfdfa0537b35ecf3b9600f1656f9c66f57a1530b552a65b51f4466d44514f2cb87399a15feee3c51047a77760327971e9aabc64fe637efd319156
languageName: node
linkType: hard
@@ -4852,7 +4962,7 @@ __metadata:
languageName: node
linkType: hard
-"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0":
+"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1":
version: 1.4.4
resolution: "end-of-stream@npm:1.4.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz"
dependencies:
@@ -5456,7 +5566,7 @@ __metadata:
languageName: node
linkType: hard
-"fast-glob@npm:^3.0.3, fast-glob@npm:^3.1.1, fast-glob@npm:^3.2.2, fast-glob@npm:^3.2.4":
+"fast-glob@npm:^3.1.1, fast-glob@npm:^3.2.2, fast-glob@npm:^3.2.4":
version: 3.2.4
resolution: "fast-glob@npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz"
dependencies:
@@ -5527,15 +5637,15 @@ __metadata:
languageName: node
linkType: hard
-"file-loader@npm:^6.0.0":
- version: 6.0.0
- resolution: "file-loader@npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.0.0.tgz"
+"file-loader@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "file-loader@npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.1.0.tgz"
dependencies:
loader-utils: ^2.0.0
- schema-utils: ^2.6.5
+ schema-utils: ^2.7.1
peerDependencies:
webpack: ^4.0.0 || ^5.0.0
- checksum: 745f5ee763fe46f2124921ff4fb7ed601eb1e8d6ac975cf6af321b3957ce8f78afb885c636e64a9031634e85e26dc9e8ef40ebeb532153c6a80a7d06b56876cb
+ checksum: ad930c9e7fa8c85cc048afa44c370c86f6a9ba89149b2b24e362f0b279595a05d039211263bf65117e4850f337f9bff251288ddff426dda997468a00e1268ffc
languageName: node
linkType: hard
@@ -5760,6 +5870,13 @@ __metadata:
languageName: node
linkType: hard
+"fs-constants@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "fs-constants@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-constants%2Fdownload%2Ffs-constants-1.0.0.tgz"
+ checksum: b8382395f555012591b20bddf08d258723f660b4e7312943d10431a893e2af879295fefc15a917df43c9ed52d80d2f014c0ca8ca359367969be5c8a133e39742
+ languageName: node
+ linkType: hard
+
"fs-extra@npm:^8.1.0":
version: 8.1.0
resolution: "fs-extra@npm:8.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz"
@@ -5771,15 +5888,6 @@ __metadata:
languageName: node
linkType: hard
-"fs-minipass@npm:^1.2.5":
- version: 1.2.7
- resolution: "fs-minipass@npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-1.2.7.tgz"
- dependencies:
- minipass: ^2.6.0
- checksum: eb59a93065f25457e5d1d10a064e22565e704b03140d5ef86a71a57155b13aa645811126fed2a5a282df8dc9c40df9c9d696f6b2d93c181071a971221d0a454b
- languageName: node
- linkType: hard
-
"fs-minipass@npm:^2.0.0":
version: 2.1.0
resolution: "fs-minipass@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-2.1.0.tgz"
@@ -6048,22 +6156,6 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"globby@npm:^10.0.1":
- version: 10.0.2
- resolution: "globby@npm:10.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.2.tgz"
- dependencies:
- "@types/glob": ^7.1.1
- array-union: ^2.1.0
- dir-glob: ^3.0.1
- fast-glob: ^3.0.3
- glob: ^7.1.3
- ignore: ^5.1.1
- merge2: ^1.2.3
- slash: ^3.0.0
- checksum: 53924c2b46f104d99a6b15da92b9f9f1e9f004bce745fdf56cf985afd615897bd6fd8fe01303f5758943e643c0885e8abaae0b5a596c13523c9431bf071c3f23
- languageName: node
- linkType: hard
-
"globby@npm:^11.0.1":
version: 11.0.1
resolution: "globby@npm:11.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.1.tgz"
@@ -6124,13 +6216,6 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"gud@npm:^1.0.0":
- version: 1.0.0
- resolution: "gud@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgud%2Fdownload%2Fgud-1.0.0.tgz"
- checksum: 08be6bf30eb713b0e115a4676418b3805b739703956fd861710f59ce355c047102954e4d79172b180912d06794e8d94f702e9367ac6843c2fae40c8c726a4907
- languageName: node
- linkType: hard
-
"handle-thing@npm:^2.0.0":
version: 2.0.1
resolution: "handle-thing@npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandle-thing%2Fdownload%2Fhandle-thing-2.0.1.tgz"
@@ -6372,9 +6457,9 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"html-webpack-plugin@npm:^4.3.0":
- version: 4.3.0
- resolution: "html-webpack-plugin@npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.3.0.tgz"
+"html-webpack-plugin@npm:^4.4.1":
+ version: 4.4.1
+ resolution: "html-webpack-plugin@npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.4.1.tgz"
dependencies:
"@types/html-minifier-terser": ^5.0.0
"@types/tapable": ^1.0.5
@@ -6387,7 +6472,7 @@ fsevents@~2.1.2:
util.promisify: 1.0.0
peerDependencies:
webpack: ">=4.0.0 < 6.0.0"
- checksum: 13c23547ac83142f2e23a993a82e6fa6beb21291848a856c09d27e0dae12f5781699ed9c1fe798fb03cf317a6a4dce164d224fd6023640abc167f222b59a0fa0
+ checksum: 5bf56a8c24ddea93468f028de2b9aacbb5686fdf226e911616aec6bb7fe26aa6e3ed63096faabc10eb0bbef659e422be47056d2eb7d186e5f603261ea5db0eb5
languageName: node
linkType: hard
@@ -6593,7 +6678,7 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"ignore@npm:^5.1.1, ignore@npm:^5.1.4":
+"ignore@npm:^5.1.4":
version: 5.1.8
resolution: "ignore@npm:5.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz"
checksum: b08e3d5b5d94eca13475f29a5d47d221060e9cdd7e38d7647088e29d90130669a970fecbc4cdb41b8fa295c6673740c729d3dc05dadc381f593efb42282cbf9f
@@ -7379,10 +7464,10 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"klona@npm:^1.1.2":
- version: 1.1.2
- resolution: "klona@npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-1.1.2.tgz"
- checksum: 357ff7d43ca2dbaacda91c37bea559642a128e583a2836c09c252881dd71d054d97e7185e91a899ebd65e2b76f7d4e25ca3d06fd0a0b51a5304586d00157a06d
+"klona@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "klona@npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-2.0.3.tgz"
+ checksum: 69df085420a280e8d2e8c6564e23ba2bee2a03e8ca5f51e9409276bb54c6178a74adee0f94c2fc62caa584e1d2109e679abd8cc4f1114fbcd9e2886b909e8e62
languageName: node
linkType: hard
@@ -7500,6 +7585,13 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
+"lodash-es@npm:^4.17.15":
+ version: 4.17.15
+ resolution: "lodash-es@npm:4.17.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash-es%2Fdownload%2Flodash-es-4.17.15.tgz"
+ checksum: ee2871b76deefd1754527e659a8c8b688f2e427e67b30709296878e18ad9cb54b4f0fc16a7161298156b4e0ebc2a37dfe501a3ea8725f195763f9de8a7ba6da6
+ languageName: node
+ linkType: hard
+
"lodash._reinterpolate@npm:^3.0.0":
version: 3.0.0
resolution: "lodash._reinterpolate@npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash._reinterpolate%2Fdownload%2Flodash._reinterpolate-3.0.0.tgz"
@@ -7713,7 +7805,7 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"merge2@npm:^1.2.3, merge2@npm:^1.3.0":
+"merge2@npm:^1.3.0":
version: 1.4.1
resolution: "merge2@npm:1.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge2%2Fdownload%2Fmerge2-1.4.1.tgz"
checksum: 7ad40d8b140a5ed4e621b916858410e4f0dd4ced1e5a2b675563347e70f0661d95ba6c3c8007dd3c4e242d0b8eee44559fa75bb90a146cf168debffc0cbc18f3
@@ -7840,9 +7932,9 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"mini-css-extract-plugin@npm:^0.10.0":
- version: 0.10.0
- resolution: "mini-css-extract-plugin@npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.10.0.tgz"
+"mini-css-extract-plugin@npm:^0.11.0":
+ version: 0.11.0
+ resolution: "mini-css-extract-plugin@npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.11.0.tgz"
dependencies:
loader-utils: ^1.1.0
normalize-url: 1.9.1
@@ -7850,7 +7942,7 @@ fsevents@~2.1.2:
webpack-sources: ^1.1.0
peerDependencies:
webpack: ^4.4.0 || ^5.0.0
- checksum: 2e133cdd20e9de9acbaffc1820be4124432fe6b44078ab08f1eab4b632656ca9e226afb14e4703db8b873435aadecb4b5fa750e1dd439ed370f22897df247aad
+ checksum: 79a4a065274194461389237200ba66e255f6c7d0b8b928dd46f35a7fa13e2013aa0a761528aff4608a0e61f545192b57f56196e47891504a558c169588d6272c
languageName: node
linkType: hard
@@ -7911,16 +8003,6 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"minipass@npm:^2.6.0, minipass@npm:^2.8.6, minipass@npm:^2.9.0":
- version: 2.9.0
- resolution: "minipass@npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz"
- dependencies:
- safe-buffer: ^5.1.2
- yallist: ^3.0.0
- checksum: 57a49f9523fdc495625184f4ef5a101615d3ee0c06f0c37e2ed7140c12deeecbd404539bd605b985100836006409b11b627a3148941dcc4ade24f0f078557836
- languageName: node
- linkType: hard
-
"minipass@npm:^3.0.0, minipass@npm:^3.1.1":
version: 3.1.3
resolution: "minipass@npm:3.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-3.1.3.tgz"
@@ -7930,15 +8012,6 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"minizlib@npm:^1.2.1":
- version: 1.3.3
- resolution: "minizlib@npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-1.3.3.tgz"
- dependencies:
- minipass: ^2.9.0
- checksum: 8d12782dd943ea92bb3e8e5dc4fe21201b56e77e5f12723c29159cf01dd0d50330dd071897dec270b3861994fb07a982b2473e5c2f42bf5f4b180ab18bf81c06
- languageName: node
- linkType: hard
-
"minizlib@npm:^2.1.0":
version: 2.1.0
resolution: "minizlib@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-2.1.0.tgz"
@@ -7977,7 +8050,7 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"mkdirp@npm:^0.5.0, mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3":
+"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3":
version: 0.5.5
resolution: "mkdirp@npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"
dependencies:
@@ -8578,7 +8651,7 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"p-limit@npm:^3.0.1":
+"p-limit@npm:^3.0.2":
version: 3.0.2
resolution: "p-limit@npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.0.2.tgz"
dependencies:
@@ -8956,13 +9029,6 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"popper.js@npm:^1.14.1, popper.js@npm:^1.14.4":
- version: 1.16.1
- resolution: "popper.js@npm:1.16.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpopper.js%2Fdownload%2Fpopper.js-1.16.1.tgz"
- checksum: eb53806fb7680e31c7d1db096f95438a40a7cb869f7ee0e27100c0860f11583a0d322606c6073618e7fe8865f834ec36482901b547256d9a0cf2b22434bca75d
- languageName: node
- linkType: hard
-
"portfinder@npm:^1.0.25, portfinder@npm:^1.0.26":
version: 1.0.27
resolution: "portfinder@npm:1.0.27::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.27.tgz"
@@ -9445,12 +9511,12 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"prettier@npm:^2.1.0":
- version: 2.1.0
- resolution: "prettier@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.0.tgz"
+"prettier@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "prettier@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.1.tgz"
bin:
prettier: bin-prettier.js
- checksum: f955d380d2892284c28bbfe32b1601cfcd7a24d8b310832937773b9e733f624e38ff70cbafee80e9553bdb3c55783d019163667bf9a69df4e6f7c2acdcf54c06
+ checksum: 420a807cda2d482388daa42379a7aaa1be629cb71f5792362a971a5ed1c6ff377d2e311818d24e9390a4a8a6eac3fda9ebe6975f2168efec893790c0497d8a93
languageName: node
linkType: hard
@@ -9527,7 +9593,19 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"prop-types@npm:^15.5.8, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2":
+"prop-types-extra@npm:^1.1.0":
+ version: 1.1.1
+ resolution: "prop-types-extra@npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types-extra%2Fdownload%2Fprop-types-extra-1.1.1.tgz"
+ dependencies:
+ react-is: ^16.3.2
+ warning: ^4.0.0
+ peerDependencies:
+ react: ">=0.14.0"
+ checksum: f1f1cc23b95423615da6ab3ad5726a228011c64612fc77cb773a507437d34543d16758d5ec54fa987611c85e7de6fc4f44e8d3fcec9e343fa5578bca8a09378a
+ languageName: node
+ linkType: hard
+
+"prop-types@npm:^15.5.10, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2":
version: 15.7.2
resolution: "prop-types@npm:15.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz"
dependencies:
@@ -9725,6 +9803,35 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
+"react-bootstrap@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "react-bootstrap@npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-bootstrap%2Fdownload%2Freact-bootstrap-1.3.0.tgz"
+ dependencies:
+ "@babel/runtime": ^7.4.2
+ "@restart/context": ^2.1.4
+ "@restart/hooks": ^0.3.21
+ "@types/classnames": ^2.2.10
+ "@types/invariant": ^2.2.33
+ "@types/prop-types": ^15.7.3
+ "@types/react": ^16.9.35
+ "@types/react-transition-group": ^4.4.0
+ "@types/warning": ^3.0.0
+ classnames: ^2.2.6
+ dom-helpers: ^5.1.2
+ invariant: ^2.2.4
+ prop-types: ^15.7.2
+ prop-types-extra: ^1.1.0
+ react-overlays: ^4.1.0
+ react-transition-group: ^4.4.1
+ uncontrollable: ^7.0.0
+ warning: ^4.0.3
+ peerDependencies:
+ react: ">=16.8.0"
+ react-dom: ">=16.8.0"
+ checksum: f9dc21c00db84134bf1c80f247ec88c27cfecae2f6a787d210b5cbf8684fdc71f2efaf3255b74df0e9755006880d446539de93b0a0acffc601c1a160a96850b9
+ languageName: node
+ linkType: hard
+
"react-dom@npm:^16.13.1":
version: 16.13.1
resolution: "react-dom@npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dom%2Fdownload%2Freact-dom-16.13.1.tgz"
@@ -9771,16 +9878,16 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"react-i18next@npm:^11.7.1":
- version: 11.7.1
- resolution: "react-i18next@npm:11.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.1.tgz"
+"react-i18next@npm:^11.7.2":
+ version: 11.7.2
+ resolution: "react-i18next@npm:11.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-i18next%2Fdownload%2Freact-i18next-11.7.2.tgz"
dependencies:
"@babel/runtime": ^7.3.1
html-parse-stringify2: 2.0.1
peerDependencies:
i18next: ">= 19.0.0"
react: ">= 16.8.0"
- checksum: fc62ae35c36cc332a6f2cc3bf52a4d41ec7cdfe77614b998f37707a28c72a2d3410754460543475da50c3d0ee17fa0b4f8395fa72dc3af3c0274aabc808e5f9c
+ checksum: ea5c989d1b129d74b2d4b4d90cd33709f883cf89df90bcfbb78e3c97ac0c052cbf3369554e9e5beb405f1dbab5d7f7b77aa29fc0e13716d78d456f4f8408771c
languageName: node
linkType: hard
@@ -9796,7 +9903,7 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"react-is@npm:^16.6.0, react-is@npm:^16.7.0, react-is@npm:^16.8.1":
+"react-is@npm:^16.3.2, react-is@npm:^16.6.0, react-is@npm:^16.7.0, react-is@npm:^16.8.1":
version: 16.13.1
resolution: "react-is@npm:16.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz"
checksum: 11bcf1267a314a522615f626f3ce3727a3a24cdbf61c4d452add3550a7875326669631326cfb1ba3e92b6f72244c32ffecf93ad21c0cad8455d3e169d0e3f060
@@ -9810,20 +9917,22 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"react-popper@npm:^1.3.6":
- version: 1.3.7
- resolution: "react-popper@npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-popper%2Fdownload%2Freact-popper-1.3.7.tgz"
+"react-overlays@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "react-overlays@npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-overlays%2Fdownload%2Freact-overlays-4.1.0.tgz"
dependencies:
- "@babel/runtime": ^7.1.2
- create-react-context: ^0.3.0
- deep-equal: ^1.1.1
- popper.js: ^1.14.4
- prop-types: ^15.6.1
- typed-styles: ^0.0.7
- warning: ^4.0.2
+ "@babel/runtime": ^7.4.5
+ "@popperjs/core": ^2.0.0
+ "@restart/hooks": ^0.3.12
+ "@types/warning": ^3.0.0
+ dom-helpers: ^5.1.0
+ prop-types: ^15.7.2
+ uncontrollable: ^7.0.0
+ warning: ^4.0.3
peerDependencies:
- react: 0.14.x || ^15.0.0 || ^16.0.0
- checksum: 09ef58054bd9d449283939af861cbb205aee771289884fa62e30a6927163fab53e865593c0e014364d807a8e219d9642be6d34ae58b1e4f2f0530ffc9b289e5a
+ react: ">=16.3.0"
+ react-dom: ">=16.3.0"
+ checksum: 64d46694be7969885c8aa60b671b2a5e9e2fa30431efdd554f12793bc730d045a084a3e245f65e61cb5bcf94884e16f850fa3e870438b463f914556455ac1261
languageName: node
linkType: hard
@@ -9841,6 +9950,18 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
+"react-router-bootstrap@npm:^0.25.0":
+ version: 0.25.0
+ resolution: "react-router-bootstrap@npm:0.25.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-bootstrap%2Fdownload%2Freact-router-bootstrap-0.25.0.tgz"
+ dependencies:
+ prop-types: ^15.5.10
+ peerDependencies:
+ react: ">=0.14.0"
+ react-router-dom: ">=4.0.0"
+ checksum: c9a66a8cc92ff2eaffe76e95577c8db5dda68e8a6c7386832e8c8e34da4e3956ea928960391ef3dd9e99f537f1faa08b6689a43dee03bd331eeb8731180803f6
+ languageName: node
+ linkType: hard
+
"react-router-dom@npm:^5.2.0":
version: 5.2.0
resolution: "react-router-dom@npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-router-dom%2Fdownload%2Freact-router-dom-5.2.0.tgz"
@@ -9878,18 +9999,18 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"react-transition-group@npm:^2.3.1":
- version: 2.9.0
- resolution: "react-transition-group@npm:2.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-2.9.0.tgz"
+"react-transition-group@npm:^4.4.1":
+ version: 4.4.1
+ resolution: "react-transition-group@npm:4.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-transition-group%2Fdownload%2Freact-transition-group-4.4.1.tgz"
dependencies:
- dom-helpers: ^3.4.0
+ "@babel/runtime": ^7.5.5
+ dom-helpers: ^5.0.1
loose-envify: ^1.4.0
prop-types: ^15.6.2
- react-lifecycles-compat: ^3.0.4
peerDependencies:
- react: ">=15.0.0"
- react-dom: ">=15.0.0"
- checksum: eefed08c48a0d377b5fac3ac7fac54ed986d5dcdd4494f36075954c9d2d257072a9d18cc02c6d8e6698034722b1ff9419ad0c24ef068dea742edcff9f8ea4ba9
+ react: ">=16.6.0"
+ react-dom: ">=16.6.0"
+ checksum: e14446123f820e804335c64be5270333c29e8cfaa43dfc33387e132c5d521cf4a0a7c2408058a147b254ae82a6569f373394d83e977ef340d6937bc2f4ff7d6c
languageName: node
linkType: hard
@@ -9904,22 +10025,6 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"reactstrap@npm:^8.5.1":
- version: 8.5.1
- resolution: "reactstrap@npm:8.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freactstrap%2Fdownload%2Freactstrap-8.5.1.tgz"
- dependencies:
- "@babel/runtime": ^7.2.0
- classnames: ^2.2.3
- prop-types: ^15.5.8
- react-popper: ^1.3.6
- react-transition-group: ^2.3.1
- peerDependencies:
- react: ^16.3.0
- react-dom: ^16.3.0
- checksum: afa5cba1a9ebff336ec4b7e8970bbffef2070cf7925e761a43cd499d441877866f181d46197545b9a55483809811f999efe1dd4628c3cd304754607833ba802e
- languageName: node
- linkType: hard
-
"read-pkg-up@npm:^2.0.0":
version: 2.0.0
resolution: "read-pkg-up@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-2.0.0.tgz"
@@ -9956,7 +10061,7 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.6.0":
+"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0":
version: 3.6.0
resolution: "readable-stream@npm:3.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz"
dependencies:
@@ -10432,11 +10537,11 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"sass-loader@npm:^9.0.3":
- version: 9.0.3
- resolution: "sass-loader@npm:9.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-9.0.3.tgz"
+"sass-loader@npm:^10.0.1":
+ version: 10.0.1
+ resolution: "sass-loader@npm:10.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-10.0.1.tgz"
dependencies:
- klona: ^1.1.2
+ klona: ^2.0.3
loader-utils: ^2.0.0
neo-async: ^2.6.2
schema-utils: ^2.7.0
@@ -10453,7 +10558,7 @@ fsevents@~2.1.2:
optional: true
sass:
optional: true
- checksum: 5ce94bb6708507c3ca6af5cada1c3442d06242aa16df38fcea059aafad0c49ad0ae980fece7c3844cc82cc2e373d7b3192c55046bf506337811b759ccdb23a4f
+ checksum: cc517f3daeb1d74c602e935f427d08b4f0b2e1592cbbdd02ee55327506f18baf4069e8ae00db35507958c06ce789efd9810f86063c50b8e1f135ba8cd3770bdc
languageName: node
linkType: hard
@@ -10500,6 +10605,17 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
+"schema-utils@npm:^2.7.1":
+ version: 2.7.1
+ resolution: "schema-utils@npm:2.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz"
+ dependencies:
+ "@types/json-schema": ^7.0.5
+ ajv: ^6.12.4
+ ajv-keywords: ^3.5.2
+ checksum: 3851bcc7e44a3f35d3ca96e460c598aa24cec9fe395b196395316a043dc111d25735a9a49b1a115e4b52d5ed0d8bbcfb9fe1bfd077610f192b613e020d3f3ef2
+ languageName: node
+ linkType: hard
+
"secure-compare@npm:3.0.1":
version: 3.0.1
resolution: "secure-compare@npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsecure-compare%2Fdownload%2Fsecure-compare-3.0.1.tgz"
@@ -11322,18 +11438,16 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"tar@npm:^4.4.6":
- version: 4.4.13
- resolution: "tar@npm:4.4.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz"
+"tar-stream@npm:^2.0.1":
+ version: 2.1.3
+ resolution: "tar-stream@npm:2.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar-stream%2Fdownload%2Ftar-stream-2.1.3.tgz"
dependencies:
- chownr: ^1.1.1
- fs-minipass: ^1.2.5
- minipass: ^2.8.6
- minizlib: ^1.2.1
- mkdirp: ^0.5.0
- safe-buffer: ^5.1.2
- yallist: ^3.0.3
- checksum: d325c316ac329ecb18f2b8cd3f85a80ab4a4105ada601b9253aaafae3fc14268e3cd874ccc265b6a08e60ebd17fbc31bd3dbc0d1018f874b536eb2a6e8ef6d9c
+ bl: ^4.0.1
+ end-of-stream: ^1.4.1
+ fs-constants: ^1.0.0
+ inherits: ^2.0.3
+ readable-stream: ^3.1.1
+ checksum: 57d2284615ee76ae5e41bcb8a1cb61c00b9ba514a1b8b86168d53967ea0f45581a3f00c8bdf7653fbd208490edea69ff39caaa845d7e04420cdddd56bea17e92
languageName: node
linkType: hard
@@ -11441,31 +11555,31 @@ fsevents@~2.1.2:
"@hot-loader/react-dom": ^16.13.0
"@types/classnames": ^2.2.10
"@types/crypto-js": ^3.1.47
- "@types/lodash": ^4.14.159
- "@types/node": ^14.6.0
- "@types/react": ^16.9.46
+ "@types/lodash": ^4.14.161
+ "@types/node": ^14.6.2
+ "@types/react": ^16.9.49
"@types/react-dom": ^16.9.8
"@types/react-responsive": ^8.0.2
"@types/react-router": ^5.1.8
+ "@types/react-router-bootstrap": ^0.24.5
"@types/react-router-dom": ^5.1.5
- "@types/reactstrap": ^8.5.1
"@types/webpack-env": ^1.15.2
"@types/xregexp": ^4.3.0
- "@typescript-eslint/eslint-plugin": ^3.9.1
- "@typescript-eslint/parser": ^3.9.1
- "@yarnpkg/pnpify": ^2.1.0
+ "@typescript-eslint/eslint-plugin": ^3.10.1
+ "@typescript-eslint/parser": ^3.10.1
+ "@yarnpkg/pnpify": ^2.2.1
axios: ^0.20.0
babel-loader: ^8.1.0
babel-plugin-transform-builtin-extend: ^1.1.2
bootstrap: ^4.5.2
- bootstrap-icons: ^1.0.0-alpha5
+ bootstrap-icons: ^1.0.0
classnames: ^2.2.6
clean-webpack-plugin: ^3.0.0
clsx: ^1.1.1
- copy-webpack-plugin: ^6.0.3
+ copy-webpack-plugin: ^6.1.0
core-js: ^3.6.5
crypto-js: ^4.0.0
- css-loader: ^4.2.1
+ css-loader: ^4.2.2
eslint: ^7.7.0
eslint-config-prettier: ^6.11.0
eslint-import-resolver-webpack: ^0.12.2
@@ -11473,32 +11587,33 @@ fsevents@~2.1.2:
eslint-plugin-prettier: ^3.1.4
eslint-plugin-react: ^7.20.6
eslint-plugin-react-hooks: ^4.1.0
- file-loader: ^6.0.0
- html-webpack-plugin: ^4.3.0
+ file-loader: ^6.1.0
+ html-webpack-plugin: ^4.4.1
http-server: ^0.12.3
i18next: ^19.7.0
i18next-browser-languagedetector: ^6.0.1
localforage: ^1.9.0
lodash: ^4.17.20
- mini-css-extract-plugin: ^0.10.0
+ mini-css-extract-plugin: ^0.11.0
pepjs: ^0.5.2
pnp-webpack-plugin: ^1.6.4
postcss-loader: ^3.0.0
postcss-preset-env: ^6.7.0
- prettier: ^2.1.0
+ prettier: ^2.1.1
react: ^16.13.1
+ react-bootstrap: ^1.3.0
react-dom: ^16.13.1
react-hot-loader: ^4.12.21
- react-i18next: ^11.7.1
+ react-i18next: ^11.7.2
react-inlinesvg: ^2.0.0
react-responsive: ^8.1.0
react-router: ^5.2.0
+ react-router-bootstrap: ^0.25.0
react-router-dom: ^5.2.0
- reactstrap: ^8.5.1
regenerator-runtime: ^0.13.7
rxjs: ^6.6.2
sass: ^1.26.10
- sass-loader: ^9.0.3
+ sass-loader: ^10.0.1
style-loader: ^1.2.1
ts-loader: ^8.0.3
typescript: ^4.0.2
@@ -11737,13 +11852,6 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"typed-styles@npm:^0.0.7":
- version: 0.0.7
- resolution: "typed-styles@npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftyped-styles%2Fdownload%2Ftyped-styles-0.0.7.tgz"
- checksum: 4988d78dafc45bc0ad73393f767c7958aabe121a9310d5c864ad6e064fd8bc049ac9a16ca2b411640e94cc95f8af3a67c78771f5eab5c211fcb60ecb71fdd2b9
- languageName: node
- linkType: hard
-
"typedarray@npm:^0.0.6":
version: 0.0.6
resolution: "typedarray@npm:0.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypedarray%2Fdownload%2Ftypedarray-0.0.6.tgz"
@@ -11771,6 +11879,20 @@ typescript@^4.0.2:
languageName: node
linkType: hard
+"uncontrollable@npm:^7.0.0":
+ version: 7.1.1
+ resolution: "uncontrollable@npm:7.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funcontrollable%2Fdownload%2Funcontrollable-7.1.1.tgz"
+ dependencies:
+ "@babel/runtime": ^7.6.3
+ "@types/react": ^16.9.11
+ invariant: ^2.2.4
+ react-lifecycles-compat: ^3.0.4
+ peerDependencies:
+ react: ">=15.0.0"
+ checksum: 208d397c41bb8293e884dc615dfeb1163c14d470e4a677e9afb695ce8cc339bbe8cafb1e8e6c8d20d3b826621bacf07906ce65fee9667b8e5f1f08f42bf9e3d7
+ languageName: node
+ linkType: hard
+
"underscore@npm:^1.7.0":
version: 1.10.2
resolution: "underscore@npm:1.10.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funderscore%2Fdownload%2Funderscore-1.10.2.tgz"
@@ -12076,7 +12198,7 @@ typescript@^4.0.2:
languageName: node
linkType: hard
-"warning@npm:^4.0.2, warning@npm:^4.0.3":
+"warning@npm:^4.0.0, warning@npm:^4.0.3":
version: 4.0.3
resolution: "warning@npm:4.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz"
dependencies:
@@ -12594,7 +12716,7 @@ typescript@^4.0.2:
languageName: node
linkType: hard
-"yallist@npm:^3.0.0, yallist@npm:^3.0.2, yallist@npm:^3.0.3":
+"yallist@npm:^3.0.2":
version: 3.1.1
resolution: "yallist@npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz"
checksum: f352c93b92f601bb0399210bca37272e669c961e9bd886bac545380598765cbfdfb4f166e7b6c57ca4ec8a5af4ab3fa0fd78a47f9a7d655a3d580ff0fc9e7d79