From 05ccb4d8f1bbe3fb64e117136b4a89bcfb0b0b33 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 27 Oct 2020 19:21:35 +0800 Subject: Split front and back end. --- FrontEnd/src/app/App.tsx | 84 +++ FrontEnd/src/app/common.ts | 44 ++ FrontEnd/src/app/http/common.ts | 161 +++++ FrontEnd/src/app/http/timeline.ts | 544 ++++++++++++++++ FrontEnd/src/app/http/token.ts | 72 +++ FrontEnd/src/app/http/user.ts | 134 ++++ FrontEnd/src/app/i18n.ts | 79 +++ FrontEnd/src/app/index.ejs | 29 + FrontEnd/src/app/index.sass | 66 ++ FrontEnd/src/app/index.tsx | 15 + FrontEnd/src/app/locales/en/translation.ts | 202 ++++++ FrontEnd/src/app/locales/scheme.ts | 182 ++++++ FrontEnd/src/app/locales/zh/translation.ts | 195 ++++++ FrontEnd/src/app/service-worker.tsx | 113 ++++ FrontEnd/src/app/services/DataHub.ts | 225 +++++++ FrontEnd/src/app/services/alert.ts | 61 ++ FrontEnd/src/app/services/common.ts | 23 + FrontEnd/src/app/services/timeline.ts | 702 +++++++++++++++++++++ FrontEnd/src/app/services/user.ts | 393 ++++++++++++ FrontEnd/src/app/tsconfig.json | 13 + FrontEnd/src/app/typings.d.ts | 24 + FrontEnd/src/app/utilities/rxjs.ts | 14 + FrontEnd/src/app/utilities/url.ts | 52 ++ FrontEnd/src/app/views/about/about.sass | 4 + FrontEnd/src/app/views/about/author-avatar.png | Bin 0 -> 12038 bytes FrontEnd/src/app/views/about/github.png | Bin 0 -> 4268 bytes FrontEnd/src/app/views/about/index.tsx | 164 +++++ FrontEnd/src/app/views/admin/Admin.tsx | 75 +++ FrontEnd/src/app/views/admin/UserAdmin.tsx | 460 ++++++++++++++ FrontEnd/src/app/views/common/AppBar.tsx | 64 ++ FrontEnd/src/app/views/common/BlobImage.tsx | 27 + FrontEnd/src/app/views/common/ImageCropper.tsx | 306 +++++++++ FrontEnd/src/app/views/common/LoadingButton.tsx | 29 + FrontEnd/src/app/views/common/LoadingPage.tsx | 12 + FrontEnd/src/app/views/common/OperationDialog.tsx | 364 +++++++++++ FrontEnd/src/app/views/common/SearchInput.tsx | 63 ++ FrontEnd/src/app/views/common/TimelineLogo.tsx | 26 + FrontEnd/src/app/views/common/UserTimelineLogo.tsx | 26 + FrontEnd/src/app/views/common/alert/AlertHost.tsx | 101 +++ FrontEnd/src/app/views/common/alert/alert.sass | 15 + FrontEnd/src/app/views/common/common.sass | 33 + FrontEnd/src/app/views/home/BoardWithUser.tsx | 101 +++ FrontEnd/src/app/views/home/BoardWithoutUser.tsx | 60 ++ FrontEnd/src/app/views/home/OfflineBoard.tsx | 61 ++ FrontEnd/src/app/views/home/TimelineBoard.tsx | 73 +++ .../src/app/views/home/TimelineCreateDialog.tsx | 53 ++ FrontEnd/src/app/views/home/home.sass | 13 + FrontEnd/src/app/views/home/index.tsx | 99 +++ FrontEnd/src/app/views/login/index.tsx | 151 +++++ FrontEnd/src/app/views/login/login.sass | 2 + FrontEnd/src/app/views/settings/index.tsx | 209 ++++++ .../app/views/timeline-common/CollapseButton.tsx | 23 + .../app/views/timeline-common/InfoCardTemplate.tsx | 26 + .../app/views/timeline-common/SyncStatusBadge.tsx | 58 ++ .../src/app/views/timeline-common/Timeline.tsx | 84 +++ .../src/app/views/timeline-common/TimelineItem.tsx | 172 +++++ .../app/views/timeline-common/TimelineMember.tsx | 211 +++++++ .../views/timeline-common/TimelinePageTemplate.tsx | 185 ++++++ .../timeline-common/TimelinePageTemplateUI.tsx | 243 +++++++ .../app/views/timeline-common/TimelinePostEdit.tsx | 241 +++++++ .../TimelinePropertyChangeDialog.tsx | 72 +++ .../src/app/views/timeline-common/TimelineTop.tsx | 21 + .../app/views/timeline-common/timeline-common.sass | 146 +++++ .../app/views/timeline/TimelineDeleteDialog.tsx | 55 ++ .../src/app/views/timeline/TimelineInfoCard.tsx | 85 +++ FrontEnd/src/app/views/timeline/TimelinePageUI.tsx | 20 + FrontEnd/src/app/views/timeline/index.tsx | 37 ++ FrontEnd/src/app/views/timeline/timeline.sass | 0 FrontEnd/src/app/views/user/ChangeAvatarDialog.tsx | 302 +++++++++ .../src/app/views/user/ChangeNicknameDialog.tsx | 28 + FrontEnd/src/app/views/user/UserInfoCard.tsx | 80 +++ FrontEnd/src/app/views/user/UserPageUI.tsx | 18 + FrontEnd/src/app/views/user/index.tsx | 72 +++ FrontEnd/src/app/views/user/user.sass | 7 + FrontEnd/src/sw/sw.ts | 28 + FrontEnd/src/sw/tsconfig.json | 12 + FrontEnd/src/tsconfig.json | 23 + 77 files changed, 8267 insertions(+) create mode 100644 FrontEnd/src/app/App.tsx create mode 100644 FrontEnd/src/app/common.ts create mode 100644 FrontEnd/src/app/http/common.ts create mode 100644 FrontEnd/src/app/http/timeline.ts create mode 100644 FrontEnd/src/app/http/token.ts create mode 100644 FrontEnd/src/app/http/user.ts create mode 100644 FrontEnd/src/app/i18n.ts create mode 100644 FrontEnd/src/app/index.ejs create mode 100644 FrontEnd/src/app/index.sass create mode 100644 FrontEnd/src/app/index.tsx create mode 100644 FrontEnd/src/app/locales/en/translation.ts create mode 100644 FrontEnd/src/app/locales/scheme.ts create mode 100644 FrontEnd/src/app/locales/zh/translation.ts create mode 100644 FrontEnd/src/app/service-worker.tsx create mode 100644 FrontEnd/src/app/services/DataHub.ts create mode 100644 FrontEnd/src/app/services/alert.ts create mode 100644 FrontEnd/src/app/services/common.ts create mode 100644 FrontEnd/src/app/services/timeline.ts create mode 100644 FrontEnd/src/app/services/user.ts create mode 100644 FrontEnd/src/app/tsconfig.json create mode 100644 FrontEnd/src/app/typings.d.ts create mode 100644 FrontEnd/src/app/utilities/rxjs.ts create mode 100644 FrontEnd/src/app/utilities/url.ts create mode 100644 FrontEnd/src/app/views/about/about.sass create mode 100644 FrontEnd/src/app/views/about/author-avatar.png create mode 100644 FrontEnd/src/app/views/about/github.png create mode 100644 FrontEnd/src/app/views/about/index.tsx create mode 100644 FrontEnd/src/app/views/admin/Admin.tsx create mode 100644 FrontEnd/src/app/views/admin/UserAdmin.tsx create mode 100644 FrontEnd/src/app/views/common/AppBar.tsx create mode 100644 FrontEnd/src/app/views/common/BlobImage.tsx create mode 100644 FrontEnd/src/app/views/common/ImageCropper.tsx create mode 100644 FrontEnd/src/app/views/common/LoadingButton.tsx create mode 100644 FrontEnd/src/app/views/common/LoadingPage.tsx create mode 100644 FrontEnd/src/app/views/common/OperationDialog.tsx create mode 100644 FrontEnd/src/app/views/common/SearchInput.tsx create mode 100644 FrontEnd/src/app/views/common/TimelineLogo.tsx create mode 100644 FrontEnd/src/app/views/common/UserTimelineLogo.tsx create mode 100644 FrontEnd/src/app/views/common/alert/AlertHost.tsx create mode 100644 FrontEnd/src/app/views/common/alert/alert.sass create mode 100644 FrontEnd/src/app/views/common/common.sass create mode 100644 FrontEnd/src/app/views/home/BoardWithUser.tsx create mode 100644 FrontEnd/src/app/views/home/BoardWithoutUser.tsx create mode 100644 FrontEnd/src/app/views/home/OfflineBoard.tsx create mode 100644 FrontEnd/src/app/views/home/TimelineBoard.tsx create mode 100644 FrontEnd/src/app/views/home/TimelineCreateDialog.tsx create mode 100644 FrontEnd/src/app/views/home/home.sass create mode 100644 FrontEnd/src/app/views/home/index.tsx create mode 100644 FrontEnd/src/app/views/login/index.tsx create mode 100644 FrontEnd/src/app/views/login/login.sass create mode 100644 FrontEnd/src/app/views/settings/index.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/CollapseButton.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/InfoCardTemplate.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/SyncStatusBadge.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/Timeline.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/TimelineItem.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/TimelineMember.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/TimelineTop.tsx create mode 100644 FrontEnd/src/app/views/timeline-common/timeline-common.sass create mode 100644 FrontEnd/src/app/views/timeline/TimelineDeleteDialog.tsx create mode 100644 FrontEnd/src/app/views/timeline/TimelineInfoCard.tsx create mode 100644 FrontEnd/src/app/views/timeline/TimelinePageUI.tsx create mode 100644 FrontEnd/src/app/views/timeline/index.tsx create mode 100644 FrontEnd/src/app/views/timeline/timeline.sass create mode 100644 FrontEnd/src/app/views/user/ChangeAvatarDialog.tsx create mode 100644 FrontEnd/src/app/views/user/ChangeNicknameDialog.tsx create mode 100644 FrontEnd/src/app/views/user/UserInfoCard.tsx create mode 100644 FrontEnd/src/app/views/user/UserPageUI.tsx create mode 100644 FrontEnd/src/app/views/user/index.tsx create mode 100644 FrontEnd/src/app/views/user/user.sass create mode 100644 FrontEnd/src/sw/sw.ts create mode 100644 FrontEnd/src/sw/tsconfig.json create mode 100644 FrontEnd/src/tsconfig.json (limited to 'FrontEnd/src') diff --git a/FrontEnd/src/app/App.tsx b/FrontEnd/src/app/App.tsx new file mode 100644 index 00000000..b68eddb6 --- /dev/null +++ b/FrontEnd/src/app/App.tsx @@ -0,0 +1,84 @@ +import React from "react"; +import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; +import { hot } from "react-hot-loader/root"; + +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 ( + <> + +
+
Ah-oh, 404!
+ + ); +}; + +const LazyAdmin = React.lazy( + () => import(/* webpackChunkName: "admin" */ "./views/admin/Admin") +); + +const App: React.FC = () => { + const [loading, setLoading] = React.useState(true); + + const user = useRawUser(); + + React.useEffect(() => { + void userService.checkLoginState(); + void dataStorage.ready().then(() => setLoading(false)); + }, []); + + if (user === undefined || loading) { + return ; + } else { + return ( + }> + + + + + + + + + + + + + + + + + + + + + + {user && user.administrator && ( + + + + )} + + + + + + + + ); + } +}; + +export default hot(App); diff --git a/FrontEnd/src/app/common.ts b/FrontEnd/src/app/common.ts new file mode 100644 index 00000000..0a2d345f --- /dev/null +++ b/FrontEnd/src/app/common.ts @@ -0,0 +1,44 @@ +import React from "react"; +import { Observable, Subject } from "rxjs"; + +// This error is thrown when ui goes wrong with bad logic. +// Such as a variable should not be null, but it does. +// This error should never occur. If it does, it indicates there is some logic bug in codes. +export class UiLogicError extends Error {} + +export function useEventEmiiter(): [() => Observable, () => void] { + const ref = React.useRef | null>(null); + + return React.useMemo(() => { + const getter = (): Subject => { + if (ref.current == null) { + ref.current = new Subject(); + } + return ref.current; + }; + const trigger = (): void => { + getter().next(null); + }; + return [getter, trigger]; + }, []); +} + +export function useValueEventEmiiter(): [ + () => Observable, + (value: T) => void +] { + const ref = React.useRef | null>(null); + + return React.useMemo(() => { + const getter = (): Subject => { + if (ref.current == null) { + ref.current = new Subject(); + } + return ref.current; + }; + const trigger = (value: T): void => { + getter().next(value); + }; + return [getter, trigger]; + }, []); +} diff --git a/FrontEnd/src/app/http/common.ts b/FrontEnd/src/app/http/common.ts new file mode 100644 index 00000000..54203d1a --- /dev/null +++ b/FrontEnd/src/app/http/common.ts @@ -0,0 +1,161 @@ +import { AxiosError, AxiosResponse } from "axios"; + +export const apiBaseUrl = "/api"; + +export function base64(blob: Blob): Promise { + return new Promise((resolve) => { + const reader = new FileReader(); + reader.onload = function () { + resolve((reader.result as string).replace(/^data:.+;base64,/, "")); + }; + reader.readAsDataURL(blob); + }); +} + +export function extractStatusCode(error: AxiosError): number | null { + if (error.isAxiosError) { + const code = error?.response?.status; + if (typeof code === "number") { + return code; + } + } + return null; +} + +export interface CommonErrorResponse { + code: number; + message: string; +} + +export function extractErrorCode( + error: AxiosError +): number | null { + if (error.isAxiosError) { + const code = error.response?.data?.code; + if (typeof code === "number") { + return code; + } + } + return null; +} + +export class HttpNetworkError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export class HttpForbiddenError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export class NotModified {} + +export interface BlobWithEtag { + data: Blob; + etag: string; +} + +export function extractResponseData(res: AxiosResponse): T { + return res.data; +} + +export function catchIfStatusCodeIs< + TResult, + TErrorHandlerResult extends TResult | PromiseLike | null | undefined +>( + statusCode: number, + errorHandler: (error: AxiosError) => TErrorHandlerResult +): (error: AxiosError) => TErrorHandlerResult { + return (error: AxiosError) => { + if (extractStatusCode(error) == statusCode) { + return errorHandler(error); + } else { + throw error; + } + }; +} + +export function convertToIfStatusCodeIs( + statusCode: number, + newErrorType: { + new (innerError: AxiosError): NewError; + } +): (error: AxiosError) => never { + return catchIfStatusCodeIs(statusCode, (error) => { + throw new newErrorType(error); + }); +} + +export function catchIfErrorCodeIs< + TResult, + TErrorHandlerResult extends TResult | PromiseLike | null | undefined +>( + errorCode: number, + errorHandler: (error: AxiosError) => TErrorHandlerResult +): (error: AxiosError) => TErrorHandlerResult { + return (error: AxiosError) => { + if (extractErrorCode(error) == errorCode) { + return errorHandler(error); + } else { + throw error; + } + }; +} +export function convertToIfErrorCodeIs( + errorCode: number, + newErrorType: { + new (innerError: AxiosError): NewError; + } +): (error: AxiosError) => never { + return catchIfErrorCodeIs(errorCode, (error) => { + throw new newErrorType(error); + }); +} + +export function convertToNetworkError( + error: AxiosError +): never { + if (error.isAxiosError && error.response == null) { + throw new HttpNetworkError(error); + } else { + throw error; + } +} + +export function convertToForbiddenError( + error: AxiosError +): never { + if ( + error.isAxiosError && + error.response != null && + (error.response.status == 401 || error.response.status == 403) + ) { + throw new HttpForbiddenError(error); + } else { + throw error; + } +} + +export function convertToNotModified( + error: AxiosError +): NotModified { + if ( + error.isAxiosError && + error.response != null && + error.response.status == 304 + ) { + return new NotModified(); + } else { + throw error; + } +} + +export function convertToBlobWithEtag(res: AxiosResponse): BlobWithEtag { + return { + data: res.data, + etag: (res.headers as Record<"etag", string>)["etag"], + }; +} diff --git a/FrontEnd/src/app/http/timeline.ts b/FrontEnd/src/app/http/timeline.ts new file mode 100644 index 00000000..eb7d5065 --- /dev/null +++ b/FrontEnd/src/app/http/timeline.ts @@ -0,0 +1,544 @@ +import axios, { AxiosError } from "axios"; + +import { updateQueryString, applyQueryParameters } from "../utilities/url"; + +import { + apiBaseUrl, + extractResponseData, + convertToNetworkError, + base64, + convertToIfStatusCodeIs, + convertToIfErrorCodeIs, + BlobWithEtag, + NotModified, + convertToNotModified, + convertToForbiddenError, + convertToBlobWithEtag, +} from "./common"; +import { HttpUser } from "./user"; + +export const kTimelineVisibilities = ["Public", "Register", "Private"] as const; + +export type TimelineVisibility = typeof kTimelineVisibilities[number]; + +export interface HttpTimelineInfo { + uniqueId: string; + name: string; + description: string; + owner: HttpUser; + visibility: TimelineVisibility; + lastModified: Date; + members: HttpUser[]; +} + +export interface HttpTimelineListQuery { + visibility?: TimelineVisibility; + relate?: string; + relateType?: "own" | "join"; +} + +export interface HttpTimelinePostRequest { + name: string; +} + +export interface HttpTimelinePostTextContent { + type: "text"; + text: string; +} + +export interface HttpTimelinePostImageContent { + type: "image"; +} + +export type HttpTimelinePostContent = + | HttpTimelinePostTextContent + | HttpTimelinePostImageContent; + +export interface HttpTimelinePostInfo { + id: number; + content: HttpTimelinePostContent; + time: Date; + lastUpdated: Date; + author: HttpUser; + deleted: false; +} + +export interface HttpTimelineDeletedPostInfo { + id: number; + time: Date; + lastUpdated: Date; + author?: HttpUser; + deleted: true; +} + +export type HttpTimelineGenericPostInfo = + | HttpTimelinePostInfo + | HttpTimelineDeletedPostInfo; + +export interface HttpTimelinePostPostRequestTextContent { + type: "text"; + text: string; +} + +export interface HttpTimelinePostPostRequestImageContent { + type: "image"; + data: Blob; +} + +export type HttpTimelinePostPostRequestContent = + | HttpTimelinePostPostRequestTextContent + | HttpTimelinePostPostRequestImageContent; + +export interface HttpTimelinePostPostRequest { + content: HttpTimelinePostPostRequestContent; + time?: Date; +} + +export interface HttpTimelinePatchRequest { + visibility?: TimelineVisibility; + description?: string; +} + +export class HttpTimelineNotExistError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export class HttpTimelinePostNotExistError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export class HttpTimelineNameConflictError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +//-------------------- begin: internal model -------------------- + +interface RawTimelineInfo { + uniqueId: string; + name: string; + description: string; + owner: HttpUser; + visibility: TimelineVisibility; + lastModified: string; + members: HttpUser[]; +} + +interface RawTimelinePostTextContent { + type: "text"; + text: string; +} + +interface RawTimelinePostImageContent { + type: "image"; + url: string; +} + +type RawTimelinePostContent = + | RawTimelinePostTextContent + | RawTimelinePostImageContent; + +interface RawTimelinePostInfo { + id: number; + content: RawTimelinePostContent; + time: string; + lastUpdated: string; + author: HttpUser; + deleted: false; +} + +interface RawTimelineDeletedPostInfo { + id: number; + time: string; + lastUpdated: string; + author: HttpUser; + deleted: true; +} + +type RawTimelineGenericPostInfo = + | RawTimelinePostInfo + | RawTimelineDeletedPostInfo; + +interface RawTimelinePostPostRequestTextContent { + type: "text"; + text: string; +} + +interface RawTimelinePostPostRequestImageContent { + type: "image"; + data: string; +} + +type RawTimelinePostPostRequestContent = + | RawTimelinePostPostRequestTextContent + | RawTimelinePostPostRequestImageContent; + +interface RawTimelinePostPostRequest { + content: RawTimelinePostPostRequestContent; + time?: string; +} + +//-------------------- end: internal model -------------------- + +function processRawTimelineInfo(raw: RawTimelineInfo): HttpTimelineInfo { + return { + ...raw, + lastModified: new Date(raw.lastModified), + }; +} + +function processRawTimelinePostInfo( + raw: RawTimelinePostInfo +): HttpTimelinePostInfo; +function processRawTimelinePostInfo( + raw: RawTimelineGenericPostInfo +): HttpTimelineGenericPostInfo; +function processRawTimelinePostInfo( + raw: RawTimelineGenericPostInfo +): HttpTimelineGenericPostInfo { + return { + ...raw, + time: new Date(raw.time), + lastUpdated: new Date(raw.lastUpdated), + }; +} + +export interface IHttpTimelineClient { + listTimeline(query: HttpTimelineListQuery): Promise; + getTimeline(timelineName: string): Promise; + getTimeline( + timelineName: string, + query: { + checkUniqueId?: string; + } + ): Promise; + getTimeline( + timelineName: string, + query: { + checkUniqueId?: string; + ifModifiedSince: Date; + } + ): Promise; + postTimeline( + req: HttpTimelinePostRequest, + token: string + ): Promise; + patchTimeline( + timelineName: string, + req: HttpTimelinePatchRequest, + token: string + ): Promise; + deleteTimeline(timelineName: string, token: string): Promise; + memberPut( + timelineName: string, + username: string, + token: string + ): Promise; + memberDelete( + timelineName: string, + username: string, + token: string + ): Promise; + listPost( + timelineName: string, + token?: string + ): Promise; + listPost( + timelineName: string, + token: string | undefined, + query: { + modifiedSince?: Date; + includeDeleted?: false; + } + ): Promise; + listPost( + timelineName: string, + token: string | undefined, + query: { + modifiedSince?: Date; + includeDeleted: true; + } + ): Promise; + getPostData( + timelineName: string, + postId: number, + token?: string + ): Promise; + getPostData( + timelineName: string, + postId: number, + token: string | undefined, + etag: string + ): Promise; + postPost( + timelineName: string, + req: HttpTimelinePostPostRequest, + token: string + ): Promise; + deletePost( + timelineName: string, + postId: number, + token: string + ): Promise; +} + +export class HttpTimelineClient implements IHttpTimelineClient { + listTimeline(query: HttpTimelineListQuery): Promise { + return axios + .get( + applyQueryParameters(`${apiBaseUrl}/timelines`, query) + ) + .then(extractResponseData) + .then((list) => list.map(processRawTimelineInfo)) + .catch(convertToNetworkError); + } + + getTimeline(timelineName: string): Promise; + getTimeline( + timelineName: string, + query: { + checkUniqueId?: string; + } + ): Promise; + getTimeline( + timelineName: string, + query: { + checkUniqueId?: string; + ifModifiedSince: Date; + } + ): Promise; + getTimeline( + timelineName: string, + query?: { + checkUniqueId?: string; + ifModifiedSince?: Date; + } + ): Promise { + return axios + .get( + applyQueryParameters(`${apiBaseUrl}/timelines/${timelineName}`, query) + ) + .then((res) => { + if (res.status === 304) { + return new NotModified(); + } else { + return processRawTimelineInfo(res.data); + } + }) + .catch(convertToIfStatusCodeIs(404, HttpTimelineNotExistError)) + .catch(convertToNetworkError); + } + + postTimeline( + req: HttpTimelinePostRequest, + token: string + ): Promise { + return axios + .post(`${apiBaseUrl}/timelines?token=${token}`, req) + .then(extractResponseData) + .then(processRawTimelineInfo) + .catch(convertToIfErrorCodeIs(11040101, HttpTimelineNameConflictError)) + .catch(convertToNetworkError); + } + + patchTimeline( + timelineName: string, + req: HttpTimelinePatchRequest, + token: string + ): Promise { + return axios + .patch( + `${apiBaseUrl}/timelines/${timelineName}?token=${token}`, + req + ) + .then(extractResponseData) + .then(processRawTimelineInfo) + .catch(convertToNetworkError); + } + + deleteTimeline(timelineName: string, token: string): Promise { + return axios + .delete(`${apiBaseUrl}/timelines/${timelineName}?token=${token}`) + .catch(convertToNetworkError) + .then(); + } + + memberPut( + timelineName: string, + username: string, + token: string + ): Promise { + return axios + .put( + `${apiBaseUrl}/timelines/${timelineName}/members/${username}?token=${token}` + ) + .catch(convertToNetworkError) + .then(); + } + + memberDelete( + timelineName: string, + username: string, + token: string + ): Promise { + return axios + .delete( + `${apiBaseUrl}/timelines/${timelineName}/members/${username}?token=${token}` + ) + .catch(convertToNetworkError) + .then(); + } + + listPost( + timelineName: string, + token?: string + ): Promise; + listPost( + timelineName: string, + token: string | undefined, + query: { + modifiedSince?: Date; + includeDeleted?: false; + } + ): Promise; + listPost( + timelineName: string, + token: string | undefined, + query: { + modifiedSince?: Date; + includeDeleted: true; + } + ): Promise; + listPost( + timelineName: string, + token?: string, + query?: { + modifiedSince?: Date; + includeDeleted?: boolean; + } + ): Promise { + let url = `${apiBaseUrl}/timelines/${timelineName}/posts`; + url = updateQueryString("token", token, url); + if (query != null) { + if (query.modifiedSince != null) { + url = updateQueryString( + "modifiedSince", + query.modifiedSince.toISOString(), + url + ); + } + if (query.includeDeleted != null) { + url = updateQueryString( + "includeDeleted", + query.includeDeleted ? "true" : "false", + url + ); + } + } + + return axios + .get(url) + .then(extractResponseData) + .catch(convertToIfStatusCodeIs(404, HttpTimelineNotExistError)) + .catch(convertToForbiddenError) + .catch(convertToNetworkError) + .then((rawPosts) => + rawPosts.map((raw) => processRawTimelinePostInfo(raw)) + ); + } + + getPostData( + timelineName: string, + postId: number, + token: string + ): Promise; + getPostData( + timelineName: string, + postId: number, + token?: string, + etag?: string + ): Promise { + const headers = + etag != null + ? { + "If-None-Match": etag, + } + : undefined; + + let url = `${apiBaseUrl}/timelines/${timelineName}/posts/${postId}/data`; + url = updateQueryString("token", token, url); + + return axios + .get(url, { + responseType: "blob", + headers, + }) + .then(convertToBlobWithEtag) + .catch(convertToNotModified) + .catch(convertToIfStatusCodeIs(404, HttpTimelinePostNotExistError)) + .catch(convertToNetworkError); + } + + async postPost( + timelineName: string, + req: HttpTimelinePostPostRequest, + token: string + ): Promise { + let content: RawTimelinePostPostRequestContent; + if (req.content.type === "image") { + const base64Data = await base64(req.content.data); + content = { + ...req.content, + data: base64Data, + } as RawTimelinePostPostRequestImageContent; + } else { + content = req.content; + } + const rawReq: RawTimelinePostPostRequest = { + content, + }; + if (req.time != null) { + rawReq.time = req.time.toISOString(); + } + return await axios + .post( + `${apiBaseUrl}/timelines/${timelineName}/posts?token=${token}`, + rawReq + ) + .then(extractResponseData) + .catch(convertToNetworkError) + .then((rawPost) => processRawTimelinePostInfo(rawPost)); + } + + deletePost( + timelineName: string, + postId: number, + token: string + ): Promise { + return axios + .delete( + `${apiBaseUrl}/timelines/${timelineName}/posts/${postId}?token=${token}` + ) + .catch(convertToNetworkError) + .then(); + } +} + +let client: IHttpTimelineClient = new HttpTimelineClient(); + +export function getHttpTimelineClient(): IHttpTimelineClient { + return client; +} + +export function setHttpTimelineClient( + newClient: IHttpTimelineClient +): IHttpTimelineClient { + const old = client; + client = newClient; + return old; +} diff --git a/FrontEnd/src/app/http/token.ts b/FrontEnd/src/app/http/token.ts new file mode 100644 index 00000000..ae0cf3f6 --- /dev/null +++ b/FrontEnd/src/app/http/token.ts @@ -0,0 +1,72 @@ +import axios, { AxiosError } from "axios"; + +import { + apiBaseUrl, + convertToNetworkError, + convertToIfErrorCodeIs, + extractResponseData, +} from "./common"; +import { HttpUser } from "./user"; + +export interface HttpCreateTokenRequest { + username: string; + password: string; + expire: number; +} + +export interface HttpCreateTokenResponse { + token: string; + user: HttpUser; +} + +export interface HttpVerifyTokenRequest { + token: string; +} + +export interface HttpVerifyTokenResponse { + user: HttpUser; +} + +export class HttpCreateTokenBadCredentialError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export interface IHttpTokenClient { + create(req: HttpCreateTokenRequest): Promise; + verify(req: HttpVerifyTokenRequest): Promise; +} + +export class HttpTokenClient implements IHttpTokenClient { + create(req: HttpCreateTokenRequest): Promise { + return axios + .post(`${apiBaseUrl}/token/create`, req) + .then(extractResponseData) + .catch( + convertToIfErrorCodeIs(11010101, HttpCreateTokenBadCredentialError) + ) + .catch(convertToNetworkError); + } + + verify(req: HttpVerifyTokenRequest): Promise { + return axios + .post(`${apiBaseUrl}/token/verify`, req) + .then(extractResponseData) + .catch(convertToNetworkError); + } +} + +let client: IHttpTokenClient = new HttpTokenClient(); + +export function getHttpTokenClient(): IHttpTokenClient { + return client; +} + +export function setHttpTokenClient( + newClient: IHttpTokenClient +): IHttpTokenClient { + const old = client; + client = newClient; + return old; +} diff --git a/FrontEnd/src/app/http/user.ts b/FrontEnd/src/app/http/user.ts new file mode 100644 index 00000000..a0a02cce --- /dev/null +++ b/FrontEnd/src/app/http/user.ts @@ -0,0 +1,134 @@ +import axios, { AxiosError } from "axios"; + +import { + apiBaseUrl, + convertToNetworkError, + extractResponseData, + convertToIfStatusCodeIs, + convertToIfErrorCodeIs, + NotModified, + BlobWithEtag, + convertToBlobWithEtag, + convertToNotModified, +} from "./common"; + +export interface HttpUser { + uniqueId: string; + username: string; + administrator: boolean; + nickname: string; +} + +export interface HttpUserPatchRequest { + nickname?: string; +} + +export interface HttpChangePasswordRequest { + oldPassword: string; + newPassword: string; +} + +export class HttpUserNotExistError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export class HttpChangePasswordBadCredentialError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export interface IHttpUserClient { + get(username: string): Promise; + patch( + username: string, + req: HttpUserPatchRequest, + token: string + ): Promise; + getAvatar(username: string): Promise; + getAvatar( + username: string, + etag: string + ): Promise; + putAvatar(username: string, data: Blob, token: string): Promise; + changePassword(req: HttpChangePasswordRequest, token: string): Promise; +} + +export class HttpUserClient implements IHttpUserClient { + get(username: string): Promise { + return axios + .get(`${apiBaseUrl}/users/${username}`) + .then(extractResponseData) + .catch(convertToIfStatusCodeIs(404, HttpUserNotExistError)) + .catch(convertToNetworkError); + } + + patch( + username: string, + req: HttpUserPatchRequest, + token: string + ): Promise { + return axios + .patch(`${apiBaseUrl}/users/${username}?token=${token}`, req) + .then(extractResponseData) + .catch(convertToNetworkError); + } + + getAvatar(username: string): Promise; + getAvatar( + username: string, + etag?: string + ): Promise { + const headers = + etag != null + ? { + "If-None-Match": etag, + } + : undefined; + + return axios + .get(`${apiBaseUrl}/users/${username}/avatar`, { + responseType: "blob", + headers, + }) + .then(convertToBlobWithEtag) + .catch(convertToNotModified) + .catch(convertToIfStatusCodeIs(404, HttpUserNotExistError)) + .catch(convertToNetworkError); + } + + putAvatar(username: string, data: Blob, token: string): Promise { + return axios + .put(`${apiBaseUrl}/users/${username}/avatar?token=${token}`, data, { + headers: { + "Content-Type": data.type, + }, + }) + .catch(convertToNetworkError) + .then(); + } + + changePassword(req: HttpChangePasswordRequest, token: string): Promise { + return axios + .post(`${apiBaseUrl}/userop/changepassword?token=${token}`, req) + .catch( + convertToIfErrorCodeIs(11020201, HttpChangePasswordBadCredentialError) + ) + .catch(convertToNetworkError) + .then(); + } +} + +let client: IHttpUserClient = new HttpUserClient(); + +export function getHttpUserClient(): IHttpUserClient { + return client; +} + +export function setHttpUserClient(newClient: IHttpUserClient): IHttpUserClient { + const old = client; + client = newClient; + return old; +} diff --git a/FrontEnd/src/app/i18n.ts b/FrontEnd/src/app/i18n.ts new file mode 100644 index 00000000..cdced7bf --- /dev/null +++ b/FrontEnd/src/app/i18n.ts @@ -0,0 +1,79 @@ +import i18n, { BackendModule, ResourceKey } from "i18next"; +import LanguageDetector from "i18next-browser-languagedetector"; +import { initReactI18next } from "react-i18next"; + +const backend: BackendModule = { + type: "backend", + async read(language, namespace, callback) { + function error(message: string): void { + callback(new Error(message), false); + } + + function success(result: ResourceKey): void { + callback(null, result); + } + + if (namespace !== "translation") { + error("Namespace must be 'translation'."); + } + + if (language === "en") { + const res = ( + await import( + /* webpackChunkName: "locales-en" */ "./locales/en/translation" + ) + ).default; + success(res); + } else if (language === "zh-cn" || language === "zh") { + const res = ( + await import( + /* webpackChunkName: "locales-zh" */ "./locales/zh/translation" + ) + ).default; + success(res); + } else { + error(`Language ${language} is not supported.`); + } + }, + init() {}, // eslint-disable-line @typescript-eslint/no-empty-function + create() {}, // eslint-disable-line @typescript-eslint/no-empty-function +}; + +export const i18nPromise = i18n + .use(LanguageDetector) + .use(backend) + .use(initReactI18next) // bind react-i18next to the instance + .init({ + fallbackLng: false, + lowerCaseLng: true, + + debug: process.env.NODE_ENV === "development", + + interpolation: { + escapeValue: false, // not needed for react!! + }, + + // react i18next special options (optional) + // override if needed - omit if ok with defaults + /* + react: { + bindI18n: 'languageChanged', + bindI18nStore: '', + transEmptyNodeValue: '', + transSupportBasicHtmlNodes: true, + transKeepBasicHtmlNodesFor: ['br', 'strong', 'i'], + useSuspense: true, + } + */ + }); + +if (module.hot) { + module.hot.accept( + ["./locales/en/translation", "./locales/zh/translation"], + () => { + void i18n.reloadResources(); + } + ); +} + +export default i18n; diff --git a/FrontEnd/src/app/index.ejs b/FrontEnd/src/app/index.ejs new file mode 100644 index 00000000..c2ff4182 --- /dev/null +++ b/FrontEnd/src/app/index.ejs @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/FrontEnd/src/app/index.sass b/FrontEnd/src/app/index.sass new file mode 100644 index 00000000..8e87e4ac --- /dev/null +++ b/FrontEnd/src/app/index.sass @@ -0,0 +1,66 @@ +@import '~bootstrap/scss/bootstrap' + +@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 + +small + line-height: 1.2 + +.flex-fix-length + flex-grow: 0 + flex-shrink: 0 + +.position-lt + left: 0 + top: 0 + +.avatar + width: 60px + &.large + width: 100px + &.small + width: 40px + +.mt-appbar + margin-top: 56px + +.icon-button + font-size: 1.4em + &.large + font-size: 1.6em + +.cursor-pointer + cursor: pointer + +textarea + resize: none + +.white-space-no-wrap + white-space: nowrap + +.cru-card + @extend .shadow + @extend .border + @extend .border-primary + @extend .rounded + @extend .bg-light + +.full-viewport-center-child + position: fixed + width: 100vw + height: 100vh + display: flex + justify-content: center + align-items: center + +.text-orange + color: $orange diff --git a/FrontEnd/src/app/index.tsx b/FrontEnd/src/app/index.tsx new file mode 100644 index 00000000..00a75a4a --- /dev/null +++ b/FrontEnd/src/app/index.tsx @@ -0,0 +1,15 @@ +import "regenerator-runtime"; +import "core-js/modules/es.promise"; +import "core-js/modules/es.array.iterator"; +import "pepjs"; + +import React from "react"; +import ReactDOM from "react-dom"; + +import "./index.sass"; + +import "./i18n"; + +import App from "./App"; + +ReactDOM.render(, document.getElementById("app")); diff --git a/FrontEnd/src/app/locales/en/translation.ts b/FrontEnd/src/app/locales/en/translation.ts new file mode 100644 index 00000000..c7f33d1e --- /dev/null +++ b/FrontEnd/src/app/locales/en/translation.ts @@ -0,0 +1,202 @@ +import TranslationResource from "../scheme"; + +const translation: TranslationResource = { + welcome: "Welcome!", + search: "Search", + loadFailReload: "Load failed, click <1>here to reload.", + serviceWorker: { + availableOffline: + "Timeline is now cached in your computer and you can use it offline. 🎉🎉🎉", + upgradePrompt: "App is getting a new version!", + upgradeNow: "Update Now", + upgradeSuccess: + "Congratulations! App update succeeded! Still you can use it offline. 🎉🎉🎉", + externalActivatedPrompt: + "A new version of app is activated. Please refresh the page. Or it may be broken.", + reloadNow: "Refresh Now", + }, + nav: { + settings: "Settings", + login: "Login", + about: "About", + }, + chooseImage: "Choose a image", + loadImageError: "Failed to load image.", + home: { + go: "Go!", + allTimeline: "All Timelines", + joinTimeline: "Joined Timelines", + ownTimeline: "Owned Timelines", + offlinePrompt: + "Oh oh, it seems you are offline. Here list some timelines cached locally. You can view them or click <1>here to refresh.", + createButton: "Create Timeline", + createDialog: { + title: "Create Timeline!", + name: "Name", + nameFormat: + "Name must consist of only letter including non-English letter, digit, hyphen(-) and underline(_) and be no longer than 26.", + badFormat: "Bad format.", + noEmpty: "Empty is not allowed.", + tooLong: "Too long.", + }, + }, + operationDialog: { + retry: "Retry", + nextStep: "Next", + previousStep: "Previous", + confirm: "Confirm", + cancel: "Cancel", + ok: "OK!", + processing: "Processing...", + success: "Success!", + error: "An error occured.", + }, + timeline: { + messageCantSee: "Sorry, you are not allowed to see this timeline.😅", + userNotExist: "The user does not exist!", + timelineNotExist: "The timeline does not exist!", + manage: "Manage", + memberButton: "Member", + send: "Send", + deletePostFailed: "Failed to delete post.", + sendPostFailed: "Failed to send post.", + visibility: { + public: "public to everyone", + register: "only registed people can see", + private: "only members can see", + }, + visibilityTooltip: { + public: + "Everyone including those without accounts can see content of the timeline.", + register: + "Only those who have an account and logined can see content of the timeline.", + private: "Only members of this timeline can see content of the timeline.", + }, + dialogChangeProperty: { + title: "Change Timeline Properties", + visibility: "Visibility", + description: "Description", + }, + member: { + alreadyMember: "The user is already a member.", + add: "Add", + remove: "Remove", + }, + manageItem: { + nickname: "Nickname", + avatar: "Avatar", + property: "Timeline Property", + member: "Timeline Member", + delete: "Delete Timeline", + }, + deleteDialog: { + title: "Delete Timeline", + inputPrompt: + "This is a dangerous action. If you are sure to delete timeline<1>{{name}}, please input its name below and click confirm button.", + notMatch: "Name does not match.", + }, + postSyncState: { + syncing: "Syncing", + synced: "Synced", + offline: "Offline", + }, + post: { + deleteDialog: { + title: "Confirm Delete", + prompt: + "Are you sure to delete the post? This operation is not recoverable.", + }, + }, + }, + user: { + username: "username", + password: "password", + login: "login", + rememberMe: "Remember Me", + welcomeBack: "Welcome back!", + verifyTokenFailed: "User login info is expired. Please login again!", + verifyTokenFailedNetwork: + "Verifying user login info failed. Please check your network and refresh page!", + }, + login: { + emptyUsername: "Username can't be empty.", + emptyPassword: "Password can't be empty.", + badCredential: "Username or password is invalid.", + alreadyLogin: "Already login! Redirect to home page in 3s!", + }, + userPage: { + dialogChangeNickname: { + title: "Change Nickname", + inputLabel: "New nickname", + }, + dialogChangeAvatar: { + title: "Change Avatar", + previewImgAlt: "preview", + prompt: { + select: "Please select a picture.", + crop: "Please crop the picture.", + processingCrop: "Cropping picture...", + uploading: "Uploading...", + preview: "Please preview avatar", + }, + upload: "upload", + }, + }, + settings: { + subheaders: { + account: "Account", + customization: "Customization", + }, + languagePrimary: "Choose display language.", + languageSecondary: + "You language preference will be saved locally. Next time you visit this page, last language option will be used.", + changePassword: "Change account's password.", + logout: "Log out this account.", + gotoSelf: + "Click here to go to timeline of myself to change nickname and avatar.", + dialogChangePassword: { + title: "Change Password", + prompt: + "You are changing your password. You need to input the correct old password. After change, you need to login again and all old login will be invalid.", + inputOldPassword: "Old password", + inputNewPassword: "New password", + inputRetypeNewPassword: "Retype new password", + errorEmptyOldPassword: "Old password can't be empty.", + errorEmptyNewPassword: "New password can't be empty.", + errorRetypeNotMatch: "Password retyped does not match.", + }, + dialogConfirmLogout: { + title: "Confirm Logout", + prompt: + "Are you sure to log out? All cached data in the browser will be deleted.", + }, + }, + about: { + author: { + title: "Site Developer", + fullname: "Fullname: ", + nickname: "Nickname: ", + introduction: "Introduction: ", + introductionContent: "A programmer coding based on coincidence", + links: "Links: ", + }, + site: { + title: "Site Information", + content: + "The name of this site is <1>Timeline, which is a Web App with <3>timeline as its core concept. Its frontend and backend are both developed by <5>me, and open source on GitHub. It is relatively easy to deploy it on your own server, which is also one of my goals. Welcome to comment anything in GitHub repository.", + repo: "GitHub Repo", + }, + credits: { + title: "Credits", + content: + "Timeline is works standing on shoulders of gaints. Special appreciation for many open source projects listed below or not. Related licenses could be found in GitHub repository.", + frontend: "Frontend: ", + backend: "Backend: ", + }, + }, + admin: { + title: "admin", + }, +}; + +export default translation; diff --git a/FrontEnd/src/app/locales/scheme.ts b/FrontEnd/src/app/locales/scheme.ts new file mode 100644 index 00000000..9e3534ac --- /dev/null +++ b/FrontEnd/src/app/locales/scheme.ts @@ -0,0 +1,182 @@ +export default interface TranslationResource { + welcome: string; + search: string; + chooseImage: string; + loadImageError: string; + loadFailReload: string; + serviceWorker: { + availableOffline: string; + upgradePrompt: string; + upgradeNow: string; + upgradeSuccess: string; + externalActivatedPrompt: string; + reloadNow: string; + }; + nav: { + settings: string; + login: string; + about: string; + }; + home: { + go: string; + allTimeline: string; + joinTimeline: string; + ownTimeline: string; + offlinePrompt: string; + createButton: string; + createDialog: { + title: string; + name: string; + nameFormat: string; + badFormat: string; + noEmpty: string; + tooLong: string; + }; + }; + operationDialog: { + retry: string; + nextStep: string; + previousStep: string; + confirm: string; + cancel: string; + ok: string; + processing: string; + success: string; + error: string; + }; + timeline: { + messageCantSee: string; + userNotExist: string; + timelineNotExist: string; + manage: string; + memberButton: string; + send: string; + deletePostFailed: string; + sendPostFailed: string; + visibility: { + public: string; + register: string; + private: string; + }; + visibilityTooltip: { + public: string; + register: string; + private: string; + }; + dialogChangeProperty: { + title: string; + visibility: string; + description: string; + }; + member: { + alreadyMember: string; + add: string; + remove: string; + }; + manageItem: { + nickname: string; + avatar: string; + property: string; + member: string; + delete: string; + }; + deleteDialog: { + title: string; + inputPrompt: string; + notMatch: string; + }; + postSyncState: { + syncing: string; + synced: string; + offline: string; + }; + post: { + deleteDialog: { + title: string; + prompt: string; + }; + }; + }; + user: { + username: string; + password: string; + login: string; + rememberMe: string; + welcomeBack: string; + verifyTokenFailed: string; + verifyTokenFailedNetwork: string; + }; + login: { + emptyUsername: string; + emptyPassword: string; + badCredential: string; + alreadyLogin: string; + }; + userPage: { + dialogChangeNickname: { + title: string; + inputLabel: string; + }; + dialogChangeAvatar: { + title: string; + previewImgAlt: string; + prompt: { + select: string; + crop: string; + processingCrop: string; + preview: string; + uploading: string; + }; + upload: string; + }; + }; + settings: { + subheaders: { + account: string; + customization: string; + }; + languagePrimary: string; + languageSecondary: string; + changePassword: string; + logout: string; + gotoSelf: string; + dialogChangePassword: { + title: string; + prompt: string; + inputOldPassword: string; + inputNewPassword: string; + inputRetypeNewPassword: string; + errorEmptyOldPassword: string; + errorEmptyNewPassword: string; + errorRetypeNotMatch: string; + }; + dialogConfirmLogout: { + title: string; + prompt: string; + }; + }; + about: { + author: { + title: string; + fullname: string; + nickname: string; + introduction: string; + introductionContent: string; + links: string; + }; + site: { + title: string; + content: string; + repo: string; + }; + credits: { + title: string; + content: string; + frontend: string; + backend: string; + }; + }; + admin: { + title: string; + }; +} diff --git a/FrontEnd/src/app/locales/zh/translation.ts b/FrontEnd/src/app/locales/zh/translation.ts new file mode 100644 index 00000000..df316366 --- /dev/null +++ b/FrontEnd/src/app/locales/zh/translation.ts @@ -0,0 +1,195 @@ +import TranslationResource from "../scheme"; + +const translation: TranslationResource = { + welcome: "欢迎!", + search: "搜索", + loadFailReload: "加载失败,<1>点击重试。", + serviceWorker: { + availableOffline: "Timeline 已经缓存在本地,你可以离线使用它。🎉🎉🎉", + upgradePrompt: "App 有新版本!", + upgradeNow: "现在升级", + upgradeSuccess: "App 升级成功,当然,你仍可以离线使用它。 🎉🎉🎉", + externalActivatedPrompt: + "一个新的 App 版本已经激活,请刷新页面使用,否则页面可能会出现故障。", + reloadNow: "立刻刷新", + }, + nav: { + settings: "设置", + login: "登陆", + about: "关于", + }, + chooseImage: "选择一个图片", + loadImageError: "加载图片失败", + home: { + go: "冲!", + allTimeline: "所有的时间线", + joinTimeline: "加入的时间线", + ownTimeline: "拥有的时间线", + offlinePrompt: + "你好像处于离线状态。以下是一些缓存在本地的时间线。你可以查看它们或者<1>点击重新获取在线信息。", + createButton: "创建时间线", + createDialog: { + title: "创建时间线!", + name: "名字", + nameFormat: + "名字只能由字母、汉字、数字、下划线(_)和连字符(-)构成,且长度不能超过26.", + badFormat: "格式错误", + noEmpty: "不能为空", + tooLong: "太长了", + }, + }, + operationDialog: { + retry: "重试", + nextStep: "下一步", + previousStep: "上一步", + confirm: "确定", + cancel: "取消", + ok: "好的!", + processing: "处理中...", + success: "成功!", + error: "出错啦!", + }, + timeline: { + messageCantSee: "不好意思,你没有权限查看这个时间线。😅", + userNotExist: "该用户不存在!", + timelineNotExist: "该时间线不存在!", + manage: "管理", + memberButton: "成员", + send: "发送", + deletePostFailed: "删除消息失败。", + sendPostFailed: "发送消息失败。", + visibility: { + public: "对所有人公开", + register: "仅注册可见", + private: "仅成员可见", + }, + visibilityTooltip: { + public: "所有人都可以看到这个时间线的内容,包括没有注册的人。", + register: "只有拥有本网站的账号且登陆了的人才能看到这个时间线的内容。", + private: "只有这个时间线的成员可以看到这个时间线的内容。", + }, + dialogChangeProperty: { + title: "修改时间线属性", + visibility: "可见性", + description: "描述", + }, + member: { + alreadyMember: "该用户已经是一个成员。", + add: "添加", + remove: "移除", + }, + manageItem: { + nickname: "昵称", + avatar: "头像", + property: "时间线属性", + member: "时间线成员", + delete: "删除时间线", + }, + deleteDialog: { + title: "删除时间线", + inputPrompt: + "这是一个危险的操作。如果您确认要删除时间线<1>{{name}},请在下面输入它的名字并点击确认。", + notMatch: "名字不匹配", + }, + postSyncState: { + syncing: "同步中", + synced: "同步成功", + offline: "离线", + }, + post: { + deleteDialog: { + title: "确认删除", + prompt: "确定删除这个消息?这个操作不可撤销。", + }, + }, + }, + user: { + username: "用户名", + password: "密码", + login: "登录", + rememberMe: "记住我", + welcomeBack: "欢迎回来!", + verifyTokenFailed: "用户登录信息已过期,请重新登陆!", + verifyTokenFailedNetwork: + "验证用户登录信息失败,请检查网络连接并刷新页面!", + }, + login: { + emptyUsername: "用户名不能为空。", + emptyPassword: "密码不能为空。", + badCredential: "用户名或密码错误。", + alreadyLogin: "已经登陆,三秒后导航到首页!", + }, + userPage: { + dialogChangeNickname: { + title: "更改昵称", + inputLabel: "新昵称", + }, + dialogChangeAvatar: { + title: "修改头像", + previewImgAlt: "预览", + prompt: { + select: "请选择一个图片", + crop: "请裁剪图片", + processingCrop: "正在裁剪图片", + uploading: "正在上传", + preview: "请预览图片", + }, + upload: "上传", + }, + }, + settings: { + subheaders: { + account: "账户", + customization: "个性化", + }, + languagePrimary: "选择显示的语言。", + languageSecondary: + "您的语言偏好将会存储在本地,下次浏览时将自动使用上次保存的语言选项。", + changePassword: "更改账号的密码。", + logout: "注销此账号。", + gotoSelf: "点击前往个人时间线修改昵称和头像!", + dialogChangePassword: { + title: "修改密码", + prompt: + "您正在修改密码,您需要输入正确的旧密码。成功修改后您需要重新登陆,而且以前所有的登录都会失效。", + inputOldPassword: "旧密码", + inputNewPassword: "新密码", + inputRetypeNewPassword: "再次输入新密码", + errorEmptyOldPassword: "旧密码不能为空。", + errorEmptyNewPassword: "新密码不能为空", + errorRetypeNotMatch: "两次输入的密码不一致", + }, + dialogConfirmLogout: { + title: "确定注销", + prompt: "您确定注销此账号?这将删除所有已经缓存在浏览器的数据。", + }, + }, + about: { + author: { + title: "网站作者", + fullname: "姓名:", + nickname: "昵称:", + introduction: "简介:", + introductionContent: "一个基于巧合编程的代码爱好者。", + links: "链接:", + }, + site: { + title: "网站信息", + content: + "这个网站的名字叫 <1>Timeline,是一个以<3>时间线为核心概念的 Web App . 它的前端和后端都是由<5>我开发,并且在 GitHub 上开源。大家可以相对轻松的把它们部署在自己的服务器上,这也是我的目标之一。欢迎大家前往 GitHub 仓库提出任何意见。", + repo: "GitHub 仓库", + }, + credits: { + title: "鸣谢", + content: + "Timeline 是站在巨人肩膀上的作品,感谢以下列出的和其他未列出的许多开源项目,相关 License 请在 GitHub 仓库中查看。", + frontend: "前端:", + backend: "后端:", + }, + }, + admin: { + title: "管理", + }, +}; + +export default translation; diff --git a/FrontEnd/src/app/service-worker.tsx b/FrontEnd/src/app/service-worker.tsx new file mode 100644 index 00000000..3be54bc1 --- /dev/null +++ b/FrontEnd/src/app/service-worker.tsx @@ -0,0 +1,113 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { Button } from "react-bootstrap"; + +import { pushAlert } from "./services/alert"; + +if ("serviceWorker" in navigator) { + let isThisTriggerUpgrade = false; + + const upgradeSuccessLocalStorageKey = "TIMELINE_UPGRADE_SUCCESS"; + + if (window.localStorage.getItem(upgradeSuccessLocalStorageKey)) { + pushAlert({ + message: { + type: "i18n", + key: "serviceWorker.upgradeSuccess", + }, + type: "success", + }); + window.localStorage.removeItem(upgradeSuccessLocalStorageKey); + } + + void import("workbox-window").then(({ Workbox, messageSW }) => { + const wb = new Workbox("/sw.js"); + let registration: ServiceWorkerRegistration | undefined; + + // externalactivated is not usable but I still use its name. + wb.addEventListener("controlling", () => { + const upgradeReload = (): void => { + window.localStorage.setItem(upgradeSuccessLocalStorageKey, "true"); + window.location.reload(); + }; + + if (isThisTriggerUpgrade) { + upgradeReload(); + } else { + const Message: React.FC = () => { + const { t } = useTranslation(); + return ( + <> + {t("serviceWorker.externalActivatedPrompt")} + + + ); + }; + + pushAlert({ + message: Message, + dismissTime: "never", + type: "warning", + }); + } + }); + + wb.addEventListener("activated", (event) => { + if (!event.isUpdate) { + pushAlert({ + message: { + type: "i18n", + key: "serviceWorker.availableOffline", + }, + type: "success", + }); + } + }); + + const showSkipWaitingPrompt = (): void => { + const upgrade = (): void => { + isThisTriggerUpgrade = true; + if (registration && registration.waiting) { + // Send a message to the waiting service worker, + // instructing it to activate. + // Note: for this to work, you have to add a message + // listener in your service worker. See below. + void messageSW(registration.waiting, { type: "SKIP_WAITING" }); + } + }; + + const UpgradeMessage: React.FC = () => { + const { t } = useTranslation(); + return ( + <> + {t("serviceWorker.upgradePrompt")} + + + ); + }; + + pushAlert({ + message: UpgradeMessage, + dismissTime: "never", + type: "success", + }); + }; + + // Add an event listener to detect when the registered + // service worker has installed but is waiting to activate. + wb.addEventListener("waiting", showSkipWaitingPrompt); + wb.addEventListener("externalwaiting", showSkipWaitingPrompt); + + void wb.register().then((reg) => { + registration = reg; + }); + }); +} diff --git a/FrontEnd/src/app/services/DataHub.ts b/FrontEnd/src/app/services/DataHub.ts new file mode 100644 index 00000000..93a9b41f --- /dev/null +++ b/FrontEnd/src/app/services/DataHub.ts @@ -0,0 +1,225 @@ +import { pull } from "lodash"; +import { Observable, BehaviorSubject, combineLatest } from "rxjs"; +import { map } from "rxjs/operators"; + +export type Subscriber = (data: TData) => void; + +export type WithSyncStatus = T & { syncing: boolean }; + +export class DataLine { + private _current: TData | undefined = undefined; + + private _syncPromise: Promise | null = null; + private _syncingSubject = new BehaviorSubject(false); + + private _observers: Subscriber[] = []; + + constructor( + private config: { + sync: () => Promise; + destroyable?: (value: TData | undefined) => boolean; + disableInitSync?: boolean; + } + ) { + if (config.disableInitSync !== true) { + setImmediate(() => void this.sync()); + } + } + + private subscribe(subscriber: Subscriber): void { + this._observers.push(subscriber); + if (this._current !== undefined) { + subscriber(this._current); + } + } + + private unsubscribe(subscriber: Subscriber): void { + if (!this._observers.includes(subscriber)) return; + pull(this._observers, subscriber); + } + + getObservable(): Observable { + return new Observable((observer) => { + const f = (data: TData): void => { + observer.next(data); + }; + this.subscribe(f); + + return () => { + this.unsubscribe(f); + }; + }); + } + + getSyncStatusObservable(): Observable { + return this._syncingSubject.asObservable(); + } + + getDataWithSyncStatusObservable(): Observable> { + return combineLatest([ + this.getObservable(), + this.getSyncStatusObservable(), + ]).pipe( + map(([data, syncing]) => ({ + ...data, + syncing, + })) + ); + } + + get value(): TData | undefined { + return this._current; + } + + next(value: TData): void { + this._current = value; + this._observers.forEach((observer) => observer(value)); + } + + get isSyncing(): boolean { + return this._syncPromise != null; + } + + sync(): Promise { + if (this._syncPromise == null) { + this._syncingSubject.next(true); + this._syncPromise = this.config.sync().then(() => { + this._syncingSubject.next(false); + this._syncPromise = null; + }); + } + + return this._syncPromise; + } + + syncWithAction( + syncAction: (line: DataLine) => Promise + ): Promise { + if (this._syncPromise == null) { + this._syncingSubject.next(true); + this._syncPromise = syncAction(this).then(() => { + this._syncingSubject.next(false); + this._syncPromise = null; + }); + } + + return this._syncPromise; + } + + get destroyable(): boolean { + const customDestroyable = this.config?.destroyable; + + return ( + this._observers.length === 0 && + !this.isSyncing && + (customDestroyable != null ? customDestroyable(this._current) : true) + ); + } +} + +export class DataHub { + private sync: (key: TKey, line: DataLine) => Promise; + private keyToString: (key: TKey) => string; + private destroyable?: (key: TKey, value: TData | undefined) => boolean; + + private readonly subscriptionLineMap = new Map>(); + + private cleanTimerId = 0; + + // setup is called after creating line and if it returns a function as destroyer, then when the line is destroyed the destroyer will be called. + constructor(config: { + sync: (key: TKey, line: DataLine) => Promise; + keyToString?: (key: TKey) => string; + destroyable?: (key: TKey, value: TData | undefined) => boolean; + }) { + this.sync = config.sync; + this.keyToString = + config.keyToString ?? + ((value): string => { + if (typeof value === "string") return value; + else + throw new Error( + "Default keyToString function only pass string value." + ); + }); + + this.destroyable = config.destroyable; + } + + private cleanLines(): void { + const toDelete: string[] = []; + for (const [key, line] of this.subscriptionLineMap.entries()) { + if (line.destroyable) { + toDelete.push(key); + } + } + + if (toDelete.length === 0) return; + + for (const key of toDelete) { + this.subscriptionLineMap.delete(key); + } + + if (this.subscriptionLineMap.size === 0) { + window.clearInterval(this.cleanTimerId); + this.cleanTimerId = 0; + } + } + + private createLine(key: TKey, disableInitSync = false): DataLine { + const keyString = this.keyToString(key); + const { destroyable } = this; + const newLine: DataLine = new DataLine({ + sync: () => this.sync(key, newLine), + destroyable: + destroyable != null ? (value) => destroyable(key, value) : undefined, + disableInitSync: disableInitSync, + }); + this.subscriptionLineMap.set(keyString, newLine); + if (this.subscriptionLineMap.size === 1) { + this.cleanTimerId = window.setInterval(this.cleanLines.bind(this), 20000); + } + return newLine; + } + + getObservable(key: TKey): Observable { + return this.getLineOrCreate(key).getObservable(); + } + + getSyncStatusObservable(key: TKey): Observable { + return this.getLineOrCreate(key).getSyncStatusObservable(); + } + + getDataWithSyncStatusObservable( + key: TKey + ): Observable> { + return this.getLineOrCreate(key).getDataWithSyncStatusObservable(); + } + + getLine(key: TKey): DataLine | null { + const keyString = this.keyToString(key); + return this.subscriptionLineMap.get(keyString) ?? null; + } + + getLineOrCreate(key: TKey): DataLine { + const keyString = this.keyToString(key); + return this.subscriptionLineMap.get(keyString) ?? this.createLine(key); + } + + getLineOrCreateWithoutInitSync(key: TKey): DataLine { + const keyString = this.keyToString(key); + return ( + this.subscriptionLineMap.get(keyString) ?? this.createLine(key, true) + ); + } + + optionalInitLineWithSyncAction( + key: TKey, + syncAction: (line: DataLine) => Promise + ): Promise { + const optionalLine = this.getLine(key); + if (optionalLine != null) return Promise.resolve(); + const line = this.createLine(key, true); + return line.syncWithAction(syncAction); + } +} diff --git a/FrontEnd/src/app/services/alert.ts b/FrontEnd/src/app/services/alert.ts new file mode 100644 index 00000000..e4c0e653 --- /dev/null +++ b/FrontEnd/src/app/services/alert.ts @@ -0,0 +1,61 @@ +import React from "react"; +import pull from "lodash/pull"; + +export interface AlertInfo { + type?: "primary" | "secondary" | "success" | "danger" | "warning" | "info"; + message: string | React.FC | { type: "i18n"; key: string }; + dismissTime?: number | "never"; +} + +export interface AlertInfoEx extends AlertInfo { + id: number; +} + +export type AlertConsumer = (alerts: AlertInfoEx) => void; + +export class AlertService { + private consumers: AlertConsumer[] = []; + private savedAlerts: AlertInfoEx[] = []; + private currentId = 1; + + private produce(alert: AlertInfoEx): void { + for (const consumer of this.consumers) { + consumer(alert); + } + } + + registerConsumer(consumer: AlertConsumer): void { + this.consumers.push(consumer); + if (this.savedAlerts.length !== 0) { + for (const alert of this.savedAlerts) { + this.produce(alert); + } + this.savedAlerts = []; + } + } + + unregisterConsumer(consumer: AlertConsumer): void { + pull(this.consumers, consumer); + } + + push(alert: AlertInfo): void { + const newAlert: AlertInfoEx = { ...alert, id: this.currentId++ }; + if (this.consumers.length === 0) { + this.savedAlerts.push(newAlert); + } else { + this.produce(newAlert); + } + } +} + +export const alertService = new AlertService(); + +export function pushAlert(alert: AlertInfo): void { + alertService.push(alert); +} + +export const kAlertHostId = "alert-host"; + +export function getAlertHost(): HTMLElement | null { + return document.getElementById(kAlertHostId); +} diff --git a/FrontEnd/src/app/services/common.ts b/FrontEnd/src/app/services/common.ts new file mode 100644 index 00000000..3bb6b9d7 --- /dev/null +++ b/FrontEnd/src/app/services/common.ts @@ -0,0 +1,23 @@ +import localforage from "localforage"; + +import { HttpNetworkError } from "@/http/common"; + +export const dataStorage = localforage.createInstance({ + name: "data", + description: "Database for offline data.", + driver: localforage.INDEXEDDB, +}); + +export class ForbiddenError extends Error { + constructor(message?: string) { + super(message); + } +} + +export function throwIfNotNetworkError(e: unknown): void { + if (!(e instanceof HttpNetworkError)) { + throw e; + } +} + +export type BlobOrStatus = Blob | "loading" | "error"; diff --git a/FrontEnd/src/app/services/timeline.ts b/FrontEnd/src/app/services/timeline.ts new file mode 100644 index 00000000..9db76281 --- /dev/null +++ b/FrontEnd/src/app/services/timeline.ts @@ -0,0 +1,702 @@ +import React from "react"; +import XRegExp from "xregexp"; +import { Observable, from, combineLatest, of } from "rxjs"; +import { map, switchMap, startWith } from "rxjs/operators"; +import { uniqBy } from "lodash"; + +import { convertError } from "@/utilities/rxjs"; +import { + TimelineVisibility, + HttpTimelineInfo, + HttpTimelinePatchRequest, + HttpTimelinePostPostRequest, + HttpTimelinePostPostRequestContent, + HttpTimelinePostPostRequestTextContent, + HttpTimelinePostPostRequestImageContent, + HttpTimelinePostInfo, + HttpTimelinePostTextContent, + getHttpTimelineClient, + HttpTimelineNotExistError, + HttpTimelineNameConflictError, +} 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 type TimelineInfo = HttpTimelineInfo; +export type TimelineChangePropertyRequest = HttpTimelinePatchRequest; +export type TimelineCreatePostRequest = HttpTimelinePostPostRequest; +export type TimelineCreatePostContent = HttpTimelinePostPostRequestContent; +export type TimelineCreatePostTextContent = HttpTimelinePostPostRequestTextContent; +export type TimelineCreatePostImageContent = HttpTimelinePostPostRequestImageContent; + +export type TimelinePostTextContent = HttpTimelinePostTextContent; + +export interface TimelinePostImageContent { + type: "image"; + data: BlobOrStatus; +} + +export type TimelinePostContent = + | TimelinePostTextContent + | TimelinePostImageContent; + +export interface TimelinePostInfo { + id: number; + content: TimelinePostContent; + time: Date; + lastUpdated: Date; + author: HttpUser; +} + +export const timelineVisibilityTooltipTranslationMap: Record< + TimelineVisibility, + string +> = { + Public: "timeline.visibilityTooltip.public", + Register: "timeline.visibilityTooltip.register", + Private: "timeline.visibilityTooltip.private", +}; + +export class TimelineNotExistError extends Error {} +export class TimelineNameConflictError extends Error {} + +export type TimelineWithSyncStatus = WithSyncStatus< + | { + type: "cache"; + timeline: TimelineInfo; + } + | { + type: "offline" | "synced"; + timeline: TimelineInfo | null; + } +>; + +export type TimelinePostsWithSyncState = WithSyncStatus<{ + type: + | "cache" + | "offline" // Sync failed and use cache. + | "synced" // Sync succeeded. + | "forbid" // The list is forbidden to see. + | "notexist"; // The timeline does not exist. + posts: TimelinePostInfo[]; +}>; + +type TimelineData = Omit & { + owner: string; + members: string[]; +}; + +type TimelinePostData = Omit & { + author: string; +}; + +export class TimelineService { + private getCachedTimeline( + timelineName: string + ): Promise { + return dataStorage.getItem(`timeline.${timelineName}`); + } + + private saveTimeline( + timelineName: string, + data: TimelineData + ): Promise { + return dataStorage + .setItem(`timeline.${timelineName}`, data) + .then(); + } + + private async clearTimelineData(timelineName: string): Promise { + const keys = (await dataStorage.keys()).filter((k) => + k.startsWith(`timeline.${timelineName}`) + ); + await Promise.all(keys.map((k) => dataStorage.removeItem(k))); + } + + private convertHttpTimelineToData(timeline: HttpTimelineInfo): TimelineData { + return { + ...timeline, + owner: timeline.owner.username, + members: timeline.members.map((m) => m.username), + }; + } + + private _timelineHub = new DataHub< + string, + | { + type: "cache"; + timeline: TimelineData; + } + | { + type: "offline" | "synced"; + timeline: TimelineData | null; + } + >({ + sync: async (key, line) => { + const cache = await this.getCachedTimeline(key); + + if (line.value == undefined) { + if (cache != null) { + line.next({ type: "cache", timeline: cache }); + } + } + + try { + const httpTimeline = await getHttpTimelineClient().getTimeline(key); + + userInfoService.saveUsers([ + httpTimeline.owner, + ...httpTimeline.members, + ]); + + const timeline = this.convertHttpTimelineToData(httpTimeline); + + if (cache != null && timeline.uniqueId !== cache.uniqueId) { + console.log( + `Timeline with name ${key} has changed to a new one. Clear old data.` + ); + await this.clearTimelineData(key); // If timeline has changed, clear all old data. + } + + await this.saveTimeline(key, timeline); + + line.next({ type: "synced", timeline }); + } catch (e) { + if (e instanceof HttpTimelineNotExistError) { + line.next({ type: "synced", timeline: null }); + } else { + if (cache == null) { + line.next({ type: "offline", timeline: null }); + } else { + line.next({ type: "offline", timeline: cache }); + } + throwIfNotNetworkError(e); + } + } + }, + }); + + syncTimeline(timelineName: string): Promise { + return this._timelineHub.getLineOrCreate(timelineName).sync(); + } + + getTimeline$(timelineName: string): Observable { + return this._timelineHub.getDataWithSyncStatusObservable(timelineName).pipe( + switchMap((state) => { + const { timeline } = state; + if (timeline != null) { + return combineLatest( + [timeline.owner, ...timeline.members].map((u) => + userInfoService.getUser$(u) + ) + ).pipe( + map((users) => { + return { + ...state, + timeline: { + ...timeline, + owner: users[0], + members: users.slice(1), + }, + }; + }) + ); + } else { + return of(state as TimelineWithSyncStatus); + } + }) + ); + } + + createTimeline(timelineName: string): Observable { + const user = checkLogin(); + return from( + getHttpTimelineClient().postTimeline( + { + name: timelineName, + }, + user.token + ) + ).pipe( + convertError(HttpTimelineNameConflictError, TimelineNameConflictError) + ); + } + + changeTimelineProperty( + timelineName: string, + req: TimelineChangePropertyRequest + ): Observable { + const user = checkLogin(); + return from( + getHttpTimelineClient() + .patchTimeline(timelineName, req, user.token) + .then((timeline) => { + void this.syncTimeline(timelineName); + return timeline; + }) + ); + } + + deleteTimeline(timelineName: string): Observable { + const user = checkLogin(); + return from( + getHttpTimelineClient().deleteTimeline(timelineName, user.token) + ); + } + + addMember(timelineName: string, username: string): Observable { + const user = checkLogin(); + return from( + getHttpTimelineClient() + .memberPut(timelineName, username, user.token) + .then(() => { + void this.syncTimeline(timelineName); + }) + ); + } + + removeMember(timelineName: string, username: string): Observable { + const user = checkLogin(); + return from( + getHttpTimelineClient() + .memberDelete(timelineName, username, user.token) + .then(() => { + void this.syncTimeline(timelineName); + }) + ); + } + + private convertHttpPostToData(post: HttpTimelinePostInfo): TimelinePostData { + return { + ...post, + author: post.author.username, + }; + } + + private convertHttpPostToDataList( + posts: HttpTimelinePostInfo[] + ): TimelinePostData[] { + return posts.map((post) => this.convertHttpPostToData(post)); + } + + private getCachedPosts( + timelineName: string + ): Promise { + return dataStorage.getItem( + `timeline.${timelineName}.posts` + ); + } + + private savePosts( + timelineName: string, + data: TimelinePostData[] + ): Promise { + return dataStorage + .setItem(`timeline.${timelineName}.posts`, data) + .then(); + } + + private syncPosts(timelineName: string): Promise { + return this._postsHub.getLineOrCreate(timelineName).sync(); + } + + private _postsHub = new DataHub< + string, + { + type: "cache" | "offline" | "synced" | "forbid" | "notexist"; + posts: TimelinePostData[]; + } + >({ + sync: async (key, line) => { + // Wait for timeline synced. In case the timeline has changed to another and old data has been cleaned. + await this.syncTimeline(key); + + if (line.value == null) { + const cache = await this.getCachedPosts(key); + if (cache != null) { + line.next({ type: "cache", posts: cache }); + } + } + + const now = new Date(); + + const lastUpdatedTime = await dataStorage.getItem( + `timeline.${key}.lastUpdated` + ); + + try { + if (lastUpdatedTime == null) { + const httpPosts = await getHttpTimelineClient().listPost( + key, + userService.currentUser?.token + ); + + userInfoService.saveUsers( + uniqBy( + httpPosts.map((post) => post.author), + "username" + ) + ); + + const posts = this.convertHttpPostToDataList(httpPosts); + await this.savePosts(key, posts); + await dataStorage.setItem(`timeline.${key}.lastUpdated`, now); + + line.next({ type: "synced", posts }); + } else { + const httpPosts = await getHttpTimelineClient().listPost( + key, + userService.currentUser?.token, + { + modifiedSince: lastUpdatedTime, + includeDeleted: true, + } + ); + + const deletedIds = httpPosts + .filter((p) => p.deleted) + .map((p) => p.id); + const changed = httpPosts.filter( + (p): p is HttpTimelinePostInfo => !p.deleted + ); + + userInfoService.saveUsers( + uniqBy( + httpPosts + .map((post) => post.author) + .filter((u): u is HttpUser => u != null), + "username" + ) + ); + + const cache = (await this.getCachedPosts(key)) ?? []; + + const posts = cache.filter((p) => !deletedIds.includes(p.id)); + + for (const changedPost of changed) { + const savedChangedPostIndex = posts.findIndex( + (p) => p.id === changedPost.id + ); + if (savedChangedPostIndex === -1) { + posts.push(this.convertHttpPostToData(changedPost)); + } else { + posts[savedChangedPostIndex] = this.convertHttpPostToData( + changedPost + ); + } + } + + await this.savePosts(key, posts); + await dataStorage.setItem(`timeline.${key}.lastUpdated`, now); + line.next({ type: "synced", posts }); + } + } catch (e) { + if (e instanceof HttpTimelineNotExistError) { + line.next({ type: "notexist", posts: [] }); + } else if (e instanceof HttpForbiddenError) { + line.next({ type: "forbid", posts: [] }); + } else { + const cache = await this.getCachedPosts(key); + if (cache == null) { + line.next({ type: "offline", posts: [] }); + } else { + line.next({ type: "offline", posts: cache }); + } + throwIfNotNetworkError(e); + } + } + }, + }); + + getPosts$(timelineName: string): Observable { + return this._postsHub.getDataWithSyncStatusObservable(timelineName).pipe( + switchMap((state) => { + if (state.posts.length === 0) { + return of({ + ...state, + posts: [], + }); + } + + return combineLatest([ + combineLatest( + state.posts.map((post) => userInfoService.getUser$(post.author)) + ), + combineLatest( + state.posts.map((post) => { + if (post.content.type === "image") { + return this.getPostData$(timelineName, post.id); + } else { + return of(null); + } + }) + ), + ]).pipe( + map(([authors, datas]) => { + return { + ...state, + posts: state.posts.map((post, i) => { + const { content } = post; + + return { + ...post, + author: authors[i], + content: (() => { + if (content.type === "text") return content; + else + return { + type: "image", + data: datas[i], + } as TimelinePostImageContent; + })(), + }; + }), + }; + }) + ); + }) + ); + } + + private getCachedPostData(key: { + timelineName: string; + postId: number; + }): Promise { + return dataStorage.getItem( + `timeline.${key.timelineName}.post.${key.postId}.data` + ); + } + + private savePostData( + key: { + timelineName: string; + postId: number; + }, + data: BlobWithEtag + ): Promise { + return dataStorage + .setItem( + `timeline.${key.timelineName}.post.${key.postId}.data`, + data + ) + .then(); + } + + private syncPostData(key: { + timelineName: string; + postId: number; + }): Promise { + return this._postDataHub.getLineOrCreate(key).sync(); + } + + private _postDataHub = new DataHub< + { timelineName: string; postId: number }, + | { data: Blob; type: "cache" | "synced" | "offline" } + | { data?: undefined; type: "notexist" | "offline" } + >({ + keyToString: (key) => `${key.timelineName}.${key.postId}`, + sync: async (key, line) => { + const cache = await this.getCachedPostData(key); + if (line.value == null) { + if (cache != null) { + line.next({ type: "cache", data: cache.data }); + } + } + + if (cache == null) { + try { + const res = await getHttpTimelineClient().getPostData( + key.timelineName, + key.postId + ); + await this.savePostData(key, res); + line.next({ data: res.data, type: "synced" }); + } catch (e) { + line.next({ type: "offline" }); + throwIfNotNetworkError(e); + } + } else { + try { + const res = await getHttpTimelineClient().getPostData( + key.timelineName, + key.postId, + cache.etag + ); + if (res instanceof NotModified) { + line.next({ data: cache.data, type: "synced" }); + } else { + await this.savePostData(key, res); + line.next({ data: res.data, type: "synced" }); + } + } catch (e) { + line.next({ data: cache.data, type: "offline" }); + throwIfNotNetworkError(e); + } + } + }, + }); + + getPostData$(timelineName: string, postId: number): Observable { + return this._postDataHub.getObservable({ timelineName, postId }).pipe( + map((state): BlobOrStatus => state.data ?? "error"), + startWith("loading") + ); + } + + createPost( + timelineName: string, + request: TimelineCreatePostRequest + ): Observable { + const user = checkLogin(); + return from( + getHttpTimelineClient() + .postPost(timelineName, request, user.token) + .then(() => { + void this.syncPosts(timelineName); + }) + ); + } + + deletePost(timelineName: string, postId: number): Observable { + const user = checkLogin(); + return from( + getHttpTimelineClient() + .deletePost(timelineName, postId, user.token) + .then(() => { + void this.syncPosts(timelineName); + }) + ); + } + + isMemberOf(username: string, timeline: TimelineInfo): boolean { + return timeline.members.findIndex((m) => m.username == username) >= 0; + } + + hasReadPermission( + user: UserAuthInfo | null | undefined, + timeline: TimelineInfo + ): boolean { + if (user != null && user.administrator) return true; + + const { visibility } = timeline; + if (visibility === "Public") { + return true; + } else if (visibility === "Register") { + if (user != null) return true; + } else if (visibility === "Private") { + if ( + user != null && + (user.username === timeline.owner.username || + this.isMemberOf(user.username, timeline)) + ) { + return true; + } + } + return false; + } + + hasPostPermission( + user: UserAuthInfo | null | undefined, + timeline: TimelineInfo + ): boolean { + if (user != null && user.administrator) return true; + + return ( + user != null && + (timeline.owner.username === user.username || + this.isMemberOf(user.username, timeline)) + ); + } + + hasManagePermission( + user: UserAuthInfo | null | undefined, + timeline: TimelineInfo + ): boolean { + if (user != null && user.administrator) return true; + + return user != null && user.username == timeline.owner.username; + } + + hasModifyPostPermission( + user: UserAuthInfo | null | undefined, + timeline: TimelineInfo, + post: TimelinePostInfo + ): boolean { + if (user != null && user.administrator) return true; + + return ( + user != null && + (user.username === timeline.owner.username || + user.username === post.author.username) + ); + } +} + +export const timelineService = new TimelineService(); + +const timelineNameReg = XRegExp("^[-_\\p{L}]*$", "u"); + +export function validateTimelineName(name: string): boolean { + return timelineNameReg.test(name); +} + +export function useTimelineInfo( + timelineName: string +): TimelineWithSyncStatus | undefined { + const [state, setState] = React.useState( + undefined + ); + React.useEffect(() => { + const subscription = timelineService + .getTimeline$(timelineName) + .subscribe((data) => { + setState(data); + }); + return () => { + subscription.unsubscribe(); + }; + }, [timelineName]); + return state; +} + +export function usePostList( + timelineName: string | null | undefined +): TimelinePostsWithSyncState | undefined { + const [state, setState] = React.useState< + TimelinePostsWithSyncState | undefined + >(undefined); + React.useEffect(() => { + if (timelineName == null) { + setState(undefined); + return; + } + + const subscription = timelineService + .getPosts$(timelineName) + .subscribe((data) => { + setState(data); + }); + return () => { + subscription.unsubscribe(); + }; + }, [timelineName]); + return state; +} + +export async function getAllCachedTimelineNames(): Promise { + const keys = await dataStorage.keys(); + return keys + .filter( + (key) => + key.startsWith("timeline.") && (key.match(/\./g) ?? []).length === 1 + ) + .map((key) => key.substr("timeline.".length)); +} diff --git a/FrontEnd/src/app/services/user.ts b/FrontEnd/src/app/services/user.ts new file mode 100644 index 00000000..f253fc19 --- /dev/null +++ b/FrontEnd/src/app/services/user.ts @@ -0,0 +1,393 @@ +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 { HttpNetworkError, BlobWithEtag, NotModified } from "@/http/common"; +import { + getHttpTokenClient, + HttpCreateTokenBadCredentialError, +} from "@/http/token"; +import { + getHttpUserClient, + HttpUserNotExistError, + HttpUser, +} from "@/http/user"; + +import { dataStorage, throwIfNotNetworkError } from "./common"; +import { DataHub } from "./DataHub"; +import { pushAlert } from "./alert"; + +export type User = HttpUser; + +export interface UserAuthInfo { + username: string; + administrator: boolean; +} + +export interface UserWithToken extends User { + token: string; +} + +export interface LoginCredentials { + username: string; + password: string; +} + +export class BadCredentialError { + message = "login.badCredential"; +} + +const USER_STORAGE_KEY = "currentuser"; + +export class UserService { + private userSubject = new BehaviorSubject( + undefined + ); + + get user$(): Observable { + return this.userSubject; + } + + get currentUser(): UserWithToken | null | undefined { + return this.userSubject.value; + } + + async checkLoginState(): Promise { + if (this.currentUser !== undefined) { + console.warn("Already checked user. Can't check twice."); + } + + const savedUser = await dataStorage.getItem( + USER_STORAGE_KEY + ); + + if (savedUser == null) { + this.userSubject.next(null); + return null; + } + + this.userSubject.next(savedUser); + + const savedToken = savedUser.token; + try { + const res = await getHttpTokenClient().verify({ token: savedToken }); + const user: UserWithToken = { ...res.user, token: savedToken }; + await dataStorage.setItem(USER_STORAGE_KEY, user); + this.userSubject.next(user); + pushAlert({ + type: "success", + message: { + type: "i18n", + key: "user.welcomeBack", + }, + }); + return user; + } catch (error) { + if (error instanceof HttpNetworkError) { + pushAlert({ + type: "danger", + message: { type: "i18n", key: "user.verifyTokenFailedNetwork" }, + }); + return savedUser; + } else { + await dataStorage.removeItem(USER_STORAGE_KEY); + this.userSubject.next(null); + pushAlert({ + type: "danger", + message: { type: "i18n", key: "user.verifyTokenFailed" }, + }); + return null; + } + } + } + + async login( + credentials: LoginCredentials, + rememberMe: boolean + ): Promise { + if (this.currentUser) { + throw new UiLogicError("Already login."); + } + try { + const res = await getHttpTokenClient().create({ + ...credentials, + expire: 30, + }); + const user: UserWithToken = { + ...res.user, + token: res.token, + }; + if (rememberMe) { + await dataStorage.setItem(USER_STORAGE_KEY, user); + } + this.userSubject.next(user); + } catch (e) { + if (e instanceof HttpCreateTokenBadCredentialError) { + throw new BadCredentialError(); + } else { + throw e; + } + } + } + + async logout(): Promise { + if (this.currentUser === undefined) { + throw new UiLogicError("Please check user first."); + } + if (this.currentUser === null) { + throw new UiLogicError("No login."); + } + await dataStorage.removeItem(USER_STORAGE_KEY); + this.userSubject.next(null); + } + + changePassword( + oldPassword: string, + newPassword: string + ): Observable { + if (this.currentUser == undefined) { + throw new UiLogicError("Not login or checked now, can't log out."); + } + const $ = from( + getHttpUserClient().changePassword( + { + oldPassword, + newPassword, + }, + this.currentUser.token + ) + ); + $.subscribe(() => { + void this.logout(); + }); + return $; + } +} + +export const userService = new UserService(); + +export function useRawUser(): UserWithToken | null | undefined { + const [user, setUser] = useState( + userService.currentUser + ); + useEffect(() => { + const subscription = userService.user$.subscribe((u) => setUser(u)); + return () => { + subscription.unsubscribe(); + }; + }); + return user; +} + +export function useUser(): UserWithToken | null { + const [user, setUser] = useState(() => { + const initUser = userService.currentUser; + if (initUser === undefined) { + throw new UiLogicError( + "This is a logic error in user module. Current user can't be undefined in useUser." + ); + } + return initUser; + }); + useEffect(() => { + const sub = userService.user$.subscribe((u) => { + if (u === undefined) { + throw new UiLogicError( + "This is a logic error in user module. User emitted can't be undefined later." + ); + } + setUser(u); + }); + return () => { + sub.unsubscribe(); + }; + }); + return user; +} + +export function useUserLoggedIn(): UserWithToken { + const user = useUser(); + if (user == null) { + throw new UiLogicError("You assert user has logged in but actually not."); + } + return user; +} + +export function checkLogin(): UserWithToken { + const user = userService.currentUser; + if (user == null) { + throw new UiLogicError("You must login to perform the operation."); + } + return user; +} + +export class UserNotExistError extends Error {} + +export class UserInfoService { + saveUser(user: HttpUser): void { + const key = user.username; + void this._userHub.optionalInitLineWithSyncAction(key, async (line) => { + await this.doSaveUser(user); + line.next({ user, type: "synced" }); + }); + } + + saveUsers(users: HttpUser[]): void { + return users.forEach((user) => this.saveUser(user)); + } + + private getCachedUser(username: string): Promise { + return dataStorage.getItem(`user.${username}`); + } + + private doSaveUser(user: HttpUser): Promise { + return dataStorage.setItem(`user.${user.username}`, user).then(); + } + + syncUser(username: string): Promise { + return this._userHub.getLineOrCreate(username).sync(); + } + + private _userHub = new DataHub< + string, + | { user: User; type: "cache" | "synced" | "offline" } + | { user?: undefined; type: "notexist" | "offline" } + >({ + sync: async (key, line) => { + if (line.value == undefined) { + const cache = await this.getCachedUser(key); + if (cache != null) { + line.next({ user: cache, type: "cache" }); + } + } + + try { + const res = await getHttpUserClient().get(key); + await this.doSaveUser(res); + line.next({ user: res, type: "synced" }); + } catch (e) { + if (e instanceof HttpUserNotExistError) { + line.next({ type: "notexist" }); + } else { + const cache = await this.getCachedUser(key); + line.next({ user: cache ?? undefined, type: "offline" }); + throwIfNotNetworkError(e); + } + } + }, + }); + + getUser$(username: string): Observable { + return this._userHub.getObservable(username).pipe( + map((state) => state?.user), + filter((user): user is User => user != null) + ); + } + + private getCachedAvatar(username: string): Promise { + return dataStorage.getItem(`user.${username}.avatar`); + } + + private saveAvatar(username: string, data: BlobWithEtag): Promise { + return dataStorage + .setItem(`user.${username}.avatar`, data) + .then(); + } + + syncAvatar(username: string): Promise { + return this._avatarHub.getLineOrCreate(username).sync(); + } + + private _avatarHub = new DataHub< + string, + | { data: Blob; type: "cache" | "synced" | "offline" } + | { data?: undefined; type: "notexist" | "offline" } + >({ + sync: async (key, line) => { + const cache = await this.getCachedAvatar(key); + if (line.value == null) { + if (cache != null) { + line.next({ data: cache.data, type: "cache" }); + } + } + + if (cache == null) { + try { + const avatar = await getHttpUserClient().getAvatar(key); + await this.saveAvatar(key, avatar); + line.next({ data: avatar.data, type: "synced" }); + } catch (e) { + line.next({ type: "offline" }); + throwIfNotNetworkError(e); + } + } else { + try { + const res = await getHttpUserClient().getAvatar(key, cache.etag); + if (res instanceof NotModified) { + line.next({ data: cache.data, type: "synced" }); + } else { + const avatar = res; + await this.saveAvatar(key, avatar); + line.next({ data: avatar.data, type: "synced" }); + } + } catch (e) { + line.next({ data: cache.data, type: "offline" }); + throwIfNotNetworkError(e); + } + } + }, + }); + + getAvatar$(username: string): Observable { + return this._avatarHub.getObservable(username).pipe( + map((state) => state.data), + filter((blob): blob is Blob => blob != null) + ); + } + + getUserInfo(username: string): Observable { + return from(getHttpUserClient().get(username)).pipe( + convertError(HttpUserNotExistError, UserNotExistError) + ); + } + + async setAvatar(username: string, blob: Blob): Promise { + const user = checkLogin(); + await getHttpUserClient().putAvatar(username, blob, user.token); + this._avatarHub.getLine(username)?.next({ data: blob, type: "synced" }); + } + + async setNickname(username: string, nickname: string): Promise { + const user = checkLogin(); + return getHttpUserClient() + .patch(username, { nickname }, user.token) + .then((user) => { + this.saveUser(user); + }); + } +} + +export const userInfoService = new UserInfoService(); + +export function useAvatar(username?: string): Blob | undefined { + const [state, setState] = React.useState(undefined); + React.useEffect(() => { + if (username == null) { + setState(undefined); + return; + } + + const subscription = userInfoService + .getAvatar$(username) + .subscribe((blob) => { + setState(blob); + }); + return () => { + subscription.unsubscribe(); + }; + }, [username]); + return state; +} diff --git a/FrontEnd/src/app/tsconfig.json b/FrontEnd/src/app/tsconfig.json new file mode 100644 index 00000000..17ee69cb --- /dev/null +++ b/FrontEnd/src/app/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "esnext" + ] + }, + "include": [ + "." + ] +} diff --git a/FrontEnd/src/app/typings.d.ts b/FrontEnd/src/app/typings.d.ts new file mode 100644 index 00000000..34381682 --- /dev/null +++ b/FrontEnd/src/app/typings.d.ts @@ -0,0 +1,24 @@ +declare module "*.png" { + const content: string; + export default content; +} + +declare module "*.jpeg" { + const content: string; + export default content; +} + +declare module "*.jpg" { + const content: string; + export default content; +} + +declare module "*.gif" { + const content: string; + export default content; +} + +declare module "*.svg" { + const content: string; + export default content; +} diff --git a/FrontEnd/src/app/utilities/rxjs.ts b/FrontEnd/src/app/utilities/rxjs.ts new file mode 100644 index 00000000..0730b899 --- /dev/null +++ b/FrontEnd/src/app/utilities/rxjs.ts @@ -0,0 +1,14 @@ +import { OperatorFunction } from "rxjs"; +import { catchError } from "rxjs/operators"; + +export function convertError( + oldErrorType: { new (...args: never[]): unknown }, + newErrorType: { new (): NewError } +): OperatorFunction { + return catchError((error) => { + if (error instanceof oldErrorType) { + throw new newErrorType(); + } + throw error; + }); +} diff --git a/FrontEnd/src/app/utilities/url.ts b/FrontEnd/src/app/utilities/url.ts new file mode 100644 index 00000000..17ead5b2 --- /dev/null +++ b/FrontEnd/src/app/utilities/url.ts @@ -0,0 +1,52 @@ +//copied from https://stackoverflow.com/questions/5999118/how-can-i-add-or-update-a-query-string-parameter +export function updateQueryString( + key: string, + value: undefined | string | null, + url: string +): string { + const re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"); + let hash; + + if (re.test(url)) { + if (typeof value !== "undefined" && value !== null) { + return url.replace(re, "$1" + key + "=" + value + "$2$3"); + } else { + hash = url.split("#"); + url = hash[0].replace(re, "$1$3").replace(/(&|\?)$/, ""); + if (typeof hash[1] !== "undefined" && hash[1] !== null) { + url += "#" + hash[1]; + } + return url; + } + } else { + if (typeof value !== "undefined" && value !== null) { + const separator = url.includes("?") ? "&" : "?"; + hash = url.split("#"); + url = hash[0] + separator + key + "=" + value; + if (typeof hash[1] !== "undefined" && hash[1] !== null) { + url += "#" + hash[1]; + } + return url; + } else { + return url; + } + } +} + +export function applyQueryParameters(url: string, query: T): string { + if (query == null) return url; + + for (const [key, value] of Object.entries(query)) { + if (typeof value === "string") url = updateQueryString(key, value, url); + else if (typeof value === "number") + url = updateQueryString(key, String(value), url); + else if (typeof value === "boolean") + url = updateQueryString(key, value ? "true" : "false", url); + else if (value instanceof Date) + url = updateQueryString(key, value.toISOString(), url); + else { + console.error("Unknown query parameter type. Param: ", value); + } + } + return url; +} diff --git a/FrontEnd/src/app/views/about/about.sass b/FrontEnd/src/app/views/about/about.sass new file mode 100644 index 00000000..f4d00cae --- /dev/null +++ b/FrontEnd/src/app/views/about/about.sass @@ -0,0 +1,4 @@ +.about-link-icon + @extend .mx-2 + width: 1.2em + height: 1.2em diff --git a/FrontEnd/src/app/views/about/author-avatar.png b/FrontEnd/src/app/views/about/author-avatar.png new file mode 100644 index 00000000..d890d8d0 Binary files /dev/null and b/FrontEnd/src/app/views/about/author-avatar.png differ diff --git a/FrontEnd/src/app/views/about/github.png b/FrontEnd/src/app/views/about/github.png new file mode 100644 index 00000000..ea6ff545 Binary files /dev/null and b/FrontEnd/src/app/views/about/github.png differ diff --git a/FrontEnd/src/app/views/about/index.tsx b/FrontEnd/src/app/views/about/index.tsx new file mode 100644 index 00000000..e7771cec --- /dev/null +++ b/FrontEnd/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 ( +
+
+

{t("about.author.title")}

+
+
+ +
+

+ {t("about.author.fullname")} + 杨宇千 +

+

+ {t("about.author.nickname")} + crupest +

+

+ {t("about.author.introduction")} + {t("about.author.introductionContent")} +

+
+
+

+ {t("about.author.links")} + + + +

+
+
+
+

{t("about.site.title")}

+

+ + 01234 + 56 + +

+

+ + {t("about.site.repo")} + +

+
+
+

{t("about.credits.title")}

+

{t("about.credits.content")}

+

{t("about.credits.frontend")}

+
    + {frontendCredits.map((item, index) => { + return ( +
  • + + {item.name} + +
  • + ); + })} +
  • ...
  • +
+

{t("about.credits.backend")}

+
    + {backendCredits.map((item, index) => { + return ( +
  • + + {item.name} + +
  • + ); + })} +
  • ...
  • +
+
+
+ ); +}; + +export default AboutPage; diff --git a/FrontEnd/src/app/views/admin/Admin.tsx b/FrontEnd/src/app/views/admin/Admin.tsx new file mode 100644 index 00000000..9c0250e7 --- /dev/null +++ b/FrontEnd/src/app/views/admin/Admin.tsx @@ -0,0 +1,75 @@ +import React, { Fragment } from "react"; +import { + Redirect, + Route, + Switch, + useRouteMatch, + useHistory, +} from "react-router"; +import { Nav } from "react-bootstrap"; + +import { UserWithToken } from "@/services/user"; + +import UserAdmin from "./UserAdmin"; + +interface AdminProps { + user: UserWithToken; +} + +const Admin: React.FC = (props) => { + const match = useRouteMatch(); + const history = useHistory(); + type TabNames = "users" | "more"; + + const tabName = history.location.pathname.replace(match.path + "/", ""); + + function toggle(newTab: TabNames): void { + history.push(`${match.url}/${newTab}`); + } + + const createRoute = ( + name: string, + body: React.ReactNode + ): React.ReactNode => { + return ( + +
+ + {body} + + ); + }; + + return ( + + + + {createRoute("users", )} + {createRoute("more",
More Page Works
)} +
+
+ ); +}; + +export default Admin; diff --git a/FrontEnd/src/app/views/admin/UserAdmin.tsx b/FrontEnd/src/app/views/admin/UserAdmin.tsx new file mode 100644 index 00000000..18b77ca8 --- /dev/null +++ b/FrontEnd/src/app/views/admin/UserAdmin.tsx @@ -0,0 +1,460 @@ +import React, { useState, useEffect } from "react"; +import axios from "axios"; +import { + ListGroup, + Row, + Col, + Dropdown, + Spinner, + Button, +} from "react-bootstrap"; + +import OperationDialog from "../common/OperationDialog"; +import { User, UserWithToken } from "@/services/user"; + +const apiBaseUrl = "/api"; + +async function fetchUserList(_token: string): Promise { + const res = await axios.get(`${apiBaseUrl}/users`); + return res.data; +} + +interface CreateUserInfo { + username: string; + password: string; + administrator: boolean; +} + +async function createUser(user: CreateUserInfo, token: string): Promise { + const res = await axios.post( + `${apiBaseUrl}/userop/createuser?token=${token}`, + user + ); + return res.data; +} + +function deleteUser(username: string, token: string): Promise { + return axios.delete(`${apiBaseUrl}/users/${username}?token=${token}`); +} + +function changeUsername( + oldUsername: string, + newUsername: string, + token: string +): Promise { + return axios.patch(`${apiBaseUrl}/users/${oldUsername}?token=${token}`, { + username: newUsername, + }); +} + +function changePassword( + username: string, + newPassword: string, + token: string +): Promise { + return axios.patch(`${apiBaseUrl}/users/${username}?token=${token}`, { + password: newPassword, + }); +} + +function changePermission( + username: string, + newPermission: boolean, + token: string +): Promise { + return axios.patch(`${apiBaseUrl}/users/${username}?token=${token}`, { + administrator: newPermission, + }); +} + +const kChangeUsername = "changeusername"; +const kChangePassword = "changepassword"; +const kChangePermission = "changepermission"; +const kDelete = "delete"; + +type TChangeUsername = typeof kChangeUsername; +type TChangePassword = typeof kChangePassword; +type TChangePermission = typeof kChangePermission; +type TDelete = typeof kDelete; + +type ContextMenuItem = + | TChangeUsername + | TChangePassword + | TChangePermission + | TDelete; + +interface UserCardProps { + onContextMenu: (item: ContextMenuItem) => void; + user: User; +} + +const UserItem: React.FC = (props) => { + const user = props.user; + + const createClickCallback = (item: ContextMenuItem): (() => void) => { + return () => { + props.onContextMenu(item); + }; + }; + + return ( + + + +

{user.username}

+ + {user.administrator ? "administrator" : "user"} + + + + + + Manage + + + + Change Username + + + Change Password + + + Change Permission + + + Delete + + + + +
+
+ ); +}; + +interface DialogProps { + open: boolean; + close: () => void; +} + +interface CreateUserDialogProps extends DialogProps { + process: (user: CreateUserInfo) => Promise; +} + +const CreateUserDialog: React.FC = (props) => { + return ( + + props.process({ + username: username as string, + password: password as string, + administrator: administrator as boolean, + }) + } + close={props.close} + open={props.open} + /> + ); +}; + +const UsernameLabel: React.FC = (props) => { + return {props.children}; +}; + +interface UserDeleteDialogProps extends DialogProps { + username: string; + process: () => Promise; +} + +const UserDeleteDialog: React.FC = (props) => { + return ( + ( + <> + {"You are deleting user "} + {props.username} + {" !"} + + )} + onProcess={props.process} + /> + ); +}; + +interface UserModifyDialogProps extends DialogProps { + username: string; + process: (value: T) => Promise; +} + +const UserChangeUsernameDialog: React.FC> = ( + props +) => { + return ( + ( + <> + {"You are change the username of user "} + {props.username} + {" !"} + + )} + inputScheme={[{ type: "text", label: "New Username" }]} + onProcess={([newUsername]) => { + return props.process(newUsername as string); + }} + /> + ); +}; + +const UserChangePasswordDialog: React.FC> = ( + props +) => { + return ( + ( + <> + {"You are change the password of user "} + {props.username} + {" !"} + + )} + inputScheme={[{ type: "text", label: "New Password" }]} + onProcess={([newPassword]) => { + return props.process(newPassword as string); + }} + /> + ); +}; + +interface UserChangePermissionDialogProps extends DialogProps { + username: string; + newPermission: boolean; + process: () => Promise; +} + +const UserChangePermissionDialog: React.FC = ( + props +) => { + return ( + ( + <> + {"You are change user "} + {props.username} + {" to "} + + {props.newPermission ? "administrator" : "normal user"} + + {" !"} + + )} + onProcess={props.process} + /> + ); +}; + +interface UserAdminProps { + user: UserWithToken; +} + +const UserAdmin: React.FC = (props) => { + type DialogInfo = + | null + | { + type: "create"; + } + | { type: TDelete; username: string } + | { + type: TChangeUsername; + username: string; + } + | { + type: TChangePassword; + username: string; + } + | { + type: TChangePermission; + username: string; + newPermission: boolean; + }; + + const [users, setUsers] = useState(null); + const [dialog, setDialog] = useState(null); + + const token = props.user.token; + + useEffect(() => { + let subscribe = true; + void fetchUserList(props.user.token).then((us) => { + if (subscribe) { + setUsers(us); + } + }); + return () => { + subscribe = false; + }; + }, [props.user]); + + let dialogNode: React.ReactNode; + if (dialog) + switch (dialog.type) { + case "create": + dialogNode = ( + setDialog(null)} + process={async (user) => { + const u = await createUser(user, token); + setUsers((oldUsers) => [...(oldUsers ?? []), u]); + }} + /> + ); + break; + case "delete": + dialogNode = ( + setDialog(null)} + username={dialog.username} + process={async () => { + await deleteUser(dialog.username, token); + setUsers((oldUsers) => + (oldUsers ?? []).filter((u) => u.username !== dialog.username) + ); + }} + /> + ); + break; + case kChangeUsername: + dialogNode = ( + setDialog(null)} + username={dialog.username} + process={async (newUsername) => { + await changeUsername(dialog.username, newUsername, token); + setUsers((oldUsers) => { + const users = (oldUsers ?? []).slice(); + const findedUser = users.find( + (u) => u.username === dialog.username + ); + if (findedUser) findedUser.username = newUsername; + return users; + }); + }} + /> + ); + break; + case kChangePassword: + dialogNode = ( + setDialog(null)} + username={dialog.username} + process={async (newPassword) => { + await changePassword(dialog.username, newPassword, token); + }} + /> + ); + break; + case kChangePermission: { + const newPermission = dialog.newPermission; + dialogNode = ( + setDialog(null)} + username={dialog.username} + newPermission={newPermission} + process={async () => { + await changePermission(dialog.username, newPermission, token); + setUsers((oldUsers) => { + const users = (oldUsers ?? []).slice(); + const findedUser = users.find( + (u) => u.username === dialog.username + ); + if (findedUser) findedUser.administrator = newPermission; + return users; + }); + }} + /> + ); + break; + } + } + + if (users) { + const userComponents = users.map((user) => { + return ( + { + setDialog( + item === kChangePermission + ? { + type: kChangePermission, + username: user.username, + newPermission: !user.administrator, + } + : { + type: item, + username: user.username, + } + ); + }} + /> + ); + }); + + return ( + <> + + {userComponents} + {dialogNode} + + ); + } else { + return ; + } +}; + +export default UserAdmin; diff --git a/FrontEnd/src/app/views/common/AppBar.tsx b/FrontEnd/src/app/views/common/AppBar.tsx new file mode 100644 index 00000000..ee4ead8f --- /dev/null +++ b/FrontEnd/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 ( + + + + + Timeline + + + + + + + + + + ); +}; + +export default AppBar; diff --git a/FrontEnd/src/app/views/common/BlobImage.tsx b/FrontEnd/src/app/views/common/BlobImage.tsx new file mode 100644 index 00000000..0dd25c52 --- /dev/null +++ b/FrontEnd/src/app/views/common/BlobImage.tsx @@ -0,0 +1,27 @@ +import React from "react"; + +const BlobImage: React.FC< + Omit, "src"> & { + blob?: Blob | unknown; + } +> = (props) => { + const { blob, ...otherProps } = props; + + const [url, setUrl] = React.useState(undefined); + + React.useEffect(() => { + if (blob instanceof Blob) { + const url = URL.createObjectURL(blob); + setUrl(url); + return () => { + URL.revokeObjectURL(url); + }; + } else { + setUrl(undefined); + } + }, [blob]); + + return ; +}; + +export default BlobImage; diff --git a/FrontEnd/src/app/views/common/ImageCropper.tsx b/FrontEnd/src/app/views/common/ImageCropper.tsx new file mode 100644 index 00000000..b9db8b99 --- /dev/null +++ b/FrontEnd/src/app/views/common/ImageCropper.tsx @@ -0,0 +1,306 @@ +import React from "react"; +import clsx from "clsx"; + +import { UiLogicError } from "@/common"; + +export interface Clip { + left: number; + top: number; + width: number; +} + +interface NormailizedClip extends Clip { + height: number; +} + +interface ImageInfo { + width: number; + height: number; + landscape: boolean; + ratio: number; + maxClipWidth: number; + maxClipHeight: number; +} + +interface ImageCropperSavedState { + clip: NormailizedClip; + x: number; + y: number; + pointerId: number; +} + +export interface ImageCropperProps { + clip: Clip | null; + imageUrl: string; + onChange: (clip: Clip) => void; + imageElementCallback?: (element: HTMLImageElement | null) => void; + className?: string; +} + +const ImageCropper = (props: ImageCropperProps): React.ReactElement => { + const { clip, imageUrl, onChange, imageElementCallback, className } = props; + + const [oldState, setOldState] = React.useState( + null + ); + const [imageInfo, setImageInfo] = React.useState(null); + + const normalizeClip = (c: Clip | null | undefined): NormailizedClip => { + if (c == null) { + return { left: 0, top: 0, width: 0, height: 0 }; + } + + return { + left: c.left || 0, + top: c.top || 0, + width: c.width || 0, + height: imageInfo != null ? (c.width || 0) / imageInfo.ratio : 0, + }; + }; + + const c = normalizeClip(clip); + + const imgElementRef = React.useRef(null); + + const onImageRef = React.useCallback( + (e: HTMLImageElement | null) => { + imgElementRef.current = e; + if (imageElementCallback != null && e == null) { + imageElementCallback(null); + } + }, + [imageElementCallback] + ); + + const onImageLoad = React.useCallback( + (e: React.SyntheticEvent) => { + const img = e.currentTarget; + const landscape = img.naturalWidth >= img.naturalHeight; + + const info = { + width: img.naturalWidth, + height: img.naturalHeight, + landscape, + ratio: img.naturalHeight / img.naturalWidth, + maxClipWidth: landscape ? img.naturalHeight / img.naturalWidth : 1, + maxClipHeight: landscape ? 1 : img.naturalWidth / img.naturalHeight, + }; + setImageInfo(info); + onChange({ left: 0, top: 0, width: info.maxClipWidth }); + if (imageElementCallback != null) { + imageElementCallback(img); + } + }, + [onChange, imageElementCallback] + ); + + const onPointerDown = React.useCallback( + (e: React.PointerEvent) => { + if (oldState != null) return; + e.currentTarget.setPointerCapture(e.pointerId); + setOldState({ + x: e.clientX, + y: e.clientY, + clip: c, + pointerId: e.pointerId, + }); + }, + [oldState, c] + ); + + const onPointerUp = React.useCallback( + (e: React.PointerEvent) => { + if (oldState == null || oldState.pointerId !== e.pointerId) return; + e.currentTarget.releasePointerCapture(e.pointerId); + setOldState(null); + }, + [oldState] + ); + + const onPointerMove = React.useCallback( + (e: React.PointerEvent) => { + if (oldState == null) return; + + const oldClip = oldState.clip; + + const movement = { x: e.clientX - oldState.x, y: e.clientY - oldState.y }; + + const { current: imgElement } = imgElementRef; + + if (imgElement == null) throw new UiLogicError("Image element is null."); + + const moveRatio = { + x: movement.x / imgElement.width, + y: movement.y / imgElement.height, + }; + + const newRatio = { + x: oldClip.left + moveRatio.x, + y: oldClip.top + moveRatio.y, + }; + if (newRatio.x < 0) { + newRatio.x = 0; + } else if (newRatio.x > 1 - oldClip.width) { + newRatio.x = 1 - oldClip.width; + } + if (newRatio.y < 0) { + newRatio.y = 0; + } else if (newRatio.y > 1 - oldClip.height) { + newRatio.y = 1 - oldClip.height; + } + + onChange({ left: newRatio.x, top: newRatio.y, width: oldClip.width }); + }, + [oldState, onChange] + ); + + const onHandlerPointerMove = React.useCallback( + (e: React.PointerEvent) => { + if (oldState == null) return; + + const oldClip = oldState.clip; + + const movement = { x: e.clientX - oldState.x, y: e.clientY - oldState.y }; + + const ratio = imageInfo == null ? 1 : imageInfo.ratio; + + const { current: imgElement } = imgElementRef; + + if (imgElement == null) throw new UiLogicError("Image element is null."); + + const moveRatio = { + x: movement.x / imgElement.width, + y: movement.x / imgElement.width / ratio, + }; + + const newRatio = { + x: oldClip.width + moveRatio.x, + y: oldClip.height + moveRatio.y, + }; + + const maxRatio = { + x: Math.min(1 - oldClip.left, newRatio.x), + y: Math.min(1 - oldClip.top, newRatio.y), + }; + + const maxWidthRatio = Math.min(maxRatio.x, maxRatio.y * ratio); + + let newWidth; + if (newRatio.x < 0) { + newWidth = 0; + } else if (newRatio.x > maxWidthRatio) { + newWidth = maxWidthRatio; + } else { + newWidth = newRatio.x; + } + + onChange({ left: oldClip.left, top: oldClip.top, width: newWidth }); + }, + [imageInfo, oldState, onChange] + ); + + const toPercentage = (n: number): string => `${n}%`; + + // fuck!!! I just can't find a better way to implement this in pure css + const containerStyle: React.CSSProperties = (() => { + if (imageInfo == null) { + return { width: "100%", paddingTop: "100%", height: 0 }; + } else { + if (imageInfo.ratio > 1) { + return { + width: toPercentage(100 / imageInfo.ratio), + paddingTop: "100%", + height: 0, + }; + } else { + return { + width: "100%", + paddingTop: toPercentage(100 * imageInfo.ratio), + height: 0, + }; + } + } + })(); + + return ( +
+ to crop +
+
+
+
+
+ ); +}; + +export default ImageCropper; + +export function applyClipToImage( + image: HTMLImageElement, + clip: Clip, + mimeType: string +): Promise { + return new Promise((resolve, reject) => { + const naturalSize = { + width: image.naturalWidth, + height: image.naturalHeight, + }; + const clipArea = { + x: naturalSize.width * clip.left, + y: naturalSize.height * clip.top, + length: naturalSize.width * clip.width, + }; + + const canvas = document.createElement("canvas"); + canvas.width = clipArea.length; + canvas.height = clipArea.length; + const context = canvas.getContext("2d"); + + if (context == null) throw new Error("Failed to create context."); + + context.drawImage( + image, + clipArea.x, + clipArea.y, + clipArea.length, + clipArea.length, + 0, + 0, + clipArea.length, + clipArea.length + ); + + canvas.toBlob((blob) => { + if (blob == null) { + reject(new Error("canvas.toBlob returns null")); + } else { + resolve(blob); + } + }, mimeType); + }); +} diff --git a/FrontEnd/src/app/views/common/LoadingButton.tsx b/FrontEnd/src/app/views/common/LoadingButton.tsx new file mode 100644 index 00000000..154334a7 --- /dev/null +++ b/FrontEnd/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 ( + + ); +}; + +export default LoadingButton; diff --git a/FrontEnd/src/app/views/common/LoadingPage.tsx b/FrontEnd/src/app/views/common/LoadingPage.tsx new file mode 100644 index 00000000..590fafa0 --- /dev/null +++ b/FrontEnd/src/app/views/common/LoadingPage.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import { Spinner } from "react-bootstrap"; + +const LoadingPage: React.FC = () => { + return ( +
+ +
+ ); +}; + +export default LoadingPage; diff --git a/FrontEnd/src/app/views/common/OperationDialog.tsx b/FrontEnd/src/app/views/common/OperationDialog.tsx new file mode 100644 index 00000000..841392a6 --- /dev/null +++ b/FrontEnd/src/app/views/common/OperationDialog.tsx @@ -0,0 +1,364 @@ +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Form, Button, Modal } from "react-bootstrap"; + +import { UiLogicError } from "@/common"; + +import LoadingButton from "./LoadingButton"; + +interface DefaultErrorPromptProps { + error?: string; +} + +const DefaultErrorPrompt: React.FC = (props) => { + const { t } = useTranslation(); + + let result =

{t("operationDialog.error")}

; + + if (props.error != null) { + result = ( + <> + {result} +

{props.error}

+ + ); + } + + return result; +}; + +export type OperationInputOptionalError = undefined | null | string; + +export interface OperationInputErrorInfo { + [index: number]: OperationInputOptionalError; +} + +export type OperationInputValidator = ( + value: TValue, + values: (string | boolean)[] +) => OperationInputOptionalError | OperationInputErrorInfo; + +export interface OperationTextInputInfo { + type: "text"; + password?: boolean; + label?: string; + initValue?: string; + textFieldProps?: Omit< + React.InputHTMLAttributes, + "type" | "value" | "onChange" | "aria-relevant" + >; + helperText?: string; + validator?: OperationInputValidator; +} + +export interface OperationBoolInputInfo { + type: "bool"; + label: string; + initValue?: boolean; +} + +export interface OperationSelectInputInfoOption { + value: string; + label: string; + icon?: React.ReactElement; +} + +export interface OperationSelectInputInfo { + type: "select"; + label: string; + options: OperationSelectInputInfoOption[]; + initValue?: string; +} + +export type OperationInputInfo = + | OperationTextInputInfo + | OperationBoolInputInfo + | OperationSelectInputInfo; + +interface OperationResult { + type: "success" | "failure"; + data: unknown; +} + +interface OperationDialogProps { + open: boolean; + close: () => void; + title: React.ReactNode; + titleColor?: "default" | "dangerous" | "create" | string; + onProcess: (inputs: (string | boolean)[]) => Promise; + inputScheme?: OperationInputInfo[]; + inputPrompt?: string | (() => React.ReactNode); + processPrompt?: () => React.ReactNode; + successPrompt?: (data: unknown) => React.ReactNode; + failurePrompt?: (error: unknown) => React.ReactNode; + onSuccessAndClose?: () => void; +} + +const OperationDialog: React.FC = (props) => { + const inputScheme = props.inputScheme ?? []; + + const { t } = useTranslation(); + + type Step = "input" | "process" | OperationResult; + const [step, setStep] = useState("input"); + const [values, setValues] = useState<(boolean | string)[]>( + inputScheme.map((i) => { + if (i.type === "bool") { + return i.initValue ?? false; + } else if (i.type === "text" || i.type === "select") { + return i.initValue ?? ""; + } else { + throw new UiLogicError("Unknown input scheme."); + } + }) + ); + const [inputError, setInputError] = useState({}); + + const close = (): void => { + if (step !== "process") { + props.close(); + if ( + typeof step === "object" && + step.type === "success" && + props.onSuccessAndClose + ) { + props.onSuccessAndClose(); + } + } else { + console.log("Attempt to close modal when processing."); + } + }; + + const onConfirm = (): void => { + setStep("process"); + props.onProcess(values).then( + (d: unknown) => { + setStep({ + type: "success", + data: d, + }); + }, + (e: unknown) => { + setStep({ + type: "failure", + data: e, + }); + } + ); + }; + + let body: React.ReactNode; + if (step === "input" || step === "process") { + const process = step === "process"; + + let inputPrompt = + typeof props.inputPrompt === "function" + ? props.inputPrompt() + : props.inputPrompt; + inputPrompt =
{inputPrompt}
; + + const updateValue = ( + index: number, + newValue: string | boolean + ): (string | boolean)[] => { + const oldValues = values; + const newValues = oldValues.slice(); + newValues[index] = newValue; + setValues(newValues); + return newValues; + }; + + const testErrorInfo = (errorInfo: OperationInputErrorInfo): boolean => { + for (let i = 0; i < inputScheme.length; i++) { + if (inputScheme[i].type === "text" && errorInfo[i] != null) { + return true; + } + } + return false; + }; + + const calculateError = ( + oldError: OperationInputErrorInfo, + index: number, + newError: OperationInputOptionalError | OperationInputErrorInfo + ): OperationInputErrorInfo => { + if (newError === undefined) { + return oldError; + } else if (newError === null || typeof newError === "string") { + return { ...oldError, [index]: newError }; + } else { + const newInputError: OperationInputErrorInfo = { ...oldError }; + for (const [index, error] of Object.entries(newError)) { + if (error !== undefined) { + newInputError[+index] = error as OperationInputOptionalError; + } + } + return newInputError; + } + }; + + const validateAll = (): boolean => { + let newInputError = inputError; + for (let i = 0; i < inputScheme.length; i++) { + const item = inputScheme[i]; + if (item.type === "text") { + newInputError = calculateError( + newInputError, + i, + item.validator?.(values[i] as string, values) + ); + } + } + const result = !testErrorInfo(newInputError); + setInputError(newInputError); + return result; + }; + + body = ( + <> + + {inputPrompt} + {inputScheme.map((item, index) => { + const value = values[index]; + const error: string | undefined = ((e) => + typeof e === "string" ? t(e) : undefined)(inputError?.[index]); + + if (item.type === "text") { + return ( + + {item.label && {t(item.label)}} + { + const v = e.target.value; + const newValues = updateValue(index, v); + setInputError( + calculateError( + inputError, + index, + item.validator?.(v, newValues) + ) + ); + }} + isInvalid={error != null} + disabled={process} + /> + {error != null && ( + + {error} + + )} + {item.helperText && ( + {t(item.helperText)} + )} + + ); + } else if (item.type === "bool") { + return ( + + + type="checkbox" + checked={value as boolean} + onChange={(event) => { + updateValue(index, event.currentTarget.checked); + }} + label={t(item.label)} + disabled={process} + /> + + ); + } else if (item.type === "select") { + return ( + + {t(item.label)} + { + updateValue(index, event.target.value); + }} + disabled={process} + > + {item.options.map((option, i) => { + return ( + + ); + })} + + + ); + } + })} + + + + { + if (validateAll()) { + onConfirm(); + } + }} + > + {t("operationDialog.confirm")} + + + + ); + } else { + let content: React.ReactNode; + const result = step; + if (result.type === "success") { + content = + props.successPrompt?.(result.data) ?? t("operationDialog.success"); + if (typeof content === "string") + content =

{content}

; + } else { + content = props.failurePrompt?.(result.data) ?? ; + if (typeof content === "string") + content = ; + } + body = ( + <> + {content} + + + + + ); + } + + const title = typeof props.title === "string" ? t(props.title) : props.title; + + return ( + + + {title} + + {body} + + ); +}; + +export default OperationDialog; diff --git a/FrontEnd/src/app/views/common/SearchInput.tsx b/FrontEnd/src/app/views/common/SearchInput.tsx new file mode 100644 index 00000000..9833d515 --- /dev/null +++ b/FrontEnd/src/app/views/common/SearchInput.tsx @@ -0,0 +1,63 @@ +import React, { useCallback } from "react"; +import clsx from "clsx"; +import { useTranslation } from "react-i18next"; +import { Spinner, Form, Button } from "react-bootstrap"; + +export interface SearchInputProps { + value: string; + onChange: (value: string) => void; + onButtonClick: () => void; + className?: string; + loading?: boolean; + buttonText?: string; + placeholder?: string; + additionalButton?: React.ReactNode; +} + +const SearchInput: React.FC = (props) => { + const { onChange, onButtonClick } = props; + + const { t } = useTranslation(); + + const onInputChange = useCallback( + (event: React.ChangeEvent): void => { + onChange(event.currentTarget.value); + }, + [onChange] + ); + + const onInputKeyPress = useCallback( + (event: React.KeyboardEvent): void => { + if (event.key === "Enter") { + onButtonClick(); + } + }, + [onButtonClick] + ); + + return ( +
+ +
+ {props.additionalButton} +
+
+ {props.loading ? ( + + ) : ( + + )} +
+ + ); +}; + +export default SearchInput; diff --git a/FrontEnd/src/app/views/common/TimelineLogo.tsx b/FrontEnd/src/app/views/common/TimelineLogo.tsx new file mode 100644 index 00000000..27d188fc --- /dev/null +++ b/FrontEnd/src/app/views/common/TimelineLogo.tsx @@ -0,0 +1,26 @@ +import React, { SVGAttributes } from "react"; + +export interface TimelineLogoProps extends SVGAttributes { + color?: string; +} + +const TimelineLogo: React.FC = (props) => { + const { color, ...forwardProps } = props; + const coercedColor = color ?? "currentcolor"; + return ( + + + + + + ); +}; + +export default TimelineLogo; diff --git a/FrontEnd/src/app/views/common/UserTimelineLogo.tsx b/FrontEnd/src/app/views/common/UserTimelineLogo.tsx new file mode 100644 index 00000000..29f6a69f --- /dev/null +++ b/FrontEnd/src/app/views/common/UserTimelineLogo.tsx @@ -0,0 +1,26 @@ +import React, { SVGAttributes } from "react"; + +export interface UserTimelineLogoProps extends SVGAttributes { + color?: string; +} + +const UserTimelineLogo: React.FC = (props) => { + const { color, ...forwardProps } = props; + const coercedColor = color ?? "currentcolor"; + + return ( + + + + + + + + + + + + ); +}; + +export default UserTimelineLogo; diff --git a/FrontEnd/src/app/views/common/alert/AlertHost.tsx b/FrontEnd/src/app/views/common/alert/AlertHost.tsx new file mode 100644 index 00000000..c74f18e2 --- /dev/null +++ b/FrontEnd/src/app/views/common/alert/AlertHost.tsx @@ -0,0 +1,101 @@ +import React, { useCallback } from "react"; +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 "@/services/alert"; + +interface AutoCloseAlertProps { + alert: AlertInfo; + close: () => void; +} + +export const AutoCloseAlert: React.FC = (props) => { + const { alert } = props; + const { dismissTime } = alert; + + const { t } = useTranslation(); + + React.useEffect(() => { + const tag = + dismissTime === "never" + ? null + : typeof dismissTime === "number" + ? window.setTimeout(props.close, dismissTime) + : window.setTimeout(props.close, 5000); + return () => { + if (tag != null) { + window.clearTimeout(tag); + } + }; + }, [dismissTime, props.close]); + + return ( + + {(() => { + const { message } = alert; + if (typeof message === "function") { + const Message = message; + return ; + } else if (typeof message === "object" && message.type === "i18n") { + return t(message.key); + } else return alert.message; + })()} + + ); +}; + +// oh what a bad name! +interface AlertInfoExEx extends AlertInfoEx { + close: () => void; +} + +const AlertHost: React.FC = () => { + const [alerts, setAlerts] = React.useState([]); + + // react guarantee that state setters are stable, so we don't need to add it to dependency list + + const consume = useCallback((alert: AlertInfoEx): void => { + const alertEx: AlertInfoExEx = { + ...alert, + close: () => { + setAlerts((oldAlerts) => { + return without(oldAlerts, alertEx); + }); + }, + }; + setAlerts((oldAlerts) => { + return concat(oldAlerts, alertEx); + }); + }, []); + + React.useEffect(() => { + alertService.registerConsumer(consume); + return () => { + alertService.unregisterConsumer(consume); + }; + }, [consume]); + + return ( +
+ {alerts.map((alert) => { + return ( + + ); + })} +
+ ); +}; + +export default AlertHost; diff --git a/FrontEnd/src/app/views/common/alert/alert.sass b/FrontEnd/src/app/views/common/alert/alert.sass new file mode 100644 index 00000000..c3560b87 --- /dev/null +++ b/FrontEnd/src/app/views/common/alert/alert.sass @@ -0,0 +1,15 @@ +.alert-container + position: fixed + z-index: $zindex-popover + +@include media-breakpoint-up(sm) + .alert-container + bottom: 0 + right: 0 + +@include media-breakpoint-down(sm) + .alert-container + bottom: 0 + right: 0 + left: 0 + text-align: center diff --git a/FrontEnd/src/app/views/common/common.sass b/FrontEnd/src/app/views/common/common.sass new file mode 100644 index 00000000..78e6fd14 --- /dev/null +++ b/FrontEnd/src/app/views/common/common.sass @@ -0,0 +1,33 @@ +.image-cropper-container + position: relative + box-sizing: border-box + user-select: none + +.image-cropper-container img + position: absolute + left: 0 + top: 0 + width: 100% + height: 100% + +.image-cropper-mask-container + position: absolute + left: 0 + top: 0 + right: 0 + bottom: 0 + overflow: hidden + +.image-cropper-mask + position: absolute + box-shadow: 0 0 0 10000px rgba(255, 255, 255, 80%) + touch-action: none + +.image-cropper-handler + position: absolute + width: 26px + height: 26px + border: black solid 2px + border-radius: 50% + background: white + touch-action: none diff --git a/FrontEnd/src/app/views/home/BoardWithUser.tsx b/FrontEnd/src/app/views/home/BoardWithUser.tsx new file mode 100644 index 00000000..dcd39cbe --- /dev/null +++ b/FrontEnd/src/app/views/home/BoardWithUser.tsx @@ -0,0 +1,101 @@ +import React from "react"; +import { Row, Col } from "react-bootstrap"; +import { useTranslation } from "react-i18next"; + +import { UserWithToken } from "@/services/user"; +import { TimelineInfo } from "@/services/timeline"; +import { getHttpTimelineClient } from "@/http/timeline"; + +import TimelineBoard from "./TimelineBoard"; +import OfflineBoard from "./OfflineBoard"; + +const BoardWithUser: React.FC<{ user: UserWithToken }> = ({ user }) => { + const { t } = useTranslation(); + + const [ownTimelines, setOwnTimelines] = React.useState< + TimelineInfo[] | "offline" | "loading" + >("loading"); + const [joinTimelines, setJoinTimelines] = React.useState< + TimelineInfo[] | "offline" | "loading" + >("loading"); + + React.useEffect(() => { + let subscribe = true; + if (ownTimelines === "loading") { + void getHttpTimelineClient() + .listTimeline({ relate: user.username, relateType: "own" }) + .then( + (timelines) => { + if (subscribe) { + setOwnTimelines(timelines); + } + }, + () => { + setOwnTimelines("offline"); + } + ); + } + return () => { + subscribe = false; + }; + }, [user, ownTimelines]); + + React.useEffect(() => { + let subscribe = true; + if (joinTimelines === "loading") { + void getHttpTimelineClient() + .listTimeline({ relate: user.username, relateType: "join" }) + .then( + (timelines) => { + if (subscribe) { + setJoinTimelines(timelines); + } + }, + () => { + setJoinTimelines("offline"); + } + ); + } + return () => { + subscribe = false; + }; + }, [user, joinTimelines]); + + return ( + + {ownTimelines === "offline" && joinTimelines === "offline" ? ( + + { + setOwnTimelines("loading"); + setJoinTimelines("loading"); + }} + /> + + ) : ( + <> + + { + setOwnTimelines("loading"); + }} + /> + + + { + setJoinTimelines("loading"); + }} + /> + + + )} + + ); +}; + +export default BoardWithUser; diff --git a/FrontEnd/src/app/views/home/BoardWithoutUser.tsx b/FrontEnd/src/app/views/home/BoardWithoutUser.tsx new file mode 100644 index 00000000..ebfddb50 --- /dev/null +++ b/FrontEnd/src/app/views/home/BoardWithoutUser.tsx @@ -0,0 +1,60 @@ +import React from "react"; +import { Row, Col } from "react-bootstrap"; + +import { TimelineInfo } from "@/services/timeline"; +import { getHttpTimelineClient } from "@/http/timeline"; + +import TimelineBoard from "./TimelineBoard"; +import OfflineBoard from "./OfflineBoard"; + +const BoardWithoutUser: React.FC = () => { + const [publicTimelines, setPublicTimelines] = React.useState< + TimelineInfo[] | "offline" | "loading" + >("loading"); + + React.useEffect(() => { + let subscribe = true; + if (publicTimelines === "loading") { + void getHttpTimelineClient() + .listTimeline({ visibility: "Public" }) + .then( + (timelines) => { + if (subscribe) { + setPublicTimelines(timelines); + } + }, + () => { + setPublicTimelines("offline"); + } + ); + } + return () => { + subscribe = false; + }; + }, [publicTimelines]); + + return ( + + {publicTimelines === "offline" ? ( + + { + setPublicTimelines("loading"); + }} + /> + + ) : ( + + { + setPublicTimelines("loading"); + }} + /> + + )} + + ); +}; + +export default BoardWithoutUser; diff --git a/FrontEnd/src/app/views/home/OfflineBoard.tsx b/FrontEnd/src/app/views/home/OfflineBoard.tsx new file mode 100644 index 00000000..fc05bd74 --- /dev/null +++ b/FrontEnd/src/app/views/home/OfflineBoard.tsx @@ -0,0 +1,61 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { Trans } from "react-i18next"; + +import { getAllCachedTimelineNames } from "@/services/timeline"; +import UserTimelineLogo from "../common/UserTimelineLogo"; +import TimelineLogo from "../common/TimelineLogo"; + +export interface OfflineBoardProps { + onReload: () => void; +} + +const OfflineBoard: React.FC = ({ onReload }) => { + const [timelines, setTimelines] = React.useState([]); + + React.useEffect(() => { + let subscribe = true; + void getAllCachedTimelineNames().then((t) => { + if (subscribe) setTimelines(t); + }); + return () => { + subscribe = false; + }; + }); + + return ( + <> + + 0 + { + onReload(); + e.preventDefault(); + }} + > + 1 + + 2 + + {timelines.map((timeline) => { + const isPersonal = timeline.startsWith("@"); + const url = isPersonal + ? `/users/${timeline.slice(1)}` + : `/timelines/${timeline}`; + return ( +
+ {isPersonal ? ( + + ) : ( + + )} + {timeline} +
+ ); + })} + + ); +}; + +export default OfflineBoard; diff --git a/FrontEnd/src/app/views/home/TimelineBoard.tsx b/FrontEnd/src/app/views/home/TimelineBoard.tsx new file mode 100644 index 00000000..a3d176e1 --- /dev/null +++ b/FrontEnd/src/app/views/home/TimelineBoard.tsx @@ -0,0 +1,73 @@ +import React from "react"; +import clsx from "clsx"; +import { Link } from "react-router-dom"; +import { Trans } from "react-i18next"; +import { Spinner } from "react-bootstrap"; + +import { TimelineInfo } from "@/services/timeline"; +import TimelineLogo from "../common/TimelineLogo"; +import UserTimelineLogo from "../common/UserTimelineLogo"; + +export interface TimelineBoardProps { + title?: string; + timelines: TimelineInfo[] | "offline" | "loading"; + onReload: () => void; + className?: string; +} + +const TimelineBoard: React.FC = (props) => { + const { title, timelines, className } = props; + + return ( +
+ {title != null &&

{title}

} + {(() => { + if (timelines === "loading") { + return ( +
+ +
+ ); + } else if (timelines === "offline") { + return ( + + ); + } else { + return timelines.map((timeline) => { + const { name } = timeline; + const isPersonal = name.startsWith("@"); + const url = isPersonal + ? `/users/${timeline.owner.username}` + : `/timelines/${name}`; + return ( +
+ {isPersonal ? ( + + ) : ( + + )} + {name} +
+ ); + }); + } + })()} +
+ ); +}; + +export default TimelineBoard; diff --git a/FrontEnd/src/app/views/home/TimelineCreateDialog.tsx b/FrontEnd/src/app/views/home/TimelineCreateDialog.tsx new file mode 100644 index 00000000..d9467719 --- /dev/null +++ b/FrontEnd/src/app/views/home/TimelineCreateDialog.tsx @@ -0,0 +1,53 @@ +import React from "react"; +import { useHistory } from "react-router"; + +import { validateTimelineName, timelineService } from "@/services/timeline"; +import OperationDialog from "../common/OperationDialog"; + +interface TimelineCreateDialogProps { + open: boolean; + close: () => void; +} + +const TimelineCreateDialog: React.FC = (props) => { + const history = useHistory(); + + let nameSaved: string; + + return ( + { + if (name.length === 0) { + return "home.createDialog.noEmpty"; + } else if (name.length > 26) { + return "home.createDialog.tooLong"; + } else if (!validateTimelineName(name)) { + return "home.createDialog.badFormat"; + } else { + return null; + } + }, + }, + ]} + onProcess={([name]) => { + nameSaved = name as string; + return timelineService.createTimeline(nameSaved).toPromise(); + }} + onSuccessAndClose={() => { + history.push(`timelines/${nameSaved}`); + }} + failurePrompt={(e) => `${e as string}`} + /> + ); +}; + +export default TimelineCreateDialog; diff --git a/FrontEnd/src/app/views/home/home.sass b/FrontEnd/src/app/views/home/home.sass new file mode 100644 index 00000000..28a2e5f3 --- /dev/null +++ b/FrontEnd/src/app/views/home/home.sass @@ -0,0 +1,13 @@ +.timeline-board-item + font-size: 1.1em + @extend .my-2 + .icon + height: 1.3em + @extend .mr-2 + +.timeline-board + @extend .cru-card + @extend .d-flex + @extend .flex-column + @extend .p-3 + min-height: 200px diff --git a/FrontEnd/src/app/views/home/index.tsx b/FrontEnd/src/app/views/home/index.tsx new file mode 100644 index 00000000..760adcea --- /dev/null +++ b/FrontEnd/src/app/views/home/index.tsx @@ -0,0 +1,99 @@ +import React from "react"; +import { useHistory } from "react-router"; +import { useTranslation } from "react-i18next"; +import { Row, Container, Button, Col } from "react-bootstrap"; + +import { useUser } from "@/services/user"; +import SearchInput from "../common/SearchInput"; + +import BoardWithoutUser from "./BoardWithoutUser"; +import BoardWithUser from "./BoardWithUser"; +import TimelineCreateDialog from "./TimelineCreateDialog"; + +const HomePage: React.FC = () => { + const history = useHistory(); + + const { t } = useTranslation(); + + const user = useUser(); + + const [navText, setNavText] = React.useState(""); + + const [dialog, setDialog] = React.useState<"create" | null>(null); + + const goto = React.useCallback((): void => { + if (navText === "") { + history.push("users/crupest"); + } else if (navText.startsWith("@")) { + history.push(`users/${navText.slice(1)}`); + } else { + history.push(`timelines/${navText}`); + } + }, [navText, history]); + + return ( + <> + + + + { + setDialog("create"); + }} + > + {t("home.createButton")} + + ) + } + /> + + + {(() => { + if (user == null) { + return ; + } else { + return ; + } + })()} + + + {dialog === "create" && ( + { + setDialog(null); + }} + /> + )} + + ); +}; + +export default HomePage; diff --git a/FrontEnd/src/app/views/login/index.tsx b/FrontEnd/src/app/views/login/index.tsx new file mode 100644 index 00000000..61b9a525 --- /dev/null +++ b/FrontEnd/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(""); + const [usernameDirty, setUsernameDirty] = React.useState(false); + const [password, setPassword] = React.useState(""); + const [passwordDirty, setPasswordDirty] = React.useState(false); + const [rememberMe, setRememberMe] = React.useState(true); + const [process, setProcess] = React.useState(false); + const [error, setError] = React.useState(null); + + const user = useUser(); + + React.useEffect(() => { + if (user != null) { + const id = setTimeout(() => history.push("/"), 3000); + return () => { + clearTimeout(id); + }; + } + }, [history, user]); + + if (user != null) { + return ( + <> + +

{t("login.alreadyLogin")}

+ + ); + } + + 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 ( + +

{t("welcome")}

+
+ + {t("user.username")} + { + setUsername(e.target.value); + setUsernameDirty(true); + }} + value={username} + isInvalid={usernameDirty && username === ""} + /> + {usernameDirty && username === "" && ( + + {t("login.emptyUsername")} + + )} + + + {t("user.password")} + { + setPassword(e.target.value); + setPasswordDirty(true); + }} + value={password} + onKeyDown={onEnterPressInPassword} + isInvalid={passwordDirty && password === ""} + /> + {passwordDirty && password === "" && ( + + {t("login.emptyPassword")} + + )} + + + + id="remember-me" + type="checkbox" + checked={rememberMe} + onChange={(e) => { + setRememberMe(e.currentTarget.checked); + }} + label={t("user.rememberMe")} + /> + + {error ?

{t(error)}

: null} +
+ { + submit(); + e.preventDefault(); + }} + disabled={username === "" || password === "" ? true : undefined} + > + {t("user.login")} + +
+
+
+ ); +}; + +export default LoginPage; diff --git a/FrontEnd/src/app/views/login/login.sass b/FrontEnd/src/app/views/login/login.sass new file mode 100644 index 00000000..0bf385f5 --- /dev/null +++ b/FrontEnd/src/app/views/login/login.sass @@ -0,0 +1,2 @@ +.login-container + max-width: 600px diff --git a/FrontEnd/src/app/views/settings/index.tsx b/FrontEnd/src/app/views/settings/index.tsx new file mode 100644 index 00000000..964e7442 --- /dev/null +++ b/FrontEnd/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 = (props) => { + const history = useHistory(); + const { t } = useTranslation(); + + const [redirect, setRedirect] = useState(false); + + return ( + + 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 ( + + + + {t("settings.dialogConfirmLogout.title")} + + + {t("settings.dialogConfirmLogout.prompt")} + + + + + + ); +}; + +const SettingsPage: React.FC = (_) => { + const { i18n, t } = useTranslation(); + const user = useUser(); + const history = useHistory(); + + const [dialog, setDialog] = useState( + null + ); + + const language = i18n.language.slice(0, 2); + + return ( + + {user ? ( + <> + + +
{ + history.push(`/users/${user.username}`); + }} + > + {t("settings.gotoSelf")} +
+ +
+ + +
setDialog("changepassword")} + > + {t("settings.changePassword")} +
+ +
+ + +
{ + setDialog("logout"); + }} + > + {t("settings.logout")} +
+ +
+ + ) : null} + + +
{t("settings.languagePrimary")}
+

{t("settings.languageSecondary")}

+ + + { + void i18n.changeLanguage(e.target.value); + }} + > + + + + +
+ {(() => { + switch (dialog) { + case "changepassword": + return ( + { + setDialog(null); + }} + /> + ); + case "logout": + return ( + setDialog(null)} + onConfirm={() => { + void userService.logout().then(() => { + history.push("/"); + }); + }} + /> + ); + default: + return null; + } + })()} +
+ ); +}; + +export default SettingsPage; diff --git a/FrontEnd/src/app/views/timeline-common/CollapseButton.tsx b/FrontEnd/src/app/views/timeline-common/CollapseButton.tsx new file mode 100644 index 00000000..3c52150f --- /dev/null +++ b/FrontEnd/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 ( + + ); +}; + +export default CollapseButton; diff --git a/FrontEnd/src/app/views/timeline-common/InfoCardTemplate.tsx b/FrontEnd/src/app/views/timeline-common/InfoCardTemplate.tsx new file mode 100644 index 00000000..a8de20aa --- /dev/null +++ b/FrontEnd/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 ( +
+
+ + +
+ +
{children}
+
+ ); +}; + +export default InfoCardTemplate; diff --git a/FrontEnd/src/app/views/timeline-common/SyncStatusBadge.tsx b/FrontEnd/src/app/views/timeline-common/SyncStatusBadge.tsx new file mode 100644 index 00000000..e67cfb43 --- /dev/null +++ b/FrontEnd/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 ( +
+ {(() => { + switch (status) { + case "syncing": { + return ( + <> + + + {t("timeline.postSyncState.syncing")} + + + ); + } + case "synced": { + return ( + <> + + + {t("timeline.postSyncState.synced")} + + + ); + } + case "offline": { + return ( + <> + + + {t("timeline.postSyncState.offline")} + + + ); + } + default: + throw new UiLogicError("Unknown sync state."); + } + })()} +
+ ); +}; + +export default SyncStatusBadge; diff --git a/FrontEnd/src/app/views/timeline-common/Timeline.tsx b/FrontEnd/src/app/views/timeline-common/Timeline.tsx new file mode 100644 index 00000000..fd051d45 --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/Timeline.tsx @@ -0,0 +1,84 @@ +import React from "react"; +import clsx from "clsx"; + +import { TimelinePostInfo } from "@/services/timeline"; + +import TimelineItem from "./TimelineItem"; + +export interface TimelinePostInfoEx extends TimelinePostInfo { + deletable: boolean; +} + +export type TimelineDeleteCallback = (index: number, id: number) => void; + +export interface TimelineProps { + className?: string; + posts: TimelinePostInfoEx[]; + onDelete: TimelineDeleteCallback; + onResize?: () => void; + containerRef?: React.Ref; +} + +const Timeline: React.FC = (props) => { + const { posts, onDelete, onResize } = props; + + const [indexShowDeleteButton, setIndexShowDeleteButton] = React.useState< + number + >(-1); + + const onItemClick = React.useCallback(() => { + setIndexShowDeleteButton(-1); + }, []); + + const onToggleDelete = React.useMemo(() => { + return posts.map((post, i) => { + return post.deletable + ? () => { + setIndexShowDeleteButton((oldIndexShowDeleteButton) => { + return oldIndexShowDeleteButton !== i ? i : -1; + }); + } + : undefined; + }); + }, [posts]); + + const onItemDelete = React.useMemo(() => { + return posts.map((post, i) => { + return () => { + onDelete(i, post.id); + }; + }); + }, [posts, onDelete]); + + return ( +
+ {(() => { + const length = posts.length; + return posts.map((post, i) => { + const toggleMore = onToggleDelete[i]; + + return ( + + ); + }); + })()} +
+ ); +}; + +export default Timeline; diff --git a/FrontEnd/src/app/views/timeline-common/TimelineItem.tsx b/FrontEnd/src/app/views/timeline-common/TimelineItem.tsx new file mode 100644 index 00000000..4db23371 --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/TimelineItem.tsx @@ -0,0 +1,172 @@ +import React from "react"; +import clsx from "clsx"; +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"; + +const TimelinePostDeleteConfirmDialog: React.FC<{ + toggle: () => void; + onConfirm: () => void; +}> = ({ toggle, onConfirm }) => { + const { t } = useTranslation(); + + return ( + + + + {t("timeline.post.deleteDialog.title")} + + + {t("timeline.post.deleteDialog.prompt")} + + + + + + ); +}; + +export interface TimelineItemProps { + post: TimelinePostInfo; + current?: boolean; + more?: { + isOpen: boolean; + toggle: () => void; + onDelete: () => void; + }; + onClick?: () => void; + onResize?: () => void; + className?: string; + style?: React.CSSProperties; +} + +const TimelineItem: React.FC = (props) => { + const { i18n } = useTranslation(); + + const current = props.current === true; + + const { more, onResize } = props; + + const avatar = useAvatar(props.post.author.username); + + const [deleteDialog, setDeleteDialog] = React.useState(false); + const toggleDeleteDialog = React.useCallback( + () => setDeleteDialog((old) => !old), + [] + ); + + return ( +
+
+
+
+
+
+
+
+ {current &&
} +
+
+
+
+ + + {props.post.time.toLocaleString(i18n.languages)} + + {props.post.author.nickname} + + {more != null ? ( + { + more.toggle(); + e.stopPropagation(); + }} + /> + ) : null} +
+
+ + + + {(() => { + const { content } = props.post; + if (content.type === "text") { + return content.text; + } else { + return ( + + ); + } + })()} +
+
+ {more != null && more.isOpen ? ( + <> +
+ { + toggleDeleteDialog(); + e.stopPropagation(); + }} + /> +
+ {deleteDialog ? ( + { + toggleDeleteDialog(); + more.toggle(); + }} + onConfirm={more.onDelete} + /> + ) : null} + + ) : null} +
+ ); +}; + +export default TimelineItem; diff --git a/FrontEnd/src/app/views/timeline-common/TimelineMember.tsx b/FrontEnd/src/app/views/timeline-common/TimelineMember.tsx new file mode 100644 index 00000000..67a8543a --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/TimelineMember.tsx @@ -0,0 +1,211 @@ +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; +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"; + +const TimelineMemberItem: React.FC<{ + user: User; + owner: boolean; + onRemove?: (username: string) => void; +}> = ({ user, owner, onRemove }) => { + const { t } = useTranslation(); + + const avatar = useAvatar(user.username); + + return ( + + + + + + + {user.nickname} + + {"@" + user.username} + + + {(() => { + if (owner) { + return null; + } + if (onRemove == null) { + return null; + } + return ( + + ); + })()} + + + ); +}; + +export interface TimelineMemberCallbacks { + onCheckUser: (username: string) => Promise; + onAddUser: (user: User) => Promise; + onRemoveUser: (username: string) => void; +} + +export interface TimelineMemberProps { + members: User[]; + edit: TimelineMemberCallbacks | null | undefined; +} + +const TimelineMember: React.FC = (props) => { + const { t } = useTranslation(); + + const [userSearchText, setUserSearchText] = useState(""); + const [userSearchState, setUserSearchState] = useState< + | { + type: "user"; + data: User; + } + | { type: "error"; data: string } + | { type: "loading" } + | { type: "init" } + >({ type: "init" }); + + const userSearchAvatar = useAvatar( + userSearchState.type === "user" ? userSearchState.data.username : undefined + ); + + const members = props.members; + + return ( + + + {members.map((member, index) => ( + + ))} + + {(() => { + const edit = props.edit; + if (edit != null) { + return ( + <> + { + setUserSearchText(v); + }} + loading={userSearchState.type === "loading"} + onButtonClick={() => { + if (userSearchText === "") { + setUserSearchState({ + type: "error", + data: "login.emptyUsername", + }); + return; + } + + setUserSearchState({ type: "loading" }); + edit.onCheckUser(userSearchText).then( + (u) => { + if (u == null) { + setUserSearchState({ + type: "error", + data: "timeline.userNotExist", + }); + } else { + setUserSearchState({ type: "user", data: u }); + } + }, + (e) => { + setUserSearchState({ + type: "error", + data: `${e as string}`, + }); + } + ); + }} + /> + {(() => { + if (userSearchState.type === "user") { + const u = userSearchState.data; + const addable = + members.findIndex((m) => m.username === u.username) === -1; + return ( + <> + {!addable ? ( +

{t("timeline.member.alreadyMember")}

+ ) : null} + + + + + + + {u.nickname} + + {"@" + u.username} + + + + + + + ); + } else if (userSearchState.type === "error") { + return ( +

{t(userSearchState.data)}

+ ); + } + })()} + + ); + } else { + return null; + } + })()} +
+ ); +}; + +export default TimelineMember; + +export interface TimelineMemberDialogProps extends TimelineMemberProps { + open: boolean; + onClose: () => void; +} + +export const TimelineMemberDialog: React.FC = ( + props +) => { + return ( + + + + ); +}; diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx new file mode 100644 index 00000000..d5c91622 --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx @@ -0,0 +1,185 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { of } from "rxjs"; +import { catchError } from "rxjs/operators"; + +import { UiLogicError } from "@/common"; +import { pushAlert } from "@/services/alert"; +import { useUser, userInfoService, UserNotExistError } from "@/services/user"; +import { + timelineService, + usePostList, + useTimelineInfo, +} from "@/services/timeline"; + +import { TimelineDeleteCallback } from "./Timeline"; +import { TimelineMemberDialog } from "./TimelineMember"; +import TimelinePropertyChangeDialog from "./TimelinePropertyChangeDialog"; +import { TimelinePageTemplateUIProps } from "./TimelinePageTemplateUI"; +import { TimelinePostSendCallback } from "./TimelinePostEdit"; + +export interface TimelinePageTemplateProps { + name: string; + onManage: (item: TManageItem) => void; + UiComponent: React.ComponentType< + Omit, "CardComponent"> + >; + notFoundI18nKey: string; +} + +export default function TimelinePageTemplate( + props: TimelinePageTemplateProps +): React.ReactElement | null { + const { t } = useTranslation(); + + const { name } = props; + + const service = timelineService; + + const user = useUser(); + + const [dialog, setDialog] = React.useState( + null + ); + + const timelineState = useTimelineInfo(name); + + const timeline = timelineState?.timeline; + + const postListState = usePostList(name); + + const error: string | undefined = (() => { + if (timelineState != null) { + const { type, timeline } = timelineState; + if (type === "offline" && timeline == null) return "Network Error"; + if (type === "synced" && timeline == null) + return t(props.notFoundI18nKey); + } + return undefined; + })(); + + const closeDialog = React.useCallback((): void => { + setDialog(null); + }, []); + + let dialogElement: React.ReactElement | undefined; + + if (dialog === "property") { + if (timeline == null) { + throw new UiLogicError( + "Timeline is null but attempt to open change property dialog." + ); + } + + dialogElement = ( + { + return service.changeTimelineProperty(name, req).toPromise().then(); + }} + /> + ); + } else if (dialog === "member") { + if (timeline == null) { + throw new UiLogicError( + "Timeline is null but attempt to open change property dialog." + ); + } + + dialogElement = ( + { + return userInfoService + .getUserInfo(u) + .pipe( + catchError((e) => { + if (e instanceof UserNotExistError) { + return of(null); + } else { + throw e; + } + }) + ) + .toPromise(); + }, + onAddUser: (u) => { + return service.addMember(name, u.username).toPromise().then(); + }, + onRemoveUser: (u) => { + service.removeMember(name, u); + }, + } + : null + } + /> + ); + } + + const { UiComponent } = props; + + const onDelete: TimelineDeleteCallback = React.useCallback( + (index, id) => { + service.deletePost(name, id).subscribe(null, () => { + pushAlert({ + type: "danger", + message: t("timeline.deletePostFailed"), + }); + }); + }, + [service, name, t] + ); + + const onPost: TimelinePostSendCallback = React.useCallback( + (req) => { + return service.createPost(name, req).toPromise().then(); + }, + [service, name] + ); + + const onManageProp = props.onManage; + + const onManage = React.useCallback( + (item: "property" | TManageItem) => { + if (item === "property") { + setDialog(item); + } else { + onManageProp(item); + } + }, + [onManageProp] + ); + + return ( + <> + setDialog("member")} + /> + {dialogElement} + + ); +} diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx new file mode 100644 index 00000000..6c2c43c1 --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplateUI.tsx @@ -0,0 +1,243 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { fromEvent } from "rxjs"; +import { Spinner } from "react-bootstrap"; + +import { getAlertHost } from "@/services/alert"; +import { useEventEmiiter, UiLogicError } from "@/common"; +import { + TimelineInfo, + TimelinePostsWithSyncState, + timelineService, +} from "@/services/timeline"; +import { userService } from "@/services/user"; + +import Timeline, { + TimelinePostInfoEx, + TimelineDeleteCallback, +} from "./Timeline"; +import TimelineTop from "./TimelineTop"; +import TimelinePostEdit, { TimelinePostSendCallback } from "./TimelinePostEdit"; +import { TimelineSyncStatus } from "./SyncStatusBadge"; + +export interface TimelineCardComponentProps { + timeline: TimelineInfo; + onManage?: (item: TManageItems | "property") => void; + onMember: () => void; + className?: string; + collapse: boolean; + syncStatus: TimelineSyncStatus; + toggleCollapse: () => void; +} + +export interface TimelinePageTemplateUIProps { + timeline?: TimelineInfo; + postListState?: TimelinePostsWithSyncState; + CardComponent: React.ComponentType>; + onMember: () => void; + onManage?: (item: TManageItems | "property") => void; + onPost?: TimelinePostSendCallback; + onDelete: TimelineDeleteCallback; + error?: string; +} + +export default function TimelinePageTemplateUI( + props: TimelinePageTemplateUIProps +): React.ReactElement | null { + const { timeline, postListState } = props; + + const { t } = useTranslation(); + + const bottomSpaceRef = React.useRef(null); + + const onPostEditHeightChange = React.useCallback((height: number): void => { + const { current: bottomSpaceDiv } = bottomSpaceRef; + if (bottomSpaceDiv != null) { + bottomSpaceDiv.style.height = `${height}px`; + } + if (height === 0) { + const alertHost = getAlertHost(); + if (alertHost != null) { + alertHost.style.removeProperty("margin-bottom"); + } + } else { + const alertHost = getAlertHost(); + if (alertHost != null) { + alertHost.style.marginBottom = `${height}px`; + } + } + }, []); + + const timelineRef = React.useRef(null); + + const [getResizeEvent, triggerResizeEvent] = useEventEmiiter(); + + React.useEffect(() => { + const { current: timelineElement } = timelineRef; + if (timelineElement != null) { + let loadingScrollToBottom = true; + let pinBottom = false; + + const isAtBottom = (): boolean => + window.innerHeight + window.scrollY + 10 >= document.body.scrollHeight; + + const disableLoadingScrollToBottom = (): void => { + loadingScrollToBottom = false; + if (isAtBottom()) pinBottom = true; + }; + + const checkAndScrollToBottom = (): void => { + if (loadingScrollToBottom || pinBottom) { + window.scrollTo(0, document.body.scrollHeight); + } + }; + + const subscriptions = [ + fromEvent(timelineElement, "wheel").subscribe( + disableLoadingScrollToBottom + ), + fromEvent(timelineElement, "pointerdown").subscribe( + disableLoadingScrollToBottom + ), + fromEvent(timelineElement, "keydown").subscribe( + disableLoadingScrollToBottom + ), + fromEvent(window, "scroll").subscribe(() => { + if (loadingScrollToBottom) return; + + if (isAtBottom()) { + pinBottom = true; + } else { + pinBottom = false; + } + }), + fromEvent(window, "resize").subscribe(checkAndScrollToBottom), + getResizeEvent().subscribe(checkAndScrollToBottom), + ]; + + return () => { + subscriptions.forEach((s) => s.unsubscribe()); + }; + } + }, [getResizeEvent, triggerResizeEvent, timeline, postListState]); + + const genCardCollapseLocalStorageKey = (uniqueId: string): string => + `timeline.${uniqueId}.cardCollapse`; + + const cardCollapseLocalStorageKey = + timeline != null ? genCardCollapseLocalStorageKey(timeline.uniqueId) : null; + + const [cardCollapse, setCardCollapse] = React.useState(true); + React.useEffect(() => { + if (cardCollapseLocalStorageKey != null) { + const savedCollapse = + window.localStorage.getItem(cardCollapseLocalStorageKey) === "true"; + setCardCollapse(savedCollapse); + } + }, [cardCollapseLocalStorageKey]); + + const toggleCardCollapse = (): void => { + const newState = !cardCollapse; + setCardCollapse(newState); + if (timeline != null) { + window.localStorage.setItem( + genCardCollapseLocalStorageKey(timeline.uniqueId), + newState.toString() + ); + } + }; + + let body: React.ReactElement; + + if (props.error != null) { + body =

{t(props.error)}

; + } else { + if (timeline != null) { + let timelineBody: React.ReactElement; + if (postListState != null) { + if (postListState.type === "notexist") { + throw new UiLogicError( + "Timeline is not null but post list state is notexist." + ); + } + if (postListState.type === "forbid") { + timelineBody = ( +

{t("timeline.messageCantSee")}

+ ); + } else { + const posts: TimelinePostInfoEx[] = postListState.posts.map( + (post) => ({ + ...post, + deletable: timelineService.hasModifyPostPermission( + userService.currentUser, + timeline, + post + ), + }) + ); + + timelineBody = ( + + ); + if (props.onPost != null) { + timelineBody = ( + <> + {timelineBody} +
+ + + ); + } + } + } else { + timelineBody = ( +
+ +
+ ); + } + + const { CardComponent } = props; + const syncStatus: TimelineSyncStatus = + postListState == null || postListState.syncing + ? "syncing" + : postListState.type === "synced" + ? "synced" + : "offline"; + + body = ( + <> + + + {timelineBody} + + ); + } else { + body = ( +
+ +
+ ); + } + } + + return body; +} diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx new file mode 100644 index 00000000..dfa2f879 --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx @@ -0,0 +1,241 @@ +import React from "react"; +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 { UiLogicError } from "@/common"; + +import { pushAlert } from "@/services/alert"; +import { TimelineCreatePostRequest } from "@/services/timeline"; + +interface TimelinePostEditImageProps { + onSelect: (blob: Blob | null) => void; +} + +const TimelinePostEditImage: React.FC = (props) => { + const { onSelect } = props; + const { t } = useTranslation(); + + const [file, setFile] = React.useState(null); + const [fileUrl, setFileUrl] = React.useState(null); + const [error, setError] = React.useState(null); + + React.useEffect(() => { + if (file != null) { + const url = URL.createObjectURL(file); + setFileUrl(url); + return () => { + URL.revokeObjectURL(url); + }; + } + }, [file]); + + const onInputChange: React.ChangeEventHandler = React.useCallback( + (e) => { + const files = e.target.files; + if (files == null || files.length === 0) { + setFile(null); + setFileUrl(null); + } else { + setFile(files[0]); + } + onSelect(null); + setError(null); + }, + [onSelect] + ); + + const onImgLoad = React.useCallback(() => { + onSelect(file); + }, [onSelect, file]); + + const onImgError = React.useCallback(() => { + setError("loadImageError"); + }, []); + + return ( + <> + + {fileUrl && error == null && ( + + )} + {error != null &&
{t(error)}
} + + ); +}; + +export type TimelinePostSendCallback = ( + content: TimelineCreatePostRequest +) => Promise; + +export interface TimelinePostEditProps { + className?: string; + onPost: TimelinePostSendCallback; + onHeightChange?: (height: number) => void; + timelineUniqueId: string; +} + +const TimelinePostEdit: React.FC = (props) => { + const { onPost } = props; + + const { t } = useTranslation(); + + const [state, setState] = React.useState<"input" | "process">("input"); + const [kind, setKind] = React.useState<"text" | "image">("text"); + const [text, setText] = React.useState(""); + const [imageBlob, setImageBlob] = React.useState(null); + + const draftLocalStorageKey = `timeline.${props.timelineUniqueId}.postDraft`; + + React.useEffect(() => { + setText(window.localStorage.getItem(draftLocalStorageKey) ?? ""); + }, [draftLocalStorageKey]); + + const canSend = kind === "text" || (kind === "image" && imageBlob != null); + + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const containerRef = React.useRef(null!); + + const notifyHeightChange = (): void => { + if (props.onHeightChange) { + props.onHeightChange(containerRef.current.clientHeight); + } + }; + + React.useEffect(() => { + if (props.onHeightChange) { + props.onHeightChange(containerRef.current.clientHeight); + } + return () => { + if (props.onHeightChange) { + props.onHeightChange(0); + } + }; + }); + + const toggleKind = React.useCallback(() => { + setKind((oldKind) => (oldKind === "text" ? "image" : "text")); + setImageBlob(null); + }, []); + + const onSend = React.useCallback(() => { + setState("process"); + + const req: TimelineCreatePostRequest = (() => { + switch (kind) { + case "text": + return { + content: { + type: "text", + text: text, + }, + } as TimelineCreatePostRequest; + case "image": + if (imageBlob == null) { + throw new UiLogicError( + "Content type is image but image blob is null." + ); + } + return { + content: { + type: "image", + data: imageBlob, + }, + } as TimelineCreatePostRequest; + default: + throw new UiLogicError("Unknown content type."); + } + })(); + + onPost(req).then( + (_) => { + if (kind === "text") { + setText(""); + window.localStorage.removeItem(draftLocalStorageKey); + } + setState("input"); + setKind("text"); + }, + (_) => { + pushAlert({ + type: "danger", + message: t("timeline.sendPostFailed"), + }); + setState("input"); + } + ); + }, [onPost, kind, text, imageBlob, t, draftLocalStorageKey]); + + const onImageSelect = React.useCallback((blob: Blob | null) => { + setImageBlob(blob); + }, []); + + return ( +
+ + + {kind === "text" ? ( + ) => { + const value = event.currentTarget.value; + setText(value); + window.localStorage.setItem(draftLocalStorageKey, value); + }} + /> + ) : ( + + )} + + + {(() => { + if (state === "input") { + return ( + <> +
+ +
+ + + ); + } else { + return ; + } + })()} + +
+
+ ); +}; + +export default TimelinePostEdit; diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx new file mode 100644 index 00000000..87638f31 --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx @@ -0,0 +1,72 @@ +import React from "react"; + +import { + TimelineVisibility, + kTimelineVisibilities, + TimelineChangePropertyRequest, +} from "@/services/timeline"; + +import OperationDialog, { + OperationSelectInputInfoOption, +} from "../common/OperationDialog"; + +export interface TimelinePropertyInfo { + visibility: TimelineVisibility; + description: string; +} + +export interface TimelinePropertyChangeDialogProps { + open: boolean; + close: () => void; + oldInfo: TimelinePropertyInfo; + onProcess: (request: TimelineChangePropertyRequest) => Promise; +} + +const labelMap: { [key in TimelineVisibility]: string } = { + Private: "timeline.visibility.private", + Public: "timeline.visibility.public", + Register: "timeline.visibility.register", +}; + +const TimelinePropertyChangeDialog: React.FC = ( + props +) => { + return ( + ( + (v) => ({ + label: labelMap[v], + value: v, + }) + ), + initValue: props.oldInfo.visibility, + }, + { + type: "text", + label: "timeline.dialogChangeProperty.description", + initValue: props.oldInfo.description, + }, + ]} + open={props.open} + close={props.close} + onProcess={([newVisibility, newDescription]) => { + const req: TimelineChangePropertyRequest = {}; + if (newVisibility !== props.oldInfo.visibility) { + req.visibility = newVisibility as TimelineVisibility; + } + if (newDescription !== props.oldInfo.description) { + req.description = newDescription as string; + } + return props.onProcess(req); + }} + /> + ); +}; + +export default TimelinePropertyChangeDialog; diff --git a/FrontEnd/src/app/views/timeline-common/TimelineTop.tsx b/FrontEnd/src/app/views/timeline-common/TimelineTop.tsx new file mode 100644 index 00000000..93a2a32c --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/TimelineTop.tsx @@ -0,0 +1,21 @@ +import React from "react"; + +export interface TimelineTopProps { + height?: number | string; + children?: React.ReactElement; +} + +const TimelineTop: React.FC = ({ height, children }) => { + return ( +
+
+
+
+
+
+ {children} +
+ ); +}; + +export default TimelineTop; diff --git a/FrontEnd/src/app/views/timeline-common/timeline-common.sass b/FrontEnd/src/app/views/timeline-common/timeline-common.sass new file mode 100644 index 00000000..4151bfcc --- /dev/null +++ b/FrontEnd/src/app/views/timeline-common/timeline-common.sass @@ -0,0 +1,146 @@ +@use 'sass:color' + +.timeline + z-index: 0 + position: relative + + &-item + display: flex + +$timeline-line-width: 7px +$timeline-line-node-radius: 18px +$timeline-line-color: $primary +$timeline-line-color-current: #36c2e6 + +@keyframes timeline-line-node-noncurrent + from + background: $timeline-line-color + + to + 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 + + to + background: color.adjust($timeline-line-color-current, $lightness: +10%) + box-shadow: 0 0 20px 3px color.adjust($timeline-line-color-current, $lightness: +10%, $alpha: -0.1) + +.timeline-line + &-area-container + display: flex + justify-content: flex-end + padding-right: 5px + + flex: 0 0 auto + width: 60px + + &-area + display: flex + flex-direction: column + align-items: center + width: 30px + + &-segment + width: $timeline-line-width + background: $timeline-line-color + + &.start + height: 14px + flex: 0 0 auto + + &.end + flex: 1 1 auto + + &.current-end + height: 20px + flex: 0 0 auto + background: linear-gradient($timeline-line-color-current, transparent) + + &-node-container + flex: 0 0 auto + position: relative + width: $timeline-line-node-radius + height: $timeline-line-node-radius + + &-node + width: $timeline-line-node-radius + 2 + height: $timeline-line-node-radius + 2 + position: absolute + left: -1px + top: -1px + border-radius: 50% + box-sizing: border-box + z-index: 1 + animation: 1s infinite alternate + animation-name: timeline-line-node-noncurrent + +.timeline-top + display: flex + justify-content: space-between + + .timeline-line-segment + flex: 1 1 auto + +.current + .timeline-line + &-segment + + &.start + background: linear-gradient($timeline-line-color, $timeline-line-color-current) + + &.end + background: $timeline-line-color-current + + &-node + animation-name: timeline-line-node-current + +.timeline-content-area + padding: 10px 0 + flex-grow: 1 + +.timeline-item-delete-button + position: absolute + right: 0 + bottom: 0 + +.timeline-content + white-space: pre-line + +.timeline-content-image + max-width: 60% + max-height: 200px + +.timeline-post-edit-image + max-width: 100px + max-height: 100px + +.mask + background: change-color($color: white, $alpha: 0.8) + z-index: 100 + +.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-card + position: fixed + z-index: 1 + top: 56px + right: 0 + margin: 0.5em diff --git a/FrontEnd/src/app/views/timeline/TimelineDeleteDialog.tsx b/FrontEnd/src/app/views/timeline/TimelineDeleteDialog.tsx new file mode 100644 index 00000000..894b8195 --- /dev/null +++ b/FrontEnd/src/app/views/timeline/TimelineDeleteDialog.tsx @@ -0,0 +1,55 @@ +import React from "react"; +import { useHistory } from "react-router"; +import { Trans } from "react-i18next"; + +import { timelineService } from "@/services/timeline"; + +import OperationDialog from "../common/OperationDialog"; + +interface TimelineDeleteDialog { + open: boolean; + name: string; + close: () => void; +} + +const TimelineDeleteDialog: React.FC = (props) => { + const history = useHistory(); + + const { name } = props; + + return ( + { + return ( + + 0{{ name }}2 + + ); + }} + inputScheme={[ + { + type: "text", + validator: (value) => { + if (value !== name) { + return "timeline.deleteDialog.notMatch"; + } else { + return null; + } + }, + }, + ]} + onProcess={() => { + return timelineService.deleteTimeline(name).toPromise(); + }} + onSuccessAndClose={() => { + history.replace("/"); + }} + /> + ); +}; + +export default TimelineDeleteDialog; diff --git a/FrontEnd/src/app/views/timeline/TimelineInfoCard.tsx b/FrontEnd/src/app/views/timeline/TimelineInfoCard.tsx new file mode 100644 index 00000000..2d787709 --- /dev/null +++ b/FrontEnd/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 = (props) => { + const { + timeline, + collapse, + onMember, + onManage, + syncStatus, + toggleCollapse, + } = props; + + const { t } = useTranslation(); + + const avatar = useAvatar(timeline?.owner?.username); + + return ( + +

+ {timeline.name} +

+
+ + {timeline.owner.nickname} + + @{timeline.owner.username} + +
+

{timeline.description}

+ + {t(timelineVisibilityTooltipTranslationMap[timeline.visibility])} + +
+ {onManage != null ? ( + + + {t("timeline.manage")} + + + onManage("property")}> + {t("timeline.manageItem.property")} + + + {t("timeline.manageItem.member")} + + + onManage("delete")} + > + {t("timeline.manageItem.delete")} + + + + ) : ( + + )} +
+
+ ); +}; + +export default TimelineInfoCard; diff --git a/FrontEnd/src/app/views/timeline/TimelinePageUI.tsx b/FrontEnd/src/app/views/timeline/TimelinePageUI.tsx new file mode 100644 index 00000000..67ea699e --- /dev/null +++ b/FrontEnd/src/app/views/timeline/TimelinePageUI.tsx @@ -0,0 +1,20 @@ +import React from "react"; + +import TimelinePageTemplateUI, { + TimelinePageTemplateUIProps, +} from "../timeline-common/TimelinePageTemplateUI"; + +import TimelineInfoCard, { + OrdinaryTimelineManageItem, +} from "./TimelineInfoCard"; + +export type TimelinePageUIProps = Omit< + TimelinePageTemplateUIProps, + "CardComponent" +>; + +const TimelinePageUI: React.FC = (props) => { + return ; +}; + +export default TimelinePageUI; diff --git a/FrontEnd/src/app/views/timeline/index.tsx b/FrontEnd/src/app/views/timeline/index.tsx new file mode 100644 index 00000000..225a1a59 --- /dev/null +++ b/FrontEnd/src/app/views/timeline/index.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { useParams } from "react-router"; + +import TimelinePageTemplate from "../timeline-common/TimelinePageTemplate"; + +import TimelinePageUI from "./TimelinePageUI"; +import { OrdinaryTimelineManageItem } from "./TimelineInfoCard"; +import TimelineDeleteDialog from "./TimelineDeleteDialog"; + +const TimelinePage: React.FC = (_) => { + const { name } = useParams<{ name: string }>(); + + const [dialog, setDialog] = React.useState( + null + ); + + let dialogElement: React.ReactElement | undefined; + if (dialog === "delete") { + dialogElement = ( + setDialog(null)} name={name} /> + ); + } + + return ( + <> + setDialog(item)} + notFoundI18nKey="timeline.timelineNotExist" + /> + {dialogElement} + + ); +}; + +export default TimelinePage; diff --git a/FrontEnd/src/app/views/timeline/timeline.sass b/FrontEnd/src/app/views/timeline/timeline.sass new file mode 100644 index 00000000..e69de29b diff --git a/FrontEnd/src/app/views/user/ChangeAvatarDialog.tsx b/FrontEnd/src/app/views/user/ChangeAvatarDialog.tsx new file mode 100644 index 00000000..ffa2218b --- /dev/null +++ b/FrontEnd/src/app/views/user/ChangeAvatarDialog.tsx @@ -0,0 +1,302 @@ +import React, { useState, useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import { AxiosError } from "axios"; +import { Modal, Row, Button } from "react-bootstrap"; + +import { UiLogicError } from "@/common"; + +import ImageCropper, { Clip, applyClipToImage } from "../common/ImageCropper"; + +export interface ChangeAvatarDialogProps { + open: boolean; + close: () => void; + process: (blob: Blob) => Promise; +} + +const ChangeAvatarDialog: React.FC = (props) => { + const { t } = useTranslation(); + + const [file, setFile] = React.useState(null); + const [fileUrl, setFileUrl] = React.useState(null); + const [clip, setClip] = React.useState(null); + const [ + cropImgElement, + setCropImgElement, + ] = React.useState(null); + const [resultBlob, setResultBlob] = React.useState(null); + const [resultUrl, setResultUrl] = React.useState(null); + + const [state, setState] = React.useState< + | "select" + | "crop" + | "processcrop" + | "preview" + | "uploading" + | "success" + | "error" + >("select"); + + const [message, setMessage] = useState< + string | { type: "custom"; text: string } | null + >("userPage.dialogChangeAvatar.prompt.select"); + + const trueMessage = + message == null + ? null + : typeof message === "string" + ? t(message) + : message.text; + + const closeDialog = props.close; + + const close = React.useCallback((): void => { + if (!(state === "uploading")) { + closeDialog(); + } + }, [state, closeDialog]); + + useEffect(() => { + if (file != null) { + const url = URL.createObjectURL(file); + setClip(null); + setFileUrl(url); + setState("crop"); + return () => { + URL.revokeObjectURL(url); + }; + } else { + setFileUrl(null); + setState("select"); + } + }, [file]); + + React.useEffect(() => { + if (resultBlob != null) { + const url = URL.createObjectURL(resultBlob); + setResultUrl(url); + setState("preview"); + return () => { + URL.revokeObjectURL(url); + }; + } else { + setResultUrl(null); + } + }, [resultBlob]); + + const onSelectFile = React.useCallback( + (e: React.ChangeEvent): void => { + const files = e.target.files; + if (files == null || files.length === 0) { + setFile(null); + } else { + setFile(files[0]); + } + }, + [] + ); + + const onCropNext = React.useCallback(() => { + if ( + cropImgElement == null || + clip == null || + clip.width === 0 || + file == null + ) { + throw new UiLogicError(); + } + + setState("processcrop"); + void applyClipToImage(cropImgElement, clip, file.type).then((b) => { + setResultBlob(b); + }); + }, [cropImgElement, clip, file]); + + const onCropPrevious = React.useCallback(() => { + setFile(null); + setState("select"); + }, []); + + const onPreviewPrevious = React.useCallback(() => { + setResultBlob(null); + setState("crop"); + }, []); + + const process = props.process; + + const upload = React.useCallback(() => { + if (resultBlob == null) { + throw new UiLogicError(); + } + + setState("uploading"); + process(resultBlob).then( + () => { + setState("success"); + }, + (e: unknown) => { + setState("error"); + setMessage({ type: "custom", text: (e as AxiosError).message }); + } + ); + }, [resultBlob, process]); + + const createPreviewRow = (): React.ReactElement => { + if (resultUrl == null) { + throw new UiLogicError(); + } + return ( + + {t("userPage.dialogChangeAvatar.previewImgAlt")} + + ); + }; + + return ( + + + {t("userPage.dialogChangeAvatar.title")} + + {(() => { + if (state === "select") { + return ( + <> + + {t("userPage.dialogChangeAvatar.prompt.select")} + + + + + + + + + ); + } else if (state === "crop") { + if (fileUrl == null) { + throw new UiLogicError(); + } + return ( + <> + + + + + {t("userPage.dialogChangeAvatar.prompt.crop")} + + + + + + + + ); + } else if (state === "processcrop") { + return ( + <> + + + {t("userPage.dialogChangeAvatar.prompt.processingCrop")} + + + + + + + + ); + } else if (state === "preview") { + return ( + <> + + {createPreviewRow()} + {t("userPage.dialogChangeAvatar.prompt.preview")} + + + + + + + + ); + } else if (state === "uploading") { + return ( + <> + + {createPreviewRow()} + {t("userPage.dialogChangeAvatar.prompt.uploading")} + + + + ); + } else if (state === "success") { + return ( + <> + + + {t("operationDialog.success")} + + + + + + + ); + } else { + return ( + <> + + {createPreviewRow()} + {trueMessage} + + + + + + + ); + } + })()} + + ); +}; + +export default ChangeAvatarDialog; diff --git a/FrontEnd/src/app/views/user/ChangeNicknameDialog.tsx b/FrontEnd/src/app/views/user/ChangeNicknameDialog.tsx new file mode 100644 index 00000000..251b18c5 --- /dev/null +++ b/FrontEnd/src/app/views/user/ChangeNicknameDialog.tsx @@ -0,0 +1,28 @@ +import React from "react"; + +import OperationDialog from "../common/OperationDialog"; + +export interface ChangeNicknameDialogProps { + open: boolean; + close: () => void; + onProcess: (newNickname: string) => Promise; +} + +const ChangeNicknameDialog: React.FC = (props) => { + return ( + { + return props.onProcess(newNickname as string); + }} + close={props.close} + /> + ); +}; + +export default ChangeNicknameDialog; diff --git a/FrontEnd/src/app/views/user/UserInfoCard.tsx b/FrontEnd/src/app/views/user/UserInfoCard.tsx new file mode 100644 index 00000000..888fb18a --- /dev/null +++ b/FrontEnd/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 = (props) => { + const { + timeline, + collapse, + onMember, + onManage, + syncStatus, + toggleCollapse, + } = props; + const { t } = useTranslation(); + + const avatar = useAvatar(timeline?.owner?.username); + + return ( + +
+ + {timeline.owner.nickname} + + @{timeline.owner.username} + +
+

{timeline.description}

+ + {t(timelineVisibilityTooltipTranslationMap[timeline.visibility])} + +
+ {onManage != null ? ( + + + {t("timeline.manage")} + + + onManage("nickname")}> + {t("timeline.manageItem.nickname")} + + onManage("avatar")}> + {t("timeline.manageItem.avatar")} + + onManage("property")}> + {t("timeline.manageItem.property")} + + + {t("timeline.manageItem.member")} + + + + ) : ( + + )} +
+
+ ); +}; + +export default UserInfoCard; diff --git a/FrontEnd/src/app/views/user/UserPageUI.tsx b/FrontEnd/src/app/views/user/UserPageUI.tsx new file mode 100644 index 00000000..d405399c --- /dev/null +++ b/FrontEnd/src/app/views/user/UserPageUI.tsx @@ -0,0 +1,18 @@ +import React from "react"; + +import TimelinePageTemplateUI, { + TimelinePageTemplateUIProps, +} from "../timeline-common/TimelinePageTemplateUI"; + +import UserInfoCard, { PersonalTimelineManageItem } from "./UserInfoCard"; + +export type UserPageUIProps = Omit< + TimelinePageTemplateUIProps, + "CardComponent" +>; + +const UserPageUI: React.FC = (props) => { + return ; +}; + +export default UserPageUI; diff --git a/FrontEnd/src/app/views/user/index.tsx b/FrontEnd/src/app/views/user/index.tsx new file mode 100644 index 00000000..7c0b1563 --- /dev/null +++ b/FrontEnd/src/app/views/user/index.tsx @@ -0,0 +1,72 @@ +import React, { useState } from "react"; +import { useParams } from "react-router"; + +import { UiLogicError } from "@/common"; +import { useUser, userInfoService } from "@/services/user"; + +import TimelinePageTemplate from "../timeline-common/TimelinePageTemplate"; + +import UserPageUI from "./UserPageUI"; +import { PersonalTimelineManageItem } from "./UserInfoCard"; +import ChangeNicknameDialog from "./ChangeNicknameDialog"; +import ChangeAvatarDialog from "./ChangeAvatarDialog"; + +const UserPage: React.FC = (_) => { + const { username } = useParams<{ username: string }>(); + + const user = useUser(); + + const [dialog, setDialog] = useState(null); + + let dialogElement: React.ReactElement | undefined; + + const closeDialogHandler = (): void => { + setDialog(null); + }; + + if (dialog === "nickname") { + if (user == null) { + throw new UiLogicError("Change nickname without login."); + } + + dialogElement = ( + + userInfoService.setNickname(username, newNickname) + } + /> + ); + } else if (dialog === "avatar") { + if (user == null) { + throw new UiLogicError("Change avatar without login."); + } + + dialogElement = ( + userInfoService.setAvatar(username, file)} + /> + ); + } + + const onManage = React.useCallback((item: PersonalTimelineManageItem) => { + setDialog(item); + }, []); + + return ( + <> + + {dialogElement} + + ); +}; + +export default UserPage; diff --git a/FrontEnd/src/app/views/user/user.sass b/FrontEnd/src/app/views/user/user.sass new file mode 100644 index 00000000..63a28e05 --- /dev/null +++ b/FrontEnd/src/app/views/user/user.sass @@ -0,0 +1,7 @@ +.change-avatar-cropper-row + max-height: 400px + +.change-avatar-img + min-width: 50% + max-width: 100% + max-height: 400px diff --git a/FrontEnd/src/sw/sw.ts b/FrontEnd/src/sw/sw.ts new file mode 100644 index 00000000..d6202f36 --- /dev/null +++ b/FrontEnd/src/sw/sw.ts @@ -0,0 +1,28 @@ +import { precacheAndRoute, matchPrecache } from "workbox-precaching"; +import { setDefaultHandler } from "workbox-routing"; +import { NetworkOnly } from "workbox-strategies"; + +declare let self: ServiceWorkerGlobalScope; + +self.addEventListener("message", (event) => { + if (event.data && (event.data as { type: string }).type === "SKIP_WAITING") { + void self.skipWaiting(); + } +}); + +precacheAndRoute(self.__WB_MANIFEST); + +const networkOnly = new NetworkOnly(); + +setDefaultHandler((options) => { + const { request, url } = options; + if (url && url.pathname.startsWith("/api/")) { + return networkOnly.handle(options); + } + + if (request instanceof Request && request.destination === "document") + return matchPrecache("/index.html").then((r) => + r == null ? Response.error() : r + ); + else return networkOnly.handle(options); +}); diff --git a/FrontEnd/src/sw/tsconfig.json b/FrontEnd/src/sw/tsconfig.json new file mode 100644 index 00000000..71fc0bcd --- /dev/null +++ b/FrontEnd/src/sw/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "lib": [ + "esnext", + "webworker" + ] + }, + "include": [ + "." + ] +} diff --git a/FrontEnd/src/tsconfig.json b/FrontEnd/src/tsconfig.json new file mode 100644 index 00000000..1855f5cd --- /dev/null +++ b/FrontEnd/src/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "esnext", + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "sourceMap": true, + "baseUrl": "./", + "paths": { + "@/*": [ + "app/*" + ] + } + } +} -- cgit v1.2.3 From b6495ef9f7d6466f9347b02e83ec0935d63af23e Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 27 Oct 2020 21:38:59 +0800 Subject: ... --- FrontEnd/.pnp.js | 283 ++++++++++++++++++++++------------------- FrontEnd/package.json | 10 +- FrontEnd/src/app/App.tsx | 3 +- FrontEnd/src/app/i18n.ts | 12 +- FrontEnd/webpack.config.dev.js | 15 ++- FrontEnd/yarn.lock | 203 +++++++++++++++-------------- 6 files changed, 276 insertions(+), 250 deletions(-) (limited to 'FrontEnd/src') diff --git a/FrontEnd/.pnp.js b/FrontEnd/.pnp.js index af643e73..bcc1bf3c 100644 --- a/FrontEnd/.pnp.js +++ b/FrontEnd/.pnp.js @@ -66,8 +66,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1" ], [ - "@hot-loader/react-dom", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.0" + "@pmmmwh/react-refresh-webpack-plugin", + "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.4.2" ], [ "@types/classnames", @@ -245,6 +245,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "prettier", "npm:2.1.2" ], + [ + "querystring-es3", + "npm:0.2.1" + ], [ "react", "npm:17.0.1" @@ -257,10 +261,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.1" ], - [ - "react-hot-loader", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.13.0" - ], [ "react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.3" @@ -269,6 +269,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "react-inlinesvg", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.1" ], + [ + "react-refresh", + "npm:0.9.0" + ], [ "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" @@ -309,6 +313,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "ts-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.0.7" ], + [ + "type-fest", + "npm:0.18.0" + ], [ "typescript", "patch:typescript@npm%3A4.0.5#builtin::version=4.0.5&hash=5b02a2" @@ -319,7 +327,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "webpack", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0" + "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1" ], [ "webpack-chain", @@ -374,7 +382,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@babel/preset-env", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@babel/preset-react", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@babel/preset-typescript", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], - ["@hot-loader/react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.0"], + ["@pmmmwh/react-refresh-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.4.2"], ["@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/lodash", "npm:4.14.162"], ["@types/node", "npm:14.14.5"], @@ -419,12 +427,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["postcss-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.0.4"], ["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.2"], + ["querystring-es3", "npm:0.2.1"], ["react", "npm:17.0.1"], ["react-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.4.0"], ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.1"], - ["react-hot-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.13.0"], ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.3"], ["react-inlinesvg", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.1"], + ["react-refresh", "npm:0.9.0"], ["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"], @@ -435,9 +444,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.4"], ["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0"], ["ts-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.0.7"], + ["type-fest", "npm:0.18.0"], ["typescript", "patch:typescript@npm%3A4.0.5#builtin::version=4.0.5&hash=5b02a2"], ["url-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-chain", "npm:6.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], @@ -3165,22 +3175,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["@hot-loader/react-dom", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.0", { - "packageLocation": "./.yarn/$$virtual/@hot-loader-react-dom-virtual-b4bf4ff7ed/0/cache/@hot-loader-react-dom-npm-17.0.0-666159a93b-9d2b060e88.zip/node_modules/@hot-loader/react-dom/", - "packageDependencies": [ - ["@hot-loader/react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.0"], - ["loose-envify", "npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floose-envify%2Fdownload%2Floose-envify-1.4.0.tgz"], - ["object-assign", "npm:4.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz"], - ["react", "npm:17.0.1"], - ["scheduler", "npm:0.20.1"] - ], - "packagePeers": [ - "react" - ], - "linkType": "HARD", - }] - ]], ["@nodelib/fs.scandir", [ ["npm:2.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.3.tgz", { "packageLocation": "./.yarn/cache/@nodelib-fs.scandir-npm-2.1.3-d37148b991-1f100655dd.zip/node_modules/@nodelib/fs.scandir/", @@ -3222,6 +3216,39 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@pmmmwh/react-refresh-webpack-plugin", [ + ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.4.2", { + "packageLocation": "./.yarn/$$virtual/@pmmmwh-react-refresh-webpack-plugin-virtual-4e8734919f/0/cache/@pmmmwh-react-refresh-webpack-plugin-npm-0.4.2-4fbefb2e62-cd70f32552.zip/node_modules/@pmmmwh/react-refresh-webpack-plugin/", + "packageDependencies": [ + ["@pmmmwh/react-refresh-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.4.2"], + ["@types/webpack", null], + ["ansi-html", "npm:0.0.7"], + ["error-stack-parser", "npm:2.0.6"], + ["html-entities", "npm:1.3.1"], + ["native-url", "npm:0.2.6"], + ["react-refresh", "npm:0.9.0"], + ["schema-utils", "npm:2.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz"], + ["sockjs-client", null], + ["source-map", "npm:0.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.7.3.tgz"], + ["type-fest", "npm:0.18.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], + ["webpack-hot-middleware", null], + ["webpack-plugin-serve", null] + ], + "packagePeers": [ + "react-refresh", + "sockjs-client", + "type-fest", + "@types/webpack", + "webpack", + "webpack-dev-server", + "webpack-hot-middleware", + "webpack-plugin-serve" + ], + "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/", @@ -4502,10 +4529,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ansi-html", [ - ["npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-html%2Fdownload%2Fansi-html-0.0.7.tgz", { - "packageLocation": "./.yarn/cache/ansi-html-npm-0.0.7-7ee0b8d117-1178680548.zip/node_modules/ansi-html/", + ["npm:0.0.7", { + "packageLocation": "./.yarn/cache/ansi-html-npm-0.0.7-962845f6a8-1178680548.zip/node_modules/ansi-html/", "packageDependencies": [ - ["ansi-html", "npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-html%2Fdownload%2Fansi-html-0.0.7.tgz"] + ["ansi-html", "npm:0.0.7"] ], "linkType": "HARD", }] @@ -4909,7 +4936,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["mkdirp", "npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"], ["pify", "npm:4.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz"], ["schema-utils", "npm:2.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "@babel/core", @@ -5637,7 +5664,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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"], ["@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"], ["del", "npm:4.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "webpack" @@ -5976,7 +6003,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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:3.0.0"], ["serialize-javascript", "npm:5.0.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-sources", "npm:1.4.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz"] ], "packagePeers": [ @@ -6134,7 +6161,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["postcss-value-parser", "npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.1.0.tgz"], ["schema-utils", "npm:3.0.0"], ["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "webpack" @@ -6592,15 +6619,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["dom-walk", [ - ["npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-walk%2Fdownload%2Fdom-walk-0.1.2.tgz", { - "packageLocation": "./.yarn/cache/dom-walk-npm-0.1.2-dc50e0840a-948c7527f3.zip/node_modules/dom-walk/", - "packageDependencies": [ - ["dom-walk", "npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-walk%2Fdownload%2Fdom-walk-0.1.2.tgz"] - ], - "linkType": "HARD", - }] - ]], ["domelementtype", [ ["npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz", { "packageLocation": "./.yarn/cache/domelementtype-npm-1.3.1-f26205e843-a4791788de.zip/node_modules/domelementtype/", @@ -6861,6 +6879,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["error-stack-parser", [ + ["npm:2.0.6", { + "packageLocation": "./.yarn/cache/error-stack-parser-npm-2.0.6-1c5bf07f6c-7abf762c20.zip/node_modules/error-stack-parser/", + "packageDependencies": [ + ["error-stack-parser", "npm:2.0.6"], + ["stackframe", "npm:1.2.0"] + ], + "linkType": "HARD", + }] + ]], ["es-abstract", [ ["npm:1.17.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz", { "packageLocation": "./.yarn/cache/es-abstract-npm-1.17.6-7a254592ff-637ad488bd.zip/node_modules/es-abstract/", @@ -7533,7 +7561,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.1"], ["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:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "webpack" @@ -7959,17 +7987,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["global", [ - ["npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal%2Fdownload%2Fglobal-4.4.0.tgz", { - "packageLocation": "./.yarn/cache/global-npm-4.4.0-5e9e9c41f4-da0cf92ef0.zip/node_modules/global/", - "packageDependencies": [ - ["global", "npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal%2Fdownload%2Fglobal-4.4.0.tgz"], - ["min-document", "npm:2.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmin-document%2Fdownload%2Fmin-document-2.19.0.tgz"], - ["process", "npm:0.11.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess%2Fdownload%2Fprocess-0.11.10.tgz"] - ], - "linkType": "HARD", - }] - ]], ["globals", [ ["npm:11.12.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz", { "packageLocation": "./.yarn/cache/globals-npm-11.12.0-3e7cfc1865-2563d3306a.zip/node_modules/globals/", @@ -8255,6 +8272,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["html-entities", [ + ["npm:1.3.1", { + "packageLocation": "./.yarn/cache/html-entities-npm-1.3.1-5f280346c8-53d37e5161.zip/node_modules/html-entities/", + "packageDependencies": [ + ["html-entities", "npm:1.3.1"] + ], + "linkType": "HARD", + }], ["npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz", { "packageLocation": "./.yarn/cache/html-entities-npm-1.3.1-2d9627a657-53d37e5161.zip/node_modules/html-entities/", "packageDependencies": [ @@ -8303,7 +8327,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["pretty-error", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-error%2Fdownload%2Fpretty-error-2.1.1.tgz"], ["tapable", "npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz"], ["util.promisify", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "webpack" @@ -9912,16 +9936,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["min-document", [ - ["npm:2.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmin-document%2Fdownload%2Fmin-document-2.19.0.tgz", { - "packageLocation": "./.yarn/cache/min-document-npm-2.19.0-34f9b0e52c-8da883996e.zip/node_modules/min-document/", - "packageDependencies": [ - ["min-document", "npm:2.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmin-document%2Fdownload%2Fmin-document-2.19.0.tgz"], - ["dom-walk", "npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-walk%2Fdownload%2Fdom-walk-0.1.2.tgz"] - ], - "linkType": "HARD", - }] - ]], ["mini-create-react-context", [ ["virtual:0218b2b49970ef26ee32bb7a2947da10cedb3799929c5397fcf0582a9103cd0038d0e0761c926815f4904b73a41e5a8049cfc801e2372a6acb427685c112c7d8#npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-create-react-context%2Fdownload%2Fmini-create-react-context-0.4.0.tgz", { "packageLocation": "./.yarn/$$virtual/mini-create-react-context-virtual-2c58e95df5/0/cache/mini-create-react-context-npm-0.4.0-ce8c7252c0-51f07df1ed.zip/node_modules/mini-create-react-context/", @@ -9946,7 +9960,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.0"], ["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:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-sources", "npm:1.4.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz"] ], "packagePeers": [ @@ -10144,6 +10158,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["native-url", [ + ["npm:0.2.6", { + "packageLocation": "./.yarn/cache/native-url-npm-0.2.6-89352a1379-064e580759.zip/node_modules/native-url/", + "packageDependencies": [ + ["native-url", "npm:0.2.6"], + ["querystring", "npm:0.2.0"] + ], + "linkType": "HARD", + }] + ]], ["natural-compare", [ ["npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnatural-compare%2Fdownload%2Fnatural-compare-1.4.0.tgz", { "packageLocation": "./.yarn/cache/natural-compare-npm-1.4.0-bb22abd68a-2daf93d9bb.zip/node_modules/natural-compare/", @@ -11319,7 +11343,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["postcss", "npm:8.1.4"], ["schema-utils", "npm:3.0.0"], ["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "postcss", @@ -11637,15 +11661,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["process", [ - ["npm:0.11.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess%2Fdownload%2Fprocess-0.11.10.tgz", { - "packageLocation": "./.yarn/cache/process-npm-0.11.10-7d90e33373-ed93a85e91.zip/node_modules/process/", - "packageDependencies": [ - ["process", "npm:0.11.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess%2Fdownload%2Fprocess-0.11.10.tgz"] - ], - "linkType": "HARD", - }] - ]], ["process-nextick-args", [ ["npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess-nextick-args%2Fdownload%2Fprocess-nextick-args-2.0.1.tgz", { "packageLocation": "./.yarn/cache/process-nextick-args-npm-2.0.1-d189bc3f5b-ddeb0f07d0.zip/node_modules/process-nextick-args/", @@ -11811,10 +11826,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["querystring", [ - ["npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz", { - "packageLocation": "./.yarn/cache/querystring-npm-0.2.0-e6c0a19fa3-1e76c51462.zip/node_modules/querystring/", + ["npm:0.2.0", { + "packageLocation": "./.yarn/cache/querystring-npm-0.2.0-421b870c92-1e76c51462.zip/node_modules/querystring/", "packageDependencies": [ - ["querystring", "npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz"] + ["querystring", "npm:0.2.0"] + ], + "linkType": "HARD", + }] + ]], + ["querystring-es3", [ + ["npm:0.2.1", { + "packageLocation": "./.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-3c388906aa.zip/node_modules/querystring-es3/", + "packageDependencies": [ + ["querystring-es3", "npm:0.2.1"] ], "linkType": "HARD", }] @@ -11942,31 +11966,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["react-hot-loader", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.13.0", { - "packageLocation": "./.yarn/$$virtual/react-hot-loader-virtual-9b6c66cb8a/0/cache/react-hot-loader-npm-4.13.0-ec29a44932-f1df03e932.zip/node_modules/react-hot-loader/", - "packageDependencies": [ - ["react-hot-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.13.0"], - ["@types/react", "npm:16.9.53"], - ["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"], - ["loader-utils", "npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-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:17.0.1"], - ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.1"], - ["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"], - ["shallowequal", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshallowequal%2Fdownload%2Fshallowequal-1.1.0.tgz"], - ["source-map", "npm:0.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.7.3.tgz"] - ], - "packagePeers": [ - "@types/react", - "react", - "react-dom" - ], - "linkType": "HARD", - }] - ]], ["react-i18next", [ ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.3", { "packageLocation": "./.yarn/$$virtual/react-i18next-virtual-bd6e918979/0/cache/react-i18next-npm-11.7.3-30ee610170-7f0b0535bf.zip/node_modules/react-i18next/", @@ -12040,6 +12039,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["react-refresh", [ + ["npm:0.9.0", { + "packageLocation": "./.yarn/cache/react-refresh-npm-0.9.0-02c61ee045-300dc43138.zip/node_modules/react-refresh/", + "packageDependencies": [ + ["react-refresh", "npm:0.9.0"] + ], + "linkType": "HARD", + }] + ]], ["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", { "packageLocation": "./.yarn/$$virtual/react-responsive-virtual-889e4c0da2/0/cache/react-responsive-npm-8.1.0-0c4689f9df-059c460fd4.zip/node_modules/react-responsive/", @@ -12743,7 +12751,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["sass", "npm:1.27.0"], ["schema-utils", "npm:3.0.0"], ["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "fibers", @@ -12971,15 +12979,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["shallowequal", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshallowequal%2Fdownload%2Fshallowequal-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/shallowequal-npm-1.1.0-2c381f3031-15820dd544.zip/node_modules/shallowequal/", - "packageDependencies": [ - ["shallowequal", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshallowequal%2Fdownload%2Fshallowequal-1.1.0.tgz"] - ], - "linkType": "HARD", - }] - ]], ["shebang-command", [ ["npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz", { "packageLocation": "./.yarn/cache/shebang-command-npm-1.2.0-d9ffeb9731-2a1e0092a6.zip/node_modules/shebang-command/", @@ -13342,6 +13341,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["stackframe", [ + ["npm:1.2.0", { + "packageLocation": "./.yarn/cache/stackframe-npm-1.2.0-89ca050ce4-71e2868a52.zip/node_modules/stackframe/", + "packageDependencies": [ + ["stackframe", "npm:1.2.0"] + ], + "linkType": "HARD", + }] + ]], ["static-extend", [ ["npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatic-extend%2Fdownload%2Fstatic-extend-0.1.2.tgz", { "packageLocation": "./.yarn/cache/static-extend-npm-0.1.2-a36503dc55-c42052c352.zip/node_modules/static-extend/", @@ -13569,7 +13577,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0"], ["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:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "webpack" @@ -13733,17 +13741,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["terser-webpack-plugin", [ - ["virtual:da1918d5aef4b3f017250e626bcdf71c9210424aba35a828e9df5793e812bee0ca9643507b340f1722c72546fadacb741b6e9423e40b0e0605764717210cf76f#npm:5.0.1", { - "packageLocation": "./.yarn/$$virtual/terser-webpack-plugin-virtual-8a1d554d58/0/cache/terser-webpack-plugin-npm-5.0.1-e2259a3f81-23dfddfcba.zip/node_modules/terser-webpack-plugin/", + ["virtual:3d397640c5f0b4b3de718c05931a789ea9e8a462d5fe086e49019e71e5c46ec377c4b2afd31a8718b532f901d4c8fd3aa701b59eb4eee1c89da6eddea9e2f48f#npm:5.0.1", { + "packageLocation": "./.yarn/$$virtual/terser-webpack-plugin-virtual-7ef3fbaf5a/0/cache/terser-webpack-plugin-npm-5.0.1-e2259a3f81-23dfddfcba.zip/node_modules/terser-webpack-plugin/", "packageDependencies": [ - ["terser-webpack-plugin", "virtual:da1918d5aef4b3f017250e626bcdf71c9210424aba35a828e9df5793e812bee0ca9643507b340f1722c72546fadacb741b6e9423e40b0e0605764717210cf76f#npm:5.0.1"], + ["terser-webpack-plugin", "virtual:3d397640c5f0b4b3de718c05931a789ea9e8a462d5fe086e49019e71e5c46ec377c4b2afd31a8718b532f901d4c8fd3aa701b59eb4eee1c89da6eddea9e2f48f#npm:5.0.1"], ["jest-worker", "npm:26.6.1"], ["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:3.0.0"], ["serialize-javascript", "npm:5.0.1"], ["source-map", "npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz"], ["terser", "npm:5.3.8"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "webpack" @@ -13783,7 +13791,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@babel/preset-env", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@babel/preset-react", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@babel/preset-typescript", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], - ["@hot-loader/react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.0"], + ["@pmmmwh/react-refresh-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.4.2"], ["@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/lodash", "npm:4.14.162"], ["@types/node", "npm:14.14.5"], @@ -13828,12 +13836,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["postcss-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.0.4"], ["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.2"], + ["querystring-es3", "npm:0.2.1"], ["react", "npm:17.0.1"], ["react-bootstrap", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.4.0"], ["react-dom", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:17.0.1"], - ["react-hot-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.13.0"], ["react-i18next", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:11.7.3"], ["react-inlinesvg", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.1.1"], + ["react-refresh", "npm:0.9.0"], ["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"], @@ -13844,9 +13853,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.4"], ["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0"], ["ts-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.0.7"], + ["type-fest", "npm:0.18.0"], ["typescript", "patch:typescript@npm%3A4.0.5#builtin::version=4.0.5&hash=5b02a2"], ["url-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-chain", "npm:6.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], @@ -14077,6 +14087,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:0.18.0", { + "packageLocation": "./.yarn/cache/type-fest-npm-0.18.0-ac93bc6cd8-22f7fb528b.zip/node_modules/type-fest/", + "packageDependencies": [ + ["type-fest", "npm:0.18.0"] + ], + "linkType": "HARD", + }], ["npm:0.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.3.1.tgz", { "packageLocation": "./.yarn/cache/type-fest-npm-0.3.1-96c1013afe-5089230611.zip/node_modules/type-fest/", "packageDependencies": [ @@ -14310,7 +14327,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageDependencies": [ ["url", "npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz"], ["punycode", "npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.3.2.tgz"], - ["querystring", "npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz"] + ["querystring", "npm:0.2.0"] ], "linkType": "HARD", }] @@ -14333,7 +14350,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"], ["mime-types", "npm:2.1.27"], ["schema-utils", "npm:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] ], "packagePeers": [ "file-loader", @@ -14514,10 +14531,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["webpack", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0", { - "packageLocation": "./.yarn/$$virtual/webpack-virtual-da1918d5ae/0/cache/webpack-npm-5.2.0-128d7e3fc2-1f91563c25.zip/node_modules/webpack/", + ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1", { + "packageLocation": "./.yarn/$$virtual/webpack-virtual-3d397640c5/0/cache/webpack-npm-5.2.1-ad5c5c6760-1503203935.zip/node_modules/webpack/", "packageDependencies": [ - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["@types/eslint-scope", "npm:3.7.0"], ["@types/estree", "npm:0.0.45"], ["@webassemblyjs/ast", "npm:1.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz"], @@ -14539,7 +14556,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["pkg-dir", "npm:4.2.0"], ["schema-utils", "npm:3.0.0"], ["tapable", "npm:2.0.0"], - ["terser-webpack-plugin", "virtual:da1918d5aef4b3f017250e626bcdf71c9210424aba35a828e9df5793e812bee0ca9643507b340f1722c72546fadacb741b6e9423e40b0e0605764717210cf76f#npm:5.0.1"], + ["terser-webpack-plugin", "virtual:3d397640c5f0b4b3de718c05931a789ea9e8a462d5fe086e49019e71e5c46ec377c4b2afd31a8718b532f901d4c8fd3aa701b59eb4eee1c89da6eddea9e2f48f#npm:5.0.1"], ["watchpack", "npm:2.0.0"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], ["webpack-sources", "npm:2.1.0"] @@ -14582,7 +14599,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["interpret", "npm:2.2.0"], ["rechoir", "npm:0.7.0"], ["v8-compile-cache", "npm:2.1.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-bundle-analyzer", null], ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], ["webpack-merge", "npm:4.2.2"] @@ -14608,7 +14625,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["mime", "npm:2.4.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz"], ["mkdirp", "npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"], ["range-parser", "npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frange-parser%2Fdownload%2Frange-parser-1.2.1.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-log", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz"] ], "packagePeers": [ @@ -14622,7 +14639,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageLocation": "./.yarn/$$virtual/webpack-dev-server-virtual-dd7bf9071c/0/cache/webpack-dev-server-npm-3.11.0-6158244322-1d34457456.zip/node_modules/webpack-dev-server/", "packageDependencies": [ ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], - ["ansi-html", "npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-html%2Fdownload%2Fansi-html-0.0.7.tgz"], + ["ansi-html", "npm:0.0.7"], ["bonjour", "npm:3.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbonjour%2Fdownload%2Fbonjour-3.5.0.tgz"], ["chokidar", "npm:2.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz"], ["compression", "npm:1.7.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz"], @@ -14651,7 +14668,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["strip-ansi", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz"], ["supports-color", "npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz"], ["url", "npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], ["webpack-dev-middleware", "virtual:dd7bf9071c15c1b7a313ecdd010711f705a91e516eac87ed27bf82d6945d9d7d9c5b82dec9391533d88e32ec8de8326d7c2bcbfc63ae4f43b290a451f472b891#npm:3.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz"], ["webpack-log", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz"], @@ -14969,7 +14986,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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"], ["source-map-url", "npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.0.tgz"], ["upath", "npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], ["webpack-sources", "npm:1.4.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz"], ["workbox-build", "npm:5.1.4"] ], diff --git a/FrontEnd/package.json b/FrontEnd/package.json index 65c5cbe2..12f3fbea 100644 --- a/FrontEnd/package.json +++ b/FrontEnd/package.json @@ -20,7 +20,6 @@ "react": "^17.0.1", "react-bootstrap": "^1.4.0", "react-dom": "^17.0.1", - "react-hot-loader": "^4.13.0", "react-i18next": "^11.7.3", "react-inlinesvg": "^2.1.1", "react-responsive": "^8.1.0", @@ -36,7 +35,7 @@ "xregexp": "^4.3.0" }, "scripts": { - "start": "webpack-dev-server --config ./webpack.config.dev.js", + "start": "webpack serve --config ./webpack.config.dev.js", "build": "webpack --config ./webpack.config.prod.js", "lint": "eslint src/ --ext .js --ext .jsx --ext .ts --ext .tsx" }, @@ -62,7 +61,7 @@ "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.1", "@babel/preset-typescript": "^7.12.1", - "@hot-loader/react-dom": "^17.0.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.2", "@types/classnames": "^2.2.10", "@types/lodash": "^4.14.162", "@types/node": "^14.14.5", @@ -96,13 +95,16 @@ "postcss-loader": "^4.0.4", "postcss-preset-env": "^6.7.0", "prettier": "^2.1.2", + "querystring-es3": "^0.2.1", + "react-refresh": "^0.9.0", "sass": "^1.27.0", "sass-loader": "^10.0.4", "style-loader": "^2.0.0", "ts-loader": "^8.0.7", + "type-fest": "^0.18.0", "typescript": "^4.0.5", "url-loader": "^4.1.1", - "webpack": "^5.2.0", + "webpack": "^5.2.1", "webpack-chain": "^6.5.1", "webpack-cli": "^4.1.0", "webpack-dev-server": "^3.11.0", diff --git a/FrontEnd/src/app/App.tsx b/FrontEnd/src/app/App.tsx index b68eddb6..4e53d4da 100644 --- a/FrontEnd/src/app/App.tsx +++ b/FrontEnd/src/app/App.tsx @@ -1,6 +1,5 @@ import React from "react"; import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; -import { hot } from "react-hot-loader/root"; import AppBar from "./views/common/AppBar"; import LoadingPage from "./views/common/LoadingPage"; @@ -81,4 +80,4 @@ const App: React.FC = () => { } }; -export default hot(App); +export default App; diff --git a/FrontEnd/src/app/i18n.ts b/FrontEnd/src/app/i18n.ts index cdced7bf..aeac1f1f 100644 --- a/FrontEnd/src/app/i18n.ts +++ b/FrontEnd/src/app/i18n.ts @@ -18,18 +18,10 @@ const backend: BackendModule = { } if (language === "en") { - const res = ( - await import( - /* webpackChunkName: "locales-en" */ "./locales/en/translation" - ) - ).default; + const res = (await import("./locales/en/translation")).default; success(res); } else if (language === "zh-cn" || language === "zh") { - const res = ( - await import( - /* webpackChunkName: "locales-zh" */ "./locales/zh/translation" - ) - ).default; + const res = (await import("./locales/zh/translation")).default; success(res); } else { error(`Language ${language} is not supported.`); diff --git a/FrontEnd/webpack.config.dev.js b/FrontEnd/webpack.config.dev.js index c88e1aaf..937ab3fb 100644 --- a/FrontEnd/webpack.config.dev.js +++ b/FrontEnd/webpack.config.dev.js @@ -1,24 +1,23 @@ const path = require("path"); const webpack = require("webpack"); +const ReactRefreshWebpackPlugin = require("@pmmmwh/react-refresh-webpack-plugin"); const config = require("./webpack.common"); config.mode("development"); -config.entry("index").add("react-hot-loader/patch"); - config.module .rule("ts") .use("babel") .options({ - plugins: ["react-hot-loader/babel"], + plugins: ["react-refresh/babel"], }); config.module .rule("js") .use("babel") .options({ - plugins: ["react-hot-loader/babel"], + plugins: ["react-refresh/babel"], }); config.module @@ -37,16 +36,18 @@ config.module config.devtool("eval-cheap-module-source-map"); -config.resolve.alias.set("react-dom", "@hot-loader/react-dom"); +config.resolve.set("fallback", { + querystring: require.resolve("querystring-es3"), +}); config.devServer .contentBase(path.resolve(__dirname, "public/")) .host("0.0.0.0") .port(3000) .historyApiFallback(true) - .hotOnly(true) - .allowedHosts.add(".myide.io"); + .hotOnly(true); config.plugin("hot").use(webpack.HotModuleReplacementPlugin); +config.plugin("react-refresh").use(new ReactRefreshWebpackPlugin()); module.exports = config.toConfig(); diff --git a/FrontEnd/yarn.lock b/FrontEnd/yarn.lock index 5d5a9e4d..65ecd497 100644 --- a/FrontEnd/yarn.lock +++ b/FrontEnd/yarn.lock @@ -2261,19 +2261,6 @@ __metadata: languageName: node linkType: hard -"@hot-loader/react-dom@npm:^17.0.0": - version: 17.0.0 - resolution: "@hot-loader/react-dom@npm:17.0.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - scheduler: ^0.20.0 - peerDependencies: - react: 17.0.0 - checksum: 9d2b060e884d085345a9a73116fe9aee1fbdd0872b6fd1ccb02bd81dc411bcb644e202270e9e0f8ae57957dc67a96f503ed21362b4a3802a0aaa50b86e0a27e0 - languageName: node - linkType: hard - "@nodelib/fs.scandir@npm:2.1.3": version: 2.1.3 resolution: "@nodelib/fs.scandir@npm:2.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.3.tgz" @@ -2310,6 +2297,42 @@ __metadata: languageName: node linkType: hard +"@pmmmwh/react-refresh-webpack-plugin@npm:^0.4.2": + version: 0.4.2 + resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.4.2" + dependencies: + ansi-html: ^0.0.7 + error-stack-parser: ^2.0.6 + html-entities: ^1.2.1 + native-url: ^0.2.6 + schema-utils: ^2.6.5 + source-map: ^0.7.3 + peerDependencies: + "@types/webpack": 4.x + react-refresh: ^0.8.3 + sockjs-client: ^1.4.0 + type-fest: ^0.13.1 + webpack: ">=4.43.0 <6.0.0" + webpack-dev-server: 3.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + "@types/webpack": + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + checksum: cd70f32552ba053dbeefe605027c8fd97e435c0ff6d4cddb5e367d02444e3ed04f1d7fb9dca516780788c2cb17c640dcd353f0ec60412cd774f1bf0ce2d34f8a + 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" @@ -3429,9 +3452,9 @@ __metadata: languageName: node linkType: hard -"ansi-html@npm:0.0.7": +"ansi-html@npm:0.0.7, ansi-html@npm:^0.0.7": version: 0.0.7 - resolution: "ansi-html@npm:0.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-html%2Fdownload%2Fansi-html-0.0.7.tgz" + resolution: "ansi-html@npm:0.0.7" bin: ansi-html: ./bin/ansi-html checksum: 1178680548785b6557e67c197c343411ee1a334606058ebcfb4a3c79accddaa43edb511b0dcb79c15a18041fe0e8d1063bbbad95be8b5b1d56934b9a51d88c83 @@ -5282,13 +5305,6 @@ __metadata: languageName: node linkType: hard -"dom-walk@npm:^0.1.0": - version: 0.1.2 - resolution: "dom-walk@npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-walk%2Fdownload%2Fdom-walk-0.1.2.tgz" - checksum: 948c7527f3798cae9d7039cc0e5dc9f013ebd701d7d99478bac79d7d9eb8b81e7b6e836526e21ed9b156466b268e30ea0f2d5b72df955fabec3ce2aa7dc0086e - languageName: node - linkType: hard - "domelementtype@npm:1, domelementtype@npm:^1.3.1": version: 1.3.1 resolution: "domelementtype@npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz" @@ -5451,7 +5467,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.3.0": +"enhanced-resolve@npm:^5.3.1": version: 5.3.1 resolution: "enhanced-resolve@npm:5.3.1" dependencies: @@ -5529,6 +5545,15 @@ __metadata: languageName: node linkType: hard +"error-stack-parser@npm:^2.0.6": + version: 2.0.6 + resolution: "error-stack-parser@npm:2.0.6" + dependencies: + stackframe: ^1.1.1 + checksum: 7abf762c20054310d33f0c0a34a2ea38f93a1b0169f5289feb96cf94d7b30d277a0df09567469be79ccfcfa49df37cddc8c59e0bc5b682a1e7e3c234e67b25c8 + languageName: node + linkType: hard + "es-abstract@npm:^1.17.0, es-abstract@npm:^1.17.0-next.1, es-abstract@npm:^1.17.5": version: 1.17.6 resolution: "es-abstract@npm:1.17.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz" @@ -6541,16 +6566,6 @@ fsevents@~2.1.2: languageName: node linkType: hard -"global@npm:^4.3.0": - version: 4.4.0 - resolution: "global@npm:4.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal%2Fdownload%2Fglobal-4.4.0.tgz" - dependencies: - min-document: ^2.19.0 - process: ^0.11.10 - checksum: da0cf92ef034b63cf4d0fe5e14cb71bc4c748b8c1bbeabe4061443562ba8e9027774f8074e66543fa98f0d965da6d11e0861e3bf8c628b7ab19220e8ee18cc71 - languageName: node - linkType: hard - "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz" @@ -6780,7 +6795,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0": +"hoist-non-react-statics@npm:^3.1.0": version: 3.3.2 resolution: "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" dependencies: @@ -6808,6 +6823,13 @@ fsevents@~2.1.2: languageName: node linkType: hard +"html-entities@npm:^1.2.1": + version: 1.3.1 + resolution: "html-entities@npm:1.3.1" + checksum: 53d37e5161230ad7f2c16dd2b54945069d84b5167113eac55e39a8fffed357378afc022d5dc66045b132ea46232cab41aee86e79dd5cd0618e0b78776b9085b5 + languageName: node + linkType: hard + "html-entities@npm:^1.3.1": version: 1.3.1 resolution: "html-entities@npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz" @@ -7942,7 +7964,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"loader-utils@npm:^1.0.2, loader-utils@npm:^1.1.0, loader-utils@npm:^1.2.3, loader-utils@npm:^1.4.0": +"loader-utils@npm:^1.0.2, loader-utils@npm:^1.2.3, loader-utils@npm:^1.4.0": version: 1.4.0 resolution: "loader-utils@npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz" dependencies: @@ -8304,15 +8326,6 @@ fsevents@~2.1.2: languageName: node linkType: hard -"min-document@npm:^2.19.0": - version: 2.19.0 - resolution: "min-document@npm:2.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmin-document%2Fdownload%2Fmin-document-2.19.0.tgz" - dependencies: - dom-walk: ^0.1.0 - checksum: 8da883996e00a53729e867dad45a358c6d8b3b55f2473a20768c1a2b4642d0983bc61827cf29eb98c53d7290c2a1a74a5cba60873857da416bdfae09bf73bb21 - languageName: node - linkType: hard - "mini-create-react-context@npm:^0.4.0": version: 0.4.0 resolution: "mini-create-react-context@npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-create-react-context%2Fdownload%2Fmini-create-react-context-0.4.0.tgz" @@ -8515,6 +8528,15 @@ fsevents@~2.1.2: languageName: node linkType: hard +"native-url@npm:^0.2.6": + version: 0.2.6 + resolution: "native-url@npm:0.2.6" + dependencies: + querystring: ^0.2.0 + checksum: 064e580759f06060740636184ba8dbd8cf21a1237c769625591f8a0e956714ea27d58d601fe84c4b9600dfabc88edfb3bf51fc7a579764b5d60e0d9392aec9df + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnatural-compare%2Fdownload%2Fnatural-compare-1.4.0.tgz" @@ -9865,13 +9887,6 @@ fsevents@~2.1.2: languageName: node linkType: hard -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess%2Fdownload%2Fprocess-0.11.10.tgz" - checksum: ed93a85e9185b40fb01788c588a87c1a9da0eb925ef7cebebbe1b8bbf0eba1802130366603a29e3b689c116969d4fe018de6aed3474bbeb5aefb3716b85d6449 - languageName: node - linkType: hard - "progress@npm:^2.0.0": version: 2.0.3 resolution: "progress@npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprogress%2Fdownload%2Fprogress-2.0.3.tgz" @@ -10006,9 +10021,16 @@ fsevents@~2.1.2: languageName: node linkType: hard -"querystring@npm:0.2.0": +"querystring-es3@npm:^0.2.1": + version: 0.2.1 + resolution: "querystring-es3@npm:0.2.1" + checksum: 3c388906aa5644e55cdbede78f99a4d05a6e36a45b06929ad8713a2020a5cefeb6ec23adaa27584d968cf658e5d237b5e216f5e48930d040cd6b810679714741 + languageName: node + linkType: hard + +"querystring@npm:0.2.0, querystring@npm:^0.2.0": version: 0.2.0 - resolution: "querystring@npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz" + resolution: "querystring@npm:0.2.0" checksum: 1e76c51462f0ffb148e0b2fdeb811f61377800298605229d32efcdaaaf0a8fd4314a4b4405e1fbf130a5ca421c0e51f926fab5bb9f8b9b3b8c394f4e2d33d3d1 languageName: node linkType: hard @@ -10106,29 +10128,6 @@ fsevents@~2.1.2: languageName: node linkType: hard -"react-hot-loader@npm:^4.13.0": - version: 4.13.0 - resolution: "react-hot-loader@npm:4.13.0" - dependencies: - fast-levenshtein: ^2.0.6 - global: ^4.3.0 - hoist-non-react-statics: ^3.3.0 - loader-utils: ^1.1.0 - prop-types: ^15.6.1 - react-lifecycles-compat: ^3.0.4 - shallowequal: ^1.1.0 - source-map: ^0.7.3 - peerDependencies: - "@types/react": "^15.0.0 || ^16.0.0 || ^17.0.0 " - react: "^15.0.0 || ^16.0.0 || ^17.0.0 " - react-dom: "^15.0.0 || ^16.0.0 || ^17.0.0 " - peerDependenciesMeta: - "@types/react": - optional: true - checksum: f1df03e93206b379b605f3da983f700d5c8a16e3ebedf25ca1311067f4dc95cf968206af44d0b734a5505619958f2da5efe9df4bf749ed6a4989e1f6ea5d2915 - languageName: node - linkType: hard - "react-i18next@npm:^11.7.3": version: 11.7.3 resolution: "react-i18next@npm:11.7.3" @@ -10187,6 +10186,13 @@ fsevents@~2.1.2: languageName: node linkType: hard +"react-refresh@npm:^0.9.0": + version: 0.9.0 + resolution: "react-refresh@npm:0.9.0" + checksum: 300dc431389f4c532bdfec08d5bc59b591c8c440486a7d5770c8954adf3afe62501b659c5acbdb7831751e8be506eb90a6f72491fab40352f3b3fba16897acf6 + languageName: node + linkType: hard + "react-responsive@npm:^8.1.0": version: 8.1.0 resolution: "react-responsive@npm:8.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-responsive%2Fdownload%2Freact-responsive-8.1.0.tgz" @@ -10860,7 +10866,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"scheduler@npm:^0.20.0, scheduler@npm:^0.20.1": +"scheduler@npm:^0.20.1": version: 0.20.1 resolution: "scheduler@npm:0.20.1" dependencies: @@ -11068,13 +11074,6 @@ fsevents@~2.1.2: languageName: node linkType: hard -"shallowequal@npm:^1.1.0": - version: 1.1.0 - resolution: "shallowequal@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshallowequal%2Fdownload%2Fshallowequal-1.1.0.tgz" - checksum: 15820dd544ce15521565c366940a46dcbe0f093c1336f6259c7b3e2490ca10135645ee262778f555d3ccc38283207f2f0a41e9a0f26888b5d5159f2904c4ac68 - languageName: node - linkType: hard - "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz" @@ -11406,6 +11405,13 @@ fsevents@~2.1.2: languageName: node linkType: hard +"stackframe@npm:^1.1.1": + version: 1.2.0 + resolution: "stackframe@npm:1.2.0" + checksum: 71e2868a529123e9ca1cf510192a7de879b8d92b5829c7f58d5576e1500cbedf22b5d9cc86589c547b6842abcf01cea13979ab8301b51e85bdb6267a6f9288f2 + languageName: node + linkType: hard + "static-extend@npm:^0.1.1": version: 0.1.2 resolution: "static-extend@npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatic-extend%2Fdownload%2Fstatic-extend-0.1.2.tgz" @@ -11814,7 +11820,7 @@ fsevents@~2.1.2: "@babel/preset-env": ^7.12.1 "@babel/preset-react": ^7.12.1 "@babel/preset-typescript": ^7.12.1 - "@hot-loader/react-dom": ^17.0.0 + "@pmmmwh/react-refresh-webpack-plugin": ^0.4.2 "@types/classnames": ^2.2.10 "@types/lodash": ^4.14.162 "@types/node": ^14.14.5 @@ -11859,12 +11865,13 @@ fsevents@~2.1.2: postcss-loader: ^4.0.4 postcss-preset-env: ^6.7.0 prettier: ^2.1.2 + querystring-es3: ^0.2.1 react: ^17.0.1 react-bootstrap: ^1.4.0 react-dom: ^17.0.1 - react-hot-loader: ^4.13.0 react-i18next: ^11.7.3 react-inlinesvg: ^2.1.1 + react-refresh: ^0.9.0 react-responsive: ^8.1.0 react-router: ^5.2.0 react-router-bootstrap: ^0.25.0 @@ -11875,9 +11882,10 @@ fsevents@~2.1.2: sass-loader: ^10.0.4 style-loader: ^2.0.0 ts-loader: ^8.0.7 + type-fest: ^0.18.0 typescript: ^4.0.5 url-loader: ^4.1.1 - webpack: ^5.2.0 + webpack: ^5.2.1 webpack-chain: ^6.5.1 webpack-cli: ^4.1.0 webpack-dev-server: ^3.11.0 @@ -12066,6 +12074,13 @@ fsevents@~2.1.2: languageName: node linkType: hard +"type-fest@npm:^0.18.0": + version: 0.18.0 + resolution: "type-fest@npm:0.18.0" + checksum: 22f7fb528bf187ef3964e718a4cad2c669bf47989486ae8f66a140954f555760f7220fe5028f30df816d62a741c4748499ebc3ffcf37c8bbfb9f5a47d2c9a0d0 + languageName: node + linkType: hard + "type-fest@npm:^0.3.1": version: 0.3.1 resolution: "type-fest@npm:0.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.3.1.tgz" @@ -12600,7 +12615,7 @@ typescript@^4.0.5: languageName: node linkType: hard -"webpack-sources@npm:^2.0.1": +"webpack-sources@npm:^2.1.0": version: 2.1.0 resolution: "webpack-sources@npm:2.1.0" dependencies: @@ -12610,9 +12625,9 @@ typescript@^4.0.5: languageName: node linkType: hard -"webpack@npm:^5.2.0": - version: 5.2.0 - resolution: "webpack@npm:5.2.0" +"webpack@npm:^5.2.1": + version: 5.2.1 + resolution: "webpack@npm:5.2.1" dependencies: "@types/eslint-scope": ^3.7.0 "@types/estree": ^0.0.45 @@ -12623,7 +12638,7 @@ typescript@^4.0.5: acorn: ^8.0.4 browserslist: ^4.14.5 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.3.0 + enhanced-resolve: ^5.3.1 eslint-scope: ^5.1.1 events: ^3.2.0 glob-to-regexp: ^0.4.1 @@ -12637,7 +12652,7 @@ typescript@^4.0.5: tapable: ^2.0.0 terser-webpack-plugin: ^5.0.0 watchpack: ^2.0.0 - webpack-sources: ^2.0.1 + webpack-sources: ^2.1.0 peerDependencies: webpack-cli: "*" peerDependenciesMeta: @@ -12645,7 +12660,7 @@ typescript@^4.0.5: optional: true bin: webpack: bin/webpack.js - checksum: 1f91563c2512e9068c9d76f45479fd3c6d9652f490c428d36ce9f5311979609e363e58b0cf8f23019185cd335e72d00a48911a9c1da1b34f0d7a6265eab7e5c4 + checksum: 1503203935b40b7a746e078a8653f7154347c76a0250d8ea7b6827059d53b54df6ddbdddae785c9e17d5da23a48edfe3dc3da859b25a58f54bcf45781dedb4eb languageName: node linkType: hard -- cgit v1.2.3 From 7ce0846d9ec968da3ea4f7ebcc6db26db8e49089 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 31 Oct 2020 00:37:10 +0800 Subject: Update packages. --- FrontEnd/.pnp.js | 2601 ++++++++++++++++++---------------- FrontEnd/package.json | 24 +- FrontEnd/src/app/services/DataHub.ts | 2 +- FrontEnd/yarn.lock | 961 ++++++++----- 4 files changed, 2003 insertions(+), 1585 deletions(-) (limited to 'FrontEnd/src') diff --git a/FrontEnd/.pnp.js b/FrontEnd/.pnp.js index bcc1bf3c..f722c89a 100644 --- a/FrontEnd/.pnp.js +++ b/FrontEnd/.pnp.js @@ -71,23 +71,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "@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" + "npm:2.2.11" ], [ "@types/lodash", - "npm:4.14.162" + "npm:4.14.164" ], [ "@types/node", - "npm:14.14.5" + "npm:14.14.6" ], [ "@types/react", - "npm:16.9.53" + "npm:16.9.55" ], [ "@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" + "npm:16.9.9" ], [ "@types/react-responsive", @@ -143,7 +143,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "bootstrap-icons", - "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz" + "npm:1.1.0" ], [ "classnames", @@ -175,7 +175,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "eslint-config-prettier", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.14.0" + "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.15.0" ], [ "eslint-plugin-import", @@ -195,7 +195,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "file-loader", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.1" + "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.2.0" ], [ "html-webpack-plugin", @@ -223,7 +223,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "mini-css-extract-plugin", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.0" + "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.1" ], [ "pepjs", @@ -299,7 +299,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "sass", - "npm:1.27.0" + "npm:1.28.0" ], [ "sass-loader", @@ -327,7 +327,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "webpack", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1" + "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2" ], [ "webpack-chain", @@ -339,7 +339,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "webpack-dev-server", - "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz" + "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0" ], [ "workbox-precaching", @@ -363,7 +363,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], [ "xregexp", - "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-4.3.0.tgz" + "npm:4.4.0" ] ], "locationBlacklistData": [ @@ -383,11 +383,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@babel/preset-react", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@babel/preset-typescript", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@pmmmwh/react-refresh-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.4.2"], - ["@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/lodash", "npm:4.14.162"], - ["@types/node", "npm:14.14.5"], - ["@types/react", "npm:16.9.53"], - ["@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/classnames", "npm:2.2.11"], + ["@types/lodash", "npm:4.14.164"], + ["@types/node", "npm:14.14.6"], + ["@types/react", "npm:16.9.55"], + ["@types/react-dom", "npm:16.9.9"], ["@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"], @@ -401,7 +401,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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.3"], - ["bootstrap-icons", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"], + ["bootstrap-icons", "npm:1.1.0"], ["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"], @@ -409,19 +409,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["core-js", "npm:3.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz"], ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.0.0"], ["eslint", "npm:7.12.1"], - ["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.14.0"], + ["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.15.0"], ["eslint-plugin-import", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.22.1"], ["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.21.5"], ["eslint-plugin-react-hooks", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.0"], - ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.1"], + ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.2.0"], ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.5.0"], ["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.8.3"], ["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:1.2.0"], + ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.1"], ["pepjs", "npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpepjs%2Fdownload%2Fpepjs-0.5.2.tgz"], ["postcss", "npm:8.1.4"], ["postcss-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.0.4"], @@ -440,23 +440,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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", "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.3"], - ["sass", "npm:1.27.0"], + ["sass", "npm:1.28.0"], ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.4"], ["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0"], ["ts-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.0.7"], ["type-fest", "npm:0.18.0"], ["typescript", "patch:typescript@npm%3A4.0.5#builtin::version=4.0.5&hash=5b02a2"], ["url-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["webpack-chain", "npm:6.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], - ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], + ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0"], ["workbox-precaching", "npm:5.1.4"], ["workbox-routing", "npm:5.1.4"], ["workbox-strategies", "npm:5.1.4"], ["workbox-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.1.4"], ["workbox-window", "npm:5.1.4"], - ["xregexp", "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-4.3.0.tgz"] + ["xregexp", "npm:4.4.0"] ], "linkType": "SOFT", }] @@ -3009,10 +3009,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["@babel/runtime-corejs3", [ - ["npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.10.5.tgz", { - "packageLocation": "./.yarn/cache/@babel-runtime-corejs3-npm-7.10.5-15dc49d6b2-fc1caee034.zip/node_modules/@babel/runtime-corejs3/", + ["npm:7.12.1", { + "packageLocation": "./.yarn/cache/@babel-runtime-corejs3-npm-7.12.1-614fabc625-a6387d9e0d.zip/node_modules/@babel/runtime-corejs3/", "packageDependencies": [ - ["@babel/runtime-corejs3", "npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.10.5.tgz"], + ["@babel/runtime-corejs3", "npm:7.12.1"], ["core-js-pure", "npm:3.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js-pure%2Fdownload%2Fcore-js-pure-3.6.5.tgz"], ["regenerator-runtime", "npm:0.13.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz"] ], @@ -3231,8 +3231,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["sockjs-client", null], ["source-map", "npm:0.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.7.3.tgz"], ["type-fest", "npm:0.18.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], - ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], + ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0"], ["webpack-hot-middleware", null], ["webpack-plugin-serve", null] ], @@ -3394,6 +3394,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@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"] ], "linkType": "HARD", + }], + ["npm:2.2.11", { + "packageLocation": "./.yarn/cache/@types-classnames-npm-2.2.11-442af4f8b3-5bbd4fd0f8.zip/node_modules/@types/classnames/", + "packageDependencies": [ + ["@types/classnames", "npm:2.2.11"] + ], + "linkType": "HARD", }] ]], ["@types/color-name", [ @@ -3542,10 +3549,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["@types/lodash", [ - ["npm:4.14.162", { - "packageLocation": "./.yarn/cache/@types-lodash-npm-4.14.162-154c620b3b-16205a1299.zip/node_modules/@types/lodash/", + ["npm:4.14.164", { + "packageLocation": "./.yarn/cache/@types-lodash-npm-4.14.164-619795b8bd-4158045fd1.zip/node_modules/@types/lodash/", "packageDependencies": [ - ["@types/lodash", "npm:4.14.162"] + ["@types/lodash", "npm:4.14.164"] ], "linkType": "HARD", }] @@ -3574,10 +3581,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["npm:14.14.5", { - "packageLocation": "./.yarn/cache/@types-node-npm-14.14.5-0bf1b63d5b-4916d5c46e.zip/node_modules/@types/node/", + ["npm:14.14.6", { + "packageLocation": "./.yarn/cache/@types-node-npm-14.14.6-6c20289547-9b06b04ab2.zip/node_modules/@types/node/", "packageDependencies": [ - ["@types/node", "npm:14.14.5"] + ["@types/node", "npm:14.14.6"] ], "linkType": "HARD", }] @@ -3619,10 +3626,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["npm:16.9.53", { - "packageLocation": "./.yarn/cache/@types-react-npm-16.9.53-db05adb28b-01c646c8f0.zip/node_modules/@types/react/", + ["npm:16.9.55", { + "packageLocation": "./.yarn/cache/@types-react-npm-16.9.55-7c29445f78-aadc5636d6.zip/node_modules/@types/react/", "packageDependencies": [ - ["@types/react", "npm:16.9.53"], + ["@types/react", "npm:16.9.55"], ["@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"] ], @@ -3630,10 +3637,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["@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", { - "packageLocation": "./.yarn/cache/@types-react-dom-npm-16.9.8-a074150aea-53a223c026.zip/node_modules/@types/react-dom/", + ["npm:16.9.9", { + "packageLocation": "./.yarn/cache/@types-react-dom-npm-16.9.9-eac1c70629-d92c166f5b.zip/node_modules/@types/react-dom/", "packageDependencies": [ - ["@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-dom", "npm:16.9.9"], ["@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", @@ -4181,7 +4188,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageDependencies": [ ["@webpack-cli/serve", "virtual:c460e9f85aa454dc1b9cf43954e250509701dbc5ded049dbe040bf6257f9cd93087be07d5933f92d8c21c813eba74d6287e09df2de8a98e2c5a42cbc160e16cd#npm:1.0.1"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], - ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"] + ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0"] ], "packagePeers": [ "webpack-cli", @@ -4373,12 +4380,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["accepts", [ - ["npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faccepts%2Fdownload%2Faccepts-1.3.7.tgz", { - "packageLocation": "./.yarn/cache/accepts-npm-1.3.7-6f43068745-2686fa30db.zip/node_modules/accepts/", + ["npm:1.3.7", { + "packageLocation": "./.yarn/cache/accepts-npm-1.3.7-0dc9de65aa-2686fa30db.zip/node_modules/accepts/", "packageDependencies": [ - ["accepts", "npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faccepts%2Fdownload%2Faccepts-1.3.7.tgz"], - ["mime-types", "npm:2.1.27::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz"], - ["negotiator", "npm:0.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnegotiator%2Fdownload%2Fnegotiator-0.6.2.tgz"] + ["accepts", "npm:1.3.7"], + ["mime-types", "npm:2.1.27"], + ["negotiator", "npm:0.6.2"] ], "linkType": "HARD", }] @@ -4466,11 +4473,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ajv-errors", [ - ["virtual:5a053ed7a5aaf24feb20a5f221f0cf99cd71c398eae5cd964b19ff1321e1f4b929d5643e1ddc2a0e5bf7584bf5da2ecbf8ea504506a83c90ac358cd78a8d6ec8#npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz", { - "packageLocation": "./.yarn/$$virtual/ajv-errors-virtual-72d38507e4/0/cache/ajv-errors-npm-1.0.1-39ff2ef93e-d8356aadcb.zip/node_modules/ajv-errors/", + ["virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:1.0.1", { + "packageLocation": "./.yarn/$$virtual/ajv-errors-virtual-917b473fab/0/cache/ajv-errors-npm-1.0.1-32cd0b19f8-d8356aadcb.zip/node_modules/ajv-errors/", "packageDependencies": [ - ["ajv-errors", "virtual:5a053ed7a5aaf24feb20a5f221f0cf99cd71c398eae5cd964b19ff1321e1f4b929d5643e1ddc2a0e5bf7584bf5da2ecbf8ea504506a83c90ac358cd78a8d6ec8#npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz"], - ["ajv", "npm:6.12.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz"] + ["ajv-errors", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:1.0.1"], + ["ajv", "npm:6.12.6"] ], "packagePeers": [ "ajv" @@ -4479,6 +4486,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ajv-keywords", [ + ["virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2", { + "packageLocation": "./.yarn/$$virtual/ajv-keywords-virtual-489c6ef39e/0/cache/ajv-keywords-npm-3.5.2-0e391b70e2-01f26c2923.zip/node_modules/ajv-keywords/", + "packageDependencies": [ + ["ajv-keywords", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2"], + ["ajv", "npm:6.12.6"] + ], + "packagePeers": [ + "ajv" + ], + "linkType": "HARD", + }], ["virtual:4bd159eb2fa57b708080b8da339463ac6da692420f6c1ba3dc93d2b8a9f21028d40894d9078674d3a7cf4e07a29b8924f745c98216701bf12c01bb0faa01f36b#npm:3.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.1.tgz", { "packageLocation": "./.yarn/$$virtual/ajv-keywords-virtual-f99cb7f4e6/0/cache/ajv-keywords-npm-3.5.1-3ebb430a3f-f91a8a5304.zip/node_modules/ajv-keywords/", "packageDependencies": [ @@ -4503,10 +4521,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ansi-colors", [ - ["npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-colors%2Fdownload%2Fansi-colors-3.2.4.tgz", { - "packageLocation": "./.yarn/cache/ansi-colors-npm-3.2.4-03ff0de307-86ec4a476a.zip/node_modules/ansi-colors/", + ["npm:3.2.4", { + "packageLocation": "./.yarn/cache/ansi-colors-npm-3.2.4-f3147b79e7-86ec4a476a.zip/node_modules/ansi-colors/", "packageDependencies": [ - ["ansi-colors", "npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-colors%2Fdownload%2Fansi-colors-3.2.4.tgz"] + ["ansi-colors", "npm:3.2.4"] ], "linkType": "HARD", }], @@ -4596,12 +4614,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["anymatch", [ - ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz", { - "packageLocation": "./.yarn/cache/anymatch-npm-2.0.0-6a80540af9-9e495910cc.zip/node_modules/anymatch/", + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/anymatch-npm-2.0.0-f2fcb92f28-9e495910cc.zip/node_modules/anymatch/", "packageDependencies": [ - ["anymatch", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz"], - ["micromatch", "npm:3.1.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz"], - ["normalize-path", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-path%2Fdownload%2Fnormalize-path-2.1.1.tgz"] + ["anymatch", "npm:2.0.0"], + ["micromatch", "npm:3.1.10"], + ["normalize-path", "npm:2.1.1"] ], "linkType": "HARD", }], @@ -4646,28 +4664,28 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["arr-diff", [ - ["npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-diff%2Fdownload%2Farr-diff-4.0.0.tgz", { - "packageLocation": "./.yarn/cache/arr-diff-npm-4.0.0-23b33727de-cbdff67cf5.zip/node_modules/arr-diff/", + ["npm:4.0.0", { + "packageLocation": "./.yarn/cache/arr-diff-npm-4.0.0-cec86ae312-cbdff67cf5.zip/node_modules/arr-diff/", "packageDependencies": [ - ["arr-diff", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-diff%2Fdownload%2Farr-diff-4.0.0.tgz"] + ["arr-diff", "npm:4.0.0"] ], "linkType": "HARD", }] ]], ["arr-flatten", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-flatten%2Fdownload%2Farr-flatten-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/arr-flatten-npm-1.1.0-2ccfeccce2-564dc9c32c.zip/node_modules/arr-flatten/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/arr-flatten-npm-1.1.0-0c12b693e4-564dc9c32c.zip/node_modules/arr-flatten/", "packageDependencies": [ - ["arr-flatten", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-flatten%2Fdownload%2Farr-flatten-1.1.0.tgz"] + ["arr-flatten", "npm:1.1.0"] ], "linkType": "HARD", }] ]], ["arr-union", [ - ["npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-union%2Fdownload%2Farr-union-3.1.0.tgz", { - "packageLocation": "./.yarn/cache/arr-union-npm-3.1.0-5fec769033-78f0f75c47.zip/node_modules/arr-union/", + ["npm:3.1.0", { + "packageLocation": "./.yarn/cache/arr-union-npm-3.1.0-853ada9729-78f0f75c47.zip/node_modules/arr-union/", "packageDependencies": [ - ["arr-union", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-union%2Fdownload%2Farr-union-3.1.0.tgz"] + ["arr-union", "npm:3.1.0"] ], "linkType": "HARD", }] @@ -4682,17 +4700,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["array-flatten", [ - ["npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", { - "packageLocation": "./.yarn/cache/array-flatten-npm-1.1.1-612a788b2c-de7a056451.zip/node_modules/array-flatten/", + ["npm:1.1.1", { + "packageLocation": "./.yarn/cache/array-flatten-npm-1.1.1-9d94ad5f1d-de7a056451.zip/node_modules/array-flatten/", "packageDependencies": [ - ["array-flatten", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz"] + ["array-flatten", "npm:1.1.1"] ], "linkType": "HARD", }], - ["npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz", { - "packageLocation": "./.yarn/cache/array-flatten-npm-2.1.2-a9c3b9f324-46bfb198da.zip/node_modules/array-flatten/", + ["npm:2.1.2", { + "packageLocation": "./.yarn/cache/array-flatten-npm-2.1.2-0223106268-46bfb198da.zip/node_modules/array-flatten/", "packageDependencies": [ - ["array-flatten", "npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz"] + ["array-flatten", "npm:2.1.2"] ], "linkType": "HARD", }] @@ -4736,10 +4754,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["array-unique", [ - ["npm:0.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-unique%2Fdownload%2Farray-unique-0.3.2.tgz", { - "packageLocation": "./.yarn/cache/array-unique-npm-0.3.2-a2433ae70c-7139dbbcaf.zip/node_modules/array-unique/", + ["npm:0.3.2", { + "packageLocation": "./.yarn/cache/array-unique-npm-0.3.2-9f62c6ac93-7139dbbcaf.zip/node_modules/array-unique/", "packageDependencies": [ - ["array-unique", "npm:0.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-unique%2Fdownload%2Farray-unique-0.3.2.tgz"] + ["array-unique", "npm:0.3.2"] ], "linkType": "HARD", }] @@ -4796,10 +4814,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["assign-symbols", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fassign-symbols%2Fdownload%2Fassign-symbols-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/assign-symbols-npm-1.0.0-10c1236af8-893e9389a5.zip/node_modules/assign-symbols/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/assign-symbols-npm-1.0.0-fd803ccdf1-893e9389a5.zip/node_modules/assign-symbols/", "packageDependencies": [ - ["assign-symbols", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fassign-symbols%2Fdownload%2Fassign-symbols-1.0.0.tgz"] + ["assign-symbols", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -4824,19 +4842,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["async-each", [ - ["npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-each%2Fdownload%2Fasync-each-1.0.3.tgz", { - "packageLocation": "./.yarn/cache/async-each-npm-1.0.3-b43586a972-0cf01982ae.zip/node_modules/async-each/", + ["npm:1.0.3", { + "packageLocation": "./.yarn/cache/async-each-npm-1.0.3-464af5d2f3-0cf01982ae.zip/node_modules/async-each/", "packageDependencies": [ - ["async-each", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-each%2Fdownload%2Fasync-each-1.0.3.tgz"] + ["async-each", "npm:1.0.3"] ], "linkType": "HARD", }] ]], ["async-limiter", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/async-limiter-npm-1.0.1-cbc5273635-d123312ace.zip/node_modules/async-limiter/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/async-limiter-npm-1.0.1-7e6819bcdb-d123312ace.zip/node_modules/async-limiter/", "packageDependencies": [ - ["async-limiter", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz"] + ["async-limiter", "npm:1.0.1"] ], "linkType": "HARD", }] @@ -4851,10 +4869,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["atob", [ - ["npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fatob%2Fdownload%2Fatob-2.1.2.tgz", { - "packageLocation": "./.yarn/cache/atob-npm-2.1.2-8ff4b41199-597c0d1a74.zip/node_modules/atob/", + ["npm:2.1.2", { + "packageLocation": "./.yarn/cache/atob-npm-2.1.2-bcb583261e-597c0d1a74.zip/node_modules/atob/", "packageDependencies": [ - ["atob", "npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fatob%2Fdownload%2Fatob-2.1.2.tgz"] + ["atob", "npm:2.1.2"] ], "linkType": "HARD", }] @@ -4936,7 +4954,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["mkdirp", "npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"], ["pify", "npm:4.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz"], ["schema-utils", "npm:2.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "@babel/core", @@ -5071,17 +5089,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["base", [ - ["npm:0.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbase%2Fdownload%2Fbase-0.11.2.tgz", { - "packageLocation": "./.yarn/cache/base-npm-0.11.2-fca2af58ba-84e30392fd.zip/node_modules/base/", + ["npm:0.11.2", { + "packageLocation": "./.yarn/cache/base-npm-0.11.2-a9bde462d6-84e30392fd.zip/node_modules/base/", "packageDependencies": [ - ["base", "npm:0.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbase%2Fdownload%2Fbase-0.11.2.tgz"], - ["cache-base", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcache-base%2Fdownload%2Fcache-base-1.0.1.tgz"], - ["class-utils", "npm:0.3.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclass-utils%2Fdownload%2Fclass-utils-0.3.6.tgz"], - ["component-emitter", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcomponent-emitter%2Fdownload%2Fcomponent-emitter-1.3.0.tgz"], - ["define-property", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-1.0.0.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"], - ["mixin-deep", "npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmixin-deep%2Fdownload%2Fmixin-deep-1.3.2.tgz"], - ["pascalcase", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpascalcase%2Fdownload%2Fpascalcase-0.1.1.tgz"] + ["base", "npm:0.11.2"], + ["cache-base", "npm:1.0.1"], + ["class-utils", "npm:0.3.6"], + ["component-emitter", "npm:1.3.0"], + ["define-property", "npm:1.0.0"], + ["isobject", "npm:3.0.1"], + ["mixin-deep", "npm:1.3.2"], + ["pascalcase", "npm:0.1.1"] ], "linkType": "HARD", }] @@ -5105,10 +5123,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["batch", [ - ["npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbatch%2Fdownload%2Fbatch-0.6.1.tgz", { - "packageLocation": "./.yarn/cache/batch-npm-0.6.1-d08233db8c-4ec2d961e6.zip/node_modules/batch/", + ["npm:0.6.1", { + "packageLocation": "./.yarn/cache/batch-npm-0.6.1-70e2e81169-4ec2d961e6.zip/node_modules/batch/", "packageDependencies": [ - ["batch", "npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbatch%2Fdownload%2Fbatch-0.6.1.tgz"] + ["batch", "npm:0.6.1"] ], "linkType": "HARD", }] @@ -5133,10 +5151,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["binary-extensions", [ - ["npm:1.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", { - "packageLocation": "./.yarn/cache/binary-extensions-npm-1.13.1-015e160c9e-7cdacc6dad.zip/node_modules/binary-extensions/", + ["npm:1.13.1", { + "packageLocation": "./.yarn/cache/binary-extensions-npm-1.13.1-fb81dec2b0-7cdacc6dad.zip/node_modules/binary-extensions/", "packageDependencies": [ - ["binary-extensions", "npm:1.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz"] + ["binary-extensions", "npm:1.13.1"] ], "linkType": "HARD", }], @@ -5149,11 +5167,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["bindings", [ - ["npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbindings%2Fdownload%2Fbindings-1.5.0.tgz", { - "packageLocation": "./.yarn/cache/bindings-npm-1.5.0-c72f8f2b49-bd623dec58.zip/node_modules/bindings/", + ["npm:1.5.0", { + "packageLocation": "./.yarn/cache/bindings-npm-1.5.0-77ce1d213c-bd623dec58.zip/node_modules/bindings/", "packageDependencies": [ - ["bindings", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbindings%2Fdownload%2Fbindings-1.5.0.tgz"], - ["file-uri-to-path", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-uri-to-path%2Fdownload%2Ffile-uri-to-path-1.0.0.tgz"] + ["bindings", "npm:1.5.0"], + ["file-uri-to-path", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -5180,35 +5198,35 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["body-parser", [ - ["npm:1.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbody-parser%2Fdownload%2Fbody-parser-1.19.0.tgz", { - "packageLocation": "./.yarn/cache/body-parser-npm-1.19.0-26ceae3d2a-18c2a81df5.zip/node_modules/body-parser/", + ["npm:1.19.0", { + "packageLocation": "./.yarn/cache/body-parser-npm-1.19.0-6e177cabfa-18c2a81df5.zip/node_modules/body-parser/", "packageDependencies": [ - ["body-parser", "npm:1.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbody-parser%2Fdownload%2Fbody-parser-1.19.0.tgz"], - ["bytes", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz"], - ["content-type", "npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-type%2Fdownload%2Fcontent-type-1.0.4.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["depd", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz"], - ["http-errors", "npm:1.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz"], - ["iconv-lite", "npm:0.4.24::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz"], - ["on-finished", "npm:2.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-finished-2.3.0.tgz"], - ["qs", "npm:6.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz"], - ["raw-body", "npm:2.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-body%2Fdownload%2Fraw-body-2.4.0.tgz"], - ["type-is", "npm:1.6.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-is%2Fdownload%2Ftype-is-1.6.18.tgz"] + ["body-parser", "npm:1.19.0"], + ["bytes", "npm:3.1.0"], + ["content-type", "npm:1.0.4"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["depd", "npm:1.1.2"], + ["http-errors", "npm:1.7.2"], + ["iconv-lite", "npm:0.4.24"], + ["on-finished", "npm:2.3.0"], + ["qs", "npm:6.7.0"], + ["raw-body", "npm:2.4.0"], + ["type-is", "npm:1.6.18"] ], "linkType": "HARD", }] ]], ["bonjour", [ - ["npm:3.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbonjour%2Fdownload%2Fbonjour-3.5.0.tgz", { - "packageLocation": "./.yarn/cache/bonjour-npm-3.5.0-aa8cd2567e-b6c49714a3.zip/node_modules/bonjour/", + ["npm:3.5.0", { + "packageLocation": "./.yarn/cache/bonjour-npm-3.5.0-919b726638-b6c49714a3.zip/node_modules/bonjour/", "packageDependencies": [ - ["bonjour", "npm:3.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbonjour%2Fdownload%2Fbonjour-3.5.0.tgz"], - ["array-flatten", "npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz"], - ["deep-equal", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz"], - ["dns-equal", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-equal%2Fdownload%2Fdns-equal-1.0.0.tgz"], - ["dns-txt", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-txt%2Fdownload%2Fdns-txt-2.0.2.tgz"], - ["multicast-dns", "npm:6.2.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz"], - ["multicast-dns-service-types", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns-service-types%2Fdownload%2Fmulticast-dns-service-types-1.1.0.tgz"] + ["bonjour", "npm:3.5.0"], + ["array-flatten", "npm:2.1.2"], + ["deep-equal", "npm:1.1.1"], + ["dns-equal", "npm:1.0.0"], + ["dns-txt", "npm:2.0.2"], + ["multicast-dns", "npm:6.2.3"], + ["multicast-dns-service-types", "npm:1.1.0"] ], "linkType": "HARD", }] @@ -5238,10 +5256,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["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/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/bootstrap-icons-npm-1.1.0-b5f84f8cd5-9ce383c910.zip/node_modules/bootstrap-icons/", "packageDependencies": [ - ["bootstrap-icons", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"] + ["bootstrap-icons", "npm:1.1.0"] ], "linkType": "HARD", }] @@ -5258,20 +5276,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["braces", [ - ["npm:2.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbraces%2Fdownload%2Fbraces-2.3.2.tgz", { - "packageLocation": "./.yarn/cache/braces-npm-2.3.2-22286581f5-5f2d5ae262.zip/node_modules/braces/", + ["npm:2.3.2", { + "packageLocation": "./.yarn/cache/braces-npm-2.3.2-19cadb3384-5f2d5ae262.zip/node_modules/braces/", "packageDependencies": [ - ["braces", "npm:2.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbraces%2Fdownload%2Fbraces-2.3.2.tgz"], - ["arr-flatten", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-flatten%2Fdownload%2Farr-flatten-1.1.0.tgz"], - ["array-unique", "npm:0.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-unique%2Fdownload%2Farray-unique-0.3.2.tgz"], - ["extend-shallow", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz"], - ["fill-range", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffill-range%2Fdownload%2Ffill-range-4.0.0.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"], - ["repeat-element", "npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-element%2Fdownload%2Frepeat-element-1.1.3.tgz"], - ["snapdragon", "npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz"], - ["snapdragon-node", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-node%2Fdownload%2Fsnapdragon-node-2.1.1.tgz"], - ["split-string", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit-string%2Fdownload%2Fsplit-string-3.1.0.tgz"], - ["to-regex", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz"] + ["braces", "npm:2.3.2"], + ["arr-flatten", "npm:1.1.0"], + ["array-unique", "npm:0.3.2"], + ["extend-shallow", "npm:2.0.1"], + ["fill-range", "npm:4.0.0"], + ["isobject", "npm:3.0.1"], + ["repeat-element", "npm:1.1.3"], + ["snapdragon", "npm:0.8.2"], + ["snapdragon-node", "npm:2.1.1"], + ["split-string", "npm:3.1.0"], + ["to-regex", "npm:3.0.2"] ], "linkType": "HARD", }], @@ -5340,10 +5358,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["buffer-indexof", [ - ["npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer-indexof%2Fdownload%2Fbuffer-indexof-1.1.1.tgz", { - "packageLocation": "./.yarn/cache/buffer-indexof-npm-1.1.1-f2a58116e6-f711418567.zip/node_modules/buffer-indexof/", + ["npm:1.1.1", { + "packageLocation": "./.yarn/cache/buffer-indexof-npm-1.1.1-551a129ddb-f711418567.zip/node_modules/buffer-indexof/", "packageDependencies": [ - ["buffer-indexof", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer-indexof%2Fdownload%2Fbuffer-indexof-1.1.1.tgz"] + ["buffer-indexof", "npm:1.1.1"] ], "linkType": "HARD", }] @@ -5358,17 +5376,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["bytes", [ - ["npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz", { - "packageLocation": "./.yarn/cache/bytes-npm-3.0.0-72e85efcd7-98d6c0ab36.zip/node_modules/bytes/", + ["npm:3.0.0", { + "packageLocation": "./.yarn/cache/bytes-npm-3.0.0-19be09472d-98d6c0ab36.zip/node_modules/bytes/", "packageDependencies": [ - ["bytes", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz"] + ["bytes", "npm:3.0.0"] ], "linkType": "HARD", }], - ["npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz", { - "packageLocation": "./.yarn/cache/bytes-npm-3.1.0-5ba1e8cbb8-c3f64645ef.zip/node_modules/bytes/", + ["npm:3.1.0", { + "packageLocation": "./.yarn/cache/bytes-npm-3.1.0-19c5b15405-c3f64645ef.zip/node_modules/bytes/", "packageDependencies": [ - ["bytes", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz"] + ["bytes", "npm:3.1.0"] ], "linkType": "HARD", }] @@ -5400,19 +5418,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["cache-base", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcache-base%2Fdownload%2Fcache-base-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/cache-base-npm-1.0.1-94c04d4f71-3f362ba824.zip/node_modules/cache-base/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/cache-base-npm-1.0.1-1538417cb9-3f362ba824.zip/node_modules/cache-base/", "packageDependencies": [ - ["cache-base", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcache-base%2Fdownload%2Fcache-base-1.0.1.tgz"], - ["collection-visit", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcollection-visit%2Fdownload%2Fcollection-visit-1.0.0.tgz"], - ["component-emitter", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcomponent-emitter%2Fdownload%2Fcomponent-emitter-1.3.0.tgz"], - ["get-value", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-value%2Fdownload%2Fget-value-2.0.6.tgz"], - ["has-value", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-1.0.0.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"], - ["set-value", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz"], - ["to-object-path", "npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-object-path%2Fdownload%2Fto-object-path-0.3.0.tgz"], - ["union-value", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funion-value%2Fdownload%2Funion-value-1.0.1.tgz"], - ["unset-value", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz"] + ["cache-base", "npm:1.0.1"], + ["collection-visit", "npm:1.0.0"], + ["component-emitter", "npm:1.3.0"], + ["get-value", "npm:2.0.6"], + ["has-value", "npm:1.0.0"], + ["isobject", "npm:3.0.1"], + ["set-value", "npm:2.0.1"], + ["to-object-path", "npm:0.3.0"], + ["union-value", "npm:1.0.1"], + ["unset-value", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -5463,6 +5481,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["camelcase", [ + ["npm:5.3.1", { + "packageLocation": "./.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-6a3350c4ea.zip/node_modules/camelcase/", + "packageDependencies": [ + ["camelcase", "npm:5.3.1"] + ], + "linkType": "HARD", + }], ["npm:5.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", { "packageLocation": "./.yarn/cache/camelcase-npm-5.3.1-c4a14b435b-6a3350c4ea.zip/node_modules/camelcase/", "packageDependencies": [ @@ -5553,22 +5578,22 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["chokidar", [ - ["npm:2.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", { - "packageLocation": "./.yarn/cache/chokidar-npm-2.1.8-7b1ceeb46a-0758dcc7c6.zip/node_modules/chokidar/", - "packageDependencies": [ - ["chokidar", "npm:2.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz"], - ["anymatch", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz"], - ["async-each", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-each%2Fdownload%2Fasync-each-1.0.3.tgz"], - ["braces", "npm:2.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbraces%2Fdownload%2Fbraces-2.3.2.tgz"], - ["fsevents", "patch:fsevents@npm%3A1.2.13%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ffsevents%252Fdownload%252Ffsevents-1.2.13.tgz#builtin::version=1.2.13&hash=495457"], - ["glob-parent", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz"], + ["npm:2.1.8", { + "packageLocation": "./.yarn/cache/chokidar-npm-2.1.8-32fdcd020e-0758dcc7c6.zip/node_modules/chokidar/", + "packageDependencies": [ + ["chokidar", "npm:2.1.8"], + ["anymatch", "npm:2.0.0"], + ["async-each", "npm:1.0.3"], + ["braces", "npm:2.3.2"], + ["fsevents", "patch:fsevents@npm%3A1.2.13#builtin::version=1.2.13&hash=495457"], + ["glob-parent", "npm:3.1.0"], ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"], - ["is-binary-path", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-binary-path%2Fdownload%2Fis-binary-path-1.0.1.tgz"], + ["is-binary-path", "npm:1.0.1"], ["is-glob", "npm:4.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-glob%2Fdownload%2Fis-glob-4.0.1.tgz"], ["normalize-path", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-path%2Fdownload%2Fnormalize-path-3.0.0.tgz"], ["path-is-absolute", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-is-absolute%2Fdownload%2Fpath-is-absolute-1.0.1.tgz"], - ["readdirp", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz"], - ["upath", "npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz"] + ["readdirp", "npm:2.2.1"], + ["upath", "npm:1.2.0"] ], "linkType": "HARD", }], @@ -5617,14 +5642,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["class-utils", [ - ["npm:0.3.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclass-utils%2Fdownload%2Fclass-utils-0.3.6.tgz", { - "packageLocation": "./.yarn/cache/class-utils-npm-0.3.6-fb58ffcbad-6411679ad4.zip/node_modules/class-utils/", + ["npm:0.3.6", { + "packageLocation": "./.yarn/cache/class-utils-npm-0.3.6-2c691ad006-6411679ad4.zip/node_modules/class-utils/", "packageDependencies": [ - ["class-utils", "npm:0.3.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclass-utils%2Fdownload%2Fclass-utils-0.3.6.tgz"], - ["arr-union", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-union%2Fdownload%2Farr-union-3.1.0.tgz"], - ["define-property", "npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"], - ["static-extend", "npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatic-extend%2Fdownload%2Fstatic-extend-0.1.2.tgz"] + ["class-utils", "npm:0.3.6"], + ["arr-union", "npm:3.1.0"], + ["define-property", "npm:0.2.5"], + ["isobject", "npm:3.0.1"], + ["static-extend", "npm:0.1.2"] ], "linkType": "HARD", }] @@ -5664,7 +5689,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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"], ["@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"], ["del", "npm:4.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "webpack" @@ -5682,13 +5707,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["cliui", [ - ["npm:5.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz", { - "packageLocation": "./.yarn/cache/cliui-npm-5.0.0-fb4a0d5115-25e61dc985.zip/node_modules/cliui/", + ["npm:5.0.0", { + "packageLocation": "./.yarn/cache/cliui-npm-5.0.0-885b5f48ee-25e61dc985.zip/node_modules/cliui/", "packageDependencies": [ - ["cliui", "npm:5.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz"], - ["string-width", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz"], - ["strip-ansi", "npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz"], - ["wrap-ansi", "npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz"] + ["cliui", "npm:5.0.0"], + ["string-width", "npm:3.1.0"], + ["strip-ansi", "npm:5.2.0"], + ["wrap-ansi", "npm:5.1.0"] ], "linkType": "HARD", }] @@ -5722,12 +5747,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["collection-visit", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcollection-visit%2Fdownload%2Fcollection-visit-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/collection-visit-npm-1.0.0-f8de38dbca-c73cb1316c.zip/node_modules/collection-visit/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/collection-visit-npm-1.0.0-aba2d5defc-c73cb1316c.zip/node_modules/collection-visit/", "packageDependencies": [ - ["collection-visit", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcollection-visit%2Fdownload%2Fcollection-visit-1.0.0.tgz"], - ["map-visit", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-visit%2Fdownload%2Fmap-visit-1.0.0.tgz"], - ["object-visit", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-visit%2Fdownload%2Fobject-visit-1.0.1.tgz"] + ["collection-visit", "npm:1.0.0"], + ["map-visit", "npm:1.0.0"], + ["object-visit", "npm:1.0.1"] ], "linkType": "HARD", }] @@ -5862,36 +5887,36 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["component-emitter", [ - ["npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcomponent-emitter%2Fdownload%2Fcomponent-emitter-1.3.0.tgz", { - "packageLocation": "./.yarn/cache/component-emitter-npm-1.3.0-2819e3f4af-fc4edbf101.zip/node_modules/component-emitter/", + ["npm:1.3.0", { + "packageLocation": "./.yarn/cache/component-emitter-npm-1.3.0-4b848565b9-fc4edbf101.zip/node_modules/component-emitter/", "packageDependencies": [ - ["component-emitter", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcomponent-emitter%2Fdownload%2Fcomponent-emitter-1.3.0.tgz"] + ["component-emitter", "npm:1.3.0"] ], "linkType": "HARD", }] ]], ["compressible", [ - ["npm:2.0.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz", { - "packageLocation": "./.yarn/cache/compressible-npm-2.0.18-4a85912421-8ac178b6ef.zip/node_modules/compressible/", + ["npm:2.0.18", { + "packageLocation": "./.yarn/cache/compressible-npm-2.0.18-ee5ab04d88-8ac178b6ef.zip/node_modules/compressible/", "packageDependencies": [ - ["compressible", "npm:2.0.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz"], - ["mime-db", "npm:1.44.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz"] + ["compressible", "npm:2.0.18"], + ["mime-db", "npm:1.45.0"] ], "linkType": "HARD", }] ]], ["compression", [ - ["npm:1.7.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz", { - "packageLocation": "./.yarn/cache/compression-npm-1.7.4-091cebef94-8f53567770.zip/node_modules/compression/", + ["npm:1.7.4", { + "packageLocation": "./.yarn/cache/compression-npm-1.7.4-e0cd6afa69-8f53567770.zip/node_modules/compression/", "packageDependencies": [ - ["compression", "npm:1.7.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz"], - ["accepts", "npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faccepts%2Fdownload%2Faccepts-1.3.7.tgz"], - ["bytes", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz"], - ["compressible", "npm:2.0.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["on-headers", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-headers%2Fdownload%2Fon-headers-1.0.2.tgz"], - ["safe-buffer", "npm:5.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz"], - ["vary", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fvary%2Fdownload%2Fvary-1.1.2.tgz"] + ["compression", "npm:1.7.4"], + ["accepts", "npm:1.3.7"], + ["bytes", "npm:3.0.0"], + ["compressible", "npm:2.0.18"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["on-headers", "npm:1.0.2"], + ["safe-buffer", "npm:5.1.2"], + ["vary", "npm:1.1.2"] ], "linkType": "HARD", }] @@ -5906,10 +5931,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["connect-history-api-fallback", [ - ["npm:1.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fconnect-history-api-fallback%2Fdownload%2Fconnect-history-api-fallback-1.6.0.tgz", { - "packageLocation": "./.yarn/cache/connect-history-api-fallback-npm-1.6.0-62edf2c17a-298f60415d.zip/node_modules/connect-history-api-fallback/", + ["npm:1.6.0", { + "packageLocation": "./.yarn/cache/connect-history-api-fallback-npm-1.6.0-6fbd7fa228-298f60415d.zip/node_modules/connect-history-api-fallback/", "packageDependencies": [ - ["connect-history-api-fallback", "npm:1.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fconnect-history-api-fallback%2Fdownload%2Fconnect-history-api-fallback-1.6.0.tgz"] + ["connect-history-api-fallback", "npm:1.6.0"] ], "linkType": "HARD", }] @@ -5933,20 +5958,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["content-disposition", [ - ["npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-disposition%2Fdownload%2Fcontent-disposition-0.5.3.tgz", { - "packageLocation": "./.yarn/cache/content-disposition-npm-0.5.3-e98afeed39-8f1f235c04.zip/node_modules/content-disposition/", + ["npm:0.5.3", { + "packageLocation": "./.yarn/cache/content-disposition-npm-0.5.3-9a9a567e17-8f1f235c04.zip/node_modules/content-disposition/", "packageDependencies": [ - ["content-disposition", "npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-disposition%2Fdownload%2Fcontent-disposition-0.5.3.tgz"], - ["safe-buffer", "npm:5.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz"] + ["content-disposition", "npm:0.5.3"], + ["safe-buffer", "npm:5.1.2"] ], "linkType": "HARD", }] ]], ["content-type", [ - ["npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-type%2Fdownload%2Fcontent-type-1.0.4.tgz", { - "packageLocation": "./.yarn/cache/content-type-npm-1.0.4-3c7f97e2a6-ff6e19cbf2.zip/node_modules/content-type/", + ["npm:1.0.4", { + "packageLocation": "./.yarn/cache/content-type-npm-1.0.4-3b1a5ca16b-ff6e19cbf2.zip/node_modules/content-type/", "packageDependencies": [ - ["content-type", "npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-type%2Fdownload%2Fcontent-type-1.0.4.tgz"] + ["content-type", "npm:1.0.4"] ], "linkType": "HARD", }] @@ -5962,28 +5987,28 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["cookie", [ - ["npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz", { - "packageLocation": "./.yarn/cache/cookie-npm-0.4.0-e8f5673c57-7aaef4b642.zip/node_modules/cookie/", + ["npm:0.4.0", { + "packageLocation": "./.yarn/cache/cookie-npm-0.4.0-4b3d629e45-7aaef4b642.zip/node_modules/cookie/", "packageDependencies": [ - ["cookie", "npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz"] + ["cookie", "npm:0.4.0"] ], "linkType": "HARD", }] ]], ["cookie-signature", [ - ["npm:1.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie-signature%2Fdownload%2Fcookie-signature-1.0.6.tgz", { - "packageLocation": "./.yarn/cache/cookie-signature-npm-1.0.6-d0b3c28004-305054e102.zip/node_modules/cookie-signature/", + ["npm:1.0.6", { + "packageLocation": "./.yarn/cache/cookie-signature-npm-1.0.6-93f325f7f0-305054e102.zip/node_modules/cookie-signature/", "packageDependencies": [ - ["cookie-signature", "npm:1.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie-signature%2Fdownload%2Fcookie-signature-1.0.6.tgz"] + ["cookie-signature", "npm:1.0.6"] ], "linkType": "HARD", }] ]], ["copy-descriptor", [ - ["npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-descriptor%2Fdownload%2Fcopy-descriptor-0.1.1.tgz", { - "packageLocation": "./.yarn/cache/copy-descriptor-npm-0.1.1-b3e517abb5-c052cf571f.zip/node_modules/copy-descriptor/", + ["npm:0.1.1", { + "packageLocation": "./.yarn/cache/copy-descriptor-npm-0.1.1-864db4ab66-c052cf571f.zip/node_modules/copy-descriptor/", "packageDependencies": [ - ["copy-descriptor", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-descriptor%2Fdownload%2Fcopy-descriptor-0.1.1.tgz"] + ["copy-descriptor", "npm:0.1.1"] ], "linkType": "HARD", }] @@ -6003,7 +6028,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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:3.0.0"], ["serialize-javascript", "npm:5.0.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["webpack-sources", "npm:1.4.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz"] ], "packagePeers": [ @@ -6081,15 +6106,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["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/", + ["npm:6.0.5", { + "packageLocation": "./.yarn/cache/cross-spawn-npm-6.0.5-2deab6c280-05fbbf957d.zip/node_modules/cross-spawn/", "packageDependencies": [ - ["cross-spawn", "npm:6.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz"], - ["nice-try", "npm:1.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz"], - ["path-key", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz"], + ["cross-spawn", "npm:6.0.5"], + ["nice-try", "npm:1.0.5"], + ["path-key", "npm:2.0.1"], ["semver", "npm:5.7.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz"], - ["shebang-command", "npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz"], - ["which", "npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz"] + ["shebang-command", "npm:1.2.0"], + ["which", "npm:1.3.1"] ], "linkType": "HARD", }], @@ -6161,7 +6186,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["postcss-value-parser", "npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.1.0.tgz"], ["schema-utils", "npm:3.0.0"], ["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "webpack" @@ -6262,6 +6287,18 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["debug", [ + ["virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9", { + "packageLocation": "./.yarn/$$virtual/debug-virtual-6cfa7ae8cd/0/cache/debug-npm-2.6.9-7d4cb597dc-559f44f98c.zip/node_modules/debug/", + "packageDependencies": [ + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["ms", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz"], + ["supports-color", null] + ], + "packagePeers": [ + "supports-color" + ], + "linkType": "HARD", + }], ["virtual:336c3537928e7a1b40a83635667679863bd1fb9ea076a4d6687c8ceeb3b237d94ddcccc772792ba83f80a83f1d56b5a196c1b5c302387ce8c4eb6bf8ee108d49#npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz", { "packageLocation": "./.yarn/$$virtual/debug-virtual-b31cd6dc94/0/cache/debug-npm-3.1.0-1eb0e42f93-1295acd5e0.zip/node_modules/debug/", "packageDependencies": [ @@ -6310,10 +6347,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:dd7bf9071c15c1b7a313ecdd010711f705a91e516eac87ed27bf82d6945d9d7d9c5b82dec9391533d88e32ec8de8326d7c2bcbfc63ae4f43b290a451f472b891#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", { - "packageLocation": "./.yarn/$$virtual/debug-virtual-63b898856e/0/cache/debug-npm-4.2.0-9d7b0c952c-dcfb8ede26.zip/node_modules/debug/", + ["virtual:91ea7dc22190cafbbd2f73a50bed8a4e3990cee3a47b8c59a27a6eb9c6b45e094232f508b044b264547c863d17d50389003d3e63f7d7f25d44d9a2abeceaf2b3#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", { + "packageLocation": "./.yarn/$$virtual/debug-virtual-8735a25950/0/cache/debug-npm-4.2.0-9d7b0c952c-dcfb8ede26.zip/node_modules/debug/", "packageDependencies": [ - ["debug", "virtual:dd7bf9071c15c1b7a313ecdd010711f705a91e516eac87ed27bf82d6945d9d7d9c5b82dec9391533d88e32ec8de8326d7c2bcbfc63ae4f43b290a451f472b891#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"], + ["debug", "virtual:91ea7dc22190cafbbd2f73a50bed8a4e3990cee3a47b8c59a27a6eb9c6b45e094232f508b044b264547c863d17d50389003d3e63f7d7f25d44d9a2abeceaf2b3#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"], ["ms", "npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz"], ["supports-color", "npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz"] ], @@ -6321,22 +6358,34 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "supports-color" ], "linkType": "HARD", + }], + ["virtual:deb308a9b4dd1e4d8bbd4077e1beb407951f3f68fa3d27dd3194117c6ea80ff3fa065e80ab574b5f654e00aa2494849171aff8a9f3668c1deca42eef9026a893#npm:3.2.6", { + "packageLocation": "./.yarn/$$virtual/debug-virtual-e2ad2e3283/0/cache/debug-npm-3.2.6-6214e40f12-619feb53b1.zip/node_modules/debug/", + "packageDependencies": [ + ["debug", "virtual:deb308a9b4dd1e4d8bbd4077e1beb407951f3f68fa3d27dd3194117c6ea80ff3fa065e80ab574b5f654e00aa2494849171aff8a9f3668c1deca42eef9026a893#npm:3.2.6"], + ["ms", "npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz"], + ["supports-color", null] + ], + "packagePeers": [ + "supports-color" + ], + "linkType": "HARD", }] ]], ["decamelize", [ - ["npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz", { - "packageLocation": "./.yarn/cache/decamelize-npm-1.2.0-c48553a177-8ca9d03ea8.zip/node_modules/decamelize/", + ["npm:1.2.0", { + "packageLocation": "./.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-8ca9d03ea8.zip/node_modules/decamelize/", "packageDependencies": [ - ["decamelize", "npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz"] + ["decamelize", "npm:1.2.0"] ], "linkType": "HARD", }] ]], ["decode-uri-component", [ - ["npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecode-uri-component%2Fdownload%2Fdecode-uri-component-0.2.0.tgz", { - "packageLocation": "./.yarn/cache/decode-uri-component-npm-0.2.0-2fd6843a20-d8cb28c33f.zip/node_modules/decode-uri-component/", + ["npm:0.2.0", { + "packageLocation": "./.yarn/cache/decode-uri-component-npm-0.2.0-5bcc0f3597-d8cb28c33f.zip/node_modules/decode-uri-component/", "packageDependencies": [ - ["decode-uri-component", "npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecode-uri-component%2Fdownload%2Fdecode-uri-component-0.2.0.tgz"] + ["decode-uri-component", "npm:0.2.0"] ], "linkType": "HARD", }] @@ -6352,16 +6401,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["deep-equal", [ - ["npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz", { - "packageLocation": "./.yarn/cache/deep-equal-npm-1.1.1-a8a5dd071b-cc6a0009ce.zip/node_modules/deep-equal/", + ["npm:1.1.1", { + "packageLocation": "./.yarn/cache/deep-equal-npm-1.1.1-67ff9c29b9-cc6a0009ce.zip/node_modules/deep-equal/", "packageDependencies": [ - ["deep-equal", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz"], - ["is-arguments", "npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.0.4.tgz"], + ["deep-equal", "npm:1.1.1"], + ["is-arguments", "npm:1.0.4"], ["is-date-object", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz"], - ["is-regex", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.0.tgz"], - ["object-is", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.2.tgz"], + ["is-regex", "npm:1.1.1"], + ["object-is", "npm:1.1.3"], ["object-keys", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-keys%2Fdownload%2Fobject-keys-1.1.1.tgz"], - ["regexp.prototype.flags", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz"] + ["regexp.prototype.flags", "npm:1.3.0"] ], "linkType": "HARD", }] @@ -6394,12 +6443,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["default-gateway", [ - ["npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz", { - "packageLocation": "./.yarn/cache/default-gateway-npm-4.2.0-882963c805-5d92439d57.zip/node_modules/default-gateway/", + ["npm:4.2.0", { + "packageLocation": "./.yarn/cache/default-gateway-npm-4.2.0-f6bdd83987-5d92439d57.zip/node_modules/default-gateway/", "packageDependencies": [ - ["default-gateway", "npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz"], - ["execa", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz"], - ["ip-regex", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip-regex%2Fdownload%2Fip-regex-2.1.0.tgz"] + ["default-gateway", "npm:4.2.0"], + ["execa", "npm:1.0.0"], + ["ip-regex", "npm:2.1.0"] ], "linkType": "HARD", }] @@ -6424,28 +6473,28 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["define-property", [ - ["npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz", { - "packageLocation": "./.yarn/cache/define-property-npm-0.2.5-ec12240ee1-6fed054072.zip/node_modules/define-property/", + ["npm:0.2.5", { + "packageLocation": "./.yarn/cache/define-property-npm-0.2.5-44a0da3575-6fed054072.zip/node_modules/define-property/", "packageDependencies": [ - ["define-property", "npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz"], - ["is-descriptor", "npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-0.1.6.tgz"] + ["define-property", "npm:0.2.5"], + ["is-descriptor", "npm:0.1.6"] ], "linkType": "HARD", }], - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/define-property-npm-1.0.0-e588f614ef-9034f8f6f3.zip/node_modules/define-property/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/define-property-npm-1.0.0-e2fb9f44c6-9034f8f6f3.zip/node_modules/define-property/", "packageDependencies": [ - ["define-property", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-1.0.0.tgz"], - ["is-descriptor", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-1.0.2.tgz"] + ["define-property", "npm:1.0.0"], + ["is-descriptor", "npm:1.0.2"] ], "linkType": "HARD", }], - ["npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-2.0.2.tgz", { - "packageLocation": "./.yarn/cache/define-property-npm-2.0.2-a2692b51a8-00c7ec53b5.zip/node_modules/define-property/", + ["npm:2.0.2", { + "packageLocation": "./.yarn/cache/define-property-npm-2.0.2-4a2067c3ba-00c7ec53b5.zip/node_modules/define-property/", "packageDependencies": [ - ["define-property", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-2.0.2.tgz"], - ["is-descriptor", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-1.0.2.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"] + ["define-property", "npm:2.0.2"], + ["is-descriptor", "npm:1.0.2"], + ["isobject", "npm:3.0.1"] ], "linkType": "HARD", }] @@ -6485,28 +6534,28 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["depd", [ - ["npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz", { - "packageLocation": "./.yarn/cache/depd-npm-1.1.2-2768b5622c-f45566ff70.zip/node_modules/depd/", + ["npm:1.1.2", { + "packageLocation": "./.yarn/cache/depd-npm-1.1.2-b0c8414da7-f45566ff70.zip/node_modules/depd/", "packageDependencies": [ - ["depd", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz"] + ["depd", "npm:1.1.2"] ], "linkType": "HARD", }] ]], ["destroy", [ - ["npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdestroy%2Fdownload%2Fdestroy-1.0.4.tgz", { - "packageLocation": "./.yarn/cache/destroy-npm-1.0.4-c50a6bdecd-5a516fc5a8.zip/node_modules/destroy/", + ["npm:1.0.4", { + "packageLocation": "./.yarn/cache/destroy-npm-1.0.4-a2203e01cb-5a516fc5a8.zip/node_modules/destroy/", "packageDependencies": [ - ["destroy", "npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdestroy%2Fdownload%2Fdestroy-1.0.4.tgz"] + ["destroy", "npm:1.0.4"] ], "linkType": "HARD", }] ]], ["detect-node", [ - ["npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetect-node%2Fdownload%2Fdetect-node-2.0.4.tgz", { - "packageLocation": "./.yarn/cache/detect-node-npm-2.0.4-9d8bbd0551-e7648a5a91.zip/node_modules/detect-node/", + ["npm:2.0.4", { + "packageLocation": "./.yarn/cache/detect-node-npm-2.0.4-1d5a93916d-e7648a5a91.zip/node_modules/detect-node/", "packageDependencies": [ - ["detect-node", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetect-node%2Fdownload%2Fdetect-node-2.0.4.tgz"] + ["detect-node", "npm:2.0.4"] ], "linkType": "HARD", }] @@ -6531,31 +6580,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["dns-equal", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-equal%2Fdownload%2Fdns-equal-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/dns-equal-npm-1.0.0-faddf7b972-096be3c1a7.zip/node_modules/dns-equal/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/dns-equal-npm-1.0.0-d83b1d6d4e-096be3c1a7.zip/node_modules/dns-equal/", "packageDependencies": [ - ["dns-equal", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-equal%2Fdownload%2Fdns-equal-1.0.0.tgz"] + ["dns-equal", "npm:1.0.0"] ], "linkType": "HARD", }] ]], ["dns-packet", [ - ["npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-packet%2Fdownload%2Fdns-packet-1.3.1.tgz", { - "packageLocation": "./.yarn/cache/dns-packet-npm-1.3.1-83adee2150-cb7bb4e8fb.zip/node_modules/dns-packet/", + ["npm:1.3.1", { + "packageLocation": "./.yarn/cache/dns-packet-npm-1.3.1-63140ca895-cb7bb4e8fb.zip/node_modules/dns-packet/", "packageDependencies": [ - ["dns-packet", "npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-packet%2Fdownload%2Fdns-packet-1.3.1.tgz"], - ["ip", "npm:1.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip%2Fdownload%2Fip-1.1.5.tgz"], + ["dns-packet", "npm:1.3.1"], + ["ip", "npm:1.1.5"], ["safe-buffer", "npm:5.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz"] ], "linkType": "HARD", }] ]], ["dns-txt", [ - ["npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-txt%2Fdownload%2Fdns-txt-2.0.2.tgz", { - "packageLocation": "./.yarn/cache/dns-txt-npm-2.0.2-df14b932f8-62d4b87b09.zip/node_modules/dns-txt/", + ["npm:2.0.2", { + "packageLocation": "./.yarn/cache/dns-txt-npm-2.0.2-69ed5a7cb3-62d4b87b09.zip/node_modules/dns-txt/", "packageDependencies": [ - ["dns-txt", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-txt%2Fdownload%2Fdns-txt-2.0.2.tgz"], - ["buffer-indexof", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer-indexof%2Fdownload%2Fbuffer-indexof-1.1.1.tgz"] + ["dns-txt", "npm:2.0.2"], + ["buffer-indexof", "npm:1.1.1"] ], "linkType": "HARD", }] @@ -6701,10 +6750,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ee-first", [ - ["npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fee-first%2Fdownload%2Fee-first-1.1.1.tgz", { - "packageLocation": "./.yarn/cache/ee-first-npm-1.1.1-26f9185cbc-ba74f91398.zip/node_modules/ee-first/", + ["npm:1.1.1", { + "packageLocation": "./.yarn/cache/ee-first-npm-1.1.1-33f8535b39-ba74f91398.zip/node_modules/ee-first/", "packageDependencies": [ - ["ee-first", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fee-first%2Fdownload%2Fee-first-1.1.1.tgz"] + ["ee-first", "npm:1.1.1"] ], "linkType": "HARD", }] @@ -6760,10 +6809,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["encodeurl", [ - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fencodeurl%2Fdownload%2Fencodeurl-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/encodeurl-npm-1.0.2-34208e38c7-6ee5fcbcd2.zip/node_modules/encodeurl/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/encodeurl-npm-1.0.2-f8c8454c41-6ee5fcbcd2.zip/node_modules/encodeurl/", "packageDependencies": [ - ["encodeurl", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fencodeurl%2Fdownload%2Fencodeurl-1.0.2.tgz"] + ["encodeurl", "npm:1.0.2"] ], "linkType": "HARD", }] @@ -6957,10 +7006,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["escape-html", [ - ["npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz", { - "packageLocation": "./.yarn/cache/escape-html-npm-1.0.3-35da2231bd-900a7f2b80.zip/node_modules/escape-html/", + ["npm:1.0.3", { + "packageLocation": "./.yarn/cache/escape-html-npm-1.0.3-376c22ee74-900a7f2b80.zip/node_modules/escape-html/", "packageDependencies": [ - ["escape-html", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz"] + ["escape-html", "npm:1.0.3"] ], "linkType": "HARD", }] @@ -7021,10 +7070,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["eslint-config-prettier", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.14.0", { - "packageLocation": "./.yarn/$$virtual/eslint-config-prettier-virtual-02c1fa6d09/0/cache/eslint-config-prettier-npm-6.14.0-10ad0a5650-8d478429bb.zip/node_modules/eslint-config-prettier/", + ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.15.0", { + "packageLocation": "./.yarn/$$virtual/eslint-config-prettier-virtual-0e010f8388/0/cache/eslint-config-prettier-npm-6.15.0-d2085588b4-a790bc6169.zip/node_modules/eslint-config-prettier/", "packageDependencies": [ - ["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.14.0"], + ["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.15.0"], ["eslint", "npm:7.12.1"], ["get-stdin", "npm:6.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stdin%2Fdownload%2Fget-stdin-6.0.0.tgz"] ], @@ -7279,10 +7328,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["etag", [ - ["npm:1.8.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fetag%2Fdownload%2Fetag-1.8.1.tgz", { - "packageLocation": "./.yarn/cache/etag-npm-1.8.1-e3d8f00c80-f18341a3c1.zip/node_modules/etag/", + ["npm:1.8.1", { + "packageLocation": "./.yarn/cache/etag-npm-1.8.1-54a3b989d9-f18341a3c1.zip/node_modules/etag/", "packageDependencies": [ - ["etag", "npm:1.8.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fetag%2Fdownload%2Fetag-1.8.1.tgz"] + ["etag", "npm:1.8.1"] ], "linkType": "HARD", }] @@ -7306,27 +7355,27 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["eventsource", [ - ["npm:1.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.0.7.tgz", { - "packageLocation": "./.yarn/cache/eventsource-npm-1.0.7-cd167db542-0585067150.zip/node_modules/eventsource/", + ["npm:1.0.7", { + "packageLocation": "./.yarn/cache/eventsource-npm-1.0.7-0d25273d38-0585067150.zip/node_modules/eventsource/", "packageDependencies": [ - ["eventsource", "npm:1.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.0.7.tgz"], - ["original", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Foriginal%2Fdownload%2Foriginal-1.0.2.tgz"] + ["eventsource", "npm:1.0.7"], + ["original", "npm:1.0.2"] ], "linkType": "HARD", }] ]], ["execa", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/execa-npm-1.0.0-bef4b21060-39714ea24e.zip/node_modules/execa/", - "packageDependencies": [ - ["execa", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz"], - ["cross-spawn", "npm:6.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz"], - ["get-stream", "npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz"], - ["is-stream", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-stream%2Fdownload%2Fis-stream-1.1.0.tgz"], - ["npm-run-path", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz"], - ["p-finally", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-finally%2Fdownload%2Fp-finally-1.0.0.tgz"], + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/execa-npm-1.0.0-7028e37029-39714ea24e.zip/node_modules/execa/", + "packageDependencies": [ + ["execa", "npm:1.0.0"], + ["cross-spawn", "npm:6.0.5"], + ["get-stream", "npm:4.1.0"], + ["is-stream", "npm:1.1.0"], + ["npm-run-path", "npm:2.0.2"], + ["p-finally", "npm:1.0.0"], ["signal-exit", "npm:3.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.3.tgz"], - ["strip-eof", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-eof%2Fdownload%2Fstrip-eof-1.0.0.tgz"] + ["strip-eof", "npm:1.0.0"] ], "linkType": "HARD", }], @@ -7357,56 +7406,56 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["expand-brackets", [ - ["npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpand-brackets%2Fdownload%2Fexpand-brackets-2.1.4.tgz", { - "packageLocation": "./.yarn/cache/expand-brackets-npm-2.1.4-cc72b0b1f9-9aadab00ff.zip/node_modules/expand-brackets/", + ["npm:2.1.4", { + "packageLocation": "./.yarn/cache/expand-brackets-npm-2.1.4-392c703c48-9aadab00ff.zip/node_modules/expand-brackets/", "packageDependencies": [ - ["expand-brackets", "npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpand-brackets%2Fdownload%2Fexpand-brackets-2.1.4.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["define-property", "npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz"], - ["extend-shallow", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz"], - ["posix-character-classes", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fposix-character-classes%2Fdownload%2Fposix-character-classes-0.1.1.tgz"], - ["regex-not", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz"], - ["snapdragon", "npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz"], - ["to-regex", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz"] + ["expand-brackets", "npm:2.1.4"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["define-property", "npm:0.2.5"], + ["extend-shallow", "npm:2.0.1"], + ["posix-character-classes", "npm:0.1.1"], + ["regex-not", "npm:1.0.2"], + ["snapdragon", "npm:0.8.2"], + ["to-regex", "npm:3.0.2"] ], "linkType": "HARD", }] ]], ["express", [ - ["npm:4.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz", { - "packageLocation": "./.yarn/cache/express-npm-4.17.1-0488d22638-c4b470d623.zip/node_modules/express/", - "packageDependencies": [ - ["express", "npm:4.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz"], - ["accepts", "npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faccepts%2Fdownload%2Faccepts-1.3.7.tgz"], - ["array-flatten", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz"], - ["body-parser", "npm:1.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbody-parser%2Fdownload%2Fbody-parser-1.19.0.tgz"], - ["content-disposition", "npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-disposition%2Fdownload%2Fcontent-disposition-0.5.3.tgz"], - ["content-type", "npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-type%2Fdownload%2Fcontent-type-1.0.4.tgz"], - ["cookie", "npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz"], - ["cookie-signature", "npm:1.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie-signature%2Fdownload%2Fcookie-signature-1.0.6.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["depd", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz"], - ["encodeurl", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fencodeurl%2Fdownload%2Fencodeurl-1.0.2.tgz"], - ["escape-html", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz"], - ["etag", "npm:1.8.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fetag%2Fdownload%2Fetag-1.8.1.tgz"], - ["finalhandler", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffinalhandler%2Fdownload%2Ffinalhandler-1.1.2.tgz"], - ["fresh", "npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffresh%2Fdownload%2Ffresh-0.5.2.tgz"], - ["merge-descriptors", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge-descriptors%2Fdownload%2Fmerge-descriptors-1.0.1.tgz"], - ["methods", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmethods%2Fdownload%2Fmethods-1.1.2.tgz"], - ["on-finished", "npm:2.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-finished-2.3.0.tgz"], - ["parseurl", "npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz"], - ["path-to-regexp", "npm:0.1.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz"], - ["proxy-addr", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fproxy-addr%2Fdownload%2Fproxy-addr-2.0.6.tgz"], - ["qs", "npm:6.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz"], - ["range-parser", "npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frange-parser%2Fdownload%2Frange-parser-1.2.1.tgz"], - ["safe-buffer", "npm:5.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz"], - ["send", "npm:0.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsend%2Fdownload%2Fsend-0.17.1.tgz"], - ["serve-static", "npm:1.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-static%2Fdownload%2Fserve-static-1.14.1.tgz"], - ["setprototypeof", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz"], - ["statuses", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz"], - ["type-is", "npm:1.6.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-is%2Fdownload%2Ftype-is-1.6.18.tgz"], - ["utils-merge", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futils-merge%2Fdownload%2Futils-merge-1.0.1.tgz"], - ["vary", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fvary%2Fdownload%2Fvary-1.1.2.tgz"] + ["npm:4.17.1", { + "packageLocation": "./.yarn/cache/express-npm-4.17.1-6815ee6bf9-c4b470d623.zip/node_modules/express/", + "packageDependencies": [ + ["express", "npm:4.17.1"], + ["accepts", "npm:1.3.7"], + ["array-flatten", "npm:1.1.1"], + ["body-parser", "npm:1.19.0"], + ["content-disposition", "npm:0.5.3"], + ["content-type", "npm:1.0.4"], + ["cookie", "npm:0.4.0"], + ["cookie-signature", "npm:1.0.6"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["depd", "npm:1.1.2"], + ["encodeurl", "npm:1.0.2"], + ["escape-html", "npm:1.0.3"], + ["etag", "npm:1.8.1"], + ["finalhandler", "npm:1.1.2"], + ["fresh", "npm:0.5.2"], + ["merge-descriptors", "npm:1.0.1"], + ["methods", "npm:1.1.2"], + ["on-finished", "npm:2.3.0"], + ["parseurl", "npm:1.3.3"], + ["path-to-regexp", "npm:0.1.7"], + ["proxy-addr", "npm:2.0.6"], + ["qs", "npm:6.7.0"], + ["range-parser", "npm:1.2.1"], + ["safe-buffer", "npm:5.1.2"], + ["send", "npm:0.17.1"], + ["serve-static", "npm:1.14.1"], + ["setprototypeof", "npm:1.1.1"], + ["statuses", "npm:1.5.0"], + ["type-is", "npm:1.6.18"], + ["utils-merge", "npm:1.0.1"], + ["vary", "npm:1.1.2"] ], "linkType": "HARD", }] @@ -7421,37 +7470,37 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["extend-shallow", [ - ["npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz", { - "packageLocation": "./.yarn/cache/extend-shallow-npm-2.0.1-c23f812022-03dbbba8b9.zip/node_modules/extend-shallow/", + ["npm:2.0.1", { + "packageLocation": "./.yarn/cache/extend-shallow-npm-2.0.1-e6ef52b29c-03dbbba8b9.zip/node_modules/extend-shallow/", "packageDependencies": [ - ["extend-shallow", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz"], - ["is-extendable", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-0.1.1.tgz"] + ["extend-shallow", "npm:2.0.1"], + ["is-extendable", "npm:0.1.1"] ], "linkType": "HARD", }], - ["npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz", { - "packageLocation": "./.yarn/cache/extend-shallow-npm-3.0.2-ed2dc1f27b-5301c5070b.zip/node_modules/extend-shallow/", + ["npm:3.0.2", { + "packageLocation": "./.yarn/cache/extend-shallow-npm-3.0.2-77bbe1bbf5-5301c5070b.zip/node_modules/extend-shallow/", "packageDependencies": [ - ["extend-shallow", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz"], - ["assign-symbols", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fassign-symbols%2Fdownload%2Fassign-symbols-1.0.0.tgz"], - ["is-extendable", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-1.0.1.tgz"] + ["extend-shallow", "npm:3.0.2"], + ["assign-symbols", "npm:1.0.0"], + ["is-extendable", "npm:1.0.1"] ], "linkType": "HARD", }] ]], ["extglob", [ - ["npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextglob%2Fdownload%2Fextglob-2.0.4.tgz", { - "packageLocation": "./.yarn/cache/extglob-npm-2.0.4-9ae98a7689-ce23be772f.zip/node_modules/extglob/", + ["npm:2.0.4", { + "packageLocation": "./.yarn/cache/extglob-npm-2.0.4-0f39bc9899-ce23be772f.zip/node_modules/extglob/", "packageDependencies": [ - ["extglob", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextglob%2Fdownload%2Fextglob-2.0.4.tgz"], - ["array-unique", "npm:0.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-unique%2Fdownload%2Farray-unique-0.3.2.tgz"], - ["define-property", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-1.0.0.tgz"], - ["expand-brackets", "npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpand-brackets%2Fdownload%2Fexpand-brackets-2.1.4.tgz"], - ["extend-shallow", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz"], - ["fragment-cache", "npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffragment-cache%2Fdownload%2Ffragment-cache-0.2.1.tgz"], - ["regex-not", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz"], - ["snapdragon", "npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz"], - ["to-regex", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz"] + ["extglob", "npm:2.0.4"], + ["array-unique", "npm:0.3.2"], + ["define-property", "npm:1.0.0"], + ["expand-brackets", "npm:2.1.4"], + ["extend-shallow", "npm:2.0.1"], + ["fragment-cache", "npm:0.2.1"], + ["regex-not", "npm:1.0.2"], + ["snapdragon", "npm:0.8.2"], + ["to-regex", "npm:3.0.2"] ], "linkType": "HARD", }] @@ -7527,19 +7576,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["faye-websocket", [ - ["npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.10.0.tgz", { - "packageLocation": "./.yarn/cache/faye-websocket-npm-0.10.0-53c11f370b-2a5823ddfb.zip/node_modules/faye-websocket/", + ["npm:0.10.0", { + "packageLocation": "./.yarn/cache/faye-websocket-npm-0.10.0-161b37cfdf-2a5823ddfb.zip/node_modules/faye-websocket/", "packageDependencies": [ - ["faye-websocket", "npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.10.0.tgz"], - ["websocket-driver", "npm:0.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz"] + ["faye-websocket", "npm:0.10.0"], + ["websocket-driver", "npm:0.6.5"] ], "linkType": "HARD", }], - ["npm:0.11.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.3.tgz", { - "packageLocation": "./.yarn/cache/faye-websocket-npm-0.11.3-eb51ff0e5b-94c48a5b4e.zip/node_modules/faye-websocket/", + ["npm:0.11.3", { + "packageLocation": "./.yarn/cache/faye-websocket-npm-0.11.3-314c7cf07f-94c48a5b4e.zip/node_modules/faye-websocket/", "packageDependencies": [ - ["faye-websocket", "npm:0.11.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.3.tgz"], - ["websocket-driver", "npm:0.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz"] + ["faye-websocket", "npm:0.11.3"], + ["websocket-driver", "npm:0.6.5"] ], "linkType": "HARD", }] @@ -7555,13 +7604,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["file-loader", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.1", { - "packageLocation": "./.yarn/$$virtual/file-loader-virtual-619388967e/0/cache/file-loader-npm-6.1.1-5d725ae767-0272335818.zip/node_modules/file-loader/", + ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.2.0", { + "packageLocation": "./.yarn/$$virtual/file-loader-virtual-10aa56d5ed/0/cache/file-loader-npm-6.2.0-4b02fd87d5-0f103418c0.zip/node_modules/file-loader/", "packageDependencies": [ - ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.1"], + ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.2.0"], ["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:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "webpack" @@ -7570,23 +7619,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["file-uri-to-path", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-uri-to-path%2Fdownload%2Ffile-uri-to-path-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/file-uri-to-path-npm-1.0.0-b540e3f7ca-5ddb9682f0.zip/node_modules/file-uri-to-path/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/file-uri-to-path-npm-1.0.0-1043ac6206-5ddb9682f0.zip/node_modules/file-uri-to-path/", "packageDependencies": [ - ["file-uri-to-path", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-uri-to-path%2Fdownload%2Ffile-uri-to-path-1.0.0.tgz"] + ["file-uri-to-path", "npm:1.0.0"] ], "linkType": "HARD", }] ]], ["fill-range", [ - ["npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffill-range%2Fdownload%2Ffill-range-4.0.0.tgz", { - "packageLocation": "./.yarn/cache/fill-range-npm-4.0.0-1f08f7498a-4a1491ee29.zip/node_modules/fill-range/", + ["npm:4.0.0", { + "packageLocation": "./.yarn/cache/fill-range-npm-4.0.0-95a6e45784-4a1491ee29.zip/node_modules/fill-range/", "packageDependencies": [ - ["fill-range", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffill-range%2Fdownload%2Ffill-range-4.0.0.tgz"], - ["extend-shallow", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz"], - ["is-number", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-number%2Fdownload%2Fis-number-3.0.0.tgz"], + ["fill-range", "npm:4.0.0"], + ["extend-shallow", "npm:2.0.1"], + ["is-number", "npm:3.0.0"], ["repeat-string", "npm:1.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-string%2Fdownload%2Frepeat-string-1.6.1.tgz"], - ["to-regex-range", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex-range%2Fdownload%2Fto-regex-range-2.1.1.tgz"] + ["to-regex-range", "npm:2.1.1"] ], "linkType": "HARD", }], @@ -7600,17 +7649,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["finalhandler", [ - ["npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffinalhandler%2Fdownload%2Ffinalhandler-1.1.2.tgz", { - "packageLocation": "./.yarn/cache/finalhandler-npm-1.1.2-2ca88c8c97-f2e5b6bfe2.zip/node_modules/finalhandler/", + ["npm:1.1.2", { + "packageLocation": "./.yarn/cache/finalhandler-npm-1.1.2-55a75d6b53-f2e5b6bfe2.zip/node_modules/finalhandler/", "packageDependencies": [ - ["finalhandler", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffinalhandler%2Fdownload%2Ffinalhandler-1.1.2.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["encodeurl", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fencodeurl%2Fdownload%2Fencodeurl-1.0.2.tgz"], - ["escape-html", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz"], - ["on-finished", "npm:2.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-finished-2.3.0.tgz"], - ["parseurl", "npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz"], - ["statuses", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz"], - ["unpipe", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funpipe%2Fdownload%2Funpipe-1.0.0.tgz"] + ["finalhandler", "npm:1.1.2"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["encodeurl", "npm:1.0.2"], + ["escape-html", "npm:1.0.3"], + ["on-finished", "npm:2.3.0"], + ["parseurl", "npm:1.3.3"], + ["statuses", "npm:1.5.0"], + ["unpipe", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -7712,10 +7761,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["for-in", [ - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffor-in%2Fdownload%2Ffor-in-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/for-in-npm-1.0.2-c33ffcb8c8-e8d7280a65.zip/node_modules/for-in/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/for-in-npm-1.0.2-37e3d7aae5-e8d7280a65.zip/node_modules/for-in/", "packageDependencies": [ - ["for-in", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffor-in%2Fdownload%2Ffor-in-1.0.2.tgz"] + ["for-in", "npm:1.0.2"] ], "linkType": "HARD", }] @@ -7742,29 +7791,29 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["forwarded", [ - ["npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fforwarded%2Fdownload%2Fforwarded-0.1.2.tgz", { - "packageLocation": "./.yarn/cache/forwarded-npm-0.1.2-f730da54ac-568d862ad1.zip/node_modules/forwarded/", + ["npm:0.1.2", { + "packageLocation": "./.yarn/cache/forwarded-npm-0.1.2-6143c1ba42-568d862ad1.zip/node_modules/forwarded/", "packageDependencies": [ - ["forwarded", "npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fforwarded%2Fdownload%2Fforwarded-0.1.2.tgz"] + ["forwarded", "npm:0.1.2"] ], "linkType": "HARD", }] ]], ["fragment-cache", [ - ["npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffragment-cache%2Fdownload%2Ffragment-cache-0.2.1.tgz", { - "packageLocation": "./.yarn/cache/fragment-cache-npm-0.2.1-f628e83fc8-f88983f4bf.zip/node_modules/fragment-cache/", + ["npm:0.2.1", { + "packageLocation": "./.yarn/cache/fragment-cache-npm-0.2.1-407fe74319-f88983f4bf.zip/node_modules/fragment-cache/", "packageDependencies": [ - ["fragment-cache", "npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffragment-cache%2Fdownload%2Ffragment-cache-0.2.1.tgz"], - ["map-cache", "npm:0.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-cache%2Fdownload%2Fmap-cache-0.2.2.tgz"] + ["fragment-cache", "npm:0.2.1"], + ["map-cache", "npm:0.2.2"] ], "linkType": "HARD", }] ]], ["fresh", [ - ["npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffresh%2Fdownload%2Ffresh-0.5.2.tgz", { - "packageLocation": "./.yarn/cache/fresh-npm-0.5.2-051f60a8c8-2f76c8505d.zip/node_modules/fresh/", + ["npm:0.5.2", { + "packageLocation": "./.yarn/cache/fresh-npm-0.5.2-ad2bb4c0a2-2f76c8505d.zip/node_modules/fresh/", "packageDependencies": [ - ["fresh", "npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffresh%2Fdownload%2Ffresh-0.5.2.tgz"] + ["fresh", "npm:0.5.2"] ], "linkType": "HARD", }] @@ -7810,12 +7859,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["fsevents", [ - ["patch:fsevents@npm%3A1.2.13%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ffsevents%252Fdownload%252Ffsevents-1.2.13.tgz#builtin::version=1.2.13&hash=495457", { - "packageLocation": "./.yarn/unplugged/fsevents-patch-9c6876b7f6/node_modules/fsevents/", + ["patch:fsevents@npm%3A1.2.13#builtin::version=1.2.13&hash=495457", { + "packageLocation": "./.yarn/unplugged/fsevents-patch-1813f6d75e/node_modules/fsevents/", "packageDependencies": [ - ["fsevents", "patch:fsevents@npm%3A1.2.13%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ffsevents%252Fdownload%252Ffsevents-1.2.13.tgz#builtin::version=1.2.13&hash=495457"], - ["bindings", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbindings%2Fdownload%2Fbindings-1.5.0.tgz"], - ["nan", "npm:2.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz"] + ["fsevents", "patch:fsevents@npm%3A1.2.13#builtin::version=1.2.13&hash=495457"], + ["bindings", "npm:1.5.0"], + ["nan", "npm:2.14.2"] ], "linkType": "HARD", }], @@ -7873,10 +7922,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["get-caller-file", [ - ["npm:2.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-caller-file%2Fdownload%2Fget-caller-file-2.0.5.tgz", { - "packageLocation": "./.yarn/cache/get-caller-file-npm-2.0.5-3ebd8b16cc-9dd9e1e259.zip/node_modules/get-caller-file/", + ["npm:2.0.5", { + "packageLocation": "./.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-9dd9e1e259.zip/node_modules/get-caller-file/", "packageDependencies": [ - ["get-caller-file", "npm:2.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-caller-file%2Fdownload%2Fget-caller-file-2.0.5.tgz"] + ["get-caller-file", "npm:2.0.5"] ], "linkType": "HARD", }] @@ -7900,10 +7949,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["get-stream", [ - ["npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz", { - "packageLocation": "./.yarn/cache/get-stream-npm-4.1.0-bebe9944cd-f41bb3c74d.zip/node_modules/get-stream/", + ["npm:4.1.0", { + "packageLocation": "./.yarn/cache/get-stream-npm-4.1.0-314d430a5d-f41bb3c74d.zip/node_modules/get-stream/", "packageDependencies": [ - ["get-stream", "npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz"], + ["get-stream", "npm:4.1.0"], ["pump", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpump%2Fdownload%2Fpump-3.0.0.tgz"] ], "linkType": "HARD", @@ -7926,10 +7975,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["get-value", [ - ["npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-value%2Fdownload%2Fget-value-2.0.6.tgz", { - "packageLocation": "./.yarn/cache/get-value-npm-2.0.6-3d6aa82ba5-f08da32627.zip/node_modules/get-value/", + ["npm:2.0.6", { + "packageLocation": "./.yarn/cache/get-value-npm-2.0.6-03cd422e0a-f08da32627.zip/node_modules/get-value/", "packageDependencies": [ - ["get-value", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-value%2Fdownload%2Fget-value-2.0.6.tgz"] + ["get-value", "npm:2.0.6"] ], "linkType": "HARD", }] @@ -7960,12 +8009,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["glob-parent", [ - ["npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz", { - "packageLocation": "./.yarn/cache/glob-parent-npm-3.1.0-d5d9d26182-2827ec4405.zip/node_modules/glob-parent/", + ["npm:3.1.0", { + "packageLocation": "./.yarn/cache/glob-parent-npm-3.1.0-31416ad085-2827ec4405.zip/node_modules/glob-parent/", "packageDependencies": [ - ["glob-parent", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz"], - ["is-glob", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz"], - ["path-dirname", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-dirname%2Fdownload%2Fpath-dirname-1.0.2.tgz"] + ["glob-parent", "npm:3.1.0"], + ["is-glob", "npm:3.1.0"], + ["path-dirname", "npm:1.0.2"] ], "linkType": "HARD", }], @@ -8084,10 +8133,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["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/", + ["npm:2.0.1", { + "packageLocation": "./.yarn/cache/handle-thing-npm-2.0.1-084baca59e-7509fca9eb.zip/node_modules/handle-thing/", "packageDependencies": [ - ["handle-thing", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandle-thing%2Fdownload%2Fhandle-thing-2.0.1.tgz"] + ["handle-thing", "npm:2.0.1"] ], "linkType": "HARD", }] @@ -8176,41 +8225,41 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["has-value", [ - ["npm:0.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-0.3.1.tgz", { - "packageLocation": "./.yarn/cache/has-value-npm-0.3.1-77239b13c9-d78fab4523.zip/node_modules/has-value/", + ["npm:0.3.1", { + "packageLocation": "./.yarn/cache/has-value-npm-0.3.1-4a15b6c29f-d78fab4523.zip/node_modules/has-value/", "packageDependencies": [ - ["has-value", "npm:0.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-0.3.1.tgz"], - ["get-value", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-value%2Fdownload%2Fget-value-2.0.6.tgz"], - ["has-values", "npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-0.1.4.tgz"], + ["has-value", "npm:0.3.1"], + ["get-value", "npm:2.0.6"], + ["has-values", "npm:0.1.4"], ["isobject", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-2.1.0.tgz"] ], "linkType": "HARD", }], - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/has-value-npm-1.0.0-80982f18a0-e05422bce9.zip/node_modules/has-value/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/has-value-npm-1.0.0-19d82fd04b-e05422bce9.zip/node_modules/has-value/", "packageDependencies": [ - ["has-value", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-1.0.0.tgz"], - ["get-value", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-value%2Fdownload%2Fget-value-2.0.6.tgz"], - ["has-values", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-1.0.0.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"] + ["has-value", "npm:1.0.0"], + ["get-value", "npm:2.0.6"], + ["has-values", "npm:1.0.0"], + ["isobject", "npm:3.0.1"] ], "linkType": "HARD", }] ]], ["has-values", [ - ["npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-0.1.4.tgz", { - "packageLocation": "./.yarn/cache/has-values-npm-0.1.4-33f631defb-df7ac830e4.zip/node_modules/has-values/", + ["npm:0.1.4", { + "packageLocation": "./.yarn/cache/has-values-npm-0.1.4-6b4397786d-df7ac830e4.zip/node_modules/has-values/", "packageDependencies": [ - ["has-values", "npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-0.1.4.tgz"] + ["has-values", "npm:0.1.4"] ], "linkType": "HARD", }], - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/has-values-npm-1.0.0-d17df2b3bd-b69c45d513.zip/node_modules/has-values/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/has-values-npm-1.0.0-890c077bbd-b69c45d513.zip/node_modules/has-values/", "packageDependencies": [ - ["has-values", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-1.0.0.tgz"], - ["is-number", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-number%2Fdownload%2Fis-number-3.0.0.tgz"], - ["kind-of", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-4.0.0.tgz"] + ["has-values", "npm:1.0.0"], + ["is-number", "npm:3.0.0"], + ["kind-of", "npm:4.0.0"] ], "linkType": "HARD", }] @@ -8259,14 +8308,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["hpack.js", [ - ["npm:2.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhpack.js%2Fdownload%2Fhpack.js-2.1.6.tgz", { - "packageLocation": "./.yarn/cache/hpack.js-npm-2.1.6-23e0bbd2b9-a22a28aa31.zip/node_modules/hpack.js/", + ["npm:2.1.6", { + "packageLocation": "./.yarn/cache/hpack.js-npm-2.1.6-b08cc088ad-a22a28aa31.zip/node_modules/hpack.js/", "packageDependencies": [ - ["hpack.js", "npm:2.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhpack.js%2Fdownload%2Fhpack.js-2.1.6.tgz"], + ["hpack.js", "npm:2.1.6"], ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"], - ["obuf", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobuf%2Fdownload%2Fobuf-1.1.2.tgz"], + ["obuf", "npm:1.1.2"], ["readable-stream", "npm:2.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz"], - ["wbuf", "npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwbuf%2Fdownload%2Fwbuf-1.7.3.tgz"] + ["wbuf", "npm:1.7.3"] ], "linkType": "HARD", }] @@ -8278,13 +8327,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["html-entities", "npm:1.3.1"] ], "linkType": "HARD", - }], - ["npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz", { - "packageLocation": "./.yarn/cache/html-entities-npm-1.3.1-2d9627a657-53d37e5161.zip/node_modules/html-entities/", - "packageDependencies": [ - ["html-entities", "npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz"] - ], - "linkType": "HARD", }] ]], ["html-minifier-terser", [ @@ -8327,7 +8369,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["pretty-error", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-error%2Fdownload%2Fpretty-error-2.1.1.tgz"], ["tapable", "npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz"], ["util.promisify", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "webpack" @@ -8360,52 +8402,62 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["http-deceiver", [ - ["npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-deceiver%2Fdownload%2Fhttp-deceiver-1.2.7.tgz", { - "packageLocation": "./.yarn/cache/http-deceiver-npm-1.2.7-1fdf321b19-d0b10fce25.zip/node_modules/http-deceiver/", + ["npm:1.2.7", { + "packageLocation": "./.yarn/cache/http-deceiver-npm-1.2.7-4f3aaa5b79-d0b10fce25.zip/node_modules/http-deceiver/", "packageDependencies": [ - ["http-deceiver", "npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-deceiver%2Fdownload%2Fhttp-deceiver-1.2.7.tgz"] + ["http-deceiver", "npm:1.2.7"] ], "linkType": "HARD", }] ]], ["http-errors", [ - ["npm:1.6.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz", { - "packageLocation": "./.yarn/cache/http-errors-npm-1.6.3-0ec1466153-850a3bf69f.zip/node_modules/http-errors/", + ["npm:1.6.3", { + "packageLocation": "./.yarn/cache/http-errors-npm-1.6.3-9b5bc0b0a8-850a3bf69f.zip/node_modules/http-errors/", "packageDependencies": [ - ["http-errors", "npm:1.6.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz"], - ["depd", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz"], - ["inherits", "npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz"], - ["setprototypeof", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.0.tgz"], - ["statuses", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz"] + ["http-errors", "npm:1.6.3"], + ["depd", "npm:1.1.2"], + ["inherits", "npm:2.0.3"], + ["setprototypeof", "npm:1.1.0"], + ["statuses", "npm:1.5.0"] ], "linkType": "HARD", }], - ["npm:1.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", { - "packageLocation": "./.yarn/cache/http-errors-npm-1.7.2-bf79cc2917-8ce4a4af05.zip/node_modules/http-errors/", + ["npm:1.7.2", { + "packageLocation": "./.yarn/cache/http-errors-npm-1.7.2-67163ae1df-8ce4a4af05.zip/node_modules/http-errors/", "packageDependencies": [ - ["http-errors", "npm:1.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz"], - ["depd", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz"], - ["inherits", "npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz"], - ["setprototypeof", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz"], - ["statuses", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz"], - ["toidentifier", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftoidentifier%2Fdownload%2Ftoidentifier-1.0.0.tgz"] + ["http-errors", "npm:1.7.2"], + ["depd", "npm:1.1.2"], + ["inherits", "npm:2.0.3"], + ["setprototypeof", "npm:1.1.1"], + ["statuses", "npm:1.5.0"], + ["toidentifier", "npm:1.0.0"] ], "linkType": "HARD", }], - ["npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.3.tgz", { - "packageLocation": "./.yarn/cache/http-errors-npm-1.7.3-9276c5fd2a-563ae4a3f1.zip/node_modules/http-errors/", + ["npm:1.7.3", { + "packageLocation": "./.yarn/cache/http-errors-npm-1.7.3-f6dc83b082-563ae4a3f1.zip/node_modules/http-errors/", "packageDependencies": [ - ["http-errors", "npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.3.tgz"], - ["depd", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz"], - ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"], - ["setprototypeof", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz"], - ["statuses", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz"], - ["toidentifier", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftoidentifier%2Fdownload%2Ftoidentifier-1.0.0.tgz"] + ["http-errors", "npm:1.7.3"], + ["depd", "npm:1.1.2"], + ["inherits", "npm:2.0.4"], + ["setprototypeof", "npm:1.1.1"], + ["statuses", "npm:1.5.0"], + ["toidentifier", "npm:1.0.0"] ], "linkType": "HARD", }] ]], ["http-proxy", [ + ["npm:1.18.1", { + "packageLocation": "./.yarn/cache/http-proxy-npm-1.18.1-a313c479c5-fc2062718d.zip/node_modules/http-proxy/", + "packageDependencies": [ + ["http-proxy", "npm:1.18.1"], + ["eventemitter3", "npm:4.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.4.tgz"], + ["follow-redirects", "npm:1.5.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.5.10.tgz"], + ["requires-port", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequires-port%2Fdownload%2Frequires-port-1.0.0.tgz"] + ], + "linkType": "HARD", + }], ["npm:1.18.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz", { "packageLocation": "./.yarn/cache/http-proxy-npm-1.18.1-d3bba4c2a7-fc2062718d.zip/node_modules/http-proxy/", "packageDependencies": [ @@ -8418,14 +8470,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["http-proxy-middleware", [ - ["npm:0.19.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz", { - "packageLocation": "./.yarn/cache/http-proxy-middleware-npm-0.19.1-122302d6da-30f6e99935.zip/node_modules/http-proxy-middleware/", + ["npm:0.19.1", { + "packageLocation": "./.yarn/cache/http-proxy-middleware-npm-0.19.1-ba4e5c6109-30f6e99935.zip/node_modules/http-proxy-middleware/", "packageDependencies": [ - ["http-proxy-middleware", "npm:0.19.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz"], - ["http-proxy", "npm:1.18.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz"], + ["http-proxy-middleware", "npm:0.19.1"], + ["http-proxy", "npm:1.18.1"], ["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"], - ["micromatch", "npm:3.1.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz"] + ["lodash", "npm:4.17.20"], + ["micromatch", "npm:3.1.10"] ], "linkType": "HARD", }] @@ -8511,11 +8563,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["iconv-lite", [ - ["npm:0.4.24::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", { - "packageLocation": "./.yarn/cache/iconv-lite-npm-0.4.24-dc56eba358-a9b9521066.zip/node_modules/iconv-lite/", + ["npm:0.4.24", { + "packageLocation": "./.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-a9b9521066.zip/node_modules/iconv-lite/", "packageDependencies": [ - ["iconv-lite", "npm:0.4.24::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz"], - ["safer-buffer", "npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz"] + ["iconv-lite", "npm:0.4.24"], + ["safer-buffer", "npm:2.1.2"] ], "linkType": "HARD", }] @@ -8588,12 +8640,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["import-local", [ - ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-local%2Fdownload%2Fimport-local-2.0.0.tgz", { - "packageLocation": "./.yarn/cache/import-local-npm-2.0.0-9de9bad399-4729bf153c.zip/node_modules/import-local/", + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/import-local-npm-2.0.0-9cfca832bf-4729bf153c.zip/node_modules/import-local/", "packageDependencies": [ - ["import-local", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-local%2Fdownload%2Fimport-local-2.0.0.tgz"], + ["import-local", "npm:2.0.0"], ["pkg-dir", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz"], - ["resolve-cwd", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-cwd%2Fdownload%2Fresolve-cwd-2.0.0.tgz"] + ["resolve-cwd", "npm:2.0.0"] ], "linkType": "HARD", }], @@ -8655,10 +8707,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["inherits", [ - ["npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz", { - "packageLocation": "./.yarn/cache/inherits-npm-2.0.3-b50ffdccd2-9488f9433e.zip/node_modules/inherits/", + ["npm:2.0.3", { + "packageLocation": "./.yarn/cache/inherits-npm-2.0.3-401e64b080-9488f9433e.zip/node_modules/inherits/", "packageDependencies": [ - ["inherits", "npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz"] + ["inherits", "npm:2.0.3"] + ], + "linkType": "HARD", + }], + ["npm:2.0.4", { + "packageLocation": "./.yarn/cache/inherits-npm-2.0.4-c66b3957a0-98426da247.zip/node_modules/inherits/", + "packageDependencies": [ + ["inherits", "npm:2.0.4"] ], "linkType": "HARD", }], @@ -8671,12 +8730,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["internal-ip", [ - ["npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz", { - "packageLocation": "./.yarn/cache/internal-ip-npm-4.3.0-b5bdf019bf-2cf2248053.zip/node_modules/internal-ip/", + ["npm:4.3.0", { + "packageLocation": "./.yarn/cache/internal-ip-npm-4.3.0-721bfbef82-2cf2248053.zip/node_modules/internal-ip/", "packageDependencies": [ - ["internal-ip", "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz"], - ["default-gateway", "npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz"], - ["ipaddr.js", "npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fipaddr.js%2Fdownload%2Fipaddr.js-1.9.1.tgz"] + ["internal-ip", "npm:4.3.0"], + ["default-gateway", "npm:4.2.0"], + ["ipaddr.js", "npm:1.9.1"] ], "linkType": "HARD", }] @@ -8713,28 +8772,28 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ip", [ - ["npm:1.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip%2Fdownload%2Fip-1.1.5.tgz", { - "packageLocation": "./.yarn/cache/ip-npm-1.1.5-238e8b918a-3ad007368c.zip/node_modules/ip/", + ["npm:1.1.5", { + "packageLocation": "./.yarn/cache/ip-npm-1.1.5-af36318aa6-3ad007368c.zip/node_modules/ip/", "packageDependencies": [ - ["ip", "npm:1.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip%2Fdownload%2Fip-1.1.5.tgz"] + ["ip", "npm:1.1.5"] ], "linkType": "HARD", }] ]], ["ip-regex", [ - ["npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip-regex%2Fdownload%2Fip-regex-2.1.0.tgz", { - "packageLocation": "./.yarn/cache/ip-regex-npm-2.1.0-512f866245-2fd2190ada.zip/node_modules/ip-regex/", + ["npm:2.1.0", { + "packageLocation": "./.yarn/cache/ip-regex-npm-2.1.0-7eb0f6c4ab-2fd2190ada.zip/node_modules/ip-regex/", "packageDependencies": [ - ["ip-regex", "npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip-regex%2Fdownload%2Fip-regex-2.1.0.tgz"] + ["ip-regex", "npm:2.1.0"] ], "linkType": "HARD", }] ]], ["ipaddr.js", [ - ["npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fipaddr.js%2Fdownload%2Fipaddr.js-1.9.1.tgz", { - "packageLocation": "./.yarn/cache/ipaddr.js-npm-1.9.1-bdf666d42d-de15bc7e63.zip/node_modules/ipaddr.js/", + ["npm:1.9.1", { + "packageLocation": "./.yarn/cache/ipaddr.js-npm-1.9.1-19ae7878b4-de15bc7e63.zip/node_modules/ipaddr.js/", "packageDependencies": [ - ["ipaddr.js", "npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fipaddr.js%2Fdownload%2Fipaddr.js-1.9.1.tgz"] + ["ipaddr.js", "npm:1.9.1"] ], "linkType": "HARD", }] @@ -8749,37 +8808,37 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-absolute-url", [ - ["npm:3.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz", { - "packageLocation": "./.yarn/cache/is-absolute-url-npm-3.0.3-df8627c76a-1beac70046.zip/node_modules/is-absolute-url/", + ["npm:3.0.3", { + "packageLocation": "./.yarn/cache/is-absolute-url-npm-3.0.3-0b1c391bc4-1beac70046.zip/node_modules/is-absolute-url/", "packageDependencies": [ - ["is-absolute-url", "npm:3.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz"] + ["is-absolute-url", "npm:3.0.3"] ], "linkType": "HARD", }] ]], ["is-accessor-descriptor", [ - ["npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-0.1.6.tgz", { - "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-0.1.6-f7538bedac-7a7fca2185.zip/node_modules/is-accessor-descriptor/", + ["npm:0.1.6", { + "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-0.1.6-41c495d517-7a7fca2185.zip/node_modules/is-accessor-descriptor/", "packageDependencies": [ - ["is-accessor-descriptor", "npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-0.1.6.tgz"], - ["kind-of", "npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz"] + ["is-accessor-descriptor", "npm:0.1.6"], + ["kind-of", "npm:3.2.2"] ], "linkType": "HARD", }], - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-1.0.0-dcc8b128c0-3973215c2e.zip/node_modules/is-accessor-descriptor/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-1.0.0-d8ce016e98-3973215c2e.zip/node_modules/is-accessor-descriptor/", "packageDependencies": [ - ["is-accessor-descriptor", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-1.0.0.tgz"], - ["kind-of", "npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz"] + ["is-accessor-descriptor", "npm:1.0.0"], + ["kind-of", "npm:6.0.3"] ], "linkType": "HARD", }] ]], ["is-arguments", [ - ["npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.0.4.tgz", { - "packageLocation": "./.yarn/cache/is-arguments-npm-1.0.4-30931ddeaa-a04bc21254.zip/node_modules/is-arguments/", + ["npm:1.0.4", { + "packageLocation": "./.yarn/cache/is-arguments-npm-1.0.4-c0da5c85ee-a04bc21254.zip/node_modules/is-arguments/", "packageDependencies": [ - ["is-arguments", "npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.0.4.tgz"] + ["is-arguments", "npm:1.0.4"] ], "linkType": "HARD", }] @@ -8794,11 +8853,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-binary-path", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-binary-path%2Fdownload%2Fis-binary-path-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/is-binary-path-npm-1.0.1-bb57a87fe0-25a2cda1e5.zip/node_modules/is-binary-path/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/is-binary-path-npm-1.0.1-9af74a6099-25a2cda1e5.zip/node_modules/is-binary-path/", "packageDependencies": [ - ["is-binary-path", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-binary-path%2Fdownload%2Fis-binary-path-1.0.1.tgz"], - ["binary-extensions", "npm:1.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz"] + ["is-binary-path", "npm:1.0.1"], + ["binary-extensions", "npm:1.13.1"] ], "linkType": "HARD", }], @@ -8812,10 +8871,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-buffer", [ - ["npm:1.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz", { - "packageLocation": "./.yarn/cache/is-buffer-npm-1.1.6-8848721d91-336ec78f00.zip/node_modules/is-buffer/", + ["npm:1.1.6", { + "packageLocation": "./.yarn/cache/is-buffer-npm-1.1.6-08199d9ccc-336ec78f00.zip/node_modules/is-buffer/", "packageDependencies": [ - ["is-buffer", "npm:1.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz"] + ["is-buffer", "npm:1.1.6"] ], "linkType": "HARD", }] @@ -8847,19 +8906,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-data-descriptor", [ - ["npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-0.1.4.tgz", { - "packageLocation": "./.yarn/cache/is-data-descriptor-npm-0.1.4-757c5bbc46-51db89bb46.zip/node_modules/is-data-descriptor/", + ["npm:0.1.4", { + "packageLocation": "./.yarn/cache/is-data-descriptor-npm-0.1.4-6f53f71c67-51db89bb46.zip/node_modules/is-data-descriptor/", "packageDependencies": [ - ["is-data-descriptor", "npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-0.1.4.tgz"], - ["kind-of", "npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz"] + ["is-data-descriptor", "npm:0.1.4"], + ["kind-of", "npm:3.2.2"] ], "linkType": "HARD", }], - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/is-data-descriptor-npm-1.0.0-58b032f4bf-0297518899.zip/node_modules/is-data-descriptor/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/is-data-descriptor-npm-1.0.0-f7d2e852ca-0297518899.zip/node_modules/is-data-descriptor/", "packageDependencies": [ - ["is-data-descriptor", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-1.0.0.tgz"], - ["kind-of", "npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz"] + ["is-data-descriptor", "npm:1.0.0"], + ["kind-of", "npm:6.0.3"] ], "linkType": "HARD", }] @@ -8874,45 +8933,52 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-descriptor", [ - ["npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-0.1.6.tgz", { - "packageLocation": "./.yarn/cache/is-descriptor-npm-0.1.6-2304570d44-cab6979fb6.zip/node_modules/is-descriptor/", + ["npm:0.1.6", { + "packageLocation": "./.yarn/cache/is-descriptor-npm-0.1.6-15c7346839-cab6979fb6.zip/node_modules/is-descriptor/", "packageDependencies": [ - ["is-descriptor", "npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-0.1.6.tgz"], - ["is-accessor-descriptor", "npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-0.1.6.tgz"], - ["is-data-descriptor", "npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-0.1.4.tgz"], - ["kind-of", "npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-5.1.0.tgz"] + ["is-descriptor", "npm:0.1.6"], + ["is-accessor-descriptor", "npm:0.1.6"], + ["is-data-descriptor", "npm:0.1.4"], + ["kind-of", "npm:5.1.0"] ], "linkType": "HARD", }], - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/is-descriptor-npm-1.0.2-a58906611a-be8004010e.zip/node_modules/is-descriptor/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/is-descriptor-npm-1.0.2-5cfc02c444-be8004010e.zip/node_modules/is-descriptor/", "packageDependencies": [ - ["is-descriptor", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-1.0.2.tgz"], - ["is-accessor-descriptor", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-1.0.0.tgz"], - ["is-data-descriptor", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-1.0.0.tgz"], - ["kind-of", "npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz"] + ["is-descriptor", "npm:1.0.2"], + ["is-accessor-descriptor", "npm:1.0.0"], + ["is-data-descriptor", "npm:1.0.0"], + ["kind-of", "npm:6.0.3"] ], "linkType": "HARD", }] ]], ["is-extendable", [ - ["npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-0.1.1.tgz", { - "packageLocation": "./.yarn/cache/is-extendable-npm-0.1.1-1f12d91b9b-9d051e68c3.zip/node_modules/is-extendable/", + ["npm:0.1.1", { + "packageLocation": "./.yarn/cache/is-extendable-npm-0.1.1-322b4649ec-9d051e68c3.zip/node_modules/is-extendable/", "packageDependencies": [ - ["is-extendable", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-0.1.1.tgz"] + ["is-extendable", "npm:0.1.1"] ], "linkType": "HARD", }], - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/is-extendable-npm-1.0.1-001b51c406-2bf711afe6.zip/node_modules/is-extendable/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/is-extendable-npm-1.0.1-7095ad8b16-2bf711afe6.zip/node_modules/is-extendable/", "packageDependencies": [ - ["is-extendable", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-1.0.1.tgz"], - ["is-plain-object", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz"] + ["is-extendable", "npm:1.0.1"], + ["is-plain-object", "npm:2.0.4"] ], "linkType": "HARD", }] ]], ["is-extglob", [ + ["npm:2.1.1", { + "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-ca623e2c56.zip/node_modules/is-extglob/", + "packageDependencies": [ + ["is-extglob", "npm:2.1.1"] + ], + "linkType": "HARD", + }], ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extglob%2Fdownload%2Fis-extglob-2.1.1.tgz", { "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0c8f89d20e-ca623e2c56.zip/node_modules/is-extglob/", "packageDependencies": [ @@ -8939,11 +9005,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-glob", [ - ["npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz", { - "packageLocation": "./.yarn/cache/is-glob-npm-3.1.0-f8518ed5b1-9911e04e28.zip/node_modules/is-glob/", + ["npm:3.1.0", { + "packageLocation": "./.yarn/cache/is-glob-npm-3.1.0-ea0bd3271e-9911e04e28.zip/node_modules/is-glob/", "packageDependencies": [ - ["is-glob", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz"], - ["is-extglob", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extglob%2Fdownload%2Fis-extglob-2.1.1.tgz"] + ["is-glob", "npm:3.1.0"], + ["is-extglob", "npm:2.1.1"] ], "linkType": "HARD", }], @@ -8975,11 +9041,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-number", [ - ["npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-number%2Fdownload%2Fis-number-3.0.0.tgz", { - "packageLocation": "./.yarn/cache/is-number-npm-3.0.0-01c139e8aa-ae03986ded.zip/node_modules/is-number/", + ["npm:3.0.0", { + "packageLocation": "./.yarn/cache/is-number-npm-3.0.0-9088035ade-ae03986ded.zip/node_modules/is-number/", "packageDependencies": [ - ["is-number", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-number%2Fdownload%2Fis-number-3.0.0.tgz"], - ["kind-of", "npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz"] + ["is-number", "npm:3.0.0"], + ["kind-of", "npm:3.2.2"] ], "linkType": "HARD", }], @@ -9030,11 +9096,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-plain-object", [ - ["npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz", { - "packageLocation": "./.yarn/cache/is-plain-object-npm-2.0.4-97e1efdf6c-2f32322673.zip/node_modules/is-plain-object/", + ["npm:2.0.4", { + "packageLocation": "./.yarn/cache/is-plain-object-npm-2.0.4-da3265d804-2f32322673.zip/node_modules/is-plain-object/", "packageDependencies": [ - ["is-plain-object", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"] + ["is-plain-object", "npm:2.0.4"], + ["isobject", "npm:3.0.1"] ], "linkType": "HARD", }] @@ -9067,10 +9133,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-stream", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-stream%2Fdownload%2Fis-stream-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/is-stream-npm-1.1.0-93f56a1539-39843ee9ff.zip/node_modules/is-stream/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/is-stream-npm-1.1.0-818ecbf6bb-39843ee9ff.zip/node_modules/is-stream/", "packageDependencies": [ - ["is-stream", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-stream%2Fdownload%2Fis-stream-1.1.0.tgz"] + ["is-stream", "npm:1.1.0"] ], "linkType": "HARD", }], @@ -9111,19 +9177,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["is-windows", [ - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-windows%2Fdownload%2Fis-windows-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/is-windows-npm-1.0.2-f4ae19c850-dd1ed8339a.zip/node_modules/is-windows/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-dd1ed8339a.zip/node_modules/is-windows/", "packageDependencies": [ - ["is-windows", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-windows%2Fdownload%2Fis-windows-1.0.2.tgz"] + ["is-windows", "npm:1.0.2"] ], "linkType": "HARD", }] ]], ["is-wsl", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/is-wsl-npm-1.1.0-bfaf685a17-0f15cf5d5f.zip/node_modules/is-wsl/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/is-wsl-npm-1.1.0-136e2b7c74-0f15cf5d5f.zip/node_modules/is-wsl/", "packageDependencies": [ - ["is-wsl", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz"] + ["is-wsl", "npm:1.1.0"] ], "linkType": "HARD", }] @@ -9162,10 +9228,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz", { - "packageLocation": "./.yarn/cache/isobject-npm-3.0.1-8b1c206b72-b537a9ccdd.zip/node_modules/isobject/", + ["npm:3.0.1", { + "packageLocation": "./.yarn/cache/isobject-npm-3.0.1-8145901fd2-b537a9ccdd.zip/node_modules/isobject/", "packageDependencies": [ - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"] + ["isobject", "npm:3.0.1"] ], "linkType": "HARD", }] @@ -9339,10 +9405,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["json3", [ - ["npm:3.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson3%2Fdownload%2Fjson3-3.3.3.tgz", { - "packageLocation": "./.yarn/cache/json3-npm-3.3.3-ef5020f593-f79831247f.zip/node_modules/json3/", + ["npm:3.3.3", { + "packageLocation": "./.yarn/cache/json3-npm-3.3.3-be4baec3f1-f79831247f.zip/node_modules/json3/", "packageDependencies": [ - ["json3", "npm:3.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson3%2Fdownload%2Fjson3-3.3.3.tgz"] + ["json3", "npm:3.3.3"] ], "linkType": "HARD", }] @@ -9410,42 +9476,42 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["killable", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkillable%2Fdownload%2Fkillable-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/killable-npm-1.0.1-169bff5d99-397df2b8a7.zip/node_modules/killable/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/killable-npm-1.0.1-bf69803651-397df2b8a7.zip/node_modules/killable/", "packageDependencies": [ - ["killable", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkillable%2Fdownload%2Fkillable-1.0.1.tgz"] + ["killable", "npm:1.0.1"] ], "linkType": "HARD", }] ]], ["kind-of", [ - ["npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", { - "packageLocation": "./.yarn/cache/kind-of-npm-3.2.2-6034eef8bd-e8a1835c4b.zip/node_modules/kind-of/", + ["npm:3.2.2", { + "packageLocation": "./.yarn/cache/kind-of-npm-3.2.2-7deaffa5f9-e8a1835c4b.zip/node_modules/kind-of/", "packageDependencies": [ - ["kind-of", "npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz"], - ["is-buffer", "npm:1.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz"] + ["kind-of", "npm:3.2.2"], + ["is-buffer", "npm:1.1.6"] ], "linkType": "HARD", }], - ["npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-4.0.0.tgz", { - "packageLocation": "./.yarn/cache/kind-of-npm-4.0.0-153e12316d-2e7296c614.zip/node_modules/kind-of/", + ["npm:4.0.0", { + "packageLocation": "./.yarn/cache/kind-of-npm-4.0.0-69fd153375-2e7296c614.zip/node_modules/kind-of/", "packageDependencies": [ - ["kind-of", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-4.0.0.tgz"], - ["is-buffer", "npm:1.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz"] + ["kind-of", "npm:4.0.0"], + ["is-buffer", "npm:1.1.6"] ], "linkType": "HARD", }], - ["npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-5.1.0.tgz", { - "packageLocation": "./.yarn/cache/kind-of-npm-5.1.0-5f1bb61127-c98cfe70c8.zip/node_modules/kind-of/", + ["npm:5.1.0", { + "packageLocation": "./.yarn/cache/kind-of-npm-5.1.0-ce82f43eaa-c98cfe70c8.zip/node_modules/kind-of/", "packageDependencies": [ - ["kind-of", "npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-5.1.0.tgz"] + ["kind-of", "npm:5.1.0"] ], "linkType": "HARD", }], - ["npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz", { - "packageLocation": "./.yarn/cache/kind-of-npm-6.0.3-ab2af25b13-5de5d65777.zip/node_modules/kind-of/", + ["npm:6.0.3", { + "packageLocation": "./.yarn/cache/kind-of-npm-6.0.3-ab15f36220-5de5d65777.zip/node_modules/kind-of/", "packageDependencies": [ - ["kind-of", "npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz"] + ["kind-of", "npm:6.0.3"] ], "linkType": "HARD", }] @@ -9609,6 +9675,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:4.17.20", { + "packageLocation": "./.yarn/cache/lodash-npm-4.17.20-c0db62021c-c62101d250.zip/node_modules/lodash/", + "packageDependencies": [ + ["lodash", "npm:4.17.20"] + ], + "linkType": "HARD", + }], ["npm:4.17.20::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", { "packageLocation": "./.yarn/cache/lodash-npm-4.17.20-3d0d643e5a-c62101d250.zip/node_modules/lodash/", "packageDependencies": [ @@ -9667,10 +9740,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["loglevel", [ - ["npm:1.6.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.8.tgz", { - "packageLocation": "./.yarn/cache/loglevel-npm-1.6.8-bbd72f4837-847939b085.zip/node_modules/loglevel/", + ["npm:1.7.0", { + "packageLocation": "./.yarn/cache/loglevel-npm-1.7.0-9564513107-5d14de3bef.zip/node_modules/loglevel/", "packageDependencies": [ - ["loglevel", "npm:1.6.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.8.tgz"] + ["loglevel", "npm:1.7.0"] ], "linkType": "HARD", }] @@ -9744,20 +9817,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["map-cache", [ - ["npm:0.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-cache%2Fdownload%2Fmap-cache-0.2.2.tgz", { - "packageLocation": "./.yarn/cache/map-cache-npm-0.2.2-a13d8760c2-3d205d20e0.zip/node_modules/map-cache/", + ["npm:0.2.2", { + "packageLocation": "./.yarn/cache/map-cache-npm-0.2.2-1620199b05-3d205d20e0.zip/node_modules/map-cache/", "packageDependencies": [ - ["map-cache", "npm:0.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-cache%2Fdownload%2Fmap-cache-0.2.2.tgz"] + ["map-cache", "npm:0.2.2"] ], "linkType": "HARD", }] ]], ["map-visit", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-visit%2Fdownload%2Fmap-visit-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/map-visit-npm-1.0.0-77671c7d3d-9e85e6d802.zip/node_modules/map-visit/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/map-visit-npm-1.0.0-33a7988a9d-9e85e6d802.zip/node_modules/map-visit/", "packageDependencies": [ - ["map-visit", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-visit%2Fdownload%2Fmap-visit-1.0.0.tgz"], - ["object-visit", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-visit%2Fdownload%2Fobject-visit-1.0.1.tgz"] + ["map-visit", "npm:1.0.0"], + ["object-visit", "npm:1.0.1"] ], "linkType": "HARD", }] @@ -9773,19 +9846,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["media-typer", [ - ["npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmedia-typer%2Fdownload%2Fmedia-typer-0.3.0.tgz", { - "packageLocation": "./.yarn/cache/media-typer-npm-0.3.0-5409539c00-be1c825782.zip/node_modules/media-typer/", + ["npm:0.3.0", { + "packageLocation": "./.yarn/cache/media-typer-npm-0.3.0-8674f8f0f5-be1c825782.zip/node_modules/media-typer/", "packageDependencies": [ - ["media-typer", "npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmedia-typer%2Fdownload%2Fmedia-typer-0.3.0.tgz"] + ["media-typer", "npm:0.3.0"] ], "linkType": "HARD", }] ]], ["memory-fs", [ - ["npm:0.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", { - "packageLocation": "./.yarn/cache/memory-fs-npm-0.4.1-75bd36d5b4-ba79207118.zip/node_modules/memory-fs/", + ["npm:0.4.1", { + "packageLocation": "./.yarn/cache/memory-fs-npm-0.4.1-0a5f9b8954-ba79207118.zip/node_modules/memory-fs/", "packageDependencies": [ - ["memory-fs", "npm:0.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz"], + ["memory-fs", "npm:0.4.1"], ["errno", "npm:0.1.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ferrno%2Fdownload%2Ferrno-0.1.7.tgz"], ["readable-stream", "npm:2.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz"] ], @@ -9802,10 +9875,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["merge-descriptors", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge-descriptors%2Fdownload%2Fmerge-descriptors-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/merge-descriptors-npm-1.0.1-bf56428fd4-2d2a09eaac.zip/node_modules/merge-descriptors/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/merge-descriptors-npm-1.0.1-615287aaa8-2d2a09eaac.zip/node_modules/merge-descriptors/", "packageDependencies": [ - ["merge-descriptors", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge-descriptors%2Fdownload%2Fmerge-descriptors-1.0.1.tgz"] + ["merge-descriptors", "npm:1.0.1"] ], "linkType": "HARD", }] @@ -9829,32 +9902,32 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["methods", [ - ["npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmethods%2Fdownload%2Fmethods-1.1.2.tgz", { - "packageLocation": "./.yarn/cache/methods-npm-1.1.2-d1ae4c2fb5-450e4ea0fd.zip/node_modules/methods/", + ["npm:1.1.2", { + "packageLocation": "./.yarn/cache/methods-npm-1.1.2-92f6fdb39b-450e4ea0fd.zip/node_modules/methods/", "packageDependencies": [ - ["methods", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmethods%2Fdownload%2Fmethods-1.1.2.tgz"] + ["methods", "npm:1.1.2"] ], "linkType": "HARD", }] ]], ["micromatch", [ - ["npm:3.1.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz", { - "packageLocation": "./.yarn/cache/micromatch-npm-3.1.10-f817a61c82-a60e73539a.zip/node_modules/micromatch/", - "packageDependencies": [ - ["micromatch", "npm:3.1.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz"], - ["arr-diff", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-diff%2Fdownload%2Farr-diff-4.0.0.tgz"], - ["array-unique", "npm:0.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-unique%2Fdownload%2Farray-unique-0.3.2.tgz"], - ["braces", "npm:2.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbraces%2Fdownload%2Fbraces-2.3.2.tgz"], - ["define-property", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-2.0.2.tgz"], - ["extend-shallow", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz"], - ["extglob", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextglob%2Fdownload%2Fextglob-2.0.4.tgz"], - ["fragment-cache", "npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffragment-cache%2Fdownload%2Ffragment-cache-0.2.1.tgz"], - ["kind-of", "npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz"], - ["nanomatch", "npm:1.2.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanomatch%2Fdownload%2Fnanomatch-1.2.13.tgz"], - ["object.pick", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.pick%2Fdownload%2Fobject.pick-1.3.0.tgz"], - ["regex-not", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz"], - ["snapdragon", "npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz"], - ["to-regex", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz"] + ["npm:3.1.10", { + "packageLocation": "./.yarn/cache/micromatch-npm-3.1.10-016e80c79d-a60e73539a.zip/node_modules/micromatch/", + "packageDependencies": [ + ["micromatch", "npm:3.1.10"], + ["arr-diff", "npm:4.0.0"], + ["array-unique", "npm:0.3.2"], + ["braces", "npm:2.3.2"], + ["define-property", "npm:2.0.2"], + ["extend-shallow", "npm:3.0.2"], + ["extglob", "npm:2.0.4"], + ["fragment-cache", "npm:0.2.1"], + ["kind-of", "npm:6.0.3"], + ["nanomatch", "npm:1.2.13"], + ["object.pick", "npm:1.3.0"], + ["regex-not", "npm:1.0.2"], + ["snapdragon", "npm:0.8.2"], + ["to-regex", "npm:3.0.2"] ], "linkType": "HARD", }], @@ -9869,6 +9942,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["mime", [ + ["npm:1.6.0", { + "packageLocation": "./.yarn/cache/mime-npm-1.6.0-60ae95038a-d540c24dd3.zip/node_modules/mime/", + "packageDependencies": [ + ["mime", "npm:1.6.0"] + ], + "linkType": "HARD", + }], ["npm:1.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", { "packageLocation": "./.yarn/cache/mime-npm-1.6.0-79830f7bce-d540c24dd3.zip/node_modules/mime/", "packageDependencies": [ @@ -9876,10 +9956,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["npm:2.4.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz", { - "packageLocation": "./.yarn/cache/mime-npm-2.4.6-0dbb21ce6a-319ec38588.zip/node_modules/mime/", + ["npm:2.4.6", { + "packageLocation": "./.yarn/cache/mime-npm-2.4.6-253594ac3f-319ec38588.zip/node_modules/mime/", "packageDependencies": [ - ["mime", "npm:2.4.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz"] + ["mime", "npm:2.4.6"] ], "linkType": "HARD", }] @@ -9891,6 +9971,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["mime-db", "npm:1.44.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz"] ], "linkType": "HARD", + }], + ["npm:1.45.0", { + "packageLocation": "./.yarn/cache/mime-db-npm-1.45.0-f3709f033e-86701c54f7.zip/node_modules/mime-db/", + "packageDependencies": [ + ["mime-db", "npm:1.45.0"] + ], + "linkType": "HARD", }] ]], ["mime-types", [ @@ -9954,13 +10041,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["mini-css-extract-plugin", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.0", { - "packageLocation": "./.yarn/$$virtual/mini-css-extract-plugin-virtual-5c184b300f/0/cache/mini-css-extract-plugin-npm-1.2.0-cd68fc20c6-e87cbebbcb.zip/node_modules/mini-css-extract-plugin/", + ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.1", { + "packageLocation": "./.yarn/$$virtual/mini-css-extract-plugin-virtual-ef2ca90beb/0/cache/mini-css-extract-plugin-npm-1.2.1-1a0a3ad496-c2e9751e63.zip/node_modules/mini-css-extract-plugin/", "packageDependencies": [ - ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.0"], + ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.1"], ["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:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["webpack-sources", "npm:1.4.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz"] ], "packagePeers": [ @@ -9970,10 +10057,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["minimalistic-assert", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimalistic-assert%2Fdownload%2Fminimalistic-assert-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/minimalistic-assert-npm-1.0.1-93f2a687dc-28f1de3cf9.zip/node_modules/minimalistic-assert/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/minimalistic-assert-npm-1.0.1-dc8bb23d29-28f1de3cf9.zip/node_modules/minimalistic-assert/", "packageDependencies": [ - ["minimalistic-assert", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimalistic-assert%2Fdownload%2Fminimalistic-assert-1.0.1.tgz"] + ["minimalistic-assert", "npm:1.0.1"] ], "linkType": "HARD", }] @@ -10049,17 +10136,25 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["mixin-deep", [ - ["npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmixin-deep%2Fdownload%2Fmixin-deep-1.3.2.tgz", { - "packageLocation": "./.yarn/cache/mixin-deep-npm-1.3.2-7cb57856a3-68da98bc1a.zip/node_modules/mixin-deep/", + ["npm:1.3.2", { + "packageLocation": "./.yarn/cache/mixin-deep-npm-1.3.2-29b528e571-68da98bc1a.zip/node_modules/mixin-deep/", "packageDependencies": [ - ["mixin-deep", "npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmixin-deep%2Fdownload%2Fmixin-deep-1.3.2.tgz"], - ["for-in", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffor-in%2Fdownload%2Ffor-in-1.0.2.tgz"], - ["is-extendable", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-1.0.1.tgz"] + ["mixin-deep", "npm:1.3.2"], + ["for-in", "npm:1.0.2"], + ["is-extendable", "npm:1.0.1"] ], "linkType": "HARD", }] ]], ["mkdirp", [ + ["npm:0.5.5", { + "packageLocation": "./.yarn/cache/mkdirp-npm-0.5.5-6bc76534fc-9dd9792e89.zip/node_modules/mkdirp/", + "packageDependencies": [ + ["mkdirp", "npm:0.5.5"], + ["minimist", "npm:1.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz"] + ], + "linkType": "HARD", + }], ["npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", { "packageLocation": "./.yarn/cache/mkdirp-npm-0.5.5-203efae148-9dd9792e89.zip/node_modules/mkdirp/", "packageDependencies": [ @@ -10084,10 +10179,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", { - "packageLocation": "./.yarn/cache/ms-npm-2.1.1-936b62be9b-81ad38c74d.zip/node_modules/ms/", + ["npm:2.1.1", { + "packageLocation": "./.yarn/cache/ms-npm-2.1.1-5b4fd72c86-81ad38c74d.zip/node_modules/ms/", "packageDependencies": [ - ["ms", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz"] + ["ms", "npm:2.1.1"] ], "linkType": "HARD", }], @@ -10100,30 +10195,30 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["multicast-dns", [ - ["npm:6.2.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz", { - "packageLocation": "./.yarn/cache/multicast-dns-npm-6.2.3-4dfad4a56f-3a67f9a155.zip/node_modules/multicast-dns/", + ["npm:6.2.3", { + "packageLocation": "./.yarn/cache/multicast-dns-npm-6.2.3-e5ffad56a4-3a67f9a155.zip/node_modules/multicast-dns/", "packageDependencies": [ - ["multicast-dns", "npm:6.2.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz"], - ["dns-packet", "npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-packet%2Fdownload%2Fdns-packet-1.3.1.tgz"], - ["thunky", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fthunky%2Fdownload%2Fthunky-1.1.0.tgz"] + ["multicast-dns", "npm:6.2.3"], + ["dns-packet", "npm:1.3.1"], + ["thunky", "npm:1.1.0"] ], "linkType": "HARD", }] ]], ["multicast-dns-service-types", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns-service-types%2Fdownload%2Fmulticast-dns-service-types-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/multicast-dns-service-types-npm-1.1.0-90c195ce06-de10f16134.zip/node_modules/multicast-dns-service-types/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/multicast-dns-service-types-npm-1.1.0-d019ff060c-de10f16134.zip/node_modules/multicast-dns-service-types/", "packageDependencies": [ - ["multicast-dns-service-types", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns-service-types%2Fdownload%2Fmulticast-dns-service-types-1.1.0.tgz"] + ["multicast-dns-service-types", "npm:1.1.0"] ], "linkType": "HARD", }] ]], ["nan", [ - ["npm:2.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz", { - "packageLocation": "./.yarn/unplugged/nan-npm-2.14.1-6b7103c9d4/node_modules/nan/", + ["npm:2.14.2", { + "packageLocation": "./.yarn/unplugged/nan-npm-2.14.2-e3ede8ce5d/node_modules/nan/", "packageDependencies": [ - ["nan", "npm:2.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz"], + ["nan", "npm:2.14.2"], ["node-gyp", "npm:7.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-7.0.0.tgz"] ], "linkType": "HARD", @@ -10139,21 +10234,21 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["nanomatch", [ - ["npm:1.2.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanomatch%2Fdownload%2Fnanomatch-1.2.13.tgz", { - "packageLocation": "./.yarn/cache/nanomatch-npm-1.2.13-d8b8b8d0d0-2e1440c570.zip/node_modules/nanomatch/", + ["npm:1.2.13", { + "packageLocation": "./.yarn/cache/nanomatch-npm-1.2.13-bc9173dbe7-2e1440c570.zip/node_modules/nanomatch/", "packageDependencies": [ - ["nanomatch", "npm:1.2.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanomatch%2Fdownload%2Fnanomatch-1.2.13.tgz"], - ["arr-diff", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-diff%2Fdownload%2Farr-diff-4.0.0.tgz"], - ["array-unique", "npm:0.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-unique%2Fdownload%2Farray-unique-0.3.2.tgz"], - ["define-property", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-2.0.2.tgz"], - ["extend-shallow", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz"], - ["fragment-cache", "npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffragment-cache%2Fdownload%2Ffragment-cache-0.2.1.tgz"], - ["is-windows", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-windows%2Fdownload%2Fis-windows-1.0.2.tgz"], - ["kind-of", "npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz"], - ["object.pick", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.pick%2Fdownload%2Fobject.pick-1.3.0.tgz"], - ["regex-not", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz"], - ["snapdragon", "npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz"], - ["to-regex", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz"] + ["nanomatch", "npm:1.2.13"], + ["arr-diff", "npm:4.0.0"], + ["array-unique", "npm:0.3.2"], + ["define-property", "npm:2.0.2"], + ["extend-shallow", "npm:3.0.2"], + ["fragment-cache", "npm:0.2.1"], + ["is-windows", "npm:1.0.2"], + ["kind-of", "npm:6.0.3"], + ["object.pick", "npm:1.3.0"], + ["regex-not", "npm:1.0.2"], + ["snapdragon", "npm:0.8.2"], + ["to-regex", "npm:3.0.2"] ], "linkType": "HARD", }] @@ -10178,10 +10273,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["negotiator", [ - ["npm:0.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnegotiator%2Fdownload%2Fnegotiator-0.6.2.tgz", { - "packageLocation": "./.yarn/cache/negotiator-npm-0.6.2-fb945ca17e-4b230bd15f.zip/node_modules/negotiator/", + ["npm:0.6.2", { + "packageLocation": "./.yarn/cache/negotiator-npm-0.6.2-ba538e167a-4b230bd15f.zip/node_modules/negotiator/", "packageDependencies": [ - ["negotiator", "npm:0.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnegotiator%2Fdownload%2Fnegotiator-0.6.2.tgz"] + ["negotiator", "npm:0.6.2"] ], "linkType": "HARD", }] @@ -10196,10 +10291,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["nice-try", [ - ["npm:1.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz", { - "packageLocation": "./.yarn/cache/nice-try-npm-1.0.5-d9c04f9768-330f190bf6.zip/node_modules/nice-try/", + ["npm:1.0.5", { + "packageLocation": "./.yarn/cache/nice-try-npm-1.0.5-963856b16f-330f190bf6.zip/node_modules/nice-try/", "packageDependencies": [ - ["nice-try", "npm:1.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz"] + ["nice-try", "npm:1.0.5"] ], "linkType": "HARD", }] @@ -10216,10 +10311,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["node-forge", [ - ["npm:0.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz", { - "packageLocation": "./.yarn/cache/node-forge-npm-0.9.0-0822411c39-901d6ab679.zip/node_modules/node-forge/", + ["npm:0.10.0", { + "packageLocation": "./.yarn/cache/node-forge-npm-0.10.0-605ba7b28b-c7a729933a.zip/node_modules/node-forge/", "packageDependencies": [ - ["node-forge", "npm:0.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz"] + ["node-forge", "npm:0.10.0"] ], "linkType": "HARD", }] @@ -10302,11 +10397,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["normalize-path", [ - ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-path%2Fdownload%2Fnormalize-path-2.1.1.tgz", { - "packageLocation": "./.yarn/cache/normalize-path-npm-2.1.1-0182e75f79-9eb82b2f6a.zip/node_modules/normalize-path/", + ["npm:2.1.1", { + "packageLocation": "./.yarn/cache/normalize-path-npm-2.1.1-65c4766716-9eb82b2f6a.zip/node_modules/normalize-path/", "packageDependencies": [ - ["normalize-path", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-path%2Fdownload%2Fnormalize-path-2.1.1.tgz"], - ["remove-trailing-separator", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fremove-trailing-separator%2Fdownload%2Fremove-trailing-separator-1.1.0.tgz"] + ["normalize-path", "npm:2.1.1"], + ["remove-trailing-separator", "npm:1.1.0"] ], "linkType": "HARD", }], @@ -10337,11 +10432,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["npm-run-path", [ - ["npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz", { - "packageLocation": "./.yarn/cache/npm-run-path-npm-2.0.2-0097cb79c9-0a1bc9a1e0.zip/node_modules/npm-run-path/", + ["npm:2.0.2", { + "packageLocation": "./.yarn/cache/npm-run-path-npm-2.0.2-96c8b48857-0a1bc9a1e0.zip/node_modules/npm-run-path/", "packageDependencies": [ - ["npm-run-path", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz"], - ["path-key", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz"] + ["npm-run-path", "npm:2.0.2"], + ["path-key", "npm:2.0.1"] ], "linkType": "HARD", }], @@ -10414,13 +10509,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["object-copy", [ - ["npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-copy%2Fdownload%2Fobject-copy-0.1.0.tgz", { - "packageLocation": "./.yarn/cache/object-copy-npm-0.1.0-38eb02d78b-d91d46e542.zip/node_modules/object-copy/", + ["npm:0.1.0", { + "packageLocation": "./.yarn/cache/object-copy-npm-0.1.0-e229d02f2b-d91d46e542.zip/node_modules/object-copy/", "packageDependencies": [ - ["object-copy", "npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-copy%2Fdownload%2Fobject-copy-0.1.0.tgz"], - ["copy-descriptor", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-descriptor%2Fdownload%2Fcopy-descriptor-0.1.1.tgz"], - ["define-property", "npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz"], - ["kind-of", "npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz"] + ["object-copy", "npm:0.1.0"], + ["copy-descriptor", "npm:0.1.1"], + ["define-property", "npm:0.2.5"], + ["kind-of", "npm:3.2.2"] ], "linkType": "HARD", }] @@ -10442,12 +10537,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["object-is", [ - ["npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.2.tgz", { - "packageLocation": "./.yarn/cache/object-is-npm-1.1.2-085bef0859-9ea7df4475.zip/node_modules/object-is/", + ["npm:1.1.3", { + "packageLocation": "./.yarn/cache/object-is-npm-1.1.3-0d96485ac4-f16b6ae28c.zip/node_modules/object-is/", "packageDependencies": [ - ["object-is", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.2.tgz"], + ["object-is", "npm:1.1.3"], ["define-properties", "npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-properties%2Fdownload%2Fdefine-properties-1.1.3.tgz"], - ["es-abstract", "npm:1.17.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz"] + ["es-abstract", "npm:1.18.0-next.1"] ], "linkType": "HARD", }] @@ -10462,11 +10557,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["object-visit", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-visit%2Fdownload%2Fobject-visit-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/object-visit-npm-1.0.1-e8feded7bd-8666727dbf.zip/node_modules/object-visit/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/object-visit-npm-1.0.1-c5c9057c24-8666727dbf.zip/node_modules/object-visit/", "packageDependencies": [ - ["object-visit", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-visit%2Fdownload%2Fobject-visit-1.0.1.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"] + ["object-visit", "npm:1.0.1"], + ["isobject", "npm:3.0.1"] ], "linkType": "HARD", }] @@ -10532,11 +10627,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["object.pick", [ - ["npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.pick%2Fdownload%2Fobject.pick-1.3.0.tgz", { - "packageLocation": "./.yarn/cache/object.pick-npm-1.3.0-7537a483ac-e22d555d3b.zip/node_modules/object.pick/", + ["npm:1.3.0", { + "packageLocation": "./.yarn/cache/object.pick-npm-1.3.0-dad8eae8fb-e22d555d3b.zip/node_modules/object.pick/", "packageDependencies": [ - ["object.pick", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.pick%2Fdownload%2Fobject.pick-1.3.0.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"] + ["object.pick", "npm:1.3.0"], + ["isobject", "npm:3.0.1"] ], "linkType": "HARD", }] @@ -10555,29 +10650,29 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["obuf", [ - ["npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobuf%2Fdownload%2Fobuf-1.1.2.tgz", { - "packageLocation": "./.yarn/cache/obuf-npm-1.1.2-aa30b1cbce-aa741387b0.zip/node_modules/obuf/", + ["npm:1.1.2", { + "packageLocation": "./.yarn/cache/obuf-npm-1.1.2-8db5fae8dd-aa741387b0.zip/node_modules/obuf/", "packageDependencies": [ - ["obuf", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobuf%2Fdownload%2Fobuf-1.1.2.tgz"] + ["obuf", "npm:1.1.2"] ], "linkType": "HARD", }] ]], ["on-finished", [ - ["npm:2.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-finished-2.3.0.tgz", { - "packageLocation": "./.yarn/cache/on-finished-npm-2.3.0-da535fed17-362e646082.zip/node_modules/on-finished/", + ["npm:2.3.0", { + "packageLocation": "./.yarn/cache/on-finished-npm-2.3.0-4ce92f72c6-362e646082.zip/node_modules/on-finished/", "packageDependencies": [ - ["on-finished", "npm:2.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-finished-2.3.0.tgz"], - ["ee-first", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fee-first%2Fdownload%2Fee-first-1.1.1.tgz"] + ["on-finished", "npm:2.3.0"], + ["ee-first", "npm:1.1.1"] ], "linkType": "HARD", }] ]], ["on-headers", [ - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-headers%2Fdownload%2Fon-headers-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/on-headers-npm-1.0.2-001a5ad58c-51e75c8075.zip/node_modules/on-headers/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/on-headers-npm-1.0.2-e7cd3ea25e-51e75c8075.zip/node_modules/on-headers/", "packageDependencies": [ - ["on-headers", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-headers%2Fdownload%2Fon-headers-1.0.2.tgz"] + ["on-headers", "npm:1.0.2"] ], "linkType": "HARD", }] @@ -10620,11 +10715,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["opn", [ - ["npm:5.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fopn%2Fdownload%2Fopn-5.5.0.tgz", { - "packageLocation": "./.yarn/cache/opn-npm-5.5.0-1f44eaccf4-0ea3b6550f.zip/node_modules/opn/", + ["npm:5.5.0", { + "packageLocation": "./.yarn/cache/opn-npm-5.5.0-9a97e03147-0ea3b6550f.zip/node_modules/opn/", "packageDependencies": [ - ["opn", "npm:5.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fopn%2Fdownload%2Fopn-5.5.0.tgz"], - ["is-wsl", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz"] + ["opn", "npm:5.5.0"], + ["is-wsl", "npm:1.1.0"] ], "linkType": "HARD", }] @@ -10645,11 +10740,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["original", [ - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Foriginal%2Fdownload%2Foriginal-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/original-npm-1.0.2-c274bd9e5d-6918b9d454.zip/node_modules/original/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/original-npm-1.0.2-2250635ba0-6918b9d454.zip/node_modules/original/", "packageDependencies": [ - ["original", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Foriginal%2Fdownload%2Foriginal-1.0.2.tgz"], - ["url-parse", "npm:1.4.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.4.7.tgz"] + ["original", "npm:1.0.2"], + ["url-parse", "npm:1.4.7"] ], "linkType": "HARD", }] @@ -10693,10 +10788,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["p-finally", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-finally%2Fdownload%2Fp-finally-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/p-finally-npm-1.0.0-0bd6687714-01f49b2d9c.zip/node_modules/p-finally/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/p-finally-npm-1.0.0-35fbaa57c6-01f49b2d9c.zip/node_modules/p-finally/", "packageDependencies": [ - ["p-finally", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-finally%2Fdownload%2Fp-finally-1.0.0.tgz"] + ["p-finally", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -10771,11 +10866,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["p-retry", [ - ["npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz", { - "packageLocation": "./.yarn/cache/p-retry-npm-3.0.1-d871c6fe1b-26c888de4e.zip/node_modules/p-retry/", + ["npm:3.0.1", { + "packageLocation": "./.yarn/cache/p-retry-npm-3.0.1-1abc743ac9-26c888de4e.zip/node_modules/p-retry/", "packageDependencies": [ - ["p-retry", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz"], - ["retry", "npm:0.12.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fretry%2Fdownload%2Fretry-0.12.0.tgz"] + ["p-retry", "npm:3.0.1"], + ["retry", "npm:0.12.0"] ], "linkType": "HARD", }] @@ -10839,10 +10934,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["parseurl", [ - ["npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz", { - "packageLocation": "./.yarn/cache/parseurl-npm-1.3.3-93dc3a804c-52c9e86cb5.zip/node_modules/parseurl/", + ["npm:1.3.3", { + "packageLocation": "./.yarn/cache/parseurl-npm-1.3.3-1542397e00-52c9e86cb5.zip/node_modules/parseurl/", "packageDependencies": [ - ["parseurl", "npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz"] + ["parseurl", "npm:1.3.3"] ], "linkType": "HARD", }] @@ -10859,19 +10954,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["pascalcase", [ - ["npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpascalcase%2Fdownload%2Fpascalcase-0.1.1.tgz", { - "packageLocation": "./.yarn/cache/pascalcase-npm-0.1.1-9044796ab3-268a9dbf9c.zip/node_modules/pascalcase/", + ["npm:0.1.1", { + "packageLocation": "./.yarn/cache/pascalcase-npm-0.1.1-d04964fcda-268a9dbf9c.zip/node_modules/pascalcase/", "packageDependencies": [ - ["pascalcase", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpascalcase%2Fdownload%2Fpascalcase-0.1.1.tgz"] + ["pascalcase", "npm:0.1.1"] ], "linkType": "HARD", }] ]], ["path-dirname", [ - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-dirname%2Fdownload%2Fpath-dirname-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/path-dirname-npm-1.0.2-e724ca8701-4af73745fd.zip/node_modules/path-dirname/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/path-dirname-npm-1.0.2-d158cba006-4af73745fd.zip/node_modules/path-dirname/", "packageDependencies": [ - ["path-dirname", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-dirname%2Fdownload%2Fpath-dirname-1.0.2.tgz"] + ["path-dirname", "npm:1.0.2"] ], "linkType": "HARD", }] @@ -10911,10 +11006,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["path-key", [ - ["npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz", { - "packageLocation": "./.yarn/cache/path-key-npm-2.0.1-4e9a561e45-7dc807a2ba.zip/node_modules/path-key/", + ["npm:2.0.1", { + "packageLocation": "./.yarn/cache/path-key-npm-2.0.1-b1a971833d-7dc807a2ba.zip/node_modules/path-key/", "packageDependencies": [ - ["path-key", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz"] + ["path-key", "npm:2.0.1"] ], "linkType": "HARD", }], @@ -10943,10 +11038,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["path-to-regexp", [ - ["npm:0.1.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz", { - "packageLocation": "./.yarn/cache/path-to-regexp-npm-0.1.7-338c0331e7-342fdb0ca4.zip/node_modules/path-to-regexp/", + ["npm:0.1.7", { + "packageLocation": "./.yarn/cache/path-to-regexp-npm-0.1.7-2605347373-342fdb0ca4.zip/node_modules/path-to-regexp/", "packageDependencies": [ - ["path-to-regexp", "npm:0.1.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz"] + ["path-to-regexp", "npm:0.1.7"] ], "linkType": "HARD", }], @@ -11091,13 +11186,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["mkdirp", "npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"] ], "linkType": "HARD", + }], + ["npm:1.0.28", { + "packageLocation": "./.yarn/cache/portfinder-npm-1.0.28-12c37407ab-906dc51482.zip/node_modules/portfinder/", + "packageDependencies": [ + ["portfinder", "npm:1.0.28"], + ["async", "npm:2.6.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync%2Fdownload%2Fasync-2.6.3.tgz"], + ["debug", "virtual:519aa211df00f88350d536fc65ff9dca866994ed77908f2e1bfa12b6d09486d81c83dd55a15e530362e2f397c83916d546e7d0f4dc01c5479d881c426c846f92#npm:3.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz"], + ["mkdirp", "npm:0.5.5"] + ], + "linkType": "HARD", }] ]], ["posix-character-classes", [ - ["npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fposix-character-classes%2Fdownload%2Fposix-character-classes-0.1.1.tgz", { - "packageLocation": "./.yarn/cache/posix-character-classes-npm-0.1.1-0eebf90c33-984f83c2d4.zip/node_modules/posix-character-classes/", + ["npm:0.1.1", { + "packageLocation": "./.yarn/cache/posix-character-classes-npm-0.1.1-3e228a6e15-984f83c2d4.zip/node_modules/posix-character-classes/", "packageDependencies": [ - ["posix-character-classes", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fposix-character-classes%2Fdownload%2Fposix-character-classes-0.1.1.tgz"] + ["posix-character-classes", "npm:0.1.1"] ], "linkType": "HARD", }] @@ -11343,7 +11448,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["postcss", "npm:8.1.4"], ["schema-utils", "npm:3.0.0"], ["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "postcss", @@ -11747,12 +11852,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["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/", + ["npm:2.0.6", { + "packageLocation": "./.yarn/cache/proxy-addr-npm-2.0.6-8fafed6ca5-a7dcfd7025.zip/node_modules/proxy-addr/", "packageDependencies": [ - ["proxy-addr", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fproxy-addr%2Fdownload%2Fproxy-addr-2.0.6.tgz"], - ["forwarded", "npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fforwarded%2Fdownload%2Fforwarded-0.1.2.tgz"], - ["ipaddr.js", "npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fipaddr.js%2Fdownload%2Fipaddr.js-1.9.1.tgz"] + ["proxy-addr", "npm:2.0.6"], + ["forwarded", "npm:0.1.2"], + ["ipaddr.js", "npm:1.9.1"] ], "linkType": "HARD", }] @@ -11787,10 +11892,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["punycode", [ - ["npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.3.2.tgz", { - "packageLocation": "./.yarn/cache/punycode-npm-1.3.2-888aa20550-e67fddacd8.zip/node_modules/punycode/", + ["npm:1.3.2", { + "packageLocation": "./.yarn/cache/punycode-npm-1.3.2-3727a84cea-e67fddacd8.zip/node_modules/punycode/", "packageDependencies": [ - ["punycode", "npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.3.2.tgz"] + ["punycode", "npm:1.3.2"] ], "linkType": "HARD", }], @@ -11810,10 +11915,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["npm:6.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz", { - "packageLocation": "./.yarn/cache/qs-npm-6.7.0-e39ef75ae7-8590470436.zip/node_modules/qs/", + ["npm:6.7.0", { + "packageLocation": "./.yarn/cache/qs-npm-6.7.0-15161a344c-8590470436.zip/node_modules/qs/", "packageDependencies": [ - ["qs", "npm:6.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz"] + ["qs", "npm:6.7.0"] ], "linkType": "HARD", }], @@ -11844,10 +11949,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["querystringify", [ - ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.1.1.tgz", { - "packageLocation": "./.yarn/cache/querystringify-npm-2.1.1-aa64f99700-35301cc744.zip/node_modules/querystringify/", + ["npm:2.2.0", { + "packageLocation": "./.yarn/cache/querystringify-npm-2.2.0-4e77c9f606-6235036be3.zip/node_modules/querystringify/", "packageDependencies": [ - ["querystringify", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.1.1.tgz"] + ["querystringify", "npm:2.2.0"] ], "linkType": "HARD", }] @@ -11872,23 +11977,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["range-parser", [ - ["npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frange-parser%2Fdownload%2Frange-parser-1.2.1.tgz", { - "packageLocation": "./.yarn/cache/range-parser-npm-1.2.1-12bf302196-05074f5b23.zip/node_modules/range-parser/", + ["npm:1.2.1", { + "packageLocation": "./.yarn/cache/range-parser-npm-1.2.1-1a470fa390-05074f5b23.zip/node_modules/range-parser/", "packageDependencies": [ - ["range-parser", "npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frange-parser%2Fdownload%2Frange-parser-1.2.1.tgz"] + ["range-parser", "npm:1.2.1"] ], "linkType": "HARD", }] ]], ["raw-body", [ - ["npm:2.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-body%2Fdownload%2Fraw-body-2.4.0.tgz", { - "packageLocation": "./.yarn/cache/raw-body-npm-2.4.0-de3bb579cd-46dc02f8b4.zip/node_modules/raw-body/", + ["npm:2.4.0", { + "packageLocation": "./.yarn/cache/raw-body-npm-2.4.0-14d9d633af-46dc02f8b4.zip/node_modules/raw-body/", "packageDependencies": [ - ["raw-body", "npm:2.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-body%2Fdownload%2Fraw-body-2.4.0.tgz"], - ["bytes", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz"], - ["http-errors", "npm:1.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz"], - ["iconv-lite", "npm:0.4.24::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz"], - ["unpipe", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funpipe%2Fdownload%2Funpipe-1.0.0.tgz"] + ["raw-body", "npm:2.4.0"], + ["bytes", "npm:3.1.0"], + ["http-errors", "npm:1.7.2"], + ["iconv-lite", "npm:0.4.24"], + ["unpipe", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -12167,6 +12272,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["readable-stream", [ + ["npm:2.3.7", { + "packageLocation": "./.yarn/cache/readable-stream-npm-2.3.7-77b22a9818-6e38265606.zip/node_modules/readable-stream/", + "packageDependencies": [ + ["readable-stream", "npm:2.3.7"], + ["core-util-is", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-util-is%2Fdownload%2Fcore-util-is-1.0.2.tgz"], + ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"], + ["isarray", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz"], + ["process-nextick-args", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess-nextick-args%2Fdownload%2Fprocess-nextick-args-2.0.1.tgz"], + ["safe-buffer", "npm:5.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz"], + ["string_decoder", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz"], + ["util-deprecate", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futil-deprecate%2Fdownload%2Futil-deprecate-1.0.2.tgz"] + ], + "linkType": "HARD", + }], ["npm:2.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz", { "packageLocation": "./.yarn/cache/readable-stream-npm-2.3.7-f79a45df7e-6e38265606.zip/node_modules/readable-stream/", "packageDependencies": [ @@ -12181,6 +12300,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:3.6.0", { + "packageLocation": "./.yarn/cache/readable-stream-npm-3.6.0-23a4a5eb56-f178b1daa8.zip/node_modules/readable-stream/", + "packageDependencies": [ + ["readable-stream", "npm:3.6.0"], + ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"], + ["string_decoder", "npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.3.0.tgz"], + ["util-deprecate", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futil-deprecate%2Fdownload%2Futil-deprecate-1.0.2.tgz"] + ], + "linkType": "HARD", + }], ["npm:3.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", { "packageLocation": "./.yarn/cache/readable-stream-npm-3.6.0-77923e4148-f178b1daa8.zip/node_modules/readable-stream/", "packageDependencies": [ @@ -12193,13 +12322,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["readdirp", [ - ["npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz", { - "packageLocation": "./.yarn/cache/readdirp-npm-2.2.1-0774507b36-00b5209ee5.zip/node_modules/readdirp/", + ["npm:2.2.1", { + "packageLocation": "./.yarn/cache/readdirp-npm-2.2.1-33cb5df2b8-00b5209ee5.zip/node_modules/readdirp/", "packageDependencies": [ - ["readdirp", "npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz"], - ["graceful-fs", "npm:4.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz"], - ["micromatch", "npm:3.1.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz"], - ["readable-stream", "npm:2.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz"] + ["readdirp", "npm:2.2.1"], + ["graceful-fs", "npm:4.2.4"], + ["micromatch", "npm:3.1.10"], + ["readable-stream", "npm:2.3.7"] ], "linkType": "HARD", }], @@ -12284,17 +12413,26 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["regex-not", [ - ["npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz", { - "packageLocation": "./.yarn/cache/regex-not-npm-1.0.2-343d566231-3d6d95b4fd.zip/node_modules/regex-not/", + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/regex-not-npm-1.0.2-06a03c9206-3d6d95b4fd.zip/node_modules/regex-not/", "packageDependencies": [ - ["regex-not", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz"], - ["extend-shallow", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz"], - ["safe-regex", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-regex%2Fdownload%2Fsafe-regex-1.1.0.tgz"] + ["regex-not", "npm:1.0.2"], + ["extend-shallow", "npm:3.0.2"], + ["safe-regex", "npm:1.1.0"] ], "linkType": "HARD", }] ]], ["regexp.prototype.flags", [ + ["npm:1.3.0", { + "packageLocation": "./.yarn/cache/regexp.prototype.flags-npm-1.3.0-656dcc7c37-468e19b3ae.zip/node_modules/regexp.prototype.flags/", + "packageDependencies": [ + ["regexp.prototype.flags", "npm:1.3.0"], + ["define-properties", "npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-properties%2Fdownload%2Fdefine-properties-1.1.3.tgz"], + ["es-abstract", "npm:1.17.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz"] + ], + "linkType": "HARD", + }], ["npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz", { "packageLocation": "./.yarn/cache/regexp.prototype.flags-npm-1.3.0-cde70d964a-468e19b3ae.zip/node_modules/regexp.prototype.flags/", "packageDependencies": [ @@ -12371,10 +12509,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["remove-trailing-separator", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fremove-trailing-separator%2Fdownload%2Fremove-trailing-separator-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/remove-trailing-separator-npm-1.1.0-03ba99b196-17dadf3d1f.zip/node_modules/remove-trailing-separator/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/remove-trailing-separator-npm-1.1.0-16d7231316-17dadf3d1f.zip/node_modules/remove-trailing-separator/", "packageDependencies": [ - ["remove-trailing-separator", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fremove-trailing-separator%2Fdownload%2Fremove-trailing-separator-1.1.0.tgz"] + ["remove-trailing-separator", "npm:1.1.0"] ], "linkType": "HARD", }] @@ -12394,10 +12532,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["repeat-element", [ - ["npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-element%2Fdownload%2Frepeat-element-1.1.3.tgz", { - "packageLocation": "./.yarn/cache/repeat-element-npm-1.1.3-2294823d44-6a59b879ef.zip/node_modules/repeat-element/", + ["npm:1.1.3", { + "packageLocation": "./.yarn/cache/repeat-element-npm-1.1.3-a9dee226b4-6a59b879ef.zip/node_modules/repeat-element/", "packageDependencies": [ - ["repeat-element", "npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-element%2Fdownload%2Frepeat-element-1.1.3.tgz"] + ["repeat-element", "npm:1.1.3"] ], "linkType": "HARD", }] @@ -12441,19 +12579,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["require-directory", [ - ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-directory%2Fdownload%2Frequire-directory-2.1.1.tgz", { - "packageLocation": "./.yarn/cache/require-directory-npm-2.1.1-967578aa8b-f495d02d89.zip/node_modules/require-directory/", + ["npm:2.1.1", { + "packageLocation": "./.yarn/cache/require-directory-npm-2.1.1-8608aee50b-f495d02d89.zip/node_modules/require-directory/", "packageDependencies": [ - ["require-directory", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-directory%2Fdownload%2Frequire-directory-2.1.1.tgz"] + ["require-directory", "npm:2.1.1"] ], "linkType": "HARD", }] ]], ["require-main-filename", [ - ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-2.0.0.tgz", { - "packageLocation": "./.yarn/cache/require-main-filename-npm-2.0.0-bbc6aebacb-8d3633149a.zip/node_modules/require-main-filename/", + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/require-main-filename-npm-2.0.0-03eef65c84-8d3633149a.zip/node_modules/require-main-filename/", "packageDependencies": [ - ["require-main-filename", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-2.0.0.tgz"] + ["require-main-filename", "npm:2.0.0"] ], "linkType": "HARD", }] @@ -12496,11 +12634,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["resolve-cwd", [ - ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-cwd%2Fdownload%2Fresolve-cwd-2.0.0.tgz", { - "packageLocation": "./.yarn/cache/resolve-cwd-npm-2.0.0-0868e284c1-f5d5526526.zip/node_modules/resolve-cwd/", + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/resolve-cwd-npm-2.0.0-cce7da6fd4-f5d5526526.zip/node_modules/resolve-cwd/", "packageDependencies": [ - ["resolve-cwd", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-cwd%2Fdownload%2Fresolve-cwd-2.0.0.tgz"], - ["resolve-from", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-from%2Fdownload%2Fresolve-from-3.0.0.tgz"] + ["resolve-cwd", "npm:2.0.0"], + ["resolve-from", "npm:3.0.0"] ], "linkType": "HARD", }], @@ -12514,10 +12652,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["resolve-from", [ - ["npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-from%2Fdownload%2Fresolve-from-3.0.0.tgz", { - "packageLocation": "./.yarn/cache/resolve-from-npm-3.0.0-70e59f6eb1-dc0c83b3b8.zip/node_modules/resolve-from/", + ["npm:3.0.0", { + "packageLocation": "./.yarn/cache/resolve-from-npm-3.0.0-0bff35697e-dc0c83b3b8.zip/node_modules/resolve-from/", "packageDependencies": [ - ["resolve-from", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-from%2Fdownload%2Fresolve-from-3.0.0.tgz"] + ["resolve-from", "npm:3.0.0"] ], "linkType": "HARD", }], @@ -12546,10 +12684,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["resolve-url", [ - ["npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz", { - "packageLocation": "./.yarn/cache/resolve-url-npm-0.2.1-92942fe0d1-9e1cd0028d.zip/node_modules/resolve-url/", + ["npm:0.2.1", { + "packageLocation": "./.yarn/cache/resolve-url-npm-0.2.1-39edb8f908-9e1cd0028d.zip/node_modules/resolve-url/", "packageDependencies": [ - ["resolve-url", "npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz"] + ["resolve-url", "npm:0.2.1"] ], "linkType": "HARD", }] @@ -12565,19 +12703,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ret", [ - ["npm:0.1.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz", { - "packageLocation": "./.yarn/cache/ret-npm-0.1.15-c9ad274c5c-749c2fcae7.zip/node_modules/ret/", + ["npm:0.1.15", { + "packageLocation": "./.yarn/cache/ret-npm-0.1.15-0d3c19de76-749c2fcae7.zip/node_modules/ret/", "packageDependencies": [ - ["ret", "npm:0.1.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz"] + ["ret", "npm:0.1.15"] ], "linkType": "HARD", }] ]], ["retry", [ - ["npm:0.12.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fretry%2Fdownload%2Fretry-0.12.0.tgz", { - "packageLocation": "./.yarn/cache/retry-npm-0.12.0-c886249d25-51f2fddddb.zip/node_modules/retry/", + ["npm:0.12.0", { + "packageLocation": "./.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-51f2fddddb.zip/node_modules/retry/", "packageDependencies": [ - ["retry", "npm:0.12.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fretry%2Fdownload%2Fretry-0.12.0.tgz"] + ["retry", "npm:0.12.0"] ], "linkType": "HARD", }] @@ -12694,6 +12832,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["safe-buffer", [ + ["npm:5.1.2", { + "packageLocation": "./.yarn/cache/safe-buffer-npm-5.1.2-c27fedf6c4-2708587c1b.zip/node_modules/safe-buffer/", + "packageDependencies": [ + ["safe-buffer", "npm:5.1.2"] + ], + "linkType": "HARD", + }], ["npm:5.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz", { "packageLocation": "./.yarn/cache/safe-buffer-npm-5.1.2-cc2f76509a-2708587c1b.zip/node_modules/safe-buffer/", "packageDependencies": [ @@ -12710,16 +12855,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["safe-regex", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-regex%2Fdownload%2Fsafe-regex-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/safe-regex-npm-1.1.0-8792dadac4-c355e3163f.zip/node_modules/safe-regex/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/safe-regex-npm-1.1.0-a908e8515c-c355e3163f.zip/node_modules/safe-regex/", "packageDependencies": [ - ["safe-regex", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-regex%2Fdownload%2Fsafe-regex-1.1.0.tgz"], - ["ret", "npm:0.1.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz"] + ["safe-regex", "npm:1.1.0"], + ["ret", "npm:0.1.15"] ], "linkType": "HARD", }] ]], ["safer-buffer", [ + ["npm:2.1.2", { + "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-549ba83f5b.zip/node_modules/safer-buffer/", + "packageDependencies": [ + ["safer-buffer", "npm:2.1.2"] + ], + "linkType": "HARD", + }], ["npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz", { "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-c3c575408e-549ba83f5b.zip/node_modules/safer-buffer/", "packageDependencies": [ @@ -12729,10 +12881,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["sass", [ - ["npm:1.27.0", { - "packageLocation": "./.yarn/cache/sass-npm-1.27.0-52525b4c60-db4342b13b.zip/node_modules/sass/", + ["npm:1.28.0", { + "packageLocation": "./.yarn/cache/sass-npm-1.28.0-c548067d9d-b4d718512e.zip/node_modules/sass/", "packageDependencies": [ - ["sass", "npm:1.27.0"], + ["sass", "npm:1.28.0"], ["chokidar", "npm:3.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.1.tgz"] ], "linkType": "HARD", @@ -12748,10 +12900,10 @@ 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"], ["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], - ["sass", "npm:1.27.0"], + ["sass", "npm:1.28.0"], ["schema-utils", "npm:3.0.0"], ["semver", "npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "fibers", @@ -12774,13 +12926,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["schema-utils", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/schema-utils-npm-1.0.0-5a053ed7a5-d2f753e7a1.zip/node_modules/schema-utils/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/schema-utils-npm-1.0.0-2b49db17d1-d2f753e7a1.zip/node_modules/schema-utils/", "packageDependencies": [ - ["schema-utils", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz"], - ["ajv", "npm:6.12.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz"], - ["ajv-errors", "virtual:5a053ed7a5aaf24feb20a5f221f0cf99cd71c398eae5cd964b19ff1321e1f4b929d5643e1ddc2a0e5bf7584bf5da2ecbf8ea504506a83c90ac358cd78a8d6ec8#npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz"], - ["ajv-keywords", "virtual:4bd159eb2fa57b708080b8da339463ac6da692420f6c1ba3dc93d2b8a9f21028d40894d9078674d3a7cf4e07a29b8924f745c98216701bf12c01bb0faa01f36b#npm:3.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.1.tgz"] + ["schema-utils", "npm:1.0.0"], + ["ajv", "npm:6.12.6"], + ["ajv-errors", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:1.0.1"], + ["ajv-keywords", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2"] ], "linkType": "HARD", }], @@ -12815,20 +12967,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["select-hose", [ - ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselect-hose%2Fdownload%2Fselect-hose-2.0.0.tgz", { - "packageLocation": "./.yarn/cache/select-hose-npm-2.0.0-ee6e100944-4da089c022.zip/node_modules/select-hose/", + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/select-hose-npm-2.0.0-8ce63adb52-4da089c022.zip/node_modules/select-hose/", "packageDependencies": [ - ["select-hose", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselect-hose%2Fdownload%2Fselect-hose-2.0.0.tgz"] + ["select-hose", "npm:2.0.0"] ], "linkType": "HARD", }] ]], ["selfsigned", [ - ["npm:1.10.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz", { - "packageLocation": "./.yarn/cache/selfsigned-npm-1.10.7-4928d51363-ef53d4801c.zip/node_modules/selfsigned/", + ["npm:1.10.8", { + "packageLocation": "./.yarn/cache/selfsigned-npm-1.10.8-c48e1ebfb2-a382ec2af9.zip/node_modules/selfsigned/", "packageDependencies": [ - ["selfsigned", "npm:1.10.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz"], - ["node-forge", "npm:0.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz"] + ["selfsigned", "npm:1.10.8"], + ["node-forge", "npm:0.10.0"] ], "linkType": "HARD", }] @@ -12841,6 +12993,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:6.3.0", { + "packageLocation": "./.yarn/cache/semver-npm-6.3.0-b3eace8bfd-f0d155c06a.zip/node_modules/semver/", + "packageDependencies": [ + ["semver", "npm:6.3.0"] + ], + "linkType": "HARD", + }], ["npm:6.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", { "packageLocation": "./.yarn/cache/semver-npm-6.3.0-9fd285082e-f0d155c06a.zip/node_modules/semver/", "packageDependencies": [ @@ -12864,23 +13023,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["send", [ - ["npm:0.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsend%2Fdownload%2Fsend-0.17.1.tgz", { - "packageLocation": "./.yarn/cache/send-npm-0.17.1-a7478e86fb-58e4ab2e07.zip/node_modules/send/", + ["npm:0.17.1", { + "packageLocation": "./.yarn/cache/send-npm-0.17.1-aad5512679-58e4ab2e07.zip/node_modules/send/", "packageDependencies": [ - ["send", "npm:0.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsend%2Fdownload%2Fsend-0.17.1.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["depd", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz"], - ["destroy", "npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdestroy%2Fdownload%2Fdestroy-1.0.4.tgz"], - ["encodeurl", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fencodeurl%2Fdownload%2Fencodeurl-1.0.2.tgz"], - ["escape-html", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz"], - ["etag", "npm:1.8.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fetag%2Fdownload%2Fetag-1.8.1.tgz"], - ["fresh", "npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffresh%2Fdownload%2Ffresh-0.5.2.tgz"], - ["http-errors", "npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.3.tgz"], - ["mime", "npm:1.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz"], - ["ms", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz"], - ["on-finished", "npm:2.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-finished-2.3.0.tgz"], - ["range-parser", "npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frange-parser%2Fdownload%2Frange-parser-1.2.1.tgz"], - ["statuses", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz"] + ["send", "npm:0.17.1"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["depd", "npm:1.1.2"], + ["destroy", "npm:1.0.4"], + ["encodeurl", "npm:1.0.2"], + ["escape-html", "npm:1.0.3"], + ["etag", "npm:1.8.1"], + ["fresh", "npm:0.5.2"], + ["http-errors", "npm:1.7.3"], + ["mime", "npm:1.6.0"], + ["ms", "npm:2.1.1"], + ["on-finished", "npm:2.3.0"], + ["range-parser", "npm:1.2.1"], + ["statuses", "npm:1.5.0"] ], "linkType": "HARD", }] @@ -12904,35 +13063,42 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["serve-index", [ - ["npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-index%2Fdownload%2Fserve-index-1.9.1.tgz", { - "packageLocation": "./.yarn/cache/serve-index-npm-1.9.1-b6000b5ebc-035c0b7d5f.zip/node_modules/serve-index/", - "packageDependencies": [ - ["serve-index", "npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-index%2Fdownload%2Fserve-index-1.9.1.tgz"], - ["accepts", "npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faccepts%2Fdownload%2Faccepts-1.3.7.tgz"], - ["batch", "npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbatch%2Fdownload%2Fbatch-0.6.1.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["escape-html", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz"], - ["http-errors", "npm:1.6.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz"], - ["mime-types", "npm:2.1.27::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz"], - ["parseurl", "npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz"] + ["npm:1.9.1", { + "packageLocation": "./.yarn/cache/serve-index-npm-1.9.1-4927052df8-035c0b7d5f.zip/node_modules/serve-index/", + "packageDependencies": [ + ["serve-index", "npm:1.9.1"], + ["accepts", "npm:1.3.7"], + ["batch", "npm:0.6.1"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["escape-html", "npm:1.0.3"], + ["http-errors", "npm:1.6.3"], + ["mime-types", "npm:2.1.27"], + ["parseurl", "npm:1.3.3"] ], "linkType": "HARD", }] ]], ["serve-static", [ - ["npm:1.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-static%2Fdownload%2Fserve-static-1.14.1.tgz", { - "packageLocation": "./.yarn/cache/serve-static-npm-1.14.1-75acf87f3e-97e8c94ec0.zip/node_modules/serve-static/", + ["npm:1.14.1", { + "packageLocation": "./.yarn/cache/serve-static-npm-1.14.1-a7afb1d3b3-97e8c94ec0.zip/node_modules/serve-static/", "packageDependencies": [ - ["serve-static", "npm:1.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-static%2Fdownload%2Fserve-static-1.14.1.tgz"], - ["encodeurl", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fencodeurl%2Fdownload%2Fencodeurl-1.0.2.tgz"], - ["escape-html", "npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz"], - ["parseurl", "npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz"], - ["send", "npm:0.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsend%2Fdownload%2Fsend-0.17.1.tgz"] + ["serve-static", "npm:1.14.1"], + ["encodeurl", "npm:1.0.2"], + ["escape-html", "npm:1.0.3"], + ["parseurl", "npm:1.3.3"], + ["send", "npm:0.17.1"] ], "linkType": "HARD", }] ]], ["set-blocking", [ + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/set-blocking-npm-2.0.0-49e2cffa24-0ac2403b0c.zip/node_modules/set-blocking/", + "packageDependencies": [ + ["set-blocking", "npm:2.0.0"] + ], + "linkType": "HARD", + }], ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-blocking%2Fdownload%2Fset-blocking-2.0.0.tgz", { "packageLocation": "./.yarn/cache/set-blocking-npm-2.0.0-308198d0a7-0ac2403b0c.zip/node_modules/set-blocking/", "packageDependencies": [ @@ -12942,30 +13108,30 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["set-value", [ - ["npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz", { - "packageLocation": "./.yarn/cache/set-value-npm-2.0.1-c520aa107e-a97a99a00c.zip/node_modules/set-value/", + ["npm:2.0.1", { + "packageLocation": "./.yarn/cache/set-value-npm-2.0.1-35da5f8180-a97a99a00c.zip/node_modules/set-value/", "packageDependencies": [ - ["set-value", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz"], - ["extend-shallow", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz"], - ["is-extendable", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-0.1.1.tgz"], - ["is-plain-object", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz"], - ["split-string", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit-string%2Fdownload%2Fsplit-string-3.1.0.tgz"] + ["set-value", "npm:2.0.1"], + ["extend-shallow", "npm:2.0.1"], + ["is-extendable", "npm:0.1.1"], + ["is-plain-object", "npm:2.0.4"], + ["split-string", "npm:3.1.0"] ], "linkType": "HARD", }] ]], ["setprototypeof", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/setprototypeof-npm-1.1.0-432a7a7143-8a3fb2ff4b.zip/node_modules/setprototypeof/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/setprototypeof-npm-1.1.0-7d8becb375-8a3fb2ff4b.zip/node_modules/setprototypeof/", "packageDependencies": [ - ["setprototypeof", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.0.tgz"] + ["setprototypeof", "npm:1.1.0"] ], "linkType": "HARD", }], - ["npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz", { - "packageLocation": "./.yarn/cache/setprototypeof-npm-1.1.1-e82c3bc38e-0efed4da5a.zip/node_modules/setprototypeof/", + ["npm:1.1.1", { + "packageLocation": "./.yarn/cache/setprototypeof-npm-1.1.1-706b6318ec-0efed4da5a.zip/node_modules/setprototypeof/", "packageDependencies": [ - ["setprototypeof", "npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz"] + ["setprototypeof", "npm:1.1.1"] ], "linkType": "HARD", }] @@ -12980,11 +13146,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["shebang-command", [ - ["npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz", { - "packageLocation": "./.yarn/cache/shebang-command-npm-1.2.0-d9ffeb9731-2a1e0092a6.zip/node_modules/shebang-command/", + ["npm:1.2.0", { + "packageLocation": "./.yarn/cache/shebang-command-npm-1.2.0-8990ba5d1d-2a1e0092a6.zip/node_modules/shebang-command/", "packageDependencies": [ - ["shebang-command", "npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz"], - ["shebang-regex", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz"] + ["shebang-command", "npm:1.2.0"], + ["shebang-regex", "npm:1.0.0"] ], "linkType": "HARD", }], @@ -12998,10 +13164,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["shebang-regex", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/shebang-regex-npm-1.0.0-dcb222eeca-cf1a41cb09.zip/node_modules/shebang-regex/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/shebang-regex-npm-1.0.0-c3612b74e9-cf1a41cb09.zip/node_modules/shebang-regex/", "packageDependencies": [ - ["shebang-regex", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz"] + ["shebang-regex", "npm:1.0.0"] ], "linkType": "HARD", }], @@ -13062,67 +13228,67 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["snapdragon", [ - ["npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz", { - "packageLocation": "./.yarn/cache/snapdragon-npm-0.8.2-540483f371-c30b63a732.zip/node_modules/snapdragon/", + ["npm:0.8.2", { + "packageLocation": "./.yarn/cache/snapdragon-npm-0.8.2-2bcc47d217-c30b63a732.zip/node_modules/snapdragon/", "packageDependencies": [ - ["snapdragon", "npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz"], - ["base", "npm:0.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbase%2Fdownload%2Fbase-0.11.2.tgz"], - ["debug", "virtual:8c8a8763bc4d11063ade310ae62bd0668563a9ee3e13ffce549c878905c5cfe13a5d3cbcb6ca33a1c75125112870784d9f483ab0575378e363fa1033ba794f97#npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"], - ["define-property", "npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz"], - ["extend-shallow", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz"], - ["map-cache", "npm:0.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-cache%2Fdownload%2Fmap-cache-0.2.2.tgz"], - ["source-map", "npm:0.5.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz"], - ["source-map-resolve", "npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz"], - ["use", "npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuse%2Fdownload%2Fuse-3.1.1.tgz"] + ["snapdragon", "npm:0.8.2"], + ["base", "npm:0.11.2"], + ["debug", "virtual:2bcc47d217f870e3d52f0e55493dc34fd3da852877f7db32fa2940cc320151746026495daf6a34a974488cf5a949d93be1e2dc1ffba036faf081a9b15fcd2252#npm:2.6.9"], + ["define-property", "npm:0.2.5"], + ["extend-shallow", "npm:2.0.1"], + ["map-cache", "npm:0.2.2"], + ["source-map", "npm:0.5.7"], + ["source-map-resolve", "npm:0.5.3"], + ["use", "npm:3.1.1"] ], "linkType": "HARD", }] ]], ["snapdragon-node", [ - ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-node%2Fdownload%2Fsnapdragon-node-2.1.1.tgz", { - "packageLocation": "./.yarn/cache/snapdragon-node-npm-2.1.1-029cc18e24-75918b0d60.zip/node_modules/snapdragon-node/", + ["npm:2.1.1", { + "packageLocation": "./.yarn/cache/snapdragon-node-npm-2.1.1-78bc70e8e2-75918b0d60.zip/node_modules/snapdragon-node/", "packageDependencies": [ - ["snapdragon-node", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-node%2Fdownload%2Fsnapdragon-node-2.1.1.tgz"], - ["define-property", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-1.0.0.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"], - ["snapdragon-util", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-util%2Fdownload%2Fsnapdragon-util-3.0.1.tgz"] + ["snapdragon-node", "npm:2.1.1"], + ["define-property", "npm:1.0.0"], + ["isobject", "npm:3.0.1"], + ["snapdragon-util", "npm:3.0.1"] ], "linkType": "HARD", }] ]], ["snapdragon-util", [ - ["npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-util%2Fdownload%2Fsnapdragon-util-3.0.1.tgz", { - "packageLocation": "./.yarn/cache/snapdragon-util-npm-3.0.1-f44f09ca46-d1a7ab4171.zip/node_modules/snapdragon-util/", + ["npm:3.0.1", { + "packageLocation": "./.yarn/cache/snapdragon-util-npm-3.0.1-36b5a7829d-d1a7ab4171.zip/node_modules/snapdragon-util/", "packageDependencies": [ - ["snapdragon-util", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-util%2Fdownload%2Fsnapdragon-util-3.0.1.tgz"], - ["kind-of", "npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz"] + ["snapdragon-util", "npm:3.0.1"], + ["kind-of", "npm:3.2.2"] ], "linkType": "HARD", }] ]], ["sockjs", [ - ["npm:0.3.20::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs%2Fdownload%2Fsockjs-0.3.20.tgz", { - "packageLocation": "./.yarn/cache/sockjs-npm-0.3.20-5145b12ae5-9a8596f800.zip/node_modules/sockjs/", + ["npm:0.3.20", { + "packageLocation": "./.yarn/cache/sockjs-npm-0.3.20-a457543ecd-9a8596f800.zip/node_modules/sockjs/", "packageDependencies": [ - ["sockjs", "npm:0.3.20::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs%2Fdownload%2Fsockjs-0.3.20.tgz"], - ["faye-websocket", "npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.10.0.tgz"], - ["uuid", "npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz"], - ["websocket-driver", "npm:0.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz"] + ["sockjs", "npm:0.3.20"], + ["faye-websocket", "npm:0.10.0"], + ["uuid", "npm:3.4.0"], + ["websocket-driver", "npm:0.6.5"] ], "linkType": "HARD", }] ]], ["sockjs-client", [ - ["npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz", { - "packageLocation": "./.yarn/cache/sockjs-client-npm-1.4.0-ab2730346e-efe7e7bcf2.zip/node_modules/sockjs-client/", + ["npm:1.4.0", { + "packageLocation": "./.yarn/cache/sockjs-client-npm-1.4.0-deb308a9b4-efe7e7bcf2.zip/node_modules/sockjs-client/", "packageDependencies": [ - ["sockjs-client", "npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz"], - ["debug", "virtual:519aa211df00f88350d536fc65ff9dca866994ed77908f2e1bfa12b6d09486d81c83dd55a15e530362e2f397c83916d546e7d0f4dc01c5479d881c426c846f92#npm:3.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz"], - ["eventsource", "npm:1.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.0.7.tgz"], - ["faye-websocket", "npm:0.11.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.3.tgz"], + ["sockjs-client", "npm:1.4.0"], + ["debug", "virtual:deb308a9b4dd1e4d8bbd4077e1beb407951f3f68fa3d27dd3194117c6ea80ff3fa065e80ab574b5f654e00aa2494849171aff8a9f3668c1deca42eef9026a893#npm:3.2.6"], + ["eventsource", "npm:1.0.7"], + ["faye-websocket", "npm:0.11.3"], ["inherits", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz"], - ["json3", "npm:3.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson3%2Fdownload%2Fjson3-3.3.3.tgz"], - ["url-parse", "npm:1.4.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.4.7.tgz"] + ["json3", "npm:3.3.3"], + ["url-parse", "npm:1.4.7"] ], "linkType": "HARD", }] @@ -13144,6 +13310,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["source-map", [ + ["npm:0.5.7", { + "packageLocation": "./.yarn/cache/source-map-npm-0.5.7-7c3f035429-737face965.zip/node_modules/source-map/", + "packageDependencies": [ + ["source-map", "npm:0.5.7"] + ], + "linkType": "HARD", + }], ["npm:0.5.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz", { "packageLocation": "./.yarn/cache/source-map-npm-0.5.7-9cd4d17475-737face965.zip/node_modules/source-map/", "packageDependencies": [ @@ -13174,15 +13347,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["source-map-resolve", [ - ["npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz", { - "packageLocation": "./.yarn/cache/source-map-resolve-npm-0.5.3-93f99dc7ea-042ad0c0ba.zip/node_modules/source-map-resolve/", + ["npm:0.5.3", { + "packageLocation": "./.yarn/cache/source-map-resolve-npm-0.5.3-6502ae65ba-042ad0c0ba.zip/node_modules/source-map-resolve/", "packageDependencies": [ - ["source-map-resolve", "npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz"], - ["atob", "npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fatob%2Fdownload%2Fatob-2.1.2.tgz"], - ["decode-uri-component", "npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecode-uri-component%2Fdownload%2Fdecode-uri-component-0.2.0.tgz"], - ["resolve-url", "npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz"], + ["source-map-resolve", "npm:0.5.3"], + ["atob", "npm:2.1.2"], + ["decode-uri-component", "npm:0.2.0"], + ["resolve-url", "npm:0.2.1"], ["source-map-url", "npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.0.tgz"], - ["urix", "npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furix%2Fdownload%2Furix-0.1.0.tgz"] + ["urix", "npm:0.1.0"] ], "linkType": "HARD", }] @@ -13266,40 +13439,40 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["spdy", [ - ["npm:4.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz", { - "packageLocation": "./.yarn/cache/spdy-npm-4.0.2-c75dcd93ce-388d39324d.zip/node_modules/spdy/", + ["npm:4.0.2", { + "packageLocation": "./.yarn/cache/spdy-npm-4.0.2-7e5782a993-388d39324d.zip/node_modules/spdy/", "packageDependencies": [ - ["spdy", "npm:4.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz"], + ["spdy", "npm:4.0.2"], ["debug", "virtual:69ebf4b2f2a6ae92ba722666165dbb0b38081562997e675c019863f51052c6c7613726981d33d68737b81749f01c997e75770a7d53fb52cebaef995c113f82ed#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"], - ["handle-thing", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandle-thing%2Fdownload%2Fhandle-thing-2.0.1.tgz"], - ["http-deceiver", "npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-deceiver%2Fdownload%2Fhttp-deceiver-1.2.7.tgz"], - ["select-hose", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselect-hose%2Fdownload%2Fselect-hose-2.0.0.tgz"], - ["spdy-transport", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy-transport%2Fdownload%2Fspdy-transport-3.0.0.tgz"] + ["handle-thing", "npm:2.0.1"], + ["http-deceiver", "npm:1.2.7"], + ["select-hose", "npm:2.0.0"], + ["spdy-transport", "npm:3.0.0"] ], "linkType": "HARD", }] ]], ["spdy-transport", [ - ["npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy-transport%2Fdownload%2Fspdy-transport-3.0.0.tgz", { - "packageLocation": "./.yarn/cache/spdy-transport-npm-3.0.0-8b3b071693-e717ce9d76.zip/node_modules/spdy-transport/", + ["npm:3.0.0", { + "packageLocation": "./.yarn/cache/spdy-transport-npm-3.0.0-9f4f73f332-e717ce9d76.zip/node_modules/spdy-transport/", "packageDependencies": [ - ["spdy-transport", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy-transport%2Fdownload%2Fspdy-transport-3.0.0.tgz"], + ["spdy-transport", "npm:3.0.0"], ["debug", "virtual:69ebf4b2f2a6ae92ba722666165dbb0b38081562997e675c019863f51052c6c7613726981d33d68737b81749f01c997e75770a7d53fb52cebaef995c113f82ed#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"], - ["detect-node", "npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetect-node%2Fdownload%2Fdetect-node-2.0.4.tgz"], - ["hpack.js", "npm:2.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhpack.js%2Fdownload%2Fhpack.js-2.1.6.tgz"], - ["obuf", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobuf%2Fdownload%2Fobuf-1.1.2.tgz"], - ["readable-stream", "npm:3.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz"], - ["wbuf", "npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwbuf%2Fdownload%2Fwbuf-1.7.3.tgz"] + ["detect-node", "npm:2.0.4"], + ["hpack.js", "npm:2.1.6"], + ["obuf", "npm:1.1.2"], + ["readable-stream", "npm:3.6.0"], + ["wbuf", "npm:1.7.3"] ], "linkType": "HARD", }] ]], ["split-string", [ - ["npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit-string%2Fdownload%2Fsplit-string-3.1.0.tgz", { - "packageLocation": "./.yarn/cache/split-string-npm-3.1.0-56e463aa47-9b610d1509.zip/node_modules/split-string/", + ["npm:3.1.0", { + "packageLocation": "./.yarn/cache/split-string-npm-3.1.0-df5d83450e-9b610d1509.zip/node_modules/split-string/", "packageDependencies": [ - ["split-string", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit-string%2Fdownload%2Fsplit-string-3.1.0.tgz"], - ["extend-shallow", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz"] + ["split-string", "npm:3.1.0"], + ["extend-shallow", "npm:3.0.2"] ], "linkType": "HARD", }] @@ -13351,21 +13524,21 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["static-extend", [ - ["npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatic-extend%2Fdownload%2Fstatic-extend-0.1.2.tgz", { - "packageLocation": "./.yarn/cache/static-extend-npm-0.1.2-a36503dc55-c42052c352.zip/node_modules/static-extend/", + ["npm:0.1.2", { + "packageLocation": "./.yarn/cache/static-extend-npm-0.1.2-2720ee6882-c42052c352.zip/node_modules/static-extend/", "packageDependencies": [ - ["static-extend", "npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatic-extend%2Fdownload%2Fstatic-extend-0.1.2.tgz"], - ["define-property", "npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz"], - ["object-copy", "npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-copy%2Fdownload%2Fobject-copy-0.1.0.tgz"] + ["static-extend", "npm:0.1.2"], + ["define-property", "npm:0.2.5"], + ["object-copy", "npm:0.1.0"] ], "linkType": "HARD", }] ]], ["statuses", [ - ["npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", { - "packageLocation": "./.yarn/cache/statuses-npm-1.5.0-d5df314c0d-57735269bf.zip/node_modules/statuses/", + ["npm:1.5.0", { + "packageLocation": "./.yarn/cache/statuses-npm-1.5.0-f88f91b2e9-57735269bf.zip/node_modules/statuses/", "packageDependencies": [ - ["statuses", "npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz"] + ["statuses", "npm:1.5.0"] ], "linkType": "HARD", }] @@ -13412,6 +13585,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:3.1.0", { + "packageLocation": "./.yarn/cache/string-width-npm-3.1.0-e031bfa4e0-54c5d1842d.zip/node_modules/string-width/", + "packageDependencies": [ + ["string-width", "npm:3.1.0"], + ["emoji-regex", "npm:7.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz"], + ["is-fullwidth-code-point", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-2.0.0.tgz"], + ["strip-ansi", "npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz"] + ], + "linkType": "HARD", + }], ["npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", { "packageLocation": "./.yarn/cache/string-width-npm-3.1.0-876c30817a-54c5d1842d.zip/node_modules/string-width/", "packageDependencies": [ @@ -13499,6 +13682,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:5.2.0", { + "packageLocation": "./.yarn/cache/strip-ansi-npm-5.2.0-275214c316-44a0d0d354.zip/node_modules/strip-ansi/", + "packageDependencies": [ + ["strip-ansi", "npm:5.2.0"], + ["ansi-regex", "npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz"] + ], + "linkType": "HARD", + }], ["npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", { "packageLocation": "./.yarn/cache/strip-ansi-npm-5.2.0-3a9da5dcd0-44a0d0d354.zip/node_modules/strip-ansi/", "packageDependencies": [ @@ -13537,10 +13728,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["strip-eof", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-eof%2Fdownload%2Fstrip-eof-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/strip-eof-npm-1.0.0-c1e0ee733b-905cd8718a.zip/node_modules/strip-eof/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/strip-eof-npm-1.0.0-d82eaf947c-905cd8718a.zip/node_modules/strip-eof/", "packageDependencies": [ - ["strip-eof", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-eof%2Fdownload%2Fstrip-eof-1.0.0.tgz"] + ["strip-eof", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -13577,7 +13768,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0"], ["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:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "webpack" @@ -13741,17 +13932,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["terser-webpack-plugin", [ - ["virtual:3d397640c5f0b4b3de718c05931a789ea9e8a462d5fe086e49019e71e5c46ec377c4b2afd31a8718b532f901d4c8fd3aa701b59eb4eee1c89da6eddea9e2f48f#npm:5.0.1", { - "packageLocation": "./.yarn/$$virtual/terser-webpack-plugin-virtual-7ef3fbaf5a/0/cache/terser-webpack-plugin-npm-5.0.1-e2259a3f81-23dfddfcba.zip/node_modules/terser-webpack-plugin/", + ["virtual:84c70b8a5bbb6d28f1f74b97ec63c1bc3a49645eb49a606b219ac8b721869290bd4f4b5609e7a0031e0fb00db992286c6b9184d502dbaa6e08165378ff8628f1#npm:5.0.3", { + "packageLocation": "./.yarn/$$virtual/terser-webpack-plugin-virtual-0f59b04210/0/cache/terser-webpack-plugin-npm-5.0.3-df7af3661a-e71ae79f55.zip/node_modules/terser-webpack-plugin/", "packageDependencies": [ - ["terser-webpack-plugin", "virtual:3d397640c5f0b4b3de718c05931a789ea9e8a462d5fe086e49019e71e5c46ec377c4b2afd31a8718b532f901d4c8fd3aa701b59eb4eee1c89da6eddea9e2f48f#npm:5.0.1"], + ["terser-webpack-plugin", "virtual:84c70b8a5bbb6d28f1f74b97ec63c1bc3a49645eb49a606b219ac8b721869290bd4f4b5609e7a0031e0fb00db992286c6b9184d502dbaa6e08165378ff8628f1#npm:5.0.3"], ["jest-worker", "npm:26.6.1"], ["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:3.0.0"], ["serialize-javascript", "npm:5.0.1"], ["source-map", "npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz"], ["terser", "npm:5.3.8"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "webpack" @@ -13769,10 +13960,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["thunky", [ - ["npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fthunky%2Fdownload%2Fthunky-1.1.0.tgz", { - "packageLocation": "./.yarn/cache/thunky-npm-1.1.0-2e03df1212-eceb856b64.zip/node_modules/thunky/", + ["npm:1.1.0", { + "packageLocation": "./.yarn/cache/thunky-npm-1.1.0-2d25531f44-eceb856b64.zip/node_modules/thunky/", "packageDependencies": [ - ["thunky", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fthunky%2Fdownload%2Fthunky-1.1.0.tgz"] + ["thunky", "npm:1.1.0"] ], "linkType": "HARD", }] @@ -13792,11 +13983,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@babel/preset-react", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@babel/preset-typescript", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:7.12.1"], ["@pmmmwh/react-refresh-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:0.4.2"], - ["@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/lodash", "npm:4.14.162"], - ["@types/node", "npm:14.14.5"], - ["@types/react", "npm:16.9.53"], - ["@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/classnames", "npm:2.2.11"], + ["@types/lodash", "npm:4.14.164"], + ["@types/node", "npm:14.14.6"], + ["@types/react", "npm:16.9.55"], + ["@types/react-dom", "npm:16.9.9"], ["@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"], @@ -13810,7 +14001,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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.3"], - ["bootstrap-icons", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbootstrap-icons%2Fdownload%2Fbootstrap-icons-1.0.0.tgz"], + ["bootstrap-icons", "npm:1.1.0"], ["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"], @@ -13818,19 +14009,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["core-js", "npm:3.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz"], ["css-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.0.0"], ["eslint", "npm:7.12.1"], - ["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.14.0"], + ["eslint-config-prettier", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.15.0"], ["eslint-plugin-import", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.22.1"], ["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.21.5"], ["eslint-plugin-react-hooks", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.2.0"], - ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.1"], + ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.2.0"], ["html-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.5.0"], ["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.8.3"], ["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:1.2.0"], + ["mini-css-extract-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:1.2.1"], ["pepjs", "npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpepjs%2Fdownload%2Fpepjs-0.5.2.tgz"], ["postcss", "npm:8.1.4"], ["postcss-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.0.4"], @@ -13849,23 +14040,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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", "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.3"], - ["sass", "npm:1.27.0"], + ["sass", "npm:1.28.0"], ["sass-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:10.0.4"], ["style-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:2.0.0"], ["ts-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:8.0.7"], ["type-fest", "npm:0.18.0"], ["typescript", "patch:typescript@npm%3A4.0.5#builtin::version=4.0.5&hash=5b02a2"], ["url-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["webpack-chain", "npm:6.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], - ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], + ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0"], ["workbox-precaching", "npm:5.1.4"], ["workbox-routing", "npm:5.1.4"], ["workbox-strategies", "npm:5.1.4"], ["workbox-webpack-plugin", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.1.4"], ["workbox-window", "npm:5.1.4"], - ["xregexp", "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-4.3.0.tgz"] + ["xregexp", "npm:4.4.0"] ], "linkType": "SOFT", }] @@ -13905,34 +14096,34 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["to-object-path", [ - ["npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-object-path%2Fdownload%2Fto-object-path-0.3.0.tgz", { - "packageLocation": "./.yarn/cache/to-object-path-npm-0.3.0-5a713ccaf5-a6a5a50225.zip/node_modules/to-object-path/", + ["npm:0.3.0", { + "packageLocation": "./.yarn/cache/to-object-path-npm-0.3.0-241b5ffa9c-a6a5a50225.zip/node_modules/to-object-path/", "packageDependencies": [ - ["to-object-path", "npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-object-path%2Fdownload%2Fto-object-path-0.3.0.tgz"], - ["kind-of", "npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz"] + ["to-object-path", "npm:0.3.0"], + ["kind-of", "npm:3.2.2"] ], "linkType": "HARD", }] ]], ["to-regex", [ - ["npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz", { - "packageLocation": "./.yarn/cache/to-regex-npm-3.0.2-a380ed7e87-ed733fdff8.zip/node_modules/to-regex/", + ["npm:3.0.2", { + "packageLocation": "./.yarn/cache/to-regex-npm-3.0.2-3af893c972-ed733fdff8.zip/node_modules/to-regex/", "packageDependencies": [ - ["to-regex", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz"], - ["define-property", "npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-2.0.2.tgz"], - ["extend-shallow", "npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz"], - ["regex-not", "npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz"], - ["safe-regex", "npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-regex%2Fdownload%2Fsafe-regex-1.1.0.tgz"] + ["to-regex", "npm:3.0.2"], + ["define-property", "npm:2.0.2"], + ["extend-shallow", "npm:3.0.2"], + ["regex-not", "npm:1.0.2"], + ["safe-regex", "npm:1.1.0"] ], "linkType": "HARD", }] ]], ["to-regex-range", [ - ["npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex-range%2Fdownload%2Fto-regex-range-2.1.1.tgz", { - "packageLocation": "./.yarn/cache/to-regex-range-npm-2.1.1-68ddc69671-801501b59d.zip/node_modules/to-regex-range/", + ["npm:2.1.1", { + "packageLocation": "./.yarn/cache/to-regex-range-npm-2.1.1-60af4c593e-801501b59d.zip/node_modules/to-regex-range/", "packageDependencies": [ - ["to-regex-range", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex-range%2Fdownload%2Fto-regex-range-2.1.1.tgz"], - ["is-number", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-number%2Fdownload%2Fis-number-3.0.0.tgz"], + ["to-regex-range", "npm:2.1.1"], + ["is-number", "npm:3.0.0"], ["repeat-string", "npm:1.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-string%2Fdownload%2Frepeat-string-1.6.1.tgz"] ], "linkType": "HARD", @@ -13947,10 +14138,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["toidentifier", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftoidentifier%2Fdownload%2Ftoidentifier-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/toidentifier-npm-1.0.0-cf9ef3320f-95720e8a0f.zip/node_modules/toidentifier/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/toidentifier-npm-1.0.0-5dad252f90-95720e8a0f.zip/node_modules/toidentifier/", "packageDependencies": [ - ["toidentifier", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftoidentifier%2Fdownload%2Ftoidentifier-1.0.0.tgz"] + ["toidentifier", "npm:1.0.0"] ], "linkType": "HARD", }] @@ -14110,12 +14301,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["type-is", [ - ["npm:1.6.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-is%2Fdownload%2Ftype-is-1.6.18.tgz", { - "packageLocation": "./.yarn/cache/type-is-npm-1.6.18-feafb86b19-20a3514f1d.zip/node_modules/type-is/", + ["npm:1.6.18", { + "packageLocation": "./.yarn/cache/type-is-npm-1.6.18-6dee4d4961-20a3514f1d.zip/node_modules/type-is/", "packageDependencies": [ - ["type-is", "npm:1.6.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-is%2Fdownload%2Ftype-is-1.6.18.tgz"], - ["media-typer", "npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmedia-typer%2Fdownload%2Fmedia-typer-0.3.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"] + ["type-is", "npm:1.6.18"], + ["media-typer", "npm:0.3.0"], + ["mime-types", "npm:2.1.27"] ], "linkType": "HARD", }] @@ -14213,14 +14404,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["union-value", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funion-value%2Fdownload%2Funion-value-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/union-value-npm-1.0.1-b67db5c3da-bd6ae611f0.zip/node_modules/union-value/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/union-value-npm-1.0.1-76c6e8a88f-bd6ae611f0.zip/node_modules/union-value/", "packageDependencies": [ - ["union-value", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funion-value%2Fdownload%2Funion-value-1.0.1.tgz"], - ["arr-union", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-union%2Fdownload%2Farr-union-3.1.0.tgz"], - ["get-value", "npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-value%2Fdownload%2Fget-value-2.0.6.tgz"], - ["is-extendable", "npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-0.1.1.tgz"], - ["set-value", "npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz"] + ["union-value", "npm:1.0.1"], + ["arr-union", "npm:3.1.0"], + ["get-value", "npm:2.0.6"], + ["is-extendable", "npm:0.1.1"], + ["set-value", "npm:2.0.1"] ], "linkType": "HARD", }] @@ -14274,26 +14465,33 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["unpipe", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funpipe%2Fdownload%2Funpipe-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/unpipe-npm-1.0.0-d6f27bd84a-ba244e8bf6.zip/node_modules/unpipe/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/unpipe-npm-1.0.0-2ed2a3c2bf-ba244e8bf6.zip/node_modules/unpipe/", "packageDependencies": [ - ["unpipe", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funpipe%2Fdownload%2Funpipe-1.0.0.tgz"] + ["unpipe", "npm:1.0.0"] ], "linkType": "HARD", }] ]], ["unset-value", [ - ["npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz", { - "packageLocation": "./.yarn/cache/unset-value-npm-1.0.0-9aee344620-b4c4853f27.zip/node_modules/unset-value/", + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/unset-value-npm-1.0.0-2af803b920-b4c4853f27.zip/node_modules/unset-value/", "packageDependencies": [ - ["unset-value", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz"], - ["has-value", "npm:0.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-0.3.1.tgz"], - ["isobject", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz"] + ["unset-value", "npm:1.0.0"], + ["has-value", "npm:0.3.1"], + ["isobject", "npm:3.0.1"] ], "linkType": "HARD", }] ]], ["upath", [ + ["npm:1.2.0", { + "packageLocation": "./.yarn/cache/upath-npm-1.2.0-ca00ec3398-ecb08ff3e7.zip/node_modules/upath/", + "packageDependencies": [ + ["upath", "npm:1.2.0"] + ], + "linkType": "HARD", + }], ["npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz", { "packageLocation": "./.yarn/cache/upath-npm-1.2.0-934902c124-ecb08ff3e7.zip/node_modules/upath/", "packageDependencies": [ @@ -14313,20 +14511,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["urix", [ - ["npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furix%2Fdownload%2Furix-0.1.0.tgz", { - "packageLocation": "./.yarn/cache/urix-npm-0.1.0-315615cfa2-6bdfca4e7f.zip/node_modules/urix/", + ["npm:0.1.0", { + "packageLocation": "./.yarn/cache/urix-npm-0.1.0-bd5e55a13a-6bdfca4e7f.zip/node_modules/urix/", "packageDependencies": [ - ["urix", "npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furix%2Fdownload%2Furix-0.1.0.tgz"] + ["urix", "npm:0.1.0"] ], "linkType": "HARD", }] ]], ["url", [ - ["npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz", { - "packageLocation": "./.yarn/cache/url-npm-0.11.0-8259cfe04b-537f785b16.zip/node_modules/url/", + ["npm:0.11.0", { + "packageLocation": "./.yarn/cache/url-npm-0.11.0-32ce15acfb-537f785b16.zip/node_modules/url/", "packageDependencies": [ - ["url", "npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz"], - ["punycode", "npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.3.2.tgz"], + ["url", "npm:0.11.0"], + ["punycode", "npm:1.3.2"], ["querystring", "npm:0.2.0"] ], "linkType": "HARD", @@ -14346,11 +14544,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageLocation": "./.yarn/$$virtual/url-loader-virtual-d701e1899b/0/cache/url-loader-npm-4.1.1-568e22ebcb-871e8c8df2.zip/node_modules/url-loader/", "packageDependencies": [ ["url-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.1"], - ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.1.1"], + ["file-loader", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:6.2.0"], ["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"], ["schema-utils", "npm:3.0.0"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"] + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"] ], "packagePeers": [ "file-loader", @@ -14360,21 +14558,21 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["url-parse", [ - ["npm:1.4.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.4.7.tgz", { - "packageLocation": "./.yarn/cache/url-parse-npm-1.4.7-8b0f9a3d76-33c44a24b9.zip/node_modules/url-parse/", + ["npm:1.4.7", { + "packageLocation": "./.yarn/cache/url-parse-npm-1.4.7-5f04e49040-33c44a24b9.zip/node_modules/url-parse/", "packageDependencies": [ - ["url-parse", "npm:1.4.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.4.7.tgz"], - ["querystringify", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.1.1.tgz"], + ["url-parse", "npm:1.4.7"], + ["querystringify", "npm:2.2.0"], ["requires-port", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequires-port%2Fdownload%2Frequires-port-1.0.0.tgz"] ], "linkType": "HARD", }] ]], ["use", [ - ["npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuse%2Fdownload%2Fuse-3.1.1.tgz", { - "packageLocation": "./.yarn/cache/use-npm-3.1.1-4b1ecc7129-8dd3bdeeda.zip/node_modules/use/", + ["npm:3.1.1", { + "packageLocation": "./.yarn/cache/use-npm-3.1.1-7ba643714c-8dd3bdeeda.zip/node_modules/use/", "packageDependencies": [ - ["use", "npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuse%2Fdownload%2Fuse-3.1.1.tgz"] + ["use", "npm:3.1.1"] ], "linkType": "HARD", }] @@ -14416,15 +14614,22 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["utils-merge", [ - ["npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futils-merge%2Fdownload%2Futils-merge-1.0.1.tgz", { - "packageLocation": "./.yarn/cache/utils-merge-npm-1.0.1-c9b1088485-a457956ebc.zip/node_modules/utils-merge/", + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/utils-merge-npm-1.0.1-363bbdfbca-a457956ebc.zip/node_modules/utils-merge/", "packageDependencies": [ - ["utils-merge", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futils-merge%2Fdownload%2Futils-merge-1.0.1.tgz"] + ["utils-merge", "npm:1.0.1"] ], "linkType": "HARD", }] ]], ["uuid", [ + ["npm:3.4.0", { + "packageLocation": "./.yarn/cache/uuid-npm-3.4.0-4fd8ef88ad-1ce3f37e21.zip/node_modules/uuid/", + "packageDependencies": [ + ["uuid", "npm:3.4.0"] + ], + "linkType": "HARD", + }], ["npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", { "packageLocation": "./.yarn/cache/uuid-npm-3.4.0-b87400074c-1ce3f37e21.zip/node_modules/uuid/", "packageDependencies": [ @@ -14470,10 +14675,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["vary", [ - ["npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fvary%2Fdownload%2Fvary-1.1.2.tgz", { - "packageLocation": "./.yarn/cache/vary-npm-1.1.2-6556205c46-591f059f72.zip/node_modules/vary/", + ["npm:1.1.2", { + "packageLocation": "./.yarn/cache/vary-npm-1.1.2-b49f70ae63-591f059f72.zip/node_modules/vary/", "packageDependencies": [ - ["vary", "npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fvary%2Fdownload%2Fvary-1.1.2.tgz"] + ["vary", "npm:1.1.2"] ], "linkType": "HARD", }] @@ -14521,20 +14726,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["wbuf", [ - ["npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwbuf%2Fdownload%2Fwbuf-1.7.3.tgz", { - "packageLocation": "./.yarn/cache/wbuf-npm-1.7.3-819c8cd6c3-5916a49cb2.zip/node_modules/wbuf/", + ["npm:1.7.3", { + "packageLocation": "./.yarn/cache/wbuf-npm-1.7.3-cc9e10a084-5916a49cb2.zip/node_modules/wbuf/", "packageDependencies": [ - ["wbuf", "npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwbuf%2Fdownload%2Fwbuf-1.7.3.tgz"], - ["minimalistic-assert", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimalistic-assert%2Fdownload%2Fminimalistic-assert-1.0.1.tgz"] + ["wbuf", "npm:1.7.3"], + ["minimalistic-assert", "npm:1.0.1"] ], "linkType": "HARD", }] ]], ["webpack", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1", { - "packageLocation": "./.yarn/$$virtual/webpack-virtual-3d397640c5/0/cache/webpack-npm-5.2.1-ad5c5c6760-1503203935.zip/node_modules/webpack/", + ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2", { + "packageLocation": "./.yarn/$$virtual/webpack-virtual-84c70b8a5b/0/cache/webpack-npm-5.3.2-3f56763976-334a24989d.zip/node_modules/webpack/", "packageDependencies": [ - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["@types/eslint-scope", "npm:3.7.0"], ["@types/estree", "npm:0.0.45"], ["@webassemblyjs/ast", "npm:1.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz"], @@ -14556,10 +14761,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["pkg-dir", "npm:4.2.0"], ["schema-utils", "npm:3.0.0"], ["tapable", "npm:2.0.0"], - ["terser-webpack-plugin", "virtual:3d397640c5f0b4b3de718c05931a789ea9e8a462d5fe086e49019e71e5c46ec377c4b2afd31a8718b532f901d4c8fd3aa701b59eb4eee1c89da6eddea9e2f48f#npm:5.0.1"], + ["terser-webpack-plugin", "virtual:84c70b8a5bbb6d28f1f74b97ec63c1bc3a49645eb49a606b219ac8b721869290bd4f4b5609e7a0031e0fb00db992286c6b9184d502dbaa6e08165378ff8628f1#npm:5.0.3"], ["watchpack", "npm:2.0.0"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], - ["webpack-sources", "npm:2.1.0"] + ["webpack-sources", "npm:2.2.0"] ], "packagePeers": [ "webpack-cli" @@ -14599,9 +14804,9 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["interpret", "npm:2.2.0"], ["rechoir", "npm:0.7.0"], ["v8-compile-cache", "npm:2.1.1"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["webpack-bundle-analyzer", null], - ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], + ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0"], ["webpack-merge", "npm:4.2.2"] ], "packagePeers": [ @@ -14617,16 +14822,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["webpack-dev-middleware", [ - ["virtual:dd7bf9071c15c1b7a313ecdd010711f705a91e516eac87ed27bf82d6945d9d7d9c5b82dec9391533d88e32ec8de8326d7c2bcbfc63ae4f43b290a451f472b891#npm:3.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz", { - "packageLocation": "./.yarn/$$virtual/webpack-dev-middleware-virtual-9add47b0ac/0/cache/webpack-dev-middleware-npm-3.7.2-a804badefa-88480e7d7f.zip/node_modules/webpack-dev-middleware/", + ["virtual:91ea7dc22190cafbbd2f73a50bed8a4e3990cee3a47b8c59a27a6eb9c6b45e094232f508b044b264547c863d17d50389003d3e63f7d7f25d44d9a2abeceaf2b3#npm:3.7.2", { + "packageLocation": "./.yarn/$$virtual/webpack-dev-middleware-virtual-1480261ef8/0/cache/webpack-dev-middleware-npm-3.7.2-4f005aab9a-88480e7d7f.zip/node_modules/webpack-dev-middleware/", "packageDependencies": [ - ["webpack-dev-middleware", "virtual:dd7bf9071c15c1b7a313ecdd010711f705a91e516eac87ed27bf82d6945d9d7d9c5b82dec9391533d88e32ec8de8326d7c2bcbfc63ae4f43b290a451f472b891#npm:3.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz"], - ["memory-fs", "npm:0.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz"], - ["mime", "npm:2.4.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz"], + ["webpack-dev-middleware", "virtual:91ea7dc22190cafbbd2f73a50bed8a4e3990cee3a47b8c59a27a6eb9c6b45e094232f508b044b264547c863d17d50389003d3e63f7d7f25d44d9a2abeceaf2b3#npm:3.7.2"], + ["memory-fs", "npm:0.4.1"], + ["mime", "npm:2.4.6"], ["mkdirp", "npm:0.5.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz"], - ["range-parser", "npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frange-parser%2Fdownload%2Frange-parser-1.2.1.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], - ["webpack-log", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz"] + ["range-parser", "npm:1.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], + ["webpack-log", "npm:2.0.0"] ], "packagePeers": [ "webpack" @@ -14635,45 +14840,45 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["webpack-dev-server", [ - ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz", { - "packageLocation": "./.yarn/$$virtual/webpack-dev-server-virtual-dd7bf9071c/0/cache/webpack-dev-server-npm-3.11.0-6158244322-1d34457456.zip/node_modules/webpack-dev-server/", + ["virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0", { + "packageLocation": "./.yarn/$$virtual/webpack-dev-server-virtual-91ea7dc221/0/cache/webpack-dev-server-npm-3.11.0-42b1303dbc-1d34457456.zip/node_modules/webpack-dev-server/", "packageDependencies": [ - ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz"], + ["webpack-dev-server", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:3.11.0"], ["ansi-html", "npm:0.0.7"], - ["bonjour", "npm:3.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbonjour%2Fdownload%2Fbonjour-3.5.0.tgz"], - ["chokidar", "npm:2.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz"], - ["compression", "npm:1.7.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz"], - ["connect-history-api-fallback", "npm:1.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fconnect-history-api-fallback%2Fdownload%2Fconnect-history-api-fallback-1.6.0.tgz"], - ["debug", "virtual:dd7bf9071c15c1b7a313ecdd010711f705a91e516eac87ed27bf82d6945d9d7d9c5b82dec9391533d88e32ec8de8326d7c2bcbfc63ae4f43b290a451f472b891#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"], + ["bonjour", "npm:3.5.0"], + ["chokidar", "npm:2.1.8"], + ["compression", "npm:1.7.4"], + ["connect-history-api-fallback", "npm:1.6.0"], + ["debug", "virtual:91ea7dc22190cafbbd2f73a50bed8a4e3990cee3a47b8c59a27a6eb9c6b45e094232f508b044b264547c863d17d50389003d3e63f7d7f25d44d9a2abeceaf2b3#npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz"], ["del", "npm:4.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz"], - ["express", "npm:4.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz"], - ["html-entities", "npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz"], - ["http-proxy-middleware", "npm:0.19.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz"], - ["import-local", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-local%2Fdownload%2Fimport-local-2.0.0.tgz"], - ["internal-ip", "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz"], - ["ip", "npm:1.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip%2Fdownload%2Fip-1.1.5.tgz"], - ["is-absolute-url", "npm:3.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz"], - ["killable", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkillable%2Fdownload%2Fkillable-1.0.1.tgz"], - ["loglevel", "npm:1.6.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.8.tgz"], - ["opn", "npm:5.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fopn%2Fdownload%2Fopn-5.5.0.tgz"], - ["p-retry", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz"], - ["portfinder", "npm:1.0.27::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.27.tgz"], - ["schema-utils", "npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz"], - ["selfsigned", "npm:1.10.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz"], - ["semver", "npm:6.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz"], - ["serve-index", "npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-index%2Fdownload%2Fserve-index-1.9.1.tgz"], - ["sockjs", "npm:0.3.20::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs%2Fdownload%2Fsockjs-0.3.20.tgz"], - ["sockjs-client", "npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz"], - ["spdy", "npm:4.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz"], + ["express", "npm:4.17.1"], + ["html-entities", "npm:1.3.1"], + ["http-proxy-middleware", "npm:0.19.1"], + ["import-local", "npm:2.0.0"], + ["internal-ip", "npm:4.3.0"], + ["ip", "npm:1.1.5"], + ["is-absolute-url", "npm:3.0.3"], + ["killable", "npm:1.0.1"], + ["loglevel", "npm:1.7.0"], + ["opn", "npm:5.5.0"], + ["p-retry", "npm:3.0.1"], + ["portfinder", "npm:1.0.28"], + ["schema-utils", "npm:1.0.0"], + ["selfsigned", "npm:1.10.8"], + ["semver", "npm:6.3.0"], + ["serve-index", "npm:1.9.1"], + ["sockjs", "npm:0.3.20"], + ["sockjs-client", "npm:1.4.0"], + ["spdy", "npm:4.0.2"], ["strip-ansi", "npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz"], ["supports-color", "npm:6.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz"], - ["url", "npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["url", "npm:0.11.0"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["webpack-cli", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:4.1.0"], - ["webpack-dev-middleware", "virtual:dd7bf9071c15c1b7a313ecdd010711f705a91e516eac87ed27bf82d6945d9d7d9c5b82dec9391533d88e32ec8de8326d7c2bcbfc63ae4f43b290a451f472b891#npm:3.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz"], - ["webpack-log", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz"], - ["ws", "npm:6.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz"], - ["yargs", "npm:13.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz"] + ["webpack-dev-middleware", "virtual:91ea7dc22190cafbbd2f73a50bed8a4e3990cee3a47b8c59a27a6eb9c6b45e094232f508b044b264547c863d17d50389003d3e63f7d7f25d44d9a2abeceaf2b3#npm:3.7.2"], + ["webpack-log", "npm:2.0.0"], + ["ws", "npm:6.2.1"], + ["yargs", "npm:13.3.2"] ], "packagePeers": [ "webpack", @@ -14683,11 +14888,11 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["webpack-log", [ - ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz", { - "packageLocation": "./.yarn/cache/webpack-log-npm-2.0.0-a052036a7a-250db04c41.zip/node_modules/webpack-log/", + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/webpack-log-npm-2.0.0-cafd67cd5c-250db04c41.zip/node_modules/webpack-log/", "packageDependencies": [ - ["webpack-log", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz"], - ["ansi-colors", "npm:3.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-colors%2Fdownload%2Fansi-colors-3.2.4.tgz"], + ["webpack-log", "npm:2.0.0"], + ["ansi-colors", "npm:3.2.4"], ["uuid", "npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz"] ], "linkType": "HARD", @@ -14713,10 +14918,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["npm:2.1.0", { - "packageLocation": "./.yarn/cache/webpack-sources-npm-2.1.0-569bf85c0f-3950d59661.zip/node_modules/webpack-sources/", + ["npm:2.2.0", { + "packageLocation": "./.yarn/cache/webpack-sources-npm-2.2.0-977585170c-7c4b797fa9.zip/node_modules/webpack-sources/", "packageDependencies": [ - ["webpack-sources", "npm:2.1.0"], + ["webpack-sources", "npm:2.2.0"], ["source-list-map", "npm:2.0.1"], ["source-map", "npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz"] ], @@ -14724,29 +14929,29 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["websocket-driver", [ - ["npm:0.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz", { - "packageLocation": "./.yarn/cache/websocket-driver-npm-0.6.5-7a64ae7b58-1169a0eccc.zip/node_modules/websocket-driver/", + ["npm:0.6.5", { + "packageLocation": "./.yarn/cache/websocket-driver-npm-0.6.5-53177fb7ee-1169a0eccc.zip/node_modules/websocket-driver/", "packageDependencies": [ - ["websocket-driver", "npm:0.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz"], - ["websocket-extensions", "npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-extensions%2Fdownload%2Fwebsocket-extensions-0.1.4.tgz"] + ["websocket-driver", "npm:0.6.5"], + ["websocket-extensions", "npm:0.1.4"] ], "linkType": "HARD", }] ]], ["websocket-extensions", [ - ["npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-extensions%2Fdownload%2Fwebsocket-extensions-0.1.4.tgz", { - "packageLocation": "./.yarn/cache/websocket-extensions-npm-0.1.4-4ad80c33db-bbafc0ffa1.zip/node_modules/websocket-extensions/", + ["npm:0.1.4", { + "packageLocation": "./.yarn/cache/websocket-extensions-npm-0.1.4-be839a9e56-bbafc0ffa1.zip/node_modules/websocket-extensions/", "packageDependencies": [ - ["websocket-extensions", "npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-extensions%2Fdownload%2Fwebsocket-extensions-0.1.4.tgz"] + ["websocket-extensions", "npm:0.1.4"] ], "linkType": "HARD", }] ]], ["which", [ - ["npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", { - "packageLocation": "./.yarn/cache/which-npm-1.3.1-ba7a168732-298d95f9c1.zip/node_modules/which/", + ["npm:1.3.1", { + "packageLocation": "./.yarn/cache/which-npm-1.3.1-f0ebb8bdd8-298d95f9c1.zip/node_modules/which/", "packageDependencies": [ - ["which", "npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz"], + ["which", "npm:1.3.1"], ["isexe", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz"] ], "linkType": "HARD", @@ -14761,10 +14966,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["which-module", [ - ["npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich-module%2Fdownload%2Fwhich-module-2.0.0.tgz", { - "packageLocation": "./.yarn/cache/which-module-npm-2.0.0-db3972df77-3d2107ab18.zip/node_modules/which-module/", + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/which-module-npm-2.0.0-daf3daa08d-3d2107ab18.zip/node_modules/which-module/", "packageDependencies": [ - ["which-module", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich-module%2Fdownload%2Fwhich-module-2.0.0.tgz"] + ["which-module", "npm:2.0.0"] ], "linkType": "HARD", }] @@ -14986,7 +15191,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["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"], ["source-map-url", "npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.0.tgz"], ["upath", "npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz"], - ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.2.1"], + ["webpack", "virtual:71f98ed0939a4e8e7ea376e302a494701bc5b6aa7a7eb81870139ee3950a7c417a3d13b346b5b526d93952a598dffe628a0fac2148047debade23536cb3d7957#npm:5.3.2"], ["webpack-sources", "npm:1.4.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz"], ["workbox-build", "npm:5.1.4"] ], @@ -15007,13 +15212,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["wrap-ansi", [ - ["npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz", { - "packageLocation": "./.yarn/cache/wrap-ansi-npm-5.1.0-6be3606251-9622c3aa27.zip/node_modules/wrap-ansi/", + ["npm:5.1.0", { + "packageLocation": "./.yarn/cache/wrap-ansi-npm-5.1.0-293b407c18-9622c3aa27.zip/node_modules/wrap-ansi/", "packageDependencies": [ - ["wrap-ansi", "npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz"], + ["wrap-ansi", "npm:5.1.0"], ["ansi-styles", "npm:3.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"], ["string-width", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz"], - ["strip-ansi", "npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz"] + ["strip-ansi", "npm:5.2.0"] ], "linkType": "HARD", }] @@ -15038,30 +15243,30 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["ws", [ - ["npm:6.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz", { - "packageLocation": "./.yarn/cache/ws-npm-6.2.1-f4612cd51f-35d32b09e2.zip/node_modules/ws/", + ["npm:6.2.1", { + "packageLocation": "./.yarn/cache/ws-npm-6.2.1-bbe0ef9859-35d32b09e2.zip/node_modules/ws/", "packageDependencies": [ - ["ws", "npm:6.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz"], - ["async-limiter", "npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz"] + ["ws", "npm:6.2.1"], + ["async-limiter", "npm:1.0.1"] ], "linkType": "HARD", }] ]], ["xregexp", [ - ["npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-4.3.0.tgz", { - "packageLocation": "./.yarn/cache/xregexp-npm-4.3.0-19c70fe731-2dcef4888e.zip/node_modules/xregexp/", + ["npm:4.4.0", { + "packageLocation": "./.yarn/cache/xregexp-npm-4.4.0-df43d2816a-b6570b6dd9.zip/node_modules/xregexp/", "packageDependencies": [ - ["xregexp", "npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-4.3.0.tgz"], - ["@babel/runtime-corejs3", "npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.10.5.tgz"] + ["xregexp", "npm:4.4.0"], + ["@babel/runtime-corejs3", "npm:7.12.1"] ], "linkType": "HARD", }] ]], ["y18n", [ - ["npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz", { - "packageLocation": "./.yarn/cache/y18n-npm-4.0.0-88f5897c04-5b7434c95d.zip/node_modules/y18n/", + ["npm:4.0.0", { + "packageLocation": "./.yarn/cache/y18n-npm-4.0.0-55cd797cc5-5b7434c95d.zip/node_modules/y18n/", "packageDependencies": [ - ["y18n", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz"] + ["y18n", "npm:4.0.0"] ], "linkType": "HARD", }] @@ -15085,31 +15290,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { }] ]], ["yargs", [ - ["npm:13.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", { - "packageLocation": "./.yarn/cache/yargs-npm-13.3.2-41c1b39fb8-92c612cd14.zip/node_modules/yargs/", + ["npm:13.3.2", { + "packageLocation": "./.yarn/cache/yargs-npm-13.3.2-1588f5dd4c-92c612cd14.zip/node_modules/yargs/", "packageDependencies": [ - ["yargs", "npm:13.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz"], - ["cliui", "npm:5.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz"], + ["yargs", "npm:13.3.2"], + ["cliui", "npm:5.0.0"], ["find-up", "npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz"], - ["get-caller-file", "npm:2.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-caller-file%2Fdownload%2Fget-caller-file-2.0.5.tgz"], - ["require-directory", "npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-directory%2Fdownload%2Frequire-directory-2.1.1.tgz"], - ["require-main-filename", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-2.0.0.tgz"], - ["set-blocking", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-blocking%2Fdownload%2Fset-blocking-2.0.0.tgz"], + ["get-caller-file", "npm:2.0.5"], + ["require-directory", "npm:2.1.1"], + ["require-main-filename", "npm:2.0.0"], + ["set-blocking", "npm:2.0.0"], ["string-width", "npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz"], - ["which-module", "npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich-module%2Fdownload%2Fwhich-module-2.0.0.tgz"], - ["y18n", "npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz"], - ["yargs-parser", "npm:13.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz"] + ["which-module", "npm:2.0.0"], + ["y18n", "npm:4.0.0"], + ["yargs-parser", "npm:13.1.2"] ], "linkType": "HARD", }] ]], ["yargs-parser", [ - ["npm:13.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz", { - "packageLocation": "./.yarn/cache/yargs-parser-npm-13.1.2-d942f466fd-82d3b7ab99.zip/node_modules/yargs-parser/", + ["npm:13.1.2", { + "packageLocation": "./.yarn/cache/yargs-parser-npm-13.1.2-546b639909-82d3b7ab99.zip/node_modules/yargs-parser/", "packageDependencies": [ - ["yargs-parser", "npm:13.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz"], - ["camelcase", "npm:5.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz"], - ["decamelize", "npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz"] + ["yargs-parser", "npm:13.1.2"], + ["camelcase", "npm:5.3.1"], + ["decamelize", "npm:1.2.0"] ], "linkType": "HARD", }] diff --git a/FrontEnd/package.json b/FrontEnd/package.json index 12f3fbea..d9136b6a 100644 --- a/FrontEnd/package.json +++ b/FrontEnd/package.json @@ -8,7 +8,7 @@ "dependencies": { "axios": "^0.21.0", "bootstrap": "^4.5.3", - "bootstrap-icons": "^1.0.0", + "bootstrap-icons": "^1.1.0", "classnames": "^2.2.6", "clsx": "^1.1.1", "core-js": "^3.6.5", @@ -32,7 +32,7 @@ "workbox-routing": "^5.1.4", "workbox-strategies": "^5.1.4", "workbox-window": "^5.1.4", - "xregexp": "^4.3.0" + "xregexp": "^4.4.0" }, "scripts": { "start": "webpack serve --config ./webpack.config.dev.js", @@ -62,11 +62,11 @@ "@babel/preset-react": "^7.12.1", "@babel/preset-typescript": "^7.12.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.2", - "@types/classnames": "^2.2.10", - "@types/lodash": "^4.14.162", - "@types/node": "^14.14.5", - "@types/react": "^16.9.53", - "@types/react-dom": "^16.9.8", + "@types/classnames": "^2.2.11", + "@types/lodash": "^4.14.164", + "@types/node": "^14.14.6", + "@types/react": "^16.9.55", + "@types/react-dom": "^16.9.9", "@types/react-responsive": "^8.0.2", "@types/react-router": "^5.1.8", "@types/react-router-bootstrap": "^0.24.5", @@ -82,29 +82,29 @@ "copy-webpack-plugin": "^6.2.1", "css-loader": "^5.0.0", "eslint": "^7.12.1", - "eslint-config-prettier": "^6.14.0", + "eslint-config-prettier": "^6.15.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-prettier": "^3.1.4", "eslint-plugin-react": "^7.21.5", "eslint-plugin-react-hooks": "^4.2.0", - "file-loader": "^6.1.1", + "file-loader": "^6.2.0", "html-webpack-plugin": "^4.5.0", "http-server": "^0.12.3", - "mini-css-extract-plugin": "^1.2.0", + "mini-css-extract-plugin": "^1.2.1", "postcss": "^8.1.4", "postcss-loader": "^4.0.4", "postcss-preset-env": "^6.7.0", "prettier": "^2.1.2", "querystring-es3": "^0.2.1", "react-refresh": "^0.9.0", - "sass": "^1.27.0", + "sass": "^1.28.0", "sass-loader": "^10.0.4", "style-loader": "^2.0.0", "ts-loader": "^8.0.7", "type-fest": "^0.18.0", "typescript": "^4.0.5", "url-loader": "^4.1.1", - "webpack": "^5.2.1", + "webpack": "^5.3.2", "webpack-chain": "^6.5.1", "webpack-cli": "^4.1.0", "webpack-dev-server": "^3.11.0", diff --git a/FrontEnd/src/app/services/DataHub.ts b/FrontEnd/src/app/services/DataHub.ts index 93a9b41f..4d618db6 100644 --- a/FrontEnd/src/app/services/DataHub.ts +++ b/FrontEnd/src/app/services/DataHub.ts @@ -22,7 +22,7 @@ export class DataLine { } ) { if (config.disableInitSync !== true) { - setImmediate(() => void this.sync()); + setTimeout(() => void this.sync()); } } diff --git a/FrontEnd/yarn.lock b/FrontEnd/yarn.lock index 65ecd497..4885d0cc 100644 --- a/FrontEnd/yarn.lock +++ b/FrontEnd/yarn.lock @@ -2079,13 +2079,13 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.8.3": - version: 7.10.5 - resolution: "@babel/runtime-corejs3@npm:7.10.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.10.5.tgz" +"@babel/runtime-corejs3@npm:^7.12.1": + version: 7.12.1 + resolution: "@babel/runtime-corejs3@npm:7.12.1" dependencies: core-js-pure: ^3.0.0 regenerator-runtime: ^0.13.4 - checksum: fc1caee034dae9fe4a411f3b09296debec728a059448c1e90f765ce1792f4229e658759103442825d5e6a2145a22417f75b181aecbe28914f2ee206df5fbafe7 + checksum: a6387d9e0d70dd3bc9bb55c96374310a5e5e49d9695b8b6fa25c9bff340e90647ade5bb97361392d56b7609c6f1d90728d230d31b8a25d3a2546f6c60db65490 languageName: node linkType: hard @@ -2453,6 +2453,13 @@ __metadata: languageName: node linkType: hard +"@types/classnames@npm:^2.2.11": + version: 2.2.11 + resolution: "@types/classnames@npm:2.2.11" + checksum: 5bbd4fd0f803a46424152ecc89cfb88464af4d655634de8a98ec54977b0b6d9da107e799c24a2b66f0133438e84bac51b2275134cf028edea749fb018f731e89 + languageName: node + linkType: hard + "@types/color-name@npm:^1.1.1": version: 1.1.1 resolution: "@types/color-name@npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcolor-name%2Fdownload%2F%40types%2Fcolor-name-1.1.1.tgz" @@ -2576,10 +2583,10 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:^4.14.162": - version: 4.14.162 - resolution: "@types/lodash@npm:4.14.162" - checksum: 16205a12995d659ac556f25405cfeec3b9fb427364ed8e24e4e4ab84f646b1a2f6f08f6aee155ebc6127ac6791fd7755fc15be10b6c8dd5a3ab3d3f4917f7173 +"@types/lodash@npm:^4.14.164": + version: 4.14.164 + resolution: "@types/lodash@npm:4.14.164" + checksum: 4158045fd1532471e790ea699f4b7bfc2b82834fee8aef7d9aceadfa3abed3a1c5e66965141c0b25dd43548993c7dd171ec820b93f1993f5226937d1ce709fb3 languageName: node linkType: hard @@ -2604,10 +2611,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.14.5": - version: 14.14.5 - resolution: "@types/node@npm:14.14.5" - checksum: 4916d5c46e604be9b76c69300efdf26538f74ad63a5df572a6b66b95238ddbed3c2bcd5a9748c6ec2ef1bf529d84b3f3a53a0eed54d1f46eaa29471cbb7b1406 +"@types/node@npm:^14.14.6": + version: 14.14.6 + resolution: "@types/node@npm:14.14.6" + checksum: 9b06b04ab2ae3761136fb39b573f95d90e748ebcf232e126304d642e4910039a74973547635729b627a0401791a1f2491aa9aa6d4d6bb80922a0b869a2731a63 languageName: node linkType: hard @@ -2625,12 +2632,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^16.9.8": - version: 16.9.8 - resolution: "@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-dom@npm:^16.9.9": + version: 16.9.9 + resolution: "@types/react-dom@npm:16.9.9" dependencies: "@types/react": "*" - checksum: 53a223c0266178bca9161301d18ee6199e8f75f88caed5c4601c5aaedaf4c68f03bd72f6aafa979254beb20759f0b68a542ce04295d704eb67ae179769c50813 + checksum: d92c166f5bcd483f175311eec9c472893216d486106a5b5402eb293840c0b0d1aafb484a3fe3f0f4622ae1f6dff46c9fe970873d4dac7fdf70a50931d3cab4a0 languageName: node linkType: hard @@ -2714,13 +2721,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^16.9.53": - version: 16.9.53 - resolution: "@types/react@npm:16.9.53" +"@types/react@npm:^16.9.55": + version: 16.9.55 + resolution: "@types/react@npm:16.9.55" dependencies: "@types/prop-types": "*" csstype: ^3.0.2 - checksum: 01c646c8f08306660441a14495e926c0362114da7813c3bc3d4d58b47590ee92274bbbff18f3fafd465a09369daa25982d68ba6628f1080120b62d40ce75ca40 + checksum: aadc5636d6b58e33422d0f3d275daf25b5456f715a0426ea08399f577ba0229dead47d41dc2c6e1f1659fb01e42c005045f97ed535b3695e05f209bd0b7076c5 languageName: node linkType: hard @@ -3312,7 +3319,7 @@ __metadata: "accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.7": version: 1.3.7 - resolution: "accepts@npm:1.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Faccepts%2Fdownload%2Faccepts-1.3.7.tgz" + resolution: "accepts@npm:1.3.7" dependencies: mime-types: ~2.1.24 negotiator: 0.6.2 @@ -3368,14 +3375,23 @@ __metadata: "ajv-errors@npm:^1.0.0": version: 1.0.1 - resolution: "ajv-errors@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz" + resolution: "ajv-errors@npm:1.0.1" peerDependencies: ajv: ">=5.0.0" checksum: d8356aadcb8a602c69c8eefca1aff93271316c45c42b975606346cfd7c3f9bf56569c15bd2fe18bee5ae16d4db15fb9b0b12cb48c057335980993978c5ff2450 languageName: node linkType: hard -"ajv-keywords@npm:^3.1.0, ajv-keywords@npm:^3.4.1": +"ajv-keywords@npm:^3.1.0": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 01f26c292304870c03a1cd14fc1ddcf7c713a05611a122c5193694d4050063d5fba46cbf8b5b2ebde364166fddd3c2e0abdcd97df655b7a7fbb3e6634eeb056a + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.4.1": version: 3.5.1 resolution: "ajv-keywords@npm:3.5.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.1.tgz" peerDependencies: @@ -3393,45 +3409,45 @@ __metadata: 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" +"ajv@npm:^6.1.0, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" 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: b20a171bf30ede1635c6b1955bcc1db5a6b3e7dfa77f75aace9fb0db87375430c46d5cdd84158a0bf0a8da91e4da97bdb1afe5604a0969d8468b7c11143fdbba + checksum: 19a8f3b0a06001eb68e6268f4f9f04424b32baadd5df6ba8292cd473e22e5f4019ed9ab17c3e3510394178ed8bef9b42ad0bdb5c675d65f042421a774780ce1a 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" +"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" 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 + checksum: b20a171bf30ede1635c6b1955bcc1db5a6b3e7dfa77f75aace9fb0db87375430c46d5cdd84158a0bf0a8da91e4da97bdb1afe5604a0969d8468b7c11143fdbba languageName: node linkType: hard -"ajv@npm:^6.12.5": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" +"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: 19a8f3b0a06001eb68e6268f4f9f04424b32baadd5df6ba8292cd473e22e5f4019ed9ab17c3e3510394178ed8bef9b42ad0bdb5c675d65f042421a774780ce1a + 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" + resolution: "ansi-colors@npm:3.2.4" checksum: 86ec4a476ae8661237c0da58c0b4c48ea57719fdd80eed00132db09ee88d69f5caa5889e13ccd07489e710bf3b9fd85123729e0660384d4373e92ef6125c1fad languageName: node linkType: hard @@ -3517,7 +3533,7 @@ __metadata: "anymatch@npm:^2.0.0": version: 2.0.0 - resolution: "anymatch@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz" + resolution: "anymatch@npm:2.0.0" dependencies: micromatch: ^3.1.4 normalize-path: ^2.1.1 @@ -3563,21 +3579,21 @@ __metadata: "arr-diff@npm:^4.0.0": version: 4.0.0 - resolution: "arr-diff@npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-diff%2Fdownload%2Farr-diff-4.0.0.tgz" + resolution: "arr-diff@npm:4.0.0" checksum: cbdff67cf52b9742d7ecfcf8614a1a458638679909fadcec2f91d18807dd5ba1cfa1e47984f52876063c8648146d385926e11bdac976a1db3f219bfde9668160 languageName: node linkType: hard "arr-flatten@npm:^1.1.0": version: 1.1.0 - resolution: "arr-flatten@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-flatten%2Fdownload%2Farr-flatten-1.1.0.tgz" + resolution: "arr-flatten@npm:1.1.0" checksum: 564dc9c32cb20a1b5bc6eeea3b7a7271fcc5e9f1f3d7648b9db145b7abf68815562870267010f9f4976d788f3f79d2ccf176e94cee69af7da48943a71041ab57 languageName: node linkType: hard "arr-union@npm:^3.1.0": version: 3.1.0 - resolution: "arr-union@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farr-union%2Fdownload%2Farr-union-3.1.0.tgz" + resolution: "arr-union@npm:3.1.0" checksum: 78f0f75c4778283023b723152bf12be65773ab3628e21493e1a1d3c316d472af9053d9b3dec4d814a130ad4f8ba45ae79b0f33d270a4ae0b0ff41eb743461aa8 languageName: node linkType: hard @@ -3591,14 +3607,14 @@ __metadata: "array-flatten@npm:1.1.1": version: 1.1.1 - resolution: "array-flatten@npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz" + resolution: "array-flatten@npm:1.1.1" checksum: de7a056451ff7891bb1bcda6ce2a50448ca70f63cd0fa7aa90430d288b6dc2931517b6853ce16c473a7f40fa6eaa874e20b6151616db93375471d1ffadfb1d3d languageName: node linkType: hard "array-flatten@npm:^2.1.0": version: 2.1.2 - resolution: "array-flatten@npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz" + resolution: "array-flatten@npm:2.1.2" checksum: 46bfb198da424765f26350a8d8b207deade75d493e6d26417bfebb4027857b9fef8f5ae3bacd0b912f9a9fd2c04e2ec140c7183c0408e10950579e9d5c9dea25 languageName: node linkType: hard @@ -3639,7 +3655,7 @@ __metadata: "array-unique@npm:^0.3.2": version: 0.3.2 - resolution: "array-unique@npm:0.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-unique%2Fdownload%2Farray-unique-0.3.2.tgz" + resolution: "array-unique@npm:0.3.2" checksum: 7139dbbcaf48325224593f2f7a400b123b310c53365b4a1d49916928082ad862117a1e6d411c926ec540e9408786bbd1cf90805609040568059156d1d09feb70 languageName: node linkType: hard @@ -3690,7 +3706,7 @@ __metadata: "assign-symbols@npm:^1.0.0": version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fassign-symbols%2Fdownload%2Fassign-symbols-1.0.0.tgz" + resolution: "assign-symbols@npm:1.0.0" checksum: 893e9389a5dde0690102ad8d6146e50d747b6f45d51996d39b04abb7774755a4a9b53883295abab4dd455704b1e10c1fa560d617db5404bae118526916472bec languageName: node linkType: hard @@ -3704,14 +3720,14 @@ __metadata: "async-each@npm:^1.0.1": version: 1.0.3 - resolution: "async-each@npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-each%2Fdownload%2Fasync-each-1.0.3.tgz" + resolution: "async-each@npm:1.0.3" checksum: 0cf01982ae42db5ce591aab153e45e77aa7c813c4fb282f1e7cac2259f90949f82542e82a33f73ef308e0126c9a8bc702ee117a87614549fe88840cf5a44aec4 languageName: node linkType: hard "async-limiter@npm:~1.0.0": version: 1.0.1 - resolution: "async-limiter@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz" + resolution: "async-limiter@npm:1.0.1" checksum: d123312ace75c07399ddc58e06cc028dacce35f71cdf59cf9b22f6c31dde221c22285e6185ede823ecb67f3b3065e26205eb9f74fcbba3f12ce7a2c2b09d7763 languageName: node linkType: hard @@ -3734,7 +3750,7 @@ __metadata: "atob@npm:^2.1.2": version: 2.1.2 - resolution: "atob@npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fatob%2Fdownload%2Fatob-2.1.2.tgz" + resolution: "atob@npm:2.1.2" bin: atob: bin/atob.js checksum: 597c0d1a740bb6522c98bea8fe362ae9420b4203af588d2bd470326d9abd4504264956b8355923d7019a21527ef5e6526a7b4455862ec5178ccd81e0ea289d5f @@ -3939,7 +3955,7 @@ __metadata: "base@npm:^0.11.1": version: 0.11.2 - resolution: "base@npm:0.11.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbase%2Fdownload%2Fbase-0.11.2.tgz" + resolution: "base@npm:0.11.2" dependencies: cache-base: ^1.0.1 class-utils: ^0.3.5 @@ -3961,7 +3977,7 @@ __metadata: "batch@npm:0.6.1": version: 0.6.1 - resolution: "batch@npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbatch%2Fdownload%2Fbatch-0.6.1.tgz" + resolution: "batch@npm:0.6.1" checksum: 4ec2d961e6af6e944e164eb1b8c5885bc4c85846d110ce2d55156ab2903dd1593f3c4a7b71c2cff81464a2973e1b91cc1bf86239a9ba44435a319eeae3346a91 languageName: node linkType: hard @@ -3984,7 +4000,7 @@ __metadata: "binary-extensions@npm:^1.0.0": version: 1.13.1 - resolution: "binary-extensions@npm:1.13.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz" + resolution: "binary-extensions@npm:1.13.1" checksum: 7cdacc6dadaffb6a4d250c39ca51e1fd7ba0fd846348e2813465dfaa7fce1e59a3465c1555578e7e4e7959023b47824cc387b37780e2160f52fface775cc0133 languageName: node linkType: hard @@ -3998,7 +4014,7 @@ __metadata: "bindings@npm:^1.5.0": version: 1.5.0 - resolution: "bindings@npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbindings%2Fdownload%2Fbindings-1.5.0.tgz" + resolution: "bindings@npm:1.5.0" dependencies: file-uri-to-path: 1.0.0 checksum: bd623dec58f126eb0c30f04a20da7080f06cdd5af26bf5a91615e70055fbba66c4cec5c88b156e8181c1d822f2392034a40a9121ef3ebc25638dc2163332b12d @@ -4025,7 +4041,7 @@ __metadata: "body-parser@npm:1.19.0": version: 1.19.0 - resolution: "body-parser@npm:1.19.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbody-parser%2Fdownload%2Fbody-parser-1.19.0.tgz" + resolution: "body-parser@npm:1.19.0" dependencies: bytes: 3.1.0 content-type: ~1.0.4 @@ -4043,7 +4059,7 @@ __metadata: "bonjour@npm:^3.5.0": version: 3.5.0 - resolution: "bonjour@npm:3.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbonjour%2Fdownload%2Fbonjour-3.5.0.tgz" + resolution: "bonjour@npm:3.5.0" dependencies: array-flatten: ^2.1.0 deep-equal: ^1.0.1 @@ -4062,10 +4078,10 @@ __metadata: languageName: node linkType: hard -"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 +"bootstrap-icons@npm:^1.1.0": + version: 1.1.0 + resolution: "bootstrap-icons@npm:1.1.0" + checksum: 9ce383c9103caad061b8babfee3bb4ea34b2337a6b7e79c4c87ec0a9012fb82932ddcd5072aab482408a17757ececfb1173de8390b20c1f6d4fc8fae4f4bbd81 languageName: node linkType: hard @@ -4091,7 +4107,7 @@ __metadata: "braces@npm:^2.3.1, braces@npm:^2.3.2": version: 2.3.2 - resolution: "braces@npm:2.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbraces%2Fdownload%2Fbraces-2.3.2.tgz" + resolution: "braces@npm:2.3.2" dependencies: arr-flatten: ^1.1.0 array-unique: ^0.3.2 @@ -4167,7 +4183,7 @@ __metadata: "buffer-indexof@npm:^1.0.0": version: 1.1.1 - resolution: "buffer-indexof@npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer-indexof%2Fdownload%2Fbuffer-indexof-1.1.1.tgz" + resolution: "buffer-indexof@npm:1.1.1" checksum: f7114185678d4ebd66b68a8d76feda5a66ea5df57101e7af1c3faef6ff98ca6ac15891da200d7eea99153573e110d05bc9fdf493278e3bd2b0f117e84ff08f64 languageName: node linkType: hard @@ -4191,14 +4207,14 @@ __metadata: "bytes@npm:3.0.0": version: 3.0.0 - resolution: "bytes@npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz" + resolution: "bytes@npm:3.0.0" checksum: 98d6c0ab36f7a5527226fd928e65495ffd3d53cb22da627eba3300eed36bd283ae3dfdf3a0aa017df13a09115b5b8847e3d51f66c2f0304a262264c86a317c05 languageName: node linkType: hard "bytes@npm:3.1.0": version: 3.1.0 - resolution: "bytes@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz" + resolution: "bytes@npm:3.1.0" checksum: c3f64645ef37922c8194fef88a052de2a28101882dfdf8a225493888c4941a26ea15164957e7492e5c5e3a8e98ee6276f4834efacb68e2d8ad4d91f903250b6c languageName: node linkType: hard @@ -4230,7 +4246,7 @@ __metadata: "cache-base@npm:^1.0.1": version: 1.0.1 - resolution: "cache-base@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcache-base%2Fdownload%2Fcache-base-1.0.1.tgz" + resolution: "cache-base@npm:1.0.1" dependencies: collection-visit: ^1.0.0 component-emitter: ^1.2.1 @@ -4284,7 +4300,14 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": +"camelcase@npm:^5.0.0": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 6a3350c4ea8ab6e5109e0b443cfaf43dc40abfad7b2d79dcafbbafbe9b6b4059b4365b17ad822e24cf08e6627c1ffb65a9651d05cef9fcc6f64b6a0c2f327feb + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz" checksum: 6a3350c4ea8ab6e5109e0b443cfaf43dc40abfad7b2d79dcafbbafbe9b6b4059b4365b17ad822e24cf08e6627c1ffb65a9651d05cef9fcc6f64b6a0c2f327feb @@ -4391,7 +4414,7 @@ __metadata: "chokidar@npm:^2.1.8": version: 2.1.8 - resolution: "chokidar@npm:2.1.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz" + resolution: "chokidar@npm:2.1.8" dependencies: anymatch: ^2.0.0 async-each: ^1.0.1 @@ -4437,7 +4460,7 @@ __metadata: "class-utils@npm:^0.3.5": version: 0.3.6 - resolution: "class-utils@npm:0.3.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fclass-utils%2Fdownload%2Fclass-utils-0.3.6.tgz" + resolution: "class-utils@npm:0.3.6" dependencies: arr-union: ^3.1.0 define-property: ^0.2.5 @@ -4491,7 +4514,7 @@ __metadata: "cliui@npm:^5.0.0": version: 5.0.0 - resolution: "cliui@npm:5.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz" + resolution: "cliui@npm:5.0.0" dependencies: string-width: ^3.1.0 strip-ansi: ^5.2.0 @@ -4525,7 +4548,7 @@ __metadata: "collection-visit@npm:^1.0.0": version: 1.0.0 - resolution: "collection-visit@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcollection-visit%2Fdownload%2Fcollection-visit-1.0.0.tgz" + resolution: "collection-visit@npm:1.0.0" dependencies: map-visit: ^1.0.0 object-visit: ^1.0.0 @@ -4649,14 +4672,14 @@ __metadata: "component-emitter@npm:^1.2.1": version: 1.3.0 - resolution: "component-emitter@npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcomponent-emitter%2Fdownload%2Fcomponent-emitter-1.3.0.tgz" + resolution: "component-emitter@npm:1.3.0" checksum: fc4edbf1014f0aed88dcec33ca02d2938734e428423f640d8a3f94975615b8e8c506c19e29b93949637c5a281353e75fa79e299e0d57732f42a9fe346cb2cad6 languageName: node linkType: hard "compressible@npm:~2.0.16": version: 2.0.18 - resolution: "compressible@npm:2.0.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz" + resolution: "compressible@npm:2.0.18" dependencies: mime-db: ">= 1.43.0 < 2" checksum: 8ac178b6ef4f72adc51e495f23f7212a4764395dde24e476046cca1db988859eef96453e11563bcf40d1bf74469cdd7db29539fd4ac553577d9812d3f112fada @@ -4665,7 +4688,7 @@ __metadata: "compression@npm:^1.7.4": version: 1.7.4 - resolution: "compression@npm:1.7.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz" + resolution: "compression@npm:1.7.4" dependencies: accepts: ~1.3.5 bytes: 3.0.0 @@ -4687,7 +4710,7 @@ __metadata: "connect-history-api-fallback@npm:^1.6.0": version: 1.6.0 - resolution: "connect-history-api-fallback@npm:1.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fconnect-history-api-fallback%2Fdownload%2Fconnect-history-api-fallback-1.6.0.tgz" + resolution: "connect-history-api-fallback@npm:1.6.0" checksum: 298f60415d5f5480b76f98d8bf83737cae9f05921e3d3479452cae34ed3498fab35a1c4c8f19ca5b327bbbe759098f5f6e5fc097d829f607d0d642b075c93e21 languageName: node linkType: hard @@ -4708,7 +4731,7 @@ __metadata: "content-disposition@npm:0.5.3": version: 0.5.3 - resolution: "content-disposition@npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-disposition%2Fdownload%2Fcontent-disposition-0.5.3.tgz" + resolution: "content-disposition@npm:0.5.3" dependencies: safe-buffer: 5.1.2 checksum: 8f1f235c0423be68023df7f5a3948601d859ce44ee94e1d0fa2a97383bd469e789320b6ddf6f31b3620605c75cf771522df11386f51aff401e5d51b6ccfde3e2 @@ -4717,7 +4740,7 @@ __metadata: "content-type@npm:~1.0.4": version: 1.0.4 - resolution: "content-type@npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-type%2Fdownload%2Fcontent-type-1.0.4.tgz" + resolution: "content-type@npm:1.0.4" checksum: ff6e19cbf281c23d5608723a6dc60ac97e2280bd4d21602511283112321e6c1555895e395555e367672b54a0f1585276284b7c3c8be313aca73902ac2f2609fd languageName: node linkType: hard @@ -4733,21 +4756,21 @@ __metadata: "cookie-signature@npm:1.0.6": version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie-signature%2Fdownload%2Fcookie-signature-1.0.6.tgz" + resolution: "cookie-signature@npm:1.0.6" checksum: 305054e102eebd0a483c63aefdc3abf54a9471bed5eb12be56c0dcf35a94110b8a13139b27751ab07a5ef09e9f4190ee67f71e9d3acf1748e6e2f1aed338c987 languageName: node linkType: hard "cookie@npm:0.4.0": version: 0.4.0 - resolution: "cookie@npm:0.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz" + resolution: "cookie@npm:0.4.0" checksum: 7aaef4b642c533600fdd001d963a507dfcd814267503374e51d9743475d024feeff8b0b4ddd0777a25791a2efbdfd8bc4a0fe0696104efa195e8f8584807d410 languageName: node linkType: hard "copy-descriptor@npm:^0.1.0": version: 0.1.1 - resolution: "copy-descriptor@npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-descriptor%2Fdownload%2Fcopy-descriptor-0.1.1.tgz" + resolution: "copy-descriptor@npm:0.1.1" checksum: c052cf571ff6b69b604607a3d41f03cb742af9472026013e690ab33e1bef5e64930c53a5f881dc79c7e4f5ccc3cea0ebb9f420315d3690989329088976b68ee9 languageName: node linkType: hard @@ -4844,7 +4867,7 @@ __metadata: "cross-spawn@npm:^6.0.0": version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz" + resolution: "cross-spawn@npm:6.0.5" dependencies: nice-try: ^1.0.4 path-key: ^2.0.1 @@ -5003,9 +5026,9 @@ __metadata: languageName: node linkType: hard -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.8, debug@npm:^2.6.9": +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3": version: 2.6.9 - resolution: "debug@npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz" + resolution: "debug@npm:2.6.9" dependencies: ms: 2.0.0 checksum: 559f44f98cf25e2ee489022aec173afbff746564cb108c4493becb95bc3c017a67bdaa25a0ff64801fd32c35051d00af0e56cc7f762ae2c3bc089496e5a1c31b @@ -5021,7 +5044,16 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.1, debug@npm:^3.2.5": +"debug@npm:^2.6.8, debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz" + dependencies: + ms: 2.0.0 + checksum: 559f44f98cf25e2ee489022aec173afbff746564cb108c4493becb95bc3c017a67bdaa25a0ff64801fd32c35051d00af0e56cc7f762ae2c3bc089496e5a1c31b + languageName: node + linkType: hard + +"debug@npm:^3.1.1": version: 3.2.6 resolution: "debug@npm:3.2.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz" dependencies: @@ -5030,6 +5062,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:^3.2.5": + version: 3.2.6 + resolution: "debug@npm:3.2.6" + dependencies: + ms: ^2.1.1 + checksum: 619feb53b115f1a8341365b8aa58a8757e6632738587d4b61b25627b74891211cb20e31fdbea37fec766e575a60cf456f7a02d6f9eddfdcef80caa6a4b0fc042 + languageName: node + linkType: hard + "debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1": version: 4.2.0 resolution: "debug@npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz" @@ -5046,14 +5087,14 @@ __metadata: "decamelize@npm:^1.2.0": version: 1.2.0 - resolution: "decamelize@npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz" + resolution: "decamelize@npm:1.2.0" checksum: 8ca9d03ea8ac07920f4504e219d18edff2491bdd0a3e05a1e5ca2e9a0bf6333564231de3528b01d5e76c40a38c37bbc1e09cb5a0424714f53dd615ed78ced464 languageName: node linkType: hard "decode-uri-component@npm:^0.2.0": version: 0.2.0 - resolution: "decode-uri-component@npm:0.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecode-uri-component%2Fdownload%2Fdecode-uri-component-0.2.0.tgz" + resolution: "decode-uri-component@npm:0.2.0" checksum: d8cb28c33f7b0a70b159b5fa126aee821ba090396689bd46ad2c423c3a658c504d2743ab18060fd5ed1cae5377bdd3632760a8e98ba920ff49637d43dc6a9687 languageName: node linkType: hard @@ -5069,7 +5110,7 @@ __metadata: "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" + resolution: "deep-equal@npm:1.1.1" dependencies: is-arguments: ^1.0.4 is-date-object: ^1.0.1 @@ -5104,7 +5145,7 @@ __metadata: "default-gateway@npm:^4.2.0": version: 4.2.0 - resolution: "default-gateway@npm:4.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz" + resolution: "default-gateway@npm:4.2.0" dependencies: execa: ^1.0.0 ip-regex: ^2.1.0 @@ -5130,7 +5171,7 @@ __metadata: "define-property@npm:^0.2.5": version: 0.2.5 - resolution: "define-property@npm:0.2.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-0.2.5.tgz" + resolution: "define-property@npm:0.2.5" dependencies: is-descriptor: ^0.1.0 checksum: 6fed0540727ca8ea1f5eacddf24bf9e8c212c07f638ef0cd743caa69647f0421cd72a17b466d4c378c5c0f232ad756fa92b90f8e1d975ddfec388dc6306e3583 @@ -5139,7 +5180,7 @@ __metadata: "define-property@npm:^1.0.0": version: 1.0.0 - resolution: "define-property@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-1.0.0.tgz" + resolution: "define-property@npm:1.0.0" dependencies: is-descriptor: ^1.0.0 checksum: 9034f8f6f3128945374349262e4f97b53e9582f9e3435bedb284c5210c45a98b355d40a42a570766add34a604d97b6ff0773bfd122f891a289009a1b82cc0eee @@ -5148,7 +5189,7 @@ __metadata: "define-property@npm:^2.0.2": version: 2.0.2 - resolution: "define-property@npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefine-property%2Fdownload%2Fdefine-property-2.0.2.tgz" + resolution: "define-property@npm:2.0.2" dependencies: is-descriptor: ^1.0.2 isobject: ^3.0.1 @@ -5187,21 +5228,21 @@ __metadata: "depd@npm:~1.1.2": version: 1.1.2 - resolution: "depd@npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz" + resolution: "depd@npm:1.1.2" checksum: f45566ff7019a346852f095768a380778ed544de24e103b479fd5d3e61982d670efbb5234c09d0588d7fdb09c26c48283d7150e4be5e6ce5d3d37cd268d75c4d languageName: node linkType: hard "destroy@npm:~1.0.4": version: 1.0.4 - resolution: "destroy@npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdestroy%2Fdownload%2Fdestroy-1.0.4.tgz" + resolution: "destroy@npm:1.0.4" checksum: 5a516fc5a8a8089eecdac11da2339353542be7a71102dc5a1372ef6161501bf5c1ee59ff9f8a3f5f14cc8c88594d606f855f816d46a228ee5e0e5cb2b543534b languageName: node linkType: hard "detect-node@npm:^2.0.4": version: 2.0.4 - resolution: "detect-node@npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetect-node%2Fdownload%2Fdetect-node-2.0.4.tgz" + resolution: "detect-node@npm:2.0.4" checksum: e7648a5a91dd5e91838d14f0e9631f2adf0117cc271ea86d8ce394a8fbe8fc7545755c8261faaf4b1e196795a10da99e5d5f1013163ba0f6260a57b0ba29cc60 languageName: node linkType: hard @@ -5224,14 +5265,14 @@ __metadata: "dns-equal@npm:^1.0.0": version: 1.0.0 - resolution: "dns-equal@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-equal%2Fdownload%2Fdns-equal-1.0.0.tgz" + resolution: "dns-equal@npm:1.0.0" checksum: 096be3c1a742c7c5bdcd39836f70cb060f4c453f0f48cae1830bf011813387912f97da34d247570b5ec547c61c404f06657a0092297f38d797b22a10b5801bfe languageName: node linkType: hard "dns-packet@npm:^1.3.1": version: 1.3.1 - resolution: "dns-packet@npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-packet%2Fdownload%2Fdns-packet-1.3.1.tgz" + resolution: "dns-packet@npm:1.3.1" dependencies: ip: ^1.1.0 safe-buffer: ^5.0.1 @@ -5241,7 +5282,7 @@ __metadata: "dns-txt@npm:^2.0.2": version: 2.0.2 - resolution: "dns-txt@npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fdns-txt%2Fdownload%2Fdns-txt-2.0.2.tgz" + resolution: "dns-txt@npm:2.0.2" dependencies: buffer-indexof: ^1.0.0 checksum: 62d4b87b09421f813dd03eb17866cb307e278555475b25752396d3e5c7e63b9f0f64ab5b41edeb755cb52d722600a89977d36c64a94d02ed92c32e44a8b849f2 @@ -5384,7 +5425,7 @@ __metadata: "ee-first@npm:1.1.1": version: 1.1.1 - resolution: "ee-first@npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fee-first%2Fdownload%2Fee-first-1.1.1.tgz" + resolution: "ee-first@npm:1.1.1" checksum: ba74f91398e3ee3b6d665b2f0d13ad6530e89a7e64ec886a6eec0602fb8a5a274652960e21bd5d4b42fdeb9017d873ff872f50342d38779e955285977edb337c languageName: node linkType: hard @@ -5433,7 +5474,7 @@ __metadata: "encodeurl@npm:~1.0.2": version: 1.0.2 - resolution: "encodeurl@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fencodeurl%2Fdownload%2Fencodeurl-1.0.2.tgz" + resolution: "encodeurl@npm:1.0.2" checksum: 6ee5fcbcd245d2a2b6bd6fe36b80f91e31ab46e29192c50af00e8f860c0c2310ebbdaae40257878fdce90b42abcb3526895c7c3a2e229461ed1f0d0b5a020fc8 languageName: node linkType: hard @@ -5573,7 +5614,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.18.0-next.0": +"es-abstract@npm:^1.18.0-next.0, es-abstract@npm:^1.18.0-next.1": version: 1.18.0-next.1 resolution: "es-abstract@npm:1.18.0-next.1" dependencies: @@ -5620,7 +5661,7 @@ __metadata: "escape-html@npm:~1.0.3": version: 1.0.3 - resolution: "escape-html@npm:1.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz" + resolution: "escape-html@npm:1.0.3" checksum: 900a7f2b80b9f89c85b7a303d1b7a4d354b93e328871414f165f13c5c209a80eab787e3a63429e596877def69fe4dcb3d1b55af655207a901a9ec99f7f148743 languageName: node linkType: hard @@ -5632,16 +5673,16 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^6.14.0": - version: 6.14.0 - resolution: "eslint-config-prettier@npm:6.14.0" +"eslint-config-prettier@npm:^6.15.0": + version: 6.15.0 + resolution: "eslint-config-prettier@npm:6.15.0" dependencies: get-stdin: ^6.0.0 peerDependencies: eslint: ">=3.14.1" bin: eslint-config-prettier-check: bin/cli.js - checksum: 8d478429bb6c63a538270b8d2fae13a2ffe5c5bd8401d2f478e9a65e1bc94ed6e0f6ca3d063a8decd0003ad91ef26ca32fadf2d08f3e2d7dd4c76ee8efea6711 + checksum: a790bc61699e43a2edc5453488576cd977fad3b3cf99c129c10760ce6970d422923fddf80b65b2b10a93c00af0180a854e4b7824cc268e5957826cbe5b969e90 languageName: node linkType: hard @@ -5912,7 +5953,7 @@ __metadata: "etag@npm:~1.8.1": version: 1.8.1 - resolution: "etag@npm:1.8.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fetag%2Fdownload%2Fetag-1.8.1.tgz" + resolution: "etag@npm:1.8.1" checksum: f18341a3c12a554ec46c0d4756bc9cae177e92f25a4ebd9ceefebf0ee448b675972fc110879f22b1bf514174713921ae5de9ff77af2062d422b1085588465a57 languageName: node linkType: hard @@ -5933,7 +5974,7 @@ __metadata: "eventsource@npm:^1.0.7": version: 1.0.7 - resolution: "eventsource@npm:1.0.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.0.7.tgz" + resolution: "eventsource@npm:1.0.7" dependencies: original: ^1.0.0 checksum: 058506715061d4613c004854c1220d57091445ba73599f9eb232273be1119f13d3568df1a3d866bf94333fbcd138cc45268c454376ee48c3b432a26767961815 @@ -5942,7 +5983,7 @@ __metadata: "execa@npm:^1.0.0": version: 1.0.0 - resolution: "execa@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz" + resolution: "execa@npm:1.0.0" dependencies: cross-spawn: ^6.0.0 get-stream: ^4.0.0 @@ -5981,7 +6022,7 @@ __metadata: "expand-brackets@npm:^2.1.4": version: 2.1.4 - resolution: "expand-brackets@npm:2.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpand-brackets%2Fdownload%2Fexpand-brackets-2.1.4.tgz" + resolution: "expand-brackets@npm:2.1.4" dependencies: debug: ^2.3.3 define-property: ^0.2.5 @@ -5996,7 +6037,7 @@ __metadata: "express@npm:^4.17.1": version: 4.17.1 - resolution: "express@npm:4.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz" + resolution: "express@npm:4.17.1" dependencies: accepts: ~1.3.7 array-flatten: 1.1.1 @@ -6034,7 +6075,7 @@ __metadata: "extend-shallow@npm:^2.0.1": version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-2.0.1.tgz" + resolution: "extend-shallow@npm:2.0.1" dependencies: is-extendable: ^0.1.0 checksum: 03dbbba8b9711409442428f4e0f80a92f86862a4d2559fa9629dd7080e85cacc6311c84ebea8b22b5ff40d3ef6475bbf534f098b77b7624448276708e60fa248 @@ -6043,7 +6084,7 @@ __metadata: "extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend-shallow%2Fdownload%2Fextend-shallow-3.0.2.tgz" + resolution: "extend-shallow@npm:3.0.2" dependencies: assign-symbols: ^1.0.0 is-extendable: ^1.0.1 @@ -6060,7 +6101,7 @@ __metadata: "extglob@npm:^2.0.4": version: 2.0.4 - resolution: "extglob@npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fextglob%2Fdownload%2Fextglob-2.0.4.tgz" + resolution: "extglob@npm:2.0.4" dependencies: array-unique: ^0.3.2 define-property: ^1.0.0 @@ -6134,7 +6175,7 @@ __metadata: "faye-websocket@npm:^0.10.0": version: 0.10.0 - resolution: "faye-websocket@npm:0.10.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.10.0.tgz" + resolution: "faye-websocket@npm:0.10.0" dependencies: websocket-driver: ">=0.5.1" checksum: 2a5823ddfb39ec7ef952dd1adab4c28fd162f5ee175f40f8d7467560554299199c1f0aa505e0fe14a85452c76d0c4dbee32f8327c71bf2f61a32f62538843111 @@ -6143,7 +6184,7 @@ __metadata: "faye-websocket@npm:~0.11.1": version: 0.11.3 - resolution: "faye-websocket@npm:0.11.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.3.tgz" + resolution: "faye-websocket@npm:0.11.3" dependencies: websocket-driver: ">=0.5.1" checksum: 94c48a5b4e9ab6ff05a424dfeebe0da6c7963776172c8713588926f1e15348c423e440c601360d105602586d59f8daeed5dadb76e29070f0b468ebd55e1f868d @@ -6159,28 +6200,28 @@ __metadata: languageName: node linkType: hard -"file-loader@npm:^6.1.1": - version: 6.1.1 - resolution: "file-loader@npm:6.1.1" +"file-loader@npm:^6.2.0": + version: 6.2.0 + resolution: "file-loader@npm:6.2.0" dependencies: loader-utils: ^2.0.0 schema-utils: ^3.0.0 peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: 0272335818c26e5c78a9f972ce779c8ed508e815329e4ace4d55045100140d89460d72eec1af78400dd04f2d16e28e29b3649433804619653cf044220afdf45d + checksum: 0f103418c072ec66c081a9908cd7824ee19905e18be16889cb050f5f373998afaf7ca4c2fd2df4cabf703a2cd526aefe59105930e3f8d266a5b35e6d5f5b3cf4 languageName: node linkType: hard "file-uri-to-path@npm:1.0.0": version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-uri-to-path%2Fdownload%2Ffile-uri-to-path-1.0.0.tgz" + resolution: "file-uri-to-path@npm:1.0.0" checksum: 5ddb9682f04f6f87b7765b93306206db2f96bc86162487e27639c55fe3ffeed12c30906ef1dedaa5307d7cabbbbdcbfa299b79aaec435de0f17e17ab31bd20b3 languageName: node linkType: hard "fill-range@npm:^4.0.0": version: 4.0.0 - resolution: "fill-range@npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffill-range%2Fdownload%2Ffill-range-4.0.0.tgz" + resolution: "fill-range@npm:4.0.0" dependencies: extend-shallow: ^2.0.1 is-number: ^3.0.0 @@ -6201,7 +6242,7 @@ __metadata: "finalhandler@npm:~1.1.2": version: 1.1.2 - resolution: "finalhandler@npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffinalhandler%2Fdownload%2Ffinalhandler-1.1.2.tgz" + resolution: "finalhandler@npm:1.1.2" dependencies: debug: 2.6.9 encodeurl: ~1.0.2 @@ -6307,7 +6348,7 @@ __metadata: "for-in@npm:^1.0.2": version: 1.0.2 - resolution: "for-in@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffor-in%2Fdownload%2Ffor-in-1.0.2.tgz" + resolution: "for-in@npm:1.0.2" checksum: e8d7280a654216e9951103e407d1655c2dfa67178ad468cb0b35701df6b594809ccdc66671b3478660d0e6c4bca9d038b1f1fc032716a184c19d67319550c554 languageName: node linkType: hard @@ -6332,14 +6373,14 @@ __metadata: "forwarded@npm:~0.1.2": version: 0.1.2 - resolution: "forwarded@npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fforwarded%2Fdownload%2Fforwarded-0.1.2.tgz" + resolution: "forwarded@npm:0.1.2" checksum: 568d862ad1c514813fc62dc1bd58b8669b16d4ee2e634a6fc71f4849df798883ab94e63d8e1b35a17af51b2b39ca869e672c7310efe42fc7b9bad43a80b5ff87 languageName: node linkType: hard "fragment-cache@npm:^0.2.1": version: 0.2.1 - resolution: "fragment-cache@npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffragment-cache%2Fdownload%2Ffragment-cache-0.2.1.tgz" + resolution: "fragment-cache@npm:0.2.1" dependencies: map-cache: ^0.2.2 checksum: f88983f4bf54f9a8847d15e54518535aecbfa9b7f0242604ca5cd027d88ea1469212b5dbb579233e769d0e2f4e6764bc6bbac44731fb78b9964942165c7c3048 @@ -6348,7 +6389,7 @@ __metadata: "fresh@npm:0.5.2": version: 0.5.2 - resolution: "fresh@npm:0.5.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffresh%2Fdownload%2Ffresh-0.5.2.tgz" + resolution: "fresh@npm:0.5.2" checksum: 2f76c8505d1ea5a6d5accea3e7aff0b796bfa43364c84929254f33909fa08640948bd1728220d1ff5f4c2b378a65e97da647f2fe0f2b7ddb44001f6e0dc2e91f languageName: node linkType: hard @@ -6389,7 +6430,7 @@ __metadata: fsevents@^1.2.7: version: 1.2.13 - resolution: "fsevents@npm:1.2.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz" + resolution: "fsevents@npm:1.2.13" dependencies: bindings: ^1.5.0 nan: ^2.12.1 @@ -6399,7 +6440,7 @@ fsevents@^1.2.7: "fsevents@patch:fsevents@^1.2.7#builtin": version: 1.2.13 - resolution: "fsevents@patch:fsevents@npm%3A1.2.13%3A%3A__archiveUrl=https%253A%252F%252Fregistry.npm.taobao.org%252Ffsevents%252Fdownload%252Ffsevents-1.2.13.tgz#builtin::version=1.2.13&hash=495457" + resolution: "fsevents@patch:fsevents@npm%3A1.2.13#builtin::version=1.2.13&hash=495457" dependencies: bindings: ^1.5.0 nan: ^2.12.1 @@ -6464,7 +6505,7 @@ fsevents@~2.1.2: "get-caller-file@npm:^2.0.1": version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-caller-file%2Fdownload%2Fget-caller-file-2.0.5.tgz" + resolution: "get-caller-file@npm:2.0.5" checksum: 9dd9e1e2591039ee4c38c897365b904f66f1e650a8c1cb7b7db8ce667fa63e88cc8b13282b74df9d93de481114b3304a0487880d31cd926dfda6efe71455855d languageName: node linkType: hard @@ -6485,7 +6526,7 @@ fsevents@~2.1.2: "get-stream@npm:^4.0.0": version: 4.1.0 - resolution: "get-stream@npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz" + resolution: "get-stream@npm:4.1.0" dependencies: pump: ^3.0.0 checksum: f41bb3c74de09d1dbe1e9d0b6d12520875d99b7ecd32c71ee21eea26d32ca74110e2406922ca64ed8cd6f10076c5f59e4fd128f10cc292eae3b669379e5f18ed @@ -6512,7 +6553,7 @@ fsevents@~2.1.2: "get-value@npm:^2.0.3, get-value@npm:^2.0.6": version: 2.0.6 - resolution: "get-value@npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-value%2Fdownload%2Fget-value-2.0.6.tgz" + resolution: "get-value@npm:2.0.6" checksum: f08da3262718e0f2617703cc99ecd0ddb4cca1541b0022118f898824c99157778e044c802160688dc184b17e5a894d11c5771aaadc376c68cdf66bdbc25ff865 languageName: node linkType: hard @@ -6528,7 +6569,7 @@ fsevents@~2.1.2: "glob-parent@npm:^3.1.0": version: 3.1.0 - resolution: "glob-parent@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz" + resolution: "glob-parent@npm:3.1.0" dependencies: is-glob: ^3.1.0 path-dirname: ^1.0.0 @@ -6635,16 +6676,16 @@ fsevents@~2.1.2: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.2.4": version: 4.2.4 - resolution: "graceful-fs@npm:4.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz" + resolution: "graceful-fs@npm:4.2.4" checksum: d095ee4dc6eacc76814cd52d5d185b860119378a6fd4888e7d4e94983095c54d4f6369942a5e3d759cdbdd4e3ee7eaeb27a39ff938c6ee4610894fd9de46b6cb languageName: node linkType: hard -"graceful-fs@npm:^4.2.4": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3": version: 4.2.4 - resolution: "graceful-fs@npm:4.2.4" + resolution: "graceful-fs@npm:4.2.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz" checksum: d095ee4dc6eacc76814cd52d5d185b860119378a6fd4888e7d4e94983095c54d4f6369942a5e3d759cdbdd4e3ee7eaeb27a39ff938c6ee4610894fd9de46b6cb languageName: node linkType: hard @@ -6658,7 +6699,7 @@ fsevents@~2.1.2: "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" + resolution: "handle-thing@npm:2.0.1" checksum: 7509fca9ebc8c119c8d36a7de19216dfcd120a2f9ac0a7f4e7836549561f728bfe4d86fbe604805c0f4d574c2eed756c54486b9ddc436d0387d8397c7c00a434 languageName: node linkType: hard @@ -6726,7 +6767,7 @@ fsevents@~2.1.2: "has-value@npm:^0.3.1": version: 0.3.1 - resolution: "has-value@npm:0.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-0.3.1.tgz" + resolution: "has-value@npm:0.3.1" dependencies: get-value: ^2.0.3 has-values: ^0.1.4 @@ -6737,7 +6778,7 @@ fsevents@~2.1.2: "has-value@npm:^1.0.0": version: 1.0.0 - resolution: "has-value@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-value%2Fdownload%2Fhas-value-1.0.0.tgz" + resolution: "has-value@npm:1.0.0" dependencies: get-value: ^2.0.6 has-values: ^1.0.0 @@ -6748,14 +6789,14 @@ fsevents@~2.1.2: "has-values@npm:^0.1.4": version: 0.1.4 - resolution: "has-values@npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-0.1.4.tgz" + resolution: "has-values@npm:0.1.4" checksum: df7ac830e460d399b181203c12cacaeaa1dcf0febceeed78fcfa0a6354879aa6c64c6b1ec049ce1c850a9b545d7a85fecc71741a5b743e0ad5dbd3e9928adff6 languageName: node linkType: hard "has-values@npm:^1.0.0": version: 1.0.0 - resolution: "has-values@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-values%2Fdownload%2Fhas-values-1.0.0.tgz" + resolution: "has-values@npm:1.0.0" dependencies: is-number: ^3.0.0 kind-of: ^4.0.0 @@ -6813,7 +6854,7 @@ fsevents@~2.1.2: "hpack.js@npm:^2.1.6": version: 2.1.6 - resolution: "hpack.js@npm:2.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhpack.js%2Fdownload%2Fhpack.js-2.1.6.tgz" + resolution: "hpack.js@npm:2.1.6" dependencies: inherits: ^2.0.1 obuf: ^1.0.0 @@ -6823,20 +6864,13 @@ fsevents@~2.1.2: languageName: node linkType: hard -"html-entities@npm:^1.2.1": +"html-entities@npm:^1.2.1, html-entities@npm:^1.3.1": version: 1.3.1 resolution: "html-entities@npm:1.3.1" checksum: 53d37e5161230ad7f2c16dd2b54945069d84b5167113eac55e39a8fffed357378afc022d5dc66045b132ea46232cab41aee86e79dd5cd0618e0b78776b9085b5 languageName: node linkType: hard -"html-entities@npm:^1.3.1": - version: 1.3.1 - resolution: "html-entities@npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz" - checksum: 53d37e5161230ad7f2c16dd2b54945069d84b5167113eac55e39a8fffed357378afc022d5dc66045b132ea46232cab41aee86e79dd5cd0618e0b78776b9085b5 - languageName: node - linkType: hard - "html-minifier-terser@npm:^5.0.1": version: 5.1.1 resolution: "html-minifier-terser@npm:5.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-minifier-terser%2Fdownload%2Fhtml-minifier-terser-5.1.1.tgz" @@ -6905,14 +6939,14 @@ fsevents@~2.1.2: "http-deceiver@npm:^1.2.7": version: 1.2.7 - resolution: "http-deceiver@npm:1.2.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-deceiver%2Fdownload%2Fhttp-deceiver-1.2.7.tgz" + resolution: "http-deceiver@npm:1.2.7" checksum: d0b10fce2548f9ffda9dc1707224e009ea9c132f3df7df2ba1d293a91c5f21efea618bc3737a21116b427c3d09187649b0158582f9174d2b61cd69bee7939d7d languageName: node linkType: hard "http-errors@npm:1.7.2": version: 1.7.2 - resolution: "http-errors@npm:1.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz" + resolution: "http-errors@npm:1.7.2" dependencies: depd: ~1.1.2 inherits: 2.0.3 @@ -6925,7 +6959,7 @@ fsevents@~2.1.2: "http-errors@npm:~1.6.2": version: 1.6.3 - resolution: "http-errors@npm:1.6.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz" + resolution: "http-errors@npm:1.6.3" dependencies: depd: ~1.1.2 inherits: 2.0.3 @@ -6937,7 +6971,7 @@ fsevents@~2.1.2: "http-errors@npm:~1.7.2": version: 1.7.3 - resolution: "http-errors@npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.3.tgz" + resolution: "http-errors@npm:1.7.3" dependencies: depd: ~1.1.2 inherits: 2.0.4 @@ -6950,7 +6984,7 @@ fsevents@~2.1.2: "http-proxy-middleware@npm:0.19.1": version: 0.19.1 - resolution: "http-proxy-middleware@npm:0.19.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz" + resolution: "http-proxy-middleware@npm:0.19.1" dependencies: http-proxy: ^1.17.0 is-glob: ^4.0.0 @@ -6960,7 +6994,18 @@ fsevents@~2.1.2: languageName: node linkType: hard -"http-proxy@npm:^1.17.0, http-proxy@npm:^1.18.0": +"http-proxy@npm:^1.17.0": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: fc2062718d77868eff0d2707652d7e0d302a0f85d90f317daa410df5c41fbe009589c80bc73cc72a44368bb37d071c8f52aaa5b3ce82a08f3524a79ddf178b9b + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.0": version: 1.18.1 resolution: "http-proxy@npm:1.18.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz" dependencies: @@ -7047,7 +7092,7 @@ fsevents@~2.1.2: "iconv-lite@npm:0.4.24": version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz" + resolution: "iconv-lite@npm:0.4.24" dependencies: safer-buffer: ">= 2.1.2 < 3" checksum: a9b9521066ee81853a8561e92bd7240bc5d3b7d5ef7da807a475e7858b0246e318b6af518c30a20a8749ef5eafeaa9631079446e4e696c7b60f468b34dc2cbfc @@ -7113,7 +7158,7 @@ fsevents@~2.1.2: "import-local@npm:^2.0.0": version: 2.0.0 - resolution: "import-local@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-local%2Fdownload%2Fimport-local-2.0.0.tgz" + resolution: "import-local@npm:2.0.0" dependencies: pkg-dir: ^3.0.0 resolve-cwd: ^2.0.0 @@ -7173,7 +7218,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz" checksum: 98426da247ddfc3dcd7d7daedd90c3ca32d5b08deca08949726f12d49232aef94772a07b36cf4ff833e105ae2ef931777f6de4a6dd8245a216b9299ad4a50bea @@ -7182,14 +7227,21 @@ fsevents@~2.1.2: "inherits@npm:2.0.3": version: 2.0.3 - resolution: "inherits@npm:2.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz" + resolution: "inherits@npm:2.0.3" checksum: 9488f9433effbc24474f6baee8014e5337c7f99305ecb4204fa5864ae7655c24225780d87fc65ed8d3d374715a18c5dc8c69fe3bf9745cde2e7acd0ac068a07b languageName: node linkType: hard +"inherits@npm:2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 98426da247ddfc3dcd7d7daedd90c3ca32d5b08deca08949726f12d49232aef94772a07b36cf4ff833e105ae2ef931777f6de4a6dd8245a216b9299ad4a50bea + languageName: node + linkType: hard + "internal-ip@npm:^4.3.0": version: 4.3.0 - resolution: "internal-ip@npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz" + resolution: "internal-ip@npm:4.3.0" dependencies: default-gateway: ^4.2.0 ipaddr.js: ^1.9.0 @@ -7226,35 +7278,35 @@ fsevents@~2.1.2: "ip-regex@npm:^2.1.0": version: 2.1.0 - resolution: "ip-regex@npm:2.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip-regex%2Fdownload%2Fip-regex-2.1.0.tgz" + resolution: "ip-regex@npm:2.1.0" checksum: 2fd2190ada81b55a8a6f913bcb5a6fd6ff9da127905b4c01521f09a1d391e86d415dfe8c131ed2989d536949bb2f9654a71b9fa6f7ae2ac3ae6111b2026cc902 languageName: node linkType: hard "ip@npm:^1.1.0, ip@npm:^1.1.5": version: 1.1.5 - resolution: "ip@npm:1.1.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fip%2Fdownload%2Fip-1.1.5.tgz" + resolution: "ip@npm:1.1.5" checksum: 3ad007368cf797ec9b73fbac0a644077198dd85a128d0fe39697a78a9cdd47915577eee5c4eca9933549b575ac4716107896c2d4aa43a1622b3f72104232cad4 languageName: node linkType: hard "ipaddr.js@npm:1.9.1, ipaddr.js@npm:^1.9.0": version: 1.9.1 - resolution: "ipaddr.js@npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fipaddr.js%2Fdownload%2Fipaddr.js-1.9.1.tgz" + resolution: "ipaddr.js@npm:1.9.1" checksum: de15bc7e63973d960abc43c9fbbf19589c726774f59d157d1b29382a1e86ae87c68cbd8b5c78a1712a87fc4fcd91e10762c7671950c66a1a19040ff4fd2f9c9b languageName: node linkType: hard "is-absolute-url@npm:^3.0.3": version: 3.0.3 - resolution: "is-absolute-url@npm:3.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz" + resolution: "is-absolute-url@npm:3.0.3" checksum: 1beac700465defee2bfa881cafcf144f3365cf0f748d62880e4a726c1de525ac39e8203bed14032f10509916dd392908e24d50ce1c1a444b44655a74708f9556 languageName: node linkType: hard "is-accessor-descriptor@npm:^0.1.6": version: 0.1.6 - resolution: "is-accessor-descriptor@npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-0.1.6.tgz" + resolution: "is-accessor-descriptor@npm:0.1.6" dependencies: kind-of: ^3.0.2 checksum: 7a7fca21855f7f5e56706d34ce089bc95b78db4ee0d11f554b642ac06b508452aaf26ffdf5dc0680c99f66e2043d78ab659760c417af60fd067ae0f09717d3cc @@ -7263,7 +7315,7 @@ fsevents@~2.1.2: "is-accessor-descriptor@npm:^1.0.0": version: 1.0.0 - resolution: "is-accessor-descriptor@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-accessor-descriptor%2Fdownload%2Fis-accessor-descriptor-1.0.0.tgz" + resolution: "is-accessor-descriptor@npm:1.0.0" dependencies: kind-of: ^6.0.0 checksum: 3973215c2eaea260a33d8ab227f56dc1f9bf085f68a1a27e3108378917482369992b907a57ae05a72a16591af174cf5206efca3faf608fb36eaca675f2841e13 @@ -7272,7 +7324,7 @@ fsevents@~2.1.2: "is-arguments@npm:^1.0.4": version: 1.0.4 - resolution: "is-arguments@npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.0.4.tgz" + resolution: "is-arguments@npm:1.0.4" checksum: a04bc21254cfbb77c934ec51165ef7629c12cabd2a92c2c4333280b5117f138fcec6369dd2ab7d8fe24e3af7dbc2a4ce389c53ed0b55b0f8818788c3c09f4ad2 languageName: node linkType: hard @@ -7286,7 +7338,7 @@ fsevents@~2.1.2: "is-binary-path@npm:^1.0.0": version: 1.0.1 - resolution: "is-binary-path@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-binary-path%2Fdownload%2Fis-binary-path-1.0.1.tgz" + resolution: "is-binary-path@npm:1.0.1" dependencies: binary-extensions: ^1.0.0 checksum: 25a2cda1e504403a179d1daf2773d6ea47ce383e912bc695bb9e923b5d5468447e239499be5c2212c7508be7777196810f8307e1d1f0e83a6191425eb22c2887 @@ -7304,7 +7356,7 @@ fsevents@~2.1.2: "is-buffer@npm:^1.1.5": version: 1.1.6 - resolution: "is-buffer@npm:1.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz" + resolution: "is-buffer@npm:1.1.6" checksum: 336ec78f00e88efe6ff6f1aa08d06aadb942a6cd320e5f538ac00648378fb964743b3737c88ce7ce8741c067e4a3b78f596b83ee1a3c72dc2885ea0b03dc84f2 languageName: node linkType: hard @@ -7334,7 +7386,7 @@ fsevents@~2.1.2: "is-data-descriptor@npm:^0.1.4": version: 0.1.4 - resolution: "is-data-descriptor@npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-0.1.4.tgz" + resolution: "is-data-descriptor@npm:0.1.4" dependencies: kind-of: ^3.0.2 checksum: 51db89bb4676b871a67f371f665dcf9c3fabb84e26b411beff42fb3b5505cdc0e33eeb1aeaa9c0400eb6d372a3b241c23a6953b5902397e5ff212cfbfd9edcda @@ -7343,7 +7395,7 @@ fsevents@~2.1.2: "is-data-descriptor@npm:^1.0.0": version: 1.0.0 - resolution: "is-data-descriptor@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-data-descriptor%2Fdownload%2Fis-data-descriptor-1.0.0.tgz" + resolution: "is-data-descriptor@npm:1.0.0" dependencies: kind-of: ^6.0.0 checksum: 0297518899d51c498987b1cc64fde72b0300f93a09669b6653a4d56a9cfb40c85b5988e52e36b10e88d17ad13b1927932f4631ddc02f10fa1d44a1e3150d31cd @@ -7359,7 +7411,7 @@ fsevents@~2.1.2: "is-descriptor@npm:^0.1.0": version: 0.1.6 - resolution: "is-descriptor@npm:0.1.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-0.1.6.tgz" + resolution: "is-descriptor@npm:0.1.6" dependencies: is-accessor-descriptor: ^0.1.6 is-data-descriptor: ^0.1.4 @@ -7370,7 +7422,7 @@ fsevents@~2.1.2: "is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": version: 1.0.2 - resolution: "is-descriptor@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-descriptor%2Fdownload%2Fis-descriptor-1.0.2.tgz" + resolution: "is-descriptor@npm:1.0.2" dependencies: is-accessor-descriptor: ^1.0.0 is-data-descriptor: ^1.0.0 @@ -7381,21 +7433,28 @@ fsevents@~2.1.2: "is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": version: 0.1.1 - resolution: "is-extendable@npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-0.1.1.tgz" + resolution: "is-extendable@npm:0.1.1" checksum: 9d051e68c38b09c242564b62d98cdcc0ba5b20421340c95d5ae023955dcaf31ae1d614e1eb7a18a6358d4c47ea77d811623e1777a0589df9ac5928c370edd5e5 languageName: node linkType: hard "is-extendable@npm:^1.0.1": version: 1.0.1 - resolution: "is-extendable@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extendable%2Fdownload%2Fis-extendable-1.0.1.tgz" + resolution: "is-extendable@npm:1.0.1" dependencies: is-plain-object: ^2.0.4 checksum: 2bf711afe60cc99f46699015c444db8f06c9c5553dd2b26fd8cb663fcec4bf00df1c11d02e28a8cc97b8efb49315c3c3fcf6ce1ceb09341af8e4fcccde516dd7 languageName: node linkType: hard -"is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": +"is-extglob@npm:^2.1.0": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: ca623e2c56c893714a237aff645ec7caa8fea4d78868682af8d6803d7f0780323f8d566311e0dc6f942c886e81cbfa517597e48fcada7f3bf78a4d099eeecdd3 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-extglob%2Fdownload%2Fis-extglob-2.1.1.tgz" checksum: ca623e2c56c893714a237aff645ec7caa8fea4d78868682af8d6803d7f0780323f8d566311e0dc6f942c886e81cbfa517597e48fcada7f3bf78a4d099eeecdd3 @@ -7420,7 +7479,7 @@ fsevents@~2.1.2: "is-glob@npm:^3.1.0": version: 3.1.0 - resolution: "is-glob@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz" + resolution: "is-glob@npm:3.1.0" dependencies: is-extglob: ^2.1.0 checksum: 9911e04e28285c50bfd5ff79950c6cf712ed9d959ef640acba2daeca8a17a921494b78b3143d5d1749c4dc3bbeb296b8955064a4f17d014112f0c63a239322d6 @@ -7452,7 +7511,7 @@ fsevents@~2.1.2: "is-number@npm:^3.0.0": version: 3.0.0 - resolution: "is-number@npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-number%2Fdownload%2Fis-number-3.0.0.tgz" + resolution: "is-number@npm:3.0.0" dependencies: kind-of: ^3.0.2 checksum: ae03986dedb1e414cfef5402b24c9be5e9171bc77fdaa189f468144e801b23d8abaa9bf52fb882295558a042fbb0192fb3f80759a010073884eff9ee3f196962 @@ -7500,28 +7559,28 @@ fsevents@~2.1.2: "is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz" + resolution: "is-plain-object@npm:2.0.4" dependencies: isobject: ^3.0.1 checksum: 2f3232267366f3cdf13d53deda1b282ba7959f28ccb2ee8e0ca168f859f0d7126c27c846ebb7c2b9821a09bbda2e1835fd4020337ba666cf3c03dc256aab7ba1 languageName: node linkType: hard -"is-regex@npm:^1.0.4, is-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "is-regex@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.0.tgz" +"is-regex@npm:^1.0.4, is-regex@npm:^1.1.1": + version: 1.1.1 + resolution: "is-regex@npm:1.1.1" dependencies: has-symbols: ^1.0.1 - checksum: 8fe7ae8c060ff831660be439c17a39dadc97c950d2636634f27db83b6a048695b1c46d304ba8a77efe906fb20c99755fdf4a1f628fcf75de3cdcbb687096bdaa + checksum: 0c5b9d335c125cc59a83b9446b172d419303034f3cb570e95bfb7b45fc1dfb8bedd7ecf5e8139a99b8fed66894ee516fd7ce376feb109504f64c53092c7f07ee languageName: node linkType: hard -"is-regex@npm:^1.1.1": - version: 1.1.1 - resolution: "is-regex@npm:1.1.1" +"is-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "is-regex@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.0.tgz" dependencies: has-symbols: ^1.0.1 - checksum: 0c5b9d335c125cc59a83b9446b172d419303034f3cb570e95bfb7b45fc1dfb8bedd7ecf5e8139a99b8fed66894ee516fd7ce376feb109504f64c53092c7f07ee + checksum: 8fe7ae8c060ff831660be439c17a39dadc97c950d2636634f27db83b6a048695b1c46d304ba8a77efe906fb20c99755fdf4a1f628fcf75de3cdcbb687096bdaa languageName: node linkType: hard @@ -7534,7 +7593,7 @@ fsevents@~2.1.2: "is-stream@npm:^1.1.0": version: 1.1.0 - resolution: "is-stream@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-stream%2Fdownload%2Fis-stream-1.1.0.tgz" + resolution: "is-stream@npm:1.1.0" checksum: 39843ee9ff68ebda05237199f18831eb6e0e28db7799ee9ddaac5573b0681f18b4dc427afdb7b7ad906db545e4648999c42a1810b277acc8451593ff59da00fa languageName: node linkType: hard @@ -7571,14 +7630,14 @@ fsevents@~2.1.2: "is-windows@npm:^1.0.2": version: 1.0.2 - resolution: "is-windows@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-windows%2Fdownload%2Fis-windows-1.0.2.tgz" + resolution: "is-windows@npm:1.0.2" checksum: dd1ed8339a28c68fb52f05931c832488dafc90063e53b97a69ead219a5584d7f3e6e564731c2f983962ff5403afeb05365d88ce9af34c8dae76a14911020d73a languageName: node linkType: hard "is-wsl@npm:^1.1.0": version: 1.1.0 - resolution: "is-wsl@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz" + resolution: "is-wsl@npm:1.1.0" checksum: 0f15cf5d5ff025afb0ba9cb49fd425b5d533b2af700533d343b7fa9aaca2f6c8242ba1c1a4e30c925522816bf0172fec2ae7cacaae682c91ffa0cd3f88ff1e8e languageName: node linkType: hard @@ -7622,7 +7681,7 @@ fsevents@~2.1.2: "isobject@npm:^3.0.0, isobject@npm:^3.0.1": version: 3.0.1 - resolution: "isobject@npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fisobject%2Fdownload%2Fisobject-3.0.1.tgz" + resolution: "isobject@npm:3.0.1" checksum: b537a9ccdd8d40ec552fe7ff5db3731f1deb77581adf9beb8ae812f8d08acfa0e74b193159ac50fb01084d7ade06d114077f984e21b8340531241bf85be9a0ab languageName: node linkType: hard @@ -7777,7 +7836,7 @@ fsevents@~2.1.2: "json3@npm:^3.3.2": version: 3.3.3 - resolution: "json3@npm:3.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson3%2Fdownload%2Fjson3-3.3.3.tgz" + resolution: "json3@npm:3.3.3" checksum: f79831247f3ecdd4e99996534a171ccd20f34502b799dd53b671af8a7d7ac1228a7d806c100948cc16f3437da5ea0b821e2c44f8372a2a4095a0abebf0fb41ef languageName: node linkType: hard @@ -7849,14 +7908,14 @@ fsevents@~2.1.2: "killable@npm:^1.0.1": version: 1.0.1 - resolution: "killable@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkillable%2Fdownload%2Fkillable-1.0.1.tgz" + resolution: "killable@npm:1.0.1" checksum: 397df2b8a74b800b5d19986375fe6d5e2c548163f1da49eee8b03bb0fa7e98ae8c5b93d9f34b83634d3a32a9b239f758e6de388b4bedb50f2f438fc91434e92f languageName: node linkType: hard "kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": version: 3.2.2 - resolution: "kind-of@npm:3.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz" + resolution: "kind-of@npm:3.2.2" dependencies: is-buffer: ^1.1.5 checksum: e8a1835c4baa9b52666cd5d8ae89e6b9b9f5978600a30ba75fc92da332d1ba182bda90aa7372fc992a3eb6da261dc3fea0f136af24ddc87cfb668d40c817af56 @@ -7865,7 +7924,7 @@ fsevents@~2.1.2: "kind-of@npm:^4.0.0": version: 4.0.0 - resolution: "kind-of@npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-4.0.0.tgz" + resolution: "kind-of@npm:4.0.0" dependencies: is-buffer: ^1.1.5 checksum: 2e7296c614f54ba9cdcab4c389ec9d8f6ed7955c661b4bd075d5c1b67107ee00263a82aa12f76b61209e9d93f4949ee3d20c6ff17a8b0d199d84ba06d6f59478 @@ -7874,14 +7933,14 @@ fsevents@~2.1.2: "kind-of@npm:^5.0.0": version: 5.1.0 - resolution: "kind-of@npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-5.1.0.tgz" + resolution: "kind-of@npm:5.1.0" checksum: c98cfe70c805a7a3a10ec4399fac2884fb4b277494baffea0712a5e8de49a0bbdc36d9cfedf7879f47567fa4d7f4d92fd5b69582bc8666100b3560e03bd88844 languageName: node linkType: hard "kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": version: 6.0.3 - resolution: "kind-of@npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz" + resolution: "kind-of@npm:6.0.3" checksum: 5de5d6577796af87a983199d6350ed41c670abec4a306cc43ca887c1afdbd6b89af9ab00016e3ca17eb7ad89ebfd9bb817d33baa89f855c6c95398a8b8abbf08 languageName: node linkType: hard @@ -8057,7 +8116,14 @@ fsevents@~2.1.2: languageName: node linkType: hard -"lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.4": +"lodash@npm:^4.17.11": + version: 4.17.20 + resolution: "lodash@npm:4.17.20" + checksum: c62101d2500c383b5f174a7e9e6fe8098149ddd6e9ccfa85f36d4789446195f5c4afd3cfba433026bcaf3da271256566b04a2bf2618e5a39f6e67f8c12030cb6 + languageName: node + linkType: hard + +"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.4": version: 4.17.19 resolution: "lodash@npm:4.17.19::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz" checksum: ff2b7a95f0129dba9101e346d44e0eda0f159d76bbbf23721eec1969b87a32bde3de0cfef0733218c64620e9be08040a973278d46a686540233b356115f3527c @@ -8081,9 +8147,9 @@ fsevents@~2.1.2: linkType: hard "loglevel@npm:^1.6.8": - version: 1.6.8 - resolution: "loglevel@npm:1.6.8::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.8.tgz" - checksum: 847939b08549649a0495e1b0d25ac89cec537a057fbb6deae468a066236ca0295aabce314366c026605537c345ece982d88783c7f44ab3599a40554bb09442ed + version: 1.7.0 + resolution: "loglevel@npm:1.7.0" + checksum: 5d14de3bef87a53aab782c6e47bd096946444f72224ae2f56b197cefb93f9b94b5c5b2c91269b3bc30b109cb484cc8908b158e35f5437c50d8e778b8eb0d6037 languageName: node linkType: hard @@ -8153,14 +8219,14 @@ fsevents@~2.1.2: "map-cache@npm:^0.2.2": version: 0.2.2 - resolution: "map-cache@npm:0.2.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-cache%2Fdownload%2Fmap-cache-0.2.2.tgz" + resolution: "map-cache@npm:0.2.2" checksum: 3d205d20e0135a5b5f3e2b85e7bfa289cc2fc3c748fe802795e74c6fe157e5f2bed3b7c3a270b82fe36a02123880cb2e0dc525e1ae37ac7e673ce3e75a2e2c56 languageName: node linkType: hard "map-visit@npm:^1.0.0": version: 1.0.0 - resolution: "map-visit@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmap-visit%2Fdownload%2Fmap-visit-1.0.0.tgz" + resolution: "map-visit@npm:1.0.0" dependencies: object-visit: ^1.0.0 checksum: 9e85e6d802183927229d9ad04d70a0e0c7225451994605674d3ed4e4a21f817b4d9aba42a775e98078ffe47cf67df44a50eb07f965f14afead5015c8692503bd @@ -8178,14 +8244,14 @@ fsevents@~2.1.2: "media-typer@npm:0.3.0": version: 0.3.0 - resolution: "media-typer@npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmedia-typer%2Fdownload%2Fmedia-typer-0.3.0.tgz" + resolution: "media-typer@npm:0.3.0" checksum: be1c825782df7f38eebd451d778f6407bb15a59c8807a69e7f2ad74a25440e474536441c6bf583fdf2803ea23b866e91ff68f565cda297211dd89147758c8df3 languageName: node linkType: hard "memory-fs@npm:^0.4.1": version: 0.4.1 - resolution: "memory-fs@npm:0.4.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz" + resolution: "memory-fs@npm:0.4.1" dependencies: errno: ^0.1.3 readable-stream: ^2.0.1 @@ -8205,7 +8271,7 @@ fsevents@~2.1.2: "merge-descriptors@npm:1.0.1": version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge-descriptors%2Fdownload%2Fmerge-descriptors-1.0.1.tgz" + resolution: "merge-descriptors@npm:1.0.1" checksum: 2d2a09eaac840a7ceac7a13b44b7c8abf3ecccd93a609c3525d8290cb5d814336cc7c0b1dd485ae3bc471ed354eeefb153475ce2e1604ccdf79eebe74021c192 languageName: node linkType: hard @@ -8226,14 +8292,14 @@ fsevents@~2.1.2: "methods@npm:~1.1.2": version: 1.1.2 - resolution: "methods@npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmethods%2Fdownload%2Fmethods-1.1.2.tgz" + resolution: "methods@npm:1.1.2" checksum: 450e4ea0fd4a0f3de8c0593d753c7d6c8f2ee49766f5ef35c68cc2ac41699d5e295b7d6330fc2b7271b8569a07857e3eb0b5df0599a353c5808265b4b5066168 languageName: node linkType: hard "micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": version: 3.1.10 - resolution: "micromatch@npm:3.1.10::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz" + resolution: "micromatch@npm:3.1.10" dependencies: arr-diff: ^4.0.0 array-unique: ^0.3.2 @@ -8262,14 +8328,21 @@ fsevents@~2.1.2: languageName: node linkType: hard -"mime-db@npm:1.44.0, mime-db@npm:>= 1.43.0 < 2": +"mime-db@npm:1.44.0": version: 1.44.0 resolution: "mime-db@npm:1.44.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz" checksum: b4e3b2141418572fba9786f7e36324faef15e23032ad0871f56760cb304ee721ba4c8cc795d3c1cac69a2a8b94045c1d6b08c4a8d1ef6ba1226a3a5193915c57 languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": +"mime-db@npm:>= 1.43.0 < 2": + version: 1.45.0 + resolution: "mime-db@npm:1.45.0" + checksum: 86701c54f748c72a5c05c16f881cdfa01db44a61e52f4cef3d872b5f3e4a3c4186c28df7a5fec31debc9bee42d5afc9b86ff8ff3d3eaf1440f07140b94a33d4a + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": version: 2.1.27 resolution: "mime-types@npm:2.1.27::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz" dependencies: @@ -8278,7 +8351,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"mime-types@npm:^2.1.27": +"mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24": version: 2.1.27 resolution: "mime-types@npm:2.1.27" dependencies: @@ -8287,7 +8360,16 @@ fsevents@~2.1.2: languageName: node linkType: hard -"mime@npm:1.6.0, mime@npm:^1.6.0": +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: d540c24dd3e3a9e25e813714e55ff2f7841a3a1a47aed9786c508bd0251653d5e9abbfb1163c0c6e1be99f872d7fa1538c068bd6e306e9cb12dd9affa841a61e + languageName: node + linkType: hard + +"mime@npm:^1.6.0": version: 1.6.0 resolution: "mime@npm:1.6.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz" bin: @@ -8298,7 +8380,7 @@ fsevents@~2.1.2: "mime@npm:^2.4.4": version: 2.4.6 - resolution: "mime@npm:2.4.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz" + resolution: "mime@npm:2.4.6" bin: mime: cli.js checksum: 319ec3858894aa9befa9da90e33c4422506689f1e3e7c939095df68abe848050a51070c78a31061769d9192051a8c9f33d14d6771dc0f2ff309fe846898e0807 @@ -8339,22 +8421,22 @@ fsevents@~2.1.2: languageName: node linkType: hard -"mini-css-extract-plugin@npm:^1.2.0": - version: 1.2.0 - resolution: "mini-css-extract-plugin@npm:1.2.0" +"mini-css-extract-plugin@npm:^1.2.1": + version: 1.2.1 + resolution: "mini-css-extract-plugin@npm:1.2.1" dependencies: loader-utils: ^2.0.0 schema-utils: ^3.0.0 webpack-sources: ^1.1.0 peerDependencies: webpack: ^4.4.0 || ^5.0.0 - checksum: e87cbebbcbdcd0ecacd32d4056a95e129360f32b74140195d48fed0d67e9ad9cc6c8e87fb54fe1df16841dd11dd0236574bdcf565a978b9718df4a99cbe28ca8 + checksum: c2e9751e636daffad276d8befb6cc62a95ab2e3f563ed488ad6281d3800a12baac09f140ec738d6fbedb383ad34665fac140b4dcd472a49fdd277e6ebece062d languageName: node linkType: hard "minimalistic-assert@npm:^1.0.0": version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimalistic-assert%2Fdownload%2Fminimalistic-assert-1.0.1.tgz" + resolution: "minimalistic-assert@npm:1.0.1" checksum: 28f1de3cf9edfb82613428a58eb3dd38ec6d33ab761b98abf2d130c81104ea86be540c7e5eb8284f13e0a065ead8b17501de09419b9a98987ed27268ad538dba languageName: node linkType: hard @@ -8423,7 +8505,7 @@ fsevents@~2.1.2: "mixin-deep@npm:^1.2.0": version: 1.3.2 - resolution: "mixin-deep@npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmixin-deep%2Fdownload%2Fmixin-deep-1.3.2.tgz" + resolution: "mixin-deep@npm:1.3.2" dependencies: for-in: ^1.0.2 is-extendable: ^1.0.1 @@ -8442,6 +8524,17 @@ fsevents@~2.1.2: languageName: node linkType: hard +"mkdirp@npm:^0.5.5": + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" + dependencies: + minimist: ^1.2.5 + bin: + mkdirp: bin/cmd.js + checksum: 9dd9792e891927b14ca02226dbe1daeb717b9517a001620d5e2658bbc72c5e4f06887b6cbcbb60595fa5a56e701073cf250f1ed69c1988a6b89faf9fd6a4d049 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz" @@ -8460,7 +8553,7 @@ fsevents@~2.1.2: "ms@npm:2.1.1": version: 2.1.1 - resolution: "ms@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz" + resolution: "ms@npm:2.1.1" checksum: 81ad38c74df2473ce9fbed8bb71a00220c3d9e237ebd576306c9f6ca3221b251d602c7d199808944be1a3d7cda5883e72c77adb473734ba30f6e032165e05ebc languageName: node linkType: hard @@ -8474,14 +8567,14 @@ fsevents@~2.1.2: "multicast-dns-service-types@npm:^1.1.0": version: 1.1.0 - resolution: "multicast-dns-service-types@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns-service-types%2Fdownload%2Fmulticast-dns-service-types-1.1.0.tgz" + resolution: "multicast-dns-service-types@npm:1.1.0" checksum: de10f16134855e368505a174ea0a25c60c74e34a73fd251d09d1d7cbdb70ee23c077b7eec9d4314ae51b1bc134775d490f4b7e2e29a4d9312bbd089456ac20b1 languageName: node linkType: hard "multicast-dns@npm:^6.0.1": version: 6.2.3 - resolution: "multicast-dns@npm:6.2.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz" + resolution: "multicast-dns@npm:6.2.3" dependencies: dns-packet: ^1.3.1 thunky: ^1.0.2 @@ -8492,11 +8585,11 @@ fsevents@~2.1.2: linkType: hard "nan@npm:^2.12.1": - version: 2.14.1 - resolution: "nan@npm:2.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz" + version: 2.14.2 + resolution: "nan@npm:2.14.2" dependencies: node-gyp: latest - checksum: eeab7cf260362a578f0b8622716a76d19bc009722049c7274748644ce03b2aa38ca01b3ac730a0497fd2c1ec882a21a0592e800a903994ed4d32acd06bf7eba7 + checksum: 36349b2e5df4182aa0d0cc43fcd6cc782ca560a83c2764743d80c14ba5028d0c54041a2f464b8d4cb18a884e04415034a0a764c745e1d5502ea34a5cb6470a39 languageName: node linkType: hard @@ -8511,7 +8604,7 @@ fsevents@~2.1.2: "nanomatch@npm:^1.2.9": version: 1.2.13 - resolution: "nanomatch@npm:1.2.13::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanomatch%2Fdownload%2Fnanomatch-1.2.13.tgz" + resolution: "nanomatch@npm:1.2.13" dependencies: arr-diff: ^4.0.0 array-unique: ^0.3.2 @@ -8546,7 +8639,7 @@ fsevents@~2.1.2: "negotiator@npm:0.6.2": version: 0.6.2 - resolution: "negotiator@npm:0.6.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnegotiator%2Fdownload%2Fnegotiator-0.6.2.tgz" + resolution: "negotiator@npm:0.6.2" checksum: 4b230bd15f0862d16c54ce0243fcfcf835ad59c8e58c467b4504dd28c9868cff71ff485b02cc575dc69dca819b58a1fadc9fb28403f45721f38a8fffde007d54 languageName: node linkType: hard @@ -8560,7 +8653,7 @@ fsevents@~2.1.2: "nice-try@npm:^1.0.4": version: 1.0.5 - resolution: "nice-try@npm:1.0.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz" + resolution: "nice-try@npm:1.0.5" checksum: 330f190bf68146a560008b661e1ddbb2eac667c16990b6bf791516d89cceb707ec67901ad647d2b32674bfa816b916489cead5c2fb6e96864c659573ab5aa3bb languageName: node linkType: hard @@ -8575,10 +8668,10 @@ fsevents@~2.1.2: languageName: node linkType: hard -"node-forge@npm:0.9.0": - version: 0.9.0 - resolution: "node-forge@npm:0.9.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz" - checksum: 901d6ab679072ad4b4174daed4d1ede43f01131456aba1918d89246ae37f73e40e053d9bf32ab3836e74e9e471c2637f4a6af337ab8c6a562faa3a385aac806c +"node-forge@npm:^0.10.0": + version: 0.10.0 + resolution: "node-forge@npm:0.10.0" + checksum: c7a729933a0391e4f434d4455705e869340bf91c3cc6b51b3844a91a5ac9db6f8697f600ab1e62e25f990382b2c1592d93d31fd831bb1a0b1e66ce28d9d6d124 languageName: node linkType: hard @@ -8659,7 +8752,7 @@ fsevents@~2.1.2: "normalize-path@npm:^2.1.1": version: 2.1.1 - resolution: "normalize-path@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-path%2Fdownload%2Fnormalize-path-2.1.1.tgz" + resolution: "normalize-path@npm:2.1.1" dependencies: remove-trailing-separator: ^1.0.1 checksum: 9eb82b2f6abc1b99d820c36405d6b7a26a4cfa49d49d397eb2ad606b1295cb8e243b6071b18826907ae54a9a2b35373a83d827d843d19b76efcfa267d72cb301 @@ -8689,7 +8782,7 @@ fsevents@~2.1.2: "npm-run-path@npm:^2.0.0": version: 2.0.2 - resolution: "npm-run-path@npm:2.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz" + resolution: "npm-run-path@npm:2.0.2" dependencies: path-key: ^2.0.0 checksum: 0a1bc9a1e0faa7e54a011929b830121d5da393f50cbe37c83f3ffd67781b6d176739ba6e8eab5d56faa05738a60f7eb50389673767db0dc887073932f80b9b60 @@ -8756,7 +8849,7 @@ fsevents@~2.1.2: "object-copy@npm:^0.1.0": version: 0.1.0 - resolution: "object-copy@npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-copy%2Fdownload%2Fobject-copy-0.1.0.tgz" + resolution: "object-copy@npm:0.1.0" dependencies: copy-descriptor: ^0.1.0 define-property: ^0.2.5 @@ -8780,12 +8873,12 @@ fsevents@~2.1.2: linkType: hard "object-is@npm:^1.0.1": - version: 1.1.2 - resolution: "object-is@npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.2.tgz" + version: 1.1.3 + resolution: "object-is@npm:1.1.3" dependencies: define-properties: ^1.1.3 - es-abstract: ^1.17.5 - checksum: 9ea7df4475f250c968171fa142b6584bad4c65859af8cb50e06fa8168089ae47afb460776ab60fe5f3aea8ea3c97b30dd0b37d41e23106f2abcc7d6f982bec04 + es-abstract: ^1.18.0-next.1 + checksum: f16b6ae28ca9a46154dc549c1660d1db411bbe57643a0479292814cb1842c9ecacb13aac9a18df6ce7af0991c5b034113bdb5a4a9feb282d6deaa136d2ea14e2 languageName: node linkType: hard @@ -8798,7 +8891,7 @@ fsevents@~2.1.2: "object-visit@npm:^1.0.0": version: 1.0.1 - resolution: "object-visit@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-visit%2Fdownload%2Fobject-visit-1.0.1.tgz" + resolution: "object-visit@npm:1.0.1" dependencies: isobject: ^3.0.0 checksum: 8666727dbfb957676c0b093cde6d676ed6b847b234d98a4ed7f4d7f7e4b40c00af8067354d5c45052dc40c6830d68b68212c15c96dbcc286cdc96aca58faf548 @@ -8864,7 +8957,7 @@ fsevents@~2.1.2: "object.pick@npm:^1.3.0": version: 1.3.0 - resolution: "object.pick@npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.pick%2Fdownload%2Fobject.pick-1.3.0.tgz" + resolution: "object.pick@npm:1.3.0" dependencies: isobject: ^3.0.1 checksum: e22d555d3bb73c665a5baa1da7789d3a98f557d8712a9bbe34dc59d4adbce9d390245815296025de5260b18794de647401a6b2ae1ba0ab854a6710e2958291f6 @@ -8885,14 +8978,14 @@ fsevents@~2.1.2: "obuf@npm:^1.0.0, obuf@npm:^1.1.2": version: 1.1.2 - resolution: "obuf@npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fobuf%2Fdownload%2Fobuf-1.1.2.tgz" + resolution: "obuf@npm:1.1.2" checksum: aa741387b0f5dc2b8addec7cd0e05448d8b2892b6e76e167e18a5b90f0b85bd4c9be4c7be01a354dee3353f5c3367b08006adb06e0737d6a8f1b88618147715a languageName: node linkType: hard "on-finished@npm:~2.3.0": version: 2.3.0 - resolution: "on-finished@npm:2.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-finished-2.3.0.tgz" + resolution: "on-finished@npm:2.3.0" dependencies: ee-first: 1.1.1 checksum: 362e64608287d31ffd96a15fb9305a410b3e4d07c86f277fae907e38af46bc6f5ff948de90eabb81dc5632ca7f9a290085acc5410c378053dfa9860451d97ee5 @@ -8901,7 +8994,7 @@ fsevents@~2.1.2: "on-headers@npm:~1.0.2": version: 1.0.2 - resolution: "on-headers@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-headers%2Fdownload%2Fon-headers-1.0.2.tgz" + resolution: "on-headers@npm:1.0.2" checksum: 51e75c80755169e765aa76238722e5ad1623f62b13bbc23544ade20cdbb6950cf0e6aa91de35d02ec956f47dc072ee460d8eef82354e4abf8fa692885cb3f2d8 languageName: node linkType: hard @@ -8944,7 +9037,7 @@ fsevents@~2.1.2: "opn@npm:^5.5.0": version: 5.5.0 - resolution: "opn@npm:5.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fopn%2Fdownload%2Fopn-5.5.0.tgz" + resolution: "opn@npm:5.5.0" dependencies: is-wsl: ^1.1.0 checksum: 0ea3b6550fbbc530a57f958baf5d44253a435d67ad88b4af1df8b3a98693f7c70b71d72f29b09a02d15e94654ec3875aae8cf4fccbf8e4e326671a02f66058d3 @@ -8967,7 +9060,7 @@ fsevents@~2.1.2: "original@npm:^1.0.0": version: 1.0.2 - resolution: "original@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Foriginal%2Fdownload%2Foriginal-1.0.2.tgz" + resolution: "original@npm:1.0.2" dependencies: url-parse: ^1.4.3 checksum: 6918b9d4545917616aba3788ce3c8c47dc5bcc26b0a3dc7da68d9976ce4d09fd1172d249cbc8063ef3311ddfbc435ef7a48b753abc85f3b74e83cf0c8de9aae3 @@ -9007,7 +9100,7 @@ fsevents@~2.1.2: "p-finally@npm:^1.0.0": version: 1.0.0 - resolution: "p-finally@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-finally%2Fdownload%2Fp-finally-1.0.0.tgz" + resolution: "p-finally@npm:1.0.0" checksum: 01f49b2d9c67573b3a1cb253cd9e1ecf5c912b6ba5de8824118bbc8d647bfa6296820b5a536e91ec68a54395d4e1c58de9a381ded3b688074fb446a8fe351931 languageName: node linkType: hard @@ -9084,7 +9177,7 @@ fsevents@~2.1.2: "p-retry@npm:^3.0.1": version: 3.0.1 - resolution: "p-retry@npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz" + resolution: "p-retry@npm:3.0.1" dependencies: retry: ^0.12.0 checksum: 26c888de4e64e62e9b6112219fae2c2f45ddc2face5d6c7c98e1b8762bcd4a54bea4f50cdff275b2ee5ebb11b633bfb16f4dd473ecd4d07081385cb716e961cf @@ -9147,7 +9240,7 @@ fsevents@~2.1.2: "parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 - resolution: "parseurl@npm:1.3.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz" + resolution: "parseurl@npm:1.3.3" checksum: 52c9e86cb58e38b28f1a50a6354d16648974ab7a2b91b209f97102840471de8adf524427774af6d5bc482fb7c0a6af6ba08ab37de9a1a7ae389ebe074015914b languageName: node linkType: hard @@ -9164,14 +9257,14 @@ fsevents@~2.1.2: "pascalcase@npm:^0.1.1": version: 0.1.1 - resolution: "pascalcase@npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpascalcase%2Fdownload%2Fpascalcase-0.1.1.tgz" + resolution: "pascalcase@npm:0.1.1" checksum: 268a9dbf9cd934fcd0ba02733b7d6176834b13a608bbcd295550636b3c6371a6047875175b457e705b283e81ec171884c9cd86d1fd6c49f70f66fbc3783dc0c1 languageName: node linkType: hard "path-dirname@npm:^1.0.0": version: 1.0.2 - resolution: "path-dirname@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-dirname%2Fdownload%2Fpath-dirname-1.0.2.tgz" + resolution: "path-dirname@npm:1.0.2" checksum: 4af73745fd97680c95b356b88450cd4c21d6825d0580620331382a6c910b76b3ced4aa2c4ddc2953d938bd758906b3d3aa2f56a2f601ec52763ed2cbbfc0106b languageName: node linkType: hard @@ -9206,7 +9299,7 @@ fsevents@~2.1.2: "path-key@npm:^2.0.0, path-key@npm:^2.0.1": version: 2.0.1 - resolution: "path-key@npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz" + resolution: "path-key@npm:2.0.1" checksum: 7dc807a2baa11d6bc0fca72148a0a0ca69ab73d98fbe42e10d22764d1ef547767f2b4ff827c6bc66e733388cd8d54297a45a39499825b9fdfd18959202384029 languageName: node linkType: hard @@ -9234,7 +9327,7 @@ fsevents@~2.1.2: "path-to-regexp@npm:0.1.7": version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz" + resolution: "path-to-regexp@npm:0.1.7" checksum: 342fdb0ca48415d6eccdbe6d4180fd0fa4786ccc96ab3f74fcdf7acfc99e075af25e6077c8086c341dcfb4f5f84401ecd21e6cd7b24e0c3b556fb7ffb2570da7 languageName: node linkType: hard @@ -9358,7 +9451,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"portfinder@npm:^1.0.25, portfinder@npm:^1.0.26": +"portfinder@npm:^1.0.25": 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" dependencies: @@ -9369,9 +9462,20 @@ fsevents@~2.1.2: languageName: node linkType: hard +"portfinder@npm:^1.0.26": + version: 1.0.28 + resolution: "portfinder@npm:1.0.28" + dependencies: + async: ^2.6.2 + debug: ^3.1.1 + mkdirp: ^0.5.5 + checksum: 906dc51482ef9336a812df0b2960119e4464c7d14b69e489bf88bbeea317175a5700712688e953b9b2a2a2de0dc28824f0cb01206c56dd8350f3798e212b5bb8 + languageName: node + linkType: hard + "posix-character-classes@npm:^0.1.0": version: 0.1.1 - resolution: "posix-character-classes@npm:0.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fposix-character-classes%2Fdownload%2Fposix-character-classes-0.1.1.tgz" + resolution: "posix-character-classes@npm:0.1.1" checksum: 984f83c2d4dec5abb9a6ac2b4a184132a58c4af9ce25704bfda2be6e8139335673c45d959ef6ffea3756dc88d3a0cb27c745a84d875ae5142b76e661a37a5f0e languageName: node linkType: hard @@ -9954,7 +10058,7 @@ fsevents@~2.1.2: "proxy-addr@npm:~2.0.5": version: 2.0.6 - resolution: "proxy-addr@npm:2.0.6::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fproxy-addr%2Fdownload%2Fproxy-addr-2.0.6.tgz" + resolution: "proxy-addr@npm:2.0.6" dependencies: forwarded: ~0.1.2 ipaddr.js: 1.9.1 @@ -9988,7 +10092,7 @@ fsevents@~2.1.2: "punycode@npm:1.3.2": version: 1.3.2 - resolution: "punycode@npm:1.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.3.2.tgz" + resolution: "punycode@npm:1.3.2" checksum: e67fddacd83b918ca2f4a47b1fd13858108779cdc2a3f2db3233ff82a25f9305d46e1d9891f7b9ad21ed36454adfc675d4559621fcffed2cf2067abd04e121cd languageName: node linkType: hard @@ -10002,7 +10106,7 @@ fsevents@~2.1.2: "qs@npm:6.7.0": version: 6.7.0 - resolution: "qs@npm:6.7.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz" + resolution: "qs@npm:6.7.0" checksum: 8590470436ff0a75ae35e6b45fd7260e2beb537ff8ec1104f9703a349b09ce1aa27e8e1c06b9ad25ac62fc098e12cc65df93042a233128a0276ccd6de4c7819a languageName: node linkType: hard @@ -10036,9 +10140,9 @@ fsevents@~2.1.2: linkType: hard "querystringify@npm:^2.1.1": - version: 2.1.1 - resolution: "querystringify@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.1.1.tgz" - checksum: 35301cc744d5de15040a6bdb6b751ef127f65a82675c5f3a9139a4ce0d047ed8b61a459a93261cd7ae0becfa389edd3f02e8aec1c025ae3e7f0d06dc758baa98 + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 6235036be3aedff7919dfc06b23f759264915c5794c6352d52a917401d40d2b9bb43b1d82e4e5be983e469aa320e06992aefc218192f6fa1d9eba4f54dc4786c languageName: node linkType: hard @@ -10060,14 +10164,14 @@ fsevents@~2.1.2: "range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 - resolution: "range-parser@npm:1.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frange-parser%2Fdownload%2Frange-parser-1.2.1.tgz" + resolution: "range-parser@npm:1.2.1" checksum: 05074f5b23dbdc24acdae9821dd684fbc9c0d770cdaa4469ab529d8e0fc1338aa33561a4c7c14a1f9bdcb3b5e9a3770e5a80318258a72289a7ef05fcda72a707 languageName: node linkType: hard "raw-body@npm:2.4.0": version: 2.4.0 - resolution: "raw-body@npm:2.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-body%2Fdownload%2Fraw-body-2.4.0.tgz" + resolution: "raw-body@npm:2.4.0" dependencies: bytes: 3.1.0 http-errors: 1.7.2 @@ -10302,7 +10406,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6": +"readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz" dependencies: @@ -10317,7 +10421,33 @@ fsevents@~2.1.2: languageName: node linkType: hard -"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": +"readable-stream@npm:^2.0.2": + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 6e3826560627a751feb3a8aec073ef94c6e47b8c8e06eb5d136323b5f09db9d2077c23a42a8d54ed0123695af54b36c1e4271a8ec55112b15f4b89020d8dec72 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.6": + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: f178b1daa80d9e58ebba71dbb08486430aa6f0dea3a22a1b7401f3f6983077d0bc0edea43099db06b8d006c9ad48d6383e8fb72c05d5b187670aeaf1b9b44f00 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.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: @@ -10330,7 +10460,7 @@ fsevents@~2.1.2: "readdirp@npm:^2.2.1": version: 2.2.1 - resolution: "readdirp@npm:2.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz" + resolution: "readdirp@npm:2.2.1" dependencies: graceful-fs: ^4.1.11 micromatch: ^3.1.10 @@ -10412,7 +10542,7 @@ fsevents@~2.1.2: "regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": version: 1.0.2 - resolution: "regex-not@npm:1.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregex-not%2Fdownload%2Fregex-not-1.0.2.tgz" + resolution: "regex-not@npm:1.0.2" dependencies: extend-shallow: ^3.0.2 safe-regex: ^1.1.0 @@ -10420,7 +10550,17 @@ fsevents@~2.1.2: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.3.0": +"regexp.prototype.flags@npm:^1.2.0": + version: 1.3.0 + resolution: "regexp.prototype.flags@npm:1.3.0" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: 468e19b3aed632653333741346cab170787b9bc79eecdfdd3d7ba5be26574c135edc2ce286d9d4154b635158c3c44f9614fca51cbf6d4d3f529ef89cf7e03908 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.3.0": version: 1.3.0 resolution: "regexp.prototype.flags@npm:1.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz" dependencies: @@ -10492,7 +10632,7 @@ fsevents@~2.1.2: "remove-trailing-separator@npm:^1.0.1": version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fremove-trailing-separator%2Fdownload%2Fremove-trailing-separator-1.1.0.tgz" + resolution: "remove-trailing-separator@npm:1.1.0" checksum: 17dadf3d1f7c51411b7c426c8e2d6a660359bc8dae7686137120483fe4345bfca4bf7460d2c302aa741a7886c932d8dad708d2b971669d74e0fb3ff9a4814408 languageName: node linkType: hard @@ -10512,7 +10652,7 @@ fsevents@~2.1.2: "repeat-element@npm:^1.1.2": version: 1.1.3 - resolution: "repeat-element@npm:1.1.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-element%2Fdownload%2Frepeat-element-1.1.3.tgz" + resolution: "repeat-element@npm:1.1.3" checksum: 6a59b879efdd3512a786be5de1bc05c110822fec6820bb5a38dfdfdd4488e7ba0cf6d15b28da21544e6f072ae60762ee9efa784f2988128e656c97a8b0be46cb languageName: node linkType: hard @@ -10554,14 +10694,14 @@ fsevents@~2.1.2: "require-directory@npm:^2.1.1": version: 2.1.1 - resolution: "require-directory@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-directory%2Fdownload%2Frequire-directory-2.1.1.tgz" + resolution: "require-directory@npm:2.1.1" checksum: f495d02d89c385af2df4b26f0216ece091e99710d358d0ede424126c476d0c639e8bd77dcd237c00a6a5658f3d862e7513164f8c280263052667d06df830eb23 languageName: node linkType: hard "require-main-filename@npm:^2.0.0": version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-2.0.0.tgz" + resolution: "require-main-filename@npm:2.0.0" checksum: 8d3633149a7fef67d14613146247137fe1dc4cc969bf2d1adcd40e3c28056de503229f41e78cba5efebad3a223cbfb4215fd220d879148df10c6d9a877099dbd languageName: node linkType: hard @@ -10582,7 +10722,7 @@ fsevents@~2.1.2: "resolve-cwd@npm:^2.0.0": version: 2.0.0 - resolution: "resolve-cwd@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-cwd%2Fdownload%2Fresolve-cwd-2.0.0.tgz" + resolution: "resolve-cwd@npm:2.0.0" dependencies: resolve-from: ^3.0.0 checksum: f5d5526526d646c013f8ccb946861907e9f5fcfb951b2495add0f6a344a6796111b1c88e5227bc846d04a0e07182cc856a694ad0dd559dfa6a795a4eaff4477e @@ -10600,7 +10740,7 @@ fsevents@~2.1.2: "resolve-from@npm:^3.0.0": version: 3.0.0 - resolution: "resolve-from@npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-from%2Fdownload%2Fresolve-from-3.0.0.tgz" + resolution: "resolve-from@npm:3.0.0" checksum: dc0c83b3b867753b9fe3a901587fa70efc596a69355eb133fd68f8bbaef4e77266ef38b8a01a2d664aa32ba732425d54413b3d581ca7dff96bee177c61a0c84d languageName: node linkType: hard @@ -10628,7 +10768,7 @@ fsevents@~2.1.2: "resolve-url@npm:^0.2.1": version: 0.2.1 - resolution: "resolve-url@npm:0.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz" + resolution: "resolve-url@npm:0.2.1" checksum: 9e1cd0028d0f2e157a889a02653637c1c1d7f133aa47b75261b4590e84105e63fae3b6be31bad50d5b94e01898d9dbe6b95abe28db7eab46e22321f7cbf00273 languageName: node linkType: hard @@ -10682,14 +10822,14 @@ fsevents@~2.1.2: "ret@npm:~0.1.10": version: 0.1.15 - resolution: "ret@npm:0.1.15::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz" + resolution: "ret@npm:0.1.15" checksum: 749c2fcae7071f5ecea4f8a18e35a79a8e8a58e522a16d843ecb9dfe9e647a76d92ae85c22690b02f87d3ab78b6b1f73341efc2fabbf59ed54dcfd9b1bdff883 languageName: node linkType: hard "retry@npm:^0.12.0": version: 0.12.0 - resolution: "retry@npm:0.12.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fretry%2Fdownload%2Fretry-0.12.0.tgz" + resolution: "retry@npm:0.12.0" checksum: 51f2fddddb2f157a0738c53c515682813a881df566da36992f3cf0a975ea84a19434c5abbc682056e97351540bcc7ea38fce2622d0b191c3b5cc1020b71ea0f2 languageName: node linkType: hard @@ -10800,9 +10940,9 @@ fsevents@~2.1.2: languageName: node linkType: hard -"safe-buffer@npm:5.1.2, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": +"safe-buffer@npm:5.1.2": version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz" + resolution: "safe-buffer@npm:5.1.2" checksum: 2708587c1b5e70a5e420714ceb59f30f5791c6e831d39812125a008eca63a4ac18578abd020a0776ea497ff03b4543f2b2a223a7b9073bf2d6c7af9ec6829218 languageName: node linkType: hard @@ -10814,16 +10954,30 @@ fsevents@~2.1.2: languageName: node linkType: hard +"safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz" + checksum: 2708587c1b5e70a5e420714ceb59f30f5791c6e831d39812125a008eca63a4ac18578abd020a0776ea497ff03b4543f2b2a223a7b9073bf2d6c7af9ec6829218 + languageName: node + linkType: hard + "safe-regex@npm:^1.1.0": version: 1.1.0 - resolution: "safe-regex@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-regex%2Fdownload%2Fsafe-regex-1.1.0.tgz" + resolution: "safe-regex@npm:1.1.0" dependencies: ret: ~0.1.10 checksum: c355e3163fda56bef5ef0896de55ab1e26504def2c7f9ee96ee8b90171a7da7a596048d256e61a51e2d041d9f4625d956d3702ebcfb7627c7a4846896d6ce3a4 languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 549ba83f5b314b59898efe3422120ce1ca7987a6eae5925a5fa5db930dc414d4a9dde0a5594f89638cd6ea60b6840ea961872908933ac2428d1726489db46fa5 + languageName: node + linkType: hard + +"safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz" checksum: 549ba83f5b314b59898efe3422120ce1ca7987a6eae5925a5fa5db930dc414d4a9dde0a5594f89638cd6ea60b6840ea961872908933ac2428d1726489db46fa5 @@ -10855,14 +11009,14 @@ fsevents@~2.1.2: languageName: node linkType: hard -"sass@npm:^1.27.0": - version: 1.27.0 - resolution: "sass@npm:1.27.0" +"sass@npm:^1.28.0": + version: 1.28.0 + resolution: "sass@npm:1.28.0" dependencies: chokidar: ">=2.0.0 <4.0.0" bin: sass: sass.js - checksum: db4342b13bbcc5e0f13c1d9139f31c48f9c5a03bdb1c8d8ef7b47d063f5c333a2b69642bd489501cd756f4d0d1da43ee77127938cf9743cc39839952319a705e + checksum: b4d718512e6eb05d44a2f679dcf593ff72f12b168851fc3bd37add5e142e7e36f04d98a908ed8f9e196f6aef1db09c6d3e6e5e947819c74df56bb24dd584c7b9 languageName: node linkType: hard @@ -10878,7 +11032,7 @@ fsevents@~2.1.2: "schema-utils@npm:^1.0.0": version: 1.0.0 - resolution: "schema-utils@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz" + resolution: "schema-utils@npm:1.0.0" dependencies: ajv: ^6.1.0 ajv-errors: ^1.0.0 @@ -10918,17 +11072,17 @@ fsevents@~2.1.2: "select-hose@npm:^2.0.0": version: 2.0.0 - resolution: "select-hose@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselect-hose%2Fdownload%2Fselect-hose-2.0.0.tgz" + resolution: "select-hose@npm:2.0.0" checksum: 4da089c0225bfddf86d6e3942d822bab66da27c39c72baacab5bb8b1bfa7e5da45b8dfac95bd7fbe2d5b0def50c1383d1701b92f22891400abcd562bb4324af7 languageName: node linkType: hard "selfsigned@npm:^1.10.7": - version: 1.10.7 - resolution: "selfsigned@npm:1.10.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz" + version: 1.10.8 + resolution: "selfsigned@npm:1.10.8" dependencies: - node-forge: 0.9.0 - checksum: ef53d4801c5cb67690dba94b105e3d87d243f1b1254c7cc02db51d7cb352ddfece065951874515b7c23d52025c250d9f50d74dbe547ba38cca8d15c5ad4ad5e6 + node-forge: ^0.10.0 + checksum: a382ec2af9798a93bc25f2d75778eed6d2c685fdf81e56deaac02d46aa896b0cc1b2770b2689891f8fe83d89cd3bb3e2042c6b15057e110f25a57769cb1a5fb3 languageName: node linkType: hard @@ -10950,7 +11104,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.0": +"semver@npm:^6.0.0": version: 6.3.0 resolution: "semver@npm:6.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz" bin: @@ -10959,6 +11113,15 @@ fsevents@~2.1.2: languageName: node linkType: hard +"semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: f0d155c06a67cc7e500c92d929339f1c6efd4ce9fe398aee6acc00a2333489cca0f5b4e76ee7292beba237fcca4b5a3d4a6153471f105f56299801bdab37289f + languageName: node + linkType: hard + "semver@npm:^7.1.2, semver@npm:^7.2.1, semver@npm:^7.3.2": version: 7.3.2 resolution: "semver@npm:7.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz" @@ -10970,7 +11133,7 @@ fsevents@~2.1.2: "send@npm:0.17.1": version: 0.17.1 - resolution: "send@npm:0.17.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsend%2Fdownload%2Fsend-0.17.1.tgz" + resolution: "send@npm:0.17.1" dependencies: debug: 2.6.9 depd: ~1.1.2 @@ -11009,7 +11172,7 @@ fsevents@~2.1.2: "serve-index@npm:^1.9.1": version: 1.9.1 - resolution: "serve-index@npm:1.9.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-index%2Fdownload%2Fserve-index-1.9.1.tgz" + resolution: "serve-index@npm:1.9.1" dependencies: accepts: ~1.3.4 batch: 0.6.1 @@ -11024,7 +11187,7 @@ fsevents@~2.1.2: "serve-static@npm:1.14.1": version: 1.14.1 - resolution: "serve-static@npm:1.14.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fserve-static%2Fdownload%2Fserve-static-1.14.1.tgz" + resolution: "serve-static@npm:1.14.1" dependencies: encodeurl: ~1.0.2 escape-html: ~1.0.3 @@ -11034,7 +11197,14 @@ fsevents@~2.1.2: languageName: node linkType: hard -"set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 0ac2403b0c2d39bf452f6d5d17dfd3cb952b9113098e1231cc0614c436e2f465637e39d27cf3b93556f5c59795e9790fd7e98da784c5f9919edeba4295ffeb29 + languageName: node + linkType: hard + +"set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-blocking%2Fdownload%2Fset-blocking-2.0.0.tgz" checksum: 0ac2403b0c2d39bf452f6d5d17dfd3cb952b9113098e1231cc0614c436e2f465637e39d27cf3b93556f5c59795e9790fd7e98da784c5f9919edeba4295ffeb29 @@ -11043,7 +11213,7 @@ fsevents@~2.1.2: "set-value@npm:^2.0.0, set-value@npm:^2.0.1": version: 2.0.1 - resolution: "set-value@npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz" + resolution: "set-value@npm:2.0.1" dependencies: extend-shallow: ^2.0.1 is-extendable: ^0.1.1 @@ -11055,14 +11225,14 @@ fsevents@~2.1.2: "setprototypeof@npm:1.1.0": version: 1.1.0 - resolution: "setprototypeof@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.0.tgz" + resolution: "setprototypeof@npm:1.1.0" checksum: 8a3fb2ff4bf7daf0f8fb0e52d87d6e3dc387599e1c7a42833fddc1d711e87f7f187a6f957137a435ae154a98877e4357569f1fb48f3d17e96242621cd469e1f6 languageName: node linkType: hard "setprototypeof@npm:1.1.1": version: 1.1.1 - resolution: "setprototypeof@npm:1.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz" + resolution: "setprototypeof@npm:1.1.1" checksum: 0efed4da5aec7535828ac07c3b560f0a54257a4a7d5390ffabe5530a083974aef577651507974215edb92a51efa142f22fb3242e24d630ba6adcbfc9e7f1ff2b languageName: node linkType: hard @@ -11076,7 +11246,7 @@ fsevents@~2.1.2: "shebang-command@npm:^1.2.0": version: 1.2.0 - resolution: "shebang-command@npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz" + resolution: "shebang-command@npm:1.2.0" dependencies: shebang-regex: ^1.0.0 checksum: 2a1e0092a6b80b14ec742ef4e982be8aa670edc7de3e8c68b26744fb535051f7d92518106387b52e9aabe0c1ceae33d23a7dfdb94c3d7f5035c3868b723a2854 @@ -11094,7 +11264,7 @@ fsevents@~2.1.2: "shebang-regex@npm:^1.0.0": version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz" + resolution: "shebang-regex@npm:1.0.0" checksum: cf1a41cb09023e7d39739d7145fcba57c3fabc6728b78ce706f7315cf52dfadf30f7eea664e069224fbcbbfb6ab853bc55ac45f494b47ee73fc209c98487fae5 languageName: node linkType: hard @@ -11150,7 +11320,7 @@ fsevents@~2.1.2: "snapdragon-node@npm:^2.0.1": version: 2.1.1 - resolution: "snapdragon-node@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-node%2Fdownload%2Fsnapdragon-node-2.1.1.tgz" + resolution: "snapdragon-node@npm:2.1.1" dependencies: define-property: ^1.0.0 isobject: ^3.0.0 @@ -11161,7 +11331,7 @@ fsevents@~2.1.2: "snapdragon-util@npm:^3.0.1": version: 3.0.1 - resolution: "snapdragon-util@npm:3.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon-util%2Fdownload%2Fsnapdragon-util-3.0.1.tgz" + resolution: "snapdragon-util@npm:3.0.1" dependencies: kind-of: ^3.2.0 checksum: d1a7ab4171376f2caacae601372dacf7fdad055e63f5e7eb3e9bd87f069b41d6fc8f54726d26968682e1ba448d5de80e94f7613d9b708646b161c4789988fa75 @@ -11170,7 +11340,7 @@ fsevents@~2.1.2: "snapdragon@npm:^0.8.1": version: 0.8.2 - resolution: "snapdragon@npm:0.8.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz" + resolution: "snapdragon@npm:0.8.2" dependencies: base: ^0.11.1 debug: ^2.2.0 @@ -11186,7 +11356,7 @@ fsevents@~2.1.2: "sockjs-client@npm:1.4.0": version: 1.4.0 - resolution: "sockjs-client@npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz" + resolution: "sockjs-client@npm:1.4.0" dependencies: debug: ^3.2.5 eventsource: ^1.0.7 @@ -11200,7 +11370,7 @@ fsevents@~2.1.2: "sockjs@npm:0.3.20": version: 0.3.20 - resolution: "sockjs@npm:0.3.20::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs%2Fdownload%2Fsockjs-0.3.20.tgz" + resolution: "sockjs@npm:0.3.20" dependencies: faye-websocket: ^0.10.0 uuid: ^3.4.0 @@ -11225,7 +11395,7 @@ fsevents@~2.1.2: "source-map-resolve@npm:^0.5.0": version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz" + resolution: "source-map-resolve@npm:0.5.3" dependencies: atob: ^2.1.2 decode-uri-component: ^0.2.0 @@ -11263,13 +11433,20 @@ fsevents@~2.1.2: languageName: node linkType: hard -"source-map@npm:^0.5.0, source-map@npm:^0.5.6": +"source-map@npm:^0.5.0": version: 0.5.7 resolution: "source-map@npm:0.5.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz" checksum: 737face96577a2184a42f141607fcc2c9db5620cb8517ae8ab3924476defa138fc26b0bab31e98cbd6f19211ecbf78400b59f801ff7a0f87aa9faa79f7433e10 languageName: node linkType: hard +"source-map@npm:^0.5.6": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 737face96577a2184a42f141607fcc2c9db5620cb8517ae8ab3924476defa138fc26b0bab31e98cbd6f19211ecbf78400b59f801ff7a0f87aa9faa79f7433e10 + languageName: node + linkType: hard + "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz" @@ -11334,7 +11511,7 @@ fsevents@~2.1.2: "spdy-transport@npm:^3.0.0": version: 3.0.0 - resolution: "spdy-transport@npm:3.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy-transport%2Fdownload%2Fspdy-transport-3.0.0.tgz" + resolution: "spdy-transport@npm:3.0.0" dependencies: debug: ^4.1.0 detect-node: ^2.0.4 @@ -11348,7 +11525,7 @@ fsevents@~2.1.2: "spdy@npm:^4.0.2": version: 4.0.2 - resolution: "spdy@npm:4.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz" + resolution: "spdy@npm:4.0.2" dependencies: debug: ^4.1.0 handle-thing: ^2.0.0 @@ -11361,7 +11538,7 @@ fsevents@~2.1.2: "split-string@npm:^3.0.1, split-string@npm:^3.0.2": version: 3.1.0 - resolution: "split-string@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit-string%2Fdownload%2Fsplit-string-3.1.0.tgz" + resolution: "split-string@npm:3.1.0" dependencies: extend-shallow: ^3.0.0 checksum: 9b610d1509f8213dad7d38b5f0b49109ab53c2a93e7886c370a66b9eeb723706cd01b04b61b3d906ff6369314429412f8fad54b93d57fa50103d85884f0c175f @@ -11414,7 +11591,7 @@ fsevents@~2.1.2: "static-extend@npm:^0.1.1": version: 0.1.2 - resolution: "static-extend@npm:0.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatic-extend%2Fdownload%2Fstatic-extend-0.1.2.tgz" + resolution: "static-extend@npm:0.1.2" dependencies: define-property: ^0.2.5 object-copy: ^0.1.0 @@ -11424,7 +11601,7 @@ fsevents@~2.1.2: "statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": version: 1.5.0 - resolution: "statuses@npm:1.5.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz" + resolution: "statuses@npm:1.5.0" checksum: 57735269bf231176a60deb80f6d60214cb4a87663b0937e79497afe9aebe2597f8377fd28893f4d1776205f18dd0b927774a26b72051411ac5108e9e2dfc77d2 languageName: node linkType: hard @@ -11467,7 +11644,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"string-width@npm:^3.0.0, string-width@npm:^3.1.0": +"string-width@npm:^3.0.0": version: 3.1.0 resolution: "string-width@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz" dependencies: @@ -11478,6 +11655,17 @@ fsevents@~2.1.2: languageName: node linkType: hard +"string-width@npm:^3.1.0": + version: 3.1.0 + resolution: "string-width@npm:3.1.0" + dependencies: + emoji-regex: ^7.0.1 + is-fullwidth-code-point: ^2.0.0 + strip-ansi: ^5.1.0 + checksum: 54c5d1842dc122d8e0251ad50e00e91c06368f1aca44f41a67cd5ce013c4ba8f5a26f1b7f72a3e1644f38c62092a82c86b646aff514073894faf84b9564a38a0 + languageName: node + linkType: hard + "string.prototype.matchall@npm:^4.0.2": version: 4.0.2 resolution: "string.prototype.matchall@npm:4.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.matchall%2Fdownload%2Fstring.prototype.matchall-4.0.2.tgz" @@ -11550,7 +11738,16 @@ fsevents@~2.1.2: languageName: node linkType: hard -"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": +"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.2.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: ^4.1.0 + checksum: 44a0d0d354f5f7b15f83323879a9112ea746daae7bef0b68238a27626ee757d9a04ce6590433841e14b325e8e7c5d62b8442885e50497e21b7cbca6da40d54ea + languageName: node + linkType: hard + +"strip-ansi@npm:^5.1.0": version: 5.2.0 resolution: "strip-ansi@npm:5.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz" dependencies: @@ -11587,7 +11784,7 @@ fsevents@~2.1.2: "strip-eof@npm:^1.0.0": version: 1.0.0 - resolution: "strip-eof@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-eof%2Fdownload%2Fstrip-eof-1.0.0.tgz" + resolution: "strip-eof@npm:1.0.0" checksum: 905cd8718ad2e7b3a9c4bc6a9ed409c38b8cef638845a9471884547de0dbe611828d584e749a38d3eebc2d3c830ea9c619d78875a639b7413d93080661807376 languageName: node linkType: hard @@ -11751,9 +11948,9 @@ fsevents@~2.1.2: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.0.0": - version: 5.0.1 - resolution: "terser-webpack-plugin@npm:5.0.1" +"terser-webpack-plugin@npm:^5.0.3": + version: 5.0.3 + resolution: "terser-webpack-plugin@npm:5.0.3" dependencies: jest-worker: ^26.6.1 p-limit: ^3.0.2 @@ -11763,7 +11960,7 @@ fsevents@~2.1.2: terser: ^5.3.8 peerDependencies: webpack: ^5.1.0 - checksum: 23dfddfcbaa72b0eb4ee2f2af56ec1d72498f4cf4b17a29712cfa4edd7ce5e4dbc7577f1c69835d32ce104672d77559b0b401a0534f67706f0919cf275e47ace + checksum: e71ae79f550095f1e33330b696f860ed6f704d5ad5c6e06a2a4e4db577c758007874459f8b67a4608285ca7c58c6fc3718482be51762f88fa20dbd6101ce700c languageName: node linkType: hard @@ -11802,7 +11999,7 @@ fsevents@~2.1.2: "thunky@npm:^1.0.2": version: 1.1.0 - resolution: "thunky@npm:1.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fthunky%2Fdownload%2Fthunky-1.1.0.tgz" + resolution: "thunky@npm:1.1.0" checksum: eceb856b6412ecd02c24731a2441698aa57622e03b0a4d6d1dea47d7b173aca54980fd2fba5b3a2e11ccec48373c46483f7f55a46717bfc07645395fa57267a6 languageName: node linkType: hard @@ -11821,11 +12018,11 @@ fsevents@~2.1.2: "@babel/preset-react": ^7.12.1 "@babel/preset-typescript": ^7.12.1 "@pmmmwh/react-refresh-webpack-plugin": ^0.4.2 - "@types/classnames": ^2.2.10 - "@types/lodash": ^4.14.162 - "@types/node": ^14.14.5 - "@types/react": ^16.9.53 - "@types/react-dom": ^16.9.8 + "@types/classnames": ^2.2.11 + "@types/lodash": ^4.14.164 + "@types/node": ^14.14.6 + "@types/react": ^16.9.55 + "@types/react-dom": ^16.9.9 "@types/react-responsive": ^8.0.2 "@types/react-router": ^5.1.8 "@types/react-router-bootstrap": ^0.24.5 @@ -11839,7 +12036,7 @@ fsevents@~2.1.2: babel-loader: ^8.1.0 babel-plugin-transform-builtin-extend: ^1.1.2 bootstrap: ^4.5.3 - bootstrap-icons: ^1.0.0 + bootstrap-icons: ^1.1.0 classnames: ^2.2.6 clean-webpack-plugin: ^3.0.0 clsx: ^1.1.1 @@ -11847,19 +12044,19 @@ fsevents@~2.1.2: core-js: ^3.6.5 css-loader: ^5.0.0 eslint: ^7.12.1 - eslint-config-prettier: ^6.14.0 + eslint-config-prettier: ^6.15.0 eslint-plugin-import: ^2.22.1 eslint-plugin-prettier: ^3.1.4 eslint-plugin-react: ^7.21.5 eslint-plugin-react-hooks: ^4.2.0 - file-loader: ^6.1.1 + file-loader: ^6.2.0 html-webpack-plugin: ^4.5.0 http-server: ^0.12.3 i18next: ^19.8.3 i18next-browser-languagedetector: ^6.0.1 localforage: ^1.9.0 lodash: ^4.17.20 - mini-css-extract-plugin: ^1.2.0 + mini-css-extract-plugin: ^1.2.1 pepjs: ^0.5.2 postcss: ^8.1.4 postcss-loader: ^4.0.4 @@ -11878,14 +12075,14 @@ fsevents@~2.1.2: react-router-dom: ^5.2.0 regenerator-runtime: ^0.13.7 rxjs: ^6.6.3 - sass: ^1.27.0 + sass: ^1.28.0 sass-loader: ^10.0.4 style-loader: ^2.0.0 ts-loader: ^8.0.7 type-fest: ^0.18.0 typescript: ^4.0.5 url-loader: ^4.1.1 - webpack: ^5.2.1 + webpack: ^5.3.2 webpack-chain: ^6.5.1 webpack-cli: ^4.1.0 webpack-dev-server: ^3.11.0 @@ -11894,7 +12091,7 @@ fsevents@~2.1.2: workbox-strategies: ^5.1.4 workbox-webpack-plugin: ^5.1.4 workbox-window: ^5.1.4 - xregexp: ^4.3.0 + xregexp: ^4.4.0 languageName: unknown linkType: soft @@ -11928,7 +12125,7 @@ fsevents@~2.1.2: "to-object-path@npm:^0.3.0": version: 0.3.0 - resolution: "to-object-path@npm:0.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-object-path%2Fdownload%2Fto-object-path-0.3.0.tgz" + resolution: "to-object-path@npm:0.3.0" dependencies: kind-of: ^3.0.2 checksum: a6a5a502259af744ac4e86752c8e71395c4106cae6f4e2a5c711e6f5de4cdbd08691e9295bf5b6e86b3e12722274fc3c5c0410f5fcf42ca783cc43f62139b5d0 @@ -11937,7 +12134,7 @@ fsevents@~2.1.2: "to-regex-range@npm:^2.1.0": version: 2.1.1 - resolution: "to-regex-range@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex-range%2Fdownload%2Fto-regex-range-2.1.1.tgz" + resolution: "to-regex-range@npm:2.1.1" dependencies: is-number: ^3.0.0 repeat-string: ^1.6.1 @@ -11956,7 +12153,7 @@ fsevents@~2.1.2: "to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": version: 3.0.2 - resolution: "to-regex@npm:3.0.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-regex%2Fdownload%2Fto-regex-3.0.2.tgz" + resolution: "to-regex@npm:3.0.2" dependencies: define-property: ^2.0.2 extend-shallow: ^3.0.2 @@ -11968,7 +12165,7 @@ fsevents@~2.1.2: "toidentifier@npm:1.0.0": version: 1.0.0 - resolution: "toidentifier@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftoidentifier%2Fdownload%2Ftoidentifier-1.0.0.tgz" + resolution: "toidentifier@npm:1.0.0" checksum: 95720e8a0f98f1525f50ccbecbc2a23f0a1b4e448de03819dbbeda03adf0d2010fe64525fbc9d549765242550d341bb891672e4ac0b2cac58613cdd742324255 languageName: node linkType: hard @@ -12097,7 +12294,7 @@ fsevents@~2.1.2: "type-is@npm:~1.6.17, type-is@npm:~1.6.18": version: 1.6.18 - resolution: "type-is@npm:1.6.18::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-is%2Fdownload%2Ftype-is-1.6.18.tgz" + resolution: "type-is@npm:1.6.18" dependencies: media-typer: 0.3.0 mime-types: ~2.1.24 @@ -12186,7 +12383,7 @@ typescript@^4.0.5: "union-value@npm:^1.0.0": version: 1.0.1 - resolution: "union-value@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funion-value%2Fdownload%2Funion-value-1.0.1.tgz" + resolution: "union-value@npm:1.0.1" dependencies: arr-union: ^3.1.0 get-value: ^2.0.6 @@ -12248,14 +12445,14 @@ typescript@^4.0.5: "unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 - resolution: "unpipe@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funpipe%2Fdownload%2Funpipe-1.0.0.tgz" + resolution: "unpipe@npm:1.0.0" checksum: ba244e8bf640475b2143af95be5d71353cd4d238d63abf5dfe700c67841f066eb0819fc60dee7f2348ef647a5644a06ba024b9a0ab6d399fc07a05eb72a30ac7 languageName: node linkType: hard "unset-value@npm:^1.0.0": version: 1.0.0 - resolution: "unset-value@npm:1.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz" + resolution: "unset-value@npm:1.0.0" dependencies: has-value: ^0.3.1 isobject: ^3.0.0 @@ -12263,7 +12460,14 @@ typescript@^4.0.5: languageName: node linkType: hard -"upath@npm:^1.1.1, upath@npm:^1.1.2, upath@npm:^1.2.0": +"upath@npm:^1.1.1": + version: 1.2.0 + resolution: "upath@npm:1.2.0" + checksum: ecb08ff3e7e3b152e03bceb7089e6f0077bf3494764397a301eb99a7a5cd4c593ea4d0b13a7714195ad8a3ddca9d7a5964037a1c0bc712e1ba7b67a79165a0be + languageName: node + linkType: hard + +"upath@npm:^1.1.2, upath@npm:^1.2.0": version: 1.2.0 resolution: "upath@npm:1.2.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz" checksum: ecb08ff3e7e3b152e03bceb7089e6f0077bf3494764397a301eb99a7a5cd4c593ea4d0b13a7714195ad8a3ddca9d7a5964037a1c0bc712e1ba7b67a79165a0be @@ -12281,7 +12485,7 @@ typescript@^4.0.5: "urix@npm:^0.1.0": version: 0.1.0 - resolution: "urix@npm:0.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furix%2Fdownload%2Furix-0.1.0.tgz" + resolution: "urix@npm:0.1.0" checksum: 6bdfca4e7fb7d035537068a47a04ace1bacfa32e6b1aaf54c5a0340c83125a186d59109a19b9a3a1c1f986d3eb718b82faf9ad03d53cb99cf868068580b15b3b languageName: node linkType: hard @@ -12312,7 +12516,7 @@ typescript@^4.0.5: "url-parse@npm:^1.4.3": version: 1.4.7 - resolution: "url-parse@npm:1.4.7::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.4.7.tgz" + resolution: "url-parse@npm:1.4.7" dependencies: querystringify: ^2.1.1 requires-port: ^1.0.0 @@ -12322,7 +12526,7 @@ typescript@^4.0.5: "url@npm:^0.11.0": version: 0.11.0 - resolution: "url@npm:0.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz" + resolution: "url@npm:0.11.0" dependencies: punycode: 1.3.2 querystring: 0.2.0 @@ -12332,7 +12536,7 @@ typescript@^4.0.5: "use@npm:^3.1.0": version: 3.1.1 - resolution: "use@npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuse%2Fdownload%2Fuse-3.1.1.tgz" + resolution: "use@npm:3.1.1" checksum: 8dd3bdeeda53864c779e0fa8d799064739708f80b45d06fa48a1a6ba192dc3f9e3266d4556f223cd718d27aedfd957922152e7463c00ac46e185f8331353fb6f languageName: node linkType: hard @@ -12370,12 +12574,12 @@ typescript@^4.0.5: "utils-merge@npm:1.0.1": version: 1.0.1 - resolution: "utils-merge@npm:1.0.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Futils-merge%2Fdownload%2Futils-merge-1.0.1.tgz" + resolution: "utils-merge@npm:1.0.1" checksum: a457956ebc09efbda05da8bf213ab89140bb9dffa3c42b3315dd8fc3c45d67a1b802741f58b7bba4872113201fc275fc86470289d8bd32b74297b5e5b5980705 languageName: node linkType: hard -"uuid@npm:^3.3.2, uuid@npm:^3.4.0": +"uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz" bin: @@ -12384,6 +12588,15 @@ typescript@^4.0.5: languageName: node linkType: hard +"uuid@npm:^3.4.0": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 1ce3f37e214d6d0dc94a6a9663a0365013ace66bc3fd5b203e6f5d2eeb978aaee1192367222386345d30b4c6a447928c501121aa84c637724bf105ef57284949 + languageName: node + linkType: hard + "v8-compile-cache@npm:^2.0.3": version: 2.1.1 resolution: "v8-compile-cache@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.1.1.tgz" @@ -12417,7 +12630,7 @@ typescript@^4.0.5: "vary@npm:~1.1.2": version: 1.1.2 - resolution: "vary@npm:1.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fvary%2Fdownload%2Fvary-1.1.2.tgz" + resolution: "vary@npm:1.1.2" checksum: 591f059f727ac1ba0d97cb7767f8583a03fcbb07db7be2b7dce838ede520ec0e958a41cb19077054769077fdc49a9b9a2dc391c83426bfee89c054b8cc7404bf languageName: node linkType: hard @@ -12461,7 +12674,7 @@ typescript@^4.0.5: "wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": version: 1.7.3 - resolution: "wbuf@npm:1.7.3::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwbuf%2Fdownload%2Fwbuf-1.7.3.tgz" + resolution: "wbuf@npm:1.7.3" dependencies: minimalistic-assert: ^1.0.0 checksum: 5916a49cb25fc8c70e4e7eb2d01955061132687a79879292fbdee632952f368c12bc5a641d0404794dbc0e3563f8b6e74dda04467b3e96be8bcd0b919bd47a8c @@ -12524,7 +12737,7 @@ typescript@^4.0.5: "webpack-dev-middleware@npm:^3.7.2": version: 3.7.2 - resolution: "webpack-dev-middleware@npm:3.7.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz" + resolution: "webpack-dev-middleware@npm:3.7.2" dependencies: memory-fs: ^0.4.1 mime: ^2.4.4 @@ -12539,7 +12752,7 @@ typescript@^4.0.5: "webpack-dev-server@npm:^3.11.0": version: 3.11.0 - resolution: "webpack-dev-server@npm:3.11.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz" + resolution: "webpack-dev-server@npm:3.11.0" dependencies: ansi-html: 0.0.7 bonjour: ^3.5.0 @@ -12588,7 +12801,7 @@ typescript@^4.0.5: "webpack-log@npm:^2.0.0": version: 2.0.0 - resolution: "webpack-log@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz" + resolution: "webpack-log@npm:2.0.0" dependencies: ansi-colors: ^3.0.0 uuid: ^3.3.2 @@ -12615,19 +12828,19 @@ typescript@^4.0.5: languageName: node linkType: hard -"webpack-sources@npm:^2.1.0": - version: 2.1.0 - resolution: "webpack-sources@npm:2.1.0" +"webpack-sources@npm:^2.1.1": + version: 2.2.0 + resolution: "webpack-sources@npm:2.2.0" dependencies: source-list-map: ^2.0.1 source-map: ^0.6.1 - checksum: 3950d59661b33ecbfaa0dc4d96a118f2d5e6f9f1b3a24ba5cdb0575758745698035949beac486f52a9e9a69bd94dce5f5a138125632117b1ab708220929e9cda + checksum: 7c4b797fa90d310872b70469dc04254e35571fb34530280a47b93edbe9cd6b0ffb79cf2b7565f4a18ff5b70315ff245d465ad35f952366cfd93c55d6445e2378 languageName: node linkType: hard -"webpack@npm:^5.2.1": - version: 5.2.1 - resolution: "webpack@npm:5.2.1" +"webpack@npm:^5.3.2": + version: 5.3.2 + resolution: "webpack@npm:5.3.2" dependencies: "@types/eslint-scope": ^3.7.0 "@types/estree": ^0.0.45 @@ -12650,9 +12863,9 @@ typescript@^4.0.5: pkg-dir: ^4.2.0 schema-utils: ^3.0.0 tapable: ^2.0.0 - terser-webpack-plugin: ^5.0.0 + terser-webpack-plugin: ^5.0.3 watchpack: ^2.0.0 - webpack-sources: ^2.1.0 + webpack-sources: ^2.1.1 peerDependencies: webpack-cli: "*" peerDependenciesMeta: @@ -12660,13 +12873,13 @@ typescript@^4.0.5: optional: true bin: webpack: bin/webpack.js - checksum: 1503203935b40b7a746e078a8653f7154347c76a0250d8ea7b6827059d53b54df6ddbdddae785c9e17d5da23a48edfe3dc3da859b25a58f54bcf45781dedb4eb + checksum: 334a24989d164e4652f6afd2ca2302ecd7d3fd5a963164f60e368ca812b5036fff9b1b6bdbf0257b94a4bbe401ccc0d2922b262631011ec2bcbcc810bcae88a3 languageName: node linkType: hard "websocket-driver@npm:0.6.5, websocket-driver@npm:>=0.5.1": version: 0.6.5 - resolution: "websocket-driver@npm:0.6.5::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz" + resolution: "websocket-driver@npm:0.6.5" dependencies: websocket-extensions: ">=0.1.1" checksum: 1169a0ecccf514a98abc54a1b9c9aa56ef662e9169336cc4bc684c4f95a52b93f499d52d2b2f1eb7ccae79dcc41d6cfe8bf9b4cf05f4c69756d7c75fa53d312f @@ -12675,21 +12888,21 @@ typescript@^4.0.5: "websocket-extensions@npm:>=0.1.1": version: 0.1.4 - resolution: "websocket-extensions@npm:0.1.4::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-extensions%2Fdownload%2Fwebsocket-extensions-0.1.4.tgz" + resolution: "websocket-extensions@npm:0.1.4" checksum: bbafc0ffa1c6f54606aac88ce366c6a0d72c7827291f40c15a1c325f9f4abe7f7176ab844dd43eab4f07276d9e748dd241d671874c4a0df5cbb0fbed133908dc languageName: node linkType: hard "which-module@npm:^2.0.0": version: 2.0.0 - resolution: "which-module@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich-module%2Fdownload%2Fwhich-module-2.0.0.tgz" + resolution: "which-module@npm:2.0.0" checksum: 3d2107ab18c3c2a0ffa4f1a2a0a8862d0bb3fd5c72b10df9cbd75a15b496533bf4c4dc6fa65cefba6fdb8af7935ffb939ef4c8f2eb7835b03d1b93680e9101e9 languageName: node linkType: hard "which@npm:^1.2.9": version: 1.3.1 - resolution: "which@npm:1.3.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz" + resolution: "which@npm:1.3.1" dependencies: isexe: ^2.0.0 bin: @@ -12924,7 +13137,7 @@ typescript@^4.0.5: "wrap-ansi@npm:^5.1.0": version: 5.1.0 - resolution: "wrap-ansi@npm:5.1.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz" + resolution: "wrap-ansi@npm:5.1.0" dependencies: ansi-styles: ^3.2.0 string-width: ^3.0.0 @@ -12951,25 +13164,25 @@ typescript@^4.0.5: "ws@npm:^6.2.1": version: 6.2.1 - resolution: "ws@npm:6.2.1::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz" + resolution: "ws@npm:6.2.1" dependencies: async-limiter: ~1.0.0 checksum: 35d32b09e28f799f04708c3a7bd9eff469ae63e60543d7e18335f28689228a42ee21210f48de680aad6e5317df76b5b1183d1a1ea4b4d14cb6e0943528f40e76 languageName: node linkType: hard -"xregexp@npm:^4.3.0": - version: 4.3.0 - resolution: "xregexp@npm:4.3.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-4.3.0.tgz" +"xregexp@npm:^4.4.0": + version: 4.4.0 + resolution: "xregexp@npm:4.4.0" dependencies: - "@babel/runtime-corejs3": ^7.8.3 - checksum: 2dcef4888ea32e7c01b8f42d1ee3df24970de14b299a8f534ccecf2252d297092f92d037502176ec334b6c8d7cd1dd3dba0d3cf949e26f418d50b46846268839 + "@babel/runtime-corejs3": ^7.12.1 + checksum: b6570b6dd971935583596b7069ae223f04e29e1df84b6bd2973edb238ea4bfd96ee882a5a2fd054d322c1f28dce813d6edfe1af942cd7a2f1dc0234b0454e940 languageName: node linkType: hard "y18n@npm:^4.0.0": version: 4.0.0 - resolution: "y18n@npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz" + resolution: "y18n@npm:4.0.0" checksum: 5b7434c95d31ffa2b9b97df98e2d786446a0ff21c30e0265088caa4818a3335559a425763e55b6d9370d9fcecb75a36ae5bb901184676bd255f96ee3c743f667 languageName: node linkType: hard @@ -12990,7 +13203,7 @@ typescript@^4.0.5: "yargs-parser@npm:^13.1.2": version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz" + resolution: "yargs-parser@npm:13.1.2" dependencies: camelcase: ^5.0.0 decamelize: ^1.2.0 @@ -13000,7 +13213,7 @@ typescript@^4.0.5: "yargs@npm:^13.3.2": version: 13.3.2 - resolution: "yargs@npm:13.3.2::__archiveUrl=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz" + resolution: "yargs@npm:13.3.2" dependencies: cliui: ^5.0.0 find-up: ^3.0.0 -- cgit v1.2.3