Repository: ice-lab/icestark
Pull request #484 (2021-12-09 09:12:28)

release: 2.7.1
- [x] improve UX by docs, Closes #476 
- [x] when load a module, export all moudle's context, Closes #469 


Patch:
diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index 7f082f2..0000000
--- a/.npmrc
+++ /dev/null
@@ -1,1 +0,0 @@
-registry=https://registry.npmmirror.com
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6724df1..8c3f45f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 See [https://github.com/ice-lab/icestark/releases](https://github.com/ice-lab/icestark/releases) for what has changed in each version of icestark.
 
+## 2.7.1
+
+- [feat] improve DX a lot.
+
 ## 2.7.0
 
 - [feat] cache css by default. ([#373](https://github.com/ice-lab/icestark/issues/373))
diff --git a/package.json b/package.json
index e0c2def..400ec8f 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,11 @@
 {
   "name": "icestark-monorepo",
-  "version": "2.7.0",
+  "version": "2.7.1",
   "private": true,
   "description": "Icestark is a JavaScript library for multiple projects, Ice workbench solution.",
   "scripts": {
     "preinstall": "npx only-allow pnpm",
-    "setup": "rm -rf node_modules && rm -rf ./packages/*/node_modules && pnpm i && npm run build",
+    "setup": "rm -rf node_modules && rm -rf ./packages/*/node_modules && pnpm i --registry=https://registry.npmmirror.com && npm run build",
     "build": "pnpm run clean && pnpm -r --filter ./packages run build",
     "watch": "pnpm -r --filter ./packages --parallel run watch",
     "clean": "rimraf packages/*/lib",
diff --git a/packages/icestark-module/CHANGELOG.md b/packages/icestark-module/CHANGELOG.md
index b921128..f53665c 100644
--- a/packages/icestark-module/CHANGELOG.md
+++ b/packages/icestark-module/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 1.5.0
+
+- [fix] exports all library exports. ([#469](https://github.com/ice-lab/icestark/pull/469))
+
 ## 1.4.3
 
 - [fix] avoid unmounting when `<MicroModule>` has not yet been mounted.
diff --git a/packages/icestark-module/package.json b/packages/icestark-module/package.json
index e102df5..140ff34 100644
--- a/packages/icestark-module/package.json
+++ b/packages/icestark-module/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@ice/stark-module",
-  "version": "1.4.3",
+  "version": "1.5.0",
   "description": "toolkit for load standard micro-module",
   "main": "lib/index.js",
   "scripts": {
diff --git a/packages/icestark-module/src/modules.tsx b/packages/icestark-module/src/modules.tsx
index b7304f8..f99451c 100644
--- a/packages/icestark-module/src/modules.tsx
+++ b/packages/icestark-module/src/modules.tsx
@@ -4,7 +4,7 @@ import { Runtime, parseRuntime, RuntimeInstance } from './runtimeHelper';
 
 export interface StarkModule {
   name: string;
-  url?: string|string[];
+  url?: string | string[];
   /**
    * you are not expected to use it without the wrapper `<MicroModule />`
    */
@@ -61,8 +61,8 @@ export const registerModule = (module: StarkModule) => {
   const hasRegistered = globalModules.filter((m) => m.name === module.name).length;
 
   /*
-  * If a module registers many times, the former registration will be removed.
-  */
+   * If a module registers many times, the former registration will be removed.
+   */
   if (hasRegistered) {
     removeModule(module.name);
   }
@@ -135,7 +135,6 @@ export const parseUrlAssets = (assets: string | string[]) => {
   return { jsList, cssList };
 };
 
-
 export function appendCSS(
   name: string,
   url: string,
@@ -182,11 +181,30 @@ export function removeCSS(name: string, node?: HTMLElement | Document, removeLis
 
 /**
  * return globalModules
-*/
+ */
 export const getModules = function () {
   return globalModules || [];
 };
 
+/**
+ * get import modules
+ */
+export const getAllImportedModules = function () {
+  return importModules;
+};
+
+/**
+ * get import module by name
+ */
+export const getImportedModule = function (name: string) {
+  if (typeof name !== 'string') {
+    console.error(`[icestark-module]: should be string, but get ${typeof name}`);
+    return;
+  }
+
+  return importModules[name];
+};
+
 /**
  * load module source
  */
@@ -233,7 +251,12 @@ export const loadModule = async (targetModule: StarkModule, sandbox?: ISandbox)
     await Promise.all(cssList.map((css: string) => appendCSS(name, css)));
   }
 
+  if (typeof moduleInfo.component !== 'undefined') {
+    console.warn('[icestark module] The export function name called component is conflict, please change it or it will be ignored.');
+  }
+
   return {
+    ...moduleInfo,
     mount,
     unmount,
     component,
@@ -243,7 +266,12 @@ export const loadModule = async (targetModule: StarkModule, sandbox?: ISandbox)
 /**
  * mount module function
  */
-export const mountModule = async (targetModule: StarkModule, targetNode: HTMLElement, props: any = {}, sandbox?: ISandbox) => {
+export const mountModule = async (
+  targetModule: StarkModule,
+  targetNode: HTMLElement,
+  props: any = {},
+  sandbox?: ISandbox,
+) => {
   const { mount, component } = await loadModule(targetModule, sandbox);
   return mount(component, targetNode, props);
 };
@@ -266,4 +294,3 @@ export const unmoutModule = (targetModule: StarkModule, targetNode: HTMLElement)
     return unmount(targetNode);
   }
 };
-
diff --git a/packages/icestark/package.json b/packages/icestark/package.json
index cfee5ea..d77ca28 100644
--- a/packages/icestark/package.json
+++ b/packages/icestark/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@ice/stark",
-  "version": "2.7.0",
+  "version": "2.7.1",
   "description": "Icestark is a JavaScript library for multiple projects, Ice workbench solution.",
   "scripts": {
     "build": "rm -rf lib && tsc",
diff --git a/packages/icestark/src/apps.ts b/packages/icestark/src/apps.ts
index 559438e..99417d8 100644
--- a/packages/icestark/src/apps.ts
+++ b/packages/icestark/src/apps.ts
@@ -15,7 +15,8 @@ import {
 import { setCache } from './util/cache';
 import { loadScriptByFetch, loadScriptByImport } from './util/loaders';
 import { getLifecyleByLibrary, getLifecyleByRegister } from './util/getLifecycle';
-import { mergeFrameworkBaseToPath, getAppBasename, shouldSetBasename } from './util/helpers';
+import { mergeFrameworkBaseToPath, getAppBasename, shouldSetBasename, log, isDev } from './util/helpers';
+import { ErrorCode, formatErrMessage } from './util/error';
 import globalConfiguration, { temporaryState } from './util/globalConfiguration';
 
 import type { StartConfiguration } from './util/globalConfiguration';
@@ -164,7 +165,11 @@ export function updateAppConfig(appName: string, config) {
   });
 }
 
-// load app js assets
+/**
+ * Core logic to load micro apps
+ * @param appConfig
+ * @returns
+ */
 export async function loadAppModule(appConfig: AppConfig) {
   const { onLoadingApp, onFinishLoading, fetch } = getAppConfig(appConfig.name)?.configuration || globalConfiguration;
 
@@ -212,13 +217,19 @@ export async function loadAppModule(appConfig: AppConfig) {
         loadAndAppendJsAssets(appAssets, { scriptAttributes }),
       ]);
       lifecycle =
-        getLifecyleByLibrary() ||
-        getLifecyleByRegister() ||
-        {};
+          getLifecyleByLibrary() ||
+          getLifecyleByRegister() ||
+          {};
   }
 
   if (isEmpty(lifecycle)) {
-    console.error('[@ice/stark] microapp should export mount/unmout or register registerAppEnter/registerAppLeave.');
+    log.error(
+      formatErrMessage(
+        ErrorCode.EMPTY_LIFECYCLES,
+        isDev && 'Unable to retrieve lifecycles of {0} after loading it',
+        appConfig.name,
+      ),
+    );
   }
 
   onFinishLoading(appConfig);
@@ -426,7 +437,14 @@ export async function unloadMicroApp(appName: string) {
     delete appConfig.appAssets;
     updateAppConfig(appName, { status: NOT_LOADED });
   } else {
-    console.log(`[icestark] can not find app ${appName} when call unloadMicroApp`);
+    log.error(
+      formatErrMessage(
+        ErrorCode.CANNOT_FIND_APP,
+        isDev && 'Can not find app {0} when call {1}',
+        appName,
+        'unloadMicroApp',
+      ),
+    );
   }
 }
 
@@ -438,7 +456,14 @@ export function removeMicroApp(appName: string) {
     unloadMicroApp(appName);
     microApps.splice(appIndex, 1);
   } else {
-    console.log(`[icestark] can not find app ${appName} when call removeMicroApp`);
+    log.error(
+      formatErrMessage(
+        ErrorCode.CANNOT_FIND_APP,
+        isDev && 'Can not find app {0} when call {1}',
+        appName,
+        'removeMicroApp',
+      ),
+    );
   }
 }
 
diff --git a/packages/icestark/src/start.ts b/packages/icestark/src/start.ts
index 0a548c6..4c4bf8d 100644
--- a/packages/icestark/src/start.ts
+++ b/packages/icestark/src/start.ts
@@ -13,10 +13,17 @@ import { emptyAssets, recordAssets } from './util/handleAssets';
 import { LOADING_ASSETS, MOUNTED } from './util/constant';
 import { doPrefetch } from './util/prefetch';
 import globalConfiguration, { temporaryState } from './util/globalConfiguration';
+import { ErrorCode, formatErrMessage } from './util/error';
+import { isDev } from './util/helpers';
 import type { RouteType, StartConfiguration } from './util/globalConfiguration';
 
 if (!window?.fetch) {
-  throw new Error('[icestark] window.fetch not found, you need polyfill it');
+  throw new Error(
+    formatErrMessage(
+      ErrorCode.UNSUPPORTED_FETCH,
+      isDev && 'window.fetch not found, you need to polyfill it!',
+    ),
+  );
 }
 
 interface OriginalStateFunction {
diff --git a/packages/icestark/src/util/error.ts b/packages/icestark/src/util/error.ts
new file mode 100644
index 0000000..9d5b16c
--- /dev/null
+++ b/packages/icestark/src/util/error.ts
@@ -0,0 +1,32 @@
+export enum ErrorCode {
+  'EMPTY_LIFECYCLES' = 1,
+  'UNSUPPORTED_IMPORT_BROWSER' = 2,
+  'UNSUPPORTED_FETCH' = 3,
+  'CANNOT_FIND_APP' = 4,
+  'JS_LOAD_ERROR' = 5,
+  'CSS_LOAD_ERROR' = 6,
+}
+
+export function normalizeMsg(msg: string, args: string[]) {
+  if (args.length === 0) {
+    return msg;
+  }
+
+  return msg.replace(/\{(\d+)\}/g, (match, p1) => {
+    const idx = p1[0];
+    if (typeof args[idx] === 'string' || typeof args[idx] === 'number') {
+      return args[idx];
+    }
+    return match;
+  });
+}
+
+export function formatErrMessage(code: string | number, msg?: string, ...args: string[]) {
+  return `icestark minified message #${code}: ${
+    normalizeMsg(
+      msg ? `${msg}. ` : '',
+      args,
+    )}See https://micro-frontends.ice.work/error?code=${code}${
+    args.length ? `&arg=${args.join('&arg=')}` : ''
+  }`;
+}
diff --git a/packages/icestark/src/util/handleAssets.ts b/packages/icestark/src/util/handleAssets.ts
index cb1034d..90c1d84 100644
--- a/packages/icestark/src/util/handleAssets.ts
+++ b/packages/icestark/src/util/handleAssets.ts
@@ -3,8 +3,8 @@
 import urlParse from 'url-parse';
 import Sandbox, { SandboxProps, SandboxConstructor } from '@ice/sandbox';
 import { PREFIX, DYNAMIC, STATIC, IS_CSS_REGEX } from './constant';
-import { warn, error } from './message';
-import { toArray, isDev, formatMessage, builtInScriptAttributesMap, looseBoolean2Boolean, isElement } from './helpers';
+import { toArray, isDev, formatMessage, builtInScriptAttributesMap, looseBoolean2Boolean, isElement, log } from './helpers';
+import { formatErrMessage, ErrorCode } from './error';
 import type { Fetch } from './globalConfiguration';
 import type { ScriptAttributes } from '../apps';
 
@@ -130,7 +130,13 @@ export function appendCSS(
       element.addEventListener(
         'error',
         () => {
-          error(`css asset loaded error: ${content || asset}`);
+          log.error(
+            formatErrMessage(
+              ErrorCode.CSS_LOAD_ERROR,
+              isDev && 'The stylesheets loaded error: {0}',
+              (content || asset) as string,
+            ),
+          );
           return resolve();
         },
         false,
@@ -257,7 +263,17 @@ export function appendExternalScript(asset: string | Asset,
 
     element.addEventListener(
       'error',
-      () => reject(new Error(`js asset loaded error: ${content || asset}`)),
+      () => {
+        reject(
+          new Error(
+            formatErrMessage(
+              ErrorCode.JS_LOAD_ERROR,
+              isDev && 'The script resources loaded error: {0}',
+              (content || asset) as string,
+            ),
+          ),
+        );
+      },
       false,
     );
     element.addEventListener('load', () => resolve(), false);
@@ -537,7 +553,7 @@ export async function getEntryAssets({
   if (!cachedContent) {
     if (!htmlContent && entry) {
       if (!fetch) {
-        warn('Current environment does not support window.fetch, please use custom fetch');
+        log.warn('Current environment does not support window.fetch, please use custom fetch');
         throw new Error(
           `fetch ${entry} error: Current environment does not support window.fetch, please use custom fetch`,
         );
@@ -711,7 +727,7 @@ export async function loadAndAppendCssAssets(cssList: Array<Asset | HTMLElement>
  * @param {Sandbox} [sandbox]
  * @returns
  */
-export async function loadAndAppendJsAssets(
+export function loadAndAppendJsAssets(
   assets: Assets,
   {
     scriptAttributes = [],
@@ -727,17 +743,16 @@ export async function loadAndAppendJsAssets(
   const hasInlineScript = jsList.find((asset) => asset.type === AssetTypeEnum.INLINE);
   if (hasInlineScript) {
     // make sure js assets loaded in order if has inline scripts
-    await jsList.reduce((chain, asset, index) => {
+    return jsList.reduce((chain, asset, index) => {
       return chain.then(() => appendExternalScript(asset, {
         root: jsRoot,
         scriptAttributes,
         id: `${PREFIX}-js-${index}`,
       }));
     }, Promise.resolve());
-    return;
   }
 
-  await Promise.all(
+  return Promise.all(
     jsList.map((asset, index) => appendExternalScript(asset, {
       root: jsRoot,
       scriptAttributes,
diff --git a/packages/icestark/src/util/helpers.ts b/packages/icestark/src/util/helpers.ts
index 27ee329..0fab6fd 100644
--- a/packages/icestark/src/util/helpers.ts
+++ b/packages/icestark/src/util/helpers.ts
@@ -167,3 +167,9 @@ export const asyncForEach = async <T> (arr: T[], callback: (item: T, index: numb
     await callback(arr[idx], idx);
   }
 };
+
+export const log = {
+  info: console.log,
+  error: console.error,
+  warn: console.warn,
+};
diff --git a/packages/icestark/src/util/loaders.ts b/packages/icestark/src/util/loaders.ts
index ae538c6..2329959 100644
--- a/packages/icestark/src/util/loaders.ts
+++ b/packages/icestark/src/util/loaders.ts
@@ -2,7 +2,8 @@ import Sandbox from '@ice/sandbox';
 import { getGlobalProp, noteGlobalProps } from './global';
 import { Asset, fetchScripts, AssetTypeEnum, appendExternalScript } from './handleAssets';
 import { getLifecyleByLibrary, getLifecyleByRegister } from './getLifecycle';
-import { asyncForEach } from './helpers';
+import { asyncForEach, isDev } from './helpers';
+import { ErrorCode, formatErrMessage } from './error';
 import { PREFIX } from './constant';
 
 import type { ModuleLifeCycle } from '../apps';
@@ -97,7 +98,12 @@ export async function loadScriptByImport(jsList: Asset[]): Promise<null | Module
         dynamicImport = new Function('url', 'return import(url)');
       } catch (e) {
         return Promise.reject(
-          new Error('[icestark] You are not support to use `loadScriptMode = import` where dynamic import is not supported by browsers.'),
+          new Error(
+            formatErrMessage(
+              ErrorCode.UNSUPPORTED_IMPORT_BROWSER,
+              isDev && 'You can not use loadScriptMode = import where dynamic import is not supported by browsers.',
+            ),
+          ),
         );
       }
 
diff --git a/packages/icestark/src/util/message.ts b/packages/icestark/src/util/message.ts
deleted file mode 100644
index 3e61494..0000000
--- a/packages/icestark/src/util/message.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export function warn(message: string): void {
-  return console && console.warn(message);
-}
-
-export function error(message: string): void {
-  return console && console.error(message);
-}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1f82253..506ea68 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -39,12 +39,12 @@ importers:
       '@ice/stark-app': link:packages/icestark-app
       '@ice/stark-data': link:packages/icestark-data
       '@ice/stark-module': link:packages/icestark-module
-      '@iceworks/spec': 1.4.2_b0505e73fb80a469b12939b6b7fdc1f5
+      '@iceworks/spec': 1.5.0_b0505e73fb80a469b12939b6b7fdc1f5
       '@testing-library/jest-dom': 4.2.4
       '@testing-library/react': 9.5.0
       '@types/fs-extra': 9.0.13
       '@types/jest': 24.9.1
-      '@types/node': 12.20.37
+      '@types/node': 12.20.38
       codecov: 3.8.3
       eslint: 7.32.0
       fs-extra: 10.0.0
@@ -56,7 +56,7 @@ importers:
       rimraf: 3.0.2
       stylelint: 10.1.0
       ts-jest: 24.3.0_jest@24.9.0
-      ts-node: 10.4.0_861e5f60dcd52a8caaf61940af2ee565
+      ts-node: 10.4.0_02f7a00bfaa8332ec8f30a3c81354282
       typescript: 4.5.4
       urllib: 2.38.0
 
@@ -161,6 +161,20 @@ packages:
       - supports-color
     dev: true
 
+  /@babel/eslint-parser/7.16.5_@babel+core@7.16.5+eslint@7.32.0:
+    resolution: {integrity: sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==, tarball: '@babel/eslint-parser/download/@babel/eslint-parser-7.16.5.tgz'}
+    engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
+    peerDependencies:
+      '@babel/core': '>=7.11.0'
+      eslint: ^7.5.0 || ^8.0.0
+    dependencies:
+      '@babel/core': 7.16.5
+      eslint: 7.32.0
+      eslint-scope: 5.1.1
+      eslint-visitor-keys: 2.1.0
+      semver: 6.3.0
+    dev: true
+
   /@babel/generator/7.16.5:
     resolution: {integrity: sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==, tarball: '@babel/generator/download/@babel/generator-7.16.5.tgz'}
     engines: {node: '>=6.9.0'}
@@ -170,6 +184,13 @@ packages:
       source-map: 0.5.7
     dev: true
 
+  /@babel/helper-annotate-as-pure/7.16.0:
+    resolution: {integrity: sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=, tarball: '@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.0
+    dev: true
+
   /@babel/helper-compilation-targets/7.16.3_@babel+core@7.16.5:
     resolution: {integrity: sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==, tarball: '@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.3.tgz'}
     engines: {node: '>=6.9.0'}
@@ -291,6 +312,16 @@ packages:
     hasBin: true
     dev: true
 
+  /@babel/plugin-syntax-jsx/7.16.5_@babel+core@7.16.5:
+    resolution: {integrity: sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==, tarball: '@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.5.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.5
+      '@babel/helper-plugin-utils': 7.16.5
+    dev: true
+
   /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.5:
     resolution: {integrity: sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=, tarball: '@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz'}
     peerDependencies:
@@ -300,11 +331,71 @@ packages:
       '@babel/helper-plugin-utils': 7.16.5
     dev: true
 
+  /@babel/plugin-transform-react-display-name/7.16.5_@babel+core@7.16.5:
+    resolution: {integrity: sha512-dHYCOnzSsXFz8UcdNQIHGvg94qPL/teF7CCiCEMRxmA1G2p5Mq4JnKVowCDxYfiQ9D7RstaAp9kwaSI+sXbnhw==, tarball: '@babel/plugin-transform-react-display-name/download/@babel/plugin-transform-react-display-name-7.16.5.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.5
+      '@babel/helper-plugin-utils': 7.16.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-development/7.16.5_@babel+core@7.16.5:
+    resolution: {integrity: sha512-uQSLacMZSGLCxOw20dzo1dmLlKkd+DsayoV54q3MHXhbqgPzoiGerZQgNPl/Ro8/OcXV2ugfnkx+rxdS0sN5Uw==, tarball: '@babel/plugin-transform-react-jsx-development/download/@babel/plugin-transform-react-jsx-development-7.16.5.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.5
+      '@babel/plugin-transform-react-jsx': 7.16.5_@babel+core@7.16.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx/7.16.5_@babel+core@7.16.5:
+    resolution: {integrity: sha512-+arLIz1d7kmwX0fKxTxbnoeG85ONSnLpvdODa4P3pc1sS7CV1hfmtYWufkW/oYsPnkDrEeQFxhUWcFnrXW7jQQ==, tarball: '@babel/plugin-transform-react-jsx/download/@babel/plugin-transform-react-jsx-7.16.5.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.5
+      '@babel/helper-annotate-as-pure': 7.16.0
+      '@babel/helper-module-imports': 7.16.0
+      '@babel/helper-plugin-utils': 7.16.5
+      '@babel/plugin-syntax-jsx': 7.16.5_@babel+core@7.16.5
+      '@babel/types': 7.16.0
+    dev: true
+
+  /@babel/plugin-transform-react-pure-annotations/7.16.5_@babel+core@7.16.5:
+    resolution: {integrity: sha512-0nYU30hCxnCVCbRjSy9ahlhWZ2Sn6khbY4FqR91W+2RbSqkWEbVu2gXh45EqNy4Bq7sRU+H4i0/6YKwOSzh16A==, tarball: '@babel/plugin-transform-react-pure-annotations/download/@babel/plugin-transform-react-pure-annotations-7.16.5.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.5
+      '@babel/helper-annotate-as-pure': 7.16.0
+      '@babel/helper-plugin-utils': 7.16.5
+    dev: true
+
+  /@babel/preset-react/7.16.5_@babel+core@7.16.5:
+    resolution: {integrity: sha512-3kzUOQeaxY/2vhPDS7CX/KGEGu/1bOYGvdRDJ2U5yjEz5o5jmIeTPLoiQBPGjfhPascLuW5OlMiPzwOOuB6txg==, tarball: '@babel/preset-react/download/@babel/preset-react-7.16.5.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.5
+      '@babel/helper-plugin-utils': 7.16.5
+      '@babel/helper-validator-option': 7.14.5
+      '@babel/plugin-transform-react-display-name': 7.16.5_@babel+core@7.16.5
+      '@babel/plugin-transform-react-jsx': 7.16.5_@babel+core@7.16.5
+      '@babel/plugin-transform-react-jsx-development': 7.16.5_@babel+core@7.16.5
+      '@babel/plugin-transform-react-pure-annotations': 7.16.5_@babel+core@7.16.5
+    dev: true
+
   /@babel/runtime-corejs3/7.16.5:
     resolution: {integrity: sha512-F1pMwvTiUNSAM8mc45kccMQxj31x3y3P+tA/X8hKNWp3/hUsxdGxZ3D3H8JIkxtfA8qGkaBTKvcmvStaYseAFw==, tarball: '@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.16.5.tgz'}
     engines: {node: '>=6.9.0'}
     dependencies:
-      core-js-pure: 3.19.3
+      core-js-pure: 3.20.0
       regenerator-runtime: 0.13.9
     dev: true
 
@@ -458,7 +549,7 @@ packages:
     dev: true
 
   /@commitlint/resolve-extends/7.6.0:
-    resolution: {integrity: sha1-BoC3busOQfcowvOGRUc6CVYpnts=, tarball: '@commitlint/resolve-extends/download/@commitlint/resolve-extends-7.6.0.tgz'}
+    resolution: {integrity: sha1-BoC3busOQfcowvOGRUc6CVYpnts=, tarball: '@commitlint/resolve-extends/download/@commitlint/resolve-extends-7.6.0.tgz?cache=0&sync_timestamp=1637135660010&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40commitlint%2Fresolve-extends%2Fdownload%2F%40commitlint%2Fresolve-extends-7.6.0.tgz'}
     engines: {node: '>=4'}
     dependencies:
       babel-runtime: 6.26.0
@@ -534,10 +625,10 @@ packages:
     resolution: {integrity: sha1-tSBSnsIdjllFoYUd/Rwy6U45/0U=, tarball: '@humanwhocodes/object-schema/download/@humanwhocodes/object-schema-1.2.1.tgz'}
     dev: true
 
-  /@iceworks/eslint-plugin-best-practices/0.2.9_b0505e73fb80a469b12939b6b7fdc1f5:
-    resolution: {integrity: sha1-3EWlEA+LMlUBG3rgIOdqSWh0DQc=, tarball: '@iceworks/eslint-plugin-best-practices/download/@iceworks/eslint-plugin-best-practices-0.2.9.tgz'}
+  /@iceworks/eslint-plugin-best-practices/0.2.10_b0505e73fb80a469b12939b6b7fdc1f5:
+    resolution: {integrity: sha512-5VyGibvZ9bkwBnijjG1oSo+iAuMi7dxlPUmPDiG2sYsENjQueMLjh7E180a7Ija2n7dWYRWhFpsAP/c93W8gcA==, tarball: '@iceworks/eslint-plugin-best-practices/download/@iceworks/eslint-plugin-best-practices-0.2.10.tgz'}
     dependencies:
-      '@iceworks/spec': 1.4.2_b0505e73fb80a469b12939b6b7fdc1f5
+      '@iceworks/spec': 1.5.0_b0505e73fb80a469b12939b6b7fdc1f5
       '@mdn/browser-compat-data': 2.0.7
       fs-extra: 9.1.0
       glob: 7.2.0
@@ -552,19 +643,21 @@ packages:
       - typescript
     dev: true
 
-  /@iceworks/spec/1.4.2_b0505e73fb80a469b12939b6b7fdc1f5:
-    resolution: {integrity: sha1-1qexwyjfuviawff2ztIvVh2ia6o=, tarball: '@iceworks/spec/download/@iceworks/spec-1.4.2.tgz'}
+  /@iceworks/spec/1.5.0_b0505e73fb80a469b12939b6b7fdc1f5:
+    resolution: {integrity: sha512-HegR9GIVEE+TSPRYSftI5gkO+/P7EARn7d3u+5hf0XUogwkKmxBsRVFOpjH4NJQCnufZAzFRGXztzKwRBn14GA==, tarball: '@iceworks/spec/download/@iceworks/spec-1.5.0.tgz'}
     peerDependencies:
       eslint: '>=6.8.0'
       stylelint: '>=8.3.0'
     dependencies:
-      '@iceworks/eslint-plugin-best-practices': 0.2.9_b0505e73fb80a469b12939b6b7fdc1f5
-      '@typescript-eslint/eslint-plugin': 4.33.0_3289a875d95a672b97ebf589745c66ef
-      '@typescript-eslint/parser': 4.33.0_eslint@7.32.0+typescript@4.5.4
-      babel-eslint: 10.1.0_eslint@7.32.0
+      '@babel/core': 7.16.5
+      '@babel/eslint-parser': 7.16.5_@babel+core@7.16.5+eslint@7.32.0
+      '@babel/preset-react': 7.16.5_@babel+core@7.16.5
+      '@iceworks/eslint-plugin-best-practices': 0.2.10_b0505e73fb80a469b12939b6b7fdc1f5
+      '@typescript-eslint/eslint-plugin': 5.8.0_da4c6df71e3dc18e6a1d96f4f9a2567d
+      '@typescript-eslint/parser': 5.8.0_eslint@7.32.0+typescript@4.5.4
       commitlint-config-ali: 0.1.3
       eslint: 7.32.0
-      eslint-config-ali: 12.2.2_eslint@7.32.0
+      eslint-config-ali: 13.0.0_eslint@7.32.0
       eslint-plugin-import: 2.25.3_eslint@7.32.0
       eslint-plugin-jsx-plus: 0.1.0
       eslint-plugin-rax-compile-time-miniapp: 1.0.0
@@ -792,7 +885,7 @@ packages:
     dev: true
 
   /@nodelib/fs.walk/1.2.8:
-    resolution: {integrity: sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=, tarball: '@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz?cache=0&sync_timestamp=1632822730231&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.8.tgz'}
+    resolution: {integrity: sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=, tarball: '@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz'}
     engines: {node: '>= 8'}
     dependencies:
       '@nodelib/fs.scandir': 2.1.5
@@ -881,7 +974,7 @@ packages:
     dev: true
 
   /@types/babel__template/7.4.1:
-    resolution: {integrity: sha1-PRpI/Z1sDt/Vby/1eNrtSPNsiWk=, tarball: '@types/babel__template/download/@types/babel__template-7.4.1.tgz?cache=0&sync_timestamp=1637301537064&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fbabel__template%2Fdownload%2F%40types%2Fbabel__template-7.4.1.tgz'}
+    resolution: {integrity: sha1-PRpI/Z1sDt/Vby/1eNrtSPNsiWk=, tarball: '@types/babel__template/download/@types/babel__template-7.4.1.tgz'}
     dependencies:
       '@babel/parser': 7.16.6
       '@babel/types': 7.16.0
@@ -896,14 +989,14 @@ packages:
   /@types/fs-extra/9.0.13:
     resolution: {integrity: sha1-dZT7rgT+fxkYzos9IT90/0SsH0U=, tarball: '@types/fs-extra/download/@types/fs-extra-9.0.13.tgz'}
     dependencies:
-      '@types/node': 12.20.37
+      '@types/node': 12.20.38
     dev: true
 
   /@types/glob/7.2.0:
     resolution: {integrity: sha1-vBtb86qS8lvV3TnzXFc2G9zlsus=, tarball: '@types/glob/download/@types/glob-7.2.0.tgz'}
     dependencies:
       '@types/minimatch': 3.0.5
-      '@types/node': 12.20.37
+      '@types/node': 12.20.38
     dev: true
 
   /@types/istanbul-lib-coverage/2.0.3:
@@ -930,7 +1023,7 @@ packages:
     dev: true
 
   /@types/json-schema/7.0.9:
-    resolution: {integrity: sha1-l+3JA36gw4WFMgsolk3eOznkZg0=, tarball: '@types/json-schema/download/@types/json-schema-7.0.9.tgz'}
+    resolution: {integrity: sha1-l+3JA36gw4WFMgsolk3eOznkZg0=, tarball: '@types/json-schema/download/@types/json-schema-7.0.9.tgz?cache=0&sync_timestamp=1637272400115&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.9.tgz'}
     dev: true
 
   /@types/json5/0.0.29:
@@ -941,8 +1034,8 @@ packages:
     resolution: {integrity: sha1-EAHMXmo3BLg8I2An538vWOoBD0A=, tarball: '@types/minimatch/download/@types/minimatch-3.0.5.tgz'}
     dev: true
 
-  /@types/node/12.20.37:
-    resolution: {integrity: sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==, tarball: '@types/node/download/@types/node-12.20.37.tgz'}
+  /@types/node/12.20.38:
+    resolution: {integrity: sha512-NxmtBRGipjx1B225OeMdI+CQmLbYqvvmYbukDTJGDgzIDgPQ1EcjGmYxGhOk5hTBqeB558S6RgHSpq2iiqifAQ==, tarball: '@types/node/download/@types/node-12.20.38.tgz'}
     dev: true
 
   /@types/normalize-package-data/2.4.1:
@@ -965,7 +1058,7 @@ packages:
     dev: true
 
   /@types/react-dom/17.0.11:
-    resolution: {integrity: sha1-4ercPF6GvbX3aE4AJ0riKOe8xGY=, tarball: '@types/react-dom/download/@types/react-dom-17.0.11.tgz?cache=0&sync_timestamp=1637301521614&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Freact-dom%2Fdownload%2F%40types%2Freact-dom-17.0.11.tgz'}
+    resolution: {integrity: sha1-4ercPF6GvbX3aE4AJ0riKOe8xGY=, tarball: '@types/react-dom/download/@types/react-dom-17.0.11.tgz'}
     dependencies:
       '@types/react': 17.0.37
     dev: true
@@ -1033,7 +1126,7 @@ packages:
   /@types/vfile/3.0.2:
     resolution: {integrity: sha1-GcGM0jLfEc5vpq2AJZvIbDZrCbk=, tarball: '@types/vfile/download/@types/vfile-3.0.2.tgz'}
     dependencies:
-      '@types/node': 12.20.37
+      '@types/node': 12.20.38
       '@types/unist': 2.0.6
       '@types/vfile-message': 2.0.0
     dev: true
@@ -1054,24 +1147,24 @@ packages:
       '@types/yargs-parser': 20.2.1
     dev: true
 
-  /@typescript-eslint/eslint-plugin/4.33.0_3289a875d95a672b97ebf589745c66ef:
-    resolution: {integrity: sha1-wk3HyAacdwa8QNmfb6h+3LIAUnY=, tarball: '@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.33.0.tgz'}
-    engines: {node: ^10.12.0 || >=12.0.0}
+  /@typescript-eslint/eslint-plugin/5.8.0_da4c6df71e3dc18e6a1d96f4f9a2567d:
+    resolution: {integrity: sha512-spu1UW7QuBn0nJ6+psnfCc3iVoQAifjKORgBngKOmC8U/1tbe2YJMzYQqDGYB4JCss7L8+RM2kKLb1B1Aw9BNA==, tarball: '@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-5.8.0.tgz'}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
-      '@typescript-eslint/parser': ^4.0.0
-      eslint: ^5.0.0 || ^6.0.0 || ^7.0.0
+      '@typescript-eslint/parser': ^5.0.0
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
       typescript: '*'
     peerDependenciesMeta:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/experimental-utils': 4.33.0_eslint@7.32.0+typescript@4.5.4
-      '@typescript-eslint/parser': 4.33.0_eslint@7.32.0+typescript@4.5.4
-      '@typescript-eslint/scope-manager': 4.33.0
+      '@typescript-eslint/experimental-utils': 5.8.0_eslint@7.32.0+typescript@4.5.4
+      '@typescript-eslint/parser': 5.8.0_eslint@7.32.0+typescript@4.5.4
+      '@typescript-eslint/scope-manager': 5.8.0
       debug: 4.3.3
       eslint: 7.32.0
       functional-red-black-tree: 1.0.1
-      ignore: 5.1.9
+      ignore: 5.2.0
       regexpp: 3.2.0
       semver: 7.3.5
       tsutils: 3.21.0_typescript@4.5.4
@@ -1080,16 +1173,16 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/experimental-utils/4.33.0_eslint@7.32.0+typescript@4.5.4:
-    resolution: {integrity: sha1-byp4akIJ+iIimJ6TgLUzGygQ9/0=, tarball: '@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.33.0.tgz'}
-    engines: {node: ^10.12.0 || >=12.0.0}
+  /@typescript-eslint/experimental-utils/5.8.0_eslint@7.32.0+typescript@4.5.4:
+    resolution: {integrity: sha512-KN5FvNH71bhZ8fKtL+lhW7bjm7cxs1nt+hrDZWIqb6ViCffQcWyLunGrgvISgkRojIDcXIsH+xlFfI4RCDA0xA==, tarball: '@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-5.8.0.tgz'}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
-      eslint: '*'
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
     dependencies:
       '@types/json-schema': 7.0.9
-      '@typescript-eslint/scope-manager': 4.33.0
-      '@typescript-eslint/types': 4.33.0
-      '@typescript-eslint/typescript-estree': 4.33.0_typescript@4.5.4
+      '@typescript-eslint/scope-manager': 5.8.0
+      '@typescript-eslint/types': 5.8.0
+      '@typescript-eslint/typescript-estree': 5.8.0_typescript@4.5.4
       eslint: 7.32.0
       eslint-scope: 5.1.1
       eslint-utils: 3.0.0_eslint@7.32.0
@@ -1098,19 +1191,19 @@ packages:
       - typescript
     dev: true
 
-  /@typescript-eslint/parser/4.33.0_eslint@7.32.0+typescript@4.5.4:
-    resolution: {integrity: sha1-3+eXVw2WlOVgUo0Y7srYbIx0SJk=, tarball: '@typescript-eslint/parser/download/@typescript-eslint/parser-4.33.0.tgz'}
-    engines: {node: ^10.12.0 || >=12.0.0}
+  /@typescript-eslint/parser/5.8.0_eslint@7.32.0+typescript@4.5.4:
+    resolution: {integrity: sha512-Gleacp/ZhRtJRYs5/T8KQR3pAQjQI89Dn/k+OzyCKOsLiZH2/Vh60cFBTnFsHNI6WAD+lNUo/xGZ4NeA5u0Ipw==, tarball: '@typescript-eslint/parser/download/@typescript-eslint/parser-5.8.0.tgz'}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
-      eslint: ^5.0.0 || ^6.0.0 || ^7.0.0
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
       typescript: '*'
     peerDependenciesMeta:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/scope-manager': 4.33.0
-      '@typescript-eslint/types': 4.33.0
-      '@typescript-eslint/typescript-estree': 4.33.0_typescript@4.5.4
+      '@typescript-eslint/scope-manager': 5.8.0
+      '@typescript-eslint/types': 5.8.0
+      '@typescript-eslint/typescript-estree': 5.8.0_typescript@4.5.4
       debug: 4.3.3
       eslint: 7.32.0
       typescript: 4.5.4
@@ -1118,30 +1211,30 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/scope-manager/4.33.0:
-    resolution: {integrity: sha1-045JKA2YPody4pEhz4xukiHygKM=, tarball: '@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.33.0.tgz'}
-    engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
+  /@typescript-eslint/scope-manager/5.8.0:
+    resolution: {integrity: sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==, tarball: '@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-5.8.0.tgz'}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
-      '@typescript-eslint/types': 4.33.0
-      '@typescript-eslint/visitor-keys': 4.33.0
+      '@typescript-eslint/types': 5.8.0
+      '@typescript-eslint/visitor-keys': 5.8.0
     dev: true
 
-  /@typescript-eslint/types/4.33.0:
-    resolution: {integrity: sha1-oeWQNqO1OuhDDO6/KpGdx/mvbXI=, tarball: '@typescript-eslint/types/download/@typescript-eslint/types-4.33.0.tgz'}
-    engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
+  /@typescript-eslint/types/5.8.0:
+    resolution: {integrity: sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==, tarball: '@typescript-eslint/types/download/@typescript-eslint/types-5.8.0.tgz'}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /@typescript-eslint/typescript-estree/4.33.0_typescript@4.5.4:
-    resolution: {integrity: sha1-DftRwpCPaMXAjYKu/q8WahfCRgk=, tarball: '@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.33.0.tgz'}
-    engines: {node: ^10.12.0 || >=12.0.0}
+  /@typescript-eslint/typescript-estree/5.8.0_typescript@4.5.4:
+    resolution: {integrity: sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==, tarball: '@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-5.8.0.tgz'}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       typescript: '*'
     peerDependenciesMeta:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/types': 4.33.0
-      '@typescript-eslint/visitor-keys': 4.33.0
+      '@typescript-eslint/types': 5.8.0
+      '@typescript-eslint/visitor-keys': 5.8.0
       debug: 4.3.3
       globby: 11.0.4
       is-glob: 4.0.3
@@ -1152,12 +1245,12 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/visitor-keys/4.33.0:
-    resolution: {integrity: sha1-KiL3ekFgQom3oYZYbp7EjKku8d0=, tarball: '@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.33.0.tgz'}
-    engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
+  /@typescript-eslint/visitor-keys/5.8.0:
+    resolution: {integrity: sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==, tarball: '@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-5.8.0.tgz'}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
-      '@typescript-eslint/types': 4.33.0
-      eslint-visitor-keys: 2.1.0
+      '@typescript-eslint/types': 5.8.0
+      eslint-visitor-keys: 3.1.0
     dev: true
 
   /JSONStream/1.3.5:
@@ -1198,31 +1291,31 @@ packages:
     dev: true
 
   /acorn/5.7.4:
-    resolution: {integrity: sha1-Po2KmUfQWZoXltECJddDL0pKz14=, tarball: acorn/download/acorn-5.7.4.tgz}
+    resolution: {integrity: sha1-Po2KmUfQWZoXltECJddDL0pKz14=, tarball: acorn/download/acorn-5.7.4.tgz?cache=0&sync_timestamp=1637225784941&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-5.7.4.tgz}
     engines: {node: '>=0.4.0'}
     hasBin: true
     dev: true
 
   /acorn/6.4.2:
-    resolution: {integrity: sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=, tarball: acorn/download/acorn-6.4.2.tgz}
+    resolution: {integrity: sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=, tarball: acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1637225784941&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz}
     engines: {node: '>=0.4.0'}
     hasBin: true
     dev: true
 
   /acorn/7.4.1:
-    resolution: {integrity: sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=, tarball: acorn/download/acorn-7.4.1.tgz}
+    resolution: {integrity: sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=, tarball: acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1637225784941&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz}
     engines: {node: '>=0.4.0'}
     hasBin: true
     dev: true
 
   /acorn/8.6.0:
-    resolution: {integrity: sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==, tarball: acorn/download/acorn-8.6.0.tgz}
+    resolution: {integrity: sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==, tarball: acorn/download/acorn-8.6.0.tgz?cache=0&sync_timestamp=1637225784941&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-8.6.0.tgz}
     engines: {node: '>=0.4.0'}
     hasBin: true
     dev: true
 
   /address/1.1.2:
-    resolution: {integrity: sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=, tarball: address/download/address-1.1.2.tgz?cache=0&sync_timestamp=1632822777027&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Faddress%2Fdownload%2Faddress-1.1.2.tgz}
+    resolution: {integrity: sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=, tarball: address/download/address-1.1.2.tgz}
     engines: {node: '>= 0.12.0'}
     dev: true
 
@@ -1262,7 +1355,7 @@ packages:
     dev: true
 
   /ansi-colors/4.1.1:
-    resolution: {integrity: sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=, tarball: ansi-colors/download/ansi-colors-4.1.1.tgz?cache=0&sync_timestamp=1632822734303&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fansi-colors%2Fdownload%2Fansi-colors-4.1.1.tgz}
+    resolution: {integrity: sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=, tarball: ansi-colors/download/ansi-colors-4.1.1.tgz}
     engines: {node: '>=6'}
     dev: true
 
@@ -1319,7 +1412,7 @@ packages:
     dev: true
 
   /arg/4.1.3:
-    resolution: {integrity: sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk=, tarball: arg/download/arg-4.1.3.tgz}
+    resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, tarball: arg/download/arg-4.1.3.tgz}
     dev: true
 
   /argparse/1.0.10:
@@ -1478,11 +1571,11 @@ packages:
     dev: true
 
   /autoprefixer/9.8.8:
-    resolution: {integrity: sha1-/UvUWVOF+m8GWZ3nSaTV96R0lXo=, tarball: autoprefixer/download/autoprefixer-9.8.8.tgz}
+    resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==, tarball: autoprefixer/download/autoprefixer-9.8.8.tgz}
     hasBin: true
     dependencies:
       browserslist: 4.19.1
-      caniuse-lite: 1.0.30001286
+      caniuse-lite: 1.0.30001292
       normalize-range: 0.1.2
       num2fraction: 1.2.2
       picocolors: 0.2.1
@@ -1498,24 +1591,6 @@ packages:
     resolution: {integrity: sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=, tarball: aws4/download/aws4-1.11.0.tgz}
     dev: true
 
-  /babel-eslint/10.1.0_eslint@7.32.0:
-    resolution: {integrity: sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=, tarball: babel-eslint/download/babel-eslint-10.1.0.tgz}
-    engines: {node: '>=6'}
-    deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
-    peerDependencies:
-      eslint: '>= 4.12.1'
-    dependencies:
-      '@babel/code-frame': 7.16.0
-      '@babel/parser': 7.16.6
-      '@babel/traverse': 7.16.5
-      '@babel/types': 7.16.0
-      eslint: 7.32.0
-      eslint-visitor-keys: 1.3.0
-      resolve: 1.20.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /babel-jest/24.9.0_@babel+core@7.16.5:
     resolution: {integrity: sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ=, tarball: babel-jest/download/babel-jest-24.9.0.tgz}
     engines: {node: '>= 6'}
@@ -1580,7 +1655,7 @@ packages:
     dev: true
 
   /bail/1.0.5:
-    resolution: {integrity: sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y=, tarball: bail/download/bail-1.0.5.tgz}
+    resolution: {integrity: sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y=, tarball: bail/download/bail-1.0.5.tgz?cache=0&sync_timestamp=1636277237028&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbail%2Fdownload%2Fbail-1.0.5.tgz}
     dev: true
 
   /balanced-match/1.0.2:
@@ -1658,8 +1733,8 @@ packages:
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
     dependencies:
-      caniuse-lite: 1.0.30001286
-      electron-to-chromium: 1.4.18
+      caniuse-lite: 1.0.30001292
+      electron-to-chromium: 1.4.26
       escalade: 3.1.1
       node-releases: 2.0.1
       picocolors: 1.0.0
@@ -1738,7 +1813,7 @@ packages:
     dev: true
 
   /camelcase-keys/4.2.0:
-    resolution: {integrity: sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=, tarball: camelcase-keys/download/camelcase-keys-4.2.0.tgz}
+    resolution: {integrity: sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=, tarball: camelcase-keys/download/camelcase-keys-4.2.0.tgz?cache=0&sync_timestamp=1633333207873&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-4.2.0.tgz}
     engines: {node: '>=4'}
     dependencies:
       camelcase: 4.1.0
@@ -1747,17 +1822,17 @@ packages:
     dev: true
 
   /camelcase/4.1.0:
-    resolution: {integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=, tarball: camelcase/download/camelcase-4.1.0.tgz}
+    resolution: {integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=, tarball: camelcase/download/camelcase-4.1.0.tgz?cache=0&sync_timestamp=1636945257620&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-4.1.0.tgz}
     engines: {node: '>=4'}
     dev: true
 
   /camelcase/5.3.1:
-    resolution: {integrity: sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=, tarball: camelcase/download/camelcase-5.3.1.tgz}
+    resolution: {integrity: sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=, tarball: camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1636945257620&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz}
     engines: {node: '>=6'}
     dev: true
 
-  /caniuse-lite/1.0.30001286:
-    resolution: {integrity: sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==, tarball: caniuse-lite/download/caniuse-lite-1.0.30001286.tgz}
+  /caniuse-lite/1.0.30001292:
+    resolution: {integrity: sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==, tarball: caniuse-lite/download/caniuse-lite-1.0.30001292.tgz}
     dev: true
 
   /capture-exit/2.0.0:
@@ -1822,7 +1897,7 @@ packages:
     dev: true
 
   /character-reference-invalid/1.1.4:
-    resolution: {integrity: sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA=, tarball: character-reference-invalid/download/character-reference-invalid-1.1.4.tgz}
+    resolution: {integrity: sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA=, tarball: character-reference-invalid/download/character-reference-invalid-1.1.4.tgz?cache=0&sync_timestamp=1636449886603&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-reference-invalid%2Fdownload%2Fcharacter-reference-invalid-1.1.4.tgz}
     dev: true
 
   /ci-info/2.0.0:
@@ -1938,7 +2013,7 @@ packages:
     dev: true
 
   /commander/6.2.1:
-    resolution: {integrity: sha1-B5LraC37wyWZm7K4T93duhEKxzw=, tarball: commander/download/commander-6.2.1.tgz}
+    resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==, tarball: commander/download/commander-6.2.1.tgz}
     engines: {node: '>= 6'}
     dev: true
 
@@ -1971,7 +2046,7 @@ packages:
     dev: true
 
   /content-type/1.0.4:
-    resolution: {integrity: sha1-4TjMdeBAxyexlm/l5fjJruJW/js=, tarball: content-type/download/content-type-1.0.4.tgz?cache=0&sync_timestamp=1632822723139&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcontent-type%2Fdownload%2Fcontent-type-1.0.4.tgz}
+    resolution: {integrity: sha1-4TjMdeBAxyexlm/l5fjJruJW/js=, tarball: content-type/download/content-type-1.0.4.tgz}
     engines: {node: '>= 0.6'}
     dev: true
 
@@ -2019,8 +2094,8 @@ packages:
     resolution: {integrity: sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=, tarball: copy-to/download/copy-to-2.0.1.tgz}
     dev: true
 
-  /core-js-pure/3.19.3:
-    resolution: {integrity: sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA==, tarball: core-js-pure/download/core-js-pure-3.19.3.tgz}
+  /core-js-pure/3.20.0:
+    resolution: {integrity: sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg==, tarball: core-js-pure/download/core-js-pure-3.20.0.tgz}
     requiresBuild: true
     dev: true
 
@@ -2120,7 +2195,7 @@ packages:
     dev: true
 
   /csstype/3.0.10:
-    resolution: {integrity: sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==, tarball: csstype/download/csstype-3.0.10.tgz}
+    resolution: {integrity: sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==, tarball: csstype/download/csstype-3.0.10.tgz?cache=0&sync_timestamp=1637224867418&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcsstype%2Fdownload%2Fcsstype-3.0.10.tgz}
     dev: true
 
   /currently-unhandled/0.4.1:
@@ -2158,13 +2233,13 @@ packages:
     dev: true
 
   /debug/2.6.9:
-    resolution: {integrity: sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=, tarball: debug/download/debug-2.6.9.tgz}
+    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, tarball: debug/download/debug-2.6.9.tgz}
     dependencies:
       ms: 2.0.0
     dev: true
 
   /debug/3.2.7:
-    resolution: {integrity: sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=, tarball: debug/download/debug-3.2.7.tgz}
+    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, tarball: debug/download/debug-3.2.7.tgz}
     dependencies:
       ms: 2.1.3
     dev: true
@@ -2380,8 +2455,8 @@ packages:
     resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=, tarball: ee-first/download/ee-first-1.1.1.tgz}
     dev: true
 
-  /electron-to-chromium/1.4.18:
-    resolution: {integrity: sha512-i7nKjGGBE1+YUIbfLObA1EZPmN7J1ITEllbhusDk+KIk6V6gUxN9PFe36v+Sd+8Cg0k3cgUv9lQhQZalr8rggw==, tarball: electron-to-chromium/download/electron-to-chromium-1.4.18.tgz}
+  /electron-to-chromium/1.4.26:
+    resolution: {integrity: sha512-cA1YwlRzO6TGp7yd3+KAqh9Tt6Z4CuuKqsAJP6uF/H5MQryjAGDhMhnY5cEXo8MaRCczpzSBhMPdqRIodkbZYw==, tarball: electron-to-chromium/download/electron-to-chromium-1.4.26.tgz}
     dev: true
 
   /emoji-regex/7.0.3:
@@ -2437,7 +2512,7 @@ packages:
       is-shared-array-buffer: 1.0.1
       is-string: 1.0.7
       is-weakref: 1.0.2
-      object-inspect: 1.11.1
+      object-inspect: 1.12.0
       object-keys: 1.1.1
       object.assign: 4.1.2
       string.prototype.trimend: 1.0.4
@@ -2491,8 +2566,8 @@ packages:
       source-map: 0.6.1
     dev: true
 
-  /eslint-config-ali/12.2.2_eslint@7.32.0:
-    resolution: {integrity: sha1-Y6dQA7RV7D8JW8XIeAPvQoAvrWc=, tarball: eslint-config-ali/download/eslint-config-ali-12.2.2.tgz}
+  /eslint-config-ali/13.0.0_eslint@7.32.0:
+    resolution: {integrity: sha512-M1jb9N8wOcF5df5uMNRpBlV5+eYjgL21YQvR9Bqcmo3uyvVzzwJdMe5O9zTN7FXdXKqkm/RuOrxo8d5bhWUdDg==, tarball: eslint-config-ali/download/eslint-config-ali-13.0.0.tgz}
     peerDependencies:
       eslint: '>=6.8.0'
     dependencies:
@@ -2608,14 +2683,14 @@ packages:
     dev: true
 
   /eslint-utils/2.1.0:
-    resolution: {integrity: sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=, tarball: eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1632822771335&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz}
+    resolution: {integrity: sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=, tarball: eslint-utils/download/eslint-utils-2.1.0.tgz}
     engines: {node: '>=6'}
     dependencies:
       eslint-visitor-keys: 1.3.0
     dev: true
 
   /eslint-utils/3.0.0_eslint@7.32.0:
-    resolution: {integrity: sha1-iuuvrOc0W7M1WdsKHxOh0tSMNnI=, tarball: eslint-utils/download/eslint-utils-3.0.0.tgz?cache=0&sync_timestamp=1632822771335&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-utils%2Fdownload%2Feslint-utils-3.0.0.tgz}
+    resolution: {integrity: sha1-iuuvrOc0W7M1WdsKHxOh0tSMNnI=, tarball: eslint-utils/download/eslint-utils-3.0.0.tgz}
     engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
     peerDependencies:
       eslint: '>=5'
@@ -2625,17 +2700,22 @@ packages:
     dev: true
 
   /eslint-visitor-keys/1.3.0:
-    resolution: {integrity: sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=, tarball: eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1636381637069&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz}
+    resolution: {integrity: sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=, tarball: eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz}
     engines: {node: '>=4'}
     dev: true
 
   /eslint-visitor-keys/2.1.0:
-    resolution: {integrity: sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=, tarball: eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz?cache=0&sync_timestamp=1636381637069&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.1.0.tgz}
+    resolution: {integrity: sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=, tarball: eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz}
     engines: {node: '>=10'}
     dev: true
 
+  /eslint-visitor-keys/3.1.0:
+    resolution: {integrity: sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==, tarball: eslint-visitor-keys/download/eslint-visitor-keys-3.1.0.tgz}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dev: true
+
   /eslint/7.32.0:
-    resolution: {integrity: sha1-xtMooUvj+wjI0dIeEsAv23oqgS0=, tarball: eslint/download/eslint-7.32.0.tgz}
+    resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==, tarball: eslint/download/eslint-7.32.0.tgz}
     engines: {node: ^10.12.0 || >=12.0.0}
     hasBin: true
     dependencies:
@@ -2741,7 +2821,7 @@ packages:
     dev: true
 
   /execa/1.0.0:
-    resolution: {integrity: sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=, tarball: execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1637200719230&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz}
+    resolution: {integrity: sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=, tarball: execa/download/execa-1.0.0.tgz}
     engines: {node: '>=6'}
     dependencies:
       cross-spawn: 6.0.5
@@ -2754,7 +2834,7 @@ packages:
     dev: true
 
   /execa/4.1.0:
-    resolution: {integrity: sha1-TlSRrRVy8vF6d9OIxshXE1sihHo=, tarball: execa/download/execa-4.1.0.tgz?cache=0&sync_timestamp=1637200719230&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-4.1.0.tgz}
+    resolution: {integrity: sha1-TlSRrRVy8vF6d9OIxshXE1sihHo=, tarball: execa/download/execa-4.1.0.tgz}
     engines: {node: '>=10'}
     dependencies:
       cross-spawn: 7.0.3
@@ -2875,7 +2955,7 @@ packages:
     dev: true
 
   /fast-levenshtein/2.0.6:
-    resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=, tarball: fast-levenshtein/download/fast-levenshtein-2.0.6.tgz?cache=0&sync_timestamp=1632822799013&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffast-levenshtein%2Fdownload%2Ffast-levenshtein-2.0.6.tgz}
+    resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=, tarball: fast-levenshtein/download/fast-levenshtein-2.0.6.tgz}
     dev: true
 
   /fast-url-parser/1.1.3:
@@ -2885,7 +2965,7 @@ packages:
     dev: true
 
   /fastq/1.13.0:
-    resolution: {integrity: sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw=, tarball: fastq/download/fastq-1.13.0.tgz?cache=0&sync_timestamp=1632822735358&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffastq%2Fdownload%2Ffastq-1.13.0.tgz}
+    resolution: {integrity: sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw=, tarball: fastq/download/fastq-1.13.0.tgz}
     dependencies:
       reusify: 1.0.4
     dev: true
@@ -3024,7 +3104,7 @@ packages:
     dev: true
 
   /fs-extra/10.0.0:
-    resolution: {integrity: sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E=, tarball: fs-extra/download/fs-extra-10.0.0.tgz?cache=0&sync_timestamp=1632822706452&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-10.0.0.tgz}
+    resolution: {integrity: sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E=, tarball: fs-extra/download/fs-extra-10.0.0.tgz}
     engines: {node: '>=12'}
     dependencies:
       graceful-fs: 4.2.8
@@ -3033,7 +3113,7 @@ packages:
     dev: true
 
   /fs-extra/8.1.0:
-    resolution: {integrity: sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=, tarball: fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1632822706452&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz}
+    resolution: {integrity: sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=, tarball: fs-extra/download/fs-extra-8.1.0.tgz}
     engines: {node: '>=6 <7 || >=8'}
     dependencies:
       graceful-fs: 4.2.8
@@ -3042,7 +3122,7 @@ packages:
     dev: true
 
   /fs-extra/9.1.0:
-    resolution: {integrity: sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=, tarball: fs-extra/download/fs-extra-9.1.0.tgz?cache=0&sync_timestamp=1632822706452&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-9.1.0.tgz}
+    resolution: {integrity: sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=, tarball: fs-extra/download/fs-extra-9.1.0.tgz}
     engines: {node: '>=10'}
     dependencies:
       at-least-node: 1.0.0
@@ -3187,7 +3267,7 @@ packages:
     dev: true
 
   /glob/7.2.0:
-    resolution: {integrity: sha1-0VU1r3cy4C6Uj0xBYovZECk/YCM=, tarball: glob/download/glob-7.2.0.tgz}
+    resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==, tarball: glob/download/glob-7.2.0.tgz}
     dependencies:
       fs.realpath: 1.0.0
       inflight: 1.0.6
@@ -3239,7 +3319,7 @@ packages:
       array-union: 2.1.0
       dir-glob: 3.0.1
       fast-glob: 3.2.7
-      ignore: 5.1.9
+      ignore: 5.2.0
       merge2: 1.4.1
       slash: 3.0.0
     dev: true
@@ -3357,7 +3437,7 @@ packages:
     dev: true
 
   /hosted-git-info/2.8.9:
-    resolution: {integrity: sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=, tarball: hosted-git-info/download/hosted-git-info-2.8.9.tgz?cache=0&sync_timestamp=1632822726032&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.9.tgz}
+    resolution: {integrity: sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=, tarball: hosted-git-info/download/hosted-git-info-2.8.9.tgz}
     dev: true
 
   /html-encoding-sniffer/1.0.2:
@@ -3376,7 +3456,7 @@ packages:
     dev: true
 
   /htmlparser2/3.10.1:
-    resolution: {integrity: sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=, tarball: htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1636640925909&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz}
+    resolution: {integrity: sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=, tarball: htmlparser2/download/htmlparser2-3.10.1.tgz}
     dependencies:
       domelementtype: 1.3.1
       domhandler: 2.4.2
@@ -3474,8 +3554,8 @@ packages:
     engines: {node: '>= 4'}
     dev: true
 
-  /ignore/5.1.9:
-    resolution: {integrity: sha1-nsGly+jhRG7GDUQgBg1Dqm5zgvs=, tarball: ignore/download/ignore-5.1.9.tgz}
+  /ignore/5.2.0:
+    resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==, tarball: ignore/download/ignore-5.2.0.tgz}
     engines: {node: '>= 4'}
     dev: true
 
@@ -3915,7 +3995,7 @@ packages:
     dev: true
 
   /istanbul-lib-report/2.0.8:
-    resolution: {integrity: sha1-WoETzXRtQ8SInro2qxDn1QybTzM=, tarball: istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz}
+    resolution: {integrity: sha1-WoETzXRtQ8SInro2qxDn1QybTzM=, tarball: istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz?cache=0&sync_timestamp=1633005105722&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-lib-report%2Fdownload%2Fistanbul-lib-report-2.0.8.tgz}
     engines: {node: '>=6'}
     dependencies:
       istanbul-lib-coverage: 2.0.5
@@ -4441,7 +4521,7 @@ packages:
     dev: true
 
   /jsonparse/1.3.1:
-    resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=, tarball: jsonparse/download/jsonparse-1.3.1.tgz}
+    resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==, tarball: jsonparse/download/jsonparse-1.3.1.tgz}
     engines: {'0': node >= 0.2.0}
     dev: true
 
@@ -4622,7 +4702,7 @@ packages:
     dev: true
 
   /lodash.isempty/4.4.0:
-    resolution: {integrity: sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=, tarball: lodash.isempty/download/lodash.isempty-4.4.0.tgz}
+    resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==, tarball: lodash.isempty/download/lodash.isempty-4.4.0.tgz}
     dev: false
 
   /lodash.isequal/4.5.0:
@@ -4638,7 +4718,7 @@ packages:
     dev: true
 
   /lodash.sortby/4.7.0:
-    resolution: {integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=, tarball: lodash.sortby/download/lodash.sortby-4.7.0.tgz}
+    resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, tarball: lodash.sortby/download/lodash.sortby-4.7.0.tgz}
     dev: true
 
   /lodash.template/4.5.0:
@@ -4663,7 +4743,7 @@ packages:
     dev: true
 
   /lodash/4.17.21:
-    resolution: {integrity: sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=, tarball: lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1632822706917&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flodash%2Fdownload%2Flodash-4.17.21.tgz}
+    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, tarball: lodash/download/lodash-4.17.21.tgz}
     dev: true
 
   /log-symbols/2.2.0:
@@ -4703,7 +4783,7 @@ packages:
     dev: true
 
   /loose-envify/1.4.0:
-    resolution: {integrity: sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=, tarball: loose-envify/download/loose-envify-1.4.0.tgz?cache=0&sync_timestamp=1632822742309&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Floose-envify%2Fdownload%2Floose-envify-1.4.0.tgz}
+    resolution: {integrity: sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=, tarball: loose-envify/download/loose-envify-1.4.0.tgz}
     hasBin: true
     dependencies:
       js-tokens: 4.0.0
@@ -4833,7 +4913,7 @@ packages:
     dev: true
 
   /micromatch/3.1.10:
-    resolution: {integrity: sha1-cIWbyVyYQJUvNZoGij/En57PrCM=, tarball: micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1632822666893&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz}
+    resolution: {integrity: sha1-cIWbyVyYQJUvNZoGij/En57PrCM=, tarball: micromatch/download/micromatch-3.1.10.tgz}
     engines: {node: '>=0.10.0'}
     dependencies:
       arr-diff: 4.0.0
@@ -4852,7 +4932,7 @@ packages:
     dev: true
 
   /micromatch/4.0.4:
-    resolution: {integrity: sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=, tarball: micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1632822666893&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz}
+    resolution: {integrity: sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=, tarball: micromatch/download/micromatch-4.0.4.tgz}
     engines: {node: '>=8.6'}
     dependencies:
       braces: 3.0.2
@@ -4865,14 +4945,14 @@ packages:
     dev: true
 
   /mime-types/2.1.34:
-    resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==, tarball: mime-types/download/mime-types-2.1.34.tgz?cache=0&sync_timestamp=1636436454904&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.34.tgz}
+    resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==, tarball: mime-types/download/mime-types-2.1.34.tgz?cache=0&sync_timestamp=1636432606654&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.34.tgz}
     engines: {node: '>= 0.6'}
     dependencies:
       mime-db: 1.51.0
     dev: true
 
   /mime/2.6.0:
-    resolution: {integrity: sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=, tarball: mime/download/mime-2.6.0.tgz}
+    resolution: {integrity: sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=, tarball: mime/download/mime-2.6.0.tgz?cache=0&sync_timestamp=1636370946189&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime%2Fdownload%2Fmime-2.6.0.tgz}
     engines: {node: '>=4.0.0'}
     hasBin: true
     dev: true
@@ -4914,7 +4994,7 @@ packages:
     dev: true
 
   /mkdirp/0.5.5:
-    resolution: {integrity: sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=, tarball: mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1636336678481&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz}
+    resolution: {integrity: sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=, tarball: mkdirp/download/mkdirp-0.5.5.tgz}
     hasBin: true
     dependencies:
       minimist: 1.2.5
@@ -4929,7 +5009,7 @@ packages:
     dev: true
 
   /ms/2.1.3:
-    resolution: {integrity: sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=, tarball: ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1632822734970&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.1.3.tgz}
+    resolution: {integrity: sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=, tarball: ms/download/ms-2.1.3.tgz}
     dev: true
 
   /mz/2.7.0:
@@ -5002,7 +5082,7 @@ packages:
     dev: true
 
   /node-releases/2.0.1:
-    resolution: {integrity: sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=, tarball: node-releases/download/node-releases-2.0.1.tgz?cache=0&sync_timestamp=1634808436743&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-2.0.1.tgz}
+    resolution: {integrity: sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=, tarball: node-releases/download/node-releases-2.0.1.tgz}
     dev: true
 
   /normalize-package-data/2.5.0:
@@ -5015,14 +5095,14 @@ packages:
     dev: true
 
   /normalize-path/2.1.1:
-    resolution: {integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=, tarball: normalize-path/download/normalize-path-2.1.1.tgz?cache=0&sync_timestamp=1632822667884&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnormalize-path%2Fdownload%2Fnormalize-path-2.1.1.tgz}
+    resolution: {integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=, tarball: normalize-path/download/normalize-path-2.1.1.tgz}
     engines: {node: '>=0.10.0'}
     dependencies:
       remove-trailing-separator: 1.1.0
     dev: true
 
   /normalize-path/3.0.0:
-    resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=, tarball: normalize-path/download/normalize-path-3.0.0.tgz?cache=0&sync_timestamp=1632822667884&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnormalize-path%2Fdownload%2Fnormalize-path-3.0.0.tgz}
+    resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=, tarball: normalize-path/download/normalize-path-3.0.0.tgz}
     engines: {node: '>=0.10.0'}
     dev: true
 
@@ -5083,7 +5163,7 @@ packages:
     dev: true
 
   /object-assign/4.1.1:
-    resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=, tarball: object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1632822742534&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz}
+    resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=, tarball: object-assign/download/object-assign-4.1.1.tgz}
     engines: {node: '>=0.10.0'}
     dev: true
 
@@ -5096,8 +5176,8 @@ packages:
       kind-of: 3.2.2
     dev: true
 
-  /object-inspect/1.11.1:
-    resolution: {integrity: sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==, tarball: object-inspect/download/object-inspect-1.11.1.tgz}
+  /object-inspect/1.12.0:
+    resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==, tarball: object-inspect/download/object-inspect-1.12.0.tgz}
     dev: true
 
   /object-keys/1.1.1:
@@ -5340,7 +5420,7 @@ packages:
     dev: true
 
   /parse-json/4.0.0:
-    resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=, tarball: parse-json/download/parse-json-4.0.0.tgz}
+    resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=, tarball: parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1637476739355&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz}
     engines: {node: '>=4'}
     dependencies:
       error-ex: 1.3.2
@@ -5348,7 +5428,7 @@ packages:
     dev: true
 
   /parse-json/5.2.0:
-    resolution: {integrity: sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=, tarball: parse-json/download/parse-json-5.2.0.tgz}
+    resolution: {integrity: sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=, tarball: parse-json/download/parse-json-5.2.0.tgz?cache=0&sync_timestamp=1637476739355&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparse-json%2Fdownload%2Fparse-json-5.2.0.tgz}
     engines: {node: '>=8'}
     dependencies:
       '@babel/code-frame': 7.16.0
@@ -5400,12 +5480,12 @@ packages:
     dev: true
 
   /path-to-regexp/1.8.0:
-    resolution: {integrity: sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=, tarball: path-to-regexp/download/path-to-regexp-1.8.0.tgz?cache=0&sync_timestamp=1632822736183&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-1.8.0.tgz}
+    resolution: {integrity: sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=, tarball: path-to-regexp/download/path-to-regexp-1.8.0.tgz}
     dependencies:
       isarray: 0.0.1
 
   /path-to-regexp/6.2.0:
-    resolution: {integrity: sha1-97OAMzYQTDRoia3s5hRmkjBkXzg=, tarball: path-to-regexp/download/path-to-regexp-6.2.0.tgz?cache=0&sync_timestamp=1632822736183&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-6.2.0.tgz}
+    resolution: {integrity: sha1-97OAMzYQTDRoia3s5hRmkjBkXzg=, tarball: path-to-regexp/download/path-to-regexp-6.2.0.tgz}
     dev: true
 
   /path-type/3.0.0:
@@ -5431,11 +5511,11 @@ packages:
     dev: true
 
   /picocolors/0.2.1:
-    resolution: {integrity: sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=, tarball: picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634097134444&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz}
+    resolution: {integrity: sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=, tarball: picocolors/download/picocolors-0.2.1.tgz}
     dev: true
 
   /picocolors/1.0.0:
-    resolution: {integrity: sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=, tarball: picocolors/download/picocolors-1.0.0.tgz?cache=0&sync_timestamp=1634097134444&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-1.0.0.tgz}
+    resolution: {integrity: sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=, tarball: picocolors/download/picocolors-1.0.0.tgz}
     dev: true
 
   /picomatch/2.3.0:
@@ -5591,8 +5671,8 @@ packages:
       uniq: 1.0.1
     dev: true
 
-  /postcss-selector-parser/6.0.7:
-    resolution: {integrity: sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==, tarball: postcss-selector-parser/download/postcss-selector-parser-6.0.7.tgz}
+  /postcss-selector-parser/6.0.8:
+    resolution: {integrity: sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==, tarball: postcss-selector-parser/download/postcss-selector-parser-6.0.8.tgz}
     engines: {node: '>=4'}
     dependencies:
       cssesc: 3.0.0
@@ -5616,7 +5696,7 @@ packages:
     dev: true
 
   /postcss/7.0.39:
-    resolution: {integrity: sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=, tarball: postcss/download/postcss-7.0.39.tgz}
+    resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==, tarball: postcss/download/postcss-7.0.39.tgz}
     engines: {node: '>=6.0.0'}
     dependencies:
       picocolors: 0.2.1
@@ -5658,7 +5738,7 @@ packages:
     dev: true
 
   /progress/2.0.3:
-    resolution: {integrity: sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=, tarball: progress/download/progress-2.0.3.tgz?cache=0&sync_timestamp=1632822727493&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fprogress%2Fdownload%2Fprogress-2.0.3.tgz}
+    resolution: {integrity: sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=, tarball: progress/download/progress-2.0.3.tgz}
     engines: {node: '>=0.4.0'}
     dev: true
 
@@ -5675,7 +5755,7 @@ packages:
     dev: true
 
   /prop-types/15.7.2:
-    resolution: {integrity: sha1-UsQedbjIfnK52TYOAga5ncv/psU=, tarball: prop-types/download/prop-types-15.7.2.tgz?cache=0&sync_timestamp=1632822669151&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz}
+    resolution: {integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==, tarball: prop-types/download/prop-types-15.7.2.tgz}
     dependencies:
       loose-envify: 1.4.0
       object-assign: 4.1.1
@@ -5735,7 +5815,7 @@ packages:
     dev: true
 
   /qs/6.5.2:
-    resolution: {integrity: sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=, tarball: qs/download/qs-6.5.2.tgz}
+    resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==, tarball: qs/download/qs-6.5.2.tgz}
     engines: {node: '>=0.6'}
     dev: true
 
@@ -5763,7 +5843,7 @@ packages:
     dev: true
 
   /react-dom/16.14.0_react@16.14.0:
-    resolution: {integrity: sha1-etg47Cmnd/s8dcOhkPZhz5Kri4k=, tarball: react-dom/download/react-dom-16.14.0.tgz}
+    resolution: {integrity: sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==, tarball: react-dom/download/react-dom-16.14.0.tgz}
     peerDependencies:
       react: ^16.14.0
     dependencies:
@@ -5779,7 +5859,7 @@ packages:
     dev: true
 
   /react/16.14.0:
-    resolution: {integrity: sha1-lNd23dCqo32j7aj8W2sYpMmjEU0=, tarball: react/download/react-16.14.0.tgz}
+    resolution: {integrity: sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==, tarball: react/download/react-16.14.0.tgz}
     engines: {node: '>=0.10.0'}
     dependencies:
       loose-envify: 1.4.0
@@ -5876,15 +5956,15 @@ packages:
     dev: true
 
   /regenerator-runtime/0.10.5:
-    resolution: {integrity: sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=, tarball: regenerator-runtime/download/regenerator-runtime-0.10.5.tgz?cache=0&sync_timestamp=1632822710900&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.10.5.tgz}
+    resolution: {integrity: sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=, tarball: regenerator-runtime/download/regenerator-runtime-0.10.5.tgz}
     dev: true
 
   /regenerator-runtime/0.11.1:
-    resolution: {integrity: sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=, tarball: regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1632822710900&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz}
+    resolution: {integrity: sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=, tarball: regenerator-runtime/download/regenerator-runtime-0.11.1.tgz}
     dev: true
 
   /regenerator-runtime/0.13.9:
-    resolution: {integrity: sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=, tarball: regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1632822710900&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz}
+    resolution: {integrity: sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=, tarball: regenerator-runtime/download/regenerator-runtime-0.13.9.tgz}
     dev: true
 
   /regex-not/1.0.2:
@@ -5904,7 +5984,7 @@ packages:
     dev: true
 
   /regexpp/3.2.0:
-    resolution: {integrity: sha1-BCWido2PI7rXDKS5BGH6LxIT4bI=, tarball: regexpp/download/regexpp-3.2.0.tgz?cache=0&sync_timestamp=1632822771668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregexpp%2Fdownload%2Fregexpp-3.2.0.tgz}
+    resolution: {integrity: sha1-BCWido2PI7rXDKS5BGH6LxIT4bI=, tarball: regexpp/download/regexpp-3.2.0.tgz}
     engines: {node: '>=8'}
     dev: true
 
@@ -6058,19 +6138,19 @@ packages:
     dev: false
 
   /resolve-cwd/2.0.0:
-    resolution: {integrity: sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=, tarball: resolve-cwd/download/resolve-cwd-2.0.0.tgz?cache=0&sync_timestamp=1632822727683&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fresolve-cwd%2Fdownload%2Fresolve-cwd-2.0.0.tgz}
+    resolution: {integrity: sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=, tarball: resolve-cwd/download/resolve-cwd-2.0.0.tgz}
     engines: {node: '>=4'}
     dependencies:
       resolve-from: 3.0.0
     dev: true
 
   /resolve-from/3.0.0:
-    resolution: {integrity: sha1-six699nWiBvItuZTM17rywoYh0g=, tarball: resolve-from/download/resolve-from-3.0.0.tgz?cache=0&sync_timestamp=1632822736359&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fresolve-from%2Fdownload%2Fresolve-from-3.0.0.tgz}
+    resolution: {integrity: sha1-six699nWiBvItuZTM17rywoYh0g=, tarball: resolve-from/download/resolve-from-3.0.0.tgz}
     engines: {node: '>=4'}
     dev: true
 
   /resolve-from/4.0.0:
-    resolution: {integrity: sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=, tarball: resolve-from/download/resolve-from-4.0.0.tgz?cache=0&sync_timestamp=1632822736359&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fresolve-from%2Fdownload%2Fresolve-from-4.0.0.tgz}
+    resolution: {integrity: sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=, tarball: resolve-from/download/resolve-from-4.0.0.tgz}
     engines: {node: '>=4'}
     dev: true
 
@@ -6132,21 +6212,21 @@ packages:
     dev: true
 
   /rimraf/2.6.3:
-    resolution: {integrity: sha1-stEE/g2Psnz54KHNqCYt04M8bKs=, tarball: rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1632822764504&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz}
+    resolution: {integrity: sha1-stEE/g2Psnz54KHNqCYt04M8bKs=, tarball: rimraf/download/rimraf-2.6.3.tgz}
     hasBin: true
     dependencies:
       glob: 7.2.0
     dev: true
 
   /rimraf/2.7.1:
-    resolution: {integrity: sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=, tarball: rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1632822764504&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz}
+    resolution: {integrity: sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=, tarball: rimraf/download/rimraf-2.7.1.tgz}
     hasBin: true
     dependencies:
       glob: 7.2.0
     dev: true
 
   /rimraf/3.0.2:
-    resolution: {integrity: sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=, tarball: rimraf/download/rimraf-3.0.2.tgz?cache=0&sync_timestamp=1632822764504&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frimraf%2Fdownload%2Frimraf-3.0.2.tgz}
+    resolution: {integrity: sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=, tarball: rimraf/download/rimraf-3.0.2.tgz}
     hasBin: true
     dependencies:
       glob: 7.2.0
@@ -6303,11 +6383,11 @@ packages:
     dependencies:
       call-bind: 1.0.2
       get-intrinsic: 1.1.1
-      object-inspect: 1.11.1
+      object-inspect: 1.12.0
     dev: true
 
   /signal-exit/3.0.6:
-    resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==, tarball: signal-exit/download/signal-exit-3.0.6.tgz?cache=0&sync_timestamp=1637292968320&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.6.tgz}
+    resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==, tarball: signal-exit/download/signal-exit-3.0.6.tgz}
     dev: true
 
   /sisteransi/1.0.5:
@@ -6315,12 +6395,12 @@ packages:
     dev: true
 
   /slash/2.0.0:
-    resolution: {integrity: sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=, tarball: slash/download/slash-2.0.0.tgz?cache=0&sync_timestamp=1632822671385&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fslash%2Fdownload%2Fslash-2.0.0.tgz}
+    resolution: {integrity: sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=, tarball: slash/download/slash-2.0.0.tgz}
     engines: {node: '>=6'}
     dev: true
 
   /slash/3.0.0:
-    resolution: {integrity: sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=, tarball: slash/download/slash-3.0.0.tgz?cache=0&sync_timestamp=1632822671385&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fslash%2Fdownload%2Fslash-3.0.0.tgz}
+    resolution: {integrity: sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=, tarball: slash/download/slash-3.0.0.tgz}
     engines: {node: '>=8'}
     dev: true
 
@@ -6416,7 +6496,7 @@ packages:
     dev: true
 
   /source-map-support/0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: source-map-support/download/source-map-support-0.5.21.tgz}
+    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: source-map-support/download/source-map-support-0.5.21.tgz?cache=0&sync_timestamp=1637325041778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.21.tgz}
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
@@ -6427,12 +6507,12 @@ packages:
     dev: true
 
   /source-map/0.5.7:
-    resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=, tarball: source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1632822727980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz}
+    resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=, tarball: source-map/download/source-map-0.5.7.tgz}
     engines: {node: '>=0.10.0'}
     dev: true
 
   /source-map/0.6.1:
-    resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=, tarball: source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1632822727980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz}
+    resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=, tarball: source-map/download/source-map-0.6.1.tgz}
     engines: {node: '>=0.10.0'}
     dev: true
 
@@ -6615,7 +6695,7 @@ packages:
     dev: true
 
   /stringify-entities/1.3.2:
-    resolution: {integrity: sha1-qYQX5Ucf0iez5F09sYYcEcr2aPc=, tarball: stringify-entities/download/stringify-entities-1.3.2.tgz}
+    resolution: {integrity: sha1-qYQX5Ucf0iez5F09sYYcEcr2aPc=, tarball: stringify-entities/download/stringify-entities-1.3.2.tgz?cache=0&sync_timestamp=1636449877246&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstringify-entities%2Fdownload%2Fstringify-entities-1.3.2.tgz}
     dependencies:
       character-entities-html4: 1.1.4
       character-entities-legacy: 1.1.4
@@ -6633,21 +6713,21 @@ packages:
     dev: true
 
   /strip-ansi/4.0.0:
-    resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=, tarball: strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1632822728166&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz}
+    resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=, tarball: strip-ansi/download/strip-ansi-4.0.0.tgz}
     engines: {node: '>=4'}
     dependencies:
       ansi-regex: 3.0.0
     dev: true
 
   /strip-ansi/5.2.0:
-    resolution: {integrity: sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=, tarball: strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1632822728166&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz}
+    resolution: {integrity: sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=, tarball: strip-ansi/download/strip-ansi-5.2.0.tgz}
     engines: {node: '>=6'}
     dependencies:
       ansi-regex: 4.1.0
     dev: true
 
   /strip-ansi/6.0.1:
-    resolution: {integrity: sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=, tarball: strip-ansi/download/strip-ansi-6.0.1.tgz?cache=0&sync_timestamp=1632822728166&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.1.tgz}
+    resolution: {integrity: sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=, tarball: strip-ansi/download/strip-ansi-6.0.1.tgz}
     engines: {node: '>=8'}
     dependencies:
       ansi-regex: 5.0.1
@@ -6712,13 +6792,13 @@ packages:
       lodash: 4.17.21
       postcss-media-query-parser: 0.2.3
       postcss-resolve-nested-selector: 0.1.1
-      postcss-selector-parser: 6.0.7
+      postcss-selector-parser: 6.0.8
       postcss-value-parser: 4.2.0
       stylelint: 10.1.0
     dev: true
 
   /stylelint/10.1.0:
-    resolution: {integrity: sha1-G8TEzoeBB+fDlrGSJtkbooJokRo=, tarball: stylelint/download/stylelint-10.1.0.tgz}
+    resolution: {integrity: sha512-OmlUXrgzEMLQYj1JPTpyZPR9G4bl0StidfHnGJEMpdiQ0JyTq0MPg1xkHk1/xVJ2rTPESyJCDWjG8Kbpoo7Kuw==, tarball: stylelint/download/stylelint-10.1.0.tgz}
     engines: {node: '>=8.7.0'}
     hasBin: true
     dependencies:
@@ -6734,7 +6814,7 @@ packages:
       globby: 9.2.0
       globjoin: 0.1.4
       html-tags: 3.1.0
-      ignore: 5.1.9
+      ignore: 5.2.0
       import-lazy: 4.0.0
       imurmurhash: 0.1.4
       known-css-properties: 0.14.0
@@ -6880,7 +6960,7 @@ packages:
     dev: true
 
   /through/2.3.8:
-    resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=, tarball: through/download/through-2.3.8.tgz?cache=0&sync_timestamp=1632822694437&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fthrough%2Fdownload%2Fthrough-2.3.8.tgz}
+    resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=, tarball: through/download/through-2.3.8.tgz}
     dev: true
 
   /through2/2.0.5:
@@ -6996,8 +7076,8 @@ packages:
       yargs-parser: 10.1.0
     dev: true
 
-  /ts-node/10.4.0_861e5f60dcd52a8caaf61940af2ee565:
-    resolution: {integrity: sha1-aA+IlFiF9ObPRQ5/DWIj3UBIlfc=, tarball: ts-node/download/ts-node-10.4.0.tgz}
+  /ts-node/10.4.0_02f7a00bfaa8332ec8f30a3c81354282:
+    resolution: {integrity: sha1-aA+IlFiF9ObPRQ5/DWIj3UBIlfc=, tarball: ts-node/download/ts-node-10.4.0.tgz?cache=0&sync_timestamp=1636428823694&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fts-node%2Fdownload%2Fts-node-10.4.0.tgz}
     hasBin: true
     peerDependencies:
       '@swc/core': '>=1.2.50'
@@ -7015,7 +7095,7 @@ packages:
       '@tsconfig/node12': 1.0.9
       '@tsconfig/node14': 1.0.1
       '@tsconfig/node16': 1.0.2
-      '@types/node': 12.20.37
+      '@types/node': 12.20.38
       acorn: 8.6.0
       acorn-walk: 8.2.0
       arg: 4.1.3
@@ -7048,7 +7128,7 @@ packages:
     dev: true
 
   /tsutils/3.21.0_typescript@4.5.4:
-    resolution: {integrity: sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM=, tarball: tsutils/download/tsutils-3.21.0.tgz?cache=0&sync_timestamp=1632822771870&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftsutils%2Fdownload%2Ftsutils-3.21.0.tgz}
+    resolution: {integrity: sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM=, tarball: tsutils/download/tsutils-3.21.0.tgz}
     engines: {node: '>= 6'}
     peerDependencies:
       typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
@@ -7097,7 +7177,7 @@ packages:
     dev: true
 
   /typescript/3.9.10:
-    resolution: {integrity: sha1-cPORCselHta+952ngAaQsZv3eLg=, tarball: typescript/download/typescript-3.9.10.tgz}
+    resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==, tarball: typescript/download/typescript-3.9.10.tgz}
     engines: {node: '>=4.2.0'}
     hasBin: true
     dev: true
@@ -7304,13 +7384,13 @@ packages:
     dev: true
 
   /uuid/3.4.0:
-    resolution: {integrity: sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=, tarball: uuid/download/uuid-3.4.0.tgz}
+    resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, tarball: uuid/download/uuid-3.4.0.tgz}
     deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
     hasBin: true
     dev: true
 
   /uuid/8.3.2:
-    resolution: {integrity: sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=, tarball: uuid/download/uuid-8.3.2.tgz}
+    resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, tarball: uuid/download/uuid-8.3.2.tgz}
     hasBin: true
     dev: true
 
@@ -7573,13 +7653,13 @@ packages:
     dev: true
 
   /yargs-parser/10.1.0:
-    resolution: {integrity: sha1-cgImW4n36eny5XZeD+c1qQXtuqg=, tarball: yargs-parser/download/yargs-parser-10.1.0.tgz}
+    resolution: {integrity: sha1-cgImW4n36eny5XZeD+c1qQXtuqg=, tarball: yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&sync_timestamp=1637031489825&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz}
     dependencies:
       camelcase: 4.1.0
     dev: true
 
   /yargs-parser/13.1.2:
-    resolution: {integrity: sha1-Ew8JcC667vJlDVTObj5XBvek+zg=, tarball: yargs-parser/download/yargs-parser-13.1.2.tgz}
+    resolution: {integrity: sha1-Ew8JcC667vJlDVTObj5XBvek+zg=, tarball: yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1637031489825&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz}
     dependencies:
       camelcase: 5.3.1
       decamelize: 1.2.0
diff --git a/website/config/footer.js b/website/config/footer.js
index 8d15ba6..6f08b42 100644
--- a/website/config/footer.js
+++ b/website/config/footer.js
@@ -27,7 +27,7 @@ module.exports = {
         },
         {
           label: '提交需求',
-          href: 'https://github.com/ice-lab/icestark/issues/new?assignees=&labels=bug&template=bug_report.md',
+          href: 'https://github.com/ice-lab/icestark/issues/new',
         },
       ],
     },
diff --git a/website/docs/api/ice-stark.md b/website/docs/api/ice-stark.md
index 00c0b31..3fabed2 100644
--- a/website/docs/api/ice-stark.md
+++ b/website/docs/api/ice-stark.md
@@ -63,7 +63,7 @@ registerMicroApps([{
 
 ```ts
 interface AppConfig {
-  name?: string;
+  name: string;
   url?: string | string[];
   activePath?: ActivePath;
   container?: HTMLElement;
diff --git a/website/src/codes/1.jsx b/website/src/codes/1.jsx
new file mode 100644
index 0000000..4bcded1
--- /dev/null
+++ b/website/src/codes/1.jsx
@@ -0,0 +1,86 @@
+import React from 'react';
+import CodeSnippet from './CodeSnippet'
+
+export default function Error1({ args }) {
+  return (
+    <>
+      <h1>#1: Unable to retrieve lifecycles of {args[0]} after loading it</h1>
+      <p>
+        在 icestark 中，微应用需要导出 <a href="/docs/guide/concept/child#生命周期">生命周期函数</a>。根据 <a href="/docs/api/ice-stark#loadscriptmode">loadScriptMode</a> 的不同设置，icestark 会采取不同的方式来获取到微应用导出的生命周期函数。
+      </p>
+      <p>这个错误表达的含义是：<b>icestark 无法正确获取到生命周期函数</b>。</p>
+      <br />
+      <h2>解决办法</h2>
+      <p>问题可能由多个因素导致，您可以按照下面的提示进行排查：</p>
+
+      <h3>1. 微应用打包成 UMD 应用</h3>
+      <p>UMD 模块规范的微应用请参考 <a href='/docs/guide/use-child/react'>React 微应用接入</a>。构建正确的代码应该是类似下面的样子（以 webpack 构建的入口文件结果为例）：</p>
+
+      <CodeSnippet>
+          {
+            `
+            (function webpackUniversalModuleDefinition(root, factory) {
+              if(typeof exports === 'object' && typeof module === 'object')
+                module.exports = factory();
+              else if(typeof define === 'function' && define.amd)
+                define([], factory);
+              else if(typeof exports === 'object')
+                exports["libraryName"] = factory();
+              else
+                root["libraryName"] = factory();
+            })(this, function() {
+              ...
+            });
+            `
+          }
+        </CodeSnippet>
+
+       <p>亦可将打包的代码拷贝至<a href='https://developer.chrome.com/docs/devtools/javascript/'>谷歌浏览器的 Console 面板</a>执行：</p>
+
+       <img src="https://gw.alicdn.com/imgextra/i1/O1CN01CTbo141PLR9bjI593_!!6000000001824-0-tps-1699-742.jpg" alt="umd 资源执行的结果" />
+
+       <p>亦可简单认为构建产物是没有问题的（您的 <code>@icedesign/stark-child-scaffold</code> 可能需要替换成具体的 <a href='https://webpack.js.org/configuration/output/#outputlibraryname'>webpack libraryName</a>）。</p>
+
+       <p>同时，还需要检查微应用代码中通过 <a href='/docs/api/ice-stark-app/#setlibraryname'>setLibraryName</a> 指定微应用在 window 上挂载的全局变量。icestark 会依据这个变量获取微应用的导出内容（生命周期函数）。</p>
+
+       <p>还有一种可能导致无法获取 UMD 资源的情况是：<bold>异步导出了 <code>mount</code> 和 <code>unmount</code> 函数</bold>。在使用了 <a href="https://module-federation.github.io/">module federation</a> 的应用需要将应用改成异步加载的方式：</p>
+
+       <CodeSnippet>
+         {
+          `
+            // 入口文件
+            import './app.ts'; // 生命周期函数定义在 app.ts 当中
+          `
+         }
+       </CodeSnippet>
+
+        <p>这会导致代码执行时，无法默认导出生命周期函数。</p>
+
+       <h3>2. 微应用打包成 ESM 应用</h3>
+
+       <p>ESM 模块规范的微应用请参考 <a href='/docs/guide/use-child/react'>React 微应用接入</a>。构建正确的代码应该是类似下面的样子（以 Vite 构建的入口文件结果为例）：</p>
+
+       <CodeSnippet>
+         {
+          `
+            import { a as axios, j as jsxRuntime, _ as _react_17_0_2_react, xxx } from "./vendor.js";
+            const mount = async (props) => {
+             // ...
+            };
+            const unmount = async ({
+              container: container2,
+              customProps
+            }) => {
+              // ...
+            };
+            export { bootstrap, mount, unmount };
+          `
+         }
+       </CodeSnippet>
+
+       <h3>3. 微应用打包成常规应用</h3>
+
+       目前我们并不建议通过 <a src="/docs/guide/concept/child#1-registerappenterregisterappleave">registerAppEnter</a> 的方式接入。
+    </>
+  );
+}
diff --git a/website/src/codes/2.jsx b/website/src/codes/2.jsx
new file mode 100644
index 0000000..5eb36f0
--- /dev/null
+++ b/website/src/codes/2.jsx
@@ -0,0 +1,23 @@
+import React from 'react';
+
+export default function Error1({ args }) {
+  return (
+    <>
+      <h1>#2: You can not use loadScriptMode = import where dynamic import is not supported by browsers.</h1>
+      <p>
+        icestark 会使用 <a href="https://github.com/tc39/proposal-dynamic-import">Dynamic Import</a> 来 <a href='/blog/02-icestark-2-6-0'>加载 ES modules 应用</a>（当您为微应用提供了 <code>loadScriptMode = 'import'</code> 配置, <a href='/docs/api/ice-stark#loadscriptmode'>参考</a>）。
+      </p>
+      <p>这个错误表达的含义是：<b>在不支持 Dynamic Import 的浏览器中加载了 ESM 应用</b>。</p>
+      <br />
+      <h2>解决办法</h2>
+      <p>加载 ESM 应用存在浏览器版本<a></a>限制：</p>
+      <ul>
+        <li>IE: 不支持</li>
+        <li>Chrome: {`>=`} 63</li>
+        <li>Safari: {`>`} 11 </li>
+        <li>Firfox: {`>=`} 67</li>
+      </ul>
+      <p>更换或更新浏览器版本以支持 Dynamic Import 语法。</p>
+    </>
+  );
+}
diff --git a/website/src/codes/3.jsx b/website/src/codes/3.jsx
new file mode 100644
index 0000000..f6c79fc
--- /dev/null
+++ b/website/src/codes/3.jsx
@@ -0,0 +1,19 @@
+import React from 'react';
+
+export default function Error1({ args }) {
+  return (
+    <>
+      <h1>#3: window.fetch not found, you need to polyfill it!</h1>
+      <p>
+        若配置微应用的加载方式 <a href="/docs/api/ice-stark#loadscriptmode">loadScriptMode</a> 为 <code>fetch</code> 时，icestark 会默认使用浏览器原生的 <a href='https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API'>fetch API</a> 来加载脚本和样式资源。
+      </p>
+      <p>这个错误表达的含义是：<b>浏览器不支持原生 fetch API</b>。</p>
+      <br />
+      <h2>解决办法</h2>
+      <p>1. 为不支持的 fetch API 的浏览器（比如 <a href="https://caniuse.com/?search=fetch">IE 浏览器</a>）添加 <a href='/docs/faq#%E5%85%BC%E5%AE%B9-ie-%E6%B5%8F%E8%A7%88%E5%99%A8'>polyfill</a>。</p>
+      <p>2. 使用 <a href='/docs/api/ice-stark#fetch'>自定义 fetch 能力</a> 修改为更为通用的 <a href='https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest'>XMLHttpRequest</a> 请求方式，比如使用社区
+        的 <a href='https://github.com/axios/axios'>Axios</a> 包。
+      </p>
+    </>
+  );
+}
diff --git a/website/src/codes/4.jsx b/website/src/codes/4.jsx
new file mode 100644
index 0000000..52b0706
--- /dev/null
+++ b/website/src/codes/4.jsx
@@ -0,0 +1,13 @@
+import React from 'react';
+
+export default function Error1({ args }) {
+  return (
+    <>
+      <h1>#4: Can not find app {args[0]} when call {args[1]}.</h1>
+      <p>这个错误表达的含义是：<b>在执行函数 {args[1]} 时，无法获取微应用 {args[0]} 的配置</b>。</p>
+      <br />
+      <h2>解决办法</h2>
+      <p>在调用 {args[1]} 函数前，请确保通过 <a href='/docs/api/ice-stark#registermicroapps-'>registerMicroApps</a> 和 <a href='/docs/api/ice-stark#createmicroapp-'>createMicroApp</a> 注册了微应用。</p>
+    </>
+  );
+}
diff --git a/website/src/codes/5.jsx b/website/src/codes/5.jsx
new file mode 100644
index 0000000..74ffb5e
--- /dev/null
+++ b/website/src/codes/5.jsx
@@ -0,0 +1,49 @@
+import React from 'react';
+import CodeSnippet from './CodeSnippet'
+
+export default function Error1({ args }) {
+  return (
+    <>
+      <h1>#5: The script resources loaded error：{args[0]}</h1>
+      <p>
+        icestark <bold>默认使用</bold> <a href="/docs/api/ice-stark#loadscriptmode">loadScriptMode</a> 为 <code>script</code> 加载微应用资源，
+        也就是说，icestark 会默认通过 <a href='https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script'>Script 元素</a> 将微应用的脚本资源插入到 <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head">Head 元素</a>当中。
+      </p>
+      <p>错误表达的含义是：<b>脚本资源 {args[0]} 加载失败了</b>。</p>
+      <p>需要注意的是：脚本执行错误并不在本错误的包含范围内。</p>
+      <br />
+      <h2>解决办法</h2>
+      <p>问题可能由多个因素导致，您可以按照下面的提示进行排查</p>
+
+      <ul>
+        <li>可能是由于 <a href='https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS'> 跨域问题 </a>导致的。</li>
+        当跨域错误发生，控制台通常有明显的跨域报错信息。如果您在本地开发的时候遇到这个问题，通常需要配置本地资源服务器。比如使用 webpack 构建应用的时，需要修改
+        <a href="https://webpack.js.org/configuration/dev-server/#root">webpack.devServer</a> 的<a href="https://stackoverflow.com/questions/31602697/webpack-dev-server-cors-issue">配置</a>。
+        <br />
+        <br />
+        <CodeSnippet>
+          {
+            `
+            devServer: {
+              ...
+              headers: {
+                "Access-Control-Allow-Origin": "*",
+                "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
+                "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
+              }
+            }
+            `
+          }
+
+        </CodeSnippet>
+
+        <li>访问了错误的资源地址</li>
+        若资源地址不正确，可会导致资源加载失败。您可以通过谷歌浏览器的 <a href='https://developer.chrome.com/docs/devtools/network/'>开发者工具的 Network 面板</a> 插件资源的加载情况。
+
+        <br />
+        <br />
+        <img src="https://gw.alicdn.com/imgextra/i4/O1CN01P1Yzfa26XMwwuV9qt_!!6000000007671-0-tps-3576-1060.jpg" alt="使用 Network 面板查看加载情况" />
+      </ul>
+    </>
+  );
+}
diff --git a/website/src/codes/6.jsx b/website/src/codes/6.jsx
new file mode 100644
index 0000000..54f79cb
--- /dev/null
+++ b/website/src/codes/6.jsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import CodeSnippet from './CodeSnippet'
+
+export default function Error1({ args }) {
+  return (
+    <>
+      <h1>#6: The stylesheets loaded error：{args[0]}</h1>
+      <p>
+        icestark <bold>默认使用</bold> <a href="/docs/api/ice-stark#loadscriptmode">loadScriptMode</a> 为 <code>script</code> 加载微应用资源，
+        也就是说，icestark 会默认通过 <a href='https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link'>Link 元素</a> 将微应用的样式资源插入到 <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head">Head 元素</a>当中。
+      </p>
+      <p>错误表达的含义是：<b>样式资源 {args[0]} 加载失败了</b>。</p>
+      <br />
+      <h2>解决办法</h2>
+      <p>问题可能由多个因素导致，您可以按照下面的提示进行排查</p>
+
+      <ul>
+        <li>可能是由于 <a href='https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS'> 跨域问题 </a>导致的。</li>
+        当跨域错误发生，控制台通常有明显的跨域报错信息。如果您在本地开发的时候遇到这个问题，通常需要配置本地资源服务器。比如使用 webpack 构建应用的时，需要修改
+        <a href="https://webpack.js.org/configuration/dev-server/#root">webpack.devServer</a> 的<a href="https://stackoverflow.com/questions/31602697/webpack-dev-server-cors-issue">配置</a>。
+        <br />
+        <br />
+        <CodeSnippet>
+          {
+            `
+            devServer: {
+              ...
+              headers: {
+                "Access-Control-Allow-Origin": "*",
+                "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
+                "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
+              }
+            }
+            `
+          }
+
+        </CodeSnippet>
+
+        <li>访问了错误的资源地址</li>
+        若资源地址不正确，可会导致资源加载失败。您可以通过谷歌浏览器的 <a href='https://developer.chrome.com/docs/devtools/network/'>开发者工具的 Network 面板</a> 插件资源的加载情况。
+
+        <br />
+        <br />
+        <img src="https://gw.alicdn.com/imgextra/i4/O1CN01P1Yzfa26XMwwuV9qt_!!6000000007671-0-tps-3576-1060.jpg" alt="使用 Network 面板查看加载情况" />
+      </ul>
+    </>
+  );
+}
diff --git a/website/src/codes/CodeSnippet.js b/website/src/codes/CodeSnippet.js
new file mode 100644
index 0000000..05292a7
--- /dev/null
+++ b/website/src/codes/CodeSnippet.js
@@ -0,0 +1,13 @@
+import React from 'react'
+
+export default function CodeSnippet(props) {
+  const lines = props.children.split('\n')
+  const firstTextualLine = lines.find(l => l.trim() !== l)
+  const numLeadingSpaces = firstTextualLine ? /([^\s])/.exec(firstTextualLine).index : 0
+  const formattedLines = lines.map(line => line.slice(numLeadingSpaces)).filter((line, i) => line.length > 0 || i > 0).join('\n')
+  return (
+    <pre>
+      {formattedLines}
+    </pre>
+  )
+}
\ No newline at end of file
diff --git a/website/src/pages/error.jsx b/website/src/pages/error.jsx
new file mode 100644
index 0000000..17a6b11
--- /dev/null
+++ b/website/src/pages/error.jsx
@@ -0,0 +1,44 @@
+/**
+ * 首页
+ */
+import React from 'react';
+import Layout from '@theme/Layout';
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import AreaWrapper from '../components/AreaWrapper';
+
+const codes = require.context('../codes', false, /\.jsx$/);
+const URLSearchParams = typeof window !== 'undefined' ? window.URLSearchParams : require('url').URLSearchParams;
+
+export default function Error(props) {
+  const searchs = new URLSearchParams(props.location.search);
+  const errCode = searchs.get('code');
+  const { siteConfig } = useDocusaurusContext();
+  const searchsValues = [...searchs.values()].filter((c) => errCode !== c);
+
+  if (!errCode) {
+    return (
+      <Layout title={`${siteConfig.title}-${siteConfig.tagline}`} description="面向大型系统的微前端解决方案">
+        <AreaWrapper style={{ minHeight: '200px' }} >无法解析当前错误码。</AreaWrapper>
+      </Layout>
+    );
+  }
+
+  if (!codes.keys().includes(`./${errCode}.jsx`)) {
+    return (
+      <Layout title={`${siteConfig.title}-${siteConfig.tagline}`} description="面向大型系统的微前端解决方案">
+        <AreaWrapper style={{ minHeight: '200px' }} >没有找到与当前错误码 {errCode} 对应的解释页面。</AreaWrapper>
+      </Layout>
+    );
+  }
+
+  const ErrComponent = codes(`./${errCode}.jsx`).default;
+
+  return (
+    <Layout title={`${siteConfig.title}-${siteConfig.tagline}`} description="面向大型系统的微前端解决方案" >
+      <AreaWrapper style={{ minHeight: 'auto' }}>
+        <ErrComponent args={searchsValues} />
+      </AreaWrapper>
+    </Layout>
+  );
+}
+


Test patch:
diff --git a/packages/icestark/__tests__/error.spec.ts b/packages/icestark/__tests__/error.spec.ts
new file mode 100644
index 0000000..f4a0fcd
--- /dev/null
+++ b/packages/icestark/__tests__/error.spec.ts
@@ -0,0 +1,22 @@
+import '@testing-library/jest-dom/extend-expect';
+import { formatErrMessage } from '../src/util/error';
+
+describe('helpers', () => {
+  test('formatErrMessage', () => {
+    expect(
+      formatErrMessage(0)
+    ).toEqual('icestark minified message #0: See https://micro-frontends.ice.work/error?code=0');
+
+    expect(
+      formatErrMessage(0, 'Unable to load app')
+    ).toEqual('icestark minified message #0: Unable to load app. See https://micro-frontends.ice.work/error?code=0');
+
+    expect(
+      formatErrMessage(0, 'Unable to load app {0}')
+    ).toEqual('icestark minified message #0: Unable to load app {0}. See https://micro-frontends.ice.work/error?code=0');
+
+    expect(
+      formatErrMessage(0, 'Unable to load app {0}', 'seller')
+    ).toEqual('icestark minified message #0: Unable to load app seller. See https://micro-frontends.ice.work/error?code=0&arg=seller');
+  });
+})
diff --git a/packages/icestark/__tests__/message.spec.tsx b/packages/icestark/__tests__/message.spec.tsx
deleted file mode 100644
index fc348fd..0000000
--- a/packages/icestark/__tests__/message.spec.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import '@testing-library/jest-dom/extend-expect';
-
-import { warn, error } from '../src/util/message';
-
-describe('message', () => {
-  test('warn', () => {
-    const warnMockFn = jest.fn();
-    const errorMockFn = jest.fn();
-    (global as any).console = {
-      warn: warnMockFn,
-      error: errorMockFn,
-    };
-
-    const warnStr = 'this is warn test';
-    warn(warnStr);
-    expect(warnMockFn).toBeCalledTimes(1);
-    expect(warnMockFn).toBeCalledWith(warnStr);
-
-    expect(errorMockFn).toBeCalledTimes(0);
-  });
-
-  test('error', () => {
-    const warnMockFn = jest.fn();
-    const errorMockFn = jest.fn();
-    (global as any).console = {
-      warn: warnMockFn,
-      error: errorMockFn,
-    };
-
-    const errorStr = 'this is warn test';
-    error(errorStr);
-    expect(errorMockFn).toBeCalledTimes(1);
-    expect(errorMockFn).toBeCalledWith(errorStr);
-
-    expect(warnMockFn).toBeCalledTimes(0);
-  });
-});