From 5e5efb276a4ef01c7dbf87249f6de9f6c640006a Mon Sep 17 00:00:00 2001 From: winixt Date: Mon, 27 Dec 2021 19:11:49 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20=E5=B0=86=20ignore=20vue=20custom?= =?UTF-8?q?=20block=20logic=20move=20to=20preset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/fes-plugin-windicss/package.json | 3 +- packages/fes-plugin-windicss/src/index.js | 10 - packages/fes-preset-built-in/package.json | 3 +- .../commands/webpackConfig}/pitcher.js | 0 .../src/plugins/commands/webpackConfig/vue.js | 12 +- packages/fes-template-h5/package.json | 4 +- packages/fes-template-h5/src/pages/index.vue | 2 +- .../fes-template-h5/src/pages/onepiece.vue | 2 +- yarn.lock | 172 +----------------- 9 files changed, 24 insertions(+), 184 deletions(-) rename packages/{fes-plugin-windicss/src => fes-preset-built-in/src/plugins/commands/webpackConfig}/pitcher.js (100%) diff --git a/packages/fes-plugin-windicss/package.json b/packages/fes-plugin-windicss/package.json index e0973104..e81c0250 100644 --- a/packages/fes-plugin-windicss/package.json +++ b/packages/fes-plugin-windicss/package.json @@ -31,7 +31,6 @@ "vue": "^3.0.5" }, "dependencies": { - "qs": "^6.10.2", "windicss-webpack-plugin": "^1.6.0" } -} +} \ No newline at end of file diff --git a/packages/fes-plugin-windicss/src/index.js b/packages/fes-plugin-windicss/src/index.js index e522b43b..6add0d27 100644 --- a/packages/fes-plugin-windicss/src/index.js +++ b/packages/fes-plugin-windicss/src/index.js @@ -1,7 +1,6 @@ import WindiCSSWebpackPlugin from 'windicss-webpack-plugin'; import { resolve } from 'path'; -import qs from 'qs'; export default (api) => { api.describe({ @@ -23,15 +22,6 @@ export default (api) => { ...api.config.windicss } ]); - memo.module - .rule('vue-custom') - .resourceQuery((query) => { - if (!query) { - return false; - } - const parsed = qs.parse(query.slice(1)); - return parsed.vue != null; - }).use('vue-custom-loader').loader(require.resolve('./pitcher')); return memo; }); }; diff --git a/packages/fes-preset-built-in/package.json b/packages/fes-preset-built-in/package.json index 8c72dc79..87c02eb8 100644 --- a/packages/fes-preset-built-in/package.json +++ b/packages/fes-preset-built-in/package.json @@ -61,6 +61,7 @@ "postcss-flexbugs-fixes": "^5.0.2", "postcss-loader": "^4.2.0", "postcss-safe-parser": "^5.0.2", + "qs": "^6.10.2", "raw-loader": "^4.0.2", "style-loader": "^2.0.0", "url-loader": "^4.1.1", @@ -74,4 +75,4 @@ "peerDependencies": { "@vue/compiler-sfc": "^3.0.5" } -} +} \ No newline at end of file diff --git a/packages/fes-plugin-windicss/src/pitcher.js b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/pitcher.js similarity index 100% rename from packages/fes-plugin-windicss/src/pitcher.js rename to packages/fes-preset-built-in/src/plugins/commands/webpackConfig/pitcher.js diff --git a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/vue.js b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/vue.js index 99a8c1b8..40eef753 100644 --- a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/vue.js +++ b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/vue.js @@ -1,4 +1,4 @@ -// import webpack from 'webpack'; +import qs from 'qs'; export default function createVueWebpackConfig({ config, @@ -15,6 +15,16 @@ export default function createVueWebpackConfig({ }) .end(); + webpackConfig.module + .rule('vue-custom') + .resourceQuery((query) => { + if (!query) { + return false; + } + const parsed = qs.parse(query.slice(1)); + return parsed.vue != null; + }).use('vue-custom-loader').loader(require.resolve('./pitcher')); + webpackConfig .plugin('vue-loader-plugin') .use(require('vue-loader').VueLoaderPlugin); diff --git a/packages/fes-template-h5/package.json b/packages/fes-template-h5/package.json index 180328e0..014c66be 100644 --- a/packages/fes-template-h5/package.json +++ b/packages/fes-template-h5/package.json @@ -42,14 +42,14 @@ "devDependencies": { "@webank/eslint-config-webank": "0.3.1", "@ttou/postcss-px-to-viewport": "1.1.4", - "@vue/compiler-sfc": "3.2.2" + "@vue/compiler-sfc": "^3.2.2" }, "dependencies": { "@fesjs/fes": "^2.0.0", "@fesjs/plugin-icon": "^2.0.0", "@fesjs/plugin-request": "^2.0.0", "@fesjs/plugin-windicss": "^2.0.0", - "vue": "3.2.2" + "vue": "^3.2.2" }, "private": true } \ No newline at end of file diff --git a/packages/fes-template-h5/src/pages/index.vue b/packages/fes-template-h5/src/pages/index.vue index 2ec56fc7..85d16f8d 100644 --- a/packages/fes-template-h5/src/pages/index.vue +++ b/packages/fes-template-h5/src/pages/index.vue @@ -1,5 +1,5 @@ \n\n{\n \"layout\": false\n}\n\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/403.vue", - "start": 2, - "end": 35, - "startLoc": { - "line": 2, - "column": 16, - "position": 24 - }, - "endLoc": { - "line": 35, - "column": 2, - "position": 202 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/404.vue", - "start": 2, - "end": 35, - "startLoc": { - "line": 2, - "column": 15, - "position": 24 - }, - "endLoc": { - "line": 35, - "column": 2, - "position": 202 - } - } - }, - { - "format": "javascript", - "lines": 19, - "fragment": "}\n];\n return routes;\n}\n\nconst ROUTER_BASE = '';\nlet router = null;\nlet history = null;\nexport const createRouter = (routes) => {\n if (router) {\n return router;\n }\n const createHistory = plugin.applyPlugins({\n key: 'modifyCreateHistroy',\n type: ApplyPluginsType.modify,\n args: {\n base: ROUTER_BASE\n },\n initialValue: createWebHistory", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/core/routes/routes.js", - "start": 75, - "end": 93, - "startLoc": { - "line": 75, - "column": 3, - "position": 515 - }, - "endLoc": { - "line": 93, - "column": 17, - "position": 639 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/core/routes/routes.js", - "start": 26, - "end": 44, - "startLoc": { - "line": 26, - "column": 3, - "position": 184 - }, - "endLoc": { - "line": 44, - "column": 21, - "position": 308 - } - } - }, - { - "format": "javascript", - "lines": 41, - "fragment": ",\n });\n history = createHistory(ROUTER_BASE);\n // 修改routes\n plugin.applyPlugins({\n key: 'patchRoutes',\n type: ApplyPluginsType.event,\n args: { routes },\n });\n router = createVueRouter({\n history,\n routes\n });\n\n plugin.applyPlugins({\n key: 'onRouterCreated',\n type: ApplyPluginsType.event,\n args: { router },\n });\n\n return router;\n};\n\nexport const getRouter = ()=>{\n if(!router){\n console.warn(`[preset-build-in] router is null`)\n }\n return router;\n}\n\nexport const getHistory = ()=>{\n if(!history){\n console.warn(`[preset-build-in] history is null`)\n }\n return history;\n}\n\nexport const destroyRouter = ()=>{\n router = null;\n history = null;\n}", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/core/routes/routes.js", - "start": 93, - "end": 133, - "startLoc": { - "line": 93, - "column": 17, - "position": 640 - }, - "endLoc": { - "line": 133, - "column": 2, - "position": 883 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/core/routes/routes.js", - "start": 44, - "end": 84, - "startLoc": { - "line": 44, - "column": 21, - "position": 309 - }, - "endLoc": { - "line": 84, - "column": 2, - "position": 552 - } - } - }, - { - "format": "less", - "lines": 173, - "fragment": "@import \"../theme\";\n\n.scale-hairline-common(@color, @top, @right, @bottom, @left) {\n content: '';\n position: absolute;\n background-color: @color;\n display: block;\n z-index: 1;\n top: @top;\n right: @right;\n bottom: @bottom;\n left: @left;\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='top') {\n border-top: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-top: none;\n position: relative;\n\n &::before {\n .scale-hairline-common(@color, 0, auto, auto, 0);\n width: 100%;\n height: 1PX;\n transform-origin: 50% 50%;\n transform: scaleY(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleY(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='right') {\n border-right: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-right: none;\n position: relative;\n\n &::after {\n .scale-hairline-common(@color, 0, 0, auto, auto);\n width: 1PX;\n height: 100%;\n background: @color;\n transform-origin: 100% 50%;\n transform: scaleX(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleX(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='bottom') {\n border-bottom: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-bottom: none;\n position: relative;\n\n &::after {\n .scale-hairline-common(@color, auto, auto, 0, 0);\n width: 100%;\n height: 1PX;\n transform-origin: 50% 100%;\n transform: scaleY(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleY(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='left') {\n border-left: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-left: none;\n position: relative;\n\n &::before {\n .scale-hairline-common(@color, 0, auto, auto, 0);\n width: 1PX;\n height: 100%;\n transform-origin: 100% 50%;\n transform: scaleX(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleX(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base, @radius: 0) when (@direction ='all') {\n border: 1PX solid @color;\n border-radius: @radius;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n position: relative;\n border: none;\n\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n width: 200%;\n height: 200%;\n border: 1PX solid @color;\n border-radius: @radius * 2;\n transform-origin: 0 0;\n transform: scale(0.5);\n box-sizing: border-box;\n pointer-events: none;\n }\n }\n }\n}\n\n.hairline-remove(@position) when (@position ='left') {\n border-left: 0;\n\n &:before {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='right') {\n border-right: 0;\n\n &:after {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='top') {\n border-top: 0;\n\n &:before {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='bottom') {\n border-bottom: 0;\n\n &:after {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='all') {\n border: 0;\n\n &:before {\n display: none !important;\n }\n}", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template-h5/src/styles/mixins/hairline.less", - "start": 1, - "end": 173, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 173, - "column": 2, - "position": 1037 - } - }, - "secondFile": { - "name": "packages/create-fes-app/templates/app/h5/src/styles/mixins/hairline.less", - "start": 1, - "end": 173, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 173, - "column": 2, - "position": 1037 - } - } - }, - { - "format": "javascript", - "lines": 15, - "fragment": "const throttleMap = new Map();\n\nexport default async (ctx, next) => {\n if (ctx.config.throttle) {\n if (throttleMap.get(ctx.key) >= Date.now()) {\n ctx.error = {\n type: 'FREQUENTLY',\n msg: '请求过于频繁'\n };\n return;\n }\n }\n await next();\n throttleMap.set(ctx.key, Date.now() + ctx.config.throttle);\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/throttle.js", - "start": 2, - "end": 16, - "startLoc": { - "line": 2, - "column": 1, - "position": 1 - }, - "endLoc": { - "line": 16, - "column": 2, - "position": 140 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/throttle.js", - "start": 2, - "end": 16, - "startLoc": { - "line": 2, - "column": 1, - "position": 1 - }, - "endLoc": { - "line": 16, - "column": 2, - "position": 140 - } - } - }, - { - "format": "javascript", - "lines": 11, - "fragment": "import { isObject } from './helpers';\n\n// FEATURE: 后续支持 a.b.c\nexport default async (ctx, next) => {\n const dataField = ctx.config.dataField ?? ctx.dataField;\n if (!ctx.error && ctx.response && isObject(ctx.response.data) && dataField) {\n ctx.response._rawData = ctx.response.data;\n ctx.response.data = ctx.response.data[dataField];\n }\n await next();\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/setDataField.js", - "start": 1, - "end": 11, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 11, - "column": 2, - "position": 134 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/setDataField.js", - "start": 1, - "end": 11, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 11, - "column": 2, - "position": 134 - } - } - }, - { - "format": "javascript", - "lines": 32, - "fragment": "class Scheduler {\n constructor() {\n this.middlewares = [];\n }\n\n use(fn) {\n if (typeof fn !== 'function') throw new TypeError('middleware must be a function!');\n this.middlewares.push(fn);\n return this;\n }\n\n compose() {\n return (context, next) => {\n let index = -1;\n const dispatch = (i) => {\n if (i <= index) return Promise.reject(new Error('next() called multiple times'));\n index = i;\n let fn = this.middlewares[i];\n if (index === this.middlewares.length) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));\n } catch (e) {\n return Promise.reject(e);\n }\n };\n return dispatch(0);\n };\n }\n}\n\nexport default new Scheduler();", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/scheduler.js", - "start": 2, - "end": 33, - "startLoc": { - "line": 2, - "column": 1, - "position": 1 - }, - "endLoc": { - "line": 33, - "column": 2, - "position": 307 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/scheduler.js", - "start": 2, - "end": 33, - "startLoc": { - "line": 2, - "column": 1, - "position": 1 - }, - "endLoc": { - "line": 33, - "column": 2, - "position": 307 - } - } - }, - { - "format": "javascript", - "lines": 17, - "fragment": "import { isObject } from './helpers';\n\n// 错误处理等副作用网上提\nexport default async (ctx, next) => {\n const {\n response,\n config\n } = ctx;\n if (!config.closeResDataCheck && response && isObject(response.data)) {\n const code = response.data.code;\n if (code !== '0') {\n ctx.error = response; // code 不为零进入 reject\n }\n }\n\n await next();\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/resErrorProcess.js", - "start": 1, - "end": 17, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 17, - "column": 2, - "position": 133 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/resErrorProcess.js", - "start": 1, - "end": 17, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 17, - "column": 2, - "position": 133 - } - } - }, - { - "format": "javascript", - "lines": 8, - "fragment": "import { isFunction, isObject, isString } from './helpers';\n\nexport default async ({ response, responseDataAdaptor }, next) => {\n if (isFunction(responseDataAdaptor) && response && (isObject(response.data) || isString(response.data))) {\n response.data = responseDataAdaptor(response.data);\n }\n await next();\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/resDataAdaptor.js", - "start": 1, - "end": 8, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 8, - "column": 2, - "position": 107 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/resDataAdaptor.js", - "start": 1, - "end": 8, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 8, - "column": 2, - "position": 107 - } - } - }, - { - "format": "javascript", - "lines": 32, - "fragment": "(fn)) {\n instance.interceptors[type].use(fn);\n }\n });\n}\n\nfunction addRequestInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'request');\n}\n\nfunction addResponseInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'response');\n}\n\nasync function axiosMiddleware(context, next) {\n try {\n context.response = await context.instance.request(context.config);\n } catch (error) {\n context.error = error;\n }\n\n await next();\n}\n\nfunction getRequestInstance() {\n const {\n responseDataAdaptor,\n requestInterceptors = [],\n responseInterceptors = [],\n errorHandler,\n ...otherConfigs\n } = _fes", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/request.js", - "start": 40, - "end": 71, - "startLoc": { - "line": 40, - "column": 2, - "position": 356 - }, - "endLoc": { - "line": 71, - "column": 5, - "position": 568 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/request.js", - "start": 23, - "end": 53, - "startLoc": { - "line": 23, - "column": 11, - "position": 209 - }, - "endLoc": { - "line": 53, - "column": 7, - "position": 420 - } - } - }, - { - "format": "javascript", - "lines": 13, - "fragment": ".compose()\n };\n} // DEPRECATED 废弃,使用 axios baseURL\n\n\nfunction handleApiPathBase(url, options = {}) {\n if (url.startsWith('http')) return url;\n\n if (options.base) {\n return `${options.base}${url}`;\n }\n\n return `", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/request.js", - "start": 98, - "end": 110, - "startLoc": { - "line": 98, - "column": 8, - "position": 798 - }, - "endLoc": { - "line": 110, - "column": 2, - "position": 881 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/request.js", - "start": 88, - "end": 99, - "startLoc": { - "line": 88, - "column": 10, - "position": 641 - }, - "endLoc": { - "line": 99, - "column": 10, - "position": 722 - } - } - }, - { - "format": "javascript", - "lines": 65, - "fragment": "(options.method)) {\n options.data = data;\n } else {\n options.params = data;\n }\n\n return options;\n}\n\nlet currentRequestInstance = null;\n\nfunction createContext(userConfig) {\n return { ...currentRequestInstance.context,\n config: { ...currentRequestInstance.context.defaultConfig,\n ...userConfig\n }\n };\n}\n\nfunction getResponseCode(response) {\n if (response) {\n if (response._rawData) return response._rawData.code;\n if (response.data) return response.data.code;\n }\n\n return null;\n}\n\nfunction skipErrorHandlerToObj(skipErrorHandler = []) {\n if (!Array.isArray(skipErrorHandler)) {\n skipErrorHandler = [skipErrorHandler];\n }\n\n return skipErrorHandler.reduce((acc, cur) => {\n acc[cur] = true;\n return acc;\n }, {});\n}\n\nfunction handleRequestError({\n errorHandler = {},\n error,\n response,\n config\n}) {\n // 跳过所有错误类型处理\n if (config.skipErrorHandler === true) return;\n const skipObj = skipErrorHandlerToObj(config.skipErrorHandler);\n const resCode = getResponseCode(response);\n let errorKey = 'default';\n\n if (resCode && errorHandler[resCode]) {\n errorKey = resCode;\n } else if (error.type && errorHandler[error.type]) {\n errorKey = error.type;\n } else if (error.response && errorHandler[error.response.status]) {\n errorKey = error.response.status;\n }\n\n if (!skipObj[errorKey] && errorHandler[errorKey]) {\n return errorHandler[errorKey](error);\n }\n}\n\nconst", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/request.js", - "start": 117, - "end": 181, - "startLoc": { - "line": 117, - "column": 2, - "position": 962 - }, - "endLoc": { - "line": 181, - "column": 6, - "position": 1453 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/request.js", - "start": 105, - "end": 171, - "startLoc": { - "line": 105, - "column": 24, - "position": 795 - }, - "endLoc": { - "line": 171, - "column": 7, - "position": 1288 - } - } - }, - { - "format": "javascript", - "lines": 24, - "fragment": "const request = (url, data, options = {}) => {\n if (typeof options === 'string') {\n options = {\n method: options\n };\n }\n\n if (!currentRequestInstance) {\n currentRequestInstance = getRequestInstance();\n }\n\n const userConfig = userConfigHandler(url, data, options);\n const context = createContext(userConfig);\n return currentRequestInstance.request(context).then(async () => {\n if (!context.error) {\n return context.config.useResonse ? context.response : context.response.data;\n }\n\n await handleRequestError(context);\n return Promise.reject(context.error);\n });\n};\n\nexports", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/request.js", - "start": 181, - "end": 204, - "startLoc": { - "line": 181, - "column": 1, - "position": 1453 - }, - "endLoc": { - "line": 204, - "column": 8, - "position": 1662 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/request.js", - "start": 171, - "end": 192, - "startLoc": { - "line": 171, - "column": 2, - "position": 1290 - }, - "endLoc": { - "line": 192, - "column": 9, - "position": 1497 - } - } - }, - { - "format": "javascript", - "lines": 64, - "fragment": "const requestMap = new Map();\n\nconst mergeRequestMap = new Map();\nconst requestQueue = new Map();\n\nfunction handleCachingStart(ctx) {\n const isRequesting = mergeRequestMap.get(ctx.key);\n if (isRequesting) {\n return new Promise((resolve) => {\n const queue = requestQueue.get(ctx.key) || [];\n requestQueue.set(ctx.key, queue.concat(resolve));\n });\n }\n mergeRequestMap.set(ctx.key, true);\n}\n\nfunction handleRepeatRequest(ctx) {\n const queue = requestQueue.get(ctx.key);\n if (queue && queue.length > 0) {\n queue.forEach((resolve) => {\n if (ctx.error) {\n resolve({\n error: ctx.error\n });\n } else {\n resolve({\n response: ctx.response\n });\n }\n });\n }\n requestQueue.delete(ctx.key);\n mergeRequestMap.delete(ctx.key);\n}\n\nexport default async (ctx, next) => {\n if (ctx.config.mergeRequest) {\n const result = await handleCachingStart(ctx);\n if (result) {\n Object.keys(result).forEach((key) => {\n ctx[key] = result[key];\n });\n return;\n }\n } else {\n if (requestMap.get(ctx.key) && !ctx.config.mergeRequest) {\n ctx.error = {\n type: 'REPEAT',\n msg: '重复请求',\n config: ctx.config\n };\n return;\n }\n requestMap.set(ctx.key, true);\n }\n\n await next();\n\n if (ctx.config.mergeRequest) {\n handleRepeatRequest(ctx);\n } else {\n requestMap.delete(ctx.key);\n }\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/preventRepeatReq.js", - "start": 1, - "end": 64, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 64, - "column": 2, - "position": 546 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/preventRepeatReq.js", - "start": 1, - "end": 64, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 64, - "column": 2, - "position": 546 - } - } - }, - { - "format": "javascript", - "lines": 11, - "fragment": "import { checkHttpRequestHasBody, trimObj } from './helpers';\n\nexport default async (ctx, next) => {\n const config = ctx.config;\n if (checkHttpRequestHasBody(config.method)) {\n trimObj(config.data);\n } else {\n trimObj(config.params);\n }\n await next();\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/paramsProcess.js", - "start": 1, - "end": 11, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 11, - "column": 2, - "position": 97 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/paramsProcess.js", - "start": 1, - "end": 11, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 11, - "column": 2, - "position": 97 - } - } - }, - { - "format": "javascript", - "lines": 86, - "fragment": "export function typeOf(obj) {\n const map = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regExp',\n '[object Undefined]': 'undefined',\n '[object Null]': 'null',\n '[object Object]': 'object',\n '[object URLSearchParams]': 'URLSearchParams'\n };\n return map[Object.prototype.toString.call(obj)];\n}\n\nexport function isFunction(obj) {\n return typeOf(obj) === 'function';\n}\n\nexport function isDate(obj) {\n return typeOf(obj) === 'date';\n}\n\nexport function isString(obj) {\n return typeOf(obj) === 'string';\n}\n\nexport function isArray(obj) {\n return typeOf(obj) === 'array';\n}\n\nexport function isObject(obj) {\n return typeOf(obj) === 'object';\n}\n\nexport function isURLSearchParams(obj) {\n return typeOf(obj) === 'URLSearchParams';\n}\n\n// eslint-disable-next-line\nexport const isUndefined = val => val === undefined;\n\nexport const isDefined = val => val != null;\n\n\nexport function checkHttpRequestHasBody(method) {\n method = method.toUpperCase();\n const HTTP_METHOD = {\n GET: {\n request_body: false\n },\n POST: {\n request_body: true\n },\n PUT: {\n request_body: true\n },\n DELETE: {\n request_body: true\n },\n HEAD: {\n request_body: false\n },\n OPTIONS: {\n request_body: false\n },\n PATCH: {\n request_body: true\n }\n };\n return HTTP_METHOD[method].request_body;\n}\n\nexport function trimObj(obj) {\n if (isObject(obj)) {\n Object.entries(obj).forEach(([key, value]) => {\n if (isString(value)) {\n obj[key] = value.trim();\n } else if (isObject(value)) {\n trimObj(value);\n }\n });\n }\n}", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/helpers.js", - "start": 5, - "end": 90, - "startLoc": { - "line": 5, - "column": 1, - "position": 2 - }, - "endLoc": { - "line": 90, - "column": 2, - "position": 596 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/helpers.js", - "start": 5, - "end": 90, - "startLoc": { - "line": 5, - "column": 1, - "position": 2 - }, - "endLoc": { - "line": 90, - "column": 2, - "position": 596 - } - } - }, - { - "format": "javascript", - "lines": 209, - "fragment": "import {\n isObject, isString, isURLSearchParams, checkHttpRequestHasBody\n} from './helpers';\n/**\n * 缓存实现的功能\n * 1. 唯一定位一个请求(url, data | params, method)\n * 其中请求参数根据请求方法使用其中一个就够了\n * 一个请求同时包含 data | params 参数的设计本身不合理\n * 不对这种情况进行兼容\n * 2. 控制缓存内容的大小,localStorage 只有5M\n * 3. 控制缓存时间\n * session(存在内存中)\n * expireTime 存在localStoreage 中\n * 4. 成功的、且响应内容为json的请求进行缓存\n */\n\n/**\n * 配置数据\n * type: 'ram' | 'sessionStorage' | 'localStorage'\n * cacheTime: ''\n */\n\n\n/**\n * 缓存数据结构\n * cache: {\n * url: 'url', // 缓存 url\n * data: data, // 数据\n * expire: '' // 缓存时间\n * }\n */\n\n/**\n * 请求参数可以为如下类型\n * - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams\n * - Browser only: FormData, File, Blob\n * 只缓存参数类型为: string、plain object、URLSearchParams 或者无参数的 请求\n */\n\nconst CACHE_KEY_PREFIX = '__FES_REQUEST_CACHE:';\nconst CACHE_TYPE = {\n ram: 'ram',\n session: 'sessionStorage',\n local: 'localStorage'\n};\n\nconst CACHE_DATA_MAP = new Map();\n\nfunction genInnerKey(key, cacheType = 'ram') {\n if (cacheType !== CACHE_TYPE.ram) {\n return `${CACHE_KEY_PREFIX}${key}`;\n }\n return key;\n}\n\nfunction canCache(data) {\n return !data || isObject(data) || isString(data) || Array.isArray(data) || isURLSearchParams(data);\n}\n\nfunction setCacheData({\n key,\n cacheType = 'ram',\n data,\n cacheTime = 1000 * 60 * 3\n}) {\n const _key = genInnerKey(key, cacheType);\n\n const currentCacheData = {\n cacheType,\n data,\n cacheTime,\n expire: Date.now() + cacheTime\n };\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n try {\n cacheInstance.setItem(_key, JSON.stringify(currentCacheData));\n } catch (e) {\n // setItem 出现异常,清理缓存\n for (const item in cacheInstance) {\n if (item.startsWith(CACHE_KEY_PREFIX) && Object.prototype.hasOwnProperty.call(cacheInstance, item)) {\n cacheInstance.removeItem(item);\n }\n }\n }\n } else {\n CACHE_DATA_MAP.set(_key, currentCacheData);\n }\n}\n\nfunction isExpire({ expire, cacheTime }) {\n if (!cacheTime || expire >= Date.now()) {\n return false;\n }\n return true;\n}\n\nfunction getCacheData({ key, cacheType = 'ram' }) {\n const _key = genInnerKey(key, cacheType);\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n const text = cacheInstance.getItem(_key) || null;\n try {\n const currentCacheData = JSON.parse(text);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n cacheInstance.removeItem(_key);\n return null;\n } catch (e) {\n cacheInstance.removeItem(_key);\n return null;\n }\n } else {\n const currentCacheData = CACHE_DATA_MAP.get(_key);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n CACHE_DATA_MAP.delete(_key);\n return null;\n }\n}\n\n// 存储缓存队列\nconst cacheStartFlag = new Map();\nconst cachingQueue = new Map();\n\n/**\n * 等上一次请求结果\n * 1. 如果上一次请求成功,直接使用上一次的请求结果\n * 2. 如果上一次请求失败,重启本次请求\n */\nfunction handleCachingStart(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const caching = cacheStartFlag.get(_key);\n if (caching) {\n return new Promise((resolve) => {\n const queue = cachingQueue.get(_key) || [];\n cachingQueue.set(_key, queue.concat(resolve));\n });\n }\n cacheStartFlag.set(_key, true);\n}\n\n// 有请求成功的\nfunction handleCachingQueueSuccess(ctx, config) {\n // 移除首次缓存 flag\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n queue.forEach((resolve) => {\n resolve({\n response: ctx.response\n });\n });\n }\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n}\n\n// 处理请求失败\nfunction handleCachingQueueError(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n const firstResolve = queue.shift();\n firstResolve();\n cachingQueue.set(_key, queue);\n } else {\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n }\n}\n\nexport default async (ctx, next) => {\n const { config } = ctx;\n if (config.cache) {\n const cacheData = getCacheData({ key: ctx.key, cacheType: config.cache.cacheType });\n if (cacheData) {\n ctx.response = {\n data: cacheData\n };\n return;\n }\n const result = await handleCachingStart(ctx, config);\n if (result) {\n Object.keys(result).forEach((key) => {\n ctx[key] = result[key];\n });\n return;\n }\n }\n await next();\n\n if (config.cache) {\n const requestdata = checkHttpRequestHasBody(config.method) ? config.data : config.params;\n if (!ctx.error && ctx.response && canCache(requestdata) && canCache(ctx.response.data)) {\n handleCachingQueueSuccess(ctx, config);\n\n setCacheData({\n key: ctx.key,\n data: ctx.response.data,\n ...config.cache\n });\n } else {\n handleCachingQueueError(ctx, config);\n }\n }\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-template/src/.fes/plugin-request/cacheControl.js", - "start": 1, - "end": 209, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 209, - "column": 2, - "position": 1521 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-request/cacheControl.js", - "start": 1, - "end": 209, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 209, - "column": 2, - "position": 1521 - } - } - }, - { - "format": "javascript", - "lines": 110, - "fragment": "export default {\n register(monaco) {\n monaco.editor.defineTheme('defaultTheme', {\n base: 'vs',\n inherit: true,\n rules: [\n {\n foreground: 'c41a16',\n token: 'string'\n },\n {\n foreground: '1c00cf',\n token: 'constant.numeric'\n },\n {\n foreground: 'aa0d91',\n token: 'keyword'\n },\n {\n foreground: '000000',\n token: 'keyword.operator'\n },\n {\n foreground: 'aa0d91',\n token: 'constant.language'\n },\n {\n foreground: '990000',\n token: 'support.class.exception'\n },\n {\n foreground: '000000',\n token: 'entity.name.function'\n },\n {\n fontStyle: 'bold underline',\n token: 'entity.name.type'\n },\n {\n fontStyle: 'italic',\n token: 'variable.parameter'\n },\n {\n foreground: '007400',\n token: 'comment'\n },\n {\n foreground: 'ff0000',\n token: 'invalid'\n },\n {\n background: 'e71a1100',\n token: 'invalid.deprecated.trailing-whitespace'\n },\n {\n foreground: '000000',\n background: 'fafafafc',\n token: 'text source'\n },\n {\n foreground: 'aa0d91',\n token: 'meta.tag'\n },\n {\n foreground: 'aa0d91',\n token: 'declaration.tag'\n },\n {\n foreground: '000000',\n fontStyle: 'bold',\n token: 'support'\n },\n {\n foreground: 'aa0d91',\n token: 'storage'\n },\n {\n fontStyle: 'bold underline',\n token: 'entity.name.section'\n },\n {\n foreground: '000000',\n fontStyle: 'bold',\n token: 'entity.name.function.frame'\n },\n {\n foreground: '333333',\n token: 'meta.tag.preprocessor.xml'\n },\n {\n foreground: '994500',\n fontStyle: 'italic',\n token: 'entity.other.attribute-name'\n },\n {\n foreground: '881280',\n token: 'entity.name.tag'\n }\n ],\n colors: {\n 'editor.foreground': '#000000',\n 'editor.background': '#FFFFFF',\n 'editor.selectionBackground': '#BAD6FD',\n 'editor.lineHighlightBackground': '#0000001A',\n 'editorCursor.foreground': '#000000',\n 'editorWhitespace.foreground': '#B3B3B3F4'\n }\n });\n }\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-monaco-editor/src/runtime/theme/default.js", - "start": 2, - "end": 111, - "startLoc": { - "line": 2, - "column": 1, - "position": 2 - }, - "endLoc": { - "line": 111, - "column": 2, - "position": 578 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-monaco-editor/theme/default.js", - "start": 2, - "end": 111, - "startLoc": { - "line": 2, - "column": 1, - "position": 2 - }, - "endLoc": { - "line": 111, - "column": 2, - "position": 578 - } - } - }, - { - "format": "markup", - "lines": 74, - "fragment": "\n\n\n\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-locale/src/runtime/views/SelectLang.vue", - "start": 1, - "end": 74, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 74, - "column": 2, - "position": 446 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-locale/views/SelectLang.vue", - "start": 1, - "end": 74, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 74, - "column": 2, - "position": 446 - } - } - }, - { - "format": "markup", - "lines": 34, - "fragment": "\n \n \n \n \n \n \n \n \n \n\n\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/views/MultiTabProvider.vue", - "start": 131, - "end": 190, - "startLoc": { - "line": 131, - "column": 9, - "position": 842 - }, - "endLoc": { - "line": 190, - "column": 2, - "position": 1145 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/MultiTabProvider.vue", - "start": 121, - "end": 180, - "startLoc": { - "line": 121, - "column": 9, - "position": 787 - }, - "endLoc": { - "line": 180, - "column": 2, - "position": 1090 - } - } - }, - { - "format": "markup", - "lines": 61, - "fragment": "\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/views/MenuIcon.vue", - "start": 1, - "end": 61, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 61, - "column": 2, - "position": 347 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/MenuIcon.vue", - "start": 1, - "end": 61, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 61, - "column": 2, - "position": 347 - } - } - }, - { - "format": "markup", - "lines": 106, - "fragment": "\n \n \n\n\n\n\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/views/Menu.vue", - "start": 1, - "end": 106, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 106, - "column": 2, - "position": 667 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/Menu.vue", - "start": 1, - "end": 106, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 106, - "column": 2, - "position": 667 - } - } - }, - { - "format": "markup", - "lines": 378, - "fragment": "\n\n\n\n\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue", - "start": 1, - "end": 378, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 378, - "column": 2, - "position": 2314 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/BaseLayout.vue", - "start": 1, - "end": 378, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 378, - "column": 2, - "position": 2314 - } - } - }, - { - "format": "markup", - "lines": 35, - "fragment": "\n\n{\n \"layout\": false\n}\n\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/views/404.vue", - "start": 1, - "end": 35, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 35, - "column": 2, - "position": 202 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/404.vue", - "start": 1, - "end": 35, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 35, - "column": 2, - "position": 202 - } - } - }, - { - "format": "markup", - "lines": 35, - "fragment": "\n\n{\n \"layout\": false\n}\n\n", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/views/403.vue", - "start": 1, - "end": 35, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 35, - "column": 2, - "position": 202 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/views/403.vue", - "start": 1, - "end": 35, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 35, - "column": 2, - "position": 202 - } - } - }, - { - "format": "javascript", - "lines": 49, - "fragment": "const isStr = function (str) {\n return typeof str === 'string';\n};\n\nexport const isValid = (elm) => {\n if (elm.nodeType === 1) {\n if (elm.nodeName.toLowerCase() === 'script') {\n return false;\n }\n\n for (let i = 0; i < elm.attributes.length; i++) {\n const val = elm.attributes[i].value;\n if (isStr(val) && val.toLowerCase().indexOf('on') === 0) {\n return false;\n }\n }\n\n for (let i = 0; i < elm.childNodes.length; i++) {\n if (!isValid(elm.childNodes[i])) {\n return false;\n }\n }\n }\n return true;\n};\n\nexport const validateContent = (svgContent) => {\n const div = document.createElement('div');\n div.innerHTML = svgContent;\n\n // setup this way to ensure it works on our buddy IE\n for (let i = div.childNodes.length - 1; i >= 0; i--) {\n if (div.childNodes[i].nodeName.toLowerCase() !== 'svg') {\n div.removeChild(div.childNodes[i]);\n }\n }\n\n // must only have 1 root element\n const svgElm = div.firstElementChild;\n if (svgElm && svgElm.nodeName.toLowerCase() === 'svg') {\n // root element must be an svg\n // lets double check we've got valid elements\n // do not allow scripts\n if (isValid(svgElm)) {\n return div.innerHTML;\n }\n }\n return '';\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/helpers/svg.js", - "start": 1, - "end": 49, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 49, - "column": 2, - "position": 456 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/helpers/svg.js", - "start": 1, - "end": 49, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 49, - "column": 2, - "position": 456 - } - } - }, - { - "format": "javascript", - "lines": 29, - "fragment": "const transTitle = (name) => {\n const sharedLocale = plugin.getShared('locale');\n if (sharedLocale) {\n const { t } = sharedLocale.useI18n();\n return t(name);\n }\n return name;\n};\n\n\nconst _transform = (arr) => {\n if (Array.isArray(arr)) {\n arr.forEach((item) => {\n if (item.title) {\n item._title = item.title;\n item.title = computed(() => transTitle(item._title));\n }\n if (item.children && item.children.length > 0) {\n _transform(item.children);\n }\n });\n }\n};\n\nexport const transform = (menus) => {\n const originData = unref(menus);\n _transform(originData);\n return originData;\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/helpers/pluginLocale.js", - "start": 5, - "end": 33, - "startLoc": { - "line": 5, - "column": 2, - "position": 33 - }, - "endLoc": { - "line": 33, - "column": 2, - "position": 292 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/helpers/pluginLocale.js", - "start": 5, - "end": 33, - "startLoc": { - "line": 5, - "column": 1, - "position": 31 - }, - "endLoc": { - "line": 33, - "column": 2, - "position": 290 - } - } - }, - { - "format": "javascript", - "lines": 40, - "fragment": "import { unref, computed } from 'vue';\n// eslint-disable-next-line\nimport { useAccess } from '../../plugin-access/core';\n\nif (!useAccess) {\n throw new Error(\n '[plugin-layout]: pLugin-layout depends on plugin-access,please install plugin-access first!'\n );\n}\n\nexport const hasAccessByMenuItem = (item) => {\n let res;\n if (item.path && (!item.children || item.children.length === 0)) {\n res = useAccess(item.path);\n } else if (item.children && item.children.length > 0) {\n res = computed(() => item.children.some((child) => {\n const rst = hasAccessByMenuItem(child);\n return rst && rst.value;\n }));\n }\n return res;\n};\n\nconst _addAccessTag = (arr) => {\n if (Array.isArray(arr)) {\n arr.forEach((item) => {\n item.access = hasAccessByMenuItem(item);\n if (item.children && item.children.length > 0) {\n _addAccessTag(item.children);\n }\n });\n }\n};\n\nexport const transform = (menus) => {\n const originData = unref(menus);\n _addAccessTag(originData);\n\n return originData;\n};", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-layout/src/runtime/helpers/pluginAccess.js", - "start": 1, - "end": 40, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 40, - "column": 2, - "position": 368 - } - }, - "secondFile": { - "name": "packages/fes-template/src/.fes/plugin-layout/helpers/pluginAccess.js", - "start": 1, - "end": 40, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 40, - "column": 2, - "position": 368 - } - } - }, - { - "format": "less", - "lines": 50, - "fragment": ".inner-icon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n outline: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n > * {\n line-height: 1;\n }\n\n svg {\n display: inline-block;\n width: 1em;\n height: 1em;\n fill: currentColor;\n }\n\n &::before {\n display: none; // dont display old icon.\n }\n\n &[tabindex] {\n cursor: pointer;\n }\n &--spin {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n }\n\n @-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n @keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n \n}", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-icon/src/runtime/Icon/icon.less", - "start": 1, - "end": 50, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 50, - "column": 2, - "position": 278 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-icon/Icon/icon.less", - "start": 1, - "end": 50, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 50, - "column": 2, - "position": 278 - } - } - }, - { - "format": "markup", - "lines": 41, - "fragment": "", - "tokens": 0, - "firstFile": { - "name": "packages/fes-plugin-icon/src/runtime/Icon/Icon.vue", - "start": 1, - "end": 41, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 41, - "column": 2, - "position": 278 - } - }, - "secondFile": { - "name": "packages/fes-template-h5/src/.fes/plugin-icon/Icon/Icon.vue", - "start": 1, - "end": 41, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 41, - "column": 2, - "position": 278 - } - } - }, - { - "format": "json", - "lines": 37, - "fragment": "{\n \"compilerOptions\": {\n \"outDir\": \"build/dist\",\n \"module\": \"esnext\",\n \"target\": \"esnext\",\n \"lib\": [\"esnext\", \"dom\"],\n \"sourceMap\": true,\n \"baseUrl\": \".\",\n \"jsx\": \"preserve\",\n \"allowSyntheticDefaultImports\": true,\n \"moduleResolution\": \"node\",\n \"forceConsistentCasingInFileNames\": true,\n \"noImplicitReturns\": true,\n \"suppressImplicitAnyIndexErrors\": true,\n \"noUnusedLocals\": true,\n \"allowJs\": true,\n \"skipLibCheck\": true,\n \"experimentalDecorators\": true,\n \"strict\": true,\n \"paths\": {\n \"@/*\": [\"./src/*\"],\n \"@@/*\": [\"./src/.fes/*\"]\n }\n },\n \"include\": [\n \"src/**/*\",\n \"tests/**/*\",\n \"test/**/*\",\n \"__test__/**/*\",\n \"typings/**/*\",\n \"config/**/*\",\n \".eslintrc.js\",\n \".stylelintrc.js\",\n \".prettierrc.js\"\n ],\n \"exclude\": [\"node_modules\", \"build\", \"dist\", \"scripts\", \"src/.fes/*\", \"webpack\", \"jest\"]\n}", - "tokens": 0, - "firstFile": { - "name": "packages/create-fes-app/templates/app/h5/tsconfig.json", - "start": 1, - "end": 37, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 37, - "column": 2, - "position": 233 - } - }, - "secondFile": { - "name": "packages/create-fes-app/templates/app/pc/tsconfig.json", - "start": 1, - "end": 37, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 37, - "column": 2, - "position": 233 - } - } - }, - { - "format": "json", - "lines": 24, - "fragment": "},\n \"keywords\": [\n \"管理端\",\n \"fes\",\n \"fast\",\n \"easy\",\n \"strong\"\n ],\n \"files\": [\n \".eslintrc.js\",\n \".gitignore\",\n \".fes.js\",\n \".fes.prod.js\",\n \"mock.js\",\n \"package.json\",\n \"README.md\",\n \"tsconfig.json\",\n \"/src\",\n \"/config\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/WeBankFinTech/fes.js.git\",\n \"directory\": \"packages/fes-template-h5\"", - "tokens": 0, - "firstFile": { - "name": "packages/create-fes-app/templates/app/h5/package.json", - "start": 8, - "end": 31, - "startLoc": { - "line": 8, - "column": 3, - "position": 43 - }, - "endLoc": { - "line": 31, - "column": 27, - "position": 148 - } - }, - "secondFile": { - "name": "packages/create-fes-app/templates/app/pc/package.json", - "start": 11, - "end": 34, - "startLoc": { - "line": 11, - "column": 3, - "position": 64 - }, - "endLoc": { - "line": 34, - "column": 24, - "position": 169 - } - } - }, - { - "format": "javascript", - "lines": 81, - "fragment": "l` 参数,用于指定加载子应用什么路由页面。\n\n ```vue\n\n\n```\n\n## 子应用配置\n\n### 第一步:插件注册\n```js\nexport default {\n qiankun: {\n micro: {},\n }\n};\n```\n\n### 第二步:配置运行时生命周期钩子(可选)\n插件会自动为你创建好 `qiankun` 子应用需要的生命周期钩子,但是如果你想在生命周期期间加一些自定义逻辑,可以在子应用的 `src/app.js` 里导出 `qiankun` 对象,并实现每一个生命周期钩子,其中钩子函数的入参 `props` 由主应用自动注入。\n```js\nexport const qiankun = {\n // 应用加载之前\n async bootstrap(props) {\n console.log('app1 bootstrap', props);\n },\n // 应用 render 之前触发\n async mount(props) {\n console.log('app1 mount', props);\n },\n // 当 props 更新时触发\n async update(props){\n console.log('app1 update', props);\n },\n // 应用卸载之后触发\n async unmount(props) {\n console.log('app1 unmount', props);\n },\n};\n\n```\n\n## 父子应用通讯\n\n有两种方式实现\n\n### 配合 [useModel](./model.md) 使用\n\n确保已经安装了 `@fesjs/plugin-model`:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-model\": \"^2.0.0\"\n },\n}\n```\n\n#### 主应用传递 props\n\n- 如果使用 `MicroApp` 组件模式消费子应用,直接通过 props 传递即可:\n```vue\n\n\n```\n\n#### props\n| 属性 | 说明 | 类型 | 默认值 |\n| ------------- | ------------- | ------------- | ------------- |\n| theme | 编辑器的主题,使用其他主题需要先使用`monaco.editor.defineTheme`定义主题 | string | `defaultTheme` |\n| language | 编辑器的语言 | string | - |\n| height | 编辑器的高度 | string | `100%` |\n| width | 编辑器的宽度 | string | `100%` |\n| modelValue(v-model) | 编辑器的代码 | string | - |\n| readOnly | 是否只读 | boolean | `false` |\n| options | 编辑器的配置对象 | object | `{}` |\n| check | 是否检查代码,如果检查不通过则不更新数据,目前只支持`json` | boolean | `false` |\n\n#### events\n\n| 事件名称 | 说明 | 回调参数 |\n| ", - "tokens": 0, - "firstFile": { - "name": "docs/reference/plugin/plugins/editor.md", - "start": 5, - "end": 120, - "startLoc": { - "line": 5, - "column": 1, - "position": 4 - }, - "endLoc": { - "line": 120, - "column": 2, - "position": 578 - } - }, - "secondFile": { - "name": "docs/zh/reference/plugin/plugins/editor.md", - "start": 5, - "end": 120, - "startLoc": { - "line": 5, - "column": 1, - "position": 4 - }, - "endLoc": { - "line": 120, - "column": 2, - "position": 578 - } - } - }, - { - "format": "javascript", - "lines": 263, - "fragment": "cess2 \n\n\n```\n\n\n### 匹配规则\n\n#### 全等匹配\n资源的匹配规则默认是使用全等匹配,比如页面 `pages/a.vue` 对应路由 `path` 是 `/a`,则 `/a` 就是页面的资源ID。如果我们设置:\n```js\naccess.setAccess(['/a'])\n```\n由于权限列表中包含`/a`,则表示拥有此页面权限。\n\n#### 模糊匹配\n页面`@id.vue`会映射为动态路由`/:id`,想匹配此页面有两种办法:\n- **access.setAccess(['/:id'])**\n- **access.setAccess(['/*'])**\n\n第二种是模糊匹配,`*`表示任意路径。比如角色`admin`需要全部权限,则可以:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"*\"]\n }\n }\n}\n```\n\n\n### 角色\n通常我们会用角色来控制权限,相应的Fes.js 用角色定义一组资源。当访问 Fes.js 应用时,使用插件提供的 API 设置用户的角色,角色对应的资源才可见,非角色对应的资源不可见。\n\n\n当然有时候业务比较复杂,角色对应的权限是动态的。不要怕!插件提供粒度更细的 API 来设置当前用户能访问的资源。\n\n\n## 启用方式\n在 `package.json` 中引入依赖:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-access\": \"^2.0.0\"\n },\n}\n```\n\n## 配置\n\n### 编译时配置\n在执行 `fes dev` 或者 `fes build` 时,通过此配置生成运行时的代码,在配置文件`.fes.js` 中配置:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"/\", \"/onepiece\", '/store']\n }\n }\n}\n```\n\n#### roles\n- **类型**:对象\n \n- **默认值**:`{}`\n\n- **详情**: \n \n 角色预定义列表。`key` 是角色 Id ,`value`是角色 Id 对应的资源列表。\n\n\n### 运行时配置\n在 `app.js` 中配置\n\n#### unAccessHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n unAccessHandler({ to, next }) {\n const accesssIds = accessApi.getAccess();\n if (to.path === '/404') {\n accessApi.setAccess(accesssIds.concat(['/404']));\n return next('/404');\n }\n if (!accesssIds.includes('/403')) {\n accessApi.setAccess(accesssIds.concat(['/403']));\n }\n next('/403');\n }\n};\n\n```\n\n#### noFoundHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n noFoundHandler({ next }) {\n const accesssIds = accessApi.getAccess();\n if (!accesssIds.includes('/404')) {\n accessApi.setAccess(accesssIds.concat(['/404']));\n }\n next('/404');\n }\n};\n\n```\n\n## API\n\n### access\n插件 API 通过 `@fesjs/fes` 导出:\n```js\nimport { access } from '@fesjs/fes'\n```\n\n#### access.hasAccess\n- **类型**:函数\n \n- **详情**: 判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:Boolean\n\n#### access.isDataReady\n- **类型**:函数\n \n- **详情**:可以用异步数据来设置权限,`isDataReady` 用来判断异步数据是否已经加载完毕。\n- **参数**:null\n- **返回值**:Boolean\n```js\nimport { access } from '@fesjs/fes';\nconsole.log(access.isDataReady())\n```\n\n#### access.setRole\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - roleId,角色Id,有两种类型:\n - String,对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应对应着 `roles` 配置对象中的 `key`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setRole(['admin'])\n```\n\n#### access.setAccess\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - accessIds,资源Id数组,有两种类型:\n - Array,数组项对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应该是`Array`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setAccess(['/a', '/b', '/c'])\n```\n\n#### access.getAccess\n- **类型**:函数\n \n- **详情**:返回当前可见的资源列表。\n- **参数**:null\n\n```js\nimport { access } from '@fesjs/fes';\naccess.getAccess();\n```\n\n### useAccess\n- **类型**:[composition]((https://v3.cn.vuejs.org/guide/composition-api-introduction.html)) 函数\n \n- **详情**:判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:`ref`\n \n```vue\n\n\n```\n### v-access\n在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时显示DOM,当没有权限时隐藏此DOM。\n```vue\n\n\n```\n\n\n### 匹配规则\n\n#### 全等匹配\n资源的匹配规则默认是使用全等匹配,比如页面 `pages/a.vue` 对应路由 `path` 是 `/a`,则 `/a` 就是页面的资源ID。如果我们设置:\n```js\naccess.setAccess(['/a'])\n```\n由于权限列表中包含`/a`,则表示拥有此页面权限。\n\n#### 模糊匹配\n页面`@id.vue`会映射为动态路由`/:id`,想匹配此页面有两种办法:\n- **access.setAccess(['/:id'])**\n- **access.setAccess(['/*'])**\n\n第二种是模糊匹配,`*`表示任意路径。比如角色`admin`需要全部权限,则可以:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"*\"]\n }\n }\n}\n```\n\n\n### 角色\n通常我们会用角色来控制权限,相应的Fes.js 用角色定义一组资源。当访问 Fes.js 应用时,使用插件提供的 API 设置用户的角色,角色对应的资源才可见,非角色对应的资源不可见。\n\n\n当然有时候业务比较复杂,角色对应的权限是动态的。不要怕!插件提供粒度更细的 API 来设置当前用户能访问的资源。\n\n\n## 启用方式\n在 `package.json` 中引入依赖:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-access\": \"^2.0.0\"\n },\n}\n```\n\n## 配置\n\n### 编译时配置\n在执行 `fes dev` 或者 `fes build` 时,通过此配置生成运行时的代码,在配置文件`.fes.js` 中配置:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"/\", \"/onepiece\", '/store']\n }\n }\n}\n```\n\n#### roles\n- **类型**:对象\n \n- **默认值**:`{}`\n\n- **详情**: \n \n 角色预定义列表。`key` 是角色 Id ,`value`是角色 Id 对应的资源列表。\n\n\n### 运行时配置\n在 `app.js` 中配置\n\n#### unAccessHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n unAccessHandler({ to, next }) {\n const accesssIds = accessApi.getAccess();\n if (to.path === '/404') {\n accessApi.setAccess(accesssIds.concat(['/404']));\n return next('/404');\n }\n if (!accesssIds.includes('/403')) {\n accessApi.setAccess(accesssIds.concat(['/403']));\n }\n next('/403');\n }\n};\n\n```\n\n#### noFoundHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n noFoundHandler({ next }) {\n const accesssIds = accessApi.getAccess();\n if (!accesssIds.includes('/404')) {\n accessApi.setAccess(accesssIds.concat(['/404']));\n }\n next('/404');\n }\n};\n\n```\n\n## API\n\n### access\n插件 API 通过 `@fesjs/fes` 导出:\n```js\nimport { access } from '@fesjs/fes'\n```\n\n#### access.hasAccess\n- **类型**:函数\n \n- **详情**: 判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:Boolean\n\n#### access.isDataReady\n- **类型**:函数\n \n- **详情**:可以用异步数据来设置权限,`isDataReady` 用来判断异步数据是否已经加载完毕。\n- **参数**:null\n- **返回值**:Boolean\n```js\nimport { access } from '@fesjs/fes';\nconsole.log(access.isDataReady())\n```\n\n#### access.setRole\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - roleId,角色Id,有两种类型:\n - String,对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应对应着 `roles` 配置对象中的 `key`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setRole(['admin'])\n```\n\n#### access.setAccess\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - accessIds,资源Id数组,有两种类型:\n - Array,数组项对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应该是`Array`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setAccess(['/a', '/b', '/c'])\n```\n\n#### access.getAccess\n- **类型**:函数\n \n- **详情**:返回当前可见的资源列表。\n- **参数**:null\n\n```js\nimport { access } from '@fesjs/fes';\naccess.getAccess();\n```\n\n### useAccess\n- **类型**:[composition]((https://v3.cn.vuejs.org/guide/composition-api-introduction.html)) 函数\n \n- **详情**:判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:`ref`\n \n```vue\n\n\n```\n### v-access\n在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时显示DOM,当没有权限时隐藏此DOM。\n```vue\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/404.vue","start":{"line":2,"column":15,"position":24},"end":{"line":35,"column":2,"position":202},"range":[75,794],"fragment":"\">\n \n \n\n\n{\n \"layout\": false\n}\n\n"}},{"format":"javascript","foundDate":1638413755173,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/routes/routes.js","start":{"line":75,"column":3,"position":515},"end":{"line":93,"column":17,"position":639},"range":[1825,2184],"fragment":"}\n];\n return routes;\n}\n\nconst ROUTER_BASE = '';\nlet router = null;\nlet history = null;\nexport const createRouter = (routes) => {\n if (router) {\n return router;\n }\n const createHistory = plugin.applyPlugins({\n key: 'modifyCreateHistroy',\n type: ApplyPluginsType.modify,\n args: {\n base: ROUTER_BASE\n },\n initialValue: createWebHistory"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/routes/routes.js","start":{"line":26,"column":3,"position":184},"end":{"line":44,"column":21,"position":308},"range":[637,1000],"fragment":"}\n];\n return routes;\n}\n\nconst ROUTER_BASE = '';\nlet router = null;\nlet history = null;\nexport const createRouter = (routes) => {\n if (router) {\n return router;\n }\n const createHistory = plugin.applyPlugins({\n key: 'modifyCreateHistroy',\n type: ApplyPluginsType.modify,\n args: {\n base: ROUTER_BASE\n },\n initialValue: createWebHashHistory"}},{"format":"javascript","foundDate":1638413755174,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/routes/routes.js","start":{"line":93,"column":17,"position":640},"end":{"line":133,"column":2,"position":883},"range":[2184,2897],"fragment":",\n });\n history = createHistory(ROUTER_BASE);\n // 修改routes\n plugin.applyPlugins({\n key: 'patchRoutes',\n type: ApplyPluginsType.event,\n args: { routes },\n });\n router = createVueRouter({\n history,\n routes\n });\n\n plugin.applyPlugins({\n key: 'onRouterCreated',\n type: ApplyPluginsType.event,\n args: { router },\n });\n\n return router;\n};\n\nexport const getRouter = ()=>{\n if(!router){\n console.warn(`[preset-build-in] router is null`)\n }\n return router;\n}\n\nexport const getHistory = ()=>{\n if(!history){\n console.warn(`[preset-build-in] history is null`)\n }\n return history;\n}\n\nexport const destroyRouter = ()=>{\n router = null;\n history = null;\n}"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/routes/routes.js","start":{"line":44,"column":21,"position":309},"end":{"line":84,"column":2,"position":552},"range":[1000,1713],"fragment":",\n });\n history = createHistory(ROUTER_BASE);\n // 修改routes\n plugin.applyPlugins({\n key: 'patchRoutes',\n type: ApplyPluginsType.event,\n args: { routes },\n });\n router = createVueRouter({\n history,\n routes\n });\n\n plugin.applyPlugins({\n key: 'onRouterCreated',\n type: ApplyPluginsType.event,\n args: { router },\n });\n\n return router;\n};\n\nexport const getRouter = ()=>{\n if(!router){\n console.warn(`[preset-build-in] router is null`)\n }\n return router;\n}\n\nexport const getHistory = ()=>{\n if(!history){\n console.warn(`[preset-build-in] history is null`)\n }\n return history;\n}\n\nexport const destroyRouter = ()=>{\n router = null;\n history = null;\n}"}},{"format":"less","foundDate":1638413755332,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/styles/mixins/hairline.less","start":{"line":1,"column":1,"position":0},"end":{"line":173,"column":2,"position":1037},"range":[0,4232],"fragment":"@import \"../theme\";\n\n.scale-hairline-common(@color, @top, @right, @bottom, @left) {\n content: '';\n position: absolute;\n background-color: @color;\n display: block;\n z-index: 1;\n top: @top;\n right: @right;\n bottom: @bottom;\n left: @left;\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='top') {\n border-top: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-top: none;\n position: relative;\n\n &::before {\n .scale-hairline-common(@color, 0, auto, auto, 0);\n width: 100%;\n height: 1PX;\n transform-origin: 50% 50%;\n transform: scaleY(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleY(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='right') {\n border-right: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-right: none;\n position: relative;\n\n &::after {\n .scale-hairline-common(@color, 0, 0, auto, auto);\n width: 1PX;\n height: 100%;\n background: @color;\n transform-origin: 100% 50%;\n transform: scaleX(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleX(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='bottom') {\n border-bottom: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-bottom: none;\n position: relative;\n\n &::after {\n .scale-hairline-common(@color, auto, auto, 0, 0);\n width: 100%;\n height: 1PX;\n transform-origin: 50% 100%;\n transform: scaleY(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleY(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='left') {\n border-left: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-left: none;\n position: relative;\n\n &::before {\n .scale-hairline-common(@color, 0, auto, auto, 0);\n width: 1PX;\n height: 100%;\n transform-origin: 100% 50%;\n transform: scaleX(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleX(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base, @radius: 0) when (@direction ='all') {\n border: 1PX solid @color;\n border-radius: @radius;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n position: relative;\n border: none;\n\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n width: 200%;\n height: 200%;\n border: 1PX solid @color;\n border-radius: @radius * 2;\n transform-origin: 0 0;\n transform: scale(0.5);\n box-sizing: border-box;\n pointer-events: none;\n }\n }\n }\n}\n\n.hairline-remove(@position) when (@position ='left') {\n border-left: 0;\n\n &:before {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='right') {\n border-right: 0;\n\n &:after {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='top') {\n border-top: 0;\n\n &:before {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='bottom') {\n border-bottom: 0;\n\n &:after {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='all') {\n border: 0;\n\n &:before {\n display: none !important;\n }\n}"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/h5/src/styles/mixins/hairline.less","start":{"line":1,"column":1,"position":0},"end":{"line":173,"column":2,"position":1037},"range":[0,4232],"fragment":"@import \"../theme\";\n\n.scale-hairline-common(@color, @top, @right, @bottom, @left) {\n content: '';\n position: absolute;\n background-color: @color;\n display: block;\n z-index: 1;\n top: @top;\n right: @right;\n bottom: @bottom;\n left: @left;\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='top') {\n border-top: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-top: none;\n position: relative;\n\n &::before {\n .scale-hairline-common(@color, 0, auto, auto, 0);\n width: 100%;\n height: 1PX;\n transform-origin: 50% 50%;\n transform: scaleY(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleY(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='right') {\n border-right: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-right: none;\n position: relative;\n\n &::after {\n .scale-hairline-common(@color, 0, 0, auto, auto);\n width: 1PX;\n height: 100%;\n background: @color;\n transform-origin: 100% 50%;\n transform: scaleX(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleX(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='bottom') {\n border-bottom: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-bottom: none;\n position: relative;\n\n &::after {\n .scale-hairline-common(@color, auto, auto, 0, 0);\n width: 100%;\n height: 1PX;\n transform-origin: 50% 100%;\n transform: scaleY(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleY(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base) when (@direction ='left') {\n border-left: 1PX solid @color;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n border-left: none;\n position: relative;\n\n &::before {\n .scale-hairline-common(@color, 0, auto, auto, 0);\n width: 1PX;\n height: 100%;\n transform-origin: 100% 50%;\n transform: scaleX(0.5);\n\n @media (min-resolution: 3dppx) {\n transform: scaleX(0.33);\n }\n }\n }\n }\n}\n\n.hairline(@direction, @color: @border-color-base, @radius: 0) when (@direction ='all') {\n border: 1PX solid @color;\n border-radius: @radius;\n\n html:not([data-scale]) & {\n @media (min-resolution: 2dppx) {\n position: relative;\n border: none;\n\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n width: 200%;\n height: 200%;\n border: 1PX solid @color;\n border-radius: @radius * 2;\n transform-origin: 0 0;\n transform: scale(0.5);\n box-sizing: border-box;\n pointer-events: none;\n }\n }\n }\n}\n\n.hairline-remove(@position) when (@position ='left') {\n border-left: 0;\n\n &:before {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='right') {\n border-right: 0;\n\n &:after {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='top') {\n border-top: 0;\n\n &:before {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='bottom') {\n border-bottom: 0;\n\n &:after {\n display: none !important;\n }\n}\n\n.hairline-remove(@position) when (@position ='all') {\n border: 0;\n\n &:before {\n display: none !important;\n }\n}"}},{"format":"javascript","foundDate":1638413755409,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/throttle.js","start":{"line":2,"column":1,"position":1},"end":{"line":16,"column":2,"position":140},"range":[1,383],"fragment":"const throttleMap = new Map();\n\nexport default async (ctx, next) => {\n if (ctx.config.throttle) {\n if (throttleMap.get(ctx.key) >= Date.now()) {\n ctx.error = {\n type: 'FREQUENTLY',\n msg: '请求过于频繁'\n };\n return;\n }\n }\n await next();\n throttleMap.set(ctx.key, Date.now() + ctx.config.throttle);\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/throttle.js","start":{"line":2,"column":1,"position":1},"end":{"line":16,"column":2,"position":140},"range":[1,383],"fragment":"const throttleMap = new Map();\n\nexport default async (ctx, next) => {\n if (ctx.config.throttle) {\n if (throttleMap.get(ctx.key) >= Date.now()) {\n ctx.error = {\n type: 'FREQUENTLY',\n msg: '请求过于频繁'\n };\n return;\n }\n }\n await next();\n throttleMap.set(ctx.key, Date.now() + ctx.config.throttle);\n};"}},{"format":"javascript","foundDate":1638413755410,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/setDataField.js","start":{"line":1,"column":1,"position":0},"end":{"line":11,"column":2,"position":134},"range":[0,378],"fragment":"import { isObject } from './helpers';\n\n// FEATURE: 后续支持 a.b.c\nexport default async (ctx, next) => {\n const dataField = ctx.config.dataField ?? ctx.dataField;\n if (!ctx.error && ctx.response && isObject(ctx.response.data) && dataField) {\n ctx.response._rawData = ctx.response.data;\n ctx.response.data = ctx.response.data[dataField];\n }\n await next();\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/setDataField.js","start":{"line":1,"column":1,"position":0},"end":{"line":11,"column":2,"position":134},"range":[0,378],"fragment":"import { isObject } from './helpers';\n\n// FEATURE: 后续支持 a.b.c\nexport default async (ctx, next) => {\n const dataField = ctx.config.dataField ?? ctx.dataField;\n if (!ctx.error && ctx.response && isObject(ctx.response.data) && dataField) {\n ctx.response._rawData = ctx.response.data;\n ctx.response.data = ctx.response.data[dataField];\n }\n await next();\n};"}},{"format":"javascript","foundDate":1638413755411,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/scheduler.js","start":{"line":2,"column":1,"position":1},"end":{"line":33,"column":2,"position":307},"range":[1,952],"fragment":"class Scheduler {\n constructor() {\n this.middlewares = [];\n }\n\n use(fn) {\n if (typeof fn !== 'function') throw new TypeError('middleware must be a function!');\n this.middlewares.push(fn);\n return this;\n }\n\n compose() {\n return (context, next) => {\n let index = -1;\n const dispatch = (i) => {\n if (i <= index) return Promise.reject(new Error('next() called multiple times'));\n index = i;\n let fn = this.middlewares[i];\n if (index === this.middlewares.length) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));\n } catch (e) {\n return Promise.reject(e);\n }\n };\n return dispatch(0);\n };\n }\n}\n\nexport default new Scheduler();"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/scheduler.js","start":{"line":2,"column":1,"position":1},"end":{"line":33,"column":2,"position":307},"range":[1,952],"fragment":"class Scheduler {\n constructor() {\n this.middlewares = [];\n }\n\n use(fn) {\n if (typeof fn !== 'function') throw new TypeError('middleware must be a function!');\n this.middlewares.push(fn);\n return this;\n }\n\n compose() {\n return (context, next) => {\n let index = -1;\n const dispatch = (i) => {\n if (i <= index) return Promise.reject(new Error('next() called multiple times'));\n index = i;\n let fn = this.middlewares[i];\n if (index === this.middlewares.length) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));\n } catch (e) {\n return Promise.reject(e);\n }\n };\n return dispatch(0);\n };\n }\n}\n\nexport default new Scheduler();"}},{"format":"javascript","foundDate":1638413755412,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/resErrorProcess.js","start":{"line":1,"column":1,"position":0},"end":{"line":17,"column":2,"position":133},"range":[0,387],"fragment":"import { isObject } from './helpers';\n\n// 错误处理等副作用网上提\nexport default async (ctx, next) => {\n const {\n response,\n config\n } = ctx;\n if (!config.closeResDataCheck && response && isObject(response.data)) {\n const code = response.data.code;\n if (code !== '0') {\n ctx.error = response; // code 不为零进入 reject\n }\n }\n\n await next();\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/resErrorProcess.js","start":{"line":1,"column":1,"position":0},"end":{"line":17,"column":2,"position":133},"range":[0,387],"fragment":"import { isObject } from './helpers';\n\n// 错误处理等副作用网上提\nexport default async (ctx, next) => {\n const {\n response,\n config\n } = ctx;\n if (!config.closeResDataCheck && response && isObject(response.data)) {\n const code = response.data.code;\n if (code !== '0') {\n ctx.error = response; // code 不为零进入 reject\n }\n }\n\n await next();\n};"}},{"format":"javascript","foundDate":1638413755413,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/resDataAdaptor.js","start":{"line":1,"column":1,"position":0},"end":{"line":8,"column":2,"position":107},"range":[0,326],"fragment":"import { isFunction, isObject, isString } from './helpers';\n\nexport default async ({ response, responseDataAdaptor }, next) => {\n if (isFunction(responseDataAdaptor) && response && (isObject(response.data) || isString(response.data))) {\n response.data = responseDataAdaptor(response.data);\n }\n await next();\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/resDataAdaptor.js","start":{"line":1,"column":1,"position":0},"end":{"line":8,"column":2,"position":107},"range":[0,326],"fragment":"import { isFunction, isObject, isString } from './helpers';\n\nexport default async ({ response, responseDataAdaptor }, next) => {\n if (isFunction(responseDataAdaptor) && response && (isObject(response.data) || isString(response.data))) {\n response.data = responseDataAdaptor(response.data);\n }\n await next();\n};"}},{"format":"javascript","foundDate":1638413755426,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/request.js","start":{"line":40,"column":2,"position":356},"end":{"line":71,"column":5,"position":568},"range":[1252,1924],"fragment":"(fn)) {\n instance.interceptors[type].use(fn);\n }\n });\n}\n\nfunction addRequestInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'request');\n}\n\nfunction addResponseInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'response');\n}\n\nasync function axiosMiddleware(context, next) {\n try {\n context.response = await context.instance.request(context.config);\n } catch (error) {\n context.error = error;\n }\n\n await next();\n}\n\nfunction getRequestInstance() {\n const {\n responseDataAdaptor,\n requestInterceptors = [],\n responseInterceptors = [],\n errorHandler,\n ...otherConfigs\n } = _fes"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/request.js","start":{"line":23,"column":11,"position":209},"end":{"line":53,"column":7,"position":420},"range":[834,1563],"fragment":"(fn)) {\n instance.interceptors[type].use(fn);\n }\n });\n}\n\nfunction addRequestInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'request');\n}\n\nfunction addResponseInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'response');\n}\n\nasync function axiosMiddleware(context, next) {\n try {\n context.response = await context.instance.request(context.config);\n } catch (error) {\n context.error = error;\n }\n await next();\n}\n\nfunction getRequestInstance() {\n const {\n responseDataAdaptor,\n requestInterceptors = [],\n responseInterceptors = [],\n errorHandler,\n ...otherConfigs\n } = plugin"}},{"format":"javascript","foundDate":1638413755429,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/request.js","start":{"line":98,"column":8,"position":798},"end":{"line":110,"column":2,"position":881},"range":[2816,3034],"fragment":".compose()\n };\n} // DEPRECATED 废弃,使用 axios baseURL\n\n\nfunction handleApiPathBase(url, options = {}) {\n if (url.startsWith('http')) return url;\n\n if (options.base) {\n return `${options.base}${url}`;\n }\n\n return `"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/request.js","start":{"line":88,"column":10,"position":641},"end":{"line":99,"column":10,"position":722},"range":[2500,2738],"fragment":".compose()\n };\n}\n\n// DEPRECATED 废弃,使用 axios baseURL\nfunction handleApiPathBase(url, options = {}) {\n if (url.startsWith('http')) return url;\n\n if (options.base) {\n return `${options.base}${url}`;\n }\n return `/ras-mas"}},{"format":"javascript","foundDate":1638413755431,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/request.js","start":{"line":117,"column":2,"position":962},"end":{"line":181,"column":6,"position":1453},"range":[3254,4669],"fragment":"(options.method)) {\n options.data = data;\n } else {\n options.params = data;\n }\n\n return options;\n}\n\nlet currentRequestInstance = null;\n\nfunction createContext(userConfig) {\n return { ...currentRequestInstance.context,\n config: { ...currentRequestInstance.context.defaultConfig,\n ...userConfig\n }\n };\n}\n\nfunction getResponseCode(response) {\n if (response) {\n if (response._rawData) return response._rawData.code;\n if (response.data) return response.data.code;\n }\n\n return null;\n}\n\nfunction skipErrorHandlerToObj(skipErrorHandler = []) {\n if (!Array.isArray(skipErrorHandler)) {\n skipErrorHandler = [skipErrorHandler];\n }\n\n return skipErrorHandler.reduce((acc, cur) => {\n acc[cur] = true;\n return acc;\n }, {});\n}\n\nfunction handleRequestError({\n errorHandler = {},\n error,\n response,\n config\n}) {\n // 跳过所有错误类型处理\n if (config.skipErrorHandler === true) return;\n const skipObj = skipErrorHandlerToObj(config.skipErrorHandler);\n const resCode = getResponseCode(response);\n let errorKey = 'default';\n\n if (resCode && errorHandler[resCode]) {\n errorKey = resCode;\n } else if (error.type && errorHandler[error.type]) {\n errorKey = error.type;\n } else if (error.response && errorHandler[error.response.status]) {\n errorKey = error.response.status;\n }\n\n if (!skipObj[errorKey] && errorHandler[errorKey]) {\n return errorHandler[errorKey](error);\n }\n}\n\nconst"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/request.js","start":{"line":105,"column":24,"position":795},"end":{"line":171,"column":7,"position":1288},"range":[2949,4497],"fragment":"(options.method)) {\n options.data = data;\n } else {\n options.params = data;\n }\n return options;\n}\n\nlet currentRequestInstance = null;\n\nfunction createContext(userConfig) {\n return {\n ...currentRequestInstance.context,\n config: {\n ...currentRequestInstance.context.defaultConfig,\n ...userConfig\n }\n };\n}\n\n\nfunction getResponseCode(response) {\n if (response) {\n if (response._rawData) return response._rawData.code;\n if (response.data) return response.data.code;\n }\n return null;\n}\n\nfunction skipErrorHandlerToObj(skipErrorHandler = []) {\n if (!Array.isArray(skipErrorHandler)) {\n skipErrorHandler = [skipErrorHandler];\n }\n\n return skipErrorHandler.reduce((acc, cur) => {\n acc[cur] = true;\n return acc;\n }, {});\n}\n\nfunction handleRequestError({\n errorHandler = {},\n error,\n response,\n config\n}) {\n // 跳过所有错误类型处理\n if (config.skipErrorHandler === true) return;\n\n const skipObj = skipErrorHandlerToObj(config.skipErrorHandler);\n const resCode = getResponseCode(response);\n\n let errorKey = 'default';\n if (resCode && errorHandler[resCode]) {\n errorKey = resCode;\n } else if (error.type && errorHandler[error.type]) {\n errorKey = error.type;\n } else if (error.response && errorHandler[error.response.status]) {\n errorKey = error.response.status;\n }\n\n if (!skipObj[errorKey] && errorHandler[errorKey]) {\n return errorHandler[errorKey](error);\n }\n}\n\nexport"}},{"format":"javascript","foundDate":1638413755432,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/request.js","start":{"line":181,"column":1,"position":1453},"end":{"line":204,"column":8,"position":1662},"range":[4664,5274],"fragment":"const request = (url, data, options = {}) => {\n if (typeof options === 'string') {\n options = {\n method: options\n };\n }\n\n if (!currentRequestInstance) {\n currentRequestInstance = getRequestInstance();\n }\n\n const userConfig = userConfigHandler(url, data, options);\n const context = createContext(userConfig);\n return currentRequestInstance.request(context).then(async () => {\n if (!context.error) {\n return context.config.useResonse ? context.response : context.response.data;\n }\n\n await handleRequestError(context);\n return Promise.reject(context.error);\n });\n};\n\nexports"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/request.js","start":{"line":171,"column":2,"position":1290},"end":{"line":192,"column":9,"position":1497},"range":[4498,5163],"fragment":"const request = (url, data, options = {}) => {\n if (typeof options === 'string') {\n options = {\n method: options\n };\n }\n if (!currentRequestInstance) {\n currentRequestInstance = getRequestInstance();\n }\n const userConfig = userConfigHandler(url, data, options);\n const context = createContext(userConfig);\n\n return currentRequestInstance.request(context).then(async () => {\n if (!context.error) {\n return context.config.useResonse ? context.response : context.response.data;\n }\n await handleRequestError(context);\n return Promise.reject(context.error);\n });\n};\n\nfunction"}},{"format":"javascript","foundDate":1638413755437,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/preventRepeatReq.js","start":{"line":1,"column":1,"position":0},"end":{"line":64,"column":2,"position":546},"range":[0,1644],"fragment":"const requestMap = new Map();\n\nconst mergeRequestMap = new Map();\nconst requestQueue = new Map();\n\nfunction handleCachingStart(ctx) {\n const isRequesting = mergeRequestMap.get(ctx.key);\n if (isRequesting) {\n return new Promise((resolve) => {\n const queue = requestQueue.get(ctx.key) || [];\n requestQueue.set(ctx.key, queue.concat(resolve));\n });\n }\n mergeRequestMap.set(ctx.key, true);\n}\n\nfunction handleRepeatRequest(ctx) {\n const queue = requestQueue.get(ctx.key);\n if (queue && queue.length > 0) {\n queue.forEach((resolve) => {\n if (ctx.error) {\n resolve({\n error: ctx.error\n });\n } else {\n resolve({\n response: ctx.response\n });\n }\n });\n }\n requestQueue.delete(ctx.key);\n mergeRequestMap.delete(ctx.key);\n}\n\nexport default async (ctx, next) => {\n if (ctx.config.mergeRequest) {\n const result = await handleCachingStart(ctx);\n if (result) {\n Object.keys(result).forEach((key) => {\n ctx[key] = result[key];\n });\n return;\n }\n } else {\n if (requestMap.get(ctx.key) && !ctx.config.mergeRequest) {\n ctx.error = {\n type: 'REPEAT',\n msg: '重复请求',\n config: ctx.config\n };\n return;\n }\n requestMap.set(ctx.key, true);\n }\n\n await next();\n\n if (ctx.config.mergeRequest) {\n handleRepeatRequest(ctx);\n } else {\n requestMap.delete(ctx.key);\n }\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/preventRepeatReq.js","start":{"line":1,"column":1,"position":0},"end":{"line":64,"column":2,"position":546},"range":[0,1644],"fragment":"const requestMap = new Map();\n\nconst mergeRequestMap = new Map();\nconst requestQueue = new Map();\n\nfunction handleCachingStart(ctx) {\n const isRequesting = mergeRequestMap.get(ctx.key);\n if (isRequesting) {\n return new Promise((resolve) => {\n const queue = requestQueue.get(ctx.key) || [];\n requestQueue.set(ctx.key, queue.concat(resolve));\n });\n }\n mergeRequestMap.set(ctx.key, true);\n}\n\nfunction handleRepeatRequest(ctx) {\n const queue = requestQueue.get(ctx.key);\n if (queue && queue.length > 0) {\n queue.forEach((resolve) => {\n if (ctx.error) {\n resolve({\n error: ctx.error\n });\n } else {\n resolve({\n response: ctx.response\n });\n }\n });\n }\n requestQueue.delete(ctx.key);\n mergeRequestMap.delete(ctx.key);\n}\n\nexport default async (ctx, next) => {\n if (ctx.config.mergeRequest) {\n const result = await handleCachingStart(ctx);\n if (result) {\n Object.keys(result).forEach((key) => {\n ctx[key] = result[key];\n });\n return;\n }\n } else {\n if (requestMap.get(ctx.key) && !ctx.config.mergeRequest) {\n ctx.error = {\n type: 'REPEAT',\n msg: '重复请求',\n config: ctx.config\n };\n return;\n }\n requestMap.set(ctx.key, true);\n }\n\n await next();\n\n if (ctx.config.mergeRequest) {\n handleRepeatRequest(ctx);\n } else {\n requestMap.delete(ctx.key);\n }\n};"}},{"format":"javascript","foundDate":1638413755439,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/paramsProcess.js","start":{"line":1,"column":1,"position":0},"end":{"line":11,"column":2,"position":97},"range":[0,283],"fragment":"import { checkHttpRequestHasBody, trimObj } from './helpers';\n\nexport default async (ctx, next) => {\n const config = ctx.config;\n if (checkHttpRequestHasBody(config.method)) {\n trimObj(config.data);\n } else {\n trimObj(config.params);\n }\n await next();\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/paramsProcess.js","start":{"line":1,"column":1,"position":0},"end":{"line":11,"column":2,"position":97},"range":[0,283],"fragment":"import { checkHttpRequestHasBody, trimObj } from './helpers';\n\nexport default async (ctx, next) => {\n const config = ctx.config;\n if (checkHttpRequestHasBody(config.method)) {\n trimObj(config.data);\n } else {\n trimObj(config.params);\n }\n await next();\n};"}},{"format":"javascript","foundDate":1638413755442,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/helpers.js","start":{"line":5,"column":1,"position":2},"end":{"line":90,"column":2,"position":596},"range":[41,2028],"fragment":"export function typeOf(obj) {\n const map = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regExp',\n '[object Undefined]': 'undefined',\n '[object Null]': 'null',\n '[object Object]': 'object',\n '[object URLSearchParams]': 'URLSearchParams'\n };\n return map[Object.prototype.toString.call(obj)];\n}\n\nexport function isFunction(obj) {\n return typeOf(obj) === 'function';\n}\n\nexport function isDate(obj) {\n return typeOf(obj) === 'date';\n}\n\nexport function isString(obj) {\n return typeOf(obj) === 'string';\n}\n\nexport function isArray(obj) {\n return typeOf(obj) === 'array';\n}\n\nexport function isObject(obj) {\n return typeOf(obj) === 'object';\n}\n\nexport function isURLSearchParams(obj) {\n return typeOf(obj) === 'URLSearchParams';\n}\n\n// eslint-disable-next-line\nexport const isUndefined = val => val === undefined;\n\nexport const isDefined = val => val != null;\n\n\nexport function checkHttpRequestHasBody(method) {\n method = method.toUpperCase();\n const HTTP_METHOD = {\n GET: {\n request_body: false\n },\n POST: {\n request_body: true\n },\n PUT: {\n request_body: true\n },\n DELETE: {\n request_body: true\n },\n HEAD: {\n request_body: false\n },\n OPTIONS: {\n request_body: false\n },\n PATCH: {\n request_body: true\n }\n };\n return HTTP_METHOD[method].request_body;\n}\n\nexport function trimObj(obj) {\n if (isObject(obj)) {\n Object.entries(obj).forEach(([key, value]) => {\n if (isString(value)) {\n obj[key] = value.trim();\n } else if (isObject(value)) {\n trimObj(value);\n }\n });\n }\n}"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/helpers.js","start":{"line":5,"column":1,"position":2},"end":{"line":90,"column":2,"position":596},"range":[41,2028],"fragment":"export function typeOf(obj) {\n const map = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regExp',\n '[object Undefined]': 'undefined',\n '[object Null]': 'null',\n '[object Object]': 'object',\n '[object URLSearchParams]': 'URLSearchParams'\n };\n return map[Object.prototype.toString.call(obj)];\n}\n\nexport function isFunction(obj) {\n return typeOf(obj) === 'function';\n}\n\nexport function isDate(obj) {\n return typeOf(obj) === 'date';\n}\n\nexport function isString(obj) {\n return typeOf(obj) === 'string';\n}\n\nexport function isArray(obj) {\n return typeOf(obj) === 'array';\n}\n\nexport function isObject(obj) {\n return typeOf(obj) === 'object';\n}\n\nexport function isURLSearchParams(obj) {\n return typeOf(obj) === 'URLSearchParams';\n}\n\n// eslint-disable-next-line\nexport const isUndefined = val => val === undefined;\n\nexport const isDefined = val => val != null;\n\n\nexport function checkHttpRequestHasBody(method) {\n method = method.toUpperCase();\n const HTTP_METHOD = {\n GET: {\n request_body: false\n },\n POST: {\n request_body: true\n },\n PUT: {\n request_body: true\n },\n DELETE: {\n request_body: true\n },\n HEAD: {\n request_body: false\n },\n OPTIONS: {\n request_body: false\n },\n PATCH: {\n request_body: true\n }\n };\n return HTTP_METHOD[method].request_body;\n}\n\nexport function trimObj(obj) {\n if (isObject(obj)) {\n Object.entries(obj).forEach(([key, value]) => {\n if (isString(value)) {\n obj[key] = value.trim();\n } else if (isObject(value)) {\n trimObj(value);\n }\n });\n }\n}"}},{"format":"javascript","foundDate":1638413755450,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/cacheControl.js","start":{"line":1,"column":1,"position":0},"end":{"line":209,"column":2,"position":1521},"range":[0,5546],"fragment":"import {\n isObject, isString, isURLSearchParams, checkHttpRequestHasBody\n} from './helpers';\n/**\n * 缓存实现的功能\n * 1. 唯一定位一个请求(url, data | params, method)\n * 其中请求参数根据请求方法使用其中一个就够了\n * 一个请求同时包含 data | params 参数的设计本身不合理\n * 不对这种情况进行兼容\n * 2. 控制缓存内容的大小,localStorage 只有5M\n * 3. 控制缓存时间\n * session(存在内存中)\n * expireTime 存在localStoreage 中\n * 4. 成功的、且响应内容为json的请求进行缓存\n */\n\n/**\n * 配置数据\n * type: 'ram' | 'sessionStorage' | 'localStorage'\n * cacheTime: ''\n */\n\n\n/**\n * 缓存数据结构\n * cache: {\n * url: 'url', // 缓存 url\n * data: data, // 数据\n * expire: '' // 缓存时间\n * }\n */\n\n/**\n * 请求参数可以为如下类型\n * - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams\n * - Browser only: FormData, File, Blob\n * 只缓存参数类型为: string、plain object、URLSearchParams 或者无参数的 请求\n */\n\nconst CACHE_KEY_PREFIX = '__FES_REQUEST_CACHE:';\nconst CACHE_TYPE = {\n ram: 'ram',\n session: 'sessionStorage',\n local: 'localStorage'\n};\n\nconst CACHE_DATA_MAP = new Map();\n\nfunction genInnerKey(key, cacheType = 'ram') {\n if (cacheType !== CACHE_TYPE.ram) {\n return `${CACHE_KEY_PREFIX}${key}`;\n }\n return key;\n}\n\nfunction canCache(data) {\n return !data || isObject(data) || isString(data) || Array.isArray(data) || isURLSearchParams(data);\n}\n\nfunction setCacheData({\n key,\n cacheType = 'ram',\n data,\n cacheTime = 1000 * 60 * 3\n}) {\n const _key = genInnerKey(key, cacheType);\n\n const currentCacheData = {\n cacheType,\n data,\n cacheTime,\n expire: Date.now() + cacheTime\n };\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n try {\n cacheInstance.setItem(_key, JSON.stringify(currentCacheData));\n } catch (e) {\n // setItem 出现异常,清理缓存\n for (const item in cacheInstance) {\n if (item.startsWith(CACHE_KEY_PREFIX) && Object.prototype.hasOwnProperty.call(cacheInstance, item)) {\n cacheInstance.removeItem(item);\n }\n }\n }\n } else {\n CACHE_DATA_MAP.set(_key, currentCacheData);\n }\n}\n\nfunction isExpire({ expire, cacheTime }) {\n if (!cacheTime || expire >= Date.now()) {\n return false;\n }\n return true;\n}\n\nfunction getCacheData({ key, cacheType = 'ram' }) {\n const _key = genInnerKey(key, cacheType);\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n const text = cacheInstance.getItem(_key) || null;\n try {\n const currentCacheData = JSON.parse(text);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n cacheInstance.removeItem(_key);\n return null;\n } catch (e) {\n cacheInstance.removeItem(_key);\n return null;\n }\n } else {\n const currentCacheData = CACHE_DATA_MAP.get(_key);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n CACHE_DATA_MAP.delete(_key);\n return null;\n }\n}\n\n// 存储缓存队列\nconst cacheStartFlag = new Map();\nconst cachingQueue = new Map();\n\n/**\n * 等上一次请求结果\n * 1. 如果上一次请求成功,直接使用上一次的请求结果\n * 2. 如果上一次请求失败,重启本次请求\n */\nfunction handleCachingStart(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const caching = cacheStartFlag.get(_key);\n if (caching) {\n return new Promise((resolve) => {\n const queue = cachingQueue.get(_key) || [];\n cachingQueue.set(_key, queue.concat(resolve));\n });\n }\n cacheStartFlag.set(_key, true);\n}\n\n// 有请求成功的\nfunction handleCachingQueueSuccess(ctx, config) {\n // 移除首次缓存 flag\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n queue.forEach((resolve) => {\n resolve({\n response: ctx.response\n });\n });\n }\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n}\n\n// 处理请求失败\nfunction handleCachingQueueError(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n const firstResolve = queue.shift();\n firstResolve();\n cachingQueue.set(_key, queue);\n } else {\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n }\n}\n\nexport default async (ctx, next) => {\n const { config } = ctx;\n if (config.cache) {\n const cacheData = getCacheData({ key: ctx.key, cacheType: config.cache.cacheType });\n if (cacheData) {\n ctx.response = {\n data: cacheData\n };\n return;\n }\n const result = await handleCachingStart(ctx, config);\n if (result) {\n Object.keys(result).forEach((key) => {\n ctx[key] = result[key];\n });\n return;\n }\n }\n await next();\n\n if (config.cache) {\n const requestdata = checkHttpRequestHasBody(config.method) ? config.data : config.params;\n if (!ctx.error && ctx.response && canCache(requestdata) && canCache(ctx.response.data)) {\n handleCachingQueueSuccess(ctx, config);\n\n setCacheData({\n key: ctx.key,\n data: ctx.response.data,\n ...config.cache\n });\n } else {\n handleCachingQueueError(ctx, config);\n }\n }\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/cacheControl.js","start":{"line":1,"column":1,"position":0},"end":{"line":209,"column":2,"position":1521},"range":[0,5546],"fragment":"import {\n isObject, isString, isURLSearchParams, checkHttpRequestHasBody\n} from './helpers';\n/**\n * 缓存实现的功能\n * 1. 唯一定位一个请求(url, data | params, method)\n * 其中请求参数根据请求方法使用其中一个就够了\n * 一个请求同时包含 data | params 参数的设计本身不合理\n * 不对这种情况进行兼容\n * 2. 控制缓存内容的大小,localStorage 只有5M\n * 3. 控制缓存时间\n * session(存在内存中)\n * expireTime 存在localStoreage 中\n * 4. 成功的、且响应内容为json的请求进行缓存\n */\n\n/**\n * 配置数据\n * type: 'ram' | 'sessionStorage' | 'localStorage'\n * cacheTime: ''\n */\n\n\n/**\n * 缓存数据结构\n * cache: {\n * url: 'url', // 缓存 url\n * data: data, // 数据\n * expire: '' // 缓存时间\n * }\n */\n\n/**\n * 请求参数可以为如下类型\n * - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams\n * - Browser only: FormData, File, Blob\n * 只缓存参数类型为: string、plain object、URLSearchParams 或者无参数的 请求\n */\n\nconst CACHE_KEY_PREFIX = '__FES_REQUEST_CACHE:';\nconst CACHE_TYPE = {\n ram: 'ram',\n session: 'sessionStorage',\n local: 'localStorage'\n};\n\nconst CACHE_DATA_MAP = new Map();\n\nfunction genInnerKey(key, cacheType = 'ram') {\n if (cacheType !== CACHE_TYPE.ram) {\n return `${CACHE_KEY_PREFIX}${key}`;\n }\n return key;\n}\n\nfunction canCache(data) {\n return !data || isObject(data) || isString(data) || Array.isArray(data) || isURLSearchParams(data);\n}\n\nfunction setCacheData({\n key,\n cacheType = 'ram',\n data,\n cacheTime = 1000 * 60 * 3\n}) {\n const _key = genInnerKey(key, cacheType);\n\n const currentCacheData = {\n cacheType,\n data,\n cacheTime,\n expire: Date.now() + cacheTime\n };\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n try {\n cacheInstance.setItem(_key, JSON.stringify(currentCacheData));\n } catch (e) {\n // setItem 出现异常,清理缓存\n for (const item in cacheInstance) {\n if (item.startsWith(CACHE_KEY_PREFIX) && Object.prototype.hasOwnProperty.call(cacheInstance, item)) {\n cacheInstance.removeItem(item);\n }\n }\n }\n } else {\n CACHE_DATA_MAP.set(_key, currentCacheData);\n }\n}\n\nfunction isExpire({ expire, cacheTime }) {\n if (!cacheTime || expire >= Date.now()) {\n return false;\n }\n return true;\n}\n\nfunction getCacheData({ key, cacheType = 'ram' }) {\n const _key = genInnerKey(key, cacheType);\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n const text = cacheInstance.getItem(_key) || null;\n try {\n const currentCacheData = JSON.parse(text);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n cacheInstance.removeItem(_key);\n return null;\n } catch (e) {\n cacheInstance.removeItem(_key);\n return null;\n }\n } else {\n const currentCacheData = CACHE_DATA_MAP.get(_key);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n CACHE_DATA_MAP.delete(_key);\n return null;\n }\n}\n\n// 存储缓存队列\nconst cacheStartFlag = new Map();\nconst cachingQueue = new Map();\n\n/**\n * 等上一次请求结果\n * 1. 如果上一次请求成功,直接使用上一次的请求结果\n * 2. 如果上一次请求失败,重启本次请求\n */\nfunction handleCachingStart(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const caching = cacheStartFlag.get(_key);\n if (caching) {\n return new Promise((resolve) => {\n const queue = cachingQueue.get(_key) || [];\n cachingQueue.set(_key, queue.concat(resolve));\n });\n }\n cacheStartFlag.set(_key, true);\n}\n\n// 有请求成功的\nfunction handleCachingQueueSuccess(ctx, config) {\n // 移除首次缓存 flag\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n queue.forEach((resolve) => {\n resolve({\n response: ctx.response\n });\n });\n }\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n}\n\n// 处理请求失败\nfunction handleCachingQueueError(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n const firstResolve = queue.shift();\n firstResolve();\n cachingQueue.set(_key, queue);\n } else {\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n }\n}\n\nexport default async (ctx, next) => {\n const { config } = ctx;\n if (config.cache) {\n const cacheData = getCacheData({ key: ctx.key, cacheType: config.cache.cacheType });\n if (cacheData) {\n ctx.response = {\n data: cacheData\n };\n return;\n }\n const result = await handleCachingStart(ctx, config);\n if (result) {\n Object.keys(result).forEach((key) => {\n ctx[key] = result[key];\n });\n return;\n }\n }\n await next();\n\n if (config.cache) {\n const requestdata = checkHttpRequestHasBody(config.method) ? config.data : config.params;\n if (!ctx.error && ctx.response && canCache(requestdata) && canCache(ctx.response.data)) {\n handleCachingQueueSuccess(ctx, config);\n\n setCacheData({\n key: ctx.key,\n data: ctx.response.data,\n ...config.cache\n });\n } else {\n handleCachingQueueError(ctx, config);\n }\n }\n};"}},{"format":"javascript","foundDate":1638413755665,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-monaco-editor/src/runtime/theme/default.js","start":{"line":2,"column":1,"position":2},"end":{"line":111,"column":2,"position":578},"range":[29,3519],"fragment":"export default {\n register(monaco) {\n monaco.editor.defineTheme('defaultTheme', {\n base: 'vs',\n inherit: true,\n rules: [\n {\n foreground: 'c41a16',\n token: 'string'\n },\n {\n foreground: '1c00cf',\n token: 'constant.numeric'\n },\n {\n foreground: 'aa0d91',\n token: 'keyword'\n },\n {\n foreground: '000000',\n token: 'keyword.operator'\n },\n {\n foreground: 'aa0d91',\n token: 'constant.language'\n },\n {\n foreground: '990000',\n token: 'support.class.exception'\n },\n {\n foreground: '000000',\n token: 'entity.name.function'\n },\n {\n fontStyle: 'bold underline',\n token: 'entity.name.type'\n },\n {\n fontStyle: 'italic',\n token: 'variable.parameter'\n },\n {\n foreground: '007400',\n token: 'comment'\n },\n {\n foreground: 'ff0000',\n token: 'invalid'\n },\n {\n background: 'e71a1100',\n token: 'invalid.deprecated.trailing-whitespace'\n },\n {\n foreground: '000000',\n background: 'fafafafc',\n token: 'text source'\n },\n {\n foreground: 'aa0d91',\n token: 'meta.tag'\n },\n {\n foreground: 'aa0d91',\n token: 'declaration.tag'\n },\n {\n foreground: '000000',\n fontStyle: 'bold',\n token: 'support'\n },\n {\n foreground: 'aa0d91',\n token: 'storage'\n },\n {\n fontStyle: 'bold underline',\n token: 'entity.name.section'\n },\n {\n foreground: '000000',\n fontStyle: 'bold',\n token: 'entity.name.function.frame'\n },\n {\n foreground: '333333',\n token: 'meta.tag.preprocessor.xml'\n },\n {\n foreground: '994500',\n fontStyle: 'italic',\n token: 'entity.other.attribute-name'\n },\n {\n foreground: '881280',\n token: 'entity.name.tag'\n }\n ],\n colors: {\n 'editor.foreground': '#000000',\n 'editor.background': '#FFFFFF',\n 'editor.selectionBackground': '#BAD6FD',\n 'editor.lineHighlightBackground': '#0000001A',\n 'editorCursor.foreground': '#000000',\n 'editorWhitespace.foreground': '#B3B3B3F4'\n }\n });\n }\n};"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-monaco-editor/theme/default.js","start":{"line":2,"column":1,"position":2},"end":{"line":111,"column":2,"position":578},"range":[29,3519],"fragment":"export default {\n register(monaco) {\n monaco.editor.defineTheme('defaultTheme', {\n base: 'vs',\n inherit: true,\n rules: [\n {\n foreground: 'c41a16',\n token: 'string'\n },\n {\n foreground: '1c00cf',\n token: 'constant.numeric'\n },\n {\n foreground: 'aa0d91',\n token: 'keyword'\n },\n {\n foreground: '000000',\n token: 'keyword.operator'\n },\n {\n foreground: 'aa0d91',\n token: 'constant.language'\n },\n {\n foreground: '990000',\n token: 'support.class.exception'\n },\n {\n foreground: '000000',\n token: 'entity.name.function'\n },\n {\n fontStyle: 'bold underline',\n token: 'entity.name.type'\n },\n {\n fontStyle: 'italic',\n token: 'variable.parameter'\n },\n {\n foreground: '007400',\n token: 'comment'\n },\n {\n foreground: 'ff0000',\n token: 'invalid'\n },\n {\n background: 'e71a1100',\n token: 'invalid.deprecated.trailing-whitespace'\n },\n {\n foreground: '000000',\n background: 'fafafafc',\n token: 'text source'\n },\n {\n foreground: 'aa0d91',\n token: 'meta.tag'\n },\n {\n foreground: 'aa0d91',\n token: 'declaration.tag'\n },\n {\n foreground: '000000',\n fontStyle: 'bold',\n token: 'support'\n },\n {\n foreground: 'aa0d91',\n token: 'storage'\n },\n {\n fontStyle: 'bold underline',\n token: 'entity.name.section'\n },\n {\n foreground: '000000',\n fontStyle: 'bold',\n token: 'entity.name.function.frame'\n },\n {\n foreground: '333333',\n token: 'meta.tag.preprocessor.xml'\n },\n {\n foreground: '994500',\n fontStyle: 'italic',\n token: 'entity.other.attribute-name'\n },\n {\n foreground: '881280',\n token: 'entity.name.tag'\n }\n ],\n colors: {\n 'editor.foreground': '#000000',\n 'editor.background': '#FFFFFF',\n 'editor.selectionBackground': '#BAD6FD',\n 'editor.lineHighlightBackground': '#0000001A',\n 'editorCursor.foreground': '#000000',\n 'editorWhitespace.foreground': '#B3B3B3F4'\n }\n });\n }\n};"}},{"format":"markup","foundDate":1638413755668,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-locale/src/runtime/views/SelectLang.vue","start":{"line":1,"column":1,"position":0},"end":{"line":74,"column":2,"position":446},"range":[0,2018],"fragment":"\n\n\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-locale/views/SelectLang.vue","start":{"line":1,"column":1,"position":0},"end":{"line":74,"column":2,"position":446},"range":[0,2018],"fragment":"\n\n\n\n"}},{"format":"markup","foundDate":1638413755674,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/MultiTabProvider.vue","start":{"line":17,"column":17,"position":77},"end":{"line":50,"column":10,"position":306},"range":[417,1567],"fragment":"\n \n \n \n \n \n \n \n \n \n\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/MultiTabProvider.vue","start":{"line":121,"column":9,"position":787},"end":{"line":180,"column":2,"position":1090},"range":[4088,5479],"fragment":"};\n const getPageKey = (_route) => {\n const selectedPage = findPage(_route.path);\n if (selectedPage) {\n return selectedPage.key;\n }\n return '';\n };\n const handlerMore = ({ key }) => {\n switch (key) {\n case 'closeOtherPage':\n closeOtherPage();\n break;\n case 'reloadPage':\n reloadPage();\n break;\n default:\n }\n };\n return {\n route,\n pageList,\n getPageKey,\n reloadPage,\n switchPage,\n handlerMore,\n onEdit\n };\n }\n};\n\n"}},{"format":"markup","foundDate":1638413755680,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/MenuIcon.vue","start":{"line":1,"column":1,"position":0},"end":{"line":61,"column":2,"position":347},"range":[0,1657],"fragment":"\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/MenuIcon.vue","start":{"line":1,"column":1,"position":0},"end":{"line":61,"column":2,"position":347},"range":[0,1657],"fragment":"\n"}},{"format":"markup","foundDate":1638413755682,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/Menu.vue","start":{"line":1,"column":1,"position":0},"end":{"line":106,"column":2,"position":667},"range":[0,3634],"fragment":"\n \n \n\n\n\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/Menu.vue","start":{"line":1,"column":1,"position":0},"end":{"line":106,"column":2,"position":667},"range":[0,3634],"fragment":"\n \n \n\n\n\n\n"}},{"format":"markup","foundDate":1638413755695,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue","start":{"line":1,"column":1,"position":0},"end":{"line":378,"column":2,"position":2314},"range":[0,11515],"fragment":"\n\n\n\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/BaseLayout.vue","start":{"line":1,"column":1,"position":0},"end":{"line":378,"column":2,"position":2314},"range":[0,11515],"fragment":"\n\n\n\n\n"}},{"format":"markup","foundDate":1638413755701,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/404.vue","start":{"line":1,"column":1,"position":0},"end":{"line":35,"column":2,"position":202},"range":[0,794],"fragment":"\n\n{\n \"layout\": false\n}\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/404.vue","start":{"line":1,"column":1,"position":0},"end":{"line":35,"column":2,"position":202},"range":[0,794],"fragment":"\n\n{\n \"layout\": false\n}\n\n"}},{"format":"markup","foundDate":1638413755702,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/403.vue","start":{"line":1,"column":1,"position":0},"end":{"line":35,"column":2,"position":202},"range":[0,795],"fragment":"\n\n{\n \"layout\": false\n}\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/403.vue","start":{"line":1,"column":1,"position":0},"end":{"line":35,"column":2,"position":202},"range":[0,794],"fragment":"\n\n{\n \"layout\": false\n}\n\n"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-icon/Icon/Icon.vue","start":{"line":1,"column":1,"position":0},"end":{"line":41,"column":2,"position":278},"range":[0,1225],"fragment":""}},{"format":"json","foundDate":1638413755740,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/h5/tsconfig.json","start":{"line":1,"column":1,"position":0},"end":{"line":37,"column":2,"position":233},"range":[0,893],"fragment":"{\n \"compilerOptions\": {\n \"outDir\": \"build/dist\",\n \"module\": \"esnext\",\n \"target\": \"esnext\",\n \"lib\": [\"esnext\", \"dom\"],\n \"sourceMap\": true,\n \"baseUrl\": \".\",\n \"jsx\": \"preserve\",\n \"allowSyntheticDefaultImports\": true,\n \"moduleResolution\": \"node\",\n \"forceConsistentCasingInFileNames\": true,\n \"noImplicitReturns\": true,\n \"suppressImplicitAnyIndexErrors\": true,\n \"noUnusedLocals\": true,\n \"allowJs\": true,\n \"skipLibCheck\": true,\n \"experimentalDecorators\": true,\n \"strict\": true,\n \"paths\": {\n \"@/*\": [\"./src/*\"],\n \"@@/*\": [\"./src/.fes/*\"]\n }\n },\n \"include\": [\n \"src/**/*\",\n \"tests/**/*\",\n \"test/**/*\",\n \"__test__/**/*\",\n \"typings/**/*\",\n \"config/**/*\",\n \".eslintrc.js\",\n \".stylelintrc.js\",\n \".prettierrc.js\"\n ],\n \"exclude\": [\"node_modules\", \"build\", \"dist\", \"scripts\", \"src/.fes/*\", \"webpack\", \"jest\"]\n}"},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/tsconfig.json","start":{"line":1,"column":1,"position":0},"end":{"line":37,"column":2,"position":233},"range":[0,893],"fragment":"{\n \"compilerOptions\": {\n \"outDir\": \"build/dist\",\n \"module\": \"esnext\",\n \"target\": \"esnext\",\n \"lib\": [\"esnext\", \"dom\"],\n \"sourceMap\": true,\n \"baseUrl\": \".\",\n \"jsx\": \"preserve\",\n \"allowSyntheticDefaultImports\": true,\n \"moduleResolution\": \"node\",\n \"forceConsistentCasingInFileNames\": true,\n \"noImplicitReturns\": true,\n \"suppressImplicitAnyIndexErrors\": true,\n \"noUnusedLocals\": true,\n \"allowJs\": true,\n \"skipLibCheck\": true,\n \"experimentalDecorators\": true,\n \"strict\": true,\n \"paths\": {\n \"@/*\": [\"./src/*\"],\n \"@@/*\": [\"./src/.fes/*\"]\n }\n },\n \"include\": [\n \"src/**/*\",\n \"tests/**/*\",\n \"test/**/*\",\n \"__test__/**/*\",\n \"typings/**/*\",\n \"config/**/*\",\n \".eslintrc.js\",\n \".stylelintrc.js\",\n \".prettierrc.js\"\n ],\n \"exclude\": [\"node_modules\", \"build\", \"dist\", \"scripts\", \"src/.fes/*\", \"webpack\", \"jest\"]\n}"}},{"format":"json","foundDate":1638413755741,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/h5/package.json","start":{"line":8,"column":3,"position":43},"end":{"line":31,"column":27,"position":148},"range":[152,567],"fragment":"},\n \"keywords\": [\n \"管理端\",\n \"fes\",\n \"fast\",\n \"easy\",\n \"strong\"\n ],\n \"files\": [\n \".eslintrc.js\",\n \".gitignore\",\n \".fes.js\",\n \".fes.prod.js\",\n \"mock.js\",\n \"package.json\",\n \"README.md\",\n \"tsconfig.json\",\n \"/src\",\n \"/config\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/WeBankFinTech/fes.js.git\",\n \"directory\": \"packages/fes-template-h5\""},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/package.json","start":{"line":11,"column":3,"position":64},"end":{"line":34,"column":24,"position":169},"range":[255,667],"fragment":"},\n \"keywords\": [\n \"管理端\",\n \"fes\",\n \"fast\",\n \"easy\",\n \"strong\"\n ],\n \"files\": [\n \".eslintrc.js\",\n \".gitignore\",\n \".fes.js\",\n \".fes.prod.js\",\n \"mock.js\",\n \"package.json\",\n \"README.md\",\n \"tsconfig.json\",\n \"/src\",\n \"/config\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/WeBankFinTech/fes.js.git\",\n \"directory\": \"packages/fes-template\""}},{"format":"javascript","foundDate":1638413755768,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/docs/zh/reference/plugin/plugins/qiankun.md","start":{"line":149,"column":2,"position":405},"end":{"line":229,"column":6,"position":642},"range":[3260,4520],"fragment":"l` 参数,用于指定加载子应用什么路由页面。\n\n ```vue\n\n\n```\n\n## 子应用配置\n\n### 第一步:插件注册\n```js\nexport default {\n qiankun: {\n micro: {},\n }\n};\n```\n\n### 第二步:配置运行时生命周期钩子(可选)\n插件会自动为你创建好 `qiankun` 子应用需要的生命周期钩子,但是如果你想在生命周期期间加一些自定义逻辑,可以在子应用的 `src/app.js` 里导出 `qiankun` 对象,并实现每一个生命周期钩子,其中钩子函数的入参 `props` 由主应用自动注入。\n```js\nexport const qiankun = {\n // 应用加载之前\n async bootstrap(props) {\n console.log('app1 bootstrap', props);\n },\n // 应用 render 之前触发\n async mount(props) {\n console.log('app1 mount', props);\n },\n // 当 props 更新时触发\n async update(props){\n console.log('app1 update', props);\n },\n // 应用卸载之后触发\n async unmount(props) {\n console.log('app1 unmount', props);\n },\n};\n\n```\n\n## 父子应用通讯\n\n有两种方式实现\n\n### 配合 [useModel](./model.md) 使用\n\n确保已经安装了 `@fesjs/plugin-model`:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-model\": \"^2.0.0\"\n },\n}\n```\n\n#### 主应用传递 props\n\n- 如果使用 `MicroApp` 组件模式消费子应用,直接通过 props 传递即可:\n```vue\n\n\n```\n\n#### props\n| 属性 | 说明 | 类型 | 默认值 |\n| ------------- | ------------- | ------------- | ------------- |\n| theme | 编辑器的主题,使用其他主题需要先使用`monaco.editor.defineTheme`定义主题 | string | `defaultTheme` |\n| language | 编辑器的语言 | string | - |\n| height | 编辑器的高度 | string | `100%` |\n| width | 编辑器的宽度 | string | `100%` |\n| modelValue(v-model) | 编辑器的代码 | string | - |\n| readOnly | 是否只读 | boolean | `false` |\n| options | 编辑器的配置对象 | object | `{}` |\n| check | 是否检查代码,如果检查不通过则不更新数据,目前只支持`json` | boolean | `false` |\n\n#### events\n\n| 事件名称 | 说明 | 回调参数 |\n| "},"duplicationB":{"sourceId":"/Users/qlin/code/fes.js/docs/zh/reference/plugin/plugins/editor.md","start":{"line":5,"column":1,"position":4},"end":{"line":120,"column":2,"position":578},"range":[4,3290],"fragment":"esjs/plugin-monaco-editor\n\n\n## 介绍\n我们会遇到需要编辑代码的场景,比如编辑`json`、`javascript`、`python`等等,[Monaco Editor](https://github.com/Microsoft/monaco-editor) 是\b一个好用而且强大的的代码编辑器库,引入`Monaco Editor`有一定的成本,插件实现了胶水代码,提供轻松引入的能力。目前内置的 `Monaco Editor` 版本是 `1.9.1`。\n\n## 启用方式\n在 `package.json` 中引入依赖:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-monaco-editor\": \"^2.0.0\"\n },\n}\n```\n\n## 配置\n\n### 编译时配置\n在执行 `fes dev` 或者 `fes build` 时,通过此配置生成运行时的代码,在配置文件`.fes.js` 中配置:\n```js\nexport default {\n monacoEditor: {\n languages: ['javascript', 'typescript', 'html', 'json']\n }\n}\n```\n我们通过 `monaco-editor-webpack-plugin` 集成 `Monaco Editor` 的 `ESM`版本,所以编辑时其实就是 `monaco-editor-webpack-plugin` 的配置,具体配置项参考[文档](https://github.com/Microsoft/monaco-editor-webpack-plugin)。\n\n\n#### filename\n- **类型**:自定义worker脚本名称\n \n- **默认值**:`'[name].worker.js'`\n\n#### publicPath\n- **类型**:自定义worker脚本的路径\n \n- **默认值**:`''`\n\n#### languages\n- **类型**:需要支持的语言类型\n \n- **默认值**:`['abap', 'apex', 'azcli', 'bat', 'bicep', 'cameligo', 'clojure', 'coffee', 'cpp', 'csharp', 'csp', 'css', 'dart', 'dockerfile', 'ecl', 'elixir', 'fsharp', 'go', 'graphql', 'handlebars', 'hcl', 'html', 'ini', 'java', 'javascript', 'json', 'julia', 'kotlin', 'less', 'lexon', 'liquid', 'lua', 'm3', 'markdown', 'mips', 'msdax', 'mysql', 'objective-c', 'pascal', 'pascaligo', 'perl', 'pgsql', 'php', 'postiats', 'powerquery', 'powershell', 'pug', 'python', 'qsharp', 'r', 'razor', 'redis', 'redshift', 'restructuredtext', 'ruby', 'rust', 'sb', 'scala', 'scheme', 'scss', 'shell', 'solidity', 'sophia', 'sparql', 'sql', 'st', 'swift', 'systemverilog', 'tcl', 'twig', 'typescript', 'vb', 'xml', 'yaml']`\n\n- **详情**:默认是全部,但是编译后包体积会非常大,建议用到什么语言则配置什么语言。特别某些语言依赖其他语言,例如`javascript`依赖`typescript`,需要使用`javascript`时需要配置为:\n```js\nexport default {\n monacoEditor: {\n languages: ['javascript', 'typescript']\n }\n}\n```\n\n## API\n\n### monaco\n编辑器的全局对象,提供扩展语言,自定义主题等等API,具体用法请查看[monaco](https://microsoft.github.io/monaco-editor/)官方文档。\n```js\nimport { monaco } from '@fesjs/fes';\n\nmonaco.editor.defineTheme('myCoolTheme', {\n\tbase: 'vs',\n\tinherit: false,\n\trules: [\n\t\t{ token: 'custom-info', foreground: '808080' },\n\t\t{ token: 'custom-error', foreground: 'ff0000', fontStyle: 'bold' },\n\t\t{ token: 'custom-notice', foreground: 'FFA500' },\n\t\t{ token: 'custom-date', foreground: '008800' },\n\t]\n});\n\n```\n\n### 组件 MonacoEditor\n\n```vue\n\n\n```\n\n#### props\n| 属性 | 说明 | 类型 | 默认值 |\n| ------------- | ------------- | ------------- | ------------- |\n| theme | 编辑器的主题,使用其他主题需要先使用`monaco.editor.defineTheme`定义主题 | string | `defaultTheme` |\n| language | 编辑器的语言 | string | - |\n| height | 编辑器的高度 | string | `100%` |\n| width | 编辑器的宽度 | string | `100%` |\n| modelValue(v-model) | 编辑器的代码 | string | - |\n| readOnly | 是否只读 | boolean | `false` |\n| options | 编辑器的配置对象 | object | `{}` |\n| check | 是否检查代码,如果检查不通过则不更新数据,目前只支持`json` | boolean | `false` |\n\n#### events\n\n| 事件名称 | 说明 | 回调参数 |\n| "}},{"format":"javascript","foundDate":1638413756459,"duplicationA":{"sourceId":"/Users/qlin/code/fes.js/docs/reference/plugin/plugins/access.md","start":{"line":18,"column":2,"position":76},"end":{"line":280,"column":1,"position":1042},"range":[382,4871],"fragment":"cess2 \n\n\n```\n\n\n### 匹配规则\n\n#### 全等匹配\n资源的匹配规则默认是使用全等匹配,比如页面 `pages/a.vue` 对应路由 `path` 是 `/a`,则 `/a` 就是页面的资源ID。如果我们设置:\n```js\naccess.setAccess(['/a'])\n```\n由于权限列表中包含`/a`,则表示拥有此页面权限。\n\n#### 模糊匹配\n页面`@id.vue`会映射为动态路由`/:id`,想匹配此页面有两种办法:\n- **access.setAccess(['/:id'])**\n- **access.setAccess(['/*'])**\n\n第二种是模糊匹配,`*`表示任意路径。比如角色`admin`需要全部权限,则可以:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"*\"]\n }\n }\n}\n```\n\n\n### 角色\n通常我们会用角色来控制权限,相应的Fes.js 用角色定义一组资源。当访问 Fes.js 应用时,使用插件提供的 API 设置用户的角色,角色对应的资源才可见,非角色对应的资源不可见。\n\n\n当然有时候业务比较复杂,角色对应的权限是动态的。不要怕!插件提供粒度更细的 API 来设置当前用户能访问的资源。\n\n\n## 启用方式\n在 `package.json` 中引入依赖:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-access\": \"^2.0.0\"\n },\n}\n```\n\n## 配置\n\n### 编译时配置\n在执行 `fes dev` 或者 `fes build` 时,通过此配置生成运行时的代码,在配置文件`.fes.js` 中配置:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"/\", \"/onepiece\", '/store']\n }\n }\n}\n```\n\n#### roles\n- **类型**:对象\n \n- **默认值**:`{}`\n\n- **详情**: \n \n 角色预定义列表。`key` 是角色 Id ,`value`是角色 Id 对应的资源列表。\n\n\n### 运行时配置\n在 `app.js` 中配置\n\n#### unAccessHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n unAccessHandler({ to, next }) {\n const accesssIds = accessApi.getAccess();\n if (to.path === '/404') {\n accessApi.setAccess(accesssIds.concat(['/404']));\n return next('/404');\n }\n if (!accesssIds.includes('/403')) {\n accessApi.setAccess(accesssIds.concat(['/403']));\n }\n next('/403');\n }\n};\n\n```\n\n#### noFoundHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n noFoundHandler({ next }) {\n const accesssIds = accessApi.getAccess();\n if (!accesssIds.includes('/404')) {\n accessApi.setAccess(accesssIds.concat(['/404']));\n }\n next('/404');\n }\n};\n\n```\n\n## API\n\n### access\n插件 API 通过 `@fesjs/fes` 导出:\n```js\nimport { access } from '@fesjs/fes'\n```\n\n#### access.hasAccess\n- **类型**:函数\n \n- **详情**: 判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:Boolean\n\n#### access.isDataReady\n- **类型**:函数\n \n- **详情**:可以用异步数据来设置权限,`isDataReady` 用来判断异步数据是否已经加载完毕。\n- **参数**:null\n- **返回值**:Boolean\n```js\nimport { access } from '@fesjs/fes';\nconsole.log(access.isDataReady())\n```\n\n#### access.setRole\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - roleId,角色Id,有两种类型:\n - String,对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应对应着 `roles` 配置对象中的 `key`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setRole(['admin'])\n```\n\n#### access.setAccess\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - accessIds,资源Id数组,有两种类型:\n - Array,数组项对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应该是`Array`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setAccess(['/a', '/b', '/c'])\n```\n\n#### access.getAccess\n- **类型**:函数\n \n- **详情**:返回当前可见的资源列表。\n- **参数**:null\n\n```js\nimport { access } from '@fesjs/fes';\naccess.getAccess();\n```\n\n### useAccess\n- **类型**:[composition]((https://v3.cn.vuejs.org/guide/composition-api-introduction.html)) 函数\n \n- **详情**:判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:`ref`\n \n```vue\n\n\n```\n### v-access\n在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时显示DOM,当没有权限时隐藏此DOM。\n```vue\n\n\n```\n\n\n### 匹配规则\n\n#### 全等匹配\n资源的匹配规则默认是使用全等匹配,比如页面 `pages/a.vue` 对应路由 `path` 是 `/a`,则 `/a` 就是页面的资源ID。如果我们设置:\n```js\naccess.setAccess(['/a'])\n```\n由于权限列表中包含`/a`,则表示拥有此页面权限。\n\n#### 模糊匹配\n页面`@id.vue`会映射为动态路由`/:id`,想匹配此页面有两种办法:\n- **access.setAccess(['/:id'])**\n- **access.setAccess(['/*'])**\n\n第二种是模糊匹配,`*`表示任意路径。比如角色`admin`需要全部权限,则可以:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"*\"]\n }\n }\n}\n```\n\n\n### 角色\n通常我们会用角色来控制权限,相应的Fes.js 用角色定义一组资源。当访问 Fes.js 应用时,使用插件提供的 API 设置用户的角色,角色对应的资源才可见,非角色对应的资源不可见。\n\n\n当然有时候业务比较复杂,角色对应的权限是动态的。不要怕!插件提供粒度更细的 API 来设置当前用户能访问的资源。\n\n\n## 启用方式\n在 `package.json` 中引入依赖:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-access\": \"^2.0.0\"\n },\n}\n```\n\n## 配置\n\n### 编译时配置\n在执行 `fes dev` 或者 `fes build` 时,通过此配置生成运行时的代码,在配置文件`.fes.js` 中配置:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"/\", \"/onepiece\", '/store']\n }\n }\n}\n```\n\n#### roles\n- **类型**:对象\n \n- **默认值**:`{}`\n\n- **详情**: \n \n 角色预定义列表。`key` 是角色 Id ,`value`是角色 Id 对应的资源列表。\n\n\n### 运行时配置\n在 `app.js` 中配置\n\n#### unAccessHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n unAccessHandler({ to, next }) {\n const accesssIds = accessApi.getAccess();\n if (to.path === '/404') {\n accessApi.setAccess(accesssIds.concat(['/404']));\n return next('/404');\n }\n if (!accesssIds.includes('/403')) {\n accessApi.setAccess(accesssIds.concat(['/403']));\n }\n next('/403');\n }\n};\n\n```\n\n#### noFoundHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n noFoundHandler({ next }) {\n const accesssIds = accessApi.getAccess();\n if (!accesssIds.includes('/404')) {\n accessApi.setAccess(accesssIds.concat(['/404']));\n }\n next('/404');\n }\n};\n\n```\n\n## API\n\n### access\n插件 API 通过 `@fesjs/fes` 导出:\n```js\nimport { access } from '@fesjs/fes'\n```\n\n#### access.hasAccess\n- **类型**:函数\n \n- **详情**: 判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:Boolean\n\n#### access.isDataReady\n- **类型**:函数\n \n- **详情**:可以用异步数据来设置权限,`isDataReady` 用来判断异步数据是否已经加载完毕。\n- **参数**:null\n- **返回值**:Boolean\n```js\nimport { access } from '@fesjs/fes';\nconsole.log(access.isDataReady())\n```\n\n#### access.setRole\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - roleId,角色Id,有两种类型:\n - String,对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应对应着 `roles` 配置对象中的 `key`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setRole(['admin'])\n```\n\n#### access.setAccess\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - accessIds,资源Id数组,有两种类型:\n - Array,数组项对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应该是`Array`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setAccess(['/a', '/b', '/c'])\n```\n\n#### access.getAccess\n- **类型**:函数\n \n- **详情**:返回当前可见的资源列表。\n- **参数**:null\n\n```js\nimport { access } from '@fesjs/fes';\naccess.getAccess();\n```\n\n### useAccess\n- **类型**:[composition]((https://v3.cn.vuejs.org/guide/composition-api-introduction.html)) 函数\n \n- **详情**:判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:`ref`\n \n```vue\n\n\n```\n### v-access\n在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时显示DOM,当没有权限时隐藏此DOM。\n```vue\n\n\n```\n\n\n### 匹配规则\n\n#### 全等匹配\n资源的匹配规则默认是使用全等匹配,比如页面 `pages/a.vue` 对应路由 `path` 是 `/a`,则 `/a` 就是页面的资源ID。如果我们设置:\n```js\naccess.setAccess(['/a'])\n```\n由于权限列表中包含`/a`,则表示拥有此页面权限。\n\n#### 模糊匹配\n页面`@id.vue`会映射为动态路由`/:id`,想匹配此页面有两种办法:\n- **access.setAccess(['/:id'])**\n- **access.setAccess(['/*'])**\n\n第二种是模糊匹配,`*`表示任意路径。比如角色`admin`需要全部权限,则可以:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"*\"]\n }\n }\n}\n```\n\n\n### 角色\n通常我们会用角色来控制权限,相应的Fes.js 用角色定义一组资源。当访问 Fes.js 应用时,使用插件提供的 API 设置用户的角色,角色对应的资源才可见,非角色对应的资源不可见。\n\n\n当然有时候业务比较复杂,角色对应的权限是动态的。不要怕!插件提供粒度更细的 API 来设置当前用户能访问的资源。\n\n\n## 启用方式\n在 `package.json` 中引入依赖:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-access\": \"^2.0.0\"\n },\n}\n```\n\n## 配置\n\n### 编译时配置\n在执行 `fes dev` 或者 `fes build` 时,通过此配置生成运行时的代码,在配置文件`.fes.js` 中配置:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"/\", \"/onepiece\", '/store']\n }\n }\n}\n```\n\n#### roles\n- **类型**:对象\n \n- **默认值**:`{}`\n\n- **详情**: \n \n 角色预定义列表。`key` 是角色 Id ,`value`是角色 Id 对应的资源列表。\n\n\n### 运行时配置\n在 `app.js` 中配置\n\n#### unAccessHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n unAccessHandler({ to, next }) {\n const accesssIds = accessApi.getAccess();\n if (to.path === '/404') {\n accessApi.setAccess(accesssIds.concat(['/404']));\n return next('/404');\n }\n if (!accesssIds.includes('/403')) {\n accessApi.setAccess(accesssIds.concat(['/403']));\n }\n next('/403');\n }\n};\n\n```\n\n#### noFoundHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n noFoundHandler({ next }) {\n const accesssIds = accessApi.getAccess();\n if (!accesssIds.includes('/404')) {\n accessApi.setAccess(accesssIds.concat(['/404']));\n }\n next('/404');\n }\n};\n\n```\n\n## API\n\n### access\n插件 API 通过 `@fesjs/fes` 导出:\n```js\nimport { access } from '@fesjs/fes'\n```\n\n#### access.hasAccess\n- **类型**:函数\n \n- **详情**: 判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:Boolean\n\n#### access.isDataReady\n- **类型**:函数\n \n- **详情**:可以用异步数据来设置权限,`isDataReady` 用来判断异步数据是否已经加载完毕。\n- **参数**:null\n- **返回值**:Boolean\n```js\nimport { access } from '@fesjs/fes';\nconsole.log(access.isDataReady())\n```\n\n#### access.setRole\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - roleId,角色Id,有两种类型:\n - String,对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应对应着 `roles` 配置对象中的 `key`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setRole(['admin'])\n```\n\n#### access.setAccess\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - accessIds,资源Id数组,有两种类型:\n - Array,数组项对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应该是`Array`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setAccess(['/a', '/b', '/c'])\n```\n\n#### access.getAccess\n- **类型**:函数\n \n- **详情**:返回当前可见的资源列表。\n- **参数**:null\n\n```js\nimport { access } from '@fesjs/fes';\naccess.getAccess();\n```\n\n### useAccess\n- **类型**:[composition]((https://v3.cn.vuejs.org/guide/composition-api-introduction.html)) 函数\n \n- **详情**:判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:`ref`\n \n```vue\n\n\n```\n### v-access\n在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时显示DOM,当没有权限时隐藏此DOM。\n```vue\n\n\n```\n\n\n### 匹配规则\n\n#### 全等匹配\n资源的匹配规则默认是使用全等匹配,比如页面 `pages/a.vue` 对应路由 `path` 是 `/a`,则 `/a` 就是页面的资源ID。如果我们设置:\n```js\naccess.setAccess(['/a'])\n```\n由于权限列表中包含`/a`,则表示拥有此页面权限。\n\n#### 模糊匹配\n页面`@id.vue`会映射为动态路由`/:id`,想匹配此页面有两种办法:\n- **access.setAccess(['/:id'])**\n- **access.setAccess(['/*'])**\n\n第二种是模糊匹配,`*`表示任意路径。比如角色`admin`需要全部权限,则可以:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"*\"]\n }\n }\n}\n```\n\n\n### 角色\n通常我们会用角色来控制权限,相应的Fes.js 用角色定义一组资源。当访问 Fes.js 应用时,使用插件提供的 API 设置用户的角色,角色对应的资源才可见,非角色对应的资源不可见。\n\n\n当然有时候业务比较复杂,角色对应的权限是动态的。不要怕!插件提供粒度更细的 API 来设置当前用户能访问的资源。\n\n\n## 启用方式\n在 `package.json` 中引入依赖:\n```json\n{\n \"dependencies\": {\n \"@fesjs/fes\": \"^2.0.0\",\n \"@fesjs/plugin-access\": \"^2.0.0\"\n },\n}\n```\n\n## 配置\n\n### 编译时配置\n在执行 `fes dev` 或者 `fes build` 时,通过此配置生成运行时的代码,在配置文件`.fes.js` 中配置:\n```js\nexport default {\n access: {\n roles: {\n admin: [\"/\", \"/onepiece\", '/store']\n }\n }\n}\n```\n\n#### roles\n- **类型**:对象\n \n- **默认值**:`{}`\n\n- **详情**: \n \n 角色预定义列表。`key` 是角色 Id ,`value`是角色 Id 对应的资源列表。\n\n\n### 运行时配置\n在 `app.js` 中配置\n\n#### unAccessHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n unAccessHandler({ to, next }) {\n const accesssIds = accessApi.getAccess();\n if (to.path === '/404') {\n accessApi.setAccess(accesssIds.concat(['/404']));\n return next('/404');\n }\n if (!accesssIds.includes('/403')) {\n accessApi.setAccess(accesssIds.concat(['/403']));\n }\n next('/403');\n }\n};\n\n```\n\n#### noFoundHandler\n- **类型**:`Function`\n \n- **默认值**:`null`\n\n- **详情**: \n \n 当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。\n- **参数**\n - router:createRouter 创建的路由实例\n - to: 准备进入的路由\n - from:离开的路由\n - next: [next函数](https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%8F%AF%E9%80%89%E7%9A%84%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0-next)\n\n比如:\n```js\nexport const access = {\n noFoundHandler({ next }) {\n const accesssIds = accessApi.getAccess();\n if (!accesssIds.includes('/404')) {\n accessApi.setAccess(accesssIds.concat(['/404']));\n }\n next('/404');\n }\n};\n\n```\n\n## API\n\n### access\n插件 API 通过 `@fesjs/fes` 导出:\n```js\nimport { access } from '@fesjs/fes'\n```\n\n#### access.hasAccess\n- **类型**:函数\n \n- **详情**: 判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:Boolean\n\n#### access.isDataReady\n- **类型**:函数\n \n- **详情**:可以用异步数据来设置权限,`isDataReady` 用来判断异步数据是否已经加载完毕。\n- **参数**:null\n- **返回值**:Boolean\n```js\nimport { access } from '@fesjs/fes';\nconsole.log(access.isDataReady())\n```\n\n#### access.setRole\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - roleId,角色Id,有两种类型:\n - String,对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应对应着 `roles` 配置对象中的 `key`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setRole(['admin'])\n```\n\n#### access.setAccess\n- **类型**:函数\n \n- **详情**:设置当前的角色。\n- **参数**:\n - accessIds,资源Id数组,有两种类型:\n - Array,数组项对应着 `roles` 配置对象中的 `key`。\n - Promise,Promise resolve 的结果应该是`Array`。\n```js\nimport { access } from '@fesjs/fes';\naccess.setAccess(['/a', '/b', '/c'])\n```\n\n#### access.getAccess\n- **类型**:函数\n \n- **详情**:返回当前可见的资源列表。\n- **参数**:null\n\n```js\nimport { access } from '@fesjs/fes';\naccess.getAccess();\n```\n\n### useAccess\n- **类型**:[composition]((https://v3.cn.vuejs.org/guide/composition-api-introduction.html)) 函数\n \n- **详情**:判断某个资源是否可见。\n- **参数**:\n - accessId,资源Id\n- **返回值**:`ref`\n \n```vue\n\n\n```\n### v-access\n在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时显示DOM,当没有权限时隐藏此DOM。\n```vue\n\n\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/h5/src/pages/onepiece.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"title\": \"onepiece\",\n \"layout\": \"true\"\n}\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/.eslintrc.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/.fes.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/.fes.prod.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/src/app.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":3,"endColumn":1,"fix":{"range":[0,2],"text":""}},{"ruleId":"no-unused-vars","severity":2,"message":"'PageLoading' is defined but never used.","line":4,"column":8,"nodeType":"Identifier","messageId":"unusedVar","endLine":4,"endColumn":19},{"ruleId":"import/extensions","severity":2,"message":"Missing file extension for \"@/components/PageLoading\"","line":4,"column":25,"nodeType":"Literal","endLine":4,"endColumn":51},{"ruleId":"no-unused-vars","severity":2,"message":"'UserCenter' is defined but never used.","line":5,"column":8,"nodeType":"Identifier","messageId":"unusedVar","endLine":5,"endColumn":18},{"ruleId":"import/extensions","severity":2,"message":"Missing file extension for \"@/components/UserCenter\"","line":5,"column":24,"nodeType":"Literal","endLine":5,"endColumn":49}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\n\nimport { access } from '@fesjs/fes';\nimport PageLoading from '@/components/PageLoading';\nimport UserCenter from '@/components/UserCenter';\n\nexport const beforeRender = {\n loading: ,\n action() {\n const { setRole } = access;\n return new Promise((resolve) => {\n setTimeout(() => {\n setRole('admin');\n // 初始化应用的全局状态,可以通过 useModel('@@initialState') 获取,具体用法看@/components/UserCenter 文件\n resolve({\n userName: 'harrywan'\n });\n }, 1000);\n });\n }\n};\n\nexport const layout = {\n customHeader: \n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/src/common/service.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/src/common/utils.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/src/components/PageLoading.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/src/components/UserCenter.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/src/models/user.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/create-fes-app/templates/app/pc/src/pages/index.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n\n\n{\n \"name\": \"index\",\n \"title\": \"首页\"\n}\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/bin/fes.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['index.js']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/src/cli.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/src/forkedDev.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":43,"column":1,"nodeType":null,"messageId":"delete","endLine":44,"endColumn":1,"fix":{"range":[958,959],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/blob/master/packages/umi/src/forkedDev.ts\n */\n\nimport { chalk, yParser } from '@fesjs/utils';\nimport { Service } from './serviceWithBuiltIn';\nimport getCwd from './utils/getCwd';\nimport getPkg from './utils/getPkg';\nimport fesPkg from '../package.json';\n\nconst args = yParser(process.argv.slice(2));\n\nlet closed = false;\nfunction onSignal(signal, service) {\n if (closed) return;\n closed = true;\n\n // 退出时触发插件中的onExit事件\n service.applyPlugins({\n key: 'onExit',\n type: service.ApplyPluginsType.event,\n args: {\n signal\n }\n });\n process.exit(0);\n}\n\n(async () => {\n try {\n process.env.NODE_ENV = 'development';\n const service = new Service({\n cwd: getCwd(),\n pkg: getPkg(process.cwd()),\n fesPkg\n });\n await service.run({\n name: 'dev',\n args\n });\n\n\n // kill(2) Ctrl-C\n process.once('SIGINT', () => onSignal('SIGINT', service));\n // kill(3) Ctrl-\\\n process.once('SIGQUIT', () => onSignal('SIGQUIT', service));\n // kill(15) default\n process.once('SIGTERM', () => onSignal('SIGTERM', service));\n } catch (e) {\n console.error(chalk.red(e.message));\n console.error(e.stack);\n process.exit(1);\n }\n})();\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport * from '@@/core/coreExports';\n// @ts-ignore\nexport * from '@@/core/pluginExports';\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/src/serviceWithBuiltIn.js","messages":[{"ruleId":"import/extensions","severity":2,"message":"Missing file extension \"json\" for \"../package\"","line":11,"column":43,"nodeType":"Literal","endLine":11,"endColumn":55}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/blob/master/packages/umi/src/ServiceWithBuiltIn.ts\n */\n\nimport { dirname } from 'path';\nimport { Service as CoreService } from '@fesjs/compiler';\n\nclass Service extends CoreService {\n constructor(opts) {\n process.env.FES_VERSION = require('../package').version;\n process.env.FES_DIR = dirname(require.resolve('../package'));\n\n super({\n ...opts,\n presets: [\n require.resolve('@fesjs/preset-built-in'),\n ...(opts.presets || [])\n ],\n plugins: [...(opts.plugins || [])]\n });\n }\n}\n\nexport { Service };\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/src/utils/fork.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····fork⏎` with `·fork·`","line":1,"column":9,"nodeType":null,"messageId":"replace","endLine":3,"endColumn":1,"fix":{"range":[8,18],"text":" fork "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····scriptPath⏎` with `·scriptPath·`","line":8,"column":32,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":1,"fix":{"range":[115,131],"text":" scriptPath "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `argv·=>·argv.includes('--inspect-brk'),` with `(argv)·=>⏎········argv.includes('--inspect-brk')⏎····`","line":12,"column":49,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":88,"fix":{"range":[232,271],"text":"(argv) =>\n argv.includes('--inspect-brk')\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `,`","line":31,"column":15,"nodeType":null,"messageId":"delete","endLine":31,"endColumn":16,"fix":{"range":[917,918],"text":""}}],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"import {\n fork\n} from 'child_process';\n\nconst usedPorts = [];\nlet CURRENT_PORT;\n\nexport default function start({\n scriptPath\n}) {\n const execArgv = process.execArgv.slice(0);\n const inspectArgvIndex = execArgv.findIndex(argv => argv.includes('--inspect-brk'),);\n\n if (inspectArgvIndex > -1) {\n const inspectArgv = execArgv[inspectArgvIndex];\n execArgv.splice(\n inspectArgvIndex,\n 1,\n inspectArgv.replace(/--inspect-brk=(.*)/, (match, s1) => {\n let port;\n try {\n port = parseInt(s1, 10) + 1;\n } catch (e) {\n port = 9230; // node default inspect port plus 1.\n }\n if (usedPorts.includes(port)) {\n port += 1;\n }\n usedPorts.push(port);\n return `--inspect-brk=${port}`;\n }),\n );\n }\n\n // set port to env when current port has value\n if (CURRENT_PORT) {\n // @ts-ignore\n process.env.PORT = CURRENT_PORT;\n }\n\n const child = fork(scriptPath, process.argv.slice(2), {\n execArgv\n });\n\n child.on('message', (data) => {\n const type = (data && data.type) || null;\n if (type === 'RESTART') {\n child.kill();\n start({\n scriptPath\n });\n } else if (type === 'UPDATE_PORT') {\n // set current used port\n CURRENT_PORT = data.port;\n }\n process.send && process.send(data);\n });\n\n return child;\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/src/utils/getCwd.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":6,"column":5,"nodeType":null,"messageId":"insert","endLine":6,"endColumn":5,"fix":{"range":[132,132],"text":" "}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { join, isAbsolute } from 'path';\n\nexport default () => {\n const cwd = process.cwd();\n if (process.env.APP_ROOT) {\n // avoid repeat cwd path\n if (!isAbsolute(process.env.APP_ROOT)) {\n return join(cwd, process.env.APP_ROOT);\n }\n return process.env.APP_ROOT;\n }\n return cwd;\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/src/utils/getPkg.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes/types.d.ts","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\n// @ts-ignore\nexport * from '@@/core/coreExports';\n// @ts-ignore\nexport * from '@@/core/pluginExports';\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/config/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `key` with `(key)`","line":72,"column":13,"nodeType":null,"messageId":"replace","endLine":72,"endColumn":16,"fix":{"range":[1767,1770],"text":"(key)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `f·=>·existsSync(join(this.cwd,·f))` with `(f)·=>⏎············existsSync(join(this.cwd,·f))⏎········`","line":176,"column":44,"nodeType":null,"messageId":"replace","endLine":176,"endColumn":78,"fix":{"range":[5033,5067],"text":"(f) =>\n existsSync(join(this.cwd, f))\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎················configFile,⏎················process.env.FES_ENV⏎············` with `configFile,·process.env.FES_ENV`","line":183,"column":43,"nodeType":null,"messageId":"replace","endLine":186,"endColumn":13,"fix":{"range":[5316,5393],"text":"configFile, process.env.FES_ENV"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `f` with `(f)`","line":198,"column":21,"nodeType":null,"messageId":"replace","endLine":198,"endColumn":22,"fix":{"range":[5843,5844],"text":"(f)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `f` with `(f)`","line":199,"column":18,"nodeType":null,"messageId":"replace","endLine":199,"endColumn":19,"fix":{"range":[5870,5871],"text":"(f)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `f` with `(f)`","line":200,"column":21,"nodeType":null,"messageId":"replace","endLine":200,"endColumn":22,"fix":{"range":[5914,5915],"text":"(f)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `f` with `(f)`","line":224,"column":21,"nodeType":null,"messageId":"replace","endLine":224,"endColumn":22,"fix":{"range":[6738,6739],"text":"(f)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":258,"column":53,"nodeType":null,"messageId":"insert","endLine":258,"endColumn":53,"fix":{"range":[8064,8064],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·||`","line":259,"column":24,"nodeType":null,"messageId":"delete","endLine":259,"endColumn":27,"fix":{"range":[8088,8091],"text":""}}],"errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/tree/master/packages/core\n */\n\nimport { existsSync } from 'fs';\nimport { extname, join } from 'path';\nimport {\n chalk,\n chokidar,\n compatESModuleRequire,\n deepmerge,\n cleanRequireCache,\n lodash,\n parseRequireDeps,\n winPath\n} from '@fesjs/utils';\nimport assert from 'assert';\nimport joi from 'joi';\nimport { ServiceStage } from '../service/enums';\nimport {\n getUserConfigWithKey,\n updateUserConfigWithKey\n} from './utils/configUtils';\nimport isEqual from './utils/isEqual';\nimport mergeDefault from './utils/mergeDefault';\n\nconst CONFIG_FILES = ['.fes.js'];\n\n// TODO:\n// 1. custom config file\nexport default class Config {\n cwd;\n\n service;\n\n config;\n\n localConfig;\n\n configFile;\n\n constructor(opts) {\n this.cwd = opts.cwd || process.cwd();\n this.service = opts.service;\n this.localConfig = opts.localConfig;\n }\n\n async getDefaultConfig() {\n const pluginIds = Object.keys(this.service.plugins);\n\n // collect default config\n const defaultConfig = pluginIds.reduce((memo, pluginId) => {\n const { key, config = {} } = this.service.plugins[pluginId];\n if ('default' in config) memo[key] = config.default;\n return memo;\n }, {});\n\n return defaultConfig;\n }\n\n getConfig({ defaultConfig }) {\n assert(\n this.service.stage >= ServiceStage.pluginReady,\n 'Config.getConfig() failed, it should not be executed before plugin is ready.'\n );\n\n const userConfig = this.getUserConfig();\n // 用于提示用户哪些 key 是未定义的\n // TODO: 考虑不排除 false 的 key\n const userConfigKeys = Object.keys(userConfig).filter(\n key => userConfig[key] !== false\n );\n\n // get config\n const pluginIds = Object.keys(this.service.plugins);\n pluginIds.forEach((pluginId) => {\n const { key, config = {} } = this.service.plugins[pluginId];\n // recognize as key if have schema config\n if (!config.schema) return;\n\n const value = getUserConfigWithKey({\n key,\n userConfig\n });\n // 不校验 false 的值,此时已禁用插件\n if (value === false) return;\n\n // do validate\n const schema = config.schema(joi);\n assert(\n joi.isSchema(schema),\n `schema return from plugin ${pluginId} is not valid schema.`\n );\n const { error } = schema.validate(value);\n if (error) {\n const e = new Error(\n `Validate config \"${key}\" failed, ${error.message}`\n );\n e.stack = error.stack;\n throw e;\n }\n\n // remove key\n const index = userConfigKeys.indexOf(key.split('.')[0]);\n if (index !== -1) {\n userConfigKeys.splice(index, 1);\n }\n\n // update userConfig with defaultConfig\n if (key in defaultConfig) {\n const newValue = mergeDefault({\n defaultConfig: defaultConfig[key],\n config: value\n });\n updateUserConfigWithKey({\n key,\n value: newValue,\n userConfig\n });\n }\n });\n\n if (userConfigKeys.length) {\n const keys = userConfigKeys.length > 1 ? 'keys' : 'key';\n throw new Error(\n `Invalid config ${keys}: ${userConfigKeys.join(', ')}`\n );\n }\n\n return userConfig;\n }\n\n getUserConfig() {\n const configFile = this.getConfigFile();\n this.configFile = configFile;\n if (configFile.length > 0) {\n // clear require cache and set babel register\n const requireDeps = configFile.reduce((memo, file) => {\n memo = memo.concat(parseRequireDeps(file));\n return memo;\n }, []);\n requireDeps.forEach(cleanRequireCache);\n this.service.babelRegister.setOnlyMap({\n key: 'config',\n value: requireDeps\n });\n\n // require config and merge\n return this.mergeConfig(...this.requireConfigs(configFile));\n }\n return {};\n }\n\n addAffix(file, affix) {\n const ext = extname(file);\n return file.replace(new RegExp(`${ext}$`), `.${affix}${ext}`);\n }\n\n requireConfigs(configFiles) {\n // eslint-disable-next-line\n return configFiles.map((f) => compatESModuleRequire(require(f)));\n }\n\n mergeConfig(...configs) {\n let ret = {};\n for (const config of configs) {\n // TODO: 精细化处理,比如处理 dotted config key\n ret = deepmerge(ret, config);\n }\n return ret;\n }\n\n getConfigFile() {\n // TODO: support custom config file\n let configFile = CONFIG_FILES.find(f => existsSync(join(this.cwd, f)));\n if (!configFile) return [];\n configFile = winPath(configFile);\n let envConfigFile;\n // 潜在问题:\n // .local 和 .env 的配置必须有 configFile 才有效\n if (process.env.FES_ENV) {\n envConfigFile = this.addAffix(\n configFile,\n process.env.FES_ENV\n );\n if (!existsSync(join(this.cwd, envConfigFile))) {\n throw new Error(\n `get user config failed, ${envConfigFile} does not exist, but process.env.FES_ENV is set to ${process.env.FES_ENV}.`\n );\n }\n }\n const files = [\n configFile,\n envConfigFile,\n this.localConfig && this.addAffix(configFile, 'local')\n ]\n .filter(f => !!f)\n .map(f => join(this.cwd, f))\n .filter(f => existsSync(f));\n return files;\n }\n\n getWatchFilesAndDirectories() {\n const fesEnv = process.env.FES_ENV;\n const configFiles = lodash.clone(CONFIG_FILES);\n CONFIG_FILES.forEach((f) => {\n if (this.localConfig) configFiles.push(this.addAffix(f, 'local'));\n if (fesEnv) configFiles.push(this.addAffix(f, fesEnv));\n });\n\n const configDir = winPath(join(this.cwd, 'config'));\n\n const files = configFiles\n .reduce((memo, f) => {\n const file = winPath(join(this.cwd, f));\n if (existsSync(file)) {\n memo = memo.concat(parseRequireDeps(file));\n } else {\n memo.push(file);\n }\n return memo;\n }, [])\n .filter(f => !f.startsWith(configDir));\n\n return [configDir].concat(files);\n }\n\n watch(opts) {\n let paths = this.getWatchFilesAndDirectories();\n let userConfig = opts.userConfig;\n const watcher = chokidar.watch(paths, {\n ignoreInitial: true,\n cwd: this.cwd\n });\n watcher.on('all', (event, path) => {\n console.log(chalk.green(`[${event}] ${path}`));\n const newPaths = this.getWatchFilesAndDirectories();\n const diffs = lodash.difference(newPaths, paths);\n if (diffs.length) {\n watcher.add(diffs);\n paths = paths.concat(diffs);\n }\n\n const newUserConfig = this.getUserConfig();\n const pluginChanged = [];\n const valueChanged = [];\n Object.keys(this.service.plugins).forEach((pluginId) => {\n const { key, config = {} } = this.service.plugins[pluginId];\n // recognize as key if have schema config\n if (!config.schema) return;\n if (!isEqual(newUserConfig[key], userConfig[key])) {\n const changed = {\n key,\n pluginId\n };\n if (\n newUserConfig[key] === false\n || userConfig[key] === false\n ) {\n pluginChanged.push(changed);\n } else {\n valueChanged.push(changed);\n }\n }\n });\n\n if (pluginChanged.length || valueChanged.length) {\n opts.onChange({\n userConfig: newUserConfig,\n pluginChanged,\n valueChanged\n });\n }\n userConfig = newUserConfig;\n });\n\n return () => {\n watcher.close();\n };\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/config/utils/configUtils.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····key,⏎····value,⏎····userConfig⏎` with `·key,·value,·userConfig·`","line":4,"column":42,"nodeType":null,"messageId":"replace","endLine":8,"endColumn":1,"fix":{"range":[110,146],"text":" key, value, userConfig "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····key,⏎····userConfig⏎` with `·key,·userConfig·`","line":12,"column":39,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":1,"fix":{"range":[225,250],"text":" key, userConfig "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"import { lodash } from '@fesjs/utils';\nimport set from 'set-value';\n\nexport function updateUserConfigWithKey({\n key,\n value,\n userConfig\n}) {\n set(userConfig, key, value);\n}\n\nexport function getUserConfigWithKey({\n key,\n userConfig\n}) {\n return lodash.get(userConfig, key);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/config/utils/isEqual.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/config/utils/mergeDefault.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":3,"column":1,"nodeType":null,"messageId":"delete","endLine":4,"endColumn":1,"fix":{"range":[51,52],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { deepmerge, lodash } from '@fesjs/utils';\n\n\nexport default ({ defaultConfig, config }) => {\n if (lodash.isPlainObject(defaultConfig) && lodash.isPlainObject(config)) {\n return deepmerge(defaultConfig, config);\n }\n return typeof config !== 'undefined' ? config : defaultConfig;\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":6,"column":1,"nodeType":null,"messageId":"delete","endLine":7,"endColumn":1,"fix":{"range":[99,100],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····Config,⏎····Service,⏎····PluginAPI,⏎····isPluginOrPreset,⏎····PluginType,⏎····Logger⏎` with `·Config,·Service,·PluginAPI,·isPluginOrPreset,·PluginType,·Logger·`","line":14,"column":9,"nodeType":null,"messageId":"replace","endLine":21,"endColumn":1,"fix":{"range":[359,449],"text":" Config, Service, PluginAPI, isPluginOrPreset, PluginType, Logger "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/tree/master/packages/core\n */\n\n\nimport Config from './config';\nimport Logger from './logger';\nimport Service from './service';\nimport PluginAPI from './service/pluginAPI';\nimport { PluginType } from './service/enums';\nimport { isPluginOrPreset } from './service/utils/pluginUtils';\n\nexport {\n Config,\n Service,\n PluginAPI,\n isPluginOrPreset,\n PluginType,\n Logger\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/logger/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····createDebug,⏎····chalk⏎` with `·createDebug,·chalk·`","line":6,"column":9,"nodeType":null,"messageId":"replace","endLine":9,"endColumn":1,"fix":{"range":[107,135],"text":" createDebug, chalk "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `message·||·''` with `⏎················message·||·''⏎············`","line":74,"column":70,"nodeType":null,"messageId":"replace","endLine":74,"endColumn":83,"fix":{"range":[1931,1944],"text":"\n message || ''\n "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/tree/master/packages/core\n */\n\nimport {\n createDebug,\n chalk\n} from '@fesjs/utils';\nimport readline from 'readline';\n\nexport default class Logger {\n LOG = chalk.black.bgBlue('LOG');\n\n INFO = chalk.black.bgBlue('INFO');\n\n WARN = chalk.black.bgHex('#faad14')('WARN');\n\n ERROR = chalk.black.bgRed('ERROR');\n\n PROFILE = chalk.black.bgCyan('PROFILE');\n\n constructor(namespace) {\n // TODO: get namespace filename accounding caller function\n if (!namespace) {\n throw new Error('logger needs namespace');\n }\n this.namespace = namespace;\n this.profilers = {};\n this.debug = createDebug(this.namespace);\n }\n\n log(...args) {\n // TODO: node env production\n console.log(this.LOG, ...args);\n }\n\n /**\n * The {@link logger.info} function is an alias for {@link logger.log()}.\n * @param args\n */\n info(...args) {\n console.log(this.INFO, ...args);\n }\n\n error(...args) {\n console.error(this.ERROR, ...args);\n }\n\n warn(...args) {\n console.warn(this.WARN, ...args);\n }\n\n formatTiming(timing) {\n return timing < 60 * 1000\n ? `${Math.round(timing / 10) / 100}s`\n : `${Math.round(timing / 600) / 100}m`;\n }\n\n profile(id, message) {\n const time = Date.now();\n const namespace = `${this.namespace}:${id}`;\n // for test\n let msg;\n if (this.profilers[id]) {\n const timeEnd = this.profilers[id];\n delete this.profilers[id];\n process.stderr.write(`${this.PROFILE} `);\n msg = `${this.PROFILE} ${chalk.cyan(\n `└ ${namespace}`\n )} Completed in ${this.formatTiming(time - timeEnd)}`;\n console.log(msg);\n } else {\n msg = `${this.PROFILE} ${chalk.cyan(`┌ ${namespace}`)} ${message || ''}`;\n console.log(msg);\n }\n\n this.profilers[id] = time;\n return msg;\n }\n\n clearConsole(title) {\n if (process.stdout.isTTY) {\n const blank = '\\n'.repeat(process.stdout.rows);\n console.log(blank);\n readline.cursorTo(process.stdout, 0, 0);\n readline.clearScreenDown(process.stdout);\n if (title) {\n console.log(title);\n }\n }\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/babelRegister.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····lodash,⏎····winPath⏎}·from·'@fesjs/utils';⏎` with `·lodash,·winPath·}·from·'@fesjs/utils';`","line":1,"column":9,"nodeType":null,"messageId":"replace","endLine":5,"endColumn":1,"fix":{"range":[8,56],"text":" lodash, winPath } from '@fesjs/utils';"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········key,⏎········value⏎···` with `·key,·value`","line":10,"column":17,"nodeType":null,"messageId":"replace","endLine":13,"endColumn":4,"fix":{"range":[127,158],"text":" key, value"}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"import {\n lodash,\n winPath\n} from '@fesjs/utils';\n\n\nexport default class BabelRegister {\n only = {};\n\n setOnlyMap({\n key,\n value\n }) {\n this.only[key] = value;\n this.register();\n }\n\n register() {\n const only = lodash.uniq(\n Object.keys(this.only)\n .reduce((memo, key) => memo.concat(this.only[key]), [])\n .map(winPath)\n );\n require('@babel/register')({\n presets: [\n [\n require.resolve('@babel/preset-env'),\n {\n targets: {\n node: 'current'\n },\n modules: 'commonjs'\n }\n ]\n ],\n ignore: [/node_modules/],\n only,\n extensions: ['.jsx', '.js', '.ts', '.tsx'],\n babelrc: false,\n cache: false\n });\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/enums.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/getPaths.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `value` with `(value)`","line":15,"column":34,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":39,"fix":{"range":[391,396],"text":"(value)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····cwd,⏎····config,⏎····env⏎` with `·cwd,·config,·env·`","line":18,"column":42,"nodeType":null,"messageId":"replace","endLine":22,"endColumn":1,"fix":{"range":[461,491],"text":" cwd, config, env "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/tree/master/packages/core\n */\n\nimport { join } from 'path';\nimport { existsSync, statSync } from 'fs';\nimport { lodash, winPath } from '@fesjs/utils';\n\nfunction isDirectoryAndExist(path) {\n return existsSync(path) && statSync(path).isDirectory();\n}\n\nfunction normalizeWithWinPath(obj) {\n return lodash.mapValues(obj, value => winPath(value));\n}\n\nexport default function getServicePaths({\n cwd,\n config,\n env\n}) {\n let absSrcPath = cwd;\n if (isDirectoryAndExist(join(cwd, 'src'))) {\n absSrcPath = join(cwd, 'src');\n }\n\n const absPagesPath = config.singular\n ? join(absSrcPath, 'page')\n : join(absSrcPath, 'pages');\n\n const tmpDir = ['.fes', env !== 'development' && env]\n .filter(Boolean)\n .join('-');\n return normalizeWithWinPath({\n cwd,\n absNodeModulesPath: join(cwd, 'node_modules'),\n absOutputPath: join(cwd, config.outputPath || './dist'),\n absSrcPath,\n absPagesPath,\n absTmpPath: join(absSrcPath, tmpDir)\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":98,"column":1,"nodeType":null,"messageId":"delete","endLine":99,"endColumn":1,"fix":{"range":[2149,2150],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":124,"column":1,"nodeType":null,"messageId":"delete","endLine":125,"endColumn":1,"fix":{"range":[2854,2855],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `path·=>` with `(path)·=>⏎···················`","line":325,"column":32,"nodeType":null,"messageId":"replace","endLine":325,"endColumn":39,"fix":{"range":[9023,9030],"text":"(path) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":326,"column":1,"nodeType":null,"messageId":"insert","endLine":326,"endColumn":1,"fix":{"range":[9043,9043],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····················` with `························`","line":327,"column":1,"nodeType":null,"messageId":"replace","endLine":327,"endColumn":21,"fix":{"range":[9088,9108],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":328,"column":1,"nodeType":null,"messageId":"insert","endLine":328,"endColumn":1,"fix":{"range":[9114,9114],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎················`","line":329,"column":17,"nodeType":null,"messageId":"replace","endLine":329,"endColumn":19,"fix":{"range":[9164,9166],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `path·=>` with `(path)·=>⏎···················`","line":347,"column":32,"nodeType":null,"messageId":"replace","endLine":347,"endColumn":39,"fix":{"range":[9686,9693],"text":"(path) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":348,"column":1,"nodeType":null,"messageId":"insert","endLine":348,"endColumn":1,"fix":{"range":[9706,9706],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····················` with `························`","line":349,"column":1,"nodeType":null,"messageId":"replace","endLine":349,"endColumn":21,"fix":{"range":[9751,9771],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":350,"column":1,"nodeType":null,"messageId":"insert","endLine":350,"endColumn":1,"fix":{"range":[9777,9777],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················})` with `····················})⏎················`","line":351,"column":1,"nodeType":null,"messageId":"replace","endLine":351,"endColumn":19,"fix":{"range":[9811,9829],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":354,"column":6,"nodeType":null,"messageId":"delete","endLine":355,"endColumn":1,"fix":{"range":[9861,9862],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `memo` with `(memo)`","line":466,"column":31,"nodeType":null,"messageId":"replace","endLine":466,"endColumn":35,"fix":{"range":[13334,13338],"text":"(memo)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace ``@fesjs/fes·${this.fesPkg.version}`,·'-v,·--vers',·'output·the·current·version'` with `⏎················`@fesjs/fes·${this.fesPkg.version}`,⏎················'-v,·--vers',⏎················'output·the·current·version'⏎············`","line":501,"column":22,"nodeType":null,"messageId":"replace","endLine":501,"endColumn":101,"fix":{"range":[14593,14672],"text":"\n `@fesjs/fes ${this.fesPkg.version}`,\n '-v, --vers',\n 'output the current version'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.command(command)` with `⏎················.command(command)⏎················`","line":526,"column":28,"nodeType":null,"messageId":"replace","endLine":526,"endColumn":45,"fix":{"range":[15427,15444],"text":"\n .command(command)\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·args,·options:·c.opts(),` with `⏎························args,⏎························options:·c.opts(),⏎·······················`","line":542,"column":33,"nodeType":null,"messageId":"replace","endLine":542,"endColumn":58,"fix":{"range":[16182,16207],"text":"\n args,\n options: c.opts(),\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `c·=>·c.on('--help',·()·=>·console.log())` with `(c)·=>⏎············c.on('--help',·()·=>·console.log())⏎········`","line":561,"column":39,"nodeType":null,"messageId":"replace","endLine":561,"endColumn":79,"fix":{"range":[16680,16720],"text":"(c) =>\n c.on('--help', () => console.log())\n "}}],"errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":18,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/tree/master/packages/core\n */\nimport { join } from 'path';\nimport { EventEmitter } from 'events';\nimport assert from 'assert';\nimport { AsyncSeriesWaterfallHook } from 'tapable';\nimport { existsSync } from 'fs';\nimport { lodash, chalk } from '@fesjs/utils';\nimport { Command, Option } from 'commander';\nimport { resolvePresets, pathToObj, resolvePlugins } from './utils/pluginUtils';\nimport loadDotEnv from './utils/loadDotEnv';\nimport isPromise from './utils/isPromise';\nimport BabelRegister from './babelRegister';\nimport PluginAPI from './pluginAPI';\nimport {\n ApplyPluginsType,\n ConfigChangeType,\n EnableBy,\n PluginType,\n ServiceStage\n} from './enums';\nimport Config from '../config';\nimport { getUserConfigWithKey } from '../config/utils/configUtils';\nimport getPaths from './getPaths';\n\n// TODO\n// 1. duplicated key\n// 2. Logger\nexport default class Service extends EventEmitter {\n cwd;\n\n pkg;\n\n skipPluginIds = new Set();\n\n // lifecycle stage\n stage = ServiceStage.uninitialized;\n\n // registered commands\n commands = {};\n\n // including plugins\n plugins = {};\n\n // plugin methods\n pluginMethods = {};\n\n // initial presets and plugins from arguments, config, process.env, and package.json\n initialPresets = [];\n\n // initial plugins from arguments, config, process.env, and package.json\n initialPlugins = [];\n\n _extraPresets = [];\n\n _extraPlugins = [];\n\n // user config\n userConfig;\n\n configInstance;\n\n config = null;\n\n // babel register\n babelRegister;\n\n // hooks\n hooksByPluginId = {};\n\n hooks = {};\n\n // paths\n paths = {};\n\n env;\n\n ApplyPluginsType = ApplyPluginsType;\n\n EnableBy = EnableBy;\n\n ConfigChangeType = ConfigChangeType;\n\n ServiceStage = ServiceStage;\n\n args;\n\n constructor(opts) {\n super();\n this.cwd = opts.cwd || process.cwd();\n // repoDir should be the root dir of repo\n this.pkg = opts.pkg || this.resolvePackage();\n this.env = opts.env || process.env.NODE_ENV;\n this.fesPkg = opts.fesPkg || {};\n\n\n assert(existsSync(this.cwd), `cwd ${this.cwd} does not exist.`);\n\n // register babel before config parsing\n this.babelRegister = new BabelRegister();\n\n // load .env or .local.env\n this.loadEnv();\n\n // get user config without validation\n this.configInstance = new Config({\n cwd: this.cwd,\n service: this,\n localConfig: this.env === 'development'\n });\n this.userConfig = this.configInstance.getUserConfig();\n\n // get paths\n this.paths = getPaths({\n cwd: this.cwd,\n config: this.userConfig,\n env: this.env\n });\n\n this.program = this.initCommand();\n\n\n // setup initial plugins\n const baseOpts = {\n pkg: this.pkg,\n cwd: this.cwd\n };\n this.initialPresets = resolvePresets({\n ...baseOpts,\n presets: opts.presets || [],\n userConfigPresets: this.userConfig.presets || []\n });\n this.initialPlugins = resolvePlugins({\n ...baseOpts,\n plugins: opts.plugins || [],\n userConfigPlugins: this.userConfig.plugins || []\n });\n }\n\n setStage(stage) {\n this.stage = stage;\n }\n\n resolvePackage() {\n try {\n // eslint-disable-next-line\n return require(join(this.cwd, \"package.json\"));\n } catch (e) {\n return {};\n }\n }\n\n loadEnv() {\n const basePath = join(this.cwd, '.env');\n const localPath = `${basePath}.local`;\n loadDotEnv(basePath);\n if (process.env.FES_ENV) {\n loadDotEnv(`${basePath}.${process.env.FES_ENV}`);\n }\n loadDotEnv(localPath);\n }\n\n async init() {\n this.setStage(ServiceStage.init);\n await this.initPresetsAndPlugins();\n\n // hooksByPluginId -> hooks\n // hooks is mapped with hook key, prepared for applyPlugins()\n this.setStage(ServiceStage.initHooks);\n Object.keys(this.hooksByPluginId).forEach((id) => {\n const hooks = this.hooksByPluginId[id];\n hooks.forEach((hook) => {\n const { key } = hook;\n hook.pluginId = id;\n this.hooks[key] = (this.hooks[key] || []).concat(hook);\n });\n });\n\n // plugin is totally ready\n this.setStage(ServiceStage.pluginReady);\n await this.applyPlugins({\n key: 'onPluginReady',\n type: ApplyPluginsType.event\n });\n\n // get config, including:\n // 1. merge default config\n // 2. validate\n this.setStage(ServiceStage.getConfig);\n await this.setConfig();\n\n // merge paths to keep the this.paths ref\n this.setStage(ServiceStage.getPaths);\n // config.outputPath may be modified by plugins\n if (this.config.outputPath) {\n this.paths.absOutputPath = join(this.cwd, this.config.outputPath);\n }\n const paths = await this.applyPlugins({\n key: 'modifyPaths',\n type: ApplyPluginsType.modify,\n initialValue: this.paths\n });\n Object.keys(paths).forEach((key) => {\n this.paths[key] = paths[key];\n });\n }\n\n async setConfig() {\n const defaultConfig = await this.applyPlugins({\n key: 'modifyDefaultConfig',\n type: this.ApplyPluginsType.modify,\n initialValue: await this.configInstance.getDefaultConfig()\n });\n this.config = await this.applyPlugins({\n key: 'modifyConfig',\n type: this.ApplyPluginsType.modify,\n initialValue: this.configInstance.getConfig({\n defaultConfig\n })\n });\n }\n\n async initPresetsAndPlugins() {\n this.setStage(ServiceStage.initPresets);\n this._extraPlugins = [];\n while (this.initialPresets.length) {\n // eslint-disable-next-line\n await this.initPreset(this.initialPresets.shift());\n }\n\n this.setStage(ServiceStage.initPlugins);\n this._extraPlugins.push(...this.initialPlugins);\n while (this._extraPlugins.length) {\n // eslint-disable-next-line\n await this.initPlugin(this._extraPlugins.shift());\n }\n }\n\n getPluginAPI(opts) {\n const pluginAPI = new PluginAPI(opts);\n\n // register built-in methods\n [\n 'onPluginReady',\n 'modifyPaths',\n 'onStart',\n 'modifyDefaultConfig',\n 'modifyConfig'\n ].forEach((name) => {\n pluginAPI.registerMethod({\n name,\n exitsError: false\n });\n });\n\n return new Proxy(pluginAPI, {\n get: (target, prop) => {\n // 由于 pluginMethods 需要在 register 阶段可用\n // 必须通过 proxy 的方式动态获取最新,以实现边注册边使用的效果\n if (this.pluginMethods[prop]) return this.pluginMethods[prop];\n if (\n [\n 'applyPlugins',\n 'ApplyPluginsType',\n 'EnableBy',\n 'ConfigChangeType',\n 'babelRegister',\n 'stage',\n 'ServiceStage',\n 'paths',\n 'cwd',\n 'pkg',\n 'configInstance',\n 'userConfig',\n 'config',\n 'env',\n 'args',\n 'hasPlugins',\n 'hasPresets',\n 'setConfig'\n ].includes(prop)\n ) {\n return typeof this[prop] === 'function'\n ? this[prop].bind(this)\n : this[prop];\n }\n return target[prop];\n }\n });\n }\n\n async applyAPI(opts) {\n let ret = opts.apply()(opts.api);\n if (isPromise(ret)) {\n ret = await ret;\n }\n return ret || {};\n }\n\n async initPreset(preset) {\n const { id, key, apply } = preset;\n preset.isPreset = true;\n\n const api = this.getPluginAPI({ id, key, service: this });\n\n // register before apply\n this.registerPlugin(preset);\n const { presets, plugins } = await this.applyAPI({\n api,\n apply\n });\n\n // register extra presets and plugins\n if (presets) {\n assert(\n Array.isArray(presets),\n `presets returned from preset ${id} must be Array.`\n );\n // 插到最前面,下个 while 循环优先执行\n this._extraPresets.splice(\n 0,\n 0,\n ...presets.map(path => pathToObj({\n type: PluginType.preset,\n path,\n cwd: this.cwd\n }))\n );\n }\n\n // 深度优先\n const extraPresets = lodash.clone(this._extraPresets);\n this._extraPresets = [];\n while (extraPresets.length) {\n // eslint-disable-next-line\n await this.initPreset(extraPresets.shift());\n }\n\n if (plugins) {\n assert(\n Array.isArray(plugins),\n `plugins returned from preset ${id} must be Array.`\n );\n this._extraPlugins.push(\n ...plugins.map(path => pathToObj({\n type: PluginType.plugin,\n path,\n cwd: this.cwd\n }))\n );\n }\n }\n\n\n async initPlugin(plugin) {\n const { id, key, apply } = plugin;\n\n const api = this.getPluginAPI({\n id,\n key,\n service: this\n });\n\n // register before apply\n this.registerPlugin(plugin);\n await this.applyAPI({\n api,\n apply\n });\n }\n\n getPluginOptsWithKey(key) {\n return getUserConfigWithKey({\n key,\n userConfig: this.userConfig\n });\n }\n\n registerPlugin(plugin) {\n this.plugins[plugin.id] = plugin;\n }\n\n isPluginEnable(pluginId) {\n // api.skipPlugins() 的插件\n if (this.skipPluginIds.has(pluginId)) return false;\n\n const { key, enableBy } = this.plugins[pluginId];\n\n // 手动设置为 false\n if (this.userConfig[key] === false) return false;\n\n // 配置开启\n if (enableBy === this.EnableBy.config && !(key in this.userConfig)) {\n return false;\n }\n\n // 函数自定义开启\n if (typeof enableBy === 'function') {\n return enableBy();\n }\n\n // 注册开启\n return true;\n }\n\n hasPresets(presetIds) {\n return presetIds.every((presetId) => {\n const preset = this.plugins[presetId];\n return preset && preset.isPreset && this.isPluginEnable(presetId);\n });\n }\n\n hasPlugins(pluginIds) {\n return pluginIds.every((pluginId) => {\n const plugin = this.plugins[pluginId];\n return plugin && !plugin.isPreset && this.isPluginEnable(pluginId);\n });\n }\n\n async applyPlugins(opts) {\n const hooks = this.hooks[opts.key] || [];\n switch (opts.type) {\n case ApplyPluginsType.add:\n if ('initialValue' in opts) {\n assert(\n Array.isArray(opts.initialValue),\n 'applyPlugins failed, opts.initialValue must be Array if opts.type is add.'\n );\n }\n // eslint-disable-next-line\n const tAdd = new AsyncSeriesWaterfallHook([\"memo\"]);\n for (const hook of hooks) {\n if (!this.isPluginEnable(hook.pluginId)) {\n continue;\n }\n tAdd.tapPromise(\n {\n name: hook.pluginId,\n stage: hook.stage || 0,\n // @ts-ignore\n before: hook.before\n },\n async (memo) => {\n const items = await hook.fn(opts.args);\n return memo.concat(items);\n }\n );\n }\n return tAdd.promise(opts.initialValue || []);\n case ApplyPluginsType.modify:\n // eslint-disable-next-line\n const tModify = new AsyncSeriesWaterfallHook([\"memo\"]);\n for (const hook of hooks) {\n if (!this.isPluginEnable(hook.pluginId)) {\n continue;\n }\n tModify.tapPromise(\n {\n name: hook.pluginId,\n stage: hook.stage || 0,\n // @ts-ignore\n before: hook.before\n },\n async memo => hook.fn(memo, opts.args)\n );\n }\n return tModify.promise(opts.initialValue);\n case ApplyPluginsType.event:\n // eslint-disable-next-line\n const tEvent = new AsyncSeriesWaterfallHook([\"_\"]);\n for (const hook of hooks) {\n if (!this.isPluginEnable(hook.pluginId)) {\n continue;\n }\n tEvent.tapPromise(\n {\n name: hook.pluginId,\n stage: hook.stage || 0,\n // @ts-ignore\n before: hook.before\n },\n async () => {\n await hook.fn(opts.args);\n }\n );\n }\n return tEvent.promise();\n default:\n throw new Error(\n `applyPlugin failed, type is not defined or is not matched, got ${opts.type}.`\n );\n }\n }\n\n initCommand() {\n const command = new Command();\n command\n .usage(' [options]')\n .version(`@fesjs/fes ${this.fesPkg.version}`, '-v, --vers', 'output the current version')\n .description(chalk.cyan('一个好用的前端应用解决方案'));\n return command;\n }\n\n async run({ rawArgv = {}, args = {} }) {\n await this.init();\n\n this.setStage(ServiceStage.run);\n await this.applyPlugins({\n key: 'onStart',\n type: ApplyPluginsType.event,\n args: {\n args\n }\n });\n\n return this.runCommand({ rawArgv, args });\n }\n\n async runCommand({ rawArgv = {}, args = {} }) {\n assert(this.stage >= ServiceStage.init, 'service is not initialized.');\n Object.keys(this.commands).forEach((command) => {\n const commandOptionConfig = this.commands[command];\n const program = this.program;\n let c = program.command(command).description(commandOptionConfig.description);\n if (Array.isArray(commandOptionConfig.options)) {\n commandOptionConfig.options.forEach((config) => {\n const option = new Option(config.name, config.description);\n if (config.default) {\n option.default(config.default);\n }\n if (config.choices) {\n option.choices(config.choices);\n }\n c = c.addOption(option);\n });\n }\n if (commandOptionConfig.fn) {\n c.action(async () => {\n await commandOptionConfig.fn({\n rawArgv, args, options: c.opts(), program\n });\n });\n }\n });\n\n return this.parseCommand();\n }\n\n async parseCommand() {\n this.program.on('--help', () => {\n console.log();\n console.log(\n ` Run ${chalk.cyan(\n 'fes --help'\n )} for detailed usage of given command.`\n );\n console.log();\n });\n this.program.commands.forEach(c => c.on('--help', () => console.log()));\n return this.program.parseAsync(process.argv);\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/pluginAPI.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········id,⏎········key,⏎········config,⏎········enableBy⏎···` with `·id,·key,·config,·enableBy`","line":24,"column":15,"nodeType":null,"messageId":"replace","endLine":29,"endColumn":4,"fix":{"range":[645,707],"text":" id, key, config, enableBy"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":91,"column":60,"nodeType":null,"messageId":"insert","endLine":91,"endColumn":60,"fix":{"range":[2826,2826],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `||` with `·······`","line":92,"column":9,"nodeType":null,"messageId":"replace","endLine":92,"endColumn":11,"fix":{"range":[2835,2837],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `plugin·=>·(` with `(plugin)·=>⏎············`","line":99,"column":42,"nodeType":null,"messageId":"replace","endLine":99,"endColumn":53,"fix":{"range":[3158,3169],"text":"(plugin) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `?·(plugin)` with `····?·plugin`","line":100,"column":13,"nodeType":null,"messageId":"replace","endLine":100,"endColumn":23,"fix":{"range":[3203,3213],"text":" ? plugin"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":101,"column":1,"nodeType":null,"messageId":"insert","endLine":101,"endColumn":1,"fix":{"range":[3214,3214],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `······`","line":102,"column":17,"nodeType":null,"messageId":"insert","endLine":102,"endColumn":17,"fix":{"range":[3256,3256],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `······`","line":103,"column":17,"nodeType":null,"messageId":"insert","endLine":103,"endColumn":17,"fix":{"range":[3297,3297],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `······················`","line":104,"column":1,"nodeType":null,"messageId":"replace","endLine":104,"endColumn":17,"fix":{"range":[3311,3327],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}))` with `······})⏎········`","line":105,"column":13,"nodeType":null,"messageId":"replace","endLine":105,"endColumn":16,"fix":{"range":[3361,3364],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `preset·=>·(` with `(preset)·=>⏎············`","line":122,"column":42,"nodeType":null,"messageId":"replace","endLine":122,"endColumn":53,"fix":{"range":[3962,3973],"text":"(preset) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `?·(preset)` with `····?·preset`","line":123,"column":13,"nodeType":null,"messageId":"replace","endLine":123,"endColumn":23,"fix":{"range":[4007,4017],"text":" ? preset"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":124,"column":1,"nodeType":null,"messageId":"insert","endLine":124,"endColumn":1,"fix":{"range":[4018,4018],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `······················`","line":125,"column":1,"nodeType":null,"messageId":"replace","endLine":125,"endColumn":17,"fix":{"range":[4044,4060],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `······`","line":126,"column":17,"nodeType":null,"messageId":"insert","endLine":126,"endColumn":17,"fix":{"range":[4101,4101],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `······················`","line":127,"column":1,"nodeType":null,"messageId":"replace","endLine":127,"endColumn":17,"fix":{"range":[4115,4131],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}))` with `······})⏎········`","line":128,"column":13,"nodeType":null,"messageId":"replace","endLine":128,"endColumn":16,"fix":{"range":[4165,4168],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········name,⏎········fn,⏎········exitsError·=·true⏎···` with `·name,·fn,·exitsError·=·true`","line":133,"column":21,"nodeType":null,"messageId":"replace","endLine":137,"endColumn":4,"fix":{"range":[4297,4353],"text":" name, fn, exitsError = true"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·fn` with `⏎············fn·||`","line":147,"column":43,"nodeType":null,"messageId":"replace","endLine":147,"endColumn":46,"fix":{"range":[4684,4687],"text":"\n fn ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `······`","line":148,"column":1,"nodeType":null,"messageId":"insert","endLine":148,"endColumn":1,"fix":{"range":[4688,4688],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `······` with `············`","line":149,"column":1,"nodeType":null,"messageId":"replace","endLine":149,"endColumn":7,"fix":{"range":[4743,4749],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `||` with `·····`","line":150,"column":7,"nodeType":null,"messageId":"replace","endLine":150,"endColumn":9,"fix":{"range":[4793,4795],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··········` with `················`","line":151,"column":1,"nodeType":null,"messageId":"replace","endLine":151,"endColumn":11,"fix":{"range":[4816,4826],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··············` with `····················`","line":152,"column":1,"nodeType":null,"messageId":"replace","endLine":152,"endColumn":15,"fix":{"range":[4841,4855],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··············...(utils.lodash.isPlainObject(hookFn)·?·hookFn` with `····················...(utils.lodash.isPlainObject(hookFn)⏎························?·hookFn⏎·······················`","line":153,"column":1,"nodeType":null,"messageId":"replace","endLine":153,"endColumn":62,"fix":{"range":[4866,4927],"text":" ...(utils.lodash.isPlainObject(hookFn)\n ? hookFn\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··········` with `················`","line":154,"column":1,"nodeType":null,"messageId":"replace","endLine":154,"endColumn":11,"fix":{"range":[4946,4956],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `······`","line":155,"column":1,"nodeType":null,"messageId":"insert","endLine":155,"endColumn":1,"fix":{"range":[4959,4959],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··········` with `················`","line":156,"column":1,"nodeType":null,"messageId":"replace","endLine":156,"endColumn":11,"fix":{"range":[4983,4993],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `······`","line":157,"column":1,"nodeType":null,"messageId":"insert","endLine":157,"endColumn":1,"fix":{"range":[5014,5014],"text":" "}}],"errorCount":29,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":29,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/tree/master/packages/core\n */\n\nimport assert from 'assert';\nimport * as utils from '@fesjs/utils';\nimport { isValidPlugin, pathToObj } from './utils/pluginUtils';\nimport { EnableBy, PluginType, ServiceStage } from './enums';\nimport Logger from '../logger';\n\n// TODO\n// 标准化 logger\nexport default class PluginAPI {\n constructor(opts) {\n this.id = opts.id;\n this.key = opts.key;\n this.service = opts.service;\n this.utils = utils;\n this.logger = new Logger(`fes:plugin:${this.id || this.key}`);\n }\n\n // TODO: reversed keys\n describe({\n id,\n key,\n config,\n enableBy\n } = {}) {\n const { plugins } = this.service;\n // this.id and this.key is generated automatically\n // so we need to diff first\n if (id && this.id !== id) {\n if (plugins[id]) {\n const name = plugins[id].isPreset ? 'preset' : 'plugin';\n throw new Error(\n `api.describe() failed, ${name} ${id} is already registered by ${plugins[id].path}.`\n );\n }\n plugins[id] = plugins[this.id];\n plugins[id].id = id;\n delete plugins[this.id];\n this.id = id;\n }\n if (key && this.key !== key) {\n this.key = key;\n plugins[this.id].key = key;\n }\n\n if (config) {\n plugins[this.id].config = config;\n }\n\n plugins[this.id].enableBy = enableBy || EnableBy.register;\n }\n\n register(hook) {\n assert(\n hook.key && typeof hook.key === 'string',\n `api.register() failed, hook.key must supplied and should be string, but got ${hook.key}.`\n );\n assert(\n hook.fn && typeof hook.fn === 'function',\n `api.register() failed, hook.fn must supplied and should be function, but got ${hook.fn}.`\n );\n this.service.hooksByPluginId[this.id] = (\n this.service.hooksByPluginId[this.id] || []\n ).concat(hook);\n }\n\n registerCommand(commandOption) {\n const { command, fn } = commandOption;\n assert(\n !this.service.commands[command],\n `api.registerCommand() failed, the command ${command} is exists.`\n );\n assert(\n typeof command === 'string',\n 'api.registerCommand() failed, the command must be String.'\n );\n assert(\n typeof fn === 'function',\n 'api.registerCommand() failed, the fn must be function.'\n );\n this.service.commands[command] = commandOption;\n }\n\n // 在 preset 初始化阶段放后面,在插件注册阶段放前面\n registerPlugins(plugins) {\n assert(\n this.service.stage === ServiceStage.initPresets\n || this.service.stage === ServiceStage.initPlugins,\n 'api.registerPlugins() failed, it should only be used in registering stage.'\n );\n assert(\n Array.isArray(plugins),\n 'api.registerPlugins() failed, plugins must be Array.'\n );\n const extraPlugins = plugins.map(plugin => (isValidPlugin(plugin)\n ? (plugin)\n : pathToObj({\n type: PluginType.plugin,\n path: plugin,\n cwd: this.service.cwd\n })));\n if (this.service.stage === ServiceStage.initPresets) {\n this.service._extraPlugins.push(...extraPlugins);\n } else {\n this.service._extraPlugins.splice(0, 0, ...extraPlugins);\n }\n }\n\n registerPresets(presets) {\n assert(\n this.service.stage === ServiceStage.initPresets,\n 'api.registerPresets() failed, it should only used in presets.'\n );\n assert(\n Array.isArray(presets),\n 'api.registerPresets() failed, presets must be Array.'\n );\n const extraPresets = presets.map(preset => (isValidPlugin(preset)\n ? (preset)\n : pathToObj({\n type: PluginType.preset,\n path: preset,\n cwd: this.service.cwd\n })));\n // 插到最前面,下个 while 循环优先执行\n this.service._extraPresets.splice(0, 0, ...extraPresets);\n }\n\n registerMethod({\n name,\n fn,\n exitsError = true\n }) {\n if (this.service.pluginMethods[name]) {\n if (exitsError) {\n throw new Error(\n `api.registerMethod() failed, method ${name} is already exist.`\n );\n } else {\n return;\n }\n }\n this.service.pluginMethods[name] = fn\n // 这里不能用 arrow function,this 需指向执行此方法的 PluginAPI\n // 否则 pluginId 会不会,导致不能正确 skip plugin\n || function (hookFn) {\n const hook = {\n key: name,\n ...(utils.lodash.isPlainObject(hookFn) ? hookFn : { fn: hookFn })\n };\n // @ts-ignore\n this.register(hook);\n };\n }\n\n skipPlugins(pluginIds) {\n pluginIds.forEach((pluginId) => {\n this.service.skipPluginIds.add(pluginId);\n });\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/utils/isPromise.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·&&`","line":3,"column":14,"nodeType":null,"messageId":"insert","endLine":3,"endColumn":14,"fix":{"range":[67,67],"text":" &&"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `&&·(typeof·obj·===·'object'·||·typeof·obj·===·'function')` with `····(typeof·obj·===·'object'·||·typeof·obj·===·'function')·&&`","line":4,"column":5,"nodeType":null,"messageId":"replace","endLine":4,"endColumn":62,"fix":{"range":[72,129],"text":" (typeof obj === 'object' || typeof obj === 'function') &&"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `&&` with `···`","line":5,"column":5,"nodeType":null,"messageId":"replace","endLine":5,"endColumn":7,"fix":{"range":[134,136],"text":" "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"export default function isPromise(obj) {\n return (\n !!obj\n && (typeof obj === 'object' || typeof obj === 'function')\n && typeof obj.then === 'function'\n );\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/utils/loadDotEnv.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-compiler/src/service/utils/pluginUtils.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····dirname,·join,·basename,·relative,·extname⏎` with `·dirname,·join,·basename,·relative,·extname·`","line":1,"column":9,"nodeType":null,"messageId":"replace","endLine":3,"endColumn":1,"fix":{"range":[8,56],"text":" dirname, join, basename, relative, extname "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `(opts[type·===·PluginType.preset·?·'presets'·:·'plugins'])` with `opts[type·===·PluginType.preset·?·'presets'·:·'plugins']`","line":33,"column":13,"nodeType":null,"messageId":"replace","endLine":33,"endColumn":71,"fix":{"range":[761,819],"text":"opts[type === PluginType.preset ? 'presets' : 'plugins']"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.split(',')` with `⏎············.split(',')⏎············`","line":35,"column":56,"nodeType":null,"messageId":"replace","endLine":35,"endColumn":67,"fix":{"range":[898,909],"text":"\n .split(',')\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `(`","line":40,"column":13,"nodeType":null,"messageId":"delete","endLine":40,"endColumn":14,"fix":{"range":[1135,1136],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·?·'userConfigPresets'` with `⏎················?·'userConfigPresets'⏎···············`","line":41,"column":39,"nodeType":null,"messageId":"replace","endLine":41,"endColumn":61,"fix":{"range":[1180,1202],"text":"\n ? 'userConfigPresets'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `)`","line":42,"column":10,"nodeType":null,"messageId":"delete","endLine":42,"endColumn":11,"fix":{"range":[1234,1235],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `(path·=>` with `((path)·=>⏎·······`","line":43,"column":10,"nodeType":null,"messageId":"replace","endLine":43,"endColumn":18,"fix":{"range":[1252,1260],"text":"((path) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":44,"column":1,"nodeType":null,"messageId":"replace","endLine":44,"endColumn":9,"fix":{"range":[1282,1290],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":45,"column":1,"nodeType":null,"messageId":"insert","endLine":45,"endColumn":1,"fix":{"range":[1309,1309],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····})` with `········})⏎····`","line":46,"column":1,"nodeType":null,"messageId":"replace","endLine":46,"endColumn":7,"fix":{"range":[1344,1350],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `part` with `(part)`","line":55,"column":14,"nodeType":null,"messageId":"replace","endLine":55,"endColumn":18,"fix":{"range":[1516,1520],"text":"(part)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·winPath(join(dirname(pkgJSONPath),·pkg.main·||·'index.js'))` with `⏎············winPath(join(dirname(pkgJSONPath),·pkg.main·||·'index.js'))·===`","line":73,"column":22,"nodeType":null,"messageId":"replace","endLine":73,"endColumn":82,"fix":{"range":[2049,2109],"text":"\n winPath(join(dirname(pkgJSONPath), pkg.main || 'index.js')) ==="}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·===`","line":74,"column":12,"nodeType":null,"messageId":"delete","endLine":74,"endColumn":16,"fix":{"range":[2121,2125],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `path·=>` with `(path)·=>⏎·······`","line":116,"column":24,"nodeType":null,"messageId":"replace","endLine":116,"endColumn":31,"fix":{"range":[3354,3361],"text":"(path) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":117,"column":9,"nodeType":null,"messageId":"insert","endLine":117,"endColumn":9,"fix":{"range":[3382,3382],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":118,"column":1,"nodeType":null,"messageId":"replace","endLine":118,"endColumn":9,"fix":{"range":[3388,3396],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":119,"column":1,"nodeType":null,"messageId":"insert","endLine":119,"endColumn":1,"fix":{"range":[3402,3402],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎····`","line":120,"column":5,"nodeType":null,"messageId":"replace","endLine":120,"endColumn":7,"fix":{"range":[3428,3430],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `path·=>` with `(path)·=>⏎·······`","line":126,"column":24,"nodeType":null,"messageId":"replace","endLine":126,"endColumn":31,"fix":{"range":[3587,3594],"text":"(path) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":127,"column":9,"nodeType":null,"messageId":"insert","endLine":127,"endColumn":9,"fix":{"range":[3615,3615],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":128,"column":1,"nodeType":null,"messageId":"replace","endLine":128,"endColumn":9,"fix":{"range":[3621,3629],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":129,"column":1,"nodeType":null,"messageId":"insert","endLine":129,"endColumn":1,"fix":{"range":[3635,3635],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎····`","line":130,"column":5,"nodeType":null,"messageId":"replace","endLine":130,"endColumn":7,"fix":{"range":[3661,3663],"text":" })\n "}}],"errorCount":23,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":23,"fixableWarningCount":0,"source":"import {\n dirname, join, basename, relative, extname\n} from 'path';\nimport {\n compatESModuleRequire,\n resolve,\n winPath,\n pkgUp,\n lodash\n} from '@fesjs/utils';\n\nimport { PluginType } from '../enums';\n\nconst RE = {\n [PluginType.plugin]: /^(@fesjs\\/|@webank\\/fes-|fes-)plugin-/,\n [PluginType.preset]: /^(@fesjs\\/|@webank\\/fes-|fes-)preset-/\n};\n\nexport function isPluginOrPreset(type, name) {\n const hasScope = name.charAt(0) === '@';\n const re = RE[type];\n if (hasScope) {\n return re.test(name.split('/')[1]) || re.test(name);\n }\n return re.test(name);\n}\n\nexport function getPluginsOrPresets(type, opts) {\n const upperCaseType = type.toUpperCase();\n return [\n // dependencies\n // opts\n ...((opts[type === PluginType.preset ? 'presets' : 'plugins']) || []),\n // env\n ...(process.env[`FES_${upperCaseType}S`] || '').split(',').filter(Boolean),\n ...Object.keys(opts.pkg.devDependencies || {})\n .concat(Object.keys(opts.pkg.dependencies || {}))\n .filter(isPluginOrPreset.bind(null, type)),\n // user config\n ...((opts[\n type === PluginType.preset ? 'userConfigPresets' : 'userConfigPlugins'\n ]) || [])\n ].map(path => resolve.sync(path, {\n basedir: opts.cwd,\n extensions: ['.js', '.ts']\n }));\n}\n\n// e.g.\n// initial-state -> initialState\n// webpack.css-loader -> webpack.cssLoader\nfunction nameToKey(name) {\n return name\n .split('.')\n .map(part => lodash.camelCase(part))\n .join('.');\n}\n\nfunction pkgNameToKey(pkgName, type) {\n if (pkgName.charAt(0) === '@' && !pkgName.startsWith('@fesjs/')) {\n pkgName = pkgName.split('/')[1];\n }\n return nameToKey(pkgName.replace(RE[type], ''));\n}\n\nexport function pathToObj({ path, type, cwd }) {\n let pkg = null;\n let isPkgPlugin = false;\n const pkgJSONPath = pkgUp.sync({ cwd: path });\n if (pkgJSONPath) {\n // eslint-disable-next-line\n pkg = require(pkgJSONPath);\n isPkgPlugin = winPath(join(dirname(pkgJSONPath), pkg.main || 'index.js'))\n === winPath(path);\n }\n\n let id;\n if (isPkgPlugin) {\n id = pkg.name;\n } else if (winPath(path).startsWith(winPath(cwd))) {\n id = `./${winPath(relative(cwd, path))}`;\n } else if (pkgJSONPath) {\n id = winPath(join(pkg.name, relative(dirname(pkgJSONPath), path)));\n } else {\n id = winPath(path);\n }\n id = id.replace('@fesjs/preset-built-in/lib/plugins', '@@');\n id = id.replace(/\\.js$/, '');\n\n const key = isPkgPlugin\n ? pkgNameToKey(pkg.name, type)\n : nameToKey(basename(path, extname(path)));\n\n return {\n id,\n key,\n path: winPath(path),\n apply() {\n // use function to delay require\n try {\n // eslint-disable-next-line\n const ret = require(path);\n // use the default member for es modules\n return compatESModuleRequire(ret);\n } catch (e) {\n throw new Error(`Register ${path} failed, since ${e.message}`);\n }\n },\n defaultConfig: null\n };\n}\n\nexport function resolvePresets(opts) {\n const type = PluginType.preset;\n const presets = [...getPluginsOrPresets(type, opts)];\n return presets.map(path => pathToObj({\n type,\n path,\n cwd: opts.cwd\n }));\n}\n\nexport function resolvePlugins(opts) {\n const type = PluginType.plugin;\n const plugins = getPluginsOrPresets(type, opts);\n return plugins.map(path => pathToObj({\n path,\n type,\n cwd: opts.cwd\n }));\n}\n\nexport function isValidPlugin(plugin) {\n return plugin.id && plugin.key && plugin.apply;\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-access/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-access/src/index.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-access/src/runtime/createComponent.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-access/src/runtime/createDirective.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-access/src/runtime/runtime.js","messages":[{"ruleId":"import/extensions","severity":2,"message":"Missing file extension for \"./core\"","line":2,"column":33,"nodeType":"Literal","endLine":2,"endColumn":41},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `runtimeConfig.noFoundHandler·&&·typeof·runtimeConfig.noFoundHandler·===·'function'` with `⏎················runtimeConfig.noFoundHandler·&&⏎················typeof·runtimeConfig.noFoundHandler·===·'function'⏎············`","line":12,"column":17,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":99,"fix":{"range":[421,503],"text":"\n runtimeConfig.noFoundHandler &&\n typeof runtimeConfig.noFoundHandler === 'function'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·to,·from,` with `⏎····················to,⏎····················from,⏎···················`","line":14,"column":28,"nodeType":null,"messageId":"replace","endLine":14,"endColumn":38,"fix":{"range":[588,598],"text":"\n to,\n from,\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `runtimeConfig.unAccessHandler·&&·typeof·runtimeConfig.unAccessHandler·===·'function'` with `⏎············runtimeConfig.unAccessHandler·&&⏎············typeof·runtimeConfig.unAccessHandler·===·'function'⏎········`","line":28,"column":13,"nodeType":null,"messageId":"replace","endLine":28,"endColumn":97,"fix":{"range":[927,1011],"text":"\n runtimeConfig.unAccessHandler &&\n typeof runtimeConfig.unAccessHandler === 'function'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·to,·from,` with `⏎················to,⏎················from,⏎···············`","line":30,"column":24,"nodeType":null,"messageId":"replace","endLine":30,"endColumn":34,"fix":{"range":[1089,1099],"text":"\n to,\n from,\n "}}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"import { plugin, ApplyPluginsType } from '@@/core/coreExports';\nimport { access, install } from './core';\n\nexport function onRouterCreated({ router }) {\n router.beforeEach(async (to, from, next) => {\n const runtimeConfig = plugin.applyPlugins({\n key: 'access',\n type: ApplyPluginsType.modify,\n initialValue: {}\n });\n if (to.matched.length === 0) {\n if (runtimeConfig.noFoundHandler && typeof runtimeConfig.noFoundHandler === 'function') {\n return runtimeConfig.noFoundHandler({\n router, to, from, next\n });\n }\n }\n let path;\n if (to.matched.length === 1) {\n path = to.matched[0].path;\n } else {\n path = to.path;\n }\n const canRoute = await access.hasAccess(path);\n if (canRoute) {\n return next();\n }\n if (runtimeConfig.unAccessHandler && typeof runtimeConfig.unAccessHandler === 'function') {\n return runtimeConfig.unAccessHandler({\n router, to, from, next\n });\n }\n next(false);\n });\n}\n\nexport function onAppCreated({ app }) {\n install(app);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-enums/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-enums/src/index.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-icon/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-icon/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `iconFiles.map(item·=>·join(base,·item))` with `⏎············iconFiles.map((item)·=>·join(base,·item))⏎········`","line":29,"column":44,"nodeType":null,"messageId":"replace","endLine":29,"endColumn":83,"fix":{"range":[844,883],"text":"\n iconFiles.map((item) => join(base, item))\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎····················`","line":36,"column":47,"nodeType":null,"messageId":"delete","endLine":37,"endColumn":21,"fix":{"range":[1247,1268],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `readFileSync(join(__dirname,·'runtime/runtime.tpl'),·'utf-8'),·{` with `⏎················readFileSync(join(__dirname,·'runtime/runtime.tpl'),·'utf-8'),⏎················{}`","line":53,"column":48,"nodeType":null,"messageId":"replace","endLine":53,"endColumn":112,"fix":{"range":[1729,1793],"text":"\n readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8'),\n {}"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `}`","line":54,"column":13,"nodeType":null,"messageId":"delete","endLine":54,"endColumn":14,"fix":{"range":[1806,1807],"text":""}}],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"import { readFileSync } from 'fs';\nimport { join, basename } from 'path';\nimport optimizeSvg from './optimizeSvg';\n\nexport default (api) => {\n api.addRuntimePluginKey(() => '');\n // 配置\n api.describe({\n key: 'icon',\n config: {\n schema(joi) {\n return joi.object();\n }\n }\n });\n\n const namespace = 'plugin-icon';\n const absRuntimeFilePath = join(namespace, 'runtime.js');\n\n // 监听 icons 文件变更,重新生成文件\n api.addTmpGenerateWatcherPaths(() => join(api.paths.absSrcPath, 'icons'));\n\n let generatedOnce = false;\n api.onGenerateFiles(async () => {\n const base = join(api.paths.absSrcPath, 'icons');\n const iconFiles = api.utils.glob.sync('**/*', {\n cwd: join(api.paths.absSrcPath, 'icons')\n });\n const svgDatas = await optimizeSvg(iconFiles.map(item => join(base, item)));\n const iconNames = [];\n const SVG_COMPONENT_TMPLATE = 'export default () => (SVG)';\n for (const { fileName, data } of svgDatas) {\n iconNames.push(basename(fileName, '.svg'));\n api.writeTmpFile({\n path: `${namespace}/icons/${basename(fileName, '.svg')}.js`,\n content: SVG_COMPONENT_TMPLATE\n .replace('SVG', data)\n });\n }\n\n api.writeTmpFile({\n path: `${namespace}/icons.js`,\n content: api.utils.Mustache.render(\n readFileSync(join(__dirname, 'runtime/icons.tpl'), 'utf-8'),\n {\n ICON_NAMES: iconNames\n }\n )\n });\n\n api.writeTmpFile({\n path: absRuntimeFilePath,\n content: api.utils.Mustache.render(readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8'), {\n })\n });\n\n if (!generatedOnce) {\n generatedOnce = true;\n api.copyTmpFiles({\n namespace,\n path: join(__dirname, 'runtime'),\n ignore: ['.tpl']\n });\n }\n });\n\n api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-icon/src/optimizeSvg.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":23,"column":1,"nodeType":null,"messageId":"delete","endLine":24,"endColumn":1,"fix":{"range":[443,444],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·path:·filePath,·plugins:·presetDefault` with `⏎················path:·filePath,⏎················plugins:·presetDefault⏎···········`","line":29,"column":45,"nodeType":null,"messageId":"replace","endLine":29,"endColumn":84,"fix":{"range":[735,774],"text":"\n path: filePath,\n plugins: presetDefault\n "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"import { extname, basename } from 'path';\nimport { statSync, readFileSync } from 'fs';\nimport { optimize } from 'svgo';\n\nconst presetDefault = [\n {\n name: 'preset-default',\n params: {\n overrides: {\n sortAttrs: true,\n removeDimensions: true\n }\n }\n },\n {\n name: 'removeAttrs',\n params: {\n attrs: '(fill|stroke|class)'\n }\n }\n];\n\n\nexport default function optimizeSvg(files) {\n const optimizedSvgData = [];\n for (const filePath of files) {\n if (statSync(filePath).isFile() && extname(filePath) === '.svg') {\n const data = readFileSync(filePath, 'utf-8');\n const svgData = optimize(data, { path: filePath, plugins: presetDefault });\n optimizedSvgData.push({\n fileName: basename(filePath),\n ...svgData\n });\n }\n }\n return Promise.all(optimizedSvgData);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-icon/src/runtime/Icon/Icon.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-icon/src/runtime/Icon/index.js","messages":[{"ruleId":"import/no-named-as-default","severity":2,"message":"Parse errors in imported module './Icon': Unexpected token, expected \"}\" (9:8) (9:8)","line":1,"column":18,"nodeType":"Literal","endLine":1,"endColumn":26},{"ruleId":"import/no-named-as-default-member","severity":2,"message":"Parse errors in imported module './Icon': Unexpected token, expected \"}\" (9:8) (9:8)","line":1,"column":18,"nodeType":"Literal","endLine":1,"endColumn":26}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import Icon from './Icon';\nimport './icon.less';\n\nexport default Icon;\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-jest/helpers/transformers/javascript.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········['@babel/preset-env',·{·targets:·{·node:·'current'·}·}]⏎····` with `['@babel/preset-env',·{·targets:·{·node:·'current'·}·}]`","line":4,"column":15,"nodeType":null,"messageId":"replace","endLine":6,"endColumn":5,"fix":{"range":[111,180],"text":"['@babel/preset-env', { targets: { node: 'current' } }]"}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"const babelJest = require('babel-jest').default;\n\nmodule.exports = babelJest.createTransformer({\n presets: [\n ['@babel/preset-env', { targets: { node: 'current' } }]\n ],\n plugins: ['@vue/babel-plugin-jsx'],\n babelrc: false,\n configFile: false\n});\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-jest/src/createDefaultConfig.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎················'../helpers/transformers/javascript'⏎············` with `'../helpers/transformers/javascript'`","line":33,"column":44,"nodeType":null,"messageId":"replace","endLine":35,"endColumn":13,"fix":{"range":[1090,1156],"text":"'../helpers/transformers/javascript'"}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { existsSync } from 'fs';\nimport { join } from 'path';\n\nexport default (cwd, args) => {\n const testMatchTypes = ['spec', 'test'];\n if (args.e2e) {\n testMatchTypes.push('e2e');\n }\n const hasSrc = existsSync(join(cwd, 'src'));\n return {\n collectCoverageFrom: [\n 'index.{js,jsx,vue}',\n hasSrc && 'src/**/*.{js,jsx,vue}',\n '!**/.fes/**',\n '!**/typings/**',\n '!**/types/**',\n '!**/fixtures/**',\n '!**/examples/**',\n '!**/*.d.ts'\n ].filter(Boolean),\n moduleFileExtensions: [\n 'js',\n 'jsx',\n 'json',\n // tell Jest to handle *.vue files\n 'vue'\n ],\n transform: {\n // process *.vue files with vue-jest\n '^.+\\\\.vue$': require.resolve('vue3-jest'),\n '.+\\\\.(css|styl|less|sass|scss|jpg|jpeg|png|svg|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':\n require.resolve('jest-transform-stub'),\n '^.+\\\\.jsx?$': require.resolve(\n '../helpers/transformers/javascript'\n )\n },\n transformIgnorePatterns: ['/node_modules/'],\n // support the same @ -> src alias mapping in source code\n moduleNameMapper: {\n '^@/(.*)$': '/src/$1'\n },\n testMatch: [\n `**/tests/**/*.(${testMatchTypes.join('|')}).[jt]s?(x)`,\n '**/__tests__/**/*.[jt]s?(x)'\n ],\n // https://github.com/facebook/jest/issues/6766\n testURL: 'http://localhost/',\n watchPlugins: [\n require.resolve('jest-watch-typeahead/filename'),\n require.resolve('jest-watch-typeahead/testname')\n ],\n verbose: true\n };\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-jest/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·utils:·{·mergeConfig·},·cwd` with `⏎········utils:·{·mergeConfig·},⏎········cwd⏎···`","line":31,"column":12,"nodeType":null,"messageId":"replace","endLine":31,"endColumn":40,"fix":{"range":[854,882],"text":"\n utils: { mergeConfig },\n cwd\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···············`","line":48,"column":35,"nodeType":null,"messageId":"insert","endLine":48,"endColumn":35,"fix":{"range":[1416,1416],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·logger.log(`config·from·jest.config.js:·${JSON.stringify(userJestConfig)}`` with `⏎················logger.log(⏎····················`config·from·jest.config.js:·${JSON.stringify(⏎························userJestConfig⏎····················)}`⏎················`","line":49,"column":26,"nodeType":null,"messageId":"replace","endLine":49,"endColumn":101,"fix":{"range":[1505,1580],"text":"\n logger.log(\n `config from jest.config.js: ${JSON.stringify(\n userJestConfig\n )}`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···············`","line":53,"column":38,"nodeType":null,"messageId":"insert","endLine":53,"endColumn":38,"fix":{"range":[1734,1734],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·logger.log(`jest·config·from·package.json:·${JSON.stringify(packageJestConfig)}`` with `⏎················logger.log(⏎····················`jest·config·from·package.json:·${JSON.stringify(⏎························packageJestConfig⏎····················)}`⏎················`","line":54,"column":26,"nodeType":null,"messageId":"replace","endLine":54,"endColumn":107,"fix":{"range":[1822,1903],"text":"\n logger.log(\n `jest config from package.json: ${JSON.stringify(\n packageJestConfig\n )}`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···············`","line":74,"column":26,"nodeType":null,"messageId":"insert","endLine":74,"endColumn":26,"fix":{"range":[2694,2694],"text":"\n "}}],"errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":7,"fixableWarningCount":0,"source":"\nimport assert from 'assert';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport { Logger } from '@fesjs/compiler';\n// jest-cli 不在暴露 options,维护一份本地的 options\nimport { options as CliOptions } from './jestArgs';\nimport createDefaultConfig from './createDefaultConfig';\n\nconst logger = new Logger('fes:plugin-unit-jest');\n\nfunction getCommandOptiton() {\n const opts = [];\n Object.keys(CliOptions).forEach((key) => {\n const option = CliOptions[key];\n const opt = {};\n if (key !== 'version') {\n if (option.alias) {\n opt.name = `-${option.alias} --${key}`;\n } else {\n opt.name = `--${key}`;\n }\n opt.description = option.description;\n opts.push(opt);\n }\n });\n return opts;\n}\n\nexport default function (api) {\n const { utils: { mergeConfig }, cwd } = api;\n\n api.registerCommand({\n command: 'test',\n description: 'run unit tests with jest',\n options: getCommandOptiton(),\n async fn({ args }) {\n process.env.NODE_ENV = 'test';\n\n if (args._[0] === 'test') {\n args._.shift();\n }\n\n args.debug && logger.log(`args: ${JSON.stringify(args)}`);\n\n // Read config from cwd/jest.config.js\n const userJestConfigFile = join(cwd, 'jest.config.js');\n const userJestConfig = existsSync(userJestConfigFile) && require(userJestConfigFile);\n args.debug && logger.log(`config from jest.config.js: ${JSON.stringify(userJestConfig)}`);\n\n // Read jest config from package.json\n const packageJSONPath = join(cwd, 'package.json');\n const packageJestConfig = existsSync(packageJSONPath) && require(packageJSONPath).jest;\n args.debug && logger.log(`jest config from package.json: ${JSON.stringify(packageJestConfig)}`);\n\n // Merge configs\n // user config and args config could have value function for modification\n const config = mergeConfig(\n createDefaultConfig(cwd, args),\n packageJestConfig,\n userJestConfig\n );\n args.debug && logger.log(`final config: ${JSON.stringify(config)}`);\n\n // Generate jest options\n const argsConfig = Object.keys(CliOptions).reduce((prev, name) => {\n if (args[name]) prev[name] = args[name];\n\n // Convert alias args into real one\n const { alias } = CliOptions[name];\n if (alias && args[alias]) prev[name] = args[alias];\n return prev;\n }, {});\n args.debug && logger.log(`config from args: ${JSON.stringify(argsConfig)}`);\n\n // 比较大的库建议使用require,使用时才加载,提升fes命令的效率\n const { runCLI } = require('jest');\n // Run jest\n const result = await runCLI(\n {\n // @ts-ignore\n _: args._ || [],\n // @ts-ignore\n $0: args.$0 || '',\n // 必须是单独的 config 配置,值为 string,否则不生效\n // @ts-ignore\n config: JSON.stringify(config),\n ...argsConfig\n },\n [cwd]\n );\n args.debug && logger.log(result);\n\n // Throw error when run failed\n assert(result.results.success, 'Test with jest failed');\n }\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-jest/src/jestArgs.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···`","line":8,"column":21,"nodeType":null,"messageId":"insert","endLine":8,"endColumn":21,"fix":{"range":[231,231],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'The·opposite·of·`onlyChanged`.·If·`onlyChanged`·is·set·by·'` with `·····'The·opposite·of·`onlyChanged`.·If·`onlyChanged`·is·set·by·'·+`","line":15,"column":8,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":68,"fix":{"range":[464,524],"text":" 'The opposite of `onlyChanged`. If `onlyChanged` is set by ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'default,·running·jest·with·`--all`·will·force·Jest·to·run·all·tests·'` with `·····'default,·running·jest·with·`--all`·will·force·Jest·to·run·all·tests·'·+`","line":16,"column":8,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":80,"fix":{"range":[532,604],"text":" 'default, running jest with `--all` will force Jest to run all tests ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":17,"column":8,"nodeType":null,"messageId":"replace","endLine":17,"endColumn":9,"fix":{"range":[612,613],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·····`","line":27,"column":8,"nodeType":null,"messageId":"insert","endLine":27,"endColumn":8,"fix":{"range":[866,866],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Respect·the·\"browser\"·field·in·package.json·'` with `·····'Respect·the·\"browser\"·field·in·package.json·'·+`","line":32,"column":8,"nodeType":null,"messageId":"replace","endLine":32,"endColumn":54,"fix":{"range":[1010,1056],"text":" 'Respect the \"browser\" field in package.json ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'when·resolving·modules.·Some·packages·export·different·versions·'` with `············'when·resolving·modules.·Some·packages·export·different·versions·'·+`","line":33,"column":1,"nodeType":null,"messageId":"replace","endLine":33,"endColumn":76,"fix":{"range":[1057,1132],"text":" 'when resolving modules. Some packages export different versions ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":34,"column":8,"nodeType":null,"messageId":"replace","endLine":34,"endColumn":9,"fix":{"range":[1140,1141],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Whether·to·use·the·transform·cache.·Disable·the·cache·'` with `·····'Whether·to·use·the·transform·cache.·Disable·the·cache·'·+`","line":39,"column":8,"nodeType":null,"messageId":"replace","endLine":39,"endColumn":64,"fix":{"range":[1278,1334],"text":" 'Whether to use the transform cache. Disable the cache ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":40,"column":8,"nodeType":null,"messageId":"replace","endLine":40,"endColumn":9,"fix":{"range":[1342,1343],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'The·directory·where·Jest·should·store·its·cached·'` with `·····'The·directory·where·Jest·should·store·its·cached·'·+`","line":45,"column":8,"nodeType":null,"messageId":"replace","endLine":45,"endColumn":59,"fix":{"range":[1446,1497],"text":" 'The directory where Jest should store its cached ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":46,"column":8,"nodeType":null,"messageId":"replace","endLine":46,"endColumn":9,"fix":{"range":[1505,1506],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Runs·tests·related·to·the·current·changes·and·the·changes·made·in·the·'` with `·····'Runs·tests·related·to·the·current·changes·and·the·changes·made·in·the·'·+`","line":51,"column":8,"nodeType":null,"messageId":"replace","endLine":51,"endColumn":80,"fix":{"range":[1625,1697],"text":" 'Runs tests related to the current changes and the changes made in the ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":52,"column":8,"nodeType":null,"messageId":"replace","endLine":52,"endColumn":9,"fix":{"range":[1705,1706],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Runs·tests·related·to·the·changes·since·the·provided·branch.·If·the·'` with `·····'Runs·tests·related·to·the·changes·since·the·provided·branch.·If·the·'·+`","line":57,"column":8,"nodeType":null,"messageId":"replace","endLine":57,"endColumn":78,"fix":{"range":[1840,1910],"text":" 'Runs tests related to the changes since the provided branch. If the ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'current·branch·has·diverged·from·the·given·branch,·then·only·changes·'` with `·····'current·branch·has·diverged·from·the·given·branch,·then·only·changes·'·+`","line":58,"column":8,"nodeType":null,"messageId":"replace","endLine":58,"endColumn":81,"fix":{"range":[1918,1991],"text":" 'current branch has diverged from the given branch, then only changes ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":59,"column":8,"nodeType":null,"messageId":"replace","endLine":59,"endColumn":9,"fix":{"range":[1999,2000],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Whether·to·run·Jest·in·continuous·integration·(CI)·mode.·'` with `············'Whether·to·run·Jest·in·continuous·integration·(CI)·mode.·'·+`","line":65,"column":1,"nodeType":null,"messageId":"replace","endLine":65,"endColumn":67,"fix":{"range":[2150,2216],"text":" 'Whether to run Jest in continuous integration (CI) mode. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'This·option·is·on·by·default·in·most·popular·CI·environments.·It·will·'` with `·····'This·option·is·on·by·default·in·most·popular·CI·environments.·It·will·'·+`","line":66,"column":8,"nodeType":null,"messageId":"replace","endLine":66,"endColumn":82,"fix":{"range":[2224,2298],"text":" 'This option is on by default in most popular CI environments. It will ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":67,"column":8,"nodeType":null,"messageId":"replace","endLine":67,"endColumn":9,"fix":{"range":[2306,2307],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Clears·the·configured·Jest·cache·directory·and·then·exits.·'` with `············'Clears·the·configured·Jest·cache·directory·and·then·exits.·'·+`","line":72,"column":1,"nodeType":null,"messageId":"replace","endLine":72,"endColumn":69,"fix":{"range":[2447,2515],"text":" 'Clears the configured Jest cache directory and then exits. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":73,"column":8,"nodeType":null,"messageId":"replace","endLine":73,"endColumn":9,"fix":{"range":[2523,2524],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Automatically·clear·mock·calls·and·instances·between·every·'` with `············'Automatically·clear·mock·calls·and·instances·between·every·'·+`","line":78,"column":1,"nodeType":null,"messageId":"replace","endLine":78,"endColumn":69,"fix":{"range":[2658,2726],"text":" 'Automatically clear mock calls and instances between every ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":79,"column":1,"nodeType":null,"messageId":"replace","endLine":79,"endColumn":9,"fix":{"range":[2727,2735],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'A·glob·pattern·relative·to··matching·the·files·that·coverage·'` with `·····'A·glob·pattern·relative·to··matching·the·files·that·coverage·'·+`","line":88,"column":8,"nodeType":null,"messageId":"replace","endLine":88,"endColumn":80,"fix":{"range":[2993,3065],"text":" 'A glob pattern relative to matching the files that coverage ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":89,"column":8,"nodeType":null,"messageId":"replace","endLine":89,"endColumn":9,"fix":{"range":[3073,3074],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Forces·test·results·output·color·highlighting·(even·if·'` with `············'Forces·test·results·output·color·highlighting·(even·if·'·+`","line":99,"column":1,"nodeType":null,"messageId":"replace","endLine":99,"endColumn":65,"fix":{"range":[3336,3400],"text":" 'Forces test results output color highlighting (even if ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":100,"column":8,"nodeType":null,"messageId":"replace","endLine":100,"endColumn":9,"fix":{"range":[3408,3409],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'The·path·to·a·jest·config·file·specifying·how·to·find·'` with `·····'The·path·to·a·jest·config·file·specifying·how·to·find·'·+`","line":110,"column":8,"nodeType":null,"messageId":"replace","endLine":110,"endColumn":64,"fix":{"range":[3668,3724],"text":" 'The path to a jest config file specifying how to find ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'and·execute·tests.·If·no·rootDir·is·set·in·the·config,·the·directory·'` with `············'and·execute·tests.·If·no·rootDir·is·set·in·the·config,·the·directory·'·+`","line":111,"column":1,"nodeType":null,"messageId":"replace","endLine":111,"endColumn":81,"fix":{"range":[3725,3805],"text":" 'and execute tests. If no rootDir is set in the config, the directory ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'containing·the·config·file·is·assumed·to·be·the·rootDir·for·the·project.'` with `·····'containing·the·config·file·is·assumed·to·be·the·rootDir·for·the·project.'·+`","line":112,"column":8,"nodeType":null,"messageId":"replace","endLine":112,"endColumn":84,"fix":{"range":[3813,3889],"text":" 'containing the config file is assumed to be the rootDir for the project.' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":113,"column":8,"nodeType":null,"messageId":"replace","endLine":113,"endColumn":9,"fix":{"range":[3897,3898],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Indicates·that·test·coverage·information·should·be·'` with `············'Indicates·that·test·coverage·information·should·be·'·+`","line":118,"column":1,"nodeType":null,"messageId":"replace","endLine":118,"endColumn":61,"fix":{"range":[4045,4105],"text":" 'Indicates that test coverage information should be ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":119,"column":8,"nodeType":null,"messageId":"replace","endLine":119,"endColumn":9,"fix":{"range":[4113,4114],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":123,"column":21,"nodeType":null,"messageId":"insert","endLine":123,"endColumn":21,"fix":{"range":[4232,4232],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'An·array·of·regexp·pattern·strings·that·are·matched·'` with `·····'An·array·of·regexp·pattern·strings·that·are·matched·'·+`","line":128,"column":8,"nodeType":null,"messageId":"replace","endLine":128,"endColumn":62,"fix":{"range":[4387,4441],"text":" 'An array of regexp pattern strings that are matched ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'against·all·file·paths·before·executing·the·test.·If·the·file·path'` with `·····'against·all·file·paths·before·executing·the·test.·If·the·file·path'·+`","line":129,"column":8,"nodeType":null,"messageId":"replace","endLine":129,"endColumn":78,"fix":{"range":[4449,4519],"text":" 'against all file paths before executing the test. If the file path' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":130,"column":8,"nodeType":null,"messageId":"replace","endLine":130,"endColumn":9,"fix":{"range":[4527,4528],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'A·list·of·reporter·names·that·Jest·uses·when·writing·'` with `·····'A·list·of·reporter·names·that·Jest·uses·when·writing·'·+`","line":140,"column":8,"nodeType":null,"messageId":"replace","endLine":140,"endColumn":63,"fix":{"range":[4839,4894],"text":" 'A list of reporter names that Jest uses when writing ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":141,"column":8,"nodeType":null,"messageId":"replace","endLine":141,"endColumn":9,"fix":{"range":[4902,4903],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'A·JSON·string·with·which·will·be·used·to·configure·'` with `·····'A·JSON·string·with·which·will·be·used·to·configure·'·+`","line":147,"column":8,"nodeType":null,"messageId":"replace","endLine":147,"endColumn":61,"fix":{"range":[5064,5117],"text":" 'A JSON string with which will be used to configure ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":148,"column":8,"nodeType":null,"messageId":"replace","endLine":148,"endColumn":9,"fix":{"range":[5125,5126],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'**EXPERIMENTAL**:·Detect·memory·leaks·in·tests.·After·executing·a·'` with `············'**EXPERIMENTAL**:·Detect·memory·leaks·in·tests.·After·executing·a·'·+`","line":157,"column":1,"nodeType":null,"messageId":"replace","endLine":157,"endColumn":76,"fix":{"range":[5364,5439],"text":" '**EXPERIMENTAL**: Detect memory leaks in tests. After executing a ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'test,·it·will·try·to·garbage·collect·the·global·object·used,·and·fail·'` with `············'test,·it·will·try·to·garbage·collect·the·global·object·used,·and·fail·'·+`","line":158,"column":1,"nodeType":null,"messageId":"replace","endLine":158,"endColumn":82,"fix":{"range":[5440,5521],"text":" 'test, it will try to garbage collect the global object used, and fail ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":159,"column":8,"nodeType":null,"messageId":"replace","endLine":159,"endColumn":9,"fix":{"range":[5529,5530],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Print·out·remaining·open·handles·preventing·Jest·from·exiting·at·the·'` with `············'Print·out·remaining·open·handles·preventing·Jest·from·exiting·at·the·'·+`","line":164,"column":1,"nodeType":null,"messageId":"replace","endLine":164,"endColumn":79,"fix":{"range":[5628,5706],"text":" 'Print out remaining open handles preventing Jest from exiting at the ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":165,"column":8,"nodeType":null,"messageId":"replace","endLine":165,"endColumn":9,"fix":{"range":[5714,5715],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'The·test·environment·used·for·all·tests.·This·can·point·to·'` with `·····'The·test·environment·used·for·all·tests.·This·can·point·to·'·+`","line":170,"column":8,"nodeType":null,"messageId":"replace","endLine":170,"endColumn":69,"fix":{"range":[5829,5890],"text":" 'The test environment used for all tests. This can point to ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'any·file·or·node·module.·Examples:·`jsdom`,·`node`·or·'` with `·····'any·file·or·node·module.·Examples:·`jsdom`,·`node`·or·'·+`","line":171,"column":8,"nodeType":null,"messageId":"replace","endLine":171,"endColumn":66,"fix":{"range":[5898,5956],"text":" 'any file or node module. Examples: `jsdom`, `node` or ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":172,"column":8,"nodeType":null,"messageId":"replace","endLine":172,"endColumn":9,"fix":{"range":[5964,5965],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":176,"column":21,"nodeType":null,"messageId":"insert","endLine":176,"endColumn":21,"fix":{"range":[6072,6072],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Path·to·a·module·exporting·a·filtering·function.·This·method·receives·'` with `·····'Path·to·a·module·exporting·a·filtering·function.·This·method·receives·'·+`","line":186,"column":8,"nodeType":null,"messageId":"replace","endLine":186,"endColumn":80,"fix":{"range":[6350,6422],"text":" 'Path to a module exporting a filtering function. This method receives ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'a·list·of·tests·which·can·be·manipulated·to·exclude·tests·from·'` with `·····'a·list·of·tests·which·can·be·manipulated·to·exclude·tests·from·'·+`","line":187,"column":8,"nodeType":null,"messageId":"replace","endLine":187,"endColumn":75,"fix":{"range":[6430,6497],"text":" 'a list of tests which can be manipulated to exclude tests from ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'running.·Especially·useful·when·used·in·conjunction·with·a·testing·'` with `·····'running.·Especially·useful·when·used·in·conjunction·with·a·testing·'·+`","line":188,"column":8,"nodeType":null,"messageId":"replace","endLine":188,"endColumn":79,"fix":{"range":[6505,6576],"text":" 'running. Especially useful when used in conjunction with a testing ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":189,"column":8,"nodeType":null,"messageId":"replace","endLine":189,"endColumn":9,"fix":{"range":[6584,6585],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Find·related·tests·for·a·list·of·source·files·that·were·'` with `············'Find·related·tests·for·a·list·of·source·files·that·were·'·+`","line":194,"column":1,"nodeType":null,"messageId":"replace","endLine":194,"endColumn":66,"fix":{"range":[6709,6774],"text":" 'Find related tests for a list of source files that were ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'passed·in·as·arguments.·Useful·for·pre-commit·hook·integration·to·run·'` with `············'passed·in·as·arguments.·Useful·for·pre-commit·hook·integration·to·run·'·+`","line":195,"column":1,"nodeType":null,"messageId":"replace","endLine":195,"endColumn":82,"fix":{"range":[6775,6856],"text":" 'passed in as arguments. Useful for pre-commit hook integration to run ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":196,"column":8,"nodeType":null,"messageId":"replace","endLine":196,"endColumn":9,"fix":{"range":[6864,6865],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Force·Jest·to·exit·after·all·tests·have·completed·running.·'` with `············'Force·Jest·to·exit·after·all·tests·have·completed·running.·'·+`","line":201,"column":1,"nodeType":null,"messageId":"replace","endLine":201,"endColumn":69,"fix":{"range":[6977,7045],"text":" 'Force Jest to exit after all tests have completed running. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'This·is·useful·when·resources·set·up·by·test·code·cannot·be·'` with `·····'This·is·useful·when·resources·set·up·by·test·code·cannot·be·'·+`","line":202,"column":8,"nodeType":null,"messageId":"replace","endLine":202,"endColumn":72,"fix":{"range":[7053,7117],"text":" 'This is useful when resources set up by test code cannot be ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":203,"column":8,"nodeType":null,"messageId":"replace","endLine":203,"endColumn":9,"fix":{"range":[7125,7126],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'A·JSON·string·with·map·of·global·variables·that·need·'` with `············'A·JSON·string·with·map·of·global·variables·that·need·'·+`","line":216,"column":1,"nodeType":null,"messageId":"replace","endLine":216,"endColumn":63,"fix":{"range":[7466,7528],"text":" 'A JSON string with map of global variables that need ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":217,"column":8,"nodeType":null,"messageId":"replace","endLine":217,"endColumn":9,"fix":{"range":[7536,7537],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·····`","line":222,"column":1,"nodeType":null,"messageId":"insert","endLine":222,"endColumn":1,"fix":{"range":[7647,7647],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Prints·the·test·results·in·JSON.·This·mode·will·send·all·'` with `············'Prints·the·test·results·in·JSON.·This·mode·will·send·all·'·+`","line":235,"column":1,"nodeType":null,"messageId":"replace","endLine":235,"endColumn":67,"fix":{"range":[8006,8072],"text":" 'Prints the test results in JSON. This mode will send all ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":236,"column":8,"nodeType":null,"messageId":"replace","endLine":236,"endColumn":9,"fix":{"range":[8080,8081],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Run·all·tests·affected·by·file·changes·in·the·last·commit·made.·'` with `·····'Run·all·tests·affected·by·file·changes·in·the·last·commit·made.·'·+`","line":241,"column":8,"nodeType":null,"messageId":"replace","endLine":241,"endColumn":74,"fix":{"range":[8209,8275],"text":" 'Run all tests affected by file changes in the last commit made. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":242,"column":1,"nodeType":null,"messageId":"replace","endLine":242,"endColumn":9,"fix":{"range":[8276,8284],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Lists·all·tests·Jest·will·run·given·the·arguments·and·'` with `············'Lists·all·tests·Jest·will·run·given·the·arguments·and·'·+`","line":247,"column":1,"nodeType":null,"messageId":"replace","endLine":247,"endColumn":64,"fix":{"range":[8395,8458],"text":" 'Lists all tests Jest will run given the arguments and ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'exits.·Most·useful·in·a·CI·system·together·with·`--findRelatedTests`·'` with `·····'exits.·Most·useful·in·a·CI·system·together·with·`--findRelatedTests`·'·+`","line":248,"column":8,"nodeType":null,"messageId":"replace","endLine":248,"endColumn":81,"fix":{"range":[8466,8539],"text":" 'exits. Most useful in a CI system together with `--findRelatedTests` ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":249,"column":8,"nodeType":null,"messageId":"replace","endLine":249,"endColumn":9,"fix":{"range":[8547,8548],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Logs·the·heap·usage·after·every·test.·Useful·to·debug·'` with `············'Logs·the·heap·usage·after·every·test.·Useful·to·debug·'·+`","line":254,"column":1,"nodeType":null,"messageId":"replace","endLine":254,"endColumn":64,"fix":{"range":[8685,8748],"text":" 'Logs the heap usage after every test. Useful to debug ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'memory·leaks.·Use·together·with·`--runInBand`·and·`--expose-gc`·in·'` with `············'memory·leaks.·Use·together·with·`--runInBand`·and·`--expose-gc`·in·'·+`","line":255,"column":1,"nodeType":null,"messageId":"replace","endLine":255,"endColumn":79,"fix":{"range":[8749,8827],"text":" 'memory leaks. Use together with `--runInBand` and `--expose-gc` in ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":256,"column":8,"nodeType":null,"messageId":"replace","endLine":256,"endColumn":9,"fix":{"range":[8835,8836],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Specifies·the·maximum·number·of·tests·that·are·allowed·to·run'` with `············'Specifies·the·maximum·number·of·tests·that·are·allowed·to·run'·+`","line":261,"column":1,"nodeType":null,"messageId":"replace","endLine":261,"endColumn":71,"fix":{"range":[8920,8990],"text":" 'Specifies the maximum number of tests that are allowed to run' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":262,"column":8,"nodeType":null,"messageId":"replace","endLine":262,"endColumn":9,"fix":{"range":[8998,8999],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Specifies·the·maximum·number·of·workers·the·worker-pool·'` with `·····'Specifies·the·maximum·number·of·workers·the·worker-pool·'·+`","line":268,"column":8,"nodeType":null,"messageId":"replace","endLine":268,"endColumn":66,"fix":{"range":[9162,9220],"text":" 'Specifies the maximum number of workers the worker-pool ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'will·spawn·for·running·tests.·This·defaults·to·the·number·of·the·'` with `············'will·spawn·for·running·tests.·This·defaults·to·the·number·of·the·'·+`","line":269,"column":1,"nodeType":null,"messageId":"replace","endLine":269,"endColumn":77,"fix":{"range":[9221,9297],"text":" 'will spawn for running tests. This defaults to the number of the ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'cores·available·on·your·machine.·(its·usually·best·not·to·override·'` with `············'cores·available·on·your·machine.·(its·usually·best·not·to·override·'·+`","line":270,"column":1,"nodeType":null,"messageId":"replace","endLine":270,"endColumn":79,"fix":{"range":[9298,9376],"text":" 'cores available on your machine. (its usually best not to override ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":271,"column":8,"nodeType":null,"messageId":"replace","endLine":271,"endColumn":9,"fix":{"range":[9384,9385],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'An·array·of·directory·names·to·be·searched·recursively·'` with `·····'An·array·of·directory·names·to·be·searched·recursively·'·+`","line":276,"column":8,"nodeType":null,"messageId":"replace","endLine":276,"endColumn":65,"fix":{"range":[9486,9543],"text":" 'An array of directory names to be searched recursively ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":277,"column":1,"nodeType":null,"messageId":"replace","endLine":277,"endColumn":9,"fix":{"range":[9544,9552],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'An·array·of·file·extensions·your·modules·use.·If·you·'` with `·····'An·array·of·file·extensions·your·modules·use.·If·you·'·+`","line":283,"column":8,"nodeType":null,"messageId":"replace","endLine":283,"endColumn":63,"fix":{"range":[9704,9759],"text":" 'An array of file extensions your modules use. If you ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'require·modules·without·specifying·a·file·extension,·these·are·the·'` with `·····'require·modules·without·specifying·a·file·extension,·these·are·the·'·+`","line":284,"column":8,"nodeType":null,"messageId":"replace","endLine":284,"endColumn":79,"fix":{"range":[9767,9838],"text":" 'require modules without specifying a file extension, these are the ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":285,"column":8,"nodeType":null,"messageId":"replace","endLine":285,"endColumn":9,"fix":{"range":[9846,9847],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'A·JSON·string·with·a·map·from·regular·expressions·to·'` with `············'A·JSON·string·with·a·map·from·regular·expressions·to·'·+`","line":291,"column":1,"nodeType":null,"messageId":"replace","endLine":291,"endColumn":63,"fix":{"range":[9979,10041],"text":" 'A JSON string with a map from regular expressions to ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'module·names·or·to·arrays·of·module·names·that·allow·to·stub·'` with `············'module·names·or·to·arrays·of·module·names·that·allow·to·stub·'·+`","line":292,"column":1,"nodeType":null,"messageId":"replace","endLine":292,"endColumn":73,"fix":{"range":[10042,10114],"text":" 'module names or to arrays of module names that allow to stub ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":293,"column":8,"nodeType":null,"messageId":"replace","endLine":293,"endColumn":9,"fix":{"range":[10122,10123],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'An·array·of·regexp·pattern·strings·that·are·matched·'` with `·····'An·array·of·regexp·pattern·strings·that·are·matched·'·+`","line":298,"column":8,"nodeType":null,"messageId":"replace","endLine":298,"endColumn":62,"fix":{"range":[10275,10329],"text":" 'An array of regexp pattern strings that are matched ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'against·all·module·paths·before·those·paths·are·to·be·considered·'` with `············'against·all·module·paths·before·those·paths·are·to·be·considered·'·+`","line":299,"column":1,"nodeType":null,"messageId":"replace","endLine":299,"endColumn":77,"fix":{"range":[10330,10406],"text":" 'against all module paths before those paths are to be considered ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":300,"column":8,"nodeType":null,"messageId":"replace","endLine":300,"endColumn":9,"fix":{"range":[10414,10415],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'An·alternative·API·to·setting·the·NODE_PATH·env·variable,·'` with `············'An·alternative·API·to·setting·the·NODE_PATH·env·variable,·'·+`","line":306,"column":1,"nodeType":null,"messageId":"replace","endLine":306,"endColumn":68,"fix":{"range":[10542,10609],"text":" 'An alternative API to setting the NODE_PATH env variable, ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'modulePaths·is·an·array·of·absolute·paths·to·additional·locations·to·'` with `·····'modulePaths·is·an·array·of·absolute·paths·to·additional·locations·to·'·+`","line":307,"column":8,"nodeType":null,"messageId":"replace","endLine":307,"endColumn":81,"fix":{"range":[10617,10690],"text":" 'modulePaths is an array of absolute paths to additional locations to ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":308,"column":8,"nodeType":null,"messageId":"replace","endLine":308,"endColumn":9,"fix":{"range":[10698,10699],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":321,"column":21,"nodeType":null,"messageId":"insert","endLine":321,"endColumn":21,"fix":{"range":[11053,11053],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Attempts·to·identify·which·tests·to·run·based·on·which·'` with `·····'Attempts·to·identify·which·tests·to·run·based·on·which·'·+`","line":327,"column":8,"nodeType":null,"messageId":"replace","endLine":327,"endColumn":65,"fix":{"range":[11213,11270],"text":" 'Attempts to identify which tests to run based on which ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·\"files·have·changed·in·the·current·repository.·Only·works·if·you're·\"` with `············\"files·have·changed·in·the·current·repository.·Only·works·if·you're·\"·+`","line":328,"column":1,"nodeType":null,"messageId":"replace","endLine":328,"endColumn":79,"fix":{"range":[11271,11349],"text":" \"files have changed in the current repository. Only works if you're \" +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":329,"column":1,"nodeType":null,"messageId":"replace","endLine":329,"endColumn":9,"fix":{"range":[11350,11358],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Write·test·results·to·a·file·when·the·--json·option·is·'` with `·····'Write·test·results·to·a·file·when·the·--json·option·is·'·+`","line":339,"column":8,"nodeType":null,"messageId":"replace","endLine":339,"endColumn":65,"fix":{"range":[11638,11695],"text":" 'Write test results to a file when the --json option is ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":340,"column":8,"nodeType":null,"messageId":"replace","endLine":340,"endColumn":9,"fix":{"range":[11703,11704],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······` with `············`","line":345,"column":1,"nodeType":null,"messageId":"replace","endLine":345,"endColumn":8,"fix":{"range":[11798,11805],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":349,"column":21,"nodeType":null,"messageId":"insert","endLine":349,"endColumn":21,"fix":{"range":[11956,11956],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":353,"column":21,"nodeType":null,"messageId":"insert","endLine":353,"endColumn":21,"fix":{"range":[12088,12088],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'A·list·of·projects·that·use·Jest·to·run·all·tests·of·all·'` with `·····'A·list·of·projects·that·use·Jest·to·run·all·tests·of·all·'·+`","line":358,"column":8,"nodeType":null,"messageId":"replace","endLine":358,"endColumn":67,"fix":{"range":[12227,12286],"text":" 'A list of projects that use Jest to run all tests of all ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":359,"column":1,"nodeType":null,"messageId":"replace","endLine":359,"endColumn":9,"fix":{"range":[12287,12295],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Automatically·reset·mock·state·between·every·test.·'` with `·····'Automatically·reset·mock·state·between·every·test.·'·+`","line":370,"column":8,"nodeType":null,"messageId":"replace","endLine":370,"endColumn":61,"fix":{"range":[12574,12627],"text":" 'Automatically reset mock state between every test. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":371,"column":8,"nodeType":null,"messageId":"replace","endLine":371,"endColumn":9,"fix":{"range":[12635,12636],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'If·enabled,·the·module·registry·for·every·test·file·will·'` with `············'If·enabled,·the·module·registry·for·every·test·file·will·'·+`","line":376,"column":1,"nodeType":null,"messageId":"replace","endLine":376,"endColumn":67,"fix":{"range":[12774,12840],"text":" 'If enabled, the module registry for every test file will ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":377,"column":8,"nodeType":null,"messageId":"replace","endLine":377,"endColumn":9,"fix":{"range":[12848,12849],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Automatically·restore·mock·state·and·implementation·between·every·test.·'` with `·····'Automatically·restore·mock·state·and·implementation·between·every·test.·'·+`","line":386,"column":8,"nodeType":null,"messageId":"replace","endLine":386,"endColumn":82,"fix":{"range":[13105,13179],"text":" 'Automatically restore mock state and implementation between every test. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":387,"column":8,"nodeType":null,"messageId":"replace","endLine":387,"endColumn":9,"fix":{"range":[13187,13188],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'The·root·directory·that·Jest·should·scan·for·tests·and·'` with `············'The·root·directory·that·Jest·should·scan·for·tests·and·'·+`","line":392,"column":1,"nodeType":null,"messageId":"replace","endLine":392,"endColumn":65,"fix":{"range":[13323,13387],"text":" 'The root directory that Jest should scan for tests and ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":393,"column":8,"nodeType":null,"messageId":"replace","endLine":393,"endColumn":9,"fix":{"range":[13395,13396],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'A·list·of·paths·to·directories·that·Jest·should·use·to·'` with `············'A·list·of·paths·to·directories·that·Jest·should·use·to·'·+`","line":398,"column":1,"nodeType":null,"messageId":"replace","endLine":398,"endColumn":65,"fix":{"range":[13480,13544],"text":" 'A list of paths to directories that Jest should use to ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":399,"column":8,"nodeType":null,"messageId":"replace","endLine":399,"endColumn":9,"fix":{"range":[13552,13553],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Run·all·tests·serially·in·the·current·process·(rather·than·'` with `·····'Run·all·tests·serially·in·the·current·process·(rather·than·'·+`","line":406,"column":8,"nodeType":null,"messageId":"replace","endLine":406,"endColumn":69,"fix":{"range":[13694,13755],"text":" 'Run all tests serially in the current process (rather than ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'creating·a·worker·pool·of·child·processes·that·run·tests).·This·'` with `·····'creating·a·worker·pool·of·child·processes·that·run·tests).·This·'·+`","line":407,"column":8,"nodeType":null,"messageId":"replace","endLine":407,"endColumn":76,"fix":{"range":[13763,13831],"text":" 'creating a worker pool of child processes that run tests). This ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'is·sometimes·useful·for·debugging,·but·such·use·cases·are·pretty·'` with `·····'is·sometimes·useful·for·debugging,·but·such·use·cases·are·pretty·'·+`","line":408,"column":8,"nodeType":null,"messageId":"replace","endLine":408,"endColumn":77,"fix":{"range":[13839,13908],"text":" 'is sometimes useful for debugging, but such use cases are pretty ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":409,"column":1,"nodeType":null,"messageId":"replace","endLine":409,"endColumn":9,"fix":{"range":[13909,13917],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Used·when·provided·patterns·are·exact·file·paths.·This·avoids·'` with `·····'Used·when·provided·patterns·are·exact·file·paths.·This·avoids·'·+`","line":414,"column":8,"nodeType":null,"messageId":"replace","endLine":414,"endColumn":72,"fix":{"range":[14008,14072],"text":" 'Used when provided patterns are exact file paths. This avoids ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'converting·them·into·a·regular·expression·and·matching·it·against·'` with `············'converting·them·into·a·regular·expression·and·matching·it·against·'·+`","line":415,"column":1,"nodeType":null,"messageId":"replace","endLine":415,"endColumn":78,"fix":{"range":[14073,14150],"text":" 'converting them into a regular expression and matching it against ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":416,"column":1,"nodeType":null,"messageId":"replace","endLine":416,"endColumn":9,"fix":{"range":[14151,14159],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·····`","line":421,"column":1,"nodeType":null,"messageId":"insert","endLine":421,"endColumn":1,"fix":{"range":[14248,14248],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Run·only·the·tests·of·the·specified·projects.'` with `·····'Run·only·the·tests·of·the·specified·projects.'·+`","line":426,"column":8,"nodeType":null,"messageId":"replace","endLine":426,"endColumn":55,"fix":{"range":[14407,14454],"text":" 'Run only the tests of the specified projects.' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":427,"column":1,"nodeType":null,"messageId":"replace","endLine":427,"endColumn":9,"fix":{"range":[14455,14463],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'A·list·of·paths·to·modules·that·run·some·code·to·configure·or·'` with `·····'A·list·of·paths·to·modules·that·run·some·code·to·configure·or·'·+`","line":433,"column":8,"nodeType":null,"messageId":"replace","endLine":433,"endColumn":72,"fix":{"range":[14649,14713],"text":" 'A list of paths to modules that run some code to configure or ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":434,"column":8,"nodeType":null,"messageId":"replace","endLine":434,"endColumn":9,"fix":{"range":[14721,14722],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'A·list·of·paths·to·modules·that·run·some·code·to·configure·or·'` with `············'A·list·of·paths·to·modules·that·run·some·code·to·configure·or·'·+`","line":440,"column":1,"nodeType":null,"messageId":"replace","endLine":440,"endColumn":72,"fix":{"range":[14874,14945],"text":" 'A list of paths to modules that run some code to configure or ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":441,"column":8,"nodeType":null,"messageId":"replace","endLine":441,"endColumn":9,"fix":{"range":[14953,14954],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":450,"column":21,"nodeType":null,"messageId":"insert","endLine":450,"endColumn":21,"fix":{"range":[15202,15202],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Disables·the·filter·provided·by·--filter.·Useful·for·CI·jobs,·or·'` with `·····'Disables·the·filter·provided·by·--filter.·Useful·for·CI·jobs,·or·'·+`","line":455,"column":8,"nodeType":null,"messageId":"replace","endLine":455,"endColumn":75,"fix":{"range":[15341,15408],"text":" 'Disables the filter provided by --filter. Useful for CI jobs, or ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":456,"column":8,"nodeType":null,"messageId":"replace","endLine":456,"endColumn":9,"fix":{"range":[15416,15417],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'A·list·of·paths·to·snapshot·serializer·modules·Jest·should·'` with `············'A·list·of·paths·to·snapshot·serializer·modules·Jest·should·'·+`","line":461,"column":1,"nodeType":null,"messageId":"replace","endLine":461,"endColumn":69,"fix":{"range":[15537,15605],"text":" 'A list of paths to snapshot serializer modules Jest should ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":462,"column":8,"nodeType":null,"messageId":"replace","endLine":462,"endColumn":9,"fix":{"range":[15613,15614],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Test·environment·options·that·will·be·passed·to·the·testEnvironment.·'` with `·····'Test·environment·options·that·will·be·passed·to·the·testEnvironment.·'·+`","line":472,"column":8,"nodeType":null,"messageId":"replace","endLine":472,"endColumn":79,"fix":{"range":[15846,15917],"text":" 'Test environment options that will be passed to the testEnvironment. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":473,"column":8,"nodeType":null,"messageId":"replace","endLine":473,"endColumn":9,"fix":{"range":[15925,15926],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":491,"column":21,"nodeType":null,"messageId":"insert","endLine":491,"endColumn":21,"fix":{"range":[16496,16496],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'An·array·of·regexp·pattern·strings·that·are·matched·'` with `············'An·array·of·regexp·pattern·strings·that·are·matched·'·+`","line":496,"column":1,"nodeType":null,"messageId":"replace","endLine":496,"endColumn":62,"fix":{"range":[16640,16701],"text":" 'An array of regexp pattern strings that are matched ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'against·all·test·paths·before·executing·the·test.·If·the·test·path·'` with `·····'against·all·test·paths·before·executing·the·test.·If·the·test·path·'·+`","line":497,"column":8,"nodeType":null,"messageId":"replace","endLine":497,"endColumn":79,"fix":{"range":[16709,16780],"text":" 'against all test paths before executing the test. If the test path ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":498,"column":8,"nodeType":null,"messageId":"replace","endLine":498,"endColumn":9,"fix":{"range":[16788,16789],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'A·regexp·pattern·string·that·is·matched·against·all·tests·'` with `············'A·regexp·pattern·string·that·is·matched·against·all·tests·'·+`","line":504,"column":1,"nodeType":null,"messageId":"replace","endLine":504,"endColumn":68,"fix":{"range":[16937,17004],"text":" 'A regexp pattern string that is matched against all tests ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":505,"column":1,"nodeType":null,"messageId":"replace","endLine":505,"endColumn":9,"fix":{"range":[17005,17013],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·····`","line":511,"column":1,"nodeType":null,"messageId":"insert","endLine":511,"endColumn":1,"fix":{"range":[17139,17139],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'Allows·the·use·of·a·custom·results·processor.·'` with `············'Allows·the·use·of·a·custom·results·processor.·'·+`","line":517,"column":1,"nodeType":null,"messageId":"replace","endLine":517,"endColumn":56,"fix":{"range":[17330,17385],"text":" 'Allows the use of a custom results processor. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'This·processor·must·be·a·node·module·that·exports·'` with `·····'This·processor·must·be·a·node·module·that·exports·'·+`","line":518,"column":8,"nodeType":null,"messageId":"replace","endLine":518,"endColumn":62,"fix":{"range":[17393,17447],"text":" 'This processor must be a node module that exports ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":519,"column":8,"nodeType":null,"messageId":"replace","endLine":519,"endColumn":9,"fix":{"range":[17455,17456],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Allows·to·specify·a·custom·test·runner.·The·default·is'` with `·····'Allows·to·specify·a·custom·test·runner.·The·default·is'·+`","line":524,"column":8,"nodeType":null,"messageId":"replace","endLine":524,"endColumn":64,"fix":{"range":[17598,17654],"text":" 'Allows to specify a custom test runner. The default is' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'·`jest-circus/runner`.·A·path·to·a·custom·test·runner·can·be·provided:'` with `············'·`jest-circus/runner`.·A·path·to·a·custom·test·runner·can·be·provided:'·+`","line":525,"column":1,"nodeType":null,"messageId":"replace","endLine":525,"endColumn":82,"fix":{"range":[17655,17736],"text":" ' `jest-circus/runner`. A path to a custom test runner can be provided:' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":526,"column":8,"nodeType":null,"messageId":"replace","endLine":526,"endColumn":9,"fix":{"range":[17744,17745],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Allows·to·specify·a·custom·test·sequencer.·The·default·is·'` with `·····'Allows·to·specify·a·custom·test·sequencer.·The·default·is·'·+`","line":531,"column":8,"nodeType":null,"messageId":"replace","endLine":531,"endColumn":68,"fix":{"range":[17864,17924],"text":" 'Allows to specify a custom test sequencer. The default is ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'`@jest/test-sequencer`.·A·path·to·a·custom·test·sequencer·can·be·'` with `·····'`@jest/test-sequencer`.·A·path·to·a·custom·test·sequencer·can·be·'·+`","line":532,"column":8,"nodeType":null,"messageId":"replace","endLine":532,"endColumn":77,"fix":{"range":[17932,18001],"text":" '`@jest/test-sequencer`. A path to a custom test sequencer can be ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":533,"column":1,"nodeType":null,"messageId":"replace","endLine":533,"endColumn":9,"fix":{"range":[18002,18010],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Setting·this·value·to·fake·allows·the·use·of·fake·timers·'` with `·····'Setting·this·value·to·fake·allows·the·use·of·fake·timers·'·+`","line":546,"column":8,"nodeType":null,"messageId":"replace","endLine":546,"endColumn":67,"fix":{"range":[18380,18439],"text":" 'Setting this value to fake allows the use of fake timers ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":547,"column":8,"nodeType":null,"messageId":"replace","endLine":547,"endColumn":9,"fix":{"range":[18447,18448],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'A·JSON·string·which·maps·from·regular·expressions·to·paths·'` with `············'A·JSON·string·which·maps·from·regular·expressions·to·paths·'·+`","line":552,"column":1,"nodeType":null,"messageId":"replace","endLine":552,"endColumn":69,"fix":{"range":[18554,18622],"text":" 'A JSON string which maps from regular expressions to paths ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":553,"column":8,"nodeType":null,"messageId":"replace","endLine":553,"endColumn":9,"fix":{"range":[18630,18631],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'An·array·of·regexp·pattern·strings·that·are·matched·'` with `·····'An·array·of·regexp·pattern·strings·that·are·matched·'·+`","line":558,"column":8,"nodeType":null,"messageId":"replace","endLine":558,"endColumn":62,"fix":{"range":[18741,18795],"text":" 'An array of regexp pattern strings that are matched ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":559,"column":8,"nodeType":null,"messageId":"replace","endLine":559,"endColumn":9,"fix":{"range":[18803,18804],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'An·array·of·regexp·pattern·strings·that·are·matched·'` with `·····'An·array·of·regexp·pattern·strings·that·are·matched·'·+`","line":565,"column":8,"nodeType":null,"messageId":"replace","endLine":565,"endColumn":62,"fix":{"range":[18974,19028],"text":" 'An array of regexp pattern strings that are matched ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'against·all·modules·before·the·module·loader·will·automatically·'` with `·····'against·all·modules·before·the·module·loader·will·automatically·'·+`","line":566,"column":8,"nodeType":null,"messageId":"replace","endLine":566,"endColumn":76,"fix":{"range":[19036,19104],"text":" 'against all modules before the module loader will automatically ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":567,"column":8,"nodeType":null,"messageId":"replace","endLine":567,"endColumn":9,"fix":{"range":[19112,19113],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Use·this·flag·to·re-record·snapshots.·'` with `·····'Use·this·flag·to·re-record·snapshots.·'·+`","line":574,"column":8,"nodeType":null,"messageId":"replace","endLine":574,"endColumn":48,"fix":{"range":[19262,19302],"text":" 'Use this flag to re-record snapshots. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'Can·be·used·together·with·a·test·suite·pattern·or·with·'` with `·····'Can·be·used·together·with·a·test·suite·pattern·or·with·'·+`","line":575,"column":8,"nodeType":null,"messageId":"replace","endLine":575,"endColumn":67,"fix":{"range":[19310,19369],"text":" 'Can be used together with a test suite pattern or with ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'`--testNamePattern`·to·re-record·snapshot·for·test·matching·'` with `·····'`--testNamePattern`·to·re-record·snapshot·for·test·matching·'·+`","line":576,"column":8,"nodeType":null,"messageId":"replace","endLine":576,"endColumn":72,"fix":{"range":[19377,19441],"text":" '`--testNamePattern` to re-record snapshot for test matching ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":577,"column":8,"nodeType":null,"messageId":"replace","endLine":577,"endColumn":9,"fix":{"range":[19449,19450],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······` with `············`","line":586,"column":1,"nodeType":null,"messageId":"replace","endLine":586,"endColumn":8,"fix":{"range":[19634,19641],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Watch·files·for·changes·and·rerun·tests·related·to·'` with `·····'Watch·files·for·changes·and·rerun·tests·related·to·'·+`","line":596,"column":8,"nodeType":null,"messageId":"replace","endLine":596,"endColumn":61,"fix":{"range":[19896,19949],"text":" 'Watch files for changes and rerun tests related to ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+·'changed·files.·If·you·want·to·re-run·all·tests·when·a·file·has·'` with `············'changed·files.·If·you·want·to·re-run·all·tests·when·a·file·has·'·+`","line":597,"column":1,"nodeType":null,"messageId":"replace","endLine":597,"endColumn":75,"fix":{"range":[19950,20024],"text":" 'changed files. If you want to re-run all tests when a file has ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······+` with `···········`","line":598,"column":1,"nodeType":null,"messageId":"replace","endLine":598,"endColumn":9,"fix":{"range":[20025,20033],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Watch·files·for·changes·and·rerun·all·tests.·If·you·want·'` with `·····'Watch·files·for·changes·and·rerun·all·tests.·If·you·want·'·+`","line":603,"column":8,"nodeType":null,"messageId":"replace","endLine":603,"endColumn":67,"fix":{"range":[20150,20209],"text":" 'Watch files for changes and rerun all tests. If you want ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'to·re-run·only·the·tests·related·to·the·changed·files,·use·the·'` with `·····'to·re-run·only·the·tests·related·to·the·changed·files,·use·the·'·+`","line":604,"column":8,"nodeType":null,"messageId":"replace","endLine":604,"endColumn":75,"fix":{"range":[20217,20284],"text":" 'to re-run only the tests related to the changed files, use the ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":605,"column":8,"nodeType":null,"messageId":"replace","endLine":605,"endColumn":9,"fix":{"range":[20292,20293],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·······'An·array·of·regexp·pattern·strings·that·are·matched·'` with `············'An·array·of·regexp·pattern·strings·that·are·matched·'·+`","line":610,"column":1,"nodeType":null,"messageId":"replace","endLine":610,"endColumn":62,"fix":{"range":[20398,20459],"text":" 'An array of regexp pattern strings that are matched ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+·'against·all·paths·before·trigger·test·re-run·in·watch·mode.·'` with `·····'against·all·paths·before·trigger·test·re-run·in·watch·mode.·'·+`","line":611,"column":8,"nodeType":null,"messageId":"replace","endLine":611,"endColumn":72,"fix":{"range":[20467,20531],"text":" 'against all paths before trigger test re-run in watch mode. ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":612,"column":8,"nodeType":null,"messageId":"replace","endLine":612,"endColumn":9,"fix":{"range":[20539,20540],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'Whether·to·use·watchman·for·file·crawling.·Disable·using·'` with `·····'Whether·to·use·watchman·for·file·crawling.·Disable·using·'·+`","line":618,"column":8,"nodeType":null,"messageId":"replace","endLine":618,"endColumn":67,"fix":{"range":[20705,20764],"text":" 'Whether to use watchman for file crawling. Disable using ' +"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `+` with `····`","line":619,"column":8,"nodeType":null,"messageId":"replace","endLine":619,"endColumn":9,"fix":{"range":[20772,20773],"text":" "}}],"errorCount":177,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":177,"fixableWarningCount":0,"source":"/**\n * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport const usage = 'Usage: $0 [--config=] [TestPathPattern]';\nexport const docs = 'Documentation: https://jestjs.io/';\n\n// The default values are all set in jest-config\nexport const options = {\n all: {\n description:\n 'The opposite of `onlyChanged`. If `onlyChanged` is set by '\n + 'default, running jest with `--all` will force Jest to run all tests '\n + 'instead of running only tests related to changed files.',\n type: 'boolean'\n },\n automock: {\n description: 'Automock all files by default.',\n type: 'boolean'\n },\n bail: {\n alias: 'b',\n description:\n 'Exit the test suite immediately after `n` number of failing tests.',\n type: 'boolean'\n },\n browser: {\n description:\n 'Respect the \"browser\" field in package.json '\n + 'when resolving modules. Some packages export different versions '\n + 'based on whether they are operating in node.js or a browser.',\n type: 'boolean'\n },\n cache: {\n description:\n 'Whether to use the transform cache. Disable the cache '\n + 'using --no-cache.',\n type: 'boolean'\n },\n cacheDirectory: {\n description:\n 'The directory where Jest should store its cached '\n + ' dependency information.',\n type: 'string'\n },\n changedFilesWithAncestor: {\n description:\n 'Runs tests related to the current changes and the changes made in the '\n + 'last commit. Behaves similarly to `--onlyChanged`.',\n type: 'boolean'\n },\n changedSince: {\n description:\n 'Runs tests related to the changes since the provided branch. If the '\n + 'current branch has diverged from the given branch, then only changes '\n + 'made locally will be tested. Behaves similarly to `--onlyChanged`.',\n nargs: 1,\n type: 'string'\n },\n ci: {\n description:\n 'Whether to run Jest in continuous integration (CI) mode. '\n + 'This option is on by default in most popular CI environments. It will '\n + 'prevent snapshots from being written unless explicitly requested.',\n type: 'boolean'\n },\n clearCache: {\n description:\n 'Clears the configured Jest cache directory and then exits. '\n + 'Default directory can be found by calling jest --showConfig',\n type: 'boolean'\n },\n clearMocks: {\n description:\n 'Automatically clear mock calls and instances between every '\n + 'test. Equivalent to calling jest.clearAllMocks() between each test.',\n type: 'boolean'\n },\n collectCoverage: {\n description: 'Alias for --coverage.',\n type: 'boolean'\n },\n collectCoverageFrom: {\n description:\n 'A glob pattern relative to matching the files that coverage '\n + 'info needs to be collected from.',\n type: 'string'\n },\n collectCoverageOnlyFrom: {\n description: 'Explicit list of paths coverage will be restricted to.',\n string: true,\n type: 'array'\n },\n color: {\n description:\n 'Forces test results output color highlighting (even if '\n + 'stdout is not a TTY). Set to false if you would like to have no colors.',\n type: 'boolean'\n },\n colors: {\n description: 'Alias for `--color`.',\n type: 'boolean'\n },\n config: {\n alias: 'c',\n description:\n 'The path to a jest config file specifying how to find '\n + 'and execute tests. If no rootDir is set in the config, the directory '\n + 'containing the config file is assumed to be the rootDir for the project.'\n + 'This can also be a JSON encoded value which Jest will use as configuration.',\n type: 'string'\n },\n coverage: {\n description:\n 'Indicates that test coverage information should be '\n + 'collected and reported in the output.',\n type: 'boolean'\n },\n coverageDirectory: {\n description: 'The directory where Jest should output its coverage files.',\n type: 'string'\n },\n coveragePathIgnorePatterns: {\n description:\n 'An array of regexp pattern strings that are matched '\n + 'against all file paths before executing the test. If the file path'\n + 'matches any of the patterns, coverage information will be skipped.',\n string: true,\n type: 'array'\n },\n coverageProvider: {\n choices: ['babel', 'v8'],\n description: 'Select between Babel and V8 to collect coverage'\n },\n coverageReporters: {\n description:\n 'A list of reporter names that Jest uses when writing '\n + 'coverage reports. Any istanbul reporter can be used.',\n string: true,\n type: 'array'\n },\n coverageThreshold: {\n description:\n 'A JSON string with which will be used to configure '\n + 'minimum threshold enforcement for coverage results',\n type: 'string'\n },\n debug: {\n description: 'Print debugging info about your jest config.',\n type: 'boolean'\n },\n detectLeaks: {\n description:\n '**EXPERIMENTAL**: Detect memory leaks in tests. After executing a '\n + 'test, it will try to garbage collect the global object used, and fail '\n + 'if it was leaked',\n type: 'boolean'\n },\n detectOpenHandles: {\n description:\n 'Print out remaining open handles preventing Jest from exiting at the '\n + 'end of a test run. Implies `runInBand`.',\n type: 'boolean'\n },\n env: {\n description:\n 'The test environment used for all tests. This can point to '\n + 'any file or node module. Examples: `jsdom`, `node` or '\n + '`path/to/my-environment.js`',\n type: 'string'\n },\n errorOnDeprecated: {\n description: 'Make calling deprecated APIs throw helpful error messages.',\n type: 'boolean'\n },\n expand: {\n alias: 'e',\n description: 'Use this flag to show full diffs instead of a patch.',\n type: 'boolean'\n },\n filter: {\n description:\n 'Path to a module exporting a filtering function. This method receives '\n + 'a list of tests which can be manipulated to exclude tests from '\n + 'running. Especially useful when used in conjunction with a testing '\n + 'infrastructure to filter known broken tests.',\n type: 'string'\n },\n findRelatedTests: {\n description:\n 'Find related tests for a list of source files that were '\n + 'passed in as arguments. Useful for pre-commit hook integration to run '\n + 'the minimal amount of tests necessary.',\n type: 'boolean'\n },\n forceExit: {\n description:\n 'Force Jest to exit after all tests have completed running. '\n + 'This is useful when resources set up by test code cannot be '\n + 'adequately cleaned up.',\n type: 'boolean'\n },\n globalSetup: {\n description: 'The path to a module that runs before All Tests.',\n type: 'string'\n },\n globalTeardown: {\n description: 'The path to a module that runs after All Tests.',\n type: 'string'\n },\n globals: {\n description:\n 'A JSON string with map of global variables that need '\n + 'to be available in all test environments.',\n type: 'string'\n },\n haste: {\n description:\n 'A JSON string with map of variables for the haste module system',\n type: 'string'\n },\n init: {\n description: 'Generate a basic configuration file',\n type: 'boolean'\n },\n injectGlobals: {\n description: 'Should Jest inject global variables or not',\n type: 'boolean'\n },\n json: {\n description:\n 'Prints the test results in JSON. This mode will send all '\n + 'other test output and user messages to stderr.',\n type: 'boolean'\n },\n lastCommit: {\n description:\n 'Run all tests affected by file changes in the last commit made. '\n + 'Behaves similarly to `--onlyChanged`.',\n type: 'boolean'\n },\n listTests: {\n description:\n 'Lists all tests Jest will run given the arguments and '\n + 'exits. Most useful in a CI system together with `--findRelatedTests` '\n + 'to determine the tests Jest will run based on specific files',\n type: 'boolean'\n },\n logHeapUsage: {\n description:\n 'Logs the heap usage after every test. Useful to debug '\n + 'memory leaks. Use together with `--runInBand` and `--expose-gc` in '\n + 'node.',\n type: 'boolean'\n },\n maxConcurrency: {\n description:\n 'Specifies the maximum number of tests that are allowed to run'\n + 'concurrently. This only affects tests using `test.concurrent`.',\n type: 'number'\n },\n maxWorkers: {\n alias: 'w',\n description:\n 'Specifies the maximum number of workers the worker-pool '\n + 'will spawn for running tests. This defaults to the number of the '\n + 'cores available on your machine. (its usually best not to override '\n + 'this default)',\n type: 'string'\n },\n moduleDirectories: {\n description:\n 'An array of directory names to be searched recursively '\n + \"up from the requiring module's location.\",\n string: true,\n type: 'array'\n },\n moduleFileExtensions: {\n description:\n 'An array of file extensions your modules use. If you '\n + 'require modules without specifying a file extension, these are the '\n + 'extensions Jest will look for. ',\n string: true,\n type: 'array'\n },\n moduleNameMapper: {\n description:\n 'A JSON string with a map from regular expressions to '\n + 'module names or to arrays of module names that allow to stub '\n + 'out resources, like images or styles with a single module',\n type: 'string'\n },\n modulePathIgnorePatterns: {\n description:\n 'An array of regexp pattern strings that are matched '\n + 'against all module paths before those paths are to be considered '\n + '\"visible\" to the module loader.',\n string: true,\n type: 'array'\n },\n modulePaths: {\n description:\n 'An alternative API to setting the NODE_PATH env variable, '\n + 'modulePaths is an array of absolute paths to additional locations to '\n + 'search when resolving modules.',\n string: true,\n type: 'array'\n },\n noStackTrace: {\n description: 'Disables stack trace in test results output',\n type: 'boolean'\n },\n notify: {\n description: 'Activates notifications for test results.',\n type: 'boolean'\n },\n notifyMode: {\n description: 'Specifies when notifications will appear for test results.',\n type: 'string'\n },\n onlyChanged: {\n alias: 'o',\n description:\n 'Attempts to identify which tests to run based on which '\n + \"files have changed in the current repository. Only works if you're \"\n + 'running tests in a git or hg repository at the moment.',\n type: 'boolean'\n },\n onlyFailures: {\n alias: 'f',\n description: 'Run tests that failed in the previous execution.',\n type: 'boolean'\n },\n outputFile: {\n description:\n 'Write test results to a file when the --json option is '\n + 'also specified.',\n type: 'string'\n },\n passWithNoTests: {\n description:\n 'Will not fail if no tests are found (for example while using `--testPathPattern`.)',\n type: 'boolean'\n },\n preset: {\n description: \"A preset that is used as a base for Jest's configuration.\",\n type: 'string'\n },\n prettierPath: {\n description: 'The path to the \"prettier\" module used for inline snapshots.',\n type: 'string'\n },\n projects: {\n description:\n 'A list of projects that use Jest to run all tests of all '\n + 'projects in a single instance of Jest.',\n string: true,\n type: 'array'\n },\n reporters: {\n description: 'A list of custom reporters for the test suite.',\n string: true,\n type: 'array'\n },\n resetMocks: {\n description:\n 'Automatically reset mock state between every test. '\n + 'Equivalent to calling jest.resetAllMocks() between each test.',\n type: 'boolean'\n },\n resetModules: {\n description:\n 'If enabled, the module registry for every test file will '\n + 'be reset before running each individual test.',\n type: 'boolean'\n },\n resolver: {\n description: 'A JSON string which allows the use of a custom resolver.',\n type: 'string'\n },\n restoreMocks: {\n description:\n 'Automatically restore mock state and implementation between every test. '\n + 'Equivalent to calling jest.restoreAllMocks() between each test.',\n type: 'boolean'\n },\n rootDir: {\n description:\n 'The root directory that Jest should scan for tests and '\n + 'modules within.',\n type: 'string'\n },\n roots: {\n description:\n 'A list of paths to directories that Jest should use to '\n + 'search for files in.',\n string: true,\n type: 'array'\n },\n runInBand: {\n alias: 'i',\n description:\n 'Run all tests serially in the current process (rather than '\n + 'creating a worker pool of child processes that run tests). This '\n + 'is sometimes useful for debugging, but such use cases are pretty '\n + 'rare.',\n type: 'boolean'\n },\n runTestsByPath: {\n description:\n 'Used when provided patterns are exact file paths. This avoids '\n + 'converting them into a regular expression and matching it against '\n + 'every single file.',\n type: 'boolean'\n },\n runner: {\n description:\n \"Allows to use a custom runner instead of Jest's default test runner.\",\n type: 'string'\n },\n selectProjects: {\n description:\n 'Run only the tests of the specified projects.'\n + 'Jest uses the attribute `displayName` in the configuration to identify each project.',\n string: true,\n type: 'array'\n },\n setupFiles: {\n description:\n 'A list of paths to modules that run some code to configure or '\n + 'set up the testing environment before each test. ',\n string: true,\n type: 'array'\n },\n setupFilesAfterEnv: {\n description:\n 'A list of paths to modules that run some code to configure or '\n + 'set up the testing framework before each test ',\n string: true,\n type: 'array'\n },\n showConfig: {\n description: 'Print your jest config and then exits.',\n type: 'boolean'\n },\n silent: {\n description: 'Prevent tests from printing messages through the console.',\n type: 'boolean'\n },\n skipFilter: {\n description:\n 'Disables the filter provided by --filter. Useful for CI jobs, or '\n + 'local enforcement when fixing tests.',\n type: 'boolean'\n },\n snapshotSerializers: {\n description:\n 'A list of paths to snapshot serializer modules Jest should '\n + 'use for snapshot testing.',\n string: true,\n type: 'array'\n },\n testEnvironment: {\n description: 'Alias for --env',\n type: 'string'\n },\n testEnvironmentOptions: {\n description:\n 'Test environment options that will be passed to the testEnvironment. '\n + 'The relevant options depend on the environment.',\n type: 'string' // Object\n },\n testFailureExitCode: {\n description: 'Exit code of `jest` command if the test run failed',\n type: 'string' // number\n },\n testLocationInResults: {\n description: 'Add `location` information to the test results',\n type: 'boolean'\n },\n testMatch: {\n description: 'The glob patterns Jest uses to detect test files.',\n string: true,\n type: 'array'\n },\n testNamePattern: {\n alias: 't',\n description: 'Run only tests with a name that matches the regex pattern.',\n type: 'string'\n },\n testPathIgnorePatterns: {\n description:\n 'An array of regexp pattern strings that are matched '\n + 'against all test paths before executing the test. If the test path '\n + 'matches any of the patterns, it will be skipped.',\n string: true,\n type: 'array'\n },\n testPathPattern: {\n description:\n 'A regexp pattern string that is matched against all tests '\n + 'paths before executing the test.',\n string: true,\n type: 'array'\n },\n testRegex: {\n description:\n 'A string or array of string regexp patterns that Jest uses to detect test files.',\n string: true,\n type: 'array'\n },\n testResultsProcessor: {\n description:\n 'Allows the use of a custom results processor. '\n + 'This processor must be a node module that exports '\n + 'a function expecting as the first argument the result object.',\n type: 'string'\n },\n testRunner: {\n description:\n 'Allows to specify a custom test runner. The default is'\n + ' `jest-circus/runner`. A path to a custom test runner can be provided:'\n + ' `/path/to/testRunner.js`.',\n type: 'string'\n },\n testSequencer: {\n description:\n 'Allows to specify a custom test sequencer. The default is '\n + '`@jest/test-sequencer`. A path to a custom test sequencer can be '\n + 'provided: `/path/to/testSequencer.js`',\n type: 'string'\n },\n testTimeout: {\n description: 'This option sets the default timeouts of test cases.',\n type: 'number'\n },\n testURL: {\n description: 'This option sets the URL for the jsdom environment.',\n type: 'string'\n },\n timers: {\n description:\n 'Setting this value to fake allows the use of fake timers '\n + 'for functions such as setTimeout.',\n type: 'string'\n },\n transform: {\n description:\n 'A JSON string which maps from regular expressions to paths '\n + 'to transformers.',\n type: 'string'\n },\n transformIgnorePatterns: {\n description:\n 'An array of regexp pattern strings that are matched '\n + 'against all source file paths before transformation.',\n string: true,\n type: 'array'\n },\n unmockedModulePathPatterns: {\n description:\n 'An array of regexp pattern strings that are matched '\n + 'against all modules before the module loader will automatically '\n + 'return a mock for them.',\n string: true,\n type: 'array'\n },\n updateSnapshot: {\n alias: 'u',\n description:\n 'Use this flag to re-record snapshots. '\n + 'Can be used together with a test suite pattern or with '\n + '`--testNamePattern` to re-record snapshot for test matching '\n + 'the pattern',\n type: 'boolean'\n },\n useStderr: {\n description: 'Divert all output to stderr.',\n type: 'boolean'\n },\n verbose: {\n description:\n 'Display individual test results with the test suite hierarchy.',\n type: 'boolean'\n },\n version: {\n alias: 'v',\n description: 'Print the version and exit',\n type: 'boolean'\n },\n watch: {\n description:\n 'Watch files for changes and rerun tests related to '\n + 'changed files. If you want to re-run all tests when a file has '\n + 'changed, use the `--watchAll` option.',\n type: 'boolean'\n },\n watchAll: {\n description:\n 'Watch files for changes and rerun all tests. If you want '\n + 'to re-run only the tests related to the changed files, use the '\n + '`--watch` option.',\n type: 'boolean'\n },\n watchPathIgnorePatterns: {\n description:\n 'An array of regexp pattern strings that are matched '\n + 'against all paths before trigger test re-run in watch mode. '\n + 'If the test path matches any of the patterns, it will be skipped.',\n string: true,\n type: 'array'\n },\n watchman: {\n description:\n 'Whether to use watchman for file crawling. Disable using '\n + '--no-watchman.',\n type: 'boolean'\n }\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `iconName·=>` with `(iconName)·=>⏎···············`","line":50,"column":13,"nodeType":null,"messageId":"replace","endLine":50,"endColumn":24,"fix":{"range":[1245,1256],"text":"(iconName) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `routes` with `(routes)`","line":82,"column":22,"nodeType":null,"messageId":"replace","endLine":82,"endColumn":28,"fix":{"range":[2150,2156],"text":"(routes)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎················join(api.paths.absTmpPath·||·'',·absFilePath)⏎············` with `join(api.paths.absTmpPath·||·'',·absFilePath)`","line":85,"column":32,"nodeType":null,"messageId":"replace","endLine":87,"endColumn":13,"fix":{"range":[2226,2301],"text":"join(api.paths.absTmpPath || '', absFilePath)"}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { winPath } from '@fesjs/utils';\n\nconst namespace = 'plugin-layout';\n\nexport default (api) => {\n const {\n utils: { Mustache }\n } = api;\n\n const helper = require('./node/helper');\n\n api.describe({\n key: 'layout',\n config: {\n schema(joi) {\n return joi.object();\n },\n onChange: api.ConfigChangeType.regenerateTmpFiles\n }\n });\n\n api.addRuntimePluginKey(() => 'layout');\n\n const absFilePath = join(namespace, 'index.js');\n\n const absRuntimeFilePath = join(namespace, 'runtime.js');\n\n api.onGenerateFiles(async () => {\n const { name } = api.pkg;\n\n const HAS_LOCALE = api.hasPlugins(['@fesjs/plugin-locale']);\n\n // .fes配置\n const userConfig = {\n title: name,\n footer: 'Created by Fes.js',\n ...(api.config.layout || {})\n };\n\n // 路由信息\n const routes = await api.getRoutes();\n // 把路由的meta合并到menu配置中\n userConfig.menus = helper.fillMenuByRoute(userConfig.menus, routes);\n\n const icons = helper.getIconsFromMenu(userConfig.menus);\n\n const iconsString = icons.map(\n iconName => `import ${iconName} from '@ant-design/icons-vue/es/icons/${iconName}'`\n );\n api.writeTmpFile({\n path: join(namespace, 'icons.js'),\n content: `\n ${iconsString.join(';\\n')}\n export default {\n ${icons.join(',\\n')}\n }`\n });\n\n api.writeTmpFile({\n path: absFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/index.tpl'), 'utf-8'),\n {\n REPLACE_USER_CONFIG: JSON.stringify(userConfig),\n HAS_LOCALE\n }\n )\n });\n\n api.copyTmpFiles({\n namespace,\n path: join(__dirname, 'runtime'),\n ignore: ['.tpl']\n });\n });\n\n api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);\n\n // 把BaseLayout插入到路由配置中,作为根路由\n api.modifyRoutes(routes => [\n {\n path: '/',\n component: winPath(\n join(api.paths.absTmpPath || '', absFilePath)\n ),\n children: routes\n }\n ]);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/helpers/pluginAccess.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":16,"column":29,"nodeType":null,"messageId":"insert","endLine":16,"endColumn":29,"fix":{"range":[528,528],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":17,"column":1,"nodeType":null,"messageId":"insert","endLine":17,"endColumn":1,"fix":{"range":[561,561],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":18,"column":1,"nodeType":null,"messageId":"replace","endLine":18,"endColumn":13,"fix":{"range":[613,625],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎········`","line":19,"column":9,"nodeType":null,"messageId":"replace","endLine":19,"endColumn":11,"fix":{"range":[658,660],"text":" })\n "}}],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"import { unref, computed } from 'vue';\n// eslint-disable-next-line\nimport { useAccess } from '../../plugin-access/core';\n\nif (!useAccess) {\n throw new Error(\n '[plugin-layout]: pLugin-layout depends on plugin-access,please install plugin-access first!'\n );\n}\n\nexport const hasAccessByMenuItem = (item) => {\n let res;\n if (item.path && (!item.children || item.children.length === 0)) {\n res = useAccess(item.path);\n } else if (item.children && item.children.length > 0) {\n res = computed(() => item.children.some((child) => {\n const rst = hasAccessByMenuItem(child);\n return rst && rst.value;\n }));\n }\n return res;\n};\n\nconst _addAccessTag = (arr) => {\n if (Array.isArray(arr)) {\n arr.forEach((item) => {\n item.access = hasAccessByMenuItem(item);\n if (item.children && item.children.length > 0) {\n _addAccessTag(item.children);\n }\n });\n }\n};\n\nexport const transform = (menus) => {\n const originData = unref(menus);\n _addAccessTag(originData);\n\n return originData;\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/helpers/pluginLocale.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":4,"column":1,"nodeType":null,"messageId":"delete","endLine":5,"endColumn":1,"fix":{"range":[86,87],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":12,"column":3,"nodeType":null,"messageId":"delete","endLine":13,"endColumn":1,"fix":{"range":[297,298],"text":""}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"import { unref, computed } from 'vue';\nimport { plugin } from '@@/core/coreExports';\n\n\nexport const transTitle = (name) => {\n const sharedLocale = plugin.getShared('locale');\n if (sharedLocale) {\n const { t } = sharedLocale.useI18n();\n return t(name);\n }\n return name;\n};\n\n\nconst _transform = (arr) => {\n if (Array.isArray(arr)) {\n arr.forEach((item) => {\n if (item.title) {\n item._title = item.title;\n item.title = computed(() => transTitle(item._title));\n }\n if (item.children && item.children.length > 0) {\n _transform(item.children);\n }\n });\n }\n};\n\nexport const transform = (menus) => {\n const originData = unref(menus);\n _transform(originData);\n return originData;\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/helpers/svg.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/runtime.js","messages":[{"ruleId":"import/no-named-as-default","severity":2,"message":"Parse errors in imported module './views/404': Unexpected token (3:18) (3:18)","line":4,"column":26,"nodeType":"Literal","endLine":4,"endColumn":39},{"ruleId":"import/no-named-as-default-member","severity":2,"message":"Parse errors in imported module './views/404': Unexpected token (3:18) (3:18)","line":4,"column":26,"nodeType":"Literal","endLine":4,"endColumn":39},{"ruleId":"import/no-named-as-default","severity":2,"message":"Parse errors in imported module './views/403': Unexpected token (3:18) (3:18)","line":5,"column":26,"nodeType":"Literal","endLine":5,"endColumn":39},{"ruleId":"import/no-named-as-default-member","severity":2,"message":"Parse errors in imported module './views/403': Unexpected token (3:18) (3:18)","line":5,"column":26,"nodeType":"Literal","endLine":5,"endColumn":39},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `memo` with `(memo)`","line":29,"column":23,"nodeType":null,"messageId":"replace","endLine":29,"endColumn":27,"fix":{"range":[871,875],"text":"(memo)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········router,·to,·from,·next⏎···` with `·router,·to,·from,·next`","line":30,"column":22,"nodeType":null,"messageId":"replace","endLine":32,"endColumn":4,"fix":{"range":[903,938],"text":" router, to, from, next"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `runtimeConfig.unAccessHandler·&&·typeof·runtimeConfig.unAccessHandler·===·'function'` with `⏎············runtimeConfig.unAccessHandler·&&⏎············typeof·runtimeConfig.unAccessHandler·===·'function'⏎········`","line":38,"column":13,"nodeType":null,"messageId":"replace","endLine":38,"endColumn":97,"fix":{"range":[1119,1203],"text":"\n runtimeConfig.unAccessHandler &&\n typeof runtimeConfig.unAccessHandler === 'function'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·to,·from,` with `⏎················to,⏎················from,⏎···············`","line":40,"column":24,"nodeType":null,"messageId":"replace","endLine":40,"endColumn":34,"fix":{"range":[1281,1291],"text":"\n to,\n from,\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········router,·to,·from,·next⏎···` with `·router,·to,·from,·next`","line":50,"column":21,"nodeType":null,"messageId":"replace","endLine":52,"endColumn":4,"fix":{"range":[1511,1546],"text":" router, to, from, next"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `runtimeConfig.noFoundHandler·&&·typeof·runtimeConfig.noFoundHandler·===·'function'` with `⏎············runtimeConfig.noFoundHandler·&&⏎············typeof·runtimeConfig.noFoundHandler·===·'function'⏎········`","line":58,"column":13,"nodeType":null,"messageId":"replace","endLine":58,"endColumn":95,"fix":{"range":[1727,1809],"text":"\n runtimeConfig.noFoundHandler &&\n typeof runtimeConfig.noFoundHandler === 'function'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·to,·from,` with `⏎················to,⏎················from,⏎···············`","line":60,"column":24,"nodeType":null,"messageId":"replace","endLine":60,"endColumn":34,"fix":{"range":[1886,1896],"text":"\n to,\n from,\n "}}],"errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":7,"fixableWarningCount":0,"source":"import { plugin, ApplyPluginsType } from '@@/core/coreExports';\n// eslint-disable-next-line import/extensions\nimport { access as accessApi } from '../plugin-access/core';\nimport Exception404 from './views/404';\nimport Exception403 from './views/403';\n\nif (!accessApi) {\n throw new Error(\n '[plugin-layout]: pLugin-layout depends on plugin-access,please install plugin-access first!'\n );\n}\n\nconst handle = (type, router) => {\n const accesssIds = accessApi.getAccess();\n const path = `/${type}`;\n const name = `Exception${type}`;\n const components = {\n 404: Exception404,\n 403: Exception403\n };\n if (!accesssIds.includes(path)) {\n accessApi.setAccess(accesssIds.concat([path]));\n }\n if (!router.hasRoute(name)) {\n router.addRoute({ path, name, component: components[type] });\n }\n};\n\nexport const access = memo => ({\n unAccessHandler({\n router, to, from, next\n }) {\n const runtimeConfig = plugin.applyPlugins({\n key: 'layout',\n type: ApplyPluginsType.modify,\n initialValue: {}\n });\n if (runtimeConfig.unAccessHandler && typeof runtimeConfig.unAccessHandler === 'function') {\n return runtimeConfig.unAccessHandler({\n router, to, from, next\n });\n }\n if (to.path === '/404') {\n handle(404, router);\n return next('/404');\n }\n handle(403, router);\n next('/403');\n },\n noFoundHandler({\n router, to, from, next\n }) {\n const runtimeConfig = plugin.applyPlugins({\n key: 'layout',\n type: ApplyPluginsType.modify,\n initialValue: {}\n });\n if (runtimeConfig.noFoundHandler && typeof runtimeConfig.noFoundHandler === 'function') {\n return runtimeConfig.noFoundHandler({\n router, to, from, next\n });\n }\n if (to.path === '/403') {\n handle(403, router);\n return next('/403');\n }\n handle(404, router);\n next('/404');\n },\n ...memo\n});\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/403.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"layout\": false\n}\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/404.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"layout\": false\n}\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/Menu.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n \n \n\n\n\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/MenuIcon.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-layout/src/runtime/views/MultiTabProvider.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-locale/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-locale/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `api.paths.absSrcPath,·api.config.singular·?·'locale'·:·'locales'` with `⏎············api.paths.absSrcPath,⏎············api.config.singular·?·'locale'·:·'locales'⏎········`","line":31,"column":21,"nodeType":null,"messageId":"replace","endLine":31,"endColumn":85,"fix":{"range":[736,800],"text":"\n api.paths.absSrcPath,\n api.config.singular ? 'locale' : 'locales'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎························`","line":58,"column":61,"nodeType":null,"messageId":"insert","endLine":58,"endColumn":61,"fix":{"range":[1678,1678],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `························` with `····························`","line":59,"column":1,"nodeType":null,"messageId":"replace","endLine":59,"endColumn":25,"fix":{"range":[1680,1704],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":60,"column":1,"nodeType":null,"messageId":"insert","endLine":60,"endColumn":1,"fix":{"range":[1731,1731],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":61,"column":25,"nodeType":null,"messageId":"insert","endLine":61,"endColumn":25,"fix":{"range":[1822,1822],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `},·null,·2` with `····},⏎························null,⏎························2⏎····················`","line":62,"column":21,"nodeType":null,"messageId":"replace","endLine":62,"endColumn":31,"fix":{"range":[1868,1878],"text":" },\n null,\n 2\n "}}],"errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":6,"fixableWarningCount":0,"source":"import { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { resolvePkg } from '@fesjs/utils';\nimport { getLocalesJSON } from './utils';\n\nconst namespace = 'plugin-locale';\n\nexport default (api) => {\n const {\n utils: { Mustache }\n } = api;\n\n api.describe({\n key: 'locale',\n config: {\n schema(joi) {\n return joi.object();\n },\n default: {},\n onChange: api.ConfigChangeType.regenerateTmpFiles\n }\n });\n\n api.addRuntimePluginKey(() => 'locale');\n\n const absoluteFilePath = join(namespace, 'core.js');\n\n const absRuntimeFilePath = join(namespace, 'runtime.js');\n\n function getLocaleFileBasePath() {\n return join(api.paths.absSrcPath, api.config.singular ? 'locale' : 'locales');\n }\n\n // 监听 locale 文件改变,重新生成文件\n api.addTmpGenerateWatcherPaths(getLocaleFileBasePath);\n\n api.onGenerateFiles(() => {\n // .fes配置\n const userConfig = {\n locale: 'zh-CN', // default locale\n fallbackLocale: 'zh-CN', // set fallback locale\n legacy: true,\n baseNavigator: true, // 开启浏览器语言检测\n share: true, // 用户是否需要手动改变语言\n ...api.config.locale\n };\n\n const localeConfigFileBasePath = getLocaleFileBasePath();\n\n const locales = getLocalesJSON(localeConfigFileBasePath);\n\n api.writeTmpFile({\n path: absoluteFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'),\n {\n REPLACE_LOCALES: locales,\n REPLACE_DEFAULT_OPTIONS: JSON.stringify({\n locale: userConfig.locale,\n fallbackLocale: userConfig.fallbackLocale,\n legacy: userConfig.legacy\n }, null, 2),\n BASE_NAVIGATOR: userConfig.baseNavigator,\n SHARE: userConfig.share,\n VUE_I18N_PATH: resolvePkg('vue-i18n')\n }\n )\n });\n\n api.copyTmpFiles({\n namespace,\n path: join(__dirname, 'runtime'),\n ignore: ['.tpl']\n });\n });\n\n api.addPluginExports(() => [\n {\n specifiers: ['useI18n', 'locale'],\n source: absoluteFilePath\n }\n ]);\n\n api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-locale/src/runtime/langUConfigMap.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-locale/src/runtime/runtime.js","messages":[{"ruleId":"import/extensions","severity":2,"message":"Missing file extension for \"./core\"","line":1,"column":25,"nodeType":"Literal","endLine":1,"endColumn":33}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { install } from './core';\n\nexport function onAppCreated({ app }) {\n install(app);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-locale/src/runtime/views/SelectLang.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-locale/src/utils/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `file·=>·!file.endsWith('.d.ts')` with `(file)·=>⏎················!file.endsWith('.d.ts')·&&`","line":10,"column":13,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":44,"fix":{"range":[214,245],"text":"(file) =>\n !file.endsWith('.d.ts') &&"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·&&·!file.endsWith('.test.js')⏎················&&` with `·!file.endsWith('.test.js')·&&⏎···············`","line":11,"column":16,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":19,"fix":{"range":[261,310],"text":" !file.endsWith('.test.js') &&\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":13,"column":10,"nodeType":null,"messageId":"insert","endLine":13,"endColumn":10,"fix":{"range":[348,348],"text":"\n "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import { glob } from '@fesjs/utils';\nimport { join, basename } from 'path';\n\nexport function getLocales(cwd) {\n const files = glob\n .sync('*.js', {\n cwd\n })\n .filter(\n file => !file.endsWith('.d.ts')\n && !file.endsWith('.test.js')\n && !file.endsWith('.test.jsx')\n ).map((fileName) => {\n const locale = basename(fileName, '.js');\n return {\n locale,\n message: `require('${join(cwd, fileName)}').default`\n };\n });\n\n return files;\n}\n\nexport function getLocalesJSON(cwd) {\n const locales = getLocales(cwd);\n return JSON.stringify(locales, null, 2)\n .replace(\n /\"message\": (\"(.+?)\")/g,\n (global, m1, m2) => `\"message\": ${m2.replace(/\\^/g, '\"')}`\n )\n .replace(/\\\\r\\\\n/g, '\\r\\n')\n .replace(/\\\\n/g, '\\r\\n');\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-model/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-model/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":42,"column":20,"nodeType":null,"messageId":"insert","endLine":42,"endColumn":20,"fix":{"range":[1168,1168],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············absPath:·winPath(join(paths.absTmpPath,·absInitlaStateFilePath)` with `················absPath:·winPath(⏎····················join(paths.absTmpPath,·absInitlaStateFilePath)⏎················`","line":43,"column":1,"nodeType":null,"messageId":"replace","endLine":43,"endColumn":76,"fix":{"range":[1170,1245],"text":" absPath: winPath(\n join(paths.absTmpPath, absInitlaStateFilePath)\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":44,"column":1,"nodeType":null,"messageId":"insert","endLine":44,"endColumn":1,"fix":{"range":[1248,1248],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎········`","line":45,"column":9,"nodeType":null,"messageId":"replace","endLine":45,"endColumn":10,"fix":{"range":[1296,1297],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `readFileSync(join(__dirname,·'runtime/core.tpl'),·'utf-8'),` with `⏎················readFileSync(join(__dirname,·'runtime/core.tpl'),·'utf-8'),⏎···············`","line":61,"column":38,"nodeType":null,"messageId":"replace","endLine":61,"endColumn":97,"fix":{"range":[1744,1803],"text":"\n readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'),\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":62,"column":1,"nodeType":null,"messageId":"insert","endLine":62,"endColumn":1,"fix":{"range":[1806,1806],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎············`","line":63,"column":13,"nodeType":null,"messageId":"replace","endLine":63,"endColumn":14,"fix":{"range":[1846,1847],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `readFileSync(join(__dirname,·'runtime/runtime.tpl'),·'utf-8'),·{` with `⏎················readFileSync(join(__dirname,·'runtime/runtime.tpl'),·'utf-8'),⏎················{}`","line":68,"column":38,"nodeType":null,"messageId":"replace","endLine":68,"endColumn":102,"fix":{"range":[1964,2028],"text":"\n readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8'),\n {}"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `}`","line":69,"column":13,"nodeType":null,"messageId":"delete","endLine":69,"endColumn":14,"fix":{"range":[2041,2042],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `readFileSync(join(__dirname,·'runtime/models/initialState.tpl'),·'utf-8'),·{` with `⏎················readFileSync(⏎····················join(__dirname,·'runtime/models/initialState.tpl'),⏎····················'utf-8'⏎················),⏎················{}`","line":74,"column":38,"nodeType":null,"messageId":"replace","endLine":74,"endColumn":114,"fix":{"range":[2163,2239],"text":"\n readFileSync(\n join(__dirname, 'runtime/models/initialState.tpl'),\n 'utf-8'\n ),\n {}"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `}`","line":75,"column":13,"nodeType":null,"messageId":"delete","endLine":75,"endColumn":14,"fix":{"range":[2252,2253],"text":""}}],"errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":12,"fixableWarningCount":0,"source":"\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { lodash, winPath } from '@fesjs/utils';\nimport { getModels } from './utils/getModels';\nimport { getTmpFile } from './utils/getTmpFile';\n\nconst namespace = 'plugin-model';\n\nexport default (api) => {\n const {\n paths,\n utils: { Mustache }\n } = api;\n\n function getModelDir() {\n return api.config.singular ? 'model' : 'models';\n }\n\n function getModelsPath() {\n return join(paths.absSrcPath, getModelDir());\n }\n\n function getAllModels() {\n const srcModelsPath = getModelsPath();\n return lodash.uniq([\n ...getModels(srcModelsPath)\n // ...getModels(\n // paths.absPagesPath,\n // `**/${getModelDir()}/**/*.{js,jsx}`\n // ),\n // ...getModels(paths.absPagesPath, '**/*.model.{js,jsx}')\n ]);\n }\n\n const absCoreFilePath = join(namespace, 'core.js');\n const absRuntimeFilePath = join(namespace, 'runtime.js');\n const absInitlaStateFilePath = join(namespace, 'models/initialState.js');\n\n api.register({\n key: 'addExtraModels',\n fn: () => [{\n absPath: winPath(join(paths.absTmpPath, absInitlaStateFilePath)),\n namespace: '@@initialState'\n }]\n });\n\n api.onGenerateFiles(async () => {\n const files = getAllModels();\n\n const additionalModels = await api.applyPlugins({\n key: 'addExtraModels',\n type: api.ApplyPluginsType.add,\n initialValue: []\n });\n\n const tmpFiles = getTmpFile(files, additionalModels, paths.absSrcPath);\n\n api.writeTmpFile({\n path: absCoreFilePath,\n content: Mustache.render(readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'), {\n ...tmpFiles\n })\n });\n\n api.writeTmpFile({\n path: absRuntimeFilePath,\n content: Mustache.render(readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8'), {\n })\n });\n\n api.writeTmpFile({\n path: absInitlaStateFilePath,\n content: Mustache.render(readFileSync(join(__dirname, 'runtime/models/initialState.tpl'), 'utf-8'), {\n })\n });\n });\n\n api.addPluginExports(() => [\n {\n specifiers: ['useModel'],\n source: absCoreFilePath\n }\n ]);\n\n api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-model/src/utils/getModels.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `file·=>·!file.endsWith('.d.ts')` with `(file)·=>⏎················!file.endsWith('.d.ts')·&&`","line":10,"column":13,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":44,"fix":{"range":[238,269],"text":"(file) =>\n !file.endsWith('.d.ts') &&"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `&&·!file.endsWith('.test.js')` with `········!file.endsWith('.test.js')·&&`","line":11,"column":9,"nodeType":null,"messageId":"replace","endLine":11,"endColumn":38,"fix":{"range":[278,307],"text":" !file.endsWith('.test.js') &&"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `&&` with `·······`","line":12,"column":9,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":11,"fix":{"range":[316,318],"text":" "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import { glob } from '@fesjs/utils';\nimport { getValidFiles } from '.';\n\nexport function getModels(cwd, pattern) {\n const files = glob\n .sync(pattern || '**/*.{js,jsx}', {\n cwd\n })\n .filter(\n file => !file.endsWith('.d.ts')\n && !file.endsWith('.test.js')\n && !file.endsWith('.test.jsx')\n );\n\n return getValidFiles(files, cwd);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-model/src/utils/getTmpFile.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····genImports,·genModels,·genExtraModels⏎` with `·genImports,·genModels,·genExtraModels·`","line":3,"column":9,"nodeType":null,"messageId":"replace","endLine":5,"endColumn":1,"fix":{"range":[74,117],"text":" genImports, genModels, genExtraModels "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `ele·=>·`'${ele.namespace.replace(/'/g,·\"\\\\'\")}':·${ele.importName}`` with `⏎············(ele)·=>⏎················`'${ele.namespace.replace(/'/g,·\"\\\\'\")}':·${ele.importName}`⏎········`","line":10,"column":14,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":81,"fix":{"range":[268,335],"text":"\n (ele) =>\n `'${ele.namespace.replace(/'/g, \"\\\\'\")}': ${ele.importName}`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `ele` with `(ele)`","line":17,"column":14,"nodeType":null,"messageId":"replace","endLine":17,"endColumn":17,"fix":{"range":[508,511],"text":"(ele)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····files,⏎····extra·=·[],⏎····absSrcPath⏎` with `files,·extra·=·[],·absSrcPath`","line":37,"column":28,"nodeType":null,"messageId":"replace","endLine":41,"endColumn":1,"fix":{"range":[1148,1191],"text":"files, extra = [], absSrcPath"}}],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"import { EOL } from 'os';\nimport { winPath } from '@fesjs/utils';\nimport {\n genImports, genModels, genExtraModels\n} from './index';\n\nfunction getModels(files, absSrcPath) {\n const sortedModels = genModels(files, absSrcPath);\n return sortedModels\n .map(ele => `'${ele.namespace.replace(/'/g, \"\\\\'\")}': ${ele.importName}`)\n .join(', ');\n}\n\nfunction getExtraModels(models = [], absSrcPath) {\n const extraModels = genExtraModels(models, absSrcPath);\n return extraModels\n .map(ele => `'${ele.namespace}': ${ele.exportName || ele.importName}`)\n .join(', ');\n}\n\nfunction getExtraImports(models = [], absSrcPath) {\n const extraModels = genExtraModels(models, absSrcPath);\n return extraModels\n .map((ele) => {\n if (ele.exportName) {\n return `import { ${ele.exportName} } from '${winPath(\n ele.importPath.replace(/'/g, \"\\\\'\")\n )}';`;\n }\n return `import ${ele.importName} from '${winPath(\n ele.importPath.replace(/'/g, \"\\\\'\")\n )}';`;\n })\n .join(EOL);\n}\n\nexport const getTmpFile = (\n files,\n extra = [],\n absSrcPath\n) => {\n const userImports = genImports(files);\n const userModels = getModels(files, absSrcPath);\n const extraImports = getExtraImports(extra, absSrcPath);\n const extraModels = getExtraModels(extra, absSrcPath);\n\n return {\n userImports,\n userModels,\n extraImports,\n extraModels\n };\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-model/src/utils/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `ele` with `(ele)`","line":20,"column":13,"nodeType":null,"messageId":"replace","endLine":20,"endColumn":16,"fix":{"range":[673,676],"text":"(ele)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `imports·=>` with `(imports)·=>⏎···`","line":36,"column":27,"nodeType":null,"messageId":"replace","endLine":36,"endColumn":37,"fix":{"range":[1167,1177],"text":"(imports) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":37,"column":5,"nodeType":null,"messageId":"insert","endLine":37,"endColumn":5,"fix":{"range":[1190,1190],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········(ele,·index)·=>` with `············(ele,·index)·=>⏎···············`","line":38,"column":1,"nodeType":null,"messageId":"replace","endLine":38,"endColumn":24,"fix":{"range":[1196,1219],"text":" (ele, index) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····` with `········`","line":39,"column":1,"nodeType":null,"messageId":"replace","endLine":39,"endColumn":5,"fix":{"range":[1276,1280],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":40,"column":1,"nodeType":null,"messageId":"insert","endLine":40,"endColumn":1,"fix":{"range":[1282,1282],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···`","line":42,"column":59,"nodeType":null,"messageId":"insert","endLine":42,"endColumn":59,"fix":{"range":[1357,1357],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":43,"column":5,"nodeType":null,"messageId":"insert","endLine":43,"endColumn":5,"fix":{"range":[1384,1384],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":44,"column":9,"nodeType":null,"messageId":"insert","endLine":44,"endColumn":9,"fix":{"range":[1423,1423],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":45,"column":1,"nodeType":null,"messageId":"replace","endLine":45,"endColumn":13,"fix":{"range":[1432,1444],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":46,"column":1,"nodeType":null,"messageId":"insert","endLine":46,"endColumn":1,"fix":{"range":[1470,1470],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":47,"column":1,"nodeType":null,"messageId":"replace","endLine":47,"endColumn":13,"fix":{"range":[1528,1540],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":48,"column":1,"nodeType":null,"messageId":"replace","endLine":48,"endColumn":9,"fix":{"range":[1576,1584],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":49,"column":1,"nodeType":null,"messageId":"insert","endLine":49,"endColumn":1,"fix":{"range":[1587,1587],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":50,"column":5,"nodeType":null,"messageId":"insert","endLine":50,"endColumn":5,"fix":{"range":[1597,1597],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":51,"column":1,"nodeType":null,"messageId":"replace","endLine":51,"endColumn":9,"fix":{"range":[1606,1614],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":52,"column":1,"nodeType":null,"messageId":"insert","endLine":52,"endColumn":1,"fix":{"range":[1648,1648],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":53,"column":1,"nodeType":null,"messageId":"insert","endLine":53,"endColumn":1,"fix":{"range":[1710,1710],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":54,"column":9,"nodeType":null,"messageId":"insert","endLine":54,"endColumn":9,"fix":{"range":[1752,1752],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":55,"column":5,"nodeType":null,"messageId":"insert","endLine":55,"endColumn":5,"fix":{"range":[1783,1783],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":56,"column":1,"nodeType":null,"messageId":"insert","endLine":56,"endColumn":1,"fix":{"range":[1786,1786],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `v` with `(v)`","line":66,"column":38,"nodeType":null,"messageId":"replace","endLine":66,"endColumn":39,"fix":{"range":[2115,2116],"text":"(v)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `v` with `(v)`","line":74,"column":47,"nodeType":null,"messageId":"replace","endLine":74,"endColumn":48,"fix":{"range":[2407,2408],"text":"(v)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `(v` with `((v)`","line":83,"column":46,"nodeType":null,"messageId":"replace","endLine":83,"endColumn":48,"fix":{"range":[2723,2725],"text":"((v)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `absPath` with `(absPath)`","line":106,"column":34,"nodeType":null,"messageId":"replace","endLine":106,"endColumn":41,"fix":{"range":[3471,3478],"text":"(absPath)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `absPath` with `(absPath)`","line":110,"column":38,"nodeType":null,"messageId":"replace","endLine":110,"endColumn":45,"fix":{"range":[3630,3637],"text":"(absPath)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `list` with `(list)`","line":112,"column":29,"nodeType":null,"messageId":"replace","endLine":112,"endColumn":33,"fix":{"range":[3701,3705],"text":"(list)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `ele` with `(ele)`","line":143,"column":38,"nodeType":null,"messageId":"replace","endLine":143,"endColumn":41,"fix":{"range":[4646,4649],"text":"(ele)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":176,"column":59,"nodeType":null,"messageId":"insert","endLine":176,"endColumn":59,"fix":{"range":[5686,5686],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·||`","line":177,"column":24,"nodeType":null,"messageId":"delete","endLine":177,"endColumn":27,"fix":{"range":[5710,5713],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎························&&·ele.declarations[0].init.type` with `·&&⏎························ele.declarations[0].init.type·===`","line":200,"column":71,"nodeType":null,"messageId":"replace","endLine":201,"endColumn":57,"fix":{"range":[6506,6563],"text":" &&\n ele.declarations[0].init.type ==="}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `===·`","line":202,"column":29,"nodeType":null,"messageId":"delete","endLine":202,"endColumn":33,"fix":{"range":[6592,6596],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···`","line":216,"column":51,"nodeType":null,"messageId":"insert","endLine":216,"endColumn":51,"fix":{"range":[6870,6870],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":217,"column":1,"nodeType":null,"messageId":"insert","endLine":217,"endColumn":1,"fix":{"range":[6877,6877],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":218,"column":1,"nodeType":null,"messageId":"replace","endLine":218,"endColumn":9,"fix":{"range":[6898,6906],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":219,"column":1,"nodeType":null,"messageId":"insert","endLine":219,"endColumn":1,"fix":{"range":[6951,6951],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":220,"column":9,"nodeType":null,"messageId":"insert","endLine":220,"endColumn":9,"fix":{"range":[7004,7004],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":221,"column":1,"nodeType":null,"messageId":"replace","endLine":221,"endColumn":13,"fix":{"range":[7017,7029],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":222,"column":9,"nodeType":null,"messageId":"insert","endLine":222,"endColumn":9,"fix":{"range":[7054,7054],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":223,"column":1,"nodeType":null,"messageId":"insert","endLine":223,"endColumn":1,"fix":{"range":[7056,7056],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":224,"column":5,"nodeType":null,"messageId":"insert","endLine":224,"endColumn":5,"fix":{"range":[7079,7079],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····.filter(ele` with `········.filter((ele)`","line":225,"column":1,"nodeType":null,"messageId":"replace","endLine":225,"endColumn":16,"fix":{"range":[7082,7097],"text":" .filter((ele)"}}],"errorCount":42,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":42,"fixableWarningCount":0,"source":"import path from 'path';\nimport { EOL } from 'os';\nimport { readFileSync } from 'fs';\nimport { parser, traverse, winPath } from '@fesjs/utils';\n\nconst getFileName = (name) => {\n const fileName = path.basename(name, path.extname(name));\n if (fileName.endsWith('.model') || fileName.endsWith('.models')) {\n return fileName.split('.').slice(0, -1).join('.');\n }\n return fileName;\n};\n\nexport const getName = (absPath, absSrcPath) => {\n const relativePath = path.relative(absSrcPath, absPath);\n // model files with namespace\n const dirList = path.dirname(relativePath).split(path.sep);\n try {\n const validDirs = dirList.filter(\n ele => !['src', 'page', 'pages', 'model', 'models'].includes(ele)\n );\n if (validDirs && validDirs.length) {\n return `${validDirs.join('.')}.${getFileName(relativePath)}`;\n }\n return getFileName(relativePath);\n } catch (e) {\n return getFileName(relativePath);\n }\n};\n\nexport const getPath = (absPath) => {\n const info = path.parse(absPath);\n return winPath(path.join(info.dir, info.name).replace(/'/, \"'\"));\n};\n\nexport const genImports = imports => imports\n .map(\n (ele, index) => `import model${index} from \"${winPath(getPath(ele))}\";`\n )\n .join(EOL);\n\nexport const genExtraModels = (models = [], absSrcPath) => models.map((ele) => {\n if (typeof ele === 'string') {\n return {\n importPath: getPath(ele),\n importName: path.basename(ele).split('.')[0],\n namespace: getName(ele, absSrcPath)\n };\n }\n return {\n importPath: getPath(ele.absPath),\n importName: path.basename(ele.absPath).split('.')[0],\n namespace: ele.namespace,\n exportName: ele.exportName\n };\n});\n\nexport const sort = (ns) => {\n let final = [];\n ns.forEach((item, index) => {\n if (item.use && item.use.length) {\n const itemGroup = [...item.use, item.namespace];\n\n const cannotUse = [item.namespace];\n for (let i = 0; i <= index; i += 1) {\n if (ns[i].use.filter(v => cannotUse.includes(v)).length) {\n if (!cannotUse.includes(ns[i].namespace)) {\n cannotUse.push(ns[i].namespace);\n i = -1;\n }\n }\n }\n\n const errorList = item.use.filter(v => cannotUse.includes(v));\n if (errorList.length) {\n throw Error(\n `Circular dependencies: ${\n item.namespace\n } can't use ${errorList.join(', ')}`\n );\n }\n\n const intersection = final.filter(v => itemGroup.includes(v));\n if (intersection.length) {\n // first intersection\n const finalIndex = final.indexOf(intersection[0]);\n // replace with groupItem\n final = final\n .slice(0, finalIndex)\n .concat(itemGroup)\n .concat(final.slice(finalIndex + 1));\n } else {\n final.push(...itemGroup);\n }\n }\n if (!final.includes(item.namespace)) {\n // first occurance append to the end\n final.push(item.namespace);\n }\n });\n\n return [...new Set(final)];\n};\n\nexport const genModels = (imports, absSrcPath) => {\n const contents = imports.map(absPath => ({\n namespace: getName(absPath, absSrcPath),\n content: readFileSync(absPath).toString()\n }));\n const allUserModel = imports.map(absPath => getName(absPath, absSrcPath));\n\n const checkDuplicates = list => new Set(list).size !== list.length;\n\n const raw = contents.map((ele, index) => {\n const ast = parser.parse(ele.content, {\n sourceType: 'module',\n plugins: ['jsx', 'typescript']\n });\n\n const use = [];\n\n traverse(ast, {\n enter(astPath) {\n if (astPath.isIdentifier({ name: 'useModel' })) {\n try {\n // string literal\n const ns = astPath.parentPath.node.arguments[0].value;\n if (allUserModel.includes(ns)) {\n use.push(ns);\n }\n } catch (e) {\n // console.log(e)\n }\n }\n }\n });\n\n return { namespace: ele.namespace, use, importName: `model${index}` };\n });\n\n const models = sort(raw);\n\n if (checkDuplicates(contents.map(ele => ele.namespace))) {\n throw Error('plugin-model: models 中包含重复的 namespace!');\n }\n return raw.sort(\n (a, b) => models.indexOf(a.namespace) - models.indexOf(b.namespace)\n );\n};\n\nexport const isValidHook = (filePath) => {\n const content = readFileSync(filePath, { encoding: 'utf-8' }).toString();\n\n const ast = parser.parse(content, {\n sourceType: 'module',\n plugins: [\n 'classProperties',\n 'dynamicImport',\n 'exportDefaultFrom',\n 'exportNamespaceFrom',\n 'functionBind',\n 'nullishCoalescingOperator',\n 'objectRestSpread',\n 'optionalChaining',\n 'decorators-legacy'\n ].filter(Boolean)\n });\n let valid = false;\n let identifierName = '';\n traverse(ast, {\n enter(p) {\n if (p.isExportDefaultDeclaration()) {\n const { type } = p.node.declaration;\n try {\n if (\n type === 'ArrowFunctionExpression'\n || type === 'FunctionDeclaration'\n ) {\n valid = true;\n } else if (type === 'Identifier') {\n identifierName = p.node.declaration.name;\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n });\n\n try {\n if (identifierName) {\n ast.program.body.forEach((ele) => {\n if (ele.type === 'FunctionDeclaration') {\n if (ele.id?.name === identifierName) {\n valid = true;\n }\n }\n if (ele.type === 'VariableDeclaration') {\n if (\n ele.declarations[0].id.name === identifierName\n && ele.declarations[0].init.type\n === 'ArrowFunctionExpression'\n ) {\n valid = true;\n }\n }\n });\n }\n } catch (e) {\n valid = false;\n }\n\n return valid;\n};\n\nexport const getValidFiles = (files, modelsDir) => files\n .map((file) => {\n const filePath = path.join(modelsDir, file);\n const valid = isValidHook(filePath);\n if (valid) {\n return filePath;\n }\n return '';\n })\n .filter(ele => !!ele);\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-monaco-editor/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-monaco-editor/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎········`","line":25,"column":19,"nodeType":null,"messageId":"delete","endLine":26,"endColumn":9,"fix":{"range":[651,660],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎················`","line":42,"column":18,"nodeType":null,"messageId":"delete","endLine":43,"endColumn":17,"fix":{"range":[1156,1173],"text":""}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"import { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { resolvePkg } from '@fesjs/utils';\n\nconst namespace = 'plugin-monaco-editor';\n\nexport default (api) => {\n const {\n utils: { Mustache }\n } = api;\n\n api.describe({\n key: 'monacoEditor',\n config: {\n schema(joi) {\n return joi.object().keys({\n filename: joi.string(),\n publicPath: joi.string(),\n languages: joi.array(),\n features: joi.array(),\n globalAPI: joi.boolean()\n });\n }\n },\n default: {\n }\n });\n\n const absoluteFilePath = join(namespace, 'core.js');\n\n const absRuntimeFilePath = join(namespace, 'runtime.js');\n\n const absLoaderFilePath = join(namespace, 'loader.js');\n const absEditorFilePath = join(namespace, 'editor.vue');\n\n api.onGenerateFiles(() => {\n // 文件写出\n api.writeTmpFile({\n path: absoluteFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'),\n {\n }\n )\n });\n\n api.writeTmpFile({\n path: absRuntimeFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8')\n )\n });\n\n api.writeTmpFile({\n path: absLoaderFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/loader.tpl'), 'utf-8'),\n {\n MONACO_EDITOR: resolvePkg('monaco-editor')\n }\n )\n });\n\n api.writeTmpFile({\n path: absEditorFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/editor.tpl'), 'utf-8'),\n {\n LODASH_ES: resolvePkg('lodash-es')\n }\n )\n });\n\n api.copyTmpFiles({\n namespace,\n path: join(__dirname, 'runtime'),\n ignore: ['.tpl']\n });\n });\n\n api.addPluginExports(() => [\n {\n specifiers: ['monaco', 'MonacoEditor'],\n source: absoluteFilePath\n }\n ]);\n\n api.addRuntimePluginKey(() => 'monacoEditor');\n\n api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);\n\n api.chainWebpack((webpackConfig) => {\n webpackConfig\n .plugin('monaco-editor')\n .use(require('monaco-editor-webpack-plugin'), [\n api.config?.monacoEditor || {}\n ]);\n return webpackConfig;\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-monaco-editor/src/runtime/theme/default.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-qiankun/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-qiankun/src/constants.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-qiankun/src/index.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-qiankun/src/main/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":15,"column":40,"nodeType":null,"messageId":"insert","endLine":15,"endColumn":40,"fix":{"range":[413,413],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·||`","line":16,"column":8,"nodeType":null,"messageId":"delete","endLine":16,"endColumn":11,"fix":{"range":[421,424],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `config` with `(config)`","line":29,"column":29,"nodeType":null,"messageId":"replace","endLine":29,"endColumn":35,"fix":{"range":[673,679],"text":"(config)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `namespace,·'MicroAppWithMemoHistory.js'` with `⏎········namespace,⏎········'MicroAppWithMemoHistory.js'⏎····`","line":37,"column":49,"nodeType":null,"messageId":"replace","endLine":37,"endColumn":88,"fix":{"range":[904,943],"text":"\n namespace,\n 'MicroAppWithMemoHistory.js'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎························&&` with `·&&⏎·······················`","line":54,"column":41,"nodeType":null,"messageId":"replace","endLine":55,"endColumn":27,"fix":{"range":[1624,1651],"text":" &&\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `join(__dirname,·'runtime/MicroAppWithMemoHistory.tpl'),·'utf-8'),` with `⏎····················join(__dirname,·'runtime/MicroAppWithMemoHistory.tpl'),⏎····················'utf-8'`","line":72,"column":30,"nodeType":null,"messageId":"replace","endLine":72,"endColumn":95,"fix":{"range":[2253,2318],"text":"\n join(__dirname, 'runtime/MicroAppWithMemoHistory.tpl'),\n 'utf-8'"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `{` with `),`","line":73,"column":17,"nodeType":null,"messageId":"replace","endLine":73,"endColumn":18,"fix":{"range":[2335,2336],"text":"),"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `{`","line":74,"column":17,"nodeType":null,"messageId":"insert","endLine":74,"endColumn":17,"fix":{"range":[2353,2353],"text":"{"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":95,"column":34,"nodeType":null,"messageId":"insert","endLine":95,"endColumn":34,"fix":{"range":[2913,2913],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":101,"column":9,"nodeType":null,"messageId":"insert","endLine":101,"endColumn":9,"fix":{"range":[3143,3143],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":102,"column":1,"nodeType":null,"messageId":"insert","endLine":102,"endColumn":1,"fix":{"range":[3162,3162],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":103,"column":9,"nodeType":null,"messageId":"insert","endLine":103,"endColumn":9,"fix":{"range":[3184,3184],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":104,"column":1,"nodeType":null,"messageId":"insert","endLine":104,"endColumn":1,"fix":{"range":[3195,3195],"text":" "}}],"errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":13,"fixableWarningCount":0,"source":"import { readFileSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport { resolvePkg } from '@fesjs/utils';\nimport {\n defaultMainRootId,\n defaultHistoryType,\n qiankunStateForMicroModelNamespace\n} from '../constants';\nimport modifyRoutes from './modifyRoutes';\n\nconst namespace = 'plugin-qiankun/main';\n\nexport function isMasterEnable(api) {\n return (\n !!api.userConfig?.qiankun?.main\n || !!process.env.INITIAL_QIANKUN_MAIN_OPTIONS\n );\n}\n\nexport default function (api) {\n const {\n utils: { Mustache, winPath }\n } = api;\n\n api.describe({\n enableBy: () => isMasterEnable(api)\n });\n\n api.modifyDefaultConfig(config => ({\n ...config,\n mountElementId: defaultMainRootId\n }));\n\n modifyRoutes({ api, namespace });\n\n const absMicroAppPath = join(namespace, 'MicroApp.js');\n const absMicroAppWithMemoHistoryPath = join(namespace, 'MicroAppWithMemoHistory.js');\n const absRuntimePath = join(namespace, 'runtime.js');\n const absMasterOptionsPath = join(namespace, 'masterOptions.js');\n const absGetMicroAppRouteCompPath = join(\n namespace,\n 'getMicroAppRouteComponent.js'\n );\n\n api.onGenerateFiles(() => {\n const HAS_PLUGIN_MODEL = api.hasPlugins(['@fesjs/plugin-model']);\n api.writeTmpFile({\n path: absMicroAppPath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/MicroApp.tpl'), 'utf-8'),\n {\n qiankunStateForMicroModelNamespace,\n HAS_PLUGIN_MODEL:\n HAS_PLUGIN_MODEL\n && existsSync(\n winPath(\n join(\n api.paths.absSrcPath,\n 'models/qiankunStateForMicro.js'\n )\n )\n ),\n QIANKUN: resolvePkg('qiankun'),\n LODASH_ES: resolvePkg('lodash-es')\n }\n )\n });\n\n api.writeTmpFile({\n path: absMicroAppWithMemoHistoryPath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/MicroAppWithMemoHistory.tpl'), 'utf-8'),\n {\n }\n )\n });\n\n api.writeTmpFile({\n path: absRuntimePath,\n content: readFileSync(\n join(__dirname, 'runtime/runtime.tpl'),\n 'utf-8'\n )\n });\n\n api.writeTmpFile({\n path: absGetMicroAppRouteCompPath,\n content: readFileSync(\n join(__dirname, 'runtime/getMicroAppRouteComponent.tpl'),\n 'utf-8'\n )\n });\n\n const { main: options } = api.config?.qiankun || {};\n const masterHistoryType = api.config?.router?.mode || defaultHistoryType;\n const base = api.config.base;\n api.writeTmpFile({\n path: absMasterOptionsPath,\n content: `\n let options = ${JSON.stringify({\n masterHistoryType,\n base,\n ...options\n })};\n export const getMasterOptions = () => options;\n export const setMasterOptions = (newOpts) => options = ({ ...options, ...newOpts });\n `\n });\n });\n\n api.addPluginExports(() => [\n {\n specifiers: ['MicroApp'],\n source: absMicroAppPath\n }\n ]);\n\n api.addPluginExports(() => [\n {\n specifiers: ['MicroAppWithMemoHistory'],\n source: absMicroAppWithMemoHistoryPath\n }\n ]);\n\n api.addPluginExports(() => [\n {\n specifiers: ['getMicroAppRouteComponent'],\n source: absGetMicroAppRouteCompPath\n }\n ]);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-qiankun/src/main/modifyRoutes.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·microAppName,·masterHistoryType,·base,·namespace,` with `⏎········microAppName,⏎········masterHistoryType,⏎········base,⏎········namespace,⏎·······`","line":5,"column":13,"nodeType":null,"messageId":"replace","endLine":5,"endColumn":63,"fix":{"range":[108,158],"text":"\n microAppName,\n masterHistoryType,\n base,\n namespace,\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `normalizedRouteProps` with `⏎········normalizedRouteProps⏎····`","line":9,"column":167,"nodeType":null,"messageId":"replace","endLine":9,"endColumn":187,"fix":{"range":[479,499],"text":"\n normalizedRouteProps\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·masterHistoryType,·base,` with `⏎····masterHistoryType,⏎····base,⏎···`","line":14,"column":12,"nodeType":null,"messageId":"replace","endLine":14,"endColumn":37,"fix":{"range":[564,589],"text":"\n masterHistoryType,\n base,\n "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import { defaultHistoryType } from '../constants';\n\nfunction getMicroApp(options) {\n const {\n key, microAppName, masterHistoryType, base, namespace, ...normalizedRouteProps\n } = options;\n return `(() => {\nconst { getMicroAppRouteComponent } = require('@@/${namespace}/getMicroAppRouteComponent');\nreturn getMicroAppRouteComponent({key: '${key}', appName: '${microAppName}', base: '${base}', masterHistoryType: '${masterHistoryType}', routeProps: ${JSON.stringify(normalizedRouteProps)} })\n})()`;\n}\n\nfunction modifyRoutesWithAttachMode({\n routes, masterHistoryType, base, namespace\n}) {\n const patchRoutes = (_routes) => {\n if (_routes.length) {\n _routes.forEach((route) => {\n if (route.meta && route.meta.microApp) {\n route.component = getMicroApp({\n key: route.path,\n microAppName: route.meta.microApp,\n masterHistoryType,\n base,\n namespace\n });\n }\n if (route.children?.length) {\n modifyRoutesWithAttachMode({\n routes: route.children,\n masterHistoryType,\n base,\n namespace\n });\n }\n });\n }\n };\n\n patchRoutes(routes);\n\n return routes;\n}\n\nexport default function modifyRoutes({ api, namespace }) {\n api.modifyRoutes((routes) => {\n const { router, base } = api.config;\n const masterHistoryType = (router && router.mode) || defaultHistoryType;\n\n modifyRoutesWithAttachMode({\n routes,\n masterHistoryType,\n base: base || '/',\n namespace\n });\n\n return routes;\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-qiankun/src/micro/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":12,"column":41,"nodeType":null,"messageId":"insert","endLine":12,"endColumn":41,"fix":{"range":[364,364],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·||·lodash.isEqual(api.userConfig?.qiankun,·{})` with `·lodash.isEqual(api.userConfig?.qiankun,·{})·||`","line":13,"column":8,"nodeType":null,"messageId":"replace","endLine":13,"endColumn":55,"fix":{"range":[372,419],"text":" lodash.isEqual(api.userConfig?.qiankun, {}) ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·||`","line":14,"column":8,"nodeType":null,"messageId":"delete","endLine":14,"endColumn":11,"fix":{"range":[427,430],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·api.userConfig.qiankun?.slave?.shouldNotModifyDefaultBase` with `⏎············api.userConfig.qiankun?.slave?.shouldNotModifyDefaultBase·??`","line":42,"column":43,"nodeType":null,"messageId":"replace","endLine":42,"endColumn":101,"fix":{"range":[1148,1206],"text":"\n api.userConfig.qiankun?.slave?.shouldNotModifyDefaultBase ??"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·??`","line":43,"column":12,"nodeType":null,"messageId":"delete","endLine":43,"endColumn":15,"fix":{"range":[1218,1221],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·&&`","line":69,"column":35,"nodeType":null,"messageId":"insert","endLine":69,"endColumn":35,"fix":{"range":[2158,2158],"text":" &&"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·&&·api.config.qiankun.micro` with `·api.config.qiankun.micro·&&`","line":70,"column":16,"nodeType":null,"messageId":"replace","endLine":70,"endColumn":44,"fix":{"range":[2174,2202],"text":" api.config.qiankun.micro &&"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·&&`","line":71,"column":16,"nodeType":null,"messageId":"delete","endLine":71,"endColumn":19,"fix":{"range":[2218,2221],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·?·[` with `⏎················?·[⏎······················`","line":101,"column":36,"nodeType":null,"messageId":"replace","endLine":101,"endColumn":40,"fix":{"range":[3406,3410],"text":"\n ? [\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `··························`","line":102,"column":1,"nodeType":null,"messageId":"replace","endLine":102,"endColumn":17,"fix":{"range":[3412,3428],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··········`","line":103,"column":1,"nodeType":null,"messageId":"insert","endLine":103,"endColumn":1,"fix":{"range":[3459,3459],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············}]` with `······················}⏎··················]⏎···············`","line":104,"column":1,"nodeType":null,"messageId":"replace","endLine":104,"endColumn":15,"fix":{"range":[3521,3535],"text":" }\n ]\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎················`","line":121,"column":38,"nodeType":null,"messageId":"insert","endLine":121,"endColumn":38,"fix":{"range":[3970,3970],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":122,"column":1,"nodeType":null,"messageId":"insert","endLine":122,"endColumn":1,"fix":{"range":[3984,3984],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":123,"column":17,"nodeType":null,"messageId":"insert","endLine":123,"endColumn":17,"fix":{"range":[4059,4059],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `),` with `····),⏎···············`","line":124,"column":13,"nodeType":null,"messageId":"replace","endLine":124,"endColumn":15,"fix":{"range":[4079,4081],"text":" ),\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":125,"column":1,"nodeType":null,"messageId":"insert","endLine":125,"endColumn":1,"fix":{"range":[4084,4084],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎············`","line":126,"column":13,"nodeType":null,"messageId":"replace","endLine":126,"endColumn":14,"fix":{"range":[4129,4130],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `················`","line":143,"column":1,"nodeType":null,"messageId":"replace","endLine":143,"endColumn":9,"fix":{"range":[4618,4626],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":144,"column":1,"nodeType":null,"messageId":"insert","endLine":144,"endColumn":1,"fix":{"range":[4665,4665],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `join(__dirname,·'runtime/qiankunModel.tpl'),·'utf-8'` with `⏎····················join(__dirname,·'runtime/qiankunModel.tpl'),⏎····················'utf-8'⏎················`","line":153,"column":39,"nodeType":null,"messageId":"replace","endLine":153,"endColumn":91,"fix":{"range":[4991,5043],"text":"\n join(__dirname, 'runtime/qiankunModel.tpl'),\n 'utf-8'\n "}}],"errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":21,"fixableWarningCount":0,"source":"import assert from 'assert';\nimport address from 'address';\nimport { lodash } from '@fesjs/utils';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { qiankunStateFromMainModelNamespace } from '../constants';\n\nconst namespace = 'plugin-qiankun/micro';\n\nexport function isSlaveEnable(api) {\n return (\n !!api.userConfig?.qiankun?.micro\n || lodash.isEqual(api.userConfig?.qiankun, {})\n || !!process.env.INITIAL_QIANKUN_MIRCO_OPTIONS\n );\n}\n\nexport default function (api) {\n const {\n utils: { Mustache }\n } = api;\n\n api.describe({\n enableBy: () => isSlaveEnable(api)\n });\n\n api.modifyDefaultConfig((memo) => {\n const initialMicroOptions = {\n devSourceMap: true,\n ...JSON.parse(process.env.INITIAL_QIANKUN_MIRCO_OPTIONS || '{}'),\n ...(memo.qiankun || {}).micro\n };\n const modifiedDefaultConfig = {\n ...memo,\n runtimePublicPath: true,\n qiankun: {\n ...memo.qiankun,\n slave: initialMicroOptions\n }\n };\n\n const shouldNotModifyDefaultBase = api.userConfig.qiankun?.slave?.shouldNotModifyDefaultBase\n ?? initialMicroOptions.shouldNotModifyDefaultBase;\n if (!shouldNotModifyDefaultBase) {\n modifiedDefaultConfig.base = `/${api.pkg.name}`;\n }\n\n return modifiedDefaultConfig;\n });\n\n api.chainWebpack((config) => {\n assert(api.pkg.name, 'You should have name in package.json');\n config.output.libraryTarget('umd').library(`${api.pkg.name}-[name]`);\n return config;\n });\n\n const port = process.env.PORT;\n // source-map 跨域设置\n if (process.env.NODE_ENV === 'development' && port) {\n const localHostname = process.env.USE_REMOTE_IP\n ? address.ip()\n : process.env.HOST || 'localhost';\n\n const protocol = process.env.HTTPS ? 'https' : 'http';\n // TODO: 变更 webpack-dev-server websocket 默认监听地址\n api.chainWebpack((memo, { webpack }) => {\n // 开启了 devSourceMap 配置,默认为 true\n if (\n api.config.qiankun\n && api.config.qiankun.micro\n && api.config.qiankun.micro.devSourceMap !== false\n ) {\n // 禁用 devtool,启用 SourceMapDevToolPlugin\n memo.devtool(false);\n memo.plugin('source-map').use(webpack.SourceMapDevToolPlugin, [\n {\n // @ts-ignore\n namespace: api.pkg.name,\n append: `\\n//# sourceMappingURL=${protocol}://${localHostname}:${port}/[url]`,\n filename: '[file].map'\n }\n ]);\n }\n return memo;\n });\n }\n\n const absRuntimePath = join(namespace, 'runtime.js');\n const absLifeclesPath = join(namespace, 'lifecycles.js');\n const absMicroOptionsPath = join(namespace, 'slaveOptions.js');\n const absPublicPath = join(namespace, 'publicPath.js');\n const absModelPath = join(namespace, 'qiankunModel.js');\n\n // 更改public path\n api.addEntryImportsAhead(() => [{ source: `@@/${absPublicPath}` }]);\n\n api.register({\n key: 'addExtraModels',\n fn: () => {\n const HAS_PLUGIN_MODEL = api.hasPlugins(['@fesjs/plugin-model']);\n return HAS_PLUGIN_MODEL ? [{\n absPath: `@@/${absModelPath}`,\n namespace: qiankunStateFromMainModelNamespace\n }] : [];\n }\n });\n\n api.onGenerateFiles(() => {\n const HAS_PLUGIN_MODEL = api.hasPlugins(['@fesjs/plugin-model']);\n\n api.writeTmpFile({\n path: absRuntimePath,\n content: readFileSync(\n join(__dirname, 'runtime/runtime.tpl'),\n 'utf-8'\n )\n });\n\n api.writeTmpFile({\n path: absLifeclesPath,\n content: Mustache.render(readFileSync(\n join(__dirname, 'runtime/lifecycles.tpl'),\n 'utf-8'\n ), {\n HAS_PLUGIN_MODEL\n })\n });\n\n api.writeTmpFile({\n path: absPublicPath,\n content: `\n if (window.__POWERED_BY_QIANKUN__) {\n __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;\n window.public_path = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;\n }\n `\n });\n\n api.writeTmpFile({\n path: absMicroOptionsPath,\n content: `\n let options = ${JSON.stringify(\n (api.config.qiankun || {}).micro || {}\n )};\n export const getSlaveOptions = () => options;\n export const setSlaveOptions = (newOpts) => options = ({ ...options, ...newOpts });\n `\n });\n\n if (HAS_PLUGIN_MODEL) {\n api.writeTmpFile({\n path: absModelPath,\n content: readFileSync(join(__dirname, 'runtime/qiankunModel.tpl'), 'utf-8')\n });\n }\n });\n\n api.addRuntimePlugin(() => `@@/${absRuntimePath}`);\n\n api.addEntryImports(() => ({\n source: `@@/${absLifeclesPath}`,\n specifier:\n '{ genMount as qiankun_genMount, genBootstrap as qiankun_genBootstrap, genUnmount as qiankun_genUnmount, genUpdate as qiankun_genUpdate }'\n }));\n\n api.addEntryCode(\n () => `\nexport const bootstrap = qiankun_genBootstrap(clientRender, app);\nexport const mount = qiankun_genMount('#${api.config.mountElementId}');\nexport const unmount = qiankun_genUnmount();\nexport const update = qiankun_genUpdate();\n\nif (!window.__POWERED_BY_QIANKUN__) {\n bootstrap().then(mount);\n}\n`\n );\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['template']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎························.string()⏎························` with `.string()`","line":20,"column":30,"nodeType":null,"messageId":"replace","endLine":22,"endColumn":25,"fix":{"range":[587,646],"text":".string()"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `join(__dirname,·'template',·'request.js'),·'utf-8'` with `⏎········join(__dirname,·'template',·'request.js'),⏎········'utf-8'⏎····`","line":34,"column":42,"nodeType":null,"messageId":"replace","endLine":34,"endColumn":92,"fix":{"range":[941,991],"text":"\n join(__dirname, 'template', 'request.js'),\n 'utf-8'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'[DEPRECATED]:·reqeust·base·即将废弃,建议使用·axios·baseURL代替:https://github.com/axios/axios'` with `⏎················'[DEPRECATED]:·reqeust·base·即将废弃,建议使用·axios·baseURL代替:https://github.com/axios/axios'⏎············`","line":41,"column":25,"nodeType":null,"messageId":"replace","endLine":41,"endColumn":110,"fix":{"range":[1179,1264],"text":"\n '[DEPRECATED]: reqeust base 即将废弃,建议使用 axios baseURL代替:https://github.com/axios/axios'\n "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import { Logger } from '@fesjs/compiler';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { resolvePkg } from '@fesjs/utils';\n\nconst logger = new Logger('fes:plugin-request');\n\nexport default (api) => {\n api.addRuntimePluginKey(() => 'request');\n // 配置\n api.describe({\n key: 'request',\n config: {\n schema(joi) {\n return joi.object({\n dataField: joi\n .string()\n .pattern(/^[a-zA-Z]*$/)\n .allow(''),\n base: joi\n .string()\n .allow('')\n });\n },\n default: {\n base: '',\n dataField: ''\n }\n }\n });\n\n const namespace = 'plugin-request';\n const absoluteFilePath = `${namespace}/request.js`;\n const requestTemplate = readFileSync(join(__dirname, 'template', 'request.js'), 'utf-8');\n api.onGenerateFiles(() => {\n // 文件写出\n const { dataField = '', base = '' } = api.config.request;\n\n if (base) {\n // DEPRECATED\n logger.warn('[DEPRECATED]: reqeust base 即将废弃,建议使用 axios baseURL代替:https://github.com/axios/axios');\n }\n api.writeTmpFile({\n path: absoluteFilePath,\n content: requestTemplate\n .replace('REPLACE_DATA_FIELD', JSON.stringify(dataField))\n .replace('REPLACE_BASE', base || '')\n .replace('AXIOS_PATH', resolvePkg('axios'))\n });\n });\n\n let generatedOnce = false;\n api.onGenerateFiles(() => {\n if (generatedOnce) return;\n generatedOnce = true;\n api.copyTmpFiles({\n namespace,\n path: join(__dirname, 'template'),\n ignore: ['request.js']\n });\n });\n\n api.addPluginExports(() => [\n {\n exportAll: true,\n source: absoluteFilePath\n }\n ]);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/cacheControl.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·isString,·isURLSearchParams,` with `⏎····isString,⏎····isURLSearchParams,⏎···`","line":2,"column":14,"nodeType":null,"messageId":"replace","endLine":2,"endColumn":43,"fix":{"range":[22,51],"text":"\n isString,\n isURLSearchParams,\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":21,"column":4,"nodeType":null,"messageId":"delete","endLine":22,"endColumn":1,"fix":{"range":[468,469],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `!data·||·isObject(data)·||·isString(data)·||·Array.isArray(data)·||·isURLSearchParams(data)` with `(⏎········!data·||⏎········isObject(data)·||⏎········isString(data)·||⏎········Array.isArray(data)·||⏎········isURLSearchParams(data)⏎····)`","line":57,"column":12,"nodeType":null,"messageId":"replace","endLine":57,"endColumn":103,"fix":{"range":[1161,1252],"text":"(\n !data ||\n isObject(data) ||\n isString(data) ||\n Array.isArray(data) ||\n isURLSearchParams(data)\n )"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `item.startsWith(CACHE_KEY_PREFIX)·&&·Object.prototype.hasOwnProperty.call(cacheInstance,·item)` with `⏎····················item.startsWith(CACHE_KEY_PREFIX)·&&⏎····················Object.prototype.hasOwnProperty.call(cacheInstance,·item)⏎················`","line":81,"column":21,"nodeType":null,"messageId":"replace","endLine":81,"endColumn":115,"fix":{"range":[1847,1941],"text":"\n item.startsWith(CACHE_KEY_PREFIX) &&\n Object.prototype.hasOwnProperty.call(cacheInstance, item)\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·key:·ctx.key,·cacheType:·config.cache.cacheType` with `⏎············key:·ctx.key,⏎············cacheType:·config.cache.cacheType⏎·······`","line":178,"column":41,"nodeType":null,"messageId":"replace","endLine":178,"endColumn":89,"fix":{"range":[4612,4660],"text":"\n key: ctx.key,\n cacheType: config.cache.cacheType\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·?·config.data` with `⏎············?·config.data⏎···········`","line":196,"column":67,"nodeType":null,"messageId":"replace","endLine":196,"endColumn":81,"fix":{"range":[5132,5146],"text":"\n ? config.data\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `!ctx.error·&&·ctx.response·&&·canCache(requestdata)·&&·canCache(ctx.response.data)` with `⏎············!ctx.error·&&⏎············ctx.response·&&⏎············canCache(requestdata)·&&⏎············canCache(ctx.response.data)⏎········`","line":197,"column":13,"nodeType":null,"messageId":"replace","endLine":197,"endColumn":95,"fix":{"range":[5176,5258],"text":"\n !ctx.error &&\n ctx.response &&\n canCache(requestdata) &&\n canCache(ctx.response.data)\n "}}],"errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":7,"fixableWarningCount":0,"source":"import {\n isObject, isString, isURLSearchParams, checkHttpRequestHasBody\n} from './helpers';\n/**\n * 缓存实现的功能\n * 1. 唯一定位一个请求(url, data | params, method)\n * 其中请求参数根据请求方法使用其中一个就够了\n * 一个请求同时包含 data | params 参数的设计本身不合理\n * 不对这种情况进行兼容\n * 2. 控制缓存内容的大小,localStorage 只有5M\n * 3. 控制缓存时间\n * session(存在内存中)\n * expireTime 存在localStoreage 中\n * 4. 成功的、且响应内容为json的请求进行缓存\n */\n\n/**\n * 配置数据\n * type: 'ram' | 'sessionStorage' | 'localStorage'\n * cacheTime: ''\n */\n\n\n/**\n * 缓存数据结构\n * cache: {\n * url: 'url', // 缓存 url\n * data: data, // 数据\n * expire: '' // 缓存时间\n * }\n */\n\n/**\n * 请求参数可以为如下类型\n * - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams\n * - Browser only: FormData, File, Blob\n * 只缓存参数类型为: string、plain object、URLSearchParams 或者无参数的 请求\n */\n\nconst CACHE_KEY_PREFIX = '__FES_REQUEST_CACHE:';\nconst CACHE_TYPE = {\n ram: 'ram',\n session: 'sessionStorage',\n local: 'localStorage'\n};\n\nconst CACHE_DATA_MAP = new Map();\n\nfunction genInnerKey(key, cacheType = 'ram') {\n if (cacheType !== CACHE_TYPE.ram) {\n return `${CACHE_KEY_PREFIX}${key}`;\n }\n return key;\n}\n\nfunction canCache(data) {\n return !data || isObject(data) || isString(data) || Array.isArray(data) || isURLSearchParams(data);\n}\n\nfunction setCacheData({\n key,\n cacheType = 'ram',\n data,\n cacheTime = 1000 * 60 * 3\n}) {\n const _key = genInnerKey(key, cacheType);\n\n const currentCacheData = {\n cacheType,\n data,\n cacheTime,\n expire: Date.now() + cacheTime\n };\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n try {\n cacheInstance.setItem(_key, JSON.stringify(currentCacheData));\n } catch (e) {\n // setItem 出现异常,清理缓存\n for (const item in cacheInstance) {\n if (item.startsWith(CACHE_KEY_PREFIX) && Object.prototype.hasOwnProperty.call(cacheInstance, item)) {\n cacheInstance.removeItem(item);\n }\n }\n }\n } else {\n CACHE_DATA_MAP.set(_key, currentCacheData);\n }\n}\n\nfunction isExpire({ expire, cacheTime }) {\n if (!cacheTime || expire >= Date.now()) {\n return false;\n }\n return true;\n}\n\nfunction getCacheData({ key, cacheType = 'ram' }) {\n const _key = genInnerKey(key, cacheType);\n if (cacheType !== CACHE_TYPE.ram) {\n const cacheInstance = window[CACHE_TYPE[cacheType]];\n const text = cacheInstance.getItem(_key) || null;\n try {\n const currentCacheData = JSON.parse(text);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n cacheInstance.removeItem(_key);\n return null;\n } catch (e) {\n cacheInstance.removeItem(_key);\n return null;\n }\n } else {\n const currentCacheData = CACHE_DATA_MAP.get(_key);\n if (currentCacheData && !isExpire(currentCacheData)) {\n return currentCacheData.data;\n }\n CACHE_DATA_MAP.delete(_key);\n return null;\n }\n}\n\n// 存储缓存队列\nconst cacheStartFlag = new Map();\nconst cachingQueue = new Map();\n\n/**\n * 等上一次请求结果\n * 1. 如果上一次请求成功,直接使用上一次的请求结果\n * 2. 如果上一次请求失败,重启本次请求\n */\nfunction handleCachingStart(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const caching = cacheStartFlag.get(_key);\n if (caching) {\n return new Promise((resolve) => {\n const queue = cachingQueue.get(_key) || [];\n cachingQueue.set(_key, queue.concat(resolve));\n });\n }\n cacheStartFlag.set(_key, true);\n}\n\n// 有请求成功的\nfunction handleCachingQueueSuccess(ctx, config) {\n // 移除首次缓存 flag\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n queue.forEach((resolve) => {\n resolve({\n response: ctx.response\n });\n });\n }\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n}\n\n// 处理请求失败\nfunction handleCachingQueueError(ctx, config) {\n const _key = genInnerKey(ctx.key, config.cache.cacheType);\n const queue = cachingQueue.get(_key);\n if (queue && queue.length > 0) {\n const firstResolve = queue.shift();\n firstResolve();\n cachingQueue.set(_key, queue);\n } else {\n cachingQueue.delete(_key);\n cacheStartFlag.delete(_key);\n }\n}\n\nexport default async (ctx, next) => {\n const { config } = ctx;\n if (config.cache) {\n const cacheData = getCacheData({ key: ctx.key, cacheType: config.cache.cacheType });\n if (cacheData) {\n ctx.response = {\n data: cacheData\n };\n return;\n }\n const result = await handleCachingStart(ctx, config);\n if (result) {\n Object.keys(result).forEach((key) => {\n ctx[key] = result[key];\n });\n return;\n }\n }\n await next();\n\n if (config.cache) {\n const requestdata = checkHttpRequestHasBody(config.method) ? config.data : config.params;\n if (!ctx.error && ctx.response && canCache(requestdata) && canCache(ctx.response.data)) {\n handleCachingQueueSuccess(ctx, config);\n\n setCacheData({\n key: ctx.key,\n data: ctx.response.data,\n ...config.cache\n });\n } else {\n handleCachingQueueError(ctx, config);\n }\n }\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/genRequestKey.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········url,·data,·params,·method⏎···` with `·url,·data,·params,·method`","line":17,"column":12,"nodeType":null,"messageId":"replace","endLine":19,"endColumn":4,"fix":{"range":[425,463],"text":" url, data, params, method"}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { isURLSearchParams } from './helpers';\n/**\n * 唯一定位一个请求(url, data | params, method)\n * 其中请求参数(data, params)根据请求方法,只使用其中一个\n * 一个请求同时包含 data | params 参数的设计本身不合理\n * 不对这种情况进行兼容\n */\n\nconst getQueryString = (data) => {\n if (isURLSearchParams(data)) {\n return data.toString();\n }\n return data ? JSON.stringify(data) : '';\n};\n\nexport default async function genRequestKey(ctx, next) {\n const {\n url, data, params, method\n } = ctx.config;\n\n ctx.key = `${url}${getQueryString(data)}${getQueryString(params)}${method}`;\n\n await next();\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/helpers.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `val·=>·val·!=·null;⏎` with `(val)·=>·val·!=·null;`","line":49,"column":26,"nodeType":null,"messageId":"replace","endLine":50,"endColumn":1,"fix":{"range":[1133,1153],"text":"(val) => val != null;"}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"/**\n *判断类型\n * @param {*} obj 需要判断的对象\n */\nexport function typeOf(obj) {\n const map = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regExp',\n '[object Undefined]': 'undefined',\n '[object Null]': 'null',\n '[object Object]': 'object',\n '[object URLSearchParams]': 'URLSearchParams'\n };\n return map[Object.prototype.toString.call(obj)];\n}\n\nexport function isFunction(obj) {\n return typeOf(obj) === 'function';\n}\n\nexport function isDate(obj) {\n return typeOf(obj) === 'date';\n}\n\nexport function isString(obj) {\n return typeOf(obj) === 'string';\n}\n\nexport function isArray(obj) {\n return typeOf(obj) === 'array';\n}\n\nexport function isObject(obj) {\n return typeOf(obj) === 'object';\n}\n\nexport function isURLSearchParams(obj) {\n return typeOf(obj) === 'URLSearchParams';\n}\n\n// eslint-disable-next-line\nexport const isUndefined = val => val === undefined;\n\nexport const isDefined = val => val != null;\n\n\nexport function checkHttpRequestHasBody(method) {\n method = method.toUpperCase();\n const HTTP_METHOD = {\n GET: {\n request_body: false\n },\n POST: {\n request_body: true\n },\n PUT: {\n request_body: true\n },\n DELETE: {\n request_body: true\n },\n HEAD: {\n request_body: false\n },\n OPTIONS: {\n request_body: false\n },\n PATCH: {\n request_body: true\n }\n };\n return HTTP_METHOD[method].request_body;\n}\n\nexport function trimObj(obj) {\n if (isObject(obj)) {\n Object.entries(obj).forEach(([key, value]) => {\n if (isString(value)) {\n obj[key] = value.trim();\n } else if (isObject(value)) {\n trimObj(value);\n }\n });\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/paramsProcess.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/preventRepeatReq.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/request.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····checkHttpRequestHasBody,⏎····isFunction⏎` with `·checkHttpRequestHasBody,·isFunction·`","line":5,"column":9,"nodeType":null,"messageId":"replace","endLine":8,"endColumn":1,"fix":{"range":[159,204],"text":" checkHttpRequestHasBody, isFunction "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":59,"column":41,"nodeType":null,"messageId":"insert","endLine":59,"endColumn":41,"fix":{"range":[1684,1684],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":60,"column":1,"nodeType":null,"messageId":"insert","endLine":60,"endColumn":1,"fix":{"range":[1686,1686],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":61,"column":1,"nodeType":null,"messageId":"replace","endLine":61,"endColumn":9,"fix":{"range":[1710,1718],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `},·otherConfigs` with `····},⏎········otherConfigs⏎····`","line":62,"column":5,"nodeType":null,"messageId":"replace","endLine":62,"endColumn":20,"fix":{"range":[1744,1759],"text":" },\n otherConfigs\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":125,"column":1,"nodeType":null,"messageId":"delete","endLine":126,"endColumn":1,"fix":{"range":[3307,3308],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····errorHandler·=·{},⏎····error,⏎····response,⏎····config⏎` with `·errorHandler·=·{},·error,·response,·config·`","line":145,"column":30,"nodeType":null,"messageId":"replace","endLine":150,"endColumn":1,"fix":{"range":[3801,3861],"text":" errorHandler = {}, error, response, config "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·?·context.response` with `⏎················?·context.response⏎···············`","line":185,"column":45,"nodeType":null,"messageId":"replace","endLine":185,"endColumn":64,"fix":{"range":[4981,5000],"text":"\n ? context.response\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":206,"column":12,"nodeType":null,"messageId":"insert","endLine":206,"endColumn":12,"fix":{"range":[5550,5550],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":207,"column":1,"nodeType":null,"messageId":"insert","endLine":207,"endColumn":1,"fix":{"range":[5567,5567],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎········`","line":208,"column":5,"nodeType":null,"messageId":"replace","endLine":208,"endColumn":7,"fix":{"range":[5600,5602],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":209,"column":9,"nodeType":null,"messageId":"insert","endLine":209,"endColumn":9,"fix":{"range":[5630,5630],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎········`","line":210,"column":5,"nodeType":null,"messageId":"replace","endLine":210,"endColumn":7,"fix":{"range":[5658,5660],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":211,"column":1,"nodeType":null,"messageId":"insert","endLine":211,"endColumn":1,"fix":{"range":[5677,5677],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":212,"column":1,"nodeType":null,"messageId":"insert","endLine":212,"endColumn":1,"fix":{"range":[5711,5711],"text":" "}}],"errorCount":15,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":15,"fixableWarningCount":0,"source":"import axios from 'AXIOS_PATH';\nimport { ApplyPluginsType, plugin } from '@fesjs/fes';\nimport { ref } from 'vue';\nimport scheduler from './scheduler';\nimport {\n checkHttpRequestHasBody,\n isFunction\n} from './helpers';\n\nimport setDataField from './setDataField';\nimport paramsProcess from './paramsProcess';\nimport genRequestKey from './genRequestKey';\nimport preventRepeatReq from './preventRepeatReq';\nimport throttle from './throttle';\nimport cacheControl from './cacheControl';\nimport resDataAdaptor from './resDataAdaptor';\nimport resErrorProcess from './resErrorProcess';\n\nfunction addInterceptors(instance, interceptors, type = 'request') {\n interceptors.forEach((fn) => {\n if (Array.isArray(fn)) {\n instance.interceptors[type].use(...fn);\n } else if (isFunction(fn)) {\n instance.interceptors[type].use(fn);\n }\n });\n}\n\nfunction addRequestInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'request');\n}\n\nfunction addResponseInterceptors(instance, interceptors) {\n addInterceptors(instance, interceptors, 'response');\n}\n\nasync function axiosMiddleware(context, next) {\n try {\n context.response = await context.instance.request(context.config);\n } catch (error) {\n context.error = error;\n }\n await next();\n}\n\nfunction getRequestInstance() {\n const {\n responseDataAdaptor,\n requestInterceptors = [],\n responseInterceptors = [],\n errorHandler,\n ...otherConfigs\n } = plugin.applyPlugins({\n key: 'request',\n type: ApplyPluginsType.modify,\n initialValue: {}\n });\n\n const defaultConfig = Object.assign({\n timeout: 10000,\n withCredentials: true\n }, otherConfigs);\n const instance = axios.create(defaultConfig);\n\n addRequestInterceptors(instance, requestInterceptors);\n addResponseInterceptors(instance, responseInterceptors);\n\n // 洋葱模型内部应该这是对数据的处理,避免有副作用调用\n scheduler\n .use(paramsProcess)\n .use(genRequestKey)\n .use(cacheControl)\n .use(preventRepeatReq)\n .use(throttle)\n .use(axiosMiddleware)\n .use(resDataAdaptor)\n .use(resErrorProcess)\n .use(setDataField);\n\n return {\n context: {\n instance,\n defaultConfig,\n dataField: REPLACE_DATA_FIELD, // eslint-disable-line\n responseDataAdaptor,\n errorHandler\n },\n request: scheduler.compose()\n };\n}\n\n// DEPRECATED 废弃,使用 axios baseURL\nfunction handleApiPathBase(url, options = {}) {\n if (url.startsWith('http')) return url;\n\n if (options.base) {\n return `${options.base}${url}`;\n }\n return `REPLACE_BASE${url}`;\n}\n\nfunction userConfigHandler(url, data, options = {}) {\n options.url = handleApiPathBase(url, options);\n options.method = (options.method || 'post').toUpperCase();\n if (checkHttpRequestHasBody(options.method)) {\n options.data = data;\n } else {\n options.params = data;\n }\n return options;\n}\n\nlet currentRequestInstance = null;\n\nfunction createContext(userConfig) {\n return {\n ...currentRequestInstance.context,\n config: {\n ...currentRequestInstance.context.defaultConfig,\n ...userConfig\n }\n };\n}\n\n\nfunction getResponseCode(response) {\n if (response) {\n if (response._rawData) return response._rawData.code;\n if (response.data) return response.data.code;\n }\n return null;\n}\n\nfunction skipErrorHandlerToObj(skipErrorHandler = []) {\n if (!Array.isArray(skipErrorHandler)) {\n skipErrorHandler = [skipErrorHandler];\n }\n\n return skipErrorHandler.reduce((acc, cur) => {\n acc[cur] = true;\n return acc;\n }, {});\n}\n\nfunction handleRequestError({\n errorHandler = {},\n error,\n response,\n config\n}) {\n // 跳过所有错误类型处理\n if (config.skipErrorHandler === true) return;\n\n const skipObj = skipErrorHandlerToObj(config.skipErrorHandler);\n const resCode = getResponseCode(response);\n\n let errorKey = 'default';\n if (resCode && errorHandler[resCode]) {\n errorKey = resCode;\n } else if (error.type && errorHandler[error.type]) {\n errorKey = error.type;\n } else if (error.response && errorHandler[error.response.status]) {\n errorKey = error.response.status;\n }\n\n if (!skipObj[errorKey] && errorHandler[errorKey]) {\n return errorHandler[errorKey](error);\n }\n}\n\nexport const request = (url, data, options = {}) => {\n if (typeof options === 'string') {\n options = {\n method: options\n };\n }\n if (!currentRequestInstance) {\n currentRequestInstance = getRequestInstance();\n }\n const userConfig = userConfigHandler(url, data, options);\n const context = createContext(userConfig);\n\n return currentRequestInstance.request(context).then(async () => {\n if (!context.error) {\n return context.config.useResonse ? context.response : context.response.data;\n }\n await handleRequestError(context);\n return Promise.reject(context.error);\n });\n};\n\nfunction isPromiseLike(obj) {\n return !!obj && typeof obj === 'object' && typeof obj.then === 'function';\n}\n\nexport const useRequest = (url, data, options = {}) => {\n const loadingRef = ref(true);\n const errorRef = ref(null);\n const dataRef = ref(null);\n let promise;\n if (isPromiseLike(url)) {\n promise = url;\n } else {\n promise = request(url, data, options);\n }\n promise.then((res) => {\n dataRef.value = res;\n }).catch((error) => {\n errorRef.value = error;\n }).finally(() => {\n loadingRef.value = false;\n });\n return {\n loading: loadingRef,\n error: errorRef,\n data: dataRef\n };\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/resDataAdaptor.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `isFunction(responseDataAdaptor)·&&·response·&&·(isObject(response.data)·||·isString(response.data))` with `⏎········isFunction(responseDataAdaptor)·&&⏎········response·&&⏎········(isObject(response.data)·||·isString(response.data))⏎····`","line":4,"column":9,"nodeType":null,"messageId":"replace","endLine":4,"endColumn":108,"fix":{"range":[137,236],"text":"\n isFunction(responseDataAdaptor) &&\n response &&\n (isObject(response.data) || isString(response.data))\n "}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { isFunction, isObject, isString } from './helpers';\n\nexport default async ({ response, responseDataAdaptor }, next) => {\n if (isFunction(responseDataAdaptor) && response && (isObject(response.data) || isString(response.data))) {\n response.data = responseDataAdaptor(response.data);\n }\n await next();\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/resErrorProcess.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········response,⏎········config⏎···` with `·response,·config`","line":5,"column":12,"nodeType":null,"messageId":"replace","endLine":8,"endColumn":4,"fix":{"range":[103,140],"text":" response, config"}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { isObject } from './helpers';\n\n// 错误处理等副作用网上提\nexport default async (ctx, next) => {\n const {\n response,\n config\n } = ctx;\n if (!config.closeResDataCheck && response && isObject(response.data)) {\n const code = response.data.code;\n if (code !== '0') {\n ctx.error = response; // code 不为零进入 reject\n }\n }\n\n await next();\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/scheduler.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":8,"column":38,"nodeType":null,"messageId":"insert","endLine":8,"endColumn":38,"fix":{"range":[128,128],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·return·Promise.reject(new·Error('next()·called·multiple·times')` with `⏎····················return·Promise.reject(⏎························new·Error('next()·called·multiple·times')⏎····················`","line":17,"column":32,"nodeType":null,"messageId":"replace","endLine":17,"endColumn":96,"fix":{"range":[396,460],"text":"\n return Promise.reject(\n new Error('next() called multiple times')\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `fn(context,·dispatch.bind(null,·i·+·1))` with `⏎························fn(context,·dispatch.bind(null,·i·+·1))⏎····················`","line":23,"column":44,"nodeType":null,"messageId":"replace","endLine":23,"endColumn":83,"fix":{"range":[718,757],"text":"\n fn(context, dispatch.bind(null, i + 1))\n "}}],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"\nclass Scheduler {\n constructor() {\n this.middlewares = [];\n }\n\n use(fn) {\n if (typeof fn !== 'function') throw new TypeError('middleware must be a function!');\n this.middlewares.push(fn);\n return this;\n }\n\n compose() {\n return (context, next) => {\n let index = -1;\n const dispatch = (i) => {\n if (i <= index) return Promise.reject(new Error('next() called multiple times'));\n index = i;\n let fn = this.middlewares[i];\n if (index === this.middlewares.length) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));\n } catch (e) {\n return Promise.reject(e);\n }\n };\n return dispatch(0);\n };\n }\n}\n\nexport default new Scheduler();\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/setDataField.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `!ctx.error·&&·ctx.response·&&·isObject(ctx.response.data)·&&·dataField` with `⏎········!ctx.error·&&⏎········ctx.response·&&⏎········isObject(ctx.response.data)·&&⏎········dataField⏎····`","line":6,"column":9,"nodeType":null,"messageId":"replace","endLine":6,"endColumn":79,"fix":{"range":[169,239],"text":"\n !ctx.error &&\n ctx.response &&\n isObject(ctx.response.data) &&\n dataField\n "}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { isObject } from './helpers';\n\n// FEATURE: 后续支持 a.b.c\nexport default async (ctx, next) => {\n const dataField = ctx.config.dataField ?? ctx.dataField;\n if (!ctx.error && ctx.response && isObject(ctx.response.data) && dataField) {\n ctx.response._rawData = ctx.response.data;\n ctx.response.data = ctx.response.data[dataField];\n }\n await next();\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-request/src/template/throttle.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nconst throttleMap = new Map();\n\nexport default async (ctx, next) => {\n if (ctx.config.throttle) {\n if (throttleMap.get(ctx.key) >= Date.now()) {\n ctx.error = {\n type: 'FREQUENTLY',\n msg: '请求过于频繁'\n };\n return;\n }\n }\n await next();\n throttleMap.set(ctx.key, Date.now() + ctx.config.throttle);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-sass/.fatherrc.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-sass/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········utils⏎···` with `·utils`","line":3,"column":12,"nodeType":null,"messageId":"replace","endLine":5,"endColumn":4,"fix":{"range":[38,56],"text":" utils"}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"\nexport default (api) => {\n const {\n utils\n } = api;\n\n api.describe({\n key: 'sass',\n config: {\n schema(joi) {\n return joi.object({\n implementation: joi.any(),\n sassOptions: joi.object(),\n prependData: joi.alternatives(joi.string(), joi.func()),\n sourceMap: joi.boolean(),\n webpackImporter: joi.boolean()\n });\n },\n default: {}\n }\n });\n\n api.chainWebpack((memo, { createCSSRule }) => {\n createCSSRule({\n lang: 'sass',\n test: /\\.(sass|scss)(\\?.*)?$/,\n loader: require.resolve('sass-loader'),\n options: utils.deepmerge(\n {\n implementation: require('sass')\n },\n api.config.sass || {}\n )\n });\n return memo;\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-vuex/.fatherrc.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-vuex/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n copy: ['runtime']\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-vuex/src/helper.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":29,"column":16,"nodeType":null,"messageId":"insert","endLine":29,"endColumn":16,"fix":{"range":[687,687],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `text` with `(text)`","line":31,"column":49,"nodeType":null,"messageId":"replace","endLine":31,"endColumn":53,"fix":{"range":[782,786],"text":"(text)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `text` with `(text)`","line":32,"column":24,"nodeType":null,"messageId":"replace","endLine":32,"endColumn":28,"fix":{"range":[836,840],"text":"(text)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `namespaced·?·`${name}/`·:·''` with `⏎························namespaced·?·`${name}/`·:·''⏎····················`","line":65,"column":48,"nodeType":null,"messageId":"replace","endLine":65,"endColumn":76,"fix":{"range":[1897,1925],"text":"\n namespaced ? `${name}/` : ''\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `prop.value,·prop.key.name,·`${namespace}${namespaced·?·`${name}/`·:·''}`` with `⏎····················prop.value,⏎····················prop.key.name,⏎····················`${namespace}${namespaced·?·`${name}/`·:·''}`⏎················`","line":72,"column":48,"nodeType":null,"messageId":"replace","endLine":72,"endColumn":120,"fix":{"range":[2143,2215],"text":"\n prop.value,\n prop.key.name,\n `${namespace}${namespaced ? `${name}/` : ''}`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `body·=>·body.type·===·'ExportDefaultDeclaration'` with `⏎············(body)·=>·body.type·===·'ExportDefaultDeclaration'⏎········`","line":112,"column":39,"nodeType":null,"messageId":"replace","endLine":112,"endColumn":87,"fix":{"range":[3401,3449],"text":"\n (body) => body.type === 'ExportDefaultDeclaration'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `ast.declaration,·moduleName` with `⏎················ast.declaration,⏎················moduleName⏎············`","line":114,"column":67,"nodeType":null,"messageId":"replace","endLine":114,"endColumn":94,"fix":{"range":[3540,3567],"text":"\n ast.declaration,\n moduleName\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·importModules,·MUTATION_TYPES,·ACTION_TYPES,` with `⏎········importModules,⏎········MUTATION_TYPES,⏎········ACTION_TYPES,⏎·······`","line":130,"column":17,"nodeType":null,"messageId":"replace","endLine":130,"endColumn":62,"fix":{"range":[3935,3980],"text":"\n importModules,\n MUTATION_TYPES,\n ACTION_TYPES,\n "}}],"errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":8,"fixableWarningCount":0,"source":"import { parser, winPath } from '@fesjs/utils';\nimport { readdirSync, readFileSync, statSync } from 'fs';\nimport { join } from 'path';\n\n/**\n * 获取文件夹所有JS文件路径\n * @param {string} dir\n */\nfunction getDirFilePaths(dir) {\n const dirs = readdirSync(dir);\n let pathList = [];\n for (const name of dirs) {\n const path = winPath(join(dir, name));\n const info = statSync(path);\n if (info.isDirectory()) {\n pathList = pathList.concat(getDirFilePaths(path));\n } else if (path.endsWith('.js')) {\n pathList.push(path);\n }\n }\n return pathList;\n}\n\n/**\n * 路径转驼峰\n * @param {*} path\n */\nfunction pathToHump(path, root) {\n return path.replace(root, '')\n .replace('.js', '')\n .replace(RegExp('(/|\\\\.|-|_)\\\\S', 'g'), text => text[1].toUpperCase())\n .replace(/\\S/, text => text.toLowerCase());\n}\n\n/**\n * 获取vuex模块的mutations、actions、getters类型\n * @param {*} ast\n * @param {*} name\n */\nfunction getModelTypes(ast, name, namespace = '') {\n const types = {\n mutations: {},\n actions: {},\n getters: {}\n };\n let namespaced = false;\n if (ast.type !== 'ObjectExpression') return types;\n ast.properties.forEach((node) => {\n if (node.key.name === 'namespaced' && node.value.value) {\n namespaced = true;\n return;\n }\n if (Object.keys(types).includes(node.key.name)) {\n let type = types[node.key.name];\n if (namespaced) {\n type = types[node.key.name][name];\n if (!type) {\n // eslint-disable-next-line no-multi-assign\n type = types[node.key.name][name] = {};\n }\n }\n node.value.properties.forEach((prop) => {\n const key = prop.key && prop.key.name;\n if (key) {\n type[key] = `${namespace}${namespaced ? `${name}/` : ''}${key}`;\n }\n });\n return;\n }\n if (node.key.name === 'modules') {\n node.value.properties.forEach((prop) => {\n const subTypes = getModelTypes(prop.value, prop.key.name, `${namespace}${namespaced ? `${name}/` : ''}`);\n Object.keys(types).forEach((key) => {\n if (namespaced) {\n types[key][name] = {\n ...subTypes[key],\n ...types[key][name]\n };\n } else {\n types[key] = {\n ...subTypes[key],\n ...types[key]\n };\n }\n });\n });\n }\n });\n return types;\n}\n\n/**\n * 解析模块\n * @param {*} paths\n * @param {*} root\n */\nfunction parseModel(paths = [], root) {\n const modules = [];\n const importModules = [];\n let MUTATION_TYPES = {};\n let ACTION_TYPES = {};\n let GETTER_TYPES = {};\n paths.forEach((path) => {\n const moduleName = pathToHump(path, root);\n importModules.push(`import ${moduleName} from '${path}'`);\n modules.push(moduleName);\n const content = readFileSync(path).toString('utf-8');\n let ast = parser.parse(content, {\n sourceType: 'module',\n plugins: ['jsx', 'typescript']\n });\n ast = ast.program.body.filter(body => body.type === 'ExportDefaultDeclaration')[0];\n if (ast) {\n const { mutations, actions, getters } = getModelTypes(ast.declaration, moduleName);\n MUTATION_TYPES = {\n ...mutations,\n ...MUTATION_TYPES\n };\n ACTION_TYPES = {\n ...actions,\n ...ACTION_TYPES\n };\n GETTER_TYPES = {\n ...getters,\n ...GETTER_TYPES\n };\n }\n });\n return {\n modules, importModules, MUTATION_TYPES, ACTION_TYPES, GETTER_TYPES\n };\n}\n\nfunction parsePlugin(paths = [], root) {\n const plugins = [];\n const importPlugins = [];\n paths.forEach((path) => {\n const moduleName = pathToHump(path, root);\n importPlugins.push(`import ${moduleName} from '${path}'`);\n plugins.push(moduleName);\n });\n return { plugins, importPlugins };\n}\n\nexport function parseStore(root) {\n const paths = getDirFilePaths(root);\n const modelPaths = [];\n const pluginPaths = [];\n paths.forEach((path) => {\n if (path.indexOf('plugin') > -1) {\n pluginPaths.push(path);\n } else {\n modelPaths.push(path);\n }\n });\n return {\n ...parsePlugin(pluginPaths, root),\n ...parseModel(modelPaths, root)\n };\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-vuex/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `join(paths.absSrcPath,·api.config.singular·?·'store'·:·'stores')` with `⏎············join(paths.absSrcPath,·api.config.singular·?·'store'·:·'stores')⏎········`","line":27,"column":30,"nodeType":null,"messageId":"replace","endLine":27,"endColumn":94,"fix":{"range":[669,733],"text":"\n join(paths.absSrcPath, api.config.singular ? 'store' : 'stores')\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'MUTATION_TYPES',·'ACTION_TYPES',·'GETTER_TYPES',·'store'` with `⏎················'MUTATION_TYPES',⏎················'ACTION_TYPES',⏎················'GETTER_TYPES',⏎················'store'⏎············`","line":57,"column":26,"nodeType":null,"messageId":"replace","endLine":57,"endColumn":83,"fix":{"range":[1831,1888],"text":"\n 'MUTATION_TYPES',\n 'ACTION_TYPES',\n 'GETTER_TYPES',\n 'store'\n "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"import { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { winPath } from '@fesjs/utils';\nimport { parseStore } from './helper';\n\nconst namespace = 'plugin-vuex';\n\nexport default (api) => {\n const {\n paths,\n utils: { Mustache }\n } = api;\n\n api.describe({\n key: 'vuex',\n config: {\n schema(joi) {\n return joi.object();\n },\n onChange: api.ConfigChangeType.regenerateTmpFiles\n }\n });\n\n const absCoreFilePath = join(namespace, 'core.js');\n const absRuntimeFilePath = join(namespace, 'runtime.js');\n api.onGenerateFiles(() => {\n const root = winPath(join(paths.absSrcPath, api.config.singular ? 'store' : 'stores'));\n const store = parseStore(root);\n const vuexConfig = api.config.vuex || {};\n // 文件写出\n api.writeTmpFile({\n path: absCoreFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'),\n {\n IMPORT_MODULES: store.importModules.join('\\n'),\n IMPORT_PLUGINS: store.importPlugins.join('\\n'),\n MODULES: `{ ${store.modules.join(', ')} }`,\n PLUGINS: `[${store.plugins.join(', ')}]`,\n MUTATION_TYPES: JSON.stringify(store.MUTATION_TYPES),\n ACTION_TYPES: JSON.stringify(store.ACTION_TYPES),\n GETTER_TYPES: JSON.stringify(store.GETTER_TYPES),\n VUEX_CONFIG: JSON.stringify(vuexConfig)\n }\n )\n });\n\n api.copyTmpFiles({\n namespace,\n path: join(__dirname, 'runtime'),\n ignore: ['.tpl']\n });\n });\n\n api.addPluginExports(() => [\n {\n specifiers: ['MUTATION_TYPES', 'ACTION_TYPES', 'GETTER_TYPES', 'store'],\n source: absCoreFilePath\n }\n ]);\n\n api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-vuex/src/runtime/runtime.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-windicss/.fatherrc.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-windicss/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":3,"column":32,"nodeType":null,"messageId":"delete","endLine":4,"endColumn":1,"fix":{"range":[93,94],"text":""}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"\nimport WindiCSSWebpackPlugin from 'windicss-webpack-plugin';\nimport { resolve } from 'path';\n\n\nexport default (api) => {\n api.describe({\n key: 'windicss',\n config: {\n schema(joi) {\n return joi.object();\n },\n default: {}\n }\n });\n\n api.addEntryImportsAhead(() => [{ source: 'windi.css' }]);\n\n api.chainWebpack((memo) => {\n memo.plugin('windicss').use(WindiCSSWebpackPlugin, [\n {\n config: resolve(__dirname, '../windi.config.js'),\n ...api.config.windicss\n }\n ]);\n return memo;\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-plugin-windicss/windi.config.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'./plugins/generateFiles/core/exports/pluginExports'` with `⏎················'./plugins/generateFiles/core/exports/pluginExports'⏎············`","line":10,"column":29,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":81,"fix":{"range":[359,411],"text":"\n './plugins/generateFiles/core/exports/pluginExports'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":49,"column":67,"nodeType":null,"messageId":"delete","endLine":50,"endColumn":1,"fix":{"range":[2751,2752],"text":""}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"export default function () {\n return {\n plugins: [\n // register methods\n require.resolve('./plugins/registerMethods'),\n\n // generate files\n require.resolve('./plugins/generateFiles/core/plugin'),\n require.resolve('./plugins/generateFiles/core/exports/coreExports'),\n require.resolve('./plugins/generateFiles/core/exports/pluginExports'),\n require.resolve('./plugins/generateFiles/fes'),\n\n // bundle configs\n require.resolve('./plugins/features/alias'),\n require.resolve('./plugins/features/analyze'),\n require.resolve('./plugins/features/autoprefixer'),\n require.resolve('./plugins/features/base'),\n require.resolve('./plugins/features/babelPluginImport'),\n require.resolve('./plugins/features/chainWebpack'),\n require.resolve('./plugins/features/cssLoader'),\n require.resolve('./plugins/features/copy'),\n require.resolve('./plugins/features/define'),\n require.resolve('./plugins/features/devScripts'),\n require.resolve('./plugins/features/devServer'),\n require.resolve('./plugins/features/devtool'),\n require.resolve('./plugins/features/externals'),\n require.resolve('./plugins/features/extraBabelPlugins'),\n require.resolve('./plugins/features/extraBabelPresets'),\n require.resolve('./plugins/features/extraPostCSSPlugins'),\n require.resolve('./plugins/features/html'),\n require.resolve('./plugins/features/globalCSS'),\n require.resolve('./plugins/features/inlineLimit'),\n require.resolve('./plugins/features/lessLoader'),\n require.resolve('./plugins/features/mountElementId'),\n require.resolve('./plugins/features/outputPath'),\n require.resolve('./plugins/features/plugins'),\n require.resolve('./plugins/features/postcssLoader'),\n require.resolve('./plugins/features/proxy'),\n require.resolve('./plugins/features/publicPath'),\n require.resolve('./plugins/features/singular'),\n require.resolve('./plugins/features/targets'),\n require.resolve('./plugins/features/terserOptions'),\n require.resolve('./plugins/features/nodeModulesTransform'),\n require.resolve('./plugins/features/vueLoader'),\n require.resolve('./plugins/features/mock'),\n require.resolve('./plugins/features/dynamicImport'),\n require.resolve('./plugins/features/runtimePublicPath'),\n require.resolve('./plugins/features/exportStatic'),\n require.resolve('./plugins/features/checkVuePackage'),\n\n\n // misc\n require.resolve('./plugins/misc/route'),\n\n // commands\n require.resolve('./plugins/commands/build'),\n require.resolve('./plugins/commands/dev'),\n require.resolve('./plugins/commands/help'),\n require.resolve('./plugins/commands/info'),\n require.resolve('./plugins/commands/webpack')\n ]\n };\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/buildDevUtils.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····api⏎` with `·api·`","line":12,"column":44,"nodeType":null,"messageId":"replace","endLine":14,"endColumn":1,"fix":{"range":[402,411],"text":" api "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":67,"column":1,"nodeType":null,"messageId":"delete","endLine":68,"endColumn":1,"fix":{"range":[2299,2300],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎········`","line":69,"column":16,"nodeType":null,"messageId":"delete","endLine":70,"endColumn":9,"fix":{"range":[2326,2335],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎········`","line":77,"column":16,"nodeType":null,"messageId":"delete","endLine":78,"endColumn":9,"fix":{"range":[2555,2564],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····absTmpPath⏎` with `·absTmpPath·`","line":84,"column":42,"nodeType":null,"messageId":"replace","endLine":86,"endColumn":1,"fix":{"range":[2648,2664],"text":" absTmpPath "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `val` with `(val)`","line":125,"column":18,"nodeType":null,"messageId":"replace","endLine":125,"endColumn":21,"fix":{"range":[3785,3788],"text":"(val)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `val` with `(val)`","line":126,"column":19,"nodeType":null,"messageId":"replace","endLine":126,"endColumn":22,"fix":{"range":[3829,3832],"text":"(val)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":128,"column":33,"nodeType":null,"messageId":"insert","endLine":128,"endColumn":33,"fix":{"range":[3889,3889],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":129,"column":9,"nodeType":null,"messageId":"insert","endLine":129,"endColumn":9,"fix":{"range":[3911,3911],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":130,"column":1,"nodeType":null,"messageId":"replace","endLine":130,"endColumn":9,"fix":{"range":[3942,3950],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":131,"column":1,"nodeType":null,"messageId":"insert","endLine":131,"endColumn":1,"fix":{"range":[3982,3982],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":132,"column":9,"nodeType":null,"messageId":"insert","endLine":132,"endColumn":9,"fix":{"range":[4049,4049],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":133,"column":13,"nodeType":null,"messageId":"insert","endLine":133,"endColumn":13,"fix":{"range":[4101,4101],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":134,"column":1,"nodeType":null,"messageId":"replace","endLine":134,"endColumn":13,"fix":{"range":[4131,4143],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":135,"column":1,"nodeType":null,"messageId":"insert","endLine":135,"endColumn":1,"fix":{"range":[4173,4173],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":136,"column":1,"nodeType":null,"messageId":"replace","endLine":136,"endColumn":9,"fix":{"range":[4248,4256],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":137,"column":13,"nodeType":null,"messageId":"insert","endLine":137,"endColumn":13,"fix":{"range":[4277,4277],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":138,"column":1,"nodeType":null,"messageId":"insert","endLine":138,"endColumn":1,"fix":{"range":[4283,4283],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":139,"column":9,"nodeType":null,"messageId":"insert","endLine":139,"endColumn":9,"fix":{"range":[4338,4338],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":140,"column":1,"nodeType":null,"messageId":"insert","endLine":140,"endColumn":1,"fix":{"range":[4341,4341],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎········`","line":172,"column":10,"nodeType":null,"messageId":"delete","endLine":173,"endColumn":9,"fix":{"range":[5271,5280],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `························`","line":176,"column":1,"nodeType":null,"messageId":"replace","endLine":176,"endColumn":17,"fix":{"range":[5530,5546],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `getGzippedSize(asset))` with `········getGzippedSize(asset)⏎····················)⏎················`","line":177,"column":17,"nodeType":null,"messageId":"replace","endLine":177,"endColumn":39,"fix":{"range":[5584,5606],"text":" getGzippedSize(asset)\n )\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":178,"column":28,"nodeType":null,"messageId":"insert","endLine":178,"endColumn":28,"fix":{"range":[5635,5635],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":179,"column":7,"nodeType":null,"messageId":"delete","endLine":180,"endColumn":1,"fix":{"range":[5644,5645],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `asset` with `(asset)`","line":188,"column":29,"nodeType":null,"messageId":"replace","endLine":188,"endColumn":34,"fix":{"range":[5815,5820],"text":"(asset)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":189,"column":1,"nodeType":null,"messageId":"insert","endLine":189,"endColumn":1,"fix":{"range":[5844,5844],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":190,"column":1,"nodeType":null,"messageId":"insert","endLine":190,"endColumn":1,"fix":{"range":[5890,5890],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'The·bundle·size·is·significantly·larger·than·recommended.'` with `⏎················'The·bundle·size·is·significantly·larger·than·recommended.'⏎············`","line":193,"column":26,"nodeType":null,"messageId":"replace","endLine":193,"endColumn":85,"fix":{"range":[5985,6044],"text":"\n 'The bundle size is significantly larger than recommended.'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎············chalk.yellow(⏎················'Consider·reducing·it·with·code·splitting'⏎············)⏎········` with `chalk.yellow('Consider·reducing·it·with·code·splitting')`","line":195,"column":21,"nodeType":null,"messageId":"replace","endLine":199,"endColumn":9,"fix":{"range":[6077,6185],"text":"chalk.yellow('Consider reducing it with code splitting')"}}],"errorCount":30,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":30,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/blob/master/packages/preset-built-in/src/plugins/commands/buildDevUtils.ts\n */\n\nimport { join, resolve } from 'path';\nimport { existsSync, readdirSync, readFileSync } from 'fs';\nimport { rimraf, chalk } from '@fesjs/utils';\nimport zlib from 'zlib';\nimport getConfig from './webpackConfig';\n\nexport async function getBundleAndConfigs({\n api\n}) {\n // get config\n const env = api.env === 'production' ? 'production' : 'development';\n const getConfigOpts = await api.applyPlugins({\n type: api.ApplyPluginsType.modify,\n key: 'modifyBundleConfigOpts',\n initialValue: {\n cwd: api.paths.cwd,\n config: api.config,\n env,\n entry: {\n index: join(api.paths.absTmpPath, 'fes.js')\n },\n // @ts-ignore\n async modifyBabelOpts(opts) {\n return api.applyPlugins({\n type: api.ApplyPluginsType.modify,\n key: 'modifyBabelOpts',\n initialValue: opts\n });\n },\n async modifyBabelPresetOpts(opts) {\n return api.applyPlugins({\n type: api.ApplyPluginsType.modify,\n key: 'modifyBabelPresetOpts',\n initialValue: opts\n });\n },\n async chainWebpack(webpackConfig, opts) {\n return api.applyPlugins({\n type: api.ApplyPluginsType.modify,\n key: 'chainWebpack',\n initialValue: webpackConfig,\n args: {\n ...opts\n }\n });\n },\n async headScripts() {\n return api.applyPlugins({\n key: 'addHTMLHeadScripts',\n type: api.ApplyPluginsType.add,\n initialState: []\n });\n },\n publicPath: await api.applyPlugins({\n key: 'modifyPublicPathStr',\n type: api.ApplyPluginsType.modify,\n initialValue: api.config.publicPath || '',\n args: {\n // route: args.route\n }\n })\n\n },\n args: {\n }\n });\n\n const bundleConfig = await api.applyPlugins({\n type: api.ApplyPluginsType.modify,\n key: 'modifyBundleConfig',\n initialValue: await getConfig({ api, ...getConfigOpts }),\n args: {\n }\n });\n\n return { bundleConfig };\n}\n\nexport function cleanTmpPathExceptCache({\n absTmpPath\n}) {\n if (!existsSync(absTmpPath)) return;\n readdirSync(absTmpPath).forEach((file) => {\n if (file === '.cache') return;\n rimraf.sync(join(absTmpPath, file));\n });\n}\n\n// These sizes are pretty large. We'll warn for bundles exceeding them.\nconst WARN_AFTER_BUNDLE_GZIP_SIZE = 1.8 * 1024 * 1024;\nconst WARN_AFTER_CHUNK_GZIP_SIZE = 1 * 1024 * 1024;\n\nexport function printFileSizes(stats, dir) {\n const ui = require('cliui')({ width: 80 });\n const json = stats.toJson({\n hash: false,\n modules: false,\n chunks: false\n });\n\n const filesize = (bytes) => {\n bytes = Math.abs(bytes);\n const radix = 1024;\n const unit = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let loop = 0;\n\n // calculate\n while (bytes >= radix) {\n bytes /= radix;\n ++loop;\n }\n return `${bytes.toFixed(1)} ${unit[loop]}`;\n };\n\n const assets = json.assets\n ? json.assets\n : json?.children?.reduce((acc, child) => acc.concat(child?.assets), []);\n\n const seenNames = new Map();\n const isJS = val => /\\.js$/.test(val);\n const isCSS = val => /\\.css$/.test(val);\n\n const orderedAssets = assets.map((a) => {\n a.name = a.name.split('?')[0];\n // These sizes are pretty large\n const isMainBundle = a.name.indexOf('fes.') === 0;\n const maxRecommendedSize = isMainBundle\n ? WARN_AFTER_BUNDLE_GZIP_SIZE\n : WARN_AFTER_CHUNK_GZIP_SIZE;\n const isLarge = maxRecommendedSize && a.size > maxRecommendedSize;\n return {\n ...a,\n suggested: isLarge && isJS(a.name)\n };\n })\n .filter((a) => {\n if (seenNames.has(a.name)) {\n return false;\n }\n seenNames.set(a.name, true);\n return isJS(a.name) || isCSS(a.name);\n })\n .sort((a, b) => {\n if (isJS(a.name) && isCSS(b.name)) return -1;\n if (isCSS(a.name) && isJS(b.name)) return 1;\n return b.size - a.size;\n });\n\n function getGzippedSize(asset) {\n const filepath = resolve(join(dir, asset.name));\n if (existsSync(filepath)) {\n const buffer = readFileSync(filepath);\n return filesize(zlib.gzipSync(buffer).length);\n }\n return filesize(0);\n }\n\n function makeRow(a, b, c) {\n return ` ${a}\\t ${b}\\t ${c}`;\n }\n\n ui.div(\n `${makeRow(\n chalk.cyan.bold('File'),\n chalk.cyan.bold('Size'),\n chalk.cyan.bold('Gzipped')\n )\n }\\n\\n${\n // eslint-disable-next-line\n orderedAssets.map(asset => makeRow(/js$/.test(asset.name) ? (asset.suggested ? chalk.yellow(join(dir, asset.name)) : chalk.green(join(dir, asset.name))) : chalk.blue(join(dir, asset.name)),\n filesize(asset.size),\n getGzippedSize(asset)))\n .join('\\n')}`\n );\n\n\n console.log(\n `${ui.toString()}\\n\\n ${chalk.gray(\n 'Images and other types of assets omitted.'\n )}\\n`\n );\n\n if (orderedAssets?.some(asset => asset.suggested)) {\n // We'll warn for bundles exceeding them.\n // TODO: use umi docs\n console.log();\n console.log(\n chalk.yellow('The bundle size is significantly larger than recommended.')\n );\n console.log(\n chalk.yellow(\n 'Consider reducing it with code splitting'\n )\n );\n console.log(\n chalk.yellow(\n 'You can also analyze the project dependencies using ANALYZE=1'\n )\n );\n console.log();\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/dev/createRouteMiddleware.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `api` with `(api)`","line":7,"column":16,"nodeType":null,"messageId":"replace","endLine":7,"endColumn":19,"fix":{"range":[190,193],"text":"(api)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `proxyConfig·&&·Object.keys(proxyConfig).some(path·=>·req.path.startsWith(path))` with `⏎········proxyConfig·&&⏎········Object.keys(proxyConfig).some((path)·=>·req.path.startsWith(path))⏎····`","line":9,"column":9,"nodeType":null,"messageId":"replace","endLine":9,"endColumn":88,"fix":{"range":[269,348],"text":"\n proxyConfig &&\n Object.keys(proxyConfig).some((path) => req.path.startsWith(path))\n "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"\nimport { extname, join } from 'path';\nimport historyFallback from 'connect-history-api-fallback';\n\nconst ASSET_EXTNAMES = ['.ico', '.png', '.jpg', '.jpeg', '.gif', '.svg'];\n\nexport default api => (req, res, next) => {\n const proxyConfig = api.config.proxy;\n if (proxyConfig && Object.keys(proxyConfig).some(path => req.path.startsWith(path))) {\n return next();\n }\n if (req.path === '/favicon.ico') {\n return res.sendFile(join(__dirname, 'fes.png'));\n }\n if (ASSET_EXTNAMES.includes(extname(req.path))) {\n return next();\n }\n const history = historyFallback();\n history(req, res, next);\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/dev/devServer.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":6,"column":1,"nodeType":null,"messageId":"delete","endLine":7,"endColumn":1,"fix":{"range":[129,130],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `path.resolve(__dirname,·'./cert/key.pem')` with `⏎············path.resolve(__dirname,·'./cert/key.pem')⏎········`","line":46,"column":39,"nodeType":null,"messageId":"replace","endLine":46,"endColumn":80,"fix":{"range":[1114,1155],"text":"\n path.resolve(__dirname, './cert/key.pem')\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `path.resolve(__dirname,·'./cert/cert.pem')` with `⏎············path.resolve(__dirname,·'./cert/cert.pem')⏎········`","line":47,"column":40,"nodeType":null,"messageId":"replace","endLine":47,"endColumn":82,"fix":{"range":[1197,1239],"text":"\n path.resolve(__dirname, './cert/cert.pem')\n "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import WebpackDevServer from 'webpack-dev-server';\nimport webpack from 'webpack';\nimport fs from 'fs';\nimport path from 'path';\n\n\nexport function startDevServer({\n webpackConfig,\n host,\n port,\n proxy,\n https,\n beforeMiddlewares,\n afterMiddlewares,\n customerDevServerConfig\n}) {\n const options = {\n contentBase: webpackConfig.output.path,\n hot: true,\n host,\n sockHost: host,\n sockPort: port,\n proxy,\n compress: true,\n noInfo: true,\n disableHostCheck: true,\n clientLogLevel: 'silent',\n stats: 'errors-only',\n before: (app) => {\n beforeMiddlewares.forEach((middleware) => {\n app.use(middleware);\n });\n },\n after: (app) => {\n afterMiddlewares.forEach((middleware) => {\n app.use(middleware);\n });\n },\n headers: {\n 'access-control-allow-origin': '*'\n },\n ...(customerDevServerConfig || {})\n };\n if (https) {\n options.https = true;\n options.key = fs.readFileSync(path.resolve(__dirname, './cert/key.pem'));\n options.cert = fs.readFileSync(path.resolve(__dirname, './cert/cert.pem'));\n }\n WebpackDevServer.addDevServerEntrypoints(webpackConfig, options);\n const compiler = webpack(webpackConfig);\n const server = new WebpackDevServer(compiler, options);\n\n server.listen(port, host, (err) => {\n if (err) {\n console.error(err);\n }\n });\n return server;\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/dev/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":30,"column":19,"nodeType":null,"messageId":"insert","endLine":30,"endColumn":19,"fix":{"range":[635,635],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":31,"column":1,"nodeType":null,"messageId":"insert","endLine":31,"endColumn":1,"fix":{"range":[637,637],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":32,"column":1,"nodeType":null,"messageId":"insert","endLine":32,"endColumn":1,"fix":{"range":[665,665],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········},` with `············},⏎···········`","line":33,"column":1,"nodeType":null,"messageId":"replace","endLine":33,"endColumn":11,"fix":{"range":[721,731],"text":" },\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":34,"column":1,"nodeType":null,"messageId":"insert","endLine":34,"endColumn":1,"fix":{"range":[734,734],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":35,"column":1,"nodeType":null,"messageId":"insert","endLine":35,"endColumn":1,"fix":{"range":[763,763],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········}` with `············}⏎········`","line":36,"column":1,"nodeType":null,"messageId":"replace","endLine":36,"endColumn":10,"fix":{"range":[827,836],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···············`","line":43,"column":42,"nodeType":null,"messageId":"insert","endLine":43,"endColumn":42,"fix":{"range":[1111,1111],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···············`","line":44,"column":34,"nodeType":null,"messageId":"insert","endLine":44,"endColumn":34,"fix":{"range":[1189,1189],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···············`","line":47,"column":32,"nodeType":null,"messageId":"insert","endLine":47,"endColumn":32,"fix":{"range":[1327,1327],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···············`","line":51,"column":23,"nodeType":null,"messageId":"insert","endLine":51,"endColumn":23,"fix":{"range":[1557,1557],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `chalk.cyan(`Starting·the·development·server·${isHTTPS·?·'https'·:·'http'}://${hostname}:${port}·...`)` with `⏎················chalk.cyan(⏎····················`Starting·the·development·server·${⏎························isHTTPS·?·'https'·:·'http'⏎····················}://${hostname}:${port}·...`⏎················)⏎············`","line":61,"column":25,"nodeType":null,"messageId":"replace","endLine":61,"endColumn":126,"fix":{"range":[1838,1939],"text":"\n chalk.cyan(\n `Starting the development server ${\n isHTTPS ? 'https' : 'http'\n }://${hostname}:${port} ...`\n )\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `p` with `(p)`","line":95,"column":42,"nodeType":null,"messageId":"replace","endLine":95,"endColumn":43,"fix":{"range":[3233,3234],"text":"(p)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···································`","line":106,"column":53,"nodeType":null,"messageId":"insert","endLine":106,"endColumn":53,"fix":{"range":[3793,3793],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·===`","line":108,"column":45,"nodeType":null,"messageId":"insert","endLine":108,"endColumn":45,"fix":{"range":[3919,3919],"text":" ==="}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·===`","line":109,"column":36,"nodeType":null,"messageId":"delete","endLine":109,"endColumn":40,"fix":{"range":[3955,3959],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":114,"column":46,"nodeType":null,"messageId":"insert","endLine":114,"endColumn":46,"fix":{"range":[4215,4215],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·||`","line":115,"column":36,"nodeType":null,"messageId":"delete","endLine":115,"endColumn":39,"fix":{"range":[4251,4254],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···································`","line":134,"column":57,"nodeType":null,"messageId":"insert","endLine":134,"endColumn":57,"fix":{"range":[5150,5150],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `fn` with `(fn)`","line":143,"column":49,"nodeType":null,"messageId":"replace","endLine":143,"endColumn":51,"fix":{"range":[5541,5543],"text":"(fn)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `...beforeMiddlewares,·createRouteMiddleware(api)` with `⏎····················...beforeMiddlewares,⏎····················createRouteMiddleware(api)⏎················`","line":179,"column":37,"nodeType":null,"messageId":"replace","endLine":179,"endColumn":85,"fix":{"range":[6802,6850],"text":"\n ...beforeMiddlewares,\n createRouteMiddleware(api)\n "}}],"errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":21,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/blob/master/packages/preset-built-in/src/plugins/commands/dev/dev.ts\n */\n\nconst assert = require('assert');\n\nexport default (api) => {\n const {\n env,\n paths,\n utils: { chalk, portfinder }\n } = api;\n\n const unwatchs = [];\n let port;\n let hostname;\n let server;\n\n function destroy() {\n for (const unwatch of unwatchs) {\n unwatch();\n }\n server?.close();\n }\n\n api.registerCommand({\n command: 'dev',\n description: 'start a local http service for development',\n options: [{\n name: '--port',\n description: 'http service port, like 8080'\n }, {\n name: '--https',\n description: 'whether to turn on the https service'\n }],\n async fn({ args = {} }) {\n const {\n cleanTmpPathExceptCache,\n getBundleAndConfigs\n } = require('../buildDevUtils');\n const { delay } = require('@fesjs/utils');\n const createRouteMiddleware = require('./createRouteMiddleware').default;\n const generateFiles = require('../../../utils/generateFiles').default;\n const { watchPkg } = require('./watchPkg');\n\n const defaultPort = process.env.PORT || args.port || api.config.devServer?.port;\n port = await portfinder.getPortPromise({\n port: defaultPort ? parseInt(String(defaultPort), 10) : 8000\n });\n hostname = process.env.HOST || api.config.devServer?.host || 'localhost';\n\n process.send({\n type: 'UPDATE_PORT',\n port\n });\n\n // enable https\n const isHTTPS = process.env.HTTPS || args.https;\n\n console.log(chalk.cyan(`Starting the development server ${isHTTPS ? 'https' : 'http'}://${hostname}:${port} ...`));\n\n cleanTmpPathExceptCache({\n absTmpPath: paths.absTmpPath\n });\n const watch = process.env.WATCH !== 'none';\n\n // generate files\n const unwatchGenerateFiles = await generateFiles({\n api,\n watch\n });\n if (unwatchGenerateFiles) unwatchs.push(unwatchGenerateFiles);\n\n if (watch) {\n // watch pkg changes\n const unwatchPkg = watchPkg({\n cwd: api.cwd,\n onChange() {\n console.log();\n api.logger.info('Plugins in package.json changed.');\n api.restartServer();\n }\n });\n unwatchs.push(unwatchPkg);\n\n // watch config change\n const unwatchConfig = api.service.configInstance.watch({\n userConfig: api.service.userConfig,\n onChange: async ({ pluginChanged, valueChanged }) => {\n if (pluginChanged.length) {\n console.log();\n api.logger.info(\n `Plugins of ${pluginChanged\n .map(p => p.key)\n .join(', ')} changed.`\n );\n api.restartServer();\n }\n if (valueChanged.length) {\n let reload = false;\n let regenerateTmpFiles = false;\n const fns = [];\n const reloadConfigs = [];\n valueChanged.forEach(({ key, pluginId }) => {\n const { onChange } = api.service.plugins[pluginId].config || {};\n if (\n onChange\n === api.ConfigChangeType.regenerateTmpFiles\n ) {\n regenerateTmpFiles = true;\n }\n if (\n !onChange\n || onChange === api.ConfigChangeType.reload\n ) {\n reload = true;\n reloadConfigs.push(key);\n }\n if (typeof onChange === 'function') {\n fns.push(onChange);\n }\n });\n\n if (reload) {\n console.log();\n api.logger.info(\n `Config ${reloadConfigs.join(\n ', '\n )} changed.`\n );\n api.restartServer();\n } else {\n api.service.userConfig = api.service.configInstance.getUserConfig();\n\n await api.setConfig();\n\n if (regenerateTmpFiles) {\n await generateFiles({\n api\n });\n } else {\n fns.forEach(fn => fn());\n }\n }\n }\n }\n });\n unwatchs.push(unwatchConfig);\n }\n\n // delay dev server 启动,避免重复 compile\n // https://github.com/webpack/watchpack/issues/25\n // https://github.com/yessky/webpack-mild-compile\n await delay(500);\n\n // dev\n const { bundleConfig } = await getBundleAndConfigs({ api });\n\n const beforeMiddlewares = await api.applyPlugins({\n key: 'addBeforeMiddlewares',\n type: api.ApplyPluginsType.add,\n initialValue: [],\n args: {}\n });\n const middlewares = await api.applyPlugins({\n key: 'addMiddlewares',\n type: api.ApplyPluginsType.add,\n initialValue: [],\n args: {}\n });\n const { startDevServer } = require('./devServer');\n server = startDevServer({\n webpackConfig: bundleConfig,\n host: hostname,\n port,\n proxy: api.config.proxy,\n https: isHTTPS,\n beforeMiddlewares: [...beforeMiddlewares, createRouteMiddleware(api)],\n afterMiddlewares: [...middlewares],\n customerDevServerConfig: api.config.devServer\n });\n return {\n destroy\n };\n }\n });\n\n api.registerMethod({\n name: 'getPort',\n fn() {\n assert(\n env === 'development',\n 'api.getPort() is only valid in development.'\n );\n return port;\n }\n });\n\n api.registerMethod({\n name: 'getHostname',\n fn() {\n assert(\n env === 'development',\n 'api.getHostname() is only valid in development.'\n );\n return hostname;\n }\n });\n\n api.registerMethod({\n name: 'getServer',\n fn() {\n assert(\n env === 'development',\n 'api.getServer() is only valid in development.'\n );\n return server;\n }\n });\n\n api.registerMethod({\n name: 'restartServer',\n fn() {\n console.log(chalk.gray('Try to restart dev server...'));\n destroy();\n process.send({\n type: 'RESTART'\n });\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/dev/watchPkg.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `name·=>·(` with `⏎········(name)·=>`","line":15,"column":15,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":24,"fix":{"range":[483,492],"text":"\n (name) =>"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `isPluginOrPreset(PluginType.plugin,·name)` with `····isPluginOrPreset(PluginType.plugin,·name)·||`","line":16,"column":9,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":50,"fix":{"range":[501,542],"text":" isPluginOrPreset(PluginType.plugin, name) ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `||` with `···`","line":17,"column":9,"nodeType":null,"messageId":"replace","endLine":17,"endColumn":11,"fix":{"range":[551,553],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `)`","line":18,"column":5,"nodeType":null,"messageId":"delete","endLine":18,"endColumn":6,"fix":{"range":[600,601],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `watchPkg({·cwd:·process.cwd(),·onChange:·opts.onChange·})` with `⏎············watchPkg({·cwd:·process.cwd(),·onChange:·opts.onChange·})⏎········`","line":54,"column":23,"nodeType":null,"messageId":"replace","endLine":54,"endColumn":80,"fix":{"range":[1564,1621],"text":"\n watchPkg({ cwd: process.cwd(), onChange: opts.onChange })\n "}}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/blob/master/packages/preset-built-in/src/plugins/commands/dev/watchPkg.ts\n */\n\nimport { join } from 'path';\nimport { chokidar, winPath, lodash } from '@fesjs/utils';\nimport { existsSync, readFileSync } from 'fs';\nimport { isPluginOrPreset, PluginType } from '@fesjs/compiler';\n\nfunction getPlugins(opts) {\n return Object.keys({\n ...opts.pkg.dependencies,\n ...opts.pkg.devDependencies\n }).filter(name => (\n isPluginOrPreset(PluginType.plugin, name)\n || isPluginOrPreset(PluginType.preset, name)\n ));\n}\n\nfunction getPluginsFromPkgPath(opts) {\n let pkg = {};\n if (existsSync(opts.pkgPath)) {\n try {\n pkg = JSON.parse(readFileSync(opts.pkgPath, 'utf-8'));\n } catch (e) {\n // ignore\n }\n }\n return getPlugins({ pkg });\n}\n\nexport function watchPkg(opts) {\n const pkgPath = join(opts.cwd, 'package.json');\n const plugins = getPluginsFromPkgPath({ pkgPath });\n const watcher = chokidar.watch(pkgPath, {\n ignoreInitial: true\n });\n watcher.on('all', () => {\n const newPlugins = getPluginsFromPkgPath({ pkgPath });\n if (!lodash.isEqual(plugins, newPlugins)) {\n // 已经重启了,只处理一次就够了\n opts.onChange();\n }\n });\n return () => {\n watcher.close();\n };\n}\n\nexport function watchPkgs(opts) {\n const unwatchs = [watchPkg({ cwd: opts.cwd, onChange: opts.onChange })];\n if (winPath(opts.cwd) !== winPath(process.cwd())) {\n unwatchs.push(watchPkg({ cwd: process.cwd(), onChange: opts.onChange }));\n }\n return () => {\n unwatchs.forEach((unwatch) => {\n unwatch();\n });\n };\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/help/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":3,"endColumn":1,"fix":{"range":[0,2],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\n\nexport default function (api) {\n api.registerCommand({\n command: 'help',\n description: 'show command helps',\n async fn({ program }) {\n program.outputHelp();\n }\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/info/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎················`","line":7,"column":38,"nodeType":null,"messageId":"insert","endLine":7,"endColumn":38,"fix":{"range":[217,217],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":8,"column":17,"nodeType":null,"messageId":"insert","endLine":8,"endColumn":17,"fix":{"range":[239,239],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":9,"column":1,"nodeType":null,"messageId":"insert","endLine":9,"endColumn":1,"fix":{"range":[241,241],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····················` with `························`","line":10,"column":1,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":21,"fix":{"range":[284,304],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":11,"column":1,"nodeType":null,"messageId":"insert","endLine":11,"endColumn":1,"fix":{"range":[339,339],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····················` with `························`","line":12,"column":1,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":21,"fix":{"range":[410,430],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":13,"column":21,"nodeType":null,"messageId":"insert","endLine":13,"endColumn":21,"fix":{"range":[500,500],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `····················`","line":14,"column":1,"nodeType":null,"messageId":"replace","endLine":14,"endColumn":17,"fix":{"range":[534,550],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":15,"column":17,"nodeType":null,"messageId":"insert","endLine":15,"endColumn":17,"fix":{"range":[569,569],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····················` with `························`","line":16,"column":1,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":21,"fix":{"range":[571,591],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":17,"column":21,"nodeType":null,"messageId":"insert","endLine":17,"endColumn":21,"fix":{"range":[631,631],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":18,"column":1,"nodeType":null,"messageId":"insert","endLine":18,"endColumn":1,"fix":{"range":[649,649],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":19,"column":17,"nodeType":null,"messageId":"insert","endLine":19,"endColumn":17,"fix":{"range":[700,700],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":20,"column":1,"nodeType":null,"messageId":"insert","endLine":20,"endColumn":1,"fix":{"range":[702,702],"text":" "}}],"errorCount":15,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":15,"fixableWarningCount":0,"source":"\nexport default function (api) {\n api.registerCommand({\n command: 'info',\n description: 'print debugging information about your environment',\n async fn() {\n return require('envinfo').run(\n {\n System: ['OS', 'CPU'],\n Binaries: ['Node', 'Yarn', 'npm'],\n Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'],\n npmPackages: ['@fesjs/fes', 'vue', 'vue-router'],\n npmGlobalPackages: ['@fesjs/fes']\n },\n {\n showNotFound: true,\n duplicates: true,\n fullTree: true\n }\n )\n .then(console.log);\n }\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpack/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":5,"column":19,"nodeType":null,"messageId":"insert","endLine":5,"endColumn":19,"fix":{"range":[159,159],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":6,"column":13,"nodeType":null,"messageId":"insert","endLine":6,"endColumn":13,"fix":{"range":[173,173],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":7,"column":1,"nodeType":null,"messageId":"insert","endLine":7,"endColumn":1,"fix":{"range":[200,200],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `},` with `····},⏎···········`","line":8,"column":9,"nodeType":null,"messageId":"replace","endLine":8,"endColumn":11,"fix":{"range":[266,268],"text":" },\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":9,"column":1,"nodeType":null,"messageId":"replace","endLine":9,"endColumn":13,"fix":{"range":[271,283],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":10,"column":1,"nodeType":null,"messageId":"insert","endLine":10,"endColumn":1,"fix":{"range":[314,314],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `},` with `····},⏎···········`","line":11,"column":9,"nodeType":null,"messageId":"replace","endLine":11,"endColumn":11,"fix":{"range":[375,377],"text":" },\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":12,"column":1,"nodeType":null,"messageId":"insert","endLine":12,"endColumn":1,"fix":{"range":[380,380],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":13,"column":1,"nodeType":null,"messageId":"insert","endLine":13,"endColumn":1,"fix":{"range":[409,409],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `},` with `····},⏎···········`","line":14,"column":9,"nodeType":null,"messageId":"replace","endLine":14,"endColumn":11,"fix":{"range":[471,473],"text":" },\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":15,"column":1,"nodeType":null,"messageId":"insert","endLine":15,"endColumn":1,"fix":{"range":[476,476],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":16,"column":1,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":13,"fix":{"range":[507,519],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `},` with `····},⏎···········`","line":17,"column":9,"nodeType":null,"messageId":"replace","endLine":17,"endColumn":11,"fix":{"range":[564,566],"text":" },\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":18,"column":1,"nodeType":null,"messageId":"insert","endLine":18,"endColumn":1,"fix":{"range":[569,569],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":19,"column":1,"nodeType":null,"messageId":"insert","endLine":19,"endColumn":1,"fix":{"range":[600,600],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎········`","line":20,"column":9,"nodeType":null,"messageId":"replace","endLine":20,"endColumn":10,"fix":{"range":[676,677],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `r` with `(r)`","line":33,"column":21,"nodeType":null,"messageId":"replace","endLine":33,"endColumn":22,"fix":{"range":[1236,1237],"text":"(r)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `p` with `(p)`","line":37,"column":21,"nodeType":null,"messageId":"replace","endLine":37,"endColumn":22,"fix":{"range":[1401,1402],"text":"(p)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `r` with `(r)`","line":40,"column":50,"nodeType":null,"messageId":"replace","endLine":40,"endColumn":51,"fix":{"range":[1548,1549],"text":"(r)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `p` with `(p)`","line":43,"column":21,"nodeType":null,"messageId":"replace","endLine":43,"endColumn":22,"fix":{"range":[1679,1680],"text":"(p)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `highlight(toString(config,·{·verbose:·options.verbose·}),·{·language:·'js'·})` with `⏎················highlight(toString(config,·{·verbose:·options.verbose·}),·{⏎····················language:·'js'⏎················})⏎············`","line":47,"column":25,"nodeType":null,"messageId":"replace","endLine":47,"endColumn":102,"fix":{"range":[1779,1856],"text":"\n highlight(toString(config, { verbose: options.verbose }), {\n language: 'js'\n })\n "}}],"errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":21,"fixableWarningCount":0,"source":"export default function (api) {\n api.registerCommand({\n command: 'webpack',\n description: 'inspect webpack configurations',\n options: [{\n name: '--rule ',\n description: 'inspect a specific module rule'\n }, {\n name: '--plugin ',\n description: 'inspect a specific plugin'\n }, {\n name: '--rules',\n description: 'list all module rule names'\n }, {\n name: '--plugins',\n description: 'list all plugin names'\n }, {\n name: '--verbose',\n description: 'show full function definitions in output'\n }],\n async fn({ options }) {\n const assert = require('assert');\n const { getBundleAndConfigs } = require('../buildDevUtils');\n const { toString } = require('webpack-chain');\n const { highlight } = require('cli-highlight');\n const { bundleConfig } = await getBundleAndConfigs({ api });\n\n let config = bundleConfig;\n assert(config, 'No valid config found with fes entry.');\n\n if (options.rule) {\n config = config.module.rules.find(\n r => r.__ruleNames[0] === options.rule\n );\n } else if (options.plugin) {\n config = config.plugins.find(\n p => p.__pluginName === options.plugin\n );\n } else if (options.rules) {\n config = config.module.rules.map(r => r.__ruleNames[0]);\n } else if (options.plugins) {\n config = config.plugins.map(\n p => p.__pluginName || p.constructor.name\n );\n }\n\n console.log(highlight(toString(config, { verbose: options.verbose }), { language: 'js' }));\n }\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/css.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎················`","line":28,"column":27,"nodeType":null,"messageId":"delete","endLine":29,"endColumn":17,"fix":{"range":[611,628],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎················`","line":33,"column":27,"nodeType":null,"messageId":"delete","endLine":34,"endColumn":17,"fix":{"range":[783,800],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":46,"column":33,"nodeType":null,"messageId":"insert","endLine":46,"endColumn":33,"fix":{"range":[1196,1196],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····································localIdentName:` with `······································localIdentName:⏎·········································`","line":47,"column":1,"nodeType":null,"messageId":"replace","endLine":47,"endColumn":52,"fix":{"range":[1207,1258],"text":" localIdentName:\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":48,"column":33,"nodeType":null,"messageId":"insert","endLine":48,"endColumn":33,"fix":{"range":[1319,1319],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":49,"column":1,"nodeType":null,"messageId":"insert","endLine":49,"endColumn":1,"fix":{"range":[1321,1321],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `deepmerge(` with `⏎················deepmerge(⏎····················`","line":58,"column":22,"nodeType":null,"messageId":"replace","endLine":58,"endColumn":32,"fix":{"range":[1596,1606],"text":"\n deepmerge(\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":59,"column":1,"nodeType":null,"messageId":"insert","endLine":59,"endColumn":1,"fix":{"range":[1608,1608],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····················` with `····························`","line":60,"column":1,"nodeType":null,"messageId":"replace","endLine":60,"endColumn":21,"fix":{"range":[1649,1669],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":61,"column":1,"nodeType":null,"messageId":"insert","endLine":61,"endColumn":1,"fix":{"range":[1680,1680],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":62,"column":25,"nodeType":null,"messageId":"insert","endLine":62,"endColumn":25,"fix":{"range":[1783,1783],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `························` with `································`","line":63,"column":1,"nodeType":null,"messageId":"replace","endLine":63,"endColumn":25,"fix":{"range":[1818,1842],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `[require('autoprefixer'),·{·...config.autoprefixer,·overrideBrowserslist:·browserslist·}` with `········[⏎····································require('autoprefixer'),⏎····································{⏎········································...config.autoprefixer,⏎········································overrideBrowserslist:·browserslist⏎····································}⏎································`","line":64,"column":25,"nodeType":null,"messageId":"replace","endLine":64,"endColumn":113,"fix":{"range":[1898,1986],"text":" [\n require('autoprefixer'),\n {\n ...config.autoprefixer,\n overrideBrowserslist: browserslist\n }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `························...(config.extraPostCSSPlugins·?·config.extraPostCSSPlugins` with `································...(config.extraPostCSSPlugins⏎····································?·config.extraPostCSSPlugins⏎···································`","line":65,"column":1,"nodeType":null,"messageId":"replace","endLine":65,"endColumn":84,"fix":{"range":[1989,2072],"text":" ...(config.extraPostCSSPlugins\n ? config.extraPostCSSPlugins\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":66,"column":1,"nodeType":null,"messageId":"insert","endLine":66,"endColumn":1,"fix":{"range":[2079,2079],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `········`","line":67,"column":17,"nodeType":null,"messageId":"insert","endLine":67,"endColumn":17,"fix":{"range":[2117,2117],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············},·config.postcssLoader·||·{})` with `····················},⏎····················config.postcssLoader·||·{}⏎················)⏎············`","line":68,"column":1,"nodeType":null,"messageId":"replace","endLine":68,"endColumn":43,"fix":{"range":[2120,2162],"text":" },\n config.postcssLoader || {}\n )\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎················.loader(require.resolve(loader))⏎················` with `.loader(require.resolve(loader))`","line":71,"column":29,"nodeType":null,"messageId":"replace","endLine":73,"endColumn":17,"fix":{"range":[2216,2282],"text":".loader(require.resolve(loader))"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":113,"column":18,"nodeType":null,"messageId":"insert","endLine":113,"endColumn":18,"fix":{"range":[3107,3107],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":114,"column":59,"nodeType":null,"messageId":"insert","endLine":114,"endColumn":59,"fix":{"range":[3186,3186],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":115,"column":13,"nodeType":null,"messageId":"insert","endLine":115,"endColumn":13,"fix":{"range":[3200,3200],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":116,"column":1,"nodeType":null,"messageId":"insert","endLine":116,"endColumn":1,"fix":{"range":[3263,3263],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········}` with `············}⏎········`","line":117,"column":1,"nodeType":null,"messageId":"replace","endLine":117,"endColumn":10,"fix":{"range":[3338,3347],"text":" }\n "}}],"errorCount":23,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":23,"fixableWarningCount":0,"source":"// css less post-css mini-css css 压缩\n// extraPostCSSPlugins\n// postcssLoader\n// lessLoader\n// css-loader\n// 支持 热加载\n// 性能优化\n// css 压缩 https://github.com/webpack-contrib/css-minimizer-webpack-plugin\n// 根据 entry 进行代码块拆分\n// 根据 entry 将文件输出到不同的文件夹\n\nimport { deepmerge } from '@fesjs/utils';\n\nfunction createRules({\n isDev,\n webpackConfig,\n config,\n lang,\n test,\n loader,\n options,\n browserslist\n}) {\n function applyLoaders(rule, isCSSModules) {\n if (isDev) {\n rule.use('extra-css-loader')\n .loader(require.resolve('style-loader'))\n .options({\n });\n } else {\n rule.use('extra-css-loader')\n .loader(require('mini-css-extract-plugin').loader)\n .options({\n });\n }\n\n rule.use('css-loader')\n .loader(require.resolve('css-loader'))\n .options(\n deepmerge(\n {\n importLoaders: 1,\n // https://webpack.js.org/loaders/css-loader/#onlylocals\n ...(isCSSModules\n ? {\n modules: {\n localIdentName: '[local]___[hash:base64:5]'\n }\n }\n : {})\n },\n config.cssLoader || {}\n )\n );\n\n rule.use('postcss-loader')\n .loader(require.resolve('postcss-loader'))\n .options(deepmerge({\n postcssOptions: () => ({\n plugins: [\n // https://github.com/luisrudge/postcss-flexbugs-fixes\n require('postcss-flexbugs-fixes'),\n require('postcss-safe-parser'),\n [require('autoprefixer'), { ...config.autoprefixer, overrideBrowserslist: browserslist }],\n ...(config.extraPostCSSPlugins ? config.extraPostCSSPlugins : [])\n ]\n })\n }, config.postcssLoader || {}));\n\n if (loader) {\n rule.use(loader)\n .loader(require.resolve(loader))\n .options(options);\n }\n }\n\n const rule = webpackConfig.module.rule(lang).test(test);\n applyLoaders(rule.oneOf('css-modules').resourceQuery(/module/), true);\n applyLoaders(rule.oneOf('css'), false);\n}\n\nexport default function createCssWebpackConfig({\n isDev,\n config,\n webpackConfig,\n browserslist\n}) {\n createRules({\n isDev,\n webpackConfig,\n config,\n lang: 'css',\n test: /\\.css$/,\n browserslist\n });\n\n createRules({\n isDev,\n webpackConfig,\n config,\n lang: 'less',\n test: /\\.less$/,\n loader: 'less-loader',\n options: {\n lessOptions: {\n javascriptEnabled: true,\n ...config.lessLoader\n }\n },\n browserslist\n });\n\n webpackConfig.plugin('extra-css')\n .use(require.resolve('mini-css-extract-plugin'), [{\n filename: isDev ? '[name].css' : '[name].[contenthash:8].css',\n chunkFilename: isDev ? '[id].css' : '[id].[contenthash:8].css'\n }]);\n\n if (!isDev) {\n webpackConfig.optimization\n .minimizer('css')\n .use(require.resolve('css-minimizer-webpack-plugin'), [{}]);\n }\n\n return (options) => {\n createRules({\n isDev,\n config,\n webpackConfig,\n browserslist,\n ...options\n });\n };\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/define.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····config,⏎····webpackConfig⏎` with `·config,·webpackConfig·`","line":4,"column":52,"nodeType":null,"messageId":"replace","endLine":7,"endColumn":1,"fix":{"range":[128,159],"text":" config, webpackConfig "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":8,"column":18,"nodeType":null,"messageId":"insert","endLine":8,"endColumn":18,"fix":{"range":[181,181],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎············resolveDefine(config)⏎········` with `resolveDefine(config)`","line":9,"column":37,"nodeType":null,"messageId":"replace","endLine":11,"endColumn":9,"fix":{"range":[235,278],"text":"resolveDefine(config)"}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import webpack from 'webpack';\nimport resolveDefine from './resolveDefine';\n\nexport default function createDefineWebpackConfig({\n config,\n webpackConfig\n}) {\n webpackConfig.plugin('define')\n .use(webpack.DefinePlugin, [\n resolveDefine(config)\n ]);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/getBabelOpts.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····winPath⏎` with `·winPath·`","line":1,"column":9,"nodeType":null,"messageId":"replace","endLine":3,"endColumn":1,"fix":{"range":[8,21],"text":" winPath "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····cwd,⏎····targets,⏎····config,⏎····presetOpts⏎` with `·cwd,·targets,·config,·presetOpts·`","line":5,"column":24,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":1,"fix":{"range":[68,118],"text":" cwd, targets, config, presetOpts "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `importOpts` with `(importOpts)`","line":54,"column":37,"nodeType":null,"messageId":"replace","endLine":54,"endColumn":47,"fix":{"range":[1496,1506],"text":"(importOpts)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":55,"column":1,"nodeType":null,"messageId":"insert","endLine":55,"endColumn":1,"fix":{"range":[1512,1512],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `··················`","line":56,"column":1,"nodeType":null,"messageId":"replace","endLine":56,"endColumn":17,"fix":{"range":[1568,1584],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":57,"column":1,"nodeType":null,"messageId":"insert","endLine":57,"endColumn":1,"fix":{"range":[1596,1596],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":58,"column":1,"nodeType":null,"messageId":"insert","endLine":58,"endColumn":1,"fix":{"range":[1635,1635],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·process.env.BABEL_CACHE·!==·'none'·?·winPath(`${cwd}/.cache/babel-loader`)` with `⏎············process.env.BABEL_CACHE·!==·'none'⏎················?·winPath(`${cwd}/.cache/babel-loader`)⏎···············`","line":66,"column":24,"nodeType":null,"messageId":"replace","endLine":66,"endColumn":99,"fix":{"range":[1857,1932],"text":"\n process.env.BABEL_CACHE !== 'none'\n ? winPath(`${cwd}/.cache/babel-loader`)\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":69,"column":21,"nodeType":null,"messageId":"insert","endLine":69,"endColumn":21,"fix":{"range":[1996,1996],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":70,"column":13,"nodeType":null,"messageId":"insert","endLine":70,"endColumn":13,"fix":{"range":[2010,2010],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":71,"column":13,"nodeType":null,"messageId":"insert","endLine":71,"endColumn":13,"fix":{"range":[2065,2065],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········}` with `············}⏎········`","line":72,"column":1,"nodeType":null,"messageId":"replace","endLine":72,"endColumn":10,"fix":{"range":[2091,2100],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":74,"column":2,"nodeType":null,"messageId":"delete","endLine":75,"endColumn":1,"fix":{"range":[2110,2111],"text":""}}],"errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":13,"fixableWarningCount":0,"source":"import {\n winPath\n} from '@fesjs/utils';\n\nfunction getBabelOpts({\n cwd,\n targets,\n config,\n presetOpts\n}) {\n const presets = [\n [\n require.resolve('@babel/preset-env'),\n {\n targets,\n useBuiltIns: 'usage',\n corejs: {\n version: 3,\n proposals: true\n },\n modules: false\n }\n ],\n [\n // FEATURE 实现类型安全检查\n require('@babel/preset-typescript').default,\n {\n // https://babeljs.io/docs/en/babel-plugin-transform-typescript#impartial-namespace-support\n allowNamespaces: true,\n isTSX: true,\n allExtensions: true\n }\n ],\n ...(config.extraBabelPresets || [])\n ];\n const plugins = [\n require('@babel/plugin-proposal-export-default-from').default,\n [\n require('@babel/plugin-proposal-pipeline-operator').default,\n {\n proposal: 'minimal'\n }\n ],\n require('@babel/plugin-proposal-do-expressions').default,\n require('@babel/plugin-proposal-function-bind').default,\n [\n require.resolve('@babel/plugin-transform-runtime'),\n {\n useESModules: true,\n ...presetOpts.transformRuntime\n }\n ],\n ...(presetOpts.import\n ? presetOpts.import.map(importOpts => [\n require.resolve('babel-plugin-import'),\n importOpts,\n importOpts.libraryName\n ])\n : []),\n require.resolve('@vue/babel-plugin-jsx'),\n ...(config.extraBabelPlugins || [])\n ];\n return {\n babelrc: false,\n configFile: false,\n cacheDirectory: process.env.BABEL_CACHE !== 'none' ? winPath(`${cwd}/.cache/babel-loader`) : false,\n presets,\n plugins,\n overrides: [{\n test: [/[\\\\/]node_modules[\\\\/]/, /\\.fes/],\n sourceType: 'unambiguous'\n }]\n };\n}\n\n\nexport default async ({\n cwd,\n config,\n modifyBabelOpts,\n modifyBabelPresetOpts,\n targets\n}) => {\n let presetOpts = {\n transformRuntime: {}\n };\n if (modifyBabelPresetOpts) {\n presetOpts = await modifyBabelPresetOpts(presetOpts);\n }\n let babelOpts = getBabelOpts({\n cwd,\n config,\n presetOpts,\n targets\n });\n if (modifyBabelOpts) {\n babelOpts = await modifyBabelOpts(babelOpts);\n }\n return babelOpts;\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/html.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····winPath⏎` with `·winPath·`","line":3,"column":9,"nodeType":null,"messageId":"replace","endLine":5,"endColumn":1,"fix":{"range":[79,92],"text":" winPath "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········?·htmlPath⏎·······` with `·?·htmlPath`","line":43,"column":48,"nodeType":null,"messageId":"replace","endLine":45,"endColumn":8,"fix":{"range":[1208,1235],"text":" ? htmlPath"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·route?.meta?.title·||·config.html.title·||` with `⏎································route?.meta?.title·||⏎································config.html.title·||⏎·······························`","line":67,"column":35,"nodeType":null,"messageId":"replace","endLine":67,"endColumn":78,"fix":{"range":[2004,2047],"text":"\n route?.meta?.title ||\n config.html.title ||\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `_htmlOptions` with `⏎································_htmlOptions⏎····························`","line":74,"column":75,"nodeType":null,"messageId":"replace","endLine":74,"endColumn":87,"fix":{"range":[2436,2448],"text":"\n _htmlOptions\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎················`","line":89,"column":64,"nodeType":null,"messageId":"insert","endLine":89,"endColumn":64,"fix":{"range":[2882,2882],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":90,"column":1,"nodeType":null,"messageId":"insert","endLine":90,"endColumn":1,"fix":{"range":[2884,2884],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `scripts:·headScriptsMap.map(script` with `····scripts:·headScriptsMap.map((script)`","line":91,"column":17,"nodeType":null,"messageId":"replace","endLine":91,"endColumn":51,"fix":{"range":[2931,2965],"text":" scripts: headScriptsMap.map((script)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":92,"column":1,"nodeType":null,"messageId":"insert","endLine":92,"endColumn":1,"fix":{"range":[2972,2972],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":93,"column":17,"nodeType":null,"messageId":"insert","endLine":93,"endColumn":17,"fix":{"range":[3025,3025],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎············`","line":94,"column":13,"nodeType":null,"messageId":"replace","endLine":94,"endColumn":14,"fix":{"range":[3041,3042],"text":" }\n "}}],"errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":10,"fixableWarningCount":0,"source":"import { join, resolve } from 'path';\nimport { existsSync } from 'fs';\nimport {\n winPath\n} from '@fesjs/utils';\nimport resolveDefine from './resolveDefine';\n\nexport default async function createHtmlWebpackConfig({\n api,\n cwd,\n config,\n webpackConfig,\n headScripts,\n isProd\n}) {\n const htmlOptions = {\n title: 'fes.js',\n filename: '[name].html',\n ...config.html,\n templateParameters: resolveDefine(config, true),\n mountElementId: config.mountElementId\n };\n\n if (isProd) {\n Object.assign(htmlOptions, {\n minify: {\n removeComments: true,\n collapseWhitespace: true,\n collapseBooleanAttributes: true,\n removeScriptTypeAttributes: true\n // more options:\n // https://github.com/kangax/html-minifier#options-quick-reference\n }\n });\n }\n\n const multiPageConfig = config.html.pages;\n const htmlPath = join(cwd, 'public/index.html');\n const defaultHtmlPath = resolve(__dirname, 'index-default.html');\n const publicCopyIgnore = [];\n\n // default, single page setup.\n htmlOptions.template = existsSync(htmlPath)\n ? htmlPath\n : defaultHtmlPath;\n\n publicCopyIgnore.push(winPath(htmlOptions.template));\n\n if (!multiPageConfig) {\n webpackConfig\n .plugin('html')\n .use(require.resolve('html-webpack-plugin'), [htmlOptions]);\n } else {\n // TODO 支持多页\n }\n\n // 如果需要导出html,则根据路由生成对应的html文件\n if (config.exportStatic) {\n const routes = await api.getRoutes();\n const addHtml = (_routes) => {\n if (Array.isArray(_routes)) {\n _routes.forEach((route) => {\n const _fileName = `${route.path.slice(1) || 'index'}.html`;\n if (_fileName !== 'index.html') {\n const _htmlOptions = {\n ...config.html,\n title: route?.meta?.title || config.html.title || 'fes.js',\n filename: _fileName,\n templateParameters: resolveDefine(config, true),\n mountElementId: config.mountElementId\n };\n webpackConfig\n .plugin(_fileName)\n .use(require.resolve('html-webpack-plugin'), [_htmlOptions]);\n }\n if (route.children && route.children.length) {\n addHtml(route.children);\n }\n });\n }\n };\n addHtml(routes);\n }\n\n if (headScripts) {\n const headScriptsMap = await headScripts();\n webpackConfig\n .plugin('html-tags')\n .use(require.resolve('html-webpack-tags-plugin'), [{\n append: false,\n scripts: headScriptsMap.map(script => ({\n path: script.src\n }))\n }]);\n }\n return {\n publicCopyIgnore\n };\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `key` with `(key)`","line":16,"column":17,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":20,"fix":{"range":[554,557],"text":"(key)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·targets.browsers` with `⏎········targets.browsers·||`","line":22,"column":25,"nodeType":null,"messageId":"replace","endLine":22,"endColumn":42,"fix":{"range":[722,739],"text":"\n targets.browsers ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `||·Object.keys(targets).map(key·=>·`${key}·>=·${targets[key]·===·true·?·'0'·:·targets[key]}`` with `··Object.keys(targets).map(⏎············(key)·=>·`${key}·>=·${targets[key]·===·true·?·'0'·:·targets[key]}`⏎········`","line":23,"column":7,"nodeType":null,"messageId":"replace","endLine":23,"endColumn":99,"fix":{"range":[746,838],"text":" Object.keys(targets).map(\n (key) => `${key} >= ${targets[key] === true ? '0' : targets[key]}`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·?·depPath.replace(/\\\\/g,·'\\\\\\\\')` with `⏎················?·depPath.replace(/\\\\/g,·'\\\\\\\\')⏎···············`","line":50,"column":57,"nodeType":null,"messageId":"replace","endLine":50,"endColumn":90,"fix":{"range":[1437,1470],"text":"\n ? depPath.replace(/\\\\/g, '\\\\\\\\')\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎·······`","line":51,"column":10,"nodeType":null,"messageId":"insert","endLine":51,"endColumn":10,"fix":{"range":[1491,1491],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'exclude·only·accepts·an·array·of·string·or·regular·expressions'` with `⏎············'exclude·only·accepts·an·array·of·string·or·regular·expressions'⏎········`","line":55,"column":25,"nodeType":null,"messageId":"replace","endLine":55,"endColumn":89,"fix":{"range":[1587,1651],"text":"\n 'exclude only accepts an array of string or regular expressions'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":58,"column":2,"nodeType":null,"messageId":"delete","endLine":59,"endColumn":1,"fix":{"range":[1723,1724],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `isDev·?·(config.devtool·||·'cheap-module-source-map')·:·config.devtool` with `⏎········isDev·?·config.devtool·||·'cheap-module-source-map'·:·config.devtool⏎····`","line":81,"column":27,"nodeType":null,"messageId":"replace","endLine":81,"endColumn":97,"fix":{"range":[2260,2330],"text":"\n isDev ? config.devtool || 'cheap-module-source-map' : config.devtool\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'.mjs',·'.js',·'.jsx',·'.vue',·'.ts',·'.tsx',·'.json',·'.wasm'` with `⏎········'.mjs',⏎········'.js',⏎········'.jsx',⏎········'.vue',⏎········'.ts',⏎········'.tsx',⏎········'.json',⏎········'.wasm'⏎····`","line":103,"column":45,"nodeType":null,"messageId":"replace","endLine":103,"endColumn":107,"fix":{"range":[3010,3072],"text":"\n '.mjs',\n '.js',\n '.jsx',\n '.vue',\n '.ts',\n '.tsx',\n '.json',\n '.wasm'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎················`","line":107,"column":40,"nodeType":null,"messageId":"delete","endLine":108,"endColumn":17,"fix":{"range":[3193,3210],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":185,"column":11,"nodeType":null,"messageId":"insert","endLine":185,"endColumn":11,"fix":{"range":[5416,5416],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `config.nodeModulesTransform.exclude` with `⏎············config.nodeModulesTransform.exclude⏎········`","line":192,"column":56,"nodeType":null,"messageId":"replace","endLine":192,"endColumn":91,"fix":{"range":[5669,5704],"text":"\n config.nodeModulesTransform.exclude\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":196,"column":41,"nodeType":null,"messageId":"insert","endLine":196,"endColumn":41,"fix":{"range":[5849,5849],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":203,"column":15,"nodeType":null,"messageId":"insert","endLine":203,"endColumn":15,"fix":{"range":[6070,6070],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":234,"column":27,"nodeType":null,"messageId":"insert","endLine":234,"endColumn":27,"fix":{"range":[6773,6773],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":235,"column":1,"nodeType":null,"messageId":"replace","endLine":235,"endColumn":9,"fix":{"range":[6810,6818],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":236,"column":1,"nodeType":null,"messageId":"insert","endLine":236,"endColumn":1,"fix":{"range":[6845,6845],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":237,"column":13,"nodeType":null,"messageId":"insert","endLine":237,"endColumn":13,"fix":{"range":[6893,6893],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `····················`","line":238,"column":1,"nodeType":null,"messageId":"replace","endLine":238,"endColumn":17,"fix":{"range":[6941,6957],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":239,"column":13,"nodeType":null,"messageId":"insert","endLine":239,"endColumn":13,"fix":{"range":[6983,6983],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":240,"column":1,"nodeType":null,"messageId":"insert","endLine":240,"endColumn":1,"fix":{"range":[6985,6985],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":241,"column":1,"nodeType":null,"messageId":"insert","endLine":241,"endColumn":1,"fix":{"range":[7044,7044],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":242,"column":13,"nodeType":null,"messageId":"insert","endLine":242,"endColumn":13,"fix":{"range":[7086,7086],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":243,"column":1,"nodeType":null,"messageId":"insert","endLine":243,"endColumn":1,"fix":{"range":[7088,7088],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":244,"column":9,"nodeType":null,"messageId":"insert","endLine":244,"endColumn":9,"fix":{"range":[7121,7121],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":245,"column":1,"nodeType":null,"messageId":"replace","endLine":245,"endColumn":9,"fix":{"range":[7124,7132],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `},·...(` with `····},⏎········...`","line":246,"column":5,"nodeType":null,"messageId":"replace","endLine":246,"endColumn":12,"fix":{"range":[7155,7162],"text":" },\n ..."}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":247,"column":1,"nodeType":null,"messageId":"insert","endLine":247,"endColumn":1,"fix":{"range":[7198,7198],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":248,"column":13,"nodeType":null,"messageId":"insert","endLine":248,"endColumn":13,"fix":{"range":[7250,7250],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `····················`","line":249,"column":1,"nodeType":null,"messageId":"replace","endLine":249,"endColumn":17,"fix":{"range":[7259,7275],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":250,"column":1,"nodeType":null,"messageId":"insert","endLine":250,"endColumn":1,"fix":{"range":[7303,7303],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":251,"column":13,"nodeType":null,"messageId":"insert","endLine":251,"endColumn":13,"fix":{"range":[7350,7350],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":252,"column":1,"nodeType":null,"messageId":"replace","endLine":252,"endColumn":9,"fix":{"range":[7353,7361],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":253,"column":1,"nodeType":null,"messageId":"insert","endLine":253,"endColumn":1,"fix":{"range":[7363,7363],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":254,"column":1,"nodeType":null,"messageId":"insert","endLine":254,"endColumn":1,"fix":{"range":[7380,7380],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":255,"column":13,"nodeType":null,"messageId":"insert","endLine":255,"endColumn":13,"fix":{"range":[7432,7432],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":256,"column":9,"nodeType":null,"messageId":"insert","endLine":256,"endColumn":9,"fix":{"range":[7474,7474],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····}))` with `········})⏎····`","line":257,"column":1,"nodeType":null,"messageId":"replace","endLine":257,"endColumn":8,"fix":{"range":[7477,7484],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎················`","line":262,"column":59,"nodeType":null,"messageId":"insert","endLine":262,"endColumn":59,"fix":{"range":[7689,7689],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":263,"column":1,"nodeType":null,"messageId":"insert","endLine":263,"endColumn":1,"fix":{"range":[7691,7691],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎············`","line":264,"column":13,"nodeType":null,"messageId":"replace","endLine":264,"endColumn":14,"fix":{"range":[7742,7743],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········.plugin('progress')⏎········` with `.plugin('progress')`","line":302,"column":18,"nodeType":null,"messageId":"replace","endLine":304,"endColumn":9,"fix":{"range":[8692,8729],"text":".plugin('progress')"}}],"errorCount":42,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":42,"fixableWarningCount":0,"source":"import { join } from 'path';\nimport { existsSync } from 'fs';\nimport Config from 'webpack-chain';\nimport webpack from 'webpack';\nimport createCssWebpackConfig from './css';\nimport getBabelOpts from './getBabelOpts';\nimport createVueWebpackConfig from './vue';\nimport createDefineWebpackConfig from './define';\nimport createMinimizerWebpackConfig from './minimizer';\nimport createHtmlWebpackConfig from './html';\n\nfunction getTargetsAndBrowsersList({ config }) {\n let targets = config.targets || {};\n\n targets = Object.keys(targets)\n .filter(key => targets[key] !== false)\n .reduce((memo, key) => {\n memo[key] = targets[key];\n return memo;\n }, {});\n\n const browserslist = targets.browsers\n || Object.keys(targets).map(key => `${key} >= ${targets[key] === true ? '0' : targets[key]}`);\n\n return {\n targets,\n browserslist\n };\n}\n\nconst DEFAULT_EXCLUDE_NODE_MODULES = [\n 'vue',\n 'vuex',\n 'vue-router',\n 'ant-design-vue',\n 'core-js',\n 'echarts',\n '@babel/runtime',\n 'lodash-es',\n 'webpack-dev-server',\n 'ansi-html',\n 'html-entities'\n];\n\nfunction genTranspileDepRegex(exclude) {\n exclude = exclude.concat(DEFAULT_EXCLUDE_NODE_MODULES);\n const deps = exclude.map((dep) => {\n if (typeof dep === 'string') {\n const depPath = join('node_modules', dep, '/');\n return /^win/.test(require('os').platform()) ? depPath.replace(/\\\\/g, '\\\\\\\\') : depPath;\n } if (dep instanceof RegExp) {\n return dep.source;\n }\n\n throw new Error('exclude only accepts an array of string or regular expressions');\n });\n return deps.length ? new RegExp(deps.join('|')) : null;\n}\n\n\nexport default async function getConfig({\n api,\n cwd,\n config,\n env,\n entry = {},\n modifyBabelOpts,\n modifyBabelPresetOpts,\n chainWebpack,\n headScripts,\n publicPath\n}) {\n const isDev = env === 'development';\n const isProd = env === 'production';\n const webpackConfig = new Config();\n const absoluteOutput = join(cwd, config.outputPath || 'dist');\n\n webpackConfig.mode(env);\n webpackConfig.stats('verbose');\n webpackConfig.externals(config.externals || {});\n webpackConfig.devtool(isDev ? (config.devtool || 'cheap-module-source-map') : config.devtool);\n\n // --------------- cache -----------\n webpackConfig.cache({\n type: 'filesystem',\n cacheDirectory: join(cwd, '.cache/webpack')\n });\n\n // --------------- entry -----------\n // Feature 公共模块 vue vue-router 处理 dependOn ?\n Object.keys(entry).forEach((key) => {\n webpackConfig.entry(key).add(entry[key]).end();\n });\n\n // --------------- output -----------\n webpackConfig.output\n .path(absoluteOutput)\n .publicPath(publicPath)\n .filename('[name].[contenthash:8].js')\n .chunkFilename('[name].[contenthash:8].chunk.js');\n\n // --------------- resolve -----------\n webpackConfig.resolve.extensions.merge(['.mjs', '.js', '.jsx', '.vue', '.ts', '.tsx', '.json', '.wasm']);\n\n if (config.alias) {\n Object.keys(config.alias).forEach((key) => {\n webpackConfig.resolve.alias\n .set(key, config.alias[key]);\n });\n }\n\n // --------------- module -----------\n webpackConfig.module\n .rule('image')\n .test(/\\.(png|jpe?g|gif|webp|ico)(\\?.*)?$/)\n .use('url-loader')\n .loader(require.resolve('url-loader'))\n .options({\n limit: config.inlineLimit || 8192,\n esModule: false,\n fallback: {\n loader: require.resolve('file-loader'),\n options: {\n name: 'static/[name].[hash:8].[ext]',\n esModule: false\n }\n }\n });\n\n webpackConfig.module\n .rule('svg')\n .test(/\\.(svg)(\\?.*)?$/)\n .use('file-loader')\n .loader(require.resolve('file-loader'))\n .options({\n name: 'static/[name].[hash:8].[ext]',\n esModule: false\n });\n\n webpackConfig.module\n .rule('fonts')\n .test(/\\.(eot|woff|woff2|ttf)(\\?.*)?$/)\n .use('file-loader')\n .loader(require.resolve('file-loader'))\n .options({\n name: 'static/[name].[hash:8].[ext]',\n esModule: false\n });\n\n webpackConfig.module\n .rule('raw')\n .test(/\\.(txt|text|md)$/)\n .use('raw-loader')\n .loader(require.resolve('raw-loader'))\n .options({\n esModule: false\n });\n\n const { targets, browserslist } = getTargetsAndBrowsersList({ config });\n const babelOpts = await getBabelOpts({\n cwd,\n config,\n modifyBabelOpts,\n modifyBabelPresetOpts,\n targets\n });\n\n // --------------- js -----------\n // https://webpack.docschina.org/configuration/module/#resolve-fully-specified\n webpackConfig.module\n .rule('esm')\n .test(/\\.m?jsx?$/)\n .resolve.set('fullySpecified', false);\n\n webpackConfig.module\n .rule('js')\n .test(/\\.(js|mjs|jsx|ts|tsx)$/)\n .exclude.add((filepath) => {\n // always transpile js in vue files\n if (/\\.vue\\.jsx?$/.test(filepath)) {\n return false;\n }\n // Don't transpile node_modules\n return /node_modules/.test(filepath);\n }).end()\n .use('babel-loader')\n .loader(require.resolve('babel-loader'))\n .options(babelOpts);\n\n // 为了避免第三方依赖包编译不充分导致线上问题,默认对 node_modules 也进行全编译,只在生产构建的时候进行\n if (isProd) {\n const transpileDepRegex = genTranspileDepRegex(config.nodeModulesTransform.exclude);\n webpackConfig.module\n .rule('js-in-node_modules')\n .test(/\\.(js|mjs)$/)\n .include.add(/node_modules/).end()\n .exclude.add((filepath) => {\n if (transpileDepRegex && transpileDepRegex.test(filepath)) {\n return true;\n }\n\n return false;\n }).end()\n .use('babel-loader')\n .loader(require.resolve('babel-loader'))\n .options(babelOpts);\n }\n\n // --------------- css -----------\n const createCSSRule = createCssWebpackConfig({\n isDev,\n config,\n webpackConfig,\n browserslist\n });\n\n // --------------- vue -----------\n createVueWebpackConfig({\n config,\n webpackConfig\n });\n\n // --------------- html -----------\n const { publicCopyIgnore } = await createHtmlWebpackConfig({\n api,\n cwd,\n config,\n webpackConfig,\n headScripts,\n isProd\n });\n\n // --------------- copy -----------\n const copyPatterns = [existsSync(join(cwd, 'public')) && {\n from: join(cwd, 'public'),\n filter: (resourcePath) => {\n if (resourcePath.indexOf('.DS_Store') !== -1) {\n return false;\n }\n if (publicCopyIgnore.includes(resourcePath)) {\n return false;\n }\n return true;\n },\n to: absoluteOutput\n }, ...((config.copy || []).map((item) => {\n if (typeof item === 'string') {\n return {\n from: join(cwd, item.from),\n to: absoluteOutput\n };\n }\n return {\n from: join(cwd, item.from),\n to: join(absoluteOutput, item.to)\n };\n }))].filter(Boolean);\n // const publicCopyIgnore = ['.DS_Store'];\n if (copyPatterns.length) {\n webpackConfig\n .plugin('copy')\n .use(require.resolve('copy-webpack-plugin'), [{\n patterns: copyPatterns\n }]);\n }\n\n // --------------- define -----------\n createDefineWebpackConfig({\n config,\n webpackConfig\n });\n\n // --------------- 分包 -----------\n if (isProd) {\n webpackConfig.optimization.splitChunks({\n cacheGroups: {\n defaultVendors: {\n name: 'chunk-vendors',\n test: /[\\\\/]node_modules[\\\\/]/,\n priority: -10,\n chunks: 'initial'\n },\n common: {\n name: 'chunk-common',\n minChunks: 2,\n priority: -20,\n chunks: 'initial',\n reuseExistingChunk: true\n }\n }\n });\n }\n\n // --------------- 压缩 -----------\n createMinimizerWebpackConfig({\n isProd,\n config,\n webpackConfig\n });\n\n // --------------- 构建输出 ----------\n webpackConfig\n .plugin('progress')\n .use(require.resolve('webpackbar'));\n\n webpackConfig\n .plugin('friendly-errors')\n .use(require('@soda/friendly-errors-webpack-plugin'));\n\n // --------------- chainwebpack -----------\n if (chainWebpack) {\n await chainWebpack(webpackConfig, {\n createCSSRule,\n webpack\n });\n }\n // 用户配置的 chainWebpack 优先级最高\n if (config.chainWebpack) {\n await config.chainWebpack(webpackConfig, {\n createCSSRule,\n env,\n webpack\n });\n }\n\n return webpackConfig.toConfig();\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/minimizer.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":5,"column":5,"nodeType":null,"messageId":"insert","endLine":5,"endColumn":5,"fix":{"range":[94,94],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `config` with `(config)`","line":40,"column":23,"nodeType":null,"messageId":"replace","endLine":40,"endColumn":29,"fix":{"range":[1046,1052],"text":"(config)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········defaultTerserOptions,⏎········config.terserOptions·||·{}⏎····` with `defaultTerserOptions,·config.terserOptions·||·{}`","line":41,"column":30,"nodeType":null,"messageId":"replace","endLine":44,"endColumn":5,"fix":{"range":[1088,1158],"text":"defaultTerserOptions, config.terserOptions || {}"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":46,"column":4,"nodeType":null,"messageId":"delete","endLine":47,"endColumn":1,"fix":{"range":[1191,1192],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `terserOptions(config)` with `⏎················terserOptions(config)⏎············`","line":57,"column":61,"nodeType":null,"messageId":"replace","endLine":57,"endColumn":82,"fix":{"range":[1442,1463],"text":"\n terserOptions(config)\n "}}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":"import { deepmerge } from '@fesjs/utils';\n\nconst defaultTerserOptions = {\n compress: {\n // turn off flags with small gains to speed up minification\n arrows: false,\n collapse_vars: false, // 0.3kb\n comparisons: false,\n computed_props: false,\n hoist_funs: false,\n hoist_props: false,\n hoist_vars: false,\n inline: false,\n loops: false,\n negate_iife: false,\n properties: false,\n reduce_funcs: false,\n reduce_vars: false,\n switches: false,\n toplevel: false,\n typeofs: false,\n\n // a few flags with noticeable gains/speed ratio\n // numbers based on out of the box vendor bundle\n booleans: true, // 0.7kb\n if_return: true, // 0.4kb\n sequences: true, // 0.7kb\n unused: true, // 2.3kb\n\n // required features to drop conditional branches\n conditionals: true,\n dead_code: true,\n evaluate: true\n },\n mangle: {\n safari10: true\n }\n};\n\nconst terserOptions = config => ({\n terserOptions: deepmerge(\n defaultTerserOptions,\n config.terserOptions || {}\n ),\n extractComments: false\n});\n\n\nexport default function createMinimizerWebpackConfig({\n isProd,\n config,\n webpackConfig\n}) {\n if (isProd) {\n webpackConfig.optimization\n .minimizer('terser')\n .use(require.resolve('terser-webpack-plugin'), [terserOptions(config)]);\n }\n if (process.env.FES_ENV === 'test') {\n webpackConfig.optimization.minimize(false);\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/resolveDefine.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/vue.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····config,⏎····webpackConfig⏎` with `·config,·webpackConfig·`","line":3,"column":49,"nodeType":null,"messageId":"replace","endLine":6,"endColumn":1,"fix":{"range":[83,114],"text":" config, webpackConfig "}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"// import webpack from 'webpack';\n\nexport default function createVueWebpackConfig({\n config,\n webpackConfig\n}) {\n webpackConfig.module\n .rule('vue')\n .test(/\\.vue$/)\n .use('vue-loader')\n .loader(require.resolve('vue-loader'))\n .options({\n babelParserPlugins: ['jsx', 'classProperties', 'decorators-legacy'],\n ...(config.vueLoader || {})\n })\n .end();\n\n webpackConfig\n .plugin('vue-loader-plugin')\n .use(require('vue-loader').VueLoaderPlugin);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/alias.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎············`","line":10,"column":23,"nodeType":null,"messageId":"delete","endLine":11,"endColumn":13,"fix":{"range":[213,226],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"export default (api) => {\n const { paths } = api;\n\n api.describe({\n key: 'alias',\n config: {\n schema(joi) {\n return joi.object();\n },\n default: {\n }\n }\n });\n\n api.chainWebpack(async (memo) => {\n // 选择在 chainWebpack 中进行以上 alias 的初始化,是为了支持用户使用 modifyPaths API 对 paths 进行改写\n memo.resolve.alias.set('@', paths.absSrcPath);\n memo.resolve.alias.set('@@', paths.absTmpPath);\n\n return memo;\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/analyze.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.string()` with `⏎····························.string()⏎····························`","line":9,"column":42,"nodeType":null,"messageId":"replace","endLine":9,"endColumn":51,"fix":{"range":[212,221],"text":"\n .string()\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.string()` with `⏎····························.string()⏎····························`","line":15,"column":38,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":47,"fix":{"range":[592,601],"text":"\n .string()\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.string()` with `⏎····························.string()⏎····························`","line":16,"column":42,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":51,"fix":{"range":[685,694],"text":"\n .string()\n "}}],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'analyze',\n config: {\n schema(joi) {\n return joi\n .object({\n analyzerMode: joi.string().valid('server', 'static', 'disabled'),\n analyzerHost: joi.string(),\n analyzerPort: joi.alternatives(joi.number(), 'auto'),\n openAnalyzer: joi.boolean(),\n generateStatsFile: joi.boolean(),\n statsFilename: joi.string(),\n logLevel: joi.string().valid('info', 'warn', 'error', 'silent'),\n defaultSizes: joi.string().valid('stat', 'parsed', 'gzip')\n })\n .unknown(true);\n },\n default: {\n analyzerMode: process.env.ANALYZE_MODE || 'server',\n analyzerPort: process.env.ANALYZE_PORT || 8888,\n openAnalyzer: process.env.ANALYZE_OPEN !== 'none',\n // generate stats file while ANALYZE_DUMP exist\n generateStatsFile: !!process.env.ANALYZE_DUMP,\n statsFilename: process.env.ANALYZE_DUMP || 'stats.json',\n logLevel: process.env.ANALYZE_LOG_LEVEL || 'info',\n defaultSizes: 'parsed' // stat // gzip\n }\n },\n enableBy: () => !!process.env.ANALYZE\n });\n api.chainWebpack((webpackConfig) => {\n webpackConfig\n .plugin('bundle-analyzer')\n .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [\n api.config?.analyze || {}\n ]);\n return webpackConfig;\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/autoprefixer.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'postcss·autoprefixer,·default·flexbox:·no-2009'` with `⏎························'postcss·autoprefixer,·default·flexbox:·no-2009'⏎····················`","line":12,"column":34,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":82,"fix":{"range":[282,330],"text":"\n 'postcss autoprefixer, default flexbox: no-2009'\n "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'autoprefixer',\n config: {\n default: {\n flexbox: 'no-2009'\n },\n schema(joi) {\n return joi\n .object()\n .description('postcss autoprefixer, default flexbox: no-2009');\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/babelPluginImport.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/base.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'base',\n config: {\n default: '',\n schema(joi) {\n return joi.string().allow('');\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/chainWebpack.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/checkVuePackage.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎············`","line":10,"column":23,"nodeType":null,"messageId":"delete","endLine":11,"endColumn":13,"fix":{"range":[242,255],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `vuePkg.version,·`~${vueCompilerPkg.version.replace(/\\d+$/,·'0')}`,·{·includePrerelease:·true·}` with `⏎················vuePkg.version,⏎················`~${vueCompilerPkg.version.replace(/\\d+$/,·'0')}`,⏎················{·includePrerelease:·true·}⏎············`","line":20,"column":31,"nodeType":null,"messageId":"replace","endLine":20,"endColumn":125,"fix":{"range":[539,633],"text":"\n vuePkg.version,\n `~${vueCompilerPkg.version.replace(/\\d+$/, '0')}`,\n { includePrerelease: true }\n "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"import { chalk, semver } from '@fesjs/utils';\n\nexport default (api) => {\n api.describe({\n key: 'checkVuePackage',\n config: {\n schema(joi) {\n return joi.object();\n },\n default: {\n }\n }\n });\n\n api.onStart(() => {\n // eslint-disable-next-line import/no-extraneous-dependencies\n const vuePkg = require('vue/package.json');\n const vueCompilerPkg = require('@vue/compiler-sfc/package.json');\n if (\n !semver.satisfies(vuePkg.version, `~${vueCompilerPkg.version.replace(/\\d+$/, '0')}`, { includePrerelease: true })\n ) {\n console.log(\n chalk.red(\n `You are using vue@${vuePkg.version}, requires @vue/compiler-sfc@${vuePkg.version}.\\nPlease upgrade your @vue/compiler-sfc@${vueCompilerPkg.version} version.`\n )\n );\n process.exit(1);\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/copy.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'copy',\n config: {\n schema(joi) {\n return joi.array().items(\n joi.alternatives(\n joi.object({\n from: joi.string(),\n to: joi.string()\n }),\n joi.string()\n )\n );\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/cssLoader.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'cssLoader',\n config: {\n default: {},\n schema(joi) {\n return joi\n .object({\n url: joi.alternatives(joi.boolean(), joi.function()),\n import: joi.alternatives(joi.boolean(), joi.function()),\n modules: joi.alternatives(\n joi.boolean(),\n joi.string(),\n joi.object()\n ),\n sourceMap: joi.boolean(),\n importLoaders: joi.number(),\n onlyLocals: joi.boolean(),\n esModule: joi.boolean(),\n localsConvention: joi\n .string()\n .valid(\n 'asIs',\n 'camelCase',\n 'camelCaseOnly',\n 'dashes',\n 'dashesOnly'\n )\n })\n .description(\n 'more css-loader options see https://webpack.js.org/loaders/css-loader/#options'\n );\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/define.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎············`","line":9,"column":23,"nodeType":null,"messageId":"delete","endLine":10,"endColumn":13,"fix":{"range":[187,200],"text":""}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'define',\n config: {\n schema(joi) {\n return joi.object();\n },\n default: {\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/devScripts.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'devScripts',\n config: {\n schema(joi) {\n return joi.object();\n }\n },\n enableBy() {\n return api.env === 'development';\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/devServer.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.number()` with `⏎····························.number()⏎····························`","line":10,"column":34,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":43,"fix":{"range":[231,240],"text":"\n .number()\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `joi.boolean(),·joi.function()` with `⏎····························joi.boolean(),⏎····························joi.function()⏎························`","line":22,"column":55,"nodeType":null,"messageId":"replace","endLine":22,"endColumn":84,"fix":{"range":[812,841],"text":"\n joi.boolean(),\n joi.function()\n "}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'devServer',\n config: {\n default: {},\n schema(joi) {\n return joi\n .object({\n port: joi.number().description('devServer port, default 8000'),\n host: joi.string(),\n https: joi.alternatives(\n joi\n .object({\n key: joi.string(),\n cert: joi.string()\n })\n .unknown(),\n joi.boolean()\n ),\n headers: joi.object(),\n writeToDisk: joi.alternatives(joi.boolean(), joi.function())\n })\n .description('devServer configs')\n .unknown(true);\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/devtool.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'devtool',\n config: {\n schema(joi) {\n return joi.string();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/dynamicImport.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'dynamicImport',\n config: {\n schema(joi) {\n return joi.boolean();\n }\n },\n default: false\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/exportStatic.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·(` with `⏎············`","line":13,"column":24,"nodeType":null,"messageId":"replace","endLine":13,"endColumn":26,"fix":{"range":[405,407],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":14,"column":1,"nodeType":null,"messageId":"insert","endLine":14,"endColumn":1,"fix":{"range":[440,440],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `:·api.config?.exportStatic)` with `····:·api.config?.exportStatic`","line":15,"column":13,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":40,"fix":{"range":[494,521],"text":" : api.config?.exportStatic"}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"export default (api) => {\n api.describe({\n key: 'exportStatic',\n config: {\n schema(joi) {\n return joi.object({\n htmlSuffix: joi.boolean(),\n dynamicRoot: joi.boolean()\n });\n }\n },\n // TODO: api.EnableBy.config 读取的 userConfig,modifyDefaultConfig hook 修改后对这个判断不起效\n enableBy: () => ('exportStatic' in api.userConfig\n ? api.userConfig.exportStatic\n : api.config?.exportStatic)\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/externals.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `joi.object(),·joi.string(),·joi.function()` with `⏎····················joi.object(),⏎····················joi.string(),⏎····················joi.function()⏎················`","line":8,"column":41,"nodeType":null,"messageId":"replace","endLine":8,"endColumn":83,"fix":{"range":[233,275],"text":"\n joi.object(),\n joi.string(),\n joi.function()\n "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'externals',\n config: {\n schema(joi) {\n // https://webpack.js.org/configuration/externals/#externals\n return joi.alternatives(joi.object(), joi.string(), joi.function());\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/extraBabelPlugins.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'extraBabelPlugins',\n config: {\n schema(joi) {\n return joi.array();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/extraBabelPresets.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'extraBabelPresets',\n config: {\n schema(joi) {\n return joi.array();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/extraPostCSSPlugins.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'extraPostCSSPlugins',\n config: {\n schema(joi) {\n return joi.array();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/globalCSS.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `file` with `(file)`","line":19,"column":14,"nodeType":null,"messageId":"replace","endLine":19,"endColumn":18,"fix":{"range":[432,436],"text":"(file)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `file` with `(file)`","line":20,"column":17,"nodeType":null,"messageId":"replace","endLine":20,"endColumn":21,"fix":{"range":[486,490],"text":"(file)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":24,"column":14,"nodeType":null,"messageId":"insert","endLine":24,"endColumn":14,"fix":{"range":[575,575],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.map(file·=>·`require('${winPath(relative(absTmpPath,·file))}');`` with `····.map(⏎····················(file)·=>⏎························`require('${winPath(relative(absTmpPath,·file))}');`⏎················`","line":25,"column":13,"nodeType":null,"messageId":"replace","endLine":25,"endColumn":78,"fix":{"range":[605,670],"text":" .map(\n (file) =>\n `require('${winPath(relative(absTmpPath, file))}');`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":26,"column":1,"nodeType":null,"messageId":"insert","endLine":26,"endColumn":1,"fix":{"range":[672,672],"text":" "}}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":"import { relative, join } from 'path';\nimport { existsSync } from 'fs';\n\nexport default (api) => {\n const {\n paths,\n utils: { winPath }\n } = api;\n const { absSrcPath = '', absTmpPath = '' } = paths;\n const files = [\n 'global.css',\n 'global.less',\n 'global.scss',\n 'global.sass',\n 'global.styl',\n 'global.stylus'\n ];\n const globalCSSFile = files\n .map(file => join(absSrcPath || '', file))\n .filter(file => existsSync(file))\n .slice(0, 1);\n\n api.addEntryCodeAhead(\n () => `${globalCSSFile\n .map(file => `require('${winPath(relative(absTmpPath, file))}');`)\n .join('')}`\n );\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/html.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎············`","line":12,"column":23,"nodeType":null,"messageId":"delete","endLine":13,"endColumn":13,"fix":{"range":[386,399],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"export default (api) => {\n api.describe({\n key: 'html',\n config: {\n schema(joi) {\n return joi\n .object()\n .description(\n 'more html-webpack-plugin options see https://github.com/jantimon/html-webpack-plugin#configuration'\n );\n },\n default: {\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/inlineLimit.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'inlineLimit',\n config: {\n schema(joi) {\n return joi.number();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/lessLoader.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'lessLoader',\n config: {\n default: {},\n schema(joi) {\n return joi.object();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/mock.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···································`","line":75,"column":60,"nodeType":null,"messageId":"insert","endLine":75,"endColumn":60,"fix":{"range":[2293,2293],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":110,"column":21,"nodeType":null,"messageId":"insert","endLine":110,"endColumn":21,"fix":{"range":[3254,3254],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":111,"column":13,"nodeType":null,"messageId":"insert","endLine":111,"endColumn":13,"fix":{"range":[3297,3297],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":112,"column":1,"nodeType":null,"messageId":"insert","endLine":112,"endColumn":1,"fix":{"range":[3314,3314],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `item` with `(item)`","line":145,"column":17,"nodeType":null,"messageId":"replace","endLine":145,"endColumn":21,"fix":{"range":[4528,4532],"text":"(item)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":171,"column":55,"nodeType":null,"messageId":"insert","endLine":171,"endColumn":55,"fix":{"range":[5519,5519],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·||`","line":172,"column":20,"nodeType":null,"messageId":"delete","endLine":172,"endColumn":23,"fix":{"range":[5539,5542],"text":""}}],"errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":7,"fixableWarningCount":0,"source":"import { existsSync, readFileSync } from 'fs';\nimport { resolve } from 'path';\nimport { chokidar, lodash, parseRequireDeps } from '@fesjs/utils';\nimport bodyParser from 'body-parser';\nimport cookieParser from 'cookie-parser';\nimport mockjs from 'mockjs';\n\nexport default (api) => {\n let mockFlag = false; // mock 开关flag\n let mockPrefix = '/'; // mock 过滤前缀\n let mockFile = ''; // mock 文件\n let loadMock = ''; // mock 对象\n\n const registerBabel = (paths) => {\n // support\n // clear require cache and set babel register\n const requireDeps = paths.reduce((memo, file) => {\n memo = memo.concat(parseRequireDeps(file));\n return memo;\n }, []);\n requireDeps.forEach((f) => {\n if (require.cache[f]) {\n delete require.cache[f];\n }\n });\n api.babelRegister.setOnlyMap({\n key: 'mock',\n value: [...paths, ...requireDeps]\n });\n };\n\n api.describe({\n key: 'mock',\n config: {\n schema(joi) {\n return joi.alternatives(joi.boolean(), joi.object());\n }\n },\n enableBy: () => process.env.NODE_ENV === 'development'\n });\n\n // 对 array、object 遍历处理\n function traversalHandler(val, callback) {\n if (lodash.isArray(val)) {\n val.forEach(callback);\n }\n if (lodash.isPlainObject(val)) {\n Object.keys(val).forEach((key) => {\n callback(val[key], key);\n });\n }\n }\n\n // 根据参数个数获取配置\n function getOption(arg) {\n const len = arg.length;\n // 默认配置\n const option = {\n headers: {\n 'Cache-Control': 'no-cache'\n },\n statusCode: 200,\n cookies: [],\n timeout: 0\n };\n if (len === 0) return option;\n if (len === 1) {\n const newOption = arg[0];\n if (lodash.isPlainObject(newOption)) {\n traversalHandler(newOption, (value, key) => {\n if (key === 'headers') {\n traversalHandler(\n newOption.headers,\n (headervalue, headerkey) => {\n option.headers[headerkey] = newOption.headers[headerkey];\n }\n );\n } else {\n option[key] = newOption[key];\n }\n });\n }\n } else {\n option.url = arg[0];\n option.result = arg[1];\n }\n return option;\n }\n\n // 把基于 cgiMockfile 的相对绝对转成绝对路径\n function parsePath(value) {\n return resolve(api.cwd, value);\n }\n\n const createMock = () => {\n const requestList = [];\n const cgiMock = (...arg) => {\n const option = getOption(arg);\n if (!option.url || !option.result) return;\n requestList.push(option);\n };\n\n const utils = {};\n utils.file = function (file) {\n return readFileSync(parsePath(file));\n };\n\n // mock打开情况下,配置的过滤前缀\n const mockPrefixTemp = api.config.mock.prefix || mockPrefix;\n mockPrefix = mockPrefixTemp === mockPrefix\n ? mockPrefixTemp\n : `${mockPrefixTemp}/`;\n // mock文件处理\n mockFile = parsePath('./mock.js');\n if (!existsSync(mockFile)) {\n api.logger.info('mock.js File does not exist, please check');\n return;\n }\n // 清除require的缓存,保证 mock 文件修改后拿到最新的 mock.js\n if (require.cache[mockFile]) {\n delete require.cache[mockFile];\n }\n // require最新的 mock.js 文件\n try {\n // register babel\n registerBabel([mockFile]);\n const _initFunction = require(mockFile);\n const initFunction = _initFunction.default || _initFunction;\n if (!lodash.isFunction(initFunction)) {\n api.logger.info('mock.js should export Function');\n return;\n }\n initFunction({ cgiMock, mockjs, utils });\n } catch (err) {\n api.logger.error('mock.js run fail!');\n }\n\n return (req, res, next) => {\n // 如果请求不是以 cgiMock.prefix 开头,直接 next\n if (!req.path.startsWith(mockPrefix)) {\n return next();\n }\n // 请求以 cgiMock.prefix 开头,匹配处理\n const matchRequet = requestList.find(\n item => req.path.search(item.url) !== -1\n );\n if (!matchRequet) {\n return next();\n }\n\n const sendData = () => {\n // set header\n res.set(matchRequet.headers);\n // set Content-Type\n matchRequet.type && res.type(matchRequet.type);\n // set status code\n res.status(matchRequet.statusCode);\n // set cookie\n traversalHandler(matchRequet.cookies, (item) => {\n const name = item.name;\n const value = item.value;\n delete item.name;\n delete item.value;\n res.cookie(name, value, item);\n });\n\n // do result\n if (lodash.isFunction(matchRequet.result)) {\n matchRequet.result(req, res);\n } else if (\n lodash.isArray(matchRequet.result)\n || lodash.isPlainObject(matchRequet.result)\n ) {\n !matchRequet.type && res.type('json');\n res.json(matchRequet.result);\n } else {\n !matchRequet.type && res.type('text');\n res.send(matchRequet.result.toString());\n }\n };\n\n bodyParser.json({ strict: false })(req, res, () => {\n bodyParser.urlencoded({ extended: true })(req, res, () => {\n cookieParser()(req, res, () => {\n sendData();\n });\n });\n });\n };\n };\n\n api.onStart(() => {\n // 获取mock配置: 是否打开\n mockFlag = lodash.isPlainObject(api.config.mock)\n ? true\n : api.config.mock;\n if (!mockFlag) return;\n\n loadMock = createMock();\n return chokidar\n .watch(mockFile, {\n ignoreInitial: true\n })\n .on('change', () => {\n api.logger.info('mock.js changed,reload');\n loadMock = createMock();\n });\n });\n\n api.addBeforeMiddlewares(() => (req, res, next) => {\n if (!mockFlag) return next();\n loadMock(req, res, next);\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/mountElementId.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'mountElementId',\n config: {\n default: 'app',\n schema(joi) {\n return joi.string().allow('');\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/nodeModulesTransform.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'nodeModulesTransform',\n config: {\n default: {\n exclude: []\n },\n schema(joi) {\n return joi.object({\n exclude: joi.array().items(joi.string())\n });\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/outputPath.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/plugins.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'plugins',\n config: {\n schema(joi) {\n return joi.array().items(joi.string());\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/postcssLoader.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'postcssLoader',\n config: {\n schema(joi) {\n return joi.object();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/proxy.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'proxy',\n config: {\n onChange: () => {\n // todo 重新执行proxy的逻辑\n },\n schema(joi) {\n return joi.object();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/publicPath.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/runtimePublicPath.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'runtimePublicPath',\n config: {\n schema(joi) {\n return joi.boolean();\n }\n },\n default: false\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/singular.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎····················`","line":7,"column":27,"nodeType":null,"messageId":"delete","endLine":8,"endColumn":21,"fix":{"range":[168,189],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"export default (api) => {\n api.describe({\n key: 'singular',\n config: {\n default: false,\n schema(joi) {\n return joi\n .boolean();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/targets.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'targets',\n config: {\n default: {\n chrome: 49,\n firefox: 64,\n safari: 10,\n edge: 13,\n ios: 10\n },\n schema(joi) {\n return joi.object();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/terserOptions.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default (api) => {\n api.describe({\n key: 'terserOptions',\n config: {\n schema(joi) {\n return joi.object();\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/features/vueLoader.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":3,"endColumn":1,"fix":{"range":[0,2],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\n\nexport default (api) => {\n api.describe({\n key: 'vueLoader',\n config: {\n schema(joi) {\n return joi\n .object({})\n .description(\n 'more vue-loader options see https://vue-loader.vuejs.org/'\n );\n }\n }\n });\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/generateFiles/core/exports/coreExports.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `item·=>` with `(item)·=>⏎···············`","line":17,"column":18,"nodeType":null,"messageId":"replace","endLine":17,"endColumn":25,"fix":{"range":[603,610],"text":"(item) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `····················`","line":18,"column":1,"nodeType":null,"messageId":"replace","endLine":18,"endColumn":17,"fix":{"range":[647,663],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":19,"column":1,"nodeType":null,"messageId":"insert","endLine":19,"endColumn":1,"fix":{"range":[669,669],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎············`","line":20,"column":13,"nodeType":null,"messageId":"replace","endLine":20,"endColumn":15,"fix":{"range":[712,714],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `.replace('CORE_EXPORTS',·content)` with `⏎················.replace('CORE_EXPORTS',·content)⏎················`","line":25,"column":25,"nodeType":null,"messageId":"replace","endLine":25,"endColumn":58,"fix":{"range":[913,946],"text":"\n .replace('CORE_EXPORTS', content)\n "}}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":"import { readFileSync } from 'fs';\nimport { join } from 'path';\nimport generateExports from '../../../../utils/generateExports';\nimport { runtimePath } from '../../../../utils/constants';\n\nexport default function (api) {\n api.onGenerateFiles(async () => {\n const coreExports = await api.applyPlugins({\n key: 'addCoreExports',\n type: api.ApplyPluginsType.add,\n initialValue: []\n });\n\n const fesExportsHook = {}; // repeated definition\n const absoluteFilePath = 'core/coreExports.js';\n const content = `${coreExports\n .map(item => generateExports(absoluteFilePath, {\n item,\n fesExportsHook\n }))\n .join('\\n')}\\n`;\n const tpl = readFileSync(join(__dirname, './coreExports.tpl'), 'utf-8');\n api.writeTmpFile({\n path: absoluteFilePath,\n content: tpl.replace('CORE_EXPORTS', content).replace('RUNTIME_PATH', runtimePath)\n });\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/generateFiles/core/exports/pluginExports.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `item·=>` with `(item)·=>⏎···················`","line":16,"column":22,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":29,"fix":{"range":[546,553],"text":"(item) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":17,"column":1,"nodeType":null,"messageId":"insert","endLine":17,"endColumn":1,"fix":{"range":[590,590],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":18,"column":21,"nodeType":null,"messageId":"insert","endLine":18,"endColumn":21,"fix":{"range":[636,636],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎················`","line":19,"column":17,"nodeType":null,"messageId":"replace","endLine":19,"endColumn":19,"fix":{"range":[667,669],"text":" })\n "}}],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":"import generateExports from '../../../../utils/generateExports';\n\nexport default function (api) {\n api.onGenerateFiles(async () => {\n const fesExports = await api.applyPlugins({\n key: 'addPluginExports',\n type: api.ApplyPluginsType.add,\n initialValue: []\n });\n\n const fesExportsHook = {}; // repeated definition\n const absoluteFilePath = 'core/pluginExports.js';\n api.writeTmpFile({\n path: absoluteFilePath,\n content: `${fesExports\n .map(item => generateExports(absoluteFilePath, {\n item,\n fesExportsHook\n }))\n .join('\\n')}\\n`\n });\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/generateFiles/core/plugin/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎················existsSync(appPath)·&&·appPath⏎············` with `existsSync(appPath)·&&·appPath`","line":40,"column":28,"nodeType":null,"messageId":"replace","endLine":42,"endColumn":13,"fix":{"range":[1234,1294],"text":"existsSync(appPath) && appPath"}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { readFileSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport { winPath } from '@fesjs/utils';\nimport { runtimePath } from '../../../../utils/constants';\n\nexport default function (api) {\n const {\n paths,\n utils: { Mustache }\n } = api;\n\n const absoluteFilePath = 'core/plugin.js';\n\n api.onGenerateFiles(async () => {\n const validKeys = await api.applyPlugins({\n key: 'addRuntimePluginKey',\n type: api.ApplyPluginsType.add,\n initialValue: [\n // 初始化数据\n 'beforeRender',\n // modify渲染工具\n 'modifyClientRenderOpts',\n 'rootContainer',\n // app生成时触发\n 'onAppCreated',\n // 渲染\n 'render',\n // 修改路由\n 'patchRoutes',\n // 修改histror\n 'modifyCreateHistroy',\n // 生成router时触发\n 'onRouterCreated'\n ]\n });\n const appPath = winPath(join(paths.absSrcPath, 'app.js'));\n const plugins = await api.applyPlugins({\n key: 'addRuntimePlugin',\n type: api.ApplyPluginsType.add,\n initialValue: [\n existsSync(appPath) && appPath\n ].filter(Boolean)\n });\n api.writeTmpFile({\n path: absoluteFilePath,\n content: Mustache.render(\n readFileSync(join(__dirname, 'plugin.tpl'), 'utf-8'),\n {\n validKeys,\n runtimePath\n }\n )\n });\n api.writeTmpFile({\n path: 'core/pluginRegister.js',\n content: Mustache.render(\n readFileSync(join(__dirname, 'pluginRegister.tpl'), 'utf-8'),\n {\n plugins: plugins.map((plugin, index) => ({\n index,\n path: winPath(plugin)\n }))\n }\n )\n });\n });\n\n api.addCoreExports(() => ({\n specifiers: ['plugin'],\n source: absoluteFilePath\n }));\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/generateFiles/fes/index.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/misc/route/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····join,·extname,·posix,·basename⏎` with `·join,·extname,·posix,·basename·`","line":2,"column":9,"nodeType":null,"messageId":"replace","endLine":4,"endColumn":1,"fix":{"range":[66,102],"text":" join, extname, posix, basename "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `b` with `(b)`","line":88,"column":17,"nodeType":null,"messageId":"replace","endLine":88,"endColumn":18,"fix":{"range":[2740,2741],"text":"(b)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `parentRoutePath,·fileName,·config` with `⏎················parentRoutePath,⏎················fileName,⏎················config⏎············`","line":96,"column":52,"nodeType":null,"messageId":"replace","endLine":96,"endColumn":85,"fix":{"range":[3105,3138],"text":"\n parentRoutePath,\n fileName,\n config\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·?·JSON.parse(routeMetaBlock.content)` with `⏎················?·JSON.parse(routeMetaBlock.content)⏎···············`","line":97,"column":54,"nodeType":null,"messageId":"replace","endLine":97,"endColumn":91,"fix":{"range":[3194,3231],"text":"\n ? JSON.parse(routeMetaBlock.content)\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `layoutRoute.children,·component,·nextParentRouteUrl,·config` with `⏎····················layoutRoute.children,⏎····················component,⏎····················nextParentRouteUrl,⏎····················config⏎················`","line":122,"column":27,"nodeType":null,"messageId":"replace","endLine":122,"endColumn":86,"fix":{"range":[4065,4124],"text":"\n layoutRoute.children,\n component,\n nextParentRouteUrl,\n config\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `sonPath.indexOf(':')·!==·-1·&&·sonPath.indexOf(':pathMatch(.*)')·===·-1` with `⏎················sonPath.indexOf(':')·!==·-1·&&⏎················sonPath.indexOf(':pathMatch(.*)')·===·-1⏎············`","line":151,"column":17,"nodeType":null,"messageId":"replace","endLine":151,"endColumn":88,"fix":{"range":[4808,4879],"text":"\n sonPath.indexOf(':') !== -1 &&\n sonPath.indexOf(':pathMatch(.*)') === -1\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `·||`","line":187,"column":49,"nodeType":null,"messageId":"insert","endLine":187,"endColumn":49,"fix":{"range":[5951,5951],"text":" ||"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `·||`","line":188,"column":12,"nodeType":null,"messageId":"delete","endLine":188,"endColumn":15,"fix":{"range":[5963,5966],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎····················`","line":220,"column":27,"nodeType":null,"messageId":"delete","endLine":221,"endColumn":21,"fix":{"range":[6952,6973],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `····`","line":222,"column":21,"nodeType":null,"messageId":"delete","endLine":222,"endColumn":25,"fix":{"range":[7003,7007],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `····`","line":223,"column":21,"nodeType":null,"messageId":"delete","endLine":223,"endColumn":25,"fix":{"range":[7048,7052],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `····`","line":224,"column":1,"nodeType":null,"messageId":"delete","endLine":224,"endColumn":5,"fix":{"range":[7071,7075],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `join(__dirname,·'template/routes.tpl'),·'utf-8'` with `⏎············join(__dirname,·'template/routes.tpl'),⏎············'utf-8'⏎········`","line":271,"column":40,"nodeType":null,"messageId":"replace","endLine":271,"endColumn":87,"fix":{"range":[8237,8284],"text":"\n join(__dirname, 'template/routes.tpl'),\n 'utf-8'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·historyType[api.config.router.mode]·||` with `⏎····················historyType[api.config.router.mode]·||⏎···················`","line":281,"column":32,"nodeType":null,"messageId":"replace","endLine":281,"endColumn":71,"fix":{"range":[8615,8654],"text":"\n historyType[api.config.router.mode] ||\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `join(__dirname,·'template/runtime.tpl'),·'utf-8'` with `⏎················join(__dirname,·'template/runtime.tpl'),⏎················'utf-8'⏎············`","line":287,"column":35,"nodeType":null,"messageId":"replace","endLine":287,"endColumn":83,"fix":{"range":[8805,8853],"text":"\n join(__dirname, 'template/runtime.tpl'),\n 'utf-8'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'getRoutes',·'getRouter',·'getHistory',·'destroyRouter'` with `⏎················'getRoutes',⏎················'getRouter',⏎················'getHistory',⏎················'destroyRouter'⏎············`","line":293,"column":26,"nodeType":null,"messageId":"replace","endLine":293,"endColumn":81,"fix":{"range":[8942,8997],"text":"\n 'getRoutes',\n 'getRouter',\n 'getHistory',\n 'destroyRouter'\n "}}],"errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":16,"fixableWarningCount":0,"source":"import { readdirSync, statSync, readFileSync } from 'fs';\nimport {\n join, extname, posix, basename\n} from 'path';\nimport { lodash } from '@fesjs/utils';\nimport { parse } from '@vue/compiler-sfc';\nimport { runtimePath } from '../../../utils/constants';\n\n// pages\n// ├── index.vue # 根路由页面 路径 /\n// ├── *.vue # 模糊匹配 路径 *\n// ├── a.vue # 路径 /a\n// ├── b\n// │ ├── index.vue # 路径 /b\n// │ ├── @id.vue # 动态路由 /b/:id\n// │ └── c.vue # 路径 /b/c\n// └── layout.vue # 根路由下所有page共用的外层\n\nconst isProcessFile = function (path) {\n const ext = extname(path);\n return statSync(path).isFile() && ['.vue'].includes(ext);\n};\n\nconst isProcessDirectory = function (path, item) {\n const component = join(path, item);\n return statSync(component).isDirectory() && !['components'].includes(item);\n};\n\nconst checkHasLayout = function (path) {\n const dirList = readdirSync(path);\n return dirList.some((item) => {\n if (!isProcessFile(join(path, item))) {\n return false;\n }\n const ext = extname(item);\n const fileName = basename(item, ext);\n return fileName === 'layout';\n });\n};\n\nconst getRouteName = function (parentRoutePath, fileName) {\n const routeName = posix.join(parentRoutePath, fileName);\n return routeName\n .slice(1)\n .replace(/\\//g, '_')\n .replace(/@/g, '_')\n .replace(/\\*/g, 'FUZZYMATCH');\n};\n\nconst getComponentPath = function (parentRoutePath, fileName, config) {\n const pagesName = config.singular ? 'page' : 'pages';\n return posix.join(`@/${pagesName}/`, parentRoutePath, fileName);\n};\n\nconst getRoutePath = function (parentRoutePath, fileName) {\n // /index.vue -> /\n if (fileName === 'index') {\n fileName = '';\n }\n // /@id.vue -> /:id\n if (fileName.startsWith('@')) {\n fileName = fileName.replace(/@/, ':');\n }\n // /*.vue -> :pathMatch(.*)\n if (fileName.includes('*')) {\n fileName = fileName.replace('*', ':pathMatch(.*)');\n }\n return posix.join(parentRoutePath, fileName);\n};\n\n// TODO 约定 layout 目录作为布局文件夹,\nconst genRoutes = function (parentRoutes, path, parentRoutePath, config) {\n const dirList = readdirSync(path);\n const hasLayout = checkHasLayout(path);\n const layoutRoute = {\n children: []\n };\n if (hasLayout) {\n layoutRoute.path = parentRoutePath;\n parentRoutes.push(layoutRoute);\n }\n dirList.forEach((item) => {\n // 文件或者目录的绝对路径\n const component = join(path, item);\n if (isProcessFile(component)) {\n const { descriptor } = parse(readFileSync(component, 'utf-8'));\n const routeMetaBlock = descriptor.customBlocks.find(\n b => b.type === 'config'\n );\n const ext = extname(item);\n const fileName = basename(item, ext);\n // 路由的path\n const routePath = getRoutePath(parentRoutePath, fileName);\n // 路由名称\n const routeName = getRouteName(parentRoutePath, fileName);\n const componentPath = getComponentPath(parentRoutePath, fileName, config);\n const routeMeta = routeMetaBlock?.content ? JSON.parse(routeMetaBlock.content) : {};\n const routeConfig = {\n path: routePath,\n component: componentPath,\n name: routeMeta.name || routeName,\n meta: routeMeta\n };\n if (hasLayout) {\n if (fileName === 'layout') {\n layoutRoute.component = componentPath;\n } else {\n layoutRoute.children.push(routeConfig);\n }\n } else {\n parentRoutes.push(routeConfig);\n }\n }\n });\n\n dirList.forEach((item) => {\n if (isProcessDirectory(path, item)) {\n // 文件或者目录的绝对路径\n const component = join(path, item);\n const nextParentRouteUrl = posix.join(parentRoutePath, item);\n if (hasLayout) {\n genRoutes(layoutRoute.children, component, nextParentRouteUrl, config);\n } else {\n genRoutes(parentRoutes, component, nextParentRouteUrl, config);\n }\n }\n });\n};\n\n/**\n * 智能路由\n * 1、路由的路径是多个“/”组成的字符串,使用“/”分割后得到不同的子项\n * 2、计算子项个数,用个数乘以4,计入得分\n * 3、判断子项是否是静态的,即不包含“:”、“*”等特殊字符串,若是计入3分。\n * 4、判断子项是否是动态的,即包含“:”特殊字符,若是计入2分。\n * 5、判断子项是否是模糊匹配,即包含“*”特殊字符,若是扣除1分。\n * 6、判断子项是否是根端,即只是“/”,若是计入1分。\n\n * @param {*} routes\n */\nconst rank = function (routes) {\n routes.forEach((item) => {\n const path = item.path;\n let arr = path.split('/');\n if (arr[0] === '') {\n arr = arr.slice(1);\n }\n let count = 0;\n arr.forEach((sonPath) => {\n count += 4;\n if (sonPath.indexOf(':') !== -1 && sonPath.indexOf(':pathMatch(.*)') === -1) {\n count += 2;\n } else if (sonPath.indexOf(':pathMatch(.*)') !== -1) {\n count -= 1;\n } else if (sonPath === '') {\n count += 1;\n } else {\n count += 3;\n }\n });\n item.count = count;\n if (item.children && item.children.length) {\n rank(item.children);\n }\n });\n routes.sort((a, b) => b.count - a.count);\n};\n\nconst getRoutes = function ({ config, absPagesPath }) {\n // 用户配置了routes则使用用户配置的\n const configRoutes = config.router.routes;\n if (configRoutes && configRoutes.length > 0) return configRoutes;\n\n const routes = [];\n genRoutes(routes, absPagesPath, '/', config);\n rank(routes);\n return routes;\n};\n\nconst getRoutesJSON = function ({ routes, config }) {\n // 因为要往 routes 里加无用的信息,所以必须 deep clone 一下,避免污染\n const clonedRoutes = lodash.cloneDeep(routes);\n\n function isFunctionComponent(component) {\n // eslint-disable-next-line\n return (\n /^\\((.+)?\\)(\\s+)?=>/.test(component)\n || /^function([^(]+)?\\(([^)]+)?\\)([^{]+)?{/.test(component)\n );\n }\n\n function replacer(key, value) {\n switch (key) {\n case 'component':\n if (isFunctionComponent(value)) return value;\n if (config.dynamicImport) {\n // TODO 针对目录进行 chunk 划分,import(/* webpackChunkName: \"group-user\" */ './UserDetails.vue')\n return `() => import('${value}')`;\n }\n return `require('${value}').default`;\n default:\n return value;\n }\n }\n\n return JSON.stringify(clonedRoutes, replacer, 2)\n .replace(\n /\"component\": (\"(.+?)\")/g,\n (global, m1, m2) => `\"component\": ${m2.replace(/\\^/g, '\"')}`\n )\n .replace(/\\\\r\\\\n/g, '\\r\\n')\n .replace(/\\\\n/g, '\\r\\n');\n};\n\nexport default function (api) {\n api.describe({\n key: 'router',\n config: {\n schema(joi) {\n return joi\n .object({\n routes: joi.array(),\n mode: joi.string()\n });\n },\n default: {\n mode: 'hash'\n }\n }\n });\n\n api.registerMethod({\n name: 'getRoutes',\n async fn() {\n return api.applyPlugins({\n key: 'modifyRoutes',\n type: api.ApplyPluginsType.modify,\n initialValue: getRoutes({\n config: api.config,\n absPagesPath: api.paths.absPagesPath\n })\n });\n }\n });\n\n api.registerMethod({\n name: 'getRoutesJSON',\n async fn() {\n const routes = await api.getRoutes();\n return getRoutesJSON({ routes, config: api.config });\n }\n });\n\n const {\n utils: { Mustache }\n } = api;\n\n const namespace = 'core/routes';\n\n const absCoreFilePath = join(namespace, 'routes.js');\n\n const absRuntimeFilePath = join(namespace, 'runtime.js');\n\n const historyType = {\n history: 'createWebHistory',\n hash: 'createWebHashHistory',\n memory: 'createMemoryHistory'\n };\n\n api.onGenerateFiles(async () => {\n const routesTpl = readFileSync(join(__dirname, 'template/routes.tpl'), 'utf-8');\n const routes = await api.getRoutesJSON();\n\n api.writeTmpFile({\n path: absCoreFilePath,\n content: Mustache.render(routesTpl, {\n runtimePath,\n routes,\n config: api.config,\n routerBase: api.config.base,\n CREATE_HISTORY: historyType[api.config.router.mode] || 'createWebHashHistory'\n })\n });\n\n api.writeTmpFile({\n path: absRuntimeFilePath,\n content: readFileSync(join(__dirname, 'template/runtime.tpl'), 'utf-8')\n });\n });\n\n api.addCoreExports(() => [\n {\n specifiers: ['getRoutes', 'getRouter', 'getHistory', 'destroyRouter'],\n source: absCoreFilePath\n }\n ]);\n\n api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/plugins/registerMethods.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·statSync,·readFileSync,·writeFileSync,` with `⏎····statSync,⏎····readFileSync,⏎····writeFileSync,⏎···`","line":4,"column":16,"nodeType":null,"messageId":"replace","endLine":4,"endColumn":55,"fix":{"range":[91,130],"text":"\n statSync,\n readFileSync,\n writeFileSync,\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎············path,⏎············content⏎·······` with `·path,·content`","line":39,"column":13,"nodeType":null,"messageId":"replace","endLine":42,"endColumn":8,"fix":{"range":[1019,1065],"text":" path, content"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `!existsSync(absPath)·||·readFileSync(absPath,·'utf-8')·!==·content` with `⏎················!existsSync(absPath)·||⏎················readFileSync(absPath,·'utf-8')·!==·content⏎············`","line":49,"column":17,"nodeType":null,"messageId":"replace","endLine":49,"endColumn":83,"fix":{"range":[1371,1437],"text":"\n !existsSync(absPath) ||\n readFileSync(absPath, 'utf-8') !== content\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎············namespace,·path,·ignore⏎·······` with `·namespace,·path,·ignore`","line":57,"column":13,"nodeType":null,"messageId":"replace","endLine":59,"endColumn":8,"fix":{"range":[1599,1643],"text":" namespace, path, ignore"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎················path,⏎················'api.copyTmpFiles()·should·has·param·path'⏎············` with `path,·'api.copyTmpFiles()·should·has·param·path'`","line":64,"column":20,"nodeType":null,"messageId":"replace","endLine":67,"endColumn":13,"fix":{"range":[1837,1931],"text":"path, 'api.copyTmpFiles() should has param path'"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎················namespace,⏎················'api.copyTmpFiles()·should·has·param·namespace'⏎············` with `namespace,·'api.copyTmpFiles()·should·has·param·namespace'`","line":68,"column":20,"nodeType":null,"messageId":"replace","endLine":71,"endColumn":13,"fix":{"range":[1953,2057],"text":"namespace, 'api.copyTmpFiles() should has param namespace'"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `!ignore.some(pattern·=>·new·RegExp(pattern).test(file))` with `⏎························!ignore.some((pattern)·=>⏎····························new·RegExp(pattern).test(file)⏎························)⏎····················`","line":85,"column":25,"nodeType":null,"messageId":"replace","endLine":85,"endColumn":80,"fix":{"range":[2669,2724],"text":"\n !ignore.some((pattern) =>\n new RegExp(pattern).test(file)\n )\n "}}],"errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":7,"fixableWarningCount":0,"source":"import assert from 'assert';\nimport { dirname, join } from 'path';\nimport {\n existsSync, statSync, readFileSync, writeFileSync, copyFileSync\n} from 'fs';\n\nexport default function (api) {\n [\n 'onExit',\n 'onGenerateFiles',\n 'addPluginExports',\n 'addCoreExports',\n 'addRuntimePluginKey',\n 'addRuntimePlugin',\n 'addDevScripts',\n 'addEntryImportsAhead',\n 'addEntryImports',\n 'addEntryCodeAhead',\n 'addEntryCode',\n 'addBeforeMiddlewares',\n 'addHTMLHeadScripts',\n 'addMiddlewares',\n 'modifyRoutes',\n 'modifyBundler',\n 'modifyBundleImplementor',\n 'modifyBundleConfigOpts',\n 'modifyBundleConfig',\n 'modifyBabelOpts',\n 'modifyBabelPresetOpts',\n 'chainWebpack',\n 'addTmpGenerateWatcherPaths',\n 'modifyPublicPathStr'\n ].forEach((name) => {\n api.registerMethod({ name });\n });\n\n api.registerMethod({\n name: 'writeTmpFile',\n fn({\n path,\n content\n }) {\n assert(\n api.stage >= api.ServiceStage.pluginReady,\n 'api.writeTmpFile() should not execute in register stage.'\n );\n const absPath = join(api.paths.absTmpPath, path);\n api.utils.mkdirp.sync(dirname(absPath));\n if (!existsSync(absPath) || readFileSync(absPath, 'utf-8') !== content) {\n writeFileSync(absPath, content, 'utf-8');\n }\n }\n });\n\n api.registerMethod({\n name: 'copyTmpFiles',\n fn({\n namespace, path, ignore\n }) {\n assert(\n api.stage >= api.ServiceStage.pluginReady,\n 'api.copyTmpFiles() should not execute in register stage.'\n );\n assert(\n path,\n 'api.copyTmpFiles() should has param path'\n );\n assert(\n namespace,\n 'api.copyTmpFiles() should has param namespace'\n );\n const files = api.utils.glob.sync('**/*', {\n cwd: path\n });\n const base = join(api.paths.absTmpPath, namespace);\n files.forEach((file) => {\n const source = join(path, file);\n const target = join(base, file);\n if (!existsSync(dirname(target))) {\n api.utils.mkdirp.sync(dirname(target));\n }\n if (statSync(source).isDirectory()) {\n api.utils.mkdirp.sync(target);\n } else if (Array.isArray(ignore)) {\n if (!ignore.some(pattern => new RegExp(pattern).test(file))) {\n copyFileSync(source, target);\n }\n } else {\n copyFileSync(source, target);\n }\n });\n }\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/utils/constants.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/utils/generateExports.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-preset-built-in/src/utils/generateFiles.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎············.uniq(watcherPaths.map(p·=>·winPath(p)))⏎············` with `.uniq(watcherPaths.map((p)·=>·winPath(p)))`","line":52,"column":15,"nodeType":null,"messageId":"replace","endLine":54,"endColumn":13,"fix":{"range":[1384,1450],"text":".uniq(watcherPaths.map((p) => winPath(p)))"}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `····`","line":55,"column":1,"nodeType":null,"messageId":"delete","endLine":55,"endColumn":5,"fix":{"range":[1468,1472],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `····`","line":56,"column":1,"nodeType":null,"messageId":"delete","endLine":56,"endColumn":5,"fix":{"range":[1502,1506],"text":""}}],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":"import { chokidar, lodash, winPath } from '@fesjs/utils';\nimport { join } from 'path';\n\nexport default async ({ api, watch }) => {\n const { paths } = api;\n\n async function generate() {\n api.logger.debug('generate files');\n await api.applyPlugins({\n key: 'onGenerateFiles',\n type: api.ApplyPluginsType.event\n });\n }\n\n let watchers = [];\n\n await generate();\n\n function unwatch() {\n watchers.forEach((watcher) => {\n watcher.close();\n });\n watchers = [];\n }\n\n function createWatcher(path) {\n const watcher = chokidar.watch(path, {\n // ignore .dotfiles and _mock.js\n ignored: /(^|[/\\\\])(_mock.js$|\\..)/,\n ignoreInitial: true\n });\n watcher.on(\n 'all',\n lodash.throttle(async () => {\n await generate();\n }, 100)\n );\n watchers.push(watcher);\n }\n\n if (watch) {\n const watcherPaths = await api.applyPlugins({\n key: 'addTmpGenerateWatcherPaths',\n type: api.ApplyPluginsType.add,\n initialValue: [\n paths.absPagesPath,\n // 貌似没用到\n // join(paths.absSrcPath, api.config?.singular ? 'layout' : 'layouts'),\n join(paths.absSrcPath, 'app.js')\n ]\n });\n lodash\n .uniq(watcherPaths.map(p => winPath(p)))\n .forEach((p) => {\n createWatcher(p);\n });\n }\n\n return unwatch;\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-runtime/build.config.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nmodule.exports = {\n target: 'browser'\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-runtime/src/index.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-runtime/src/plugin/index.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `!Object.keys(this.shared).includes(key),·'share·failed,·key·repeat'` with `⏎············!Object.keys(this.shared).includes(key),⏎············'share·failed,·key·repeat'⏎········`","line":35,"column":16,"nodeType":null,"messageId":"replace","endLine":35,"endColumn":83,"fix":{"range":[765,832],"text":"\n !Object.keys(this.shared).includes(key),\n 'share failed, key repeat'\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎········key,⏎········type,⏎········initialValue,⏎········args,⏎········async⏎···` with `·key,·type,·initialValue,·args,·async`","line":77,"column":19,"nodeType":null,"messageId":"replace","endLine":83,"endColumn":4,"fix":{"range":[2147,2228],"text":" key, type, initialValue, args, async"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `typeof·hook·===·'function'·||·typeof·hook·===·'object'·||` with `⏎································typeof·hook·===·'function'·||⏎····································typeof·hook·===·'object'·||⏎···································`","line":98,"column":36,"nodeType":null,"messageId":"replace","endLine":98,"endColumn":93,"fix":{"range":[2676,2733],"text":"\n typeof hook === 'function' ||\n typeof hook === 'object' ||\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎····························`","line":99,"column":123,"nodeType":null,"messageId":"insert","endLine":99,"endColumn":123,"fix":{"range":[2877,2877],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":131,"column":1,"nodeType":null,"messageId":"delete","endLine":132,"endColumn":1,"fix":{"range":[4270,4271],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···················`","line":142,"column":29,"nodeType":null,"messageId":"insert","endLine":142,"endColumn":29,"fix":{"range":[4678,4678],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":143,"column":1,"nodeType":null,"messageId":"insert","endLine":143,"endColumn":1,"fix":{"range":[4690,4690],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":144,"column":21,"nodeType":null,"messageId":"insert","endLine":144,"endColumn":21,"fix":{"range":[4763,4763],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":145,"column":1,"nodeType":null,"messageId":"insert","endLine":145,"endColumn":1,"fix":{"range":[4768,4768],"text":" "}}],"errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":"/**\n * @copy 该文件代码大部分出自 umi,有需要请参考:\n * https://github.com/umijs/umi/blob/master/packages/runtime/src/Plugin/Plugin.ts\n */\n\nimport { assert } from '../utils';\n\nfunction _compose({ fns, args }) {\n if (fns.length === 1) {\n return fns[0];\n }\n const last = fns.pop();\n return fns.reduce((a, b) => () => b(a, args), last);\n}\n\nfunction isPromiseLike(obj) {\n return !!obj && typeof obj === 'object' && typeof obj.then === 'function';\n}\n\nexport const ApplyPluginsType = {\n compose: 'compose',\n event: 'event',\n modify: 'modify'\n};\n\nexport default class Plugin {\n constructor(opts) {\n this.validKeys = opts?.validKeys || [];\n this.hooks = {};\n // 共享\n this.shared = {};\n }\n\n share(key, obj) {\n assert(!Object.keys(this.shared).includes(key), 'share failed, key repeat');\n this.shared[key] = obj;\n }\n\n getShared(key) {\n return this.shared[key];\n }\n\n register(plugin) {\n assert(!!plugin.apply, 'register failed, plugin.apply must supplied');\n assert(!!plugin.path, 'register failed, plugin.path must supplied');\n Object.keys(plugin.apply).forEach((key) => {\n assert(\n this.validKeys.indexOf(key) > -1,\n `register failed, invalid key ${key} from plugin ${plugin.path}.`\n );\n if (!this.hooks[key]) this.hooks[key] = [];\n this.hooks[key] = this.hooks[key].concat(plugin.apply[key]);\n });\n }\n\n getHooks(keyWithDot) {\n const [key, ...memberKeys] = keyWithDot.split('.');\n let hooks = this.hooks[key] || [];\n if (memberKeys.length) {\n hooks = hooks\n .map((hook) => {\n try {\n let ret = hook;\n for (const memberKey of memberKeys) {\n ret = ret[memberKey];\n }\n return ret;\n } catch (e) {\n return null;\n }\n })\n .filter(Boolean);\n }\n return hooks;\n }\n\n applyPlugins({\n key,\n type,\n initialValue,\n args,\n async\n }) {\n const hooks = this.getHooks(key) || [];\n\n if (args) {\n assert(\n typeof args === 'object',\n 'applyPlugins failed, args must be plain object.'\n );\n }\n\n switch (type) {\n case ApplyPluginsType.modify:\n if (async) {\n return hooks.reduce(\n async (memo, hook) => {\n assert(typeof hook === 'function' || typeof hook === 'object' || isPromiseLike(hook),\n `applyPlugins failed, all hooks for key ${key} must be function, plain object or Promise.`);\n if (isPromiseLike(memo)) {\n memo = await memo;\n }\n if (typeof hook === 'function') {\n const ret = hook(memo, args);\n if (isPromiseLike(ret)) {\n return ret;\n }\n return ret;\n }\n if (isPromiseLike(hook)) {\n hook = await hook;\n }\n return { ...memo, ...hook };\n },\n isPromiseLike(initialValue)\n ? initialValue\n : Promise.resolve(initialValue)\n );\n }\n return hooks.reduce((memo, hook) => {\n assert(\n typeof hook === 'function' || typeof hook === 'object',\n `applyPlugins failed, all hooks for key ${key} must be function or plain object.`\n );\n if (typeof hook === 'function') {\n return hook(memo, args);\n }\n return { ...memo, ...hook };\n }, initialValue);\n\n\n case ApplyPluginsType.event:\n return hooks.forEach((hook) => {\n assert(\n typeof hook === 'function',\n `applyPlugins failed, all hooks for key ${key} must be function.`\n );\n hook(args);\n });\n\n case ApplyPluginsType.compose:\n return () => _compose({\n fns: hooks.concat(initialValue),\n args\n })();\n default:\n return null;\n }\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-runtime/src/utils/assert.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-runtime/src/utils/index.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/.eslintrc.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/.fes.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/.fes.local.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/.fes.prod.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/mock.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":6,"column":18,"nodeType":null,"messageId":"insert","endLine":6,"endColumn":18,"fix":{"range":[187,187],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":7,"column":1,"nodeType":null,"messageId":"insert","endLine":7,"endColumn":1,"fix":{"range":[204,204],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":8,"column":13,"nodeType":null,"messageId":"insert","endLine":8,"endColumn":13,"fix":{"range":[239,239],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":9,"column":1,"nodeType":null,"messageId":"insert","endLine":9,"endColumn":1,"fix":{"range":[248,248],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":10,"column":1,"nodeType":null,"messageId":"insert","endLine":10,"endColumn":1,"fix":{"range":[270,270],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":11,"column":13,"nodeType":null,"messageId":"insert","endLine":11,"endColumn":13,"fix":{"range":[343,343],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········})` with `············})⏎········`","line":12,"column":1,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":11,"fix":{"range":[345,355],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":15,"column":18,"nodeType":null,"messageId":"insert","endLine":15,"endColumn":18,"fix":{"range":[431,431],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":16,"column":1,"nodeType":null,"messageId":"replace","endLine":16,"endColumn":13,"fix":{"range":[448,460],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":17,"column":13,"nodeType":null,"messageId":"insert","endLine":17,"endColumn":13,"fix":{"range":[483,483],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":18,"column":1,"nodeType":null,"messageId":"replace","endLine":18,"endColumn":13,"fix":{"range":[492,504],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":19,"column":1,"nodeType":null,"messageId":"insert","endLine":19,"endColumn":1,"fix":{"range":[514,514],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":20,"column":13,"nodeType":null,"messageId":"insert","endLine":20,"endColumn":13,"fix":{"range":[573,573],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········})` with `············})⏎········`","line":21,"column":1,"nodeType":null,"messageId":"replace","endLine":21,"endColumn":11,"fix":{"range":[575,585],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎············`","line":26,"column":18,"nodeType":null,"messageId":"insert","endLine":26,"endColumn":18,"fix":{"range":[699,699],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":27,"column":13,"nodeType":null,"messageId":"insert","endLine":27,"endColumn":13,"fix":{"range":[728,728],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":28,"column":1,"nodeType":null,"messageId":"replace","endLine":28,"endColumn":13,"fix":{"range":[739,751],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":29,"column":1,"nodeType":null,"messageId":"insert","endLine":29,"endColumn":1,"fix":{"range":[760,760],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `····················`","line":30,"column":1,"nodeType":null,"messageId":"replace","endLine":30,"endColumn":17,"fix":{"range":[782,798],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":31,"column":13,"nodeType":null,"messageId":"insert","endLine":31,"endColumn":13,"fix":{"range":[850,850],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········})` with `············})⏎········`","line":32,"column":1,"nodeType":null,"messageId":"replace","endLine":32,"endColumn":11,"fix":{"range":[852,862],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·msg:·\"不合法的请求:Missing·cookie·'wb_app_id'·for·method·parameter·of·type·String\",·transactionTime:·'20170309171146',` with `⏎············msg:·\"不合法的请求:Missing·cookie·'wb_app_id'·for·method·parameter·of·type·String\",⏎············transactionTime:·'20170309171146',⏎···········`","line":43,"column":28,"nodeType":null,"messageId":"replace","endLine":43,"endColumn":141,"fix":{"range":[1047,1160],"text":"\n msg: \"不合法的请求:Missing cookie 'wb_app_id' for method parameter of type String\",\n transactionTime: '20170309171146',\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'/random',` with `⏎········'/random',⏎·······`","line":51,"column":13,"nodeType":null,"messageId":"replace","endLine":51,"endColumn":23,"fix":{"range":[1309,1319],"text":"\n '/random',\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":52,"column":1,"nodeType":null,"messageId":"insert","endLine":52,"endColumn":1,"fix":{"range":[1334,1334],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `})` with `····})⏎····`","line":53,"column":5,"nodeType":null,"messageId":"replace","endLine":53,"endColumn":7,"fix":{"range":[1365,1367],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·value:·'kwan',·maxAge:·900000,` with `⏎················value:·'kwan',⏎················maxAge:·900000,⏎···············`","line":84,"column":32,"nodeType":null,"messageId":"replace","endLine":84,"endColumn":63,"fix":{"range":[2164,2195],"text":"\n value: 'kwan',\n maxAge: 900000,\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎············currentPage,·pageSize,·isAudited⏎·······` with `·currentPage,·pageSize,·isAudited`","line":91,"column":16,"nodeType":null,"messageId":"replace","endLine":93,"endColumn":8,"fix":{"range":[2320,2373],"text":" currentPage, pageSize, isAudited"}}],"errorCount":27,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":27,"fixableWarningCount":0,"source":"export default function ({ cgiMock, mockjs, utils }) {\n const { Random } = mockjs;\n\n // 测试 proxy 与 mock 用例集合\n cgiMock('/movie/in_theaters_mock', (req, res) => {\n res.send(JSON.stringify({\n code: '0',\n msg: '',\n result: {\n text: 'movie: movie/in_theaters_mock ~~~~~'\n }\n }));\n });\n cgiMock('/movie/test_mock', (req, res) => {\n res.send(JSON.stringify({\n code: '0',\n msg: '',\n result: {\n text: 'mock: movie/test_mock'\n }\n }));\n });\n\n // 测试用例: mock.js change,重现请求,需要能拉最新的数据\n cgiMock('/watchtest', (req, res) => {\n res.send(JSON.stringify({\n code: '0',\n msg: '',\n result: {\n text: '通过 register 测试 mock watch: 初始状态'\n }\n }));\n });\n\n // 返回一个数字\n // cgiMock('/number', 666);\n cgiMock('/number', 999);\n\n // 返回一个json\n cgiMock({\n url: '/json',\n result: {\n code: '400101', msg: \"不合法的请求:Missing cookie 'wb_app_id' for method parameter of type String\", transactionTime: '20170309171146', success: false\n }\n });\n\n // 利用 mock.js 产生随机文本\n cgiMock('/text', Random.cparagraph());\n\n // 返回一个字符串 利用 mock.js 产生随机字符\n cgiMock('/random', mockjs.mock({\n 'string|1-10': '★'\n }));\n\n // 正则匹配url, 返回一个字符串\n cgiMock(/\\/abc|\\/xyz/, 'regexp test!');\n\n // option.result 参数如果是一个函数, 可以实现自定义返回内容, 接收的参数是是经过 express 封装的 req 和 res 对象.\n cgiMock(/\\/function$/, (req, res) => {\n res.send('function test');\n });\n\n // 返回文本 readFileSync\n cgiMock('/file', utils.file('./package.json'));\n\n // 更复杂的规则配置\n cgiMock({\n url: /\\/who/,\n method: 'GET',\n result(req, res) {\n if (req.query.name === 'kwan') {\n res.json({ kwan: '孤独患者' });\n } else {\n res.send('Nooooooooooo');\n }\n },\n headers: {\n 'Content-Type': 'text/plain',\n 'Content-Length': '123',\n ETag: '12345'\n },\n cookies: [\n {\n name: 'myname', value: 'kwan', maxAge: 900000, httpOnly: true\n }\n ]\n });\n\n // 携带参数的请求\n cgiMock('/v2/audit/list', (req, res) => {\n const {\n currentPage, pageSize, isAudited\n } = req.body;\n res.send({\n code: '0',\n msg: '',\n data: {\n currentPage,\n pageSize,\n totalPage: 2,\n totalCount: 12,\n pageData: Array.from({ length: pageSize }, () => ({\n title: Random.title(),\n authorName: Random.cname(),\n authorId: Random.name(),\n createTime: Date.now(),\n updateTime: Date.now(),\n readCount: Random.integer(60, 1000),\n favoriteCount: Random.integer(1, 50),\n postId: '12323',\n serviceTag: '业务类型',\n productTag: '产品类型',\n requestTag: '需求类型',\n handleTag: '已采纳',\n postType: 'voice',\n postStatus: isAudited ? 'pass' : 'auditing',\n auditStatus: 'audit1'\n }))\n }\n });\n });\n\n // multipart/form-data 类型\n cgiMock('/v2/upload', (req, res) => {\n res.send({\n code: '0',\n msg: '文件上传成功'\n });\n });\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/coreExports.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/plugin.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/pluginExports.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/pluginRegister.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/routes/routes.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/core/routes/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/fes.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-access/core.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-access/createComponent.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-access/createDirective.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-access/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-enums/core.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/helpers/pluginAccess.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/helpers/pluginLocale.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/helpers/svg.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/icons.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/index.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/403.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/404.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/BaseLayout.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/Menu.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/MenuIcon.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-layout/views/MultiTabProvider.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-locale/core.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-locale/langUConfigMap.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-locale/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-locale/views/SelectLang.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-model/core.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-model/models/initialState.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-model/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-monaco-editor/core.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-monaco-editor/editor.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-monaco-editor/loader.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-monaco-editor/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-monaco-editor/theme/default.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/cacheControl.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/genRequestKey.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/helpers.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/paramsProcess.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/preventRepeatReq.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/request.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/resDataAdaptor.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/resErrorProcess.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/scheduler.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/setDataField.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-request/throttle.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-vuex/core.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/.fes/plugin-vuex/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/app.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":3,"endColumn":1,"fix":{"range":[0,2],"text":""}},{"ruleId":"no-unused-vars","severity":2,"message":"'PageLoading' is defined but never used.","line":4,"column":8,"nodeType":"Identifier","messageId":"unusedVar","endLine":4,"endColumn":19},{"ruleId":"import/extensions","severity":2,"message":"Missing file extension for \"@/components/PageLoading\"","line":4,"column":25,"nodeType":"Literal","endLine":4,"endColumn":51},{"ruleId":"no-unused-vars","severity":2,"message":"'UserCenter' is defined but never used.","line":5,"column":8,"nodeType":"Identifier","messageId":"unusedVar","endLine":5,"endColumn":18},{"ruleId":"import/extensions","severity":2,"message":"Missing file extension for \"@/components/UserCenter\"","line":5,"column":24,"nodeType":"Literal","endLine":5,"endColumn":49}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\n\nimport { access as accessApi, store, GETTER_TYPES } from '@fesjs/fes';\nimport PageLoading from '@/components/PageLoading';\nimport UserCenter from '@/components/UserCenter';\n\nconsole.log(store.getters[GETTER_TYPES.user.address]);\nconsole.log(process.env.FES_APP_PUBLISH_ERROR_PAGE);\n\nexport const beforeRender = {\n loading: ,\n action() {\n const { setRole } = accessApi;\n return new Promise((resolve) => {\n setTimeout(() => {\n setRole('menuTest');\n resolve({\n userName: 'harrywan'\n });\n }, 1000);\n });\n }\n};\n\nexport const layout = {\n customHeader: \n // unAccessHandler({ next }) {\n // next(false);\n // },\n // noFoundHandler({ next }) {\n // next(false);\n // }\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/common/service.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/components/PageLoading.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/components/UserCenter.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/locales/en-US.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎·······`","line":11,"column":35,"nodeType":null,"messageId":"insert","endLine":11,"endColumn":35,"fix":{"range":[367,367],"text":"\n "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"\nexport default {\n test: 'test',\n home: 'home',\n 'navBar.lang': 'Languages',\n 'layout.user.link.help': 'Help',\n 'layout.user.link.privacy': 'Privacy',\n 'layout.user.link.terms': 'Terms',\n 'app.preview.down.block': 'Download this page to your local project',\n 'app.welcome.link.fetch-blocks': 'Get all block',\n 'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development'\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/locales/id-ID.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":10,"column":1,"nodeType":null,"messageId":"insert","endLine":10,"endColumn":1,"fix":{"range":[343,343],"text":" "}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"\nexport default {\n 'navbar.lang': 'Bahasa',\n 'layout.user.link.help': 'Bantuan',\n 'layout.user.link.privacy': 'Privasi',\n 'layout.user.link.terms': 'Ketentuan',\n 'app.preview.down.block': 'Unduh halaman ini dalam projek lokal anda',\n 'app.welcome.link.fetch-blocks': 'Dapatkan semua blok',\n 'app.welcome.link.block-list':\n 'Buat standar dengan cepat, halaman-halaman berdasarkan pengembangan `block`'\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/locales/pt-BR.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default {\n 'navBar.lang': 'Idiomas',\n 'layout.user.link.help': 'ajuda',\n 'layout.user.link.privacy': 'política de privacidade',\n 'layout.user.link.terms': 'termos de serviços',\n 'app.preview.down.block': 'Download this page to your local project'\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/locales/zh-CN.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default {\n test: '测试',\n home: '首页',\n 'navBar.lang': '语言',\n 'layout.user.link.help': '帮助',\n 'layout.user.link.privacy': '隐私',\n 'layout.user.link.terms': '条款',\n 'app.preview.down.block': '下载此页面到本地项目',\n 'app.welcome.link.fetch-blocks': '获取全部区块',\n 'app.welcome.link.block-list': '基于 block 开发,快速构建标准页面'\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/locales/zh-TW.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default {\n 'navBar.lang': '語言',\n 'layout.user.link.help': '幫助',\n 'layout.user.link.privacy': '隱私',\n 'layout.user.link.terms': '條款',\n 'app.preview.down.block': '下載此頁面到本地項目'\n};\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/models/user.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/pages/editor.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"name\": \"editor\",\n \"title\": \"monaco-editor\"\n}\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/pages/index.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"name\": \"index\",\n \"title\": \"home\"\n}\n\n\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/pages/onepiece.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"name\": \"onepiece\",\n \"title\": \"onepiece\"\n}\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/pages/store.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"name\": \"store\",\n \"title\": \"vuex测试\"\n}\n\n\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/pages/test.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"name\": \"test\",\n \"title\": \"侧事故\"\n}\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/stores/counter.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/stores/foo/bar.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/stores/plugin-loger.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/stores/user.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template/src/utils/sum.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/.fes.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/.fes.prod.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/coreExports.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/plugin.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/pluginExports.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/pluginRegister.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/routes/routes.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/core/routes/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/fes.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-icon/Icon/Icon.vue","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-icon/Icon/index.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-icon/icons/hello.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-icon/icons/smile.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-icon/icons.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-icon/runtime.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/cacheControl.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/genRequestKey.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/helpers.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/paramsProcess.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/preventRepeatReq.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/request.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/resDataAdaptor.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/resErrorProcess.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/scheduler.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/setDataField.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/.fes/plugin-request/throttle.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/app.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/common/service.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/common/utils.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":7,"column":1,"nodeType":null,"messageId":"delete","endLine":8,"endColumn":1,"fix":{"range":[56,57],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎·······`","line":9,"column":27,"nodeType":null,"messageId":"insert","endLine":9,"endColumn":27,"fix":{"range":[127,127],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":12,"column":29,"nodeType":null,"messageId":"insert","endLine":12,"endColumn":29,"fix":{"range":[262,262],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":21,"column":1,"nodeType":null,"messageId":"delete","endLine":22,"endColumn":1,"fix":{"range":[533,534],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `/MicroMessenger\\/([\\d.]+)/i` with `⏎········/MicroMessenger\\/([\\d.]+)/i⏎····`","line":23,"column":55,"nodeType":null,"messageId":"replace","endLine":23,"endColumn":82,"fix":{"range":[623,650],"text":"\n /MicroMessenger\\/([\\d.]+)/i\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `(navigator.appVersion)` with `navigator.appVersion`","line":26,"column":21,"nodeType":null,"messageId":"replace","endLine":26,"endColumn":43,"fix":{"range":[739,761],"text":"navigator.appVersion"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `0,·Math.max(document.body.clientHeight,·document.documentElement.clientHeight)` with `⏎············0,⏎············Math.max(⏎················document.body.clientHeight,⏎················document.documentElement.clientHeight⏎············)⏎········`","line":30,"column":25,"nodeType":null,"messageId":"replace","endLine":30,"endColumn":103,"fix":{"range":[939,1017],"text":"\n 0,\n Math.max(\n document.body.clientHeight,\n document.documentElement.clientHeight\n )\n "}}],"errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":7,"fixableWarningCount":0,"source":"// TODO\n// 时间格式化\n// js 数字精度计算\n// 手机号、身份证号 等的校验\n// 数字分割\n\n\nexport function resetContainerHeight(dom) {\n const originalHeight = document.body.clientHeight || document.documentElement.clientHeight;\n\n window.onresize = function () {\n const resizeHeight = document.documentElement.clientHeight || document.body.clientHeight;\n if (resizeHeight < originalHeight) {\n // 恢复内容区域高度\n const container = document.querySelector(dom);\n container.style.height = originalHeight;\n }\n };\n}\n\n\nexport function resetInputBlur() {\n const isWechat = window.navigator.userAgent.match(/MicroMessenger\\/([\\d.]+)/i);\n if (!isWechat) return;\n const wechatVersion = isWechat[1];\n const version = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n\n // 如果设备类型为iOS 12+ 和wechat 6.7.4+,恢复成原来的视口\n if (+wechatVersion.replace(/\\./g, '') >= 674 && +version[1] >= 12) {\n window.scrollTo(0, Math.max(document.body.clientHeight, document.documentElement.clientHeight));\n }\n}\n\nexport function getQueryString(name) {\n const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`, 'i');\n const r = window.location.search.substr(1).match(reg);\n if (r != null) {\n return decodeURIComponent(r[2]);\n }\n return null;\n}\n\nexport function simpleRequest(options) {\n const xhr = new XMLHttpRequest();\n xhr.timeout = 3000;\n if (options.type === 'GET') {\n xhr.open(options.type, options.url, options.async || true);\n xhr.send(null);\n } else if (options.type === 'POST') {\n xhr.open(options.type, options.url, options.async || true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.send(JSON.stringify(options.data || {}));\n }\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n options.successed(xhr.responseText);\n } else {\n options.failed && options.failed(xhr);\n }\n }\n };\n xhr.ontimeout = function () {\n options.failed && options.failed(xhr);\n };\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/components/helloTS.ts","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/components/helloTSX.tsx","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `defineComponent` with `·defineComponent·`","line":1,"column":9,"nodeType":null,"messageId":"replace","endLine":1,"endColumn":24,"fix":{"range":[8,23],"text":" defineComponent "}},{"ruleId":"arrow-body-style","severity":2,"message":"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.","line":5,"column":22,"nodeType":"ArrowFunctionExpression","messageId":"unexpectedSingleBlock","endLine":7,"endColumn":10,"fix":{"range":[106,148],"text":"'hello tsx'"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `;`","line":6,"column":31,"nodeType":null,"messageId":"insert","endLine":6,"endColumn":31,"fix":{"range":[138,138],"text":";"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `;`","line":7,"column":10,"nodeType":null,"messageId":"insert","endLine":7,"endColumn":10,"fix":{"range":[148,148],"text":";"}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `;⏎`","line":9,"column":3,"nodeType":null,"messageId":"insert","endLine":9,"endColumn":3,"fix":{"range":[157,157],"text":";\n"}}],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":"import {defineComponent} from 'vue';\n\nexport default defineComponent({\n setup() {\n return () => {\n return 'hello tsx'\n }\n }\n})","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/components/helloWorld.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/models/user.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/pages/index.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"title\": \"首页\",\n \"name\": \"testIndex\",\n \"layout\": \"false\"\n}\n\n\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-template-h5/src/pages/onepiece.vue","messages":[],"errorCount":0,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n\n{\n \"title\": \"onepiece\",\n \"layout\": \"true\"\n}\n\n\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/Generator.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `⏎····copyFileSync,·readFileSync,·statSync,·writeFileSync⏎` with `·copyFileSync,·readFileSync,·statSync,·writeFileSync·`","line":1,"column":9,"nodeType":null,"messageId":"replace","endLine":3,"endColumn":1,"fix":{"range":[8,65],"text":" copyFileSync, readFileSync, statSync, writeFileSync "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":12,"column":3,"nodeType":null,"messageId":"insert","endLine":12,"endColumn":3,"fix":{"range":[262,262],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··` with `····`","line":14,"column":1,"nodeType":null,"messageId":"replace","endLine":14,"endColumn":3,"fix":{"range":[268,270],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":16,"column":1,"nodeType":null,"messageId":"insert","endLine":16,"endColumn":1,"fix":{"range":[277,277],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":17,"column":1,"nodeType":null,"messageId":"insert","endLine":17,"endColumn":1,"fix":{"range":[308,308],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":18,"column":7,"nodeType":null,"messageId":"insert","endLine":18,"endColumn":7,"fix":{"range":[336,336],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":19,"column":1,"nodeType":null,"messageId":"insert","endLine":19,"endColumn":1,"fix":{"range":[354,354],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":21,"column":3,"nodeType":null,"messageId":"insert","endLine":21,"endColumn":3,"fix":{"range":[361,361],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `······` with `········`","line":22,"column":1,"nodeType":null,"messageId":"replace","endLine":22,"endColumn":7,"fix":{"range":[375,381],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":23,"column":3,"nodeType":null,"messageId":"insert","endLine":23,"endColumn":3,"fix":{"range":[405,405],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··` with `····`","line":25,"column":1,"nodeType":null,"messageId":"replace","endLine":25,"endColumn":3,"fix":{"range":[408,410],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":28,"column":3,"nodeType":null,"messageId":"insert","endLine":28,"endColumn":3,"fix":{"range":[462,462],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":29,"column":1,"nodeType":null,"messageId":"insert","endLine":29,"endColumn":1,"fix":{"range":[478,478],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":30,"column":7,"nodeType":null,"messageId":"insert","endLine":30,"endColumn":7,"fix":{"range":[544,544],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `······` with `········`","line":31,"column":1,"nodeType":null,"messageId":"replace","endLine":31,"endColumn":7,"fix":{"range":[596,602],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `console.log(`${chalk.green('Write:')}·${relative(this.cwd,·opts.target)}`` with `··console.log(⏎············`${chalk.green('Write:')}·${relative(this.cwd,·opts.target)}`⏎········`","line":32,"column":7,"nodeType":null,"messageId":"replace","endLine":32,"endColumn":80,"fix":{"range":[643,716],"text":" console.log(\n `${chalk.green('Write:')} ${relative(this.cwd, opts.target)}`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":33,"column":1,"nodeType":null,"messageId":"insert","endLine":33,"endColumn":1,"fix":{"range":[719,719],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":34,"column":3,"nodeType":null,"messageId":"insert","endLine":34,"endColumn":3,"fix":{"range":[773,773],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":36,"column":1,"nodeType":null,"messageId":"insert","endLine":36,"endColumn":1,"fix":{"range":[776,776],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":37,"column":1,"nodeType":null,"messageId":"insert","endLine":37,"endColumn":1,"fix":{"range":[800,800],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··········` with `············`","line":38,"column":1,"nodeType":null,"messageId":"replace","endLine":38,"endColumn":11,"fix":{"range":[840,850],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":39,"column":11,"nodeType":null,"messageId":"insert","endLine":39,"endColumn":11,"fix":{"range":[876,876],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··········` with `············`","line":40,"column":1,"nodeType":null,"messageId":"replace","endLine":40,"endColumn":11,"fix":{"range":[887,897],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":41,"column":1,"nodeType":null,"messageId":"insert","endLine":41,"endColumn":1,"fix":{"range":[928,928],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":42,"column":7,"nodeType":null,"messageId":"insert","endLine":42,"endColumn":7,"fix":{"range":[944,944],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":43,"column":1,"nodeType":null,"messageId":"insert","endLine":43,"endColumn":1,"fix":{"range":[970,970],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":44,"column":11,"nodeType":null,"messageId":"insert","endLine":44,"endColumn":11,"fix":{"range":[1029,1029],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··········` with `············`","line":45,"column":1,"nodeType":null,"messageId":"replace","endLine":45,"endColumn":11,"fix":{"range":[1074,1084],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":46,"column":15,"nodeType":null,"messageId":"insert","endLine":46,"endColumn":15,"fix":{"range":[1127,1127],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··················` with `····················`","line":47,"column":1,"nodeType":null,"messageId":"replace","endLine":47,"endColumn":19,"fix":{"range":[1142,1160],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":48,"column":1,"nodeType":null,"messageId":"insert","endLine":48,"endColumn":1,"fix":{"range":[1183,1183],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":49,"column":19,"nodeType":null,"messageId":"insert","endLine":49,"endColumn":19,"fix":{"range":[1274,1274],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":50,"column":15,"nodeType":null,"messageId":"insert","endLine":50,"endColumn":15,"fix":{"range":[1310,1310],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":51,"column":1,"nodeType":null,"messageId":"insert","endLine":51,"endColumn":1,"fix":{"range":[1314,1314],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··············` with `················`","line":52,"column":1,"nodeType":null,"messageId":"replace","endLine":52,"endColumn":15,"fix":{"range":[1333,1347],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":53,"column":15,"nodeType":null,"messageId":"insert","endLine":53,"endColumn":15,"fix":{"range":[1410,1410],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `··············` with `················`","line":54,"column":1,"nodeType":null,"messageId":"replace","endLine":54,"endColumn":15,"fix":{"range":[1453,1467],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":55,"column":1,"nodeType":null,"messageId":"insert","endLine":55,"endColumn":1,"fix":{"range":[1500,1500],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":56,"column":11,"nodeType":null,"messageId":"insert","endLine":56,"endColumn":11,"fix":{"range":[1558,1558],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":57,"column":1,"nodeType":null,"messageId":"insert","endLine":57,"endColumn":1,"fix":{"range":[1560,1560],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `··`","line":58,"column":1,"nodeType":null,"messageId":"insert","endLine":58,"endColumn":1,"fix":{"range":[1570,1570],"text":" "}}],"errorCount":41,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":41,"fixableWarningCount":0,"source":"import {\n copyFileSync, readFileSync, statSync, writeFileSync\n} from 'fs';\nimport { dirname, relative, join } from 'path';\n\nimport chalk from 'chalk';\nimport mkdirp from 'mkdirp';\nimport glob from 'glob';\nimport Mustache from 'mustache';\n\nclass Generator {\n cwd;\n\n args;\n\n constructor({ cwd, args }) {\n this.cwd = cwd;\n this.args = args;\n }\n\n async run() {\n await this.writing();\n }\n\n // eslint-disable-next-line\n async writing() {}\n\n copyTpl(opts) {\n const tpl = readFileSync(opts.templatePath, 'utf-8');\n const content = Mustache.render(tpl, opts.context);\n mkdirp.sync(dirname(opts.target));\n console.log(`${chalk.green('Write:')} ${relative(this.cwd, opts.target)}`);\n writeFileSync(opts.target, content, 'utf-8');\n }\n\n copyDirectory(opts) {\n const files = glob.sync('**/*', {\n cwd: opts.path,\n dot: true,\n ignore: ['**/node_modules/**']\n });\n files.forEach((file) => {\n const absFile = join(opts.path, file);\n if (statSync(absFile).isDirectory()) return;\n if (file.endsWith('.tpl')) {\n this.copyTpl({\n templatePath: absFile,\n target: join(opts.target, file.replace(/\\.tpl$/, '')),\n context: opts.context\n });\n } else {\n console.log(`${chalk.green('Copy: ')} ${file}`);\n const absTarget = join(opts.target, file);\n mkdirp.sync(dirname(absTarget));\n copyFileSync(absFile, absTarget);\n }\n });\n }\n}\n\nexport default Generator;\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/cleanRequireCache.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···`","line":1,"column":25,"nodeType":null,"messageId":"insert","endLine":1,"endColumn":25,"fix":{"range":[24,24],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `(require.cache[cachePath])` with `require.cache[cachePath]`","line":10,"column":29,"nodeType":null,"messageId":"replace","endLine":10,"endColumn":55,"fix":{"range":[407,433],"text":"require.cache[cachePath]"}}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":"export const isWindows = typeof process !== 'undefined' && process.platform === 'win32';\n\n// 暂时无法使用 jest 进行单元测试,原因可参见\n// https://github.com/facebook/jest/issues/5741\n\nexport default function (cacheKey) {\n // windows 下 require.cache 中路径 key 为类似 ‘c:\\demo\\.umirc.ts’\n const cachePath = isWindows ? cacheKey.replace(/\\//g, '\\\\') : cacheKey;\n if (require.cache[cachePath]) {\n const cacheParent = (require.cache[cachePath]).parent;\n let i = cacheParent?.children.length || 0;\n // 清理 require cache 中 parents 的引用\n while (i--) {\n if (cacheParent.children[i].id === cachePath) {\n cacheParent.children.splice(i, 1);\n }\n }\n\n delete require.cache[cachePath];\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/compatESModuleRequire.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/delay.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `ms·=>·new·Promise(resolve` with `(ms)·=>·new·Promise((resolve)`","line":1,"column":16,"nodeType":null,"messageId":"replace","endLine":1,"endColumn":41,"fix":{"range":[15,40],"text":"(ms) => new Promise((resolve)"}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"export default ms => new Promise(resolve => setTimeout(resolve, ms));\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/index.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/mergeConfig.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"\nexport default function mergeConfig(defaultConfig, ...configs) {\n const ret = { ...defaultConfig };\n configs.forEach((config) => {\n if (!config) return;\n Object.keys(config).forEach((key) => {\n const val = config[key];\n if (typeof val === 'function') {\n ret[key] = val(ret[key]);\n } else {\n ret[key] = val;\n }\n });\n });\n return ret;\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/parseRequireDeps.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":1,"column":1,"nodeType":null,"messageId":"delete","endLine":2,"endColumn":1,"fix":{"range":[0,1],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `(crequire(content))` with `crequire(content)`","line":12,"column":12,"nodeType":null,"messageId":"replace","endLine":12,"endColumn":31,"fix":{"range":[300,319],"text":"crequire(content)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `o` with `(o)`","line":13,"column":14,"nodeType":null,"messageId":"replace","endLine":13,"endColumn":15,"fix":{"range":[333,334],"text":"(o)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `path` with `(path)`","line":14,"column":17,"nodeType":null,"messageId":"replace","endLine":14,"endColumn":21,"fix":{"range":[362,366],"text":"(path)"}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `(path·=>` with `((path)·=>⏎···········`","line":15,"column":13,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":21,"fix":{"range":[406,414],"text":"((path) =>\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":16,"column":1,"nodeType":null,"messageId":"insert","endLine":16,"endColumn":1,"fix":{"range":[424,424],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `····················`","line":17,"column":1,"nodeType":null,"messageId":"replace","endLine":17,"endColumn":17,"fix":{"range":[457,473],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":18,"column":1,"nodeType":null,"messageId":"insert","endLine":18,"endColumn":1,"fix":{"range":[501,501],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":19,"column":13,"nodeType":null,"messageId":"insert","endLine":19,"endColumn":13,"fix":{"range":[572,572],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `)` with `····)⏎········`","line":20,"column":9,"nodeType":null,"messageId":"replace","endLine":20,"endColumn":10,"fix":{"range":[583,584],"text":" )\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":28,"column":1,"nodeType":null,"messageId":"insert","endLine":28,"endColumn":1,"fix":{"range":[738,738],"text":" "}}],"errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":11,"fixableWarningCount":0,"source":"\n// @ts-ignore\nimport crequire from 'crequire';\nimport lodash from 'lodash';\nimport resolve from 'resolve';\nimport { readFileSync } from 'fs';\nimport { dirname } from 'path';\nimport winPath from './winPath';\n\nfunction parse(filePath) {\n const content = readFileSync(filePath, 'utf-8');\n return (crequire(content))\n .map(o => o.path)\n .filter(path => path.charAt(0) === '.')\n .map(path => winPath(\n resolve.sync(path, {\n basedir: dirname(filePath),\n extensions: ['.tsx', '.ts', '.jsx', '.js']\n })\n ));\n}\n\nexport default function parseRequireDeps(filePath) {\n const paths = [filePath];\n const ret = [winPath(filePath)];\n\n while (paths.length) {\n // 避免依赖循环\n const extraPaths = lodash.pullAll(parse(paths.shift()), ret);\n if (extraPaths.length) {\n paths.push(...extraPaths);\n ret.push(...extraPaths);\n }\n }\n\n return ret;\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/resolvePkg.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Replace `pkgName·=>` with `(pkgName)·=>⏎···`","line":4,"column":20,"nodeType":null,"messageId":"replace","endLine":4,"endColumn":30,"fix":{"range":[85,95],"text":"(pkgName) =>\n "}}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"import { dirname } from 'path';\nimport winPath from './winPath';\n\nconst resolvePkg = pkgName => winPath(dirname(require.resolve(`${pkgName}/package.json`)));\n\nexport default resolvePkg;\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/packages/fes-utils/src/winPath.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/scripts/build.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":15,"column":1,"nodeType":null,"messageId":"delete","endLine":16,"endColumn":1,"fix":{"range":[411,412],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎···········`","line":106,"column":21,"nodeType":null,"messageId":"insert","endLine":106,"endColumn":21,"fix":{"range":[2969,2969],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace ``Transform·to·${type}·for·${config.target·===·'browser'·?·chalk.yellow(shortFilePath)·:·chalk.blue(shortFilePath)}`` with `⏎············`Transform·to·${type}·for·${⏎················config.target·===·'browser'⏎····················?·chalk.yellow(shortFilePath)⏎····················:·chalk.blue(shortFilePath)⏎············}`⏎········`","line":107,"column":13,"nodeType":null,"messageId":"replace","endLine":107,"endColumn":128,"fix":{"range":[3050,3165],"text":"\n `Transform to ${type} for ${\n config.target === 'browser'\n ? chalk.yellow(shortFilePath)\n : chalk.blue(shortFilePath)\n }`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `⏎········`","line":132,"column":13,"nodeType":null,"messageId":"insert","endLine":132,"endColumn":13,"fix":{"range":[4064,4064],"text":"\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":133,"column":9,"nodeType":null,"messageId":"insert","endLine":133,"endColumn":9,"fix":{"range":[4086,4086],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `····})` with `········})⏎········`","line":134,"column":1,"nodeType":null,"messageId":"replace","endLine":134,"endColumn":7,"fix":{"range":[4106,4112],"text":" })\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":135,"column":1,"nodeType":null,"messageId":"insert","endLine":135,"endColumn":1,"fix":{"range":[4148,4148],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":136,"column":1,"nodeType":null,"messageId":"replace","endLine":136,"endColumn":9,"fix":{"range":[4195,4203],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":137,"column":1,"nodeType":null,"messageId":"insert","endLine":137,"endColumn":1,"fix":{"range":[4247,4247],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":138,"column":1,"nodeType":null,"messageId":"replace","endLine":138,"endColumn":9,"fix":{"range":[4305,4313],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":139,"column":9,"nodeType":null,"messageId":"insert","endLine":139,"endColumn":9,"fix":{"range":[4376,4376],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `········` with `············`","line":140,"column":1,"nodeType":null,"messageId":"replace","endLine":140,"endColumn":9,"fix":{"range":[4415,4423],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":141,"column":1,"nodeType":null,"messageId":"insert","endLine":141,"endColumn":1,"fix":{"range":[4461,4461],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":142,"column":1,"nodeType":null,"messageId":"replace","endLine":142,"endColumn":13,"fix":{"range":[4507,4519],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":143,"column":9,"nodeType":null,"messageId":"insert","endLine":143,"endColumn":9,"fix":{"range":[4565,4565],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":144,"column":1,"nodeType":null,"messageId":"replace","endLine":144,"endColumn":13,"fix":{"range":[4593,4605],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":145,"column":9,"nodeType":null,"messageId":"insert","endLine":145,"endColumn":9,"fix":{"range":[4665,4665],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `············` with `················`","line":146,"column":1,"nodeType":null,"messageId":"replace","endLine":146,"endColumn":13,"fix":{"range":[4698,4710],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":147,"column":1,"nodeType":null,"messageId":"insert","endLine":147,"endColumn":1,"fix":{"range":[4755,4755],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":148,"column":5,"nodeType":null,"messageId":"insert","endLine":148,"endColumn":5,"fix":{"range":[4769,4769],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `·config.target·===·'browser'·?·ESM_OUTPUT_DIR` with `⏎················config.target·===·'browser'⏎····················?·ESM_OUTPUT_DIR⏎···················`","line":160,"column":25,"nodeType":null,"messageId":"replace","endLine":160,"endColumn":70,"fix":{"range":[5198,5243],"text":"\n config.target === 'browser'\n ? ESM_OUTPUT_DIR\n "}}],"errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":21,"fixableWarningCount":0,"source":"// 关闭 import 规则\n/* eslint import/no-extraneous-dependencies: 0 */\n\nconst fs = require('fs');\nconst fse = require('fs-extra');\nconst path = require('path');\nconst merge = require('deepmerge');\nconst chokidar = require('chokidar');\nconst chalk = require('chalk');\nconst argv = require('yargs-parser')(process.argv.slice(2));\n\nconst compiler = require('./compiler');\nconst randomColor = require('./randomColor');\n\n\nconst ESM_OUTPUT_DIR = 'es';\nconst NODE_CJS_OUTPUT_DIR = 'lib';\nconst SOURCE_DIR = 'src';\nconst CONFIG_FILE_NAME = 'build.config.js';\nconst GLOBAL_CONFIG_PATH = path.join(process.cwd(), CONFIG_FILE_NAME);\nconst DEFAULT_CONFIG = {\n target: 'node',\n pkgs: [],\n copy: []\n};\n\nconst PACKAGE_PATH = path.join(process.cwd(), './packages');\n\nfunction genLog(pkgName) {\n return (msg) => {\n console.log(`${randomColor(pkgName)}: ${msg}`);\n };\n}\n\nfunction getPkgPath(pkgName) {\n return path.join(PACKAGE_PATH, pkgName);\n}\n\nfunction genShortPath(filePath) {\n const codePath = filePath.split(`/${SOURCE_DIR}/`)[1];\n return `${SOURCE_DIR}/${codePath}`;\n}\n\nfunction getPkgSourcePath(pkgName) {\n return path.join(getPkgPath(pkgName), SOURCE_DIR);\n}\n\nfunction getOutputPath(config, pkgName) {\n if (config.target === 'browser') {\n return path.join(getPkgPath(pkgName), ESM_OUTPUT_DIR);\n }\n\n return path.join(getPkgPath(pkgName), NODE_CJS_OUTPUT_DIR);\n}\n\nfunction getGlobalConfig() {\n if (fs.existsSync(GLOBAL_CONFIG_PATH)) {\n const userConfig = require(GLOBAL_CONFIG_PATH);\n return merge(DEFAULT_CONFIG, userConfig);\n }\n return DEFAULT_CONFIG;\n}\n\nfunction getPkgConfig(config, pkgName) {\n const pkgConfigPath = path.join(getPkgPath(pkgName), CONFIG_FILE_NAME);\n if (fs.existsSync(pkgConfigPath)) {\n return merge(config, require(pkgConfigPath));\n }\n\n return config;\n}\n\nfunction getNeedCompilerPkg(config) {\n // 用户通过 cli 指定的包,优先级最高\n if (argv.pkg) {\n return Array.isArray(argv.pkg) ? argv.pkg : argv.pkg;\n }\n // 默认编译所有 packages\n if (!config.pkgs?.length) {\n const pkgs = fs.readdirSync(PACKAGE_PATH);\n return pkgs;\n }\n\n return config.pkgs;\n}\n\nfunction cleanBeforeCompilerResult(pkgName, log) {\n const esmOutputDir = path.join(getPkgPath(pkgName), ESM_OUTPUT_DIR);\n const cjsOutputDir = path.join(getPkgPath(pkgName), NODE_CJS_OUTPUT_DIR);\n if (fs.existsSync(esmOutputDir)) {\n log(chalk.gray(`Clean ${ESM_OUTPUT_DIR} directory`));\n fse.removeSync(esmOutputDir);\n }\n if (fs.existsSync(cjsOutputDir)) {\n log(chalk.gray(`Clean ${NODE_CJS_OUTPUT_DIR} directory`));\n fse.removeSync(cjsOutputDir);\n }\n}\n\nfunction transformFile(filePath, outputPath, config, log) {\n if (/\\.[jt]sx?$/.test(path.extname(filePath))) {\n const code = fs.readFileSync(filePath, 'utf-8');\n const shortFilePath = genShortPath(filePath);\n const transformedCode = compiler(code, config);\n\n const type = config.target === 'browser' ? ESM_OUTPUT_DIR : NODE_CJS_OUTPUT_DIR;\n log(`Transform to ${type} for ${config.target === 'browser' ? chalk.yellow(shortFilePath) : chalk.blue(shortFilePath)}`);\n fse.outputFileSync(outputPath, transformedCode);\n } else {\n fse.copySync(filePath, outputPath);\n }\n}\n\nfunction compilerPkg(codeDir, outputDir, config, log) {\n const files = fs.readdirSync(codeDir);\n files.forEach((file) => {\n const filePath = path.join(codeDir, file);\n const outputFilePath = path.join(outputDir, file);\n const fileStats = fs.lstatSync(filePath);\n if (config.copy.includes(file)) {\n fse.copySync(filePath, outputFilePath);\n } else if (fileStats.isDirectory(filePath) && !/__tests__/.test(file)) {\n fse.ensureDirSync(outputFilePath);\n compilerPkg(filePath, outputFilePath, config, log);\n } else if (fileStats.isFile(filePath)) {\n transformFile(filePath, outputFilePath, config, log);\n }\n });\n}\n\nfunction watchFile(dir, outputDir, config, log) {\n chokidar.watch(dir, {\n ignoreInitial: true\n }).on('all', (event, changeFile) => {\n // 修改的可能是一个目录,一个文件,一个需要 copy 的文件 or 目录\n const baseName = path.basename(changeFile);\n const shortChangeFile = genShortPath(changeFile);\n const outputPath = changeFile.replace(dir, outputDir);\n const stat = fs.lstatSync(changeFile);\n log(`[${event}] ${shortChangeFile}`);\n if (config.copy.includes(baseName)) {\n fse.copySync(changeFile, outputPath);\n } else if (stat.isFile()) {\n transformFile(changeFile, outputPath, config, log);\n } else if (stat.isDirectory()) {\n compilerPkg(changeFile, outputPath, config);\n }\n });\n}\n\nfunction compilerPkgs(pkgs, globalConfig) {\n pkgs.forEach((pkgName) => {\n const sourceCodeDir = getPkgSourcePath(pkgName);\n if (fs.existsSync(sourceCodeDir)) {\n const log = genLog(pkgName);\n const config = getPkgConfig(globalConfig, pkgName);\n const outputDir = getOutputPath(config, pkgName);\n\n cleanBeforeCompilerResult(pkgName, log);\n const type = config.target === 'browser' ? ESM_OUTPUT_DIR : NODE_CJS_OUTPUT_DIR;\n log(chalk.white(`Build ${type} with babel`));\n compilerPkg(sourceCodeDir, outputDir, config, log);\n if (argv.watch) {\n log(chalk.magenta(`Start watch ${SOURCE_DIR} directory...`));\n watchFile(sourceCodeDir, outputDir, config, log);\n }\n }\n });\n}\n\nfunction main() {\n const globalConfig = getGlobalConfig();\n const pkgs = getNeedCompilerPkg(globalConfig);\n\n compilerPkgs(pkgs, globalConfig);\n}\n\nmain();\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/scripts/compiler.js","messages":[{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":6,"column":1,"nodeType":null,"messageId":"delete","endLine":7,"endColumn":1,"fix":{"range":[106,107],"text":""}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'@babel/preset-env',` with `⏎················'@babel/preset-env',⏎···············`","line":15,"column":14,"nodeType":null,"messageId":"replace","endLine":15,"endColumn":34,"fix":{"range":[321,341],"text":"\n '@babel/preset-env',\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":16,"column":17,"nodeType":null,"messageId":"insert","endLine":16,"endColumn":17,"fix":{"range":[360,360],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":17,"column":1,"nodeType":null,"messageId":"insert","endLine":17,"endColumn":1,"fix":{"range":[376,376],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎············`","line":18,"column":13,"nodeType":null,"messageId":"replace","endLine":18,"endColumn":14,"fix":{"range":[428,429],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `'@babel/preset-env',` with `⏎················'@babel/preset-env',⏎···············`","line":28,"column":14,"nodeType":null,"messageId":"replace","endLine":28,"endColumn":34,"fix":{"range":[655,675],"text":"\n '@babel/preset-env',\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":29,"column":1,"nodeType":null,"messageId":"insert","endLine":29,"endColumn":1,"fix":{"range":[678,678],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Insert `····`","line":30,"column":17,"nodeType":null,"messageId":"insert","endLine":30,"endColumn":17,"fix":{"range":[726,726],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `················` with `····················`","line":31,"column":1,"nodeType":null,"messageId":"replace","endLine":31,"endColumn":17,"fix":{"range":[746,762],"text":" "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace `}` with `····}⏎············`","line":32,"column":13,"nodeType":null,"messageId":"replace","endLine":32,"endColumn":14,"fix":{"range":[800,801],"text":" }\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Replace ``config·target·error:·${config.target},·only·can·use·'node'·and·'browser'`` with `⏎········`config·target·error:·${config.target},·only·can·use·'node'·and·'browser'`⏎····`","line":44,"column":21,"nodeType":null,"messageId":"replace","endLine":44,"endColumn":95,"fix":{"range":[1066,1140],"text":"\n `config target error: ${config.target}, only can use 'node' and 'browser'`\n "}},{"ruleId":"prettier/prettier","severity":2,"message":"Delete `⏎`","line":45,"column":2,"nodeType":null,"messageId":"delete","endLine":46,"endColumn":1,"fix":{"range":[1144,1145],"text":""}}],"errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":12,"fixableWarningCount":0,"source":"// 关闭 import 规则\n/* eslint import/no-extraneous-dependencies: 0 */\n\nconst babel = require('@babel/core');\n\n\nfunction transform(code, options) {\n const result = babel.transformSync(code, options);\n return result.code;\n}\n\nfunction transformNodeCode(code) {\n return transform(code, {\n presets: [\n ['@babel/preset-env', {\n modules: 'cjs',\n targets: { node: '12' }\n }]\n ]\n });\n}\n\nfunction transformBrowserCode(code) {\n // 因为 fes.js 在生产打包的时候,会处理所有的 node_modules 下的文件,确保不会丢失必要 polyfill\n // 因此这里不对 polyfill 进行处理,避免全局污染\n return transform(code, {\n presets: [\n ['@babel/preset-env', {\n modules: false,\n useBuiltIns: false,\n targets: { chrome: '51' }\n }]\n ]\n });\n}\n\nfunction compiler(code, config) {\n if (!config.target || config.target === 'node') {\n return transformNodeCode(code);\n }\n if (config.target === 'browser') {\n return transformBrowserCode(code);\n }\n throw new Error(`config target error: ${config.target}, only can use 'node' and 'browser'`);\n}\n\n\nmodule.exports = compiler;\n","usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/scripts/randomColor.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/qlin/code/fes.js/vetur.config.js","messages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]} \ No newline at end of file diff --git a/docs/reference/plugin/plugins/layout.md b/docs/reference/plugin/plugins/layout.md index 9dc05e16..be8a079d 100644 --- a/docs/reference/plugin/plugins/layout.md +++ b/docs/reference/plugin/plugins/layout.md @@ -84,7 +84,7 @@ export default { // 标题 title: "Fes.js", // 底部文字 - footer: 'Created by MumbelFe', + footer: 'Created by MumbleFE', // 主题light theme: 'dark' // 是否开启 tabs @@ -183,13 +183,13 @@ export default { - **path**:菜单的路径,可配置第三方地址。 - - **title**:菜单的标题,如果同时使用[国际化插件](./locale.md),而且在 `locales` 中配置了 `title` ,则菜单的名称会根据语言自动切换。 + - **title**:菜单的标题,如果同时使用[国际化插件](./locale.md),而且`title`的值以`$`开头,则使用`$`后面的内容去匹配语言设置。 - **icon**: 菜单的图标,只有一级标题展示图标。 - - 图标使用[antv icon](https://www.antdv.com/components/icon-cn/),在这里使用组件type。 + - 图标使用[fes-design icon](https://fes-design-4gvn317r3b6bfe17-1254145788.ap-shanghai.app.tcloudbase.com/zh/components/icon.html),在这里使用组件名称。 ```js { - icon: "user" + icon: "AppstoreOutlined" } ``` - 图标使用本地或者远程svg图片。 diff --git a/docs/zh/guide/route.md b/docs/zh/guide/route.md index 0200633b..2a5757d2 100644 --- a/docs/zh/guide/route.md +++ b/docs/zh/guide/route.md @@ -106,7 +106,7 @@ pages ``` **需要注意的是,满足以下任意规则的文件不会被注册为路由**: -- 不是 `.vue` 文件 +- 不是 `.vue .jsx` 文件 - `components` 目录中的文件 diff --git a/docs/zh/reference/plugin/plugins/layout.md b/docs/zh/reference/plugin/plugins/layout.md index 9dc05e16..be8a079d 100644 --- a/docs/zh/reference/plugin/plugins/layout.md +++ b/docs/zh/reference/plugin/plugins/layout.md @@ -84,7 +84,7 @@ export default { // 标题 title: "Fes.js", // 底部文字 - footer: 'Created by MumbelFe', + footer: 'Created by MumbleFE', // 主题light theme: 'dark' // 是否开启 tabs @@ -183,13 +183,13 @@ export default { - **path**:菜单的路径,可配置第三方地址。 - - **title**:菜单的标题,如果同时使用[国际化插件](./locale.md),而且在 `locales` 中配置了 `title` ,则菜单的名称会根据语言自动切换。 + - **title**:菜单的标题,如果同时使用[国际化插件](./locale.md),而且`title`的值以`$`开头,则使用`$`后面的内容去匹配语言设置。 - **icon**: 菜单的图标,只有一级标题展示图标。 - - 图标使用[antv icon](https://www.antdv.com/components/icon-cn/),在这里使用组件type。 + - 图标使用[fes-design icon](https://fes-design-4gvn317r3b6bfe17-1254145788.ap-shanghai.app.tcloudbase.com/zh/components/icon.html),在这里使用组件名称。 ```js { - icon: "user" + icon: "AppstoreOutlined" } ``` - 图标使用本地或者远程svg图片。 diff --git a/packages/create-fes-app/templates/app/pc/.fes.js b/packages/create-fes-app/templates/app/pc/.fes.js index 4f402c18..8ed730dd 100644 --- a/packages/create-fes-app/templates/app/pc/.fes.js +++ b/packages/create-fes-app/templates/app/pc/.fes.js @@ -11,7 +11,7 @@ export default { }, layout: { title: "Fes.js", - footer: 'Created by MumbleFe', + footer: 'Created by MumbleFE', multiTabs: false, menus: [{ name: 'index' diff --git a/packages/create-fes-app/templates/app/pc/.gitignore b/packages/create-fes-app/templates/app/pc/.gitignore index 08697864..179073cc 100644 --- a/packages/create-fes-app/templates/app/pc/.gitignore +++ b/packages/create-fes-app/templates/app/pc/.gitignore @@ -9,4 +9,4 @@ /src/.fes /src/.fes-production /src/.fes-test -/.env.local +.env.local diff --git a/packages/create-fes-app/templates/app/pc/package.json b/packages/create-fes-app/templates/app/pc/package.json index 1d8bb80d..e4b1b7a3 100644 --- a/packages/create-fes-app/templates/app/pc/package.json +++ b/packages/create-fes-app/templates/app/pc/package.json @@ -52,7 +52,7 @@ "@fesjs/plugin-layout": "^2.0.0", "@fesjs/plugin-model": "^2.0.0", "@fesjs/plugin-enums": "^2.0.0", - "ant-design-vue": "^2.2.0", + "@fesjs/fes-design": "^0.1.10", "vue": "^3.2.6" }, "private": true diff --git a/packages/create-fes-app/templates/app/pc/src/app.js b/packages/create-fes-app/templates/app/pc/src/app.js index 0926a0e1..e5f951c1 100644 --- a/packages/create-fes-app/templates/app/pc/src/app.js +++ b/packages/create-fes-app/templates/app/pc/src/app.js @@ -13,7 +13,7 @@ export const beforeRender = { setRole('admin'); // 初始化应用的全局状态,可以通过 useModel('@@initialState') 获取,具体用法看@/components/UserCenter 文件 resolve({ - userName: 'harrywan' + userName: '李雷' }); }, 1000); }); diff --git a/packages/create-fes-app/templates/app/pc/src/components/PageLoading.vue b/packages/create-fes-app/templates/app/pc/src/components/PageLoading.vue index b9ae15a1..e544021a 100644 --- a/packages/create-fes-app/templates/app/pc/src/components/PageLoading.vue +++ b/packages/create-fes-app/templates/app/pc/src/components/PageLoading.vue @@ -1,15 +1,18 @@ diff --git a/packages/create-fes-app/templates/app/pc/src/pages/index.vue b/packages/create-fes-app/templates/app/pc/src/pages/index.vue index 36637c20..4cab0d6c 100644 --- a/packages/create-fes-app/templates/app/pc/src/pages/index.vue +++ b/packages/create-fes-app/templates/app/pc/src/pages/index.vue @@ -1,35 +1,13 @@ + diff --git a/packages/fes-plugin-layout/src/runtime/views/404.vue b/packages/fes-plugin-layout/src/runtime/views/404.vue index 41a73851..14d9317b 100644 --- a/packages/fes-plugin-layout/src/runtime/views/404.vue +++ b/packages/fes-plugin-layout/src/runtime/views/404.vue @@ -1,9 +1,292 @@ { @@ -12,15 +295,11 @@ + diff --git a/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue b/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue index cd3ae9e8..21f3bc9f 100644 --- a/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue +++ b/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue @@ -1,89 +1,176 @@ - - diff --git a/packages/fes-plugin-layout/src/runtime/views/Menu.vue b/packages/fes-plugin-layout/src/runtime/views/Menu.vue index c91051c0..3fa8989f 100644 --- a/packages/fes-plugin-layout/src/runtime/views/Menu.vue +++ b/packages/fes-plugin-layout/src/runtime/views/Menu.vue @@ -1,67 +1,24 @@ - - diff --git a/packages/fes-plugin-layout/src/runtime/views/MenuIcon.vue b/packages/fes-plugin-layout/src/runtime/views/MenuIcon.vue index 33972f49..ab24e975 100644 --- a/packages/fes-plugin-layout/src/runtime/views/MenuIcon.vue +++ b/packages/fes-plugin-layout/src/runtime/views/MenuIcon.vue @@ -1,5 +1,4 @@ diff --git a/packages/fes-plugin-layout/src/runtime/views/MultiTabProvider.vue b/packages/fes-plugin-layout/src/runtime/views/MultiTabProvider.vue index 668f9909..910c00a0 100644 --- a/packages/fes-plugin-layout/src/runtime/views/MultiTabProvider.vue +++ b/packages/fes-plugin-layout/src/runtime/views/MultiTabProvider.vue @@ -1,61 +1,49 @@ + + diff --git a/packages/fes-plugin-qiankun/examples/app1/package.json b/packages/fes-plugin-qiankun/examples/app1/package.json index de42ddf8..224273e2 100644 --- a/packages/fes-plugin-qiankun/examples/app1/package.json +++ b/packages/fes-plugin-qiankun/examples/app1/package.json @@ -1,54 +1,54 @@ { - "name": "app1", - "version": "2.0.0", - "description": "fes项目模版", - "scripts": { - "build": "fes build", - "prod": "FES_ENV=prod fes build", - "analyze": "ANALYZE=1 fes build", - "dev": "fes dev", - "test": "fes test" - }, - "keywords": [ - "管理端", - "fes", - "fast", - "easy", - "strong" - ], - "files": [ - ".eslintrc.js", - ".gitignore", - ".fes.js", - ".fes.prod.js", - "mock.js", - "package.json", - "README.md", - "tsconfig.json", - "/src", - "/config" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/WeBankFinTech/fes.js.git", - "directory": "packages/fes-template" - }, - "author": "harrywan", - "license": "MIT", - "bugs": { - "url": "https://github.com/WeBankFinTech/fes.js/issues" - }, - "homepage": "https://github.com/WeBankFinTech/fes.js#readme", - "publishConfig": { - "access": "public" - }, - "devDependencies": { - "@webank/eslint-config-webank": "0.3.1" - }, - "dependencies": { - "@fesjs/fes": "^2.0.0", - "vue": "^3.0.5", - "ant-design-vue": "^2.2.0" - }, - "private": true -} \ No newline at end of file + "name": "app1", + "version": "2.0.0", + "description": "fes项目模版", + "scripts": { + "build": "fes build", + "prod": "FES_ENV=prod fes build", + "analyze": "ANALYZE=1 fes build", + "dev": "fes dev", + "test": "fes test" + }, + "keywords": [ + "管理端", + "fes", + "fast", + "easy", + "strong" + ], + "files": [ + ".eslintrc.js", + ".gitignore", + ".fes.js", + ".fes.prod.js", + "mock.js", + "package.json", + "README.md", + "tsconfig.json", + "/src", + "/config" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/WeBankFinTech/fes.js.git", + "directory": "packages/fes-template" + }, + "author": "harrywan", + "license": "MIT", + "bugs": { + "url": "https://github.com/WeBankFinTech/fes.js/issues" + }, + "homepage": "https://github.com/WeBankFinTech/fes.js#readme", + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "@webank/eslint-config-webank": "0.3.1" + }, + "dependencies": { + "@fesjs/fes": "^2.0.0", + "vue": "^3.0.5", + "@fesjs/fes-design": "^0.1.10" + }, + "private": true +} diff --git a/packages/fes-plugin-qiankun/examples/app1/src/components/PageLoading.vue b/packages/fes-plugin-qiankun/examples/app1/src/components/PageLoading.vue index 7af67ee9..e544021a 100644 --- a/packages/fes-plugin-qiankun/examples/app1/src/components/PageLoading.vue +++ b/packages/fes-plugin-qiankun/examples/app1/src/components/PageLoading.vue @@ -1,14 +1,15 @@ + diff --git a/packages/fes-template/src/locales/en-US.js b/packages/fes-template/src/locales/en-US.js index d2c8653c..0d39017e 100644 --- a/packages/fes-template/src/locales/en-US.js +++ b/packages/fes-template/src/locales/en-US.js @@ -1,12 +1,7 @@ export default { - test: 'test', home: 'home', - 'navBar.lang': 'Languages', - 'layout.user.link.help': 'Help', - 'layout.user.link.privacy': 'Privacy', - 'layout.user.link.terms': 'Terms', - 'app.preview.down.block': 'Download this page to your local project', - 'app.welcome.link.fetch-blocks': 'Get all block', - 'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development' + store: 'store', + editor: 'editor', + externalLink: 'externalLink' }; diff --git a/packages/fes-template/src/locales/id-ID.js b/packages/fes-template/src/locales/id-ID.js deleted file mode 100644 index 3596ca12..00000000 --- a/packages/fes-template/src/locales/id-ID.js +++ /dev/null @@ -1,11 +0,0 @@ - -export default { - 'navbar.lang': 'Bahasa', - 'layout.user.link.help': 'Bantuan', - 'layout.user.link.privacy': 'Privasi', - 'layout.user.link.terms': 'Ketentuan', - 'app.preview.down.block': 'Unduh halaman ini dalam projek lokal anda', - 'app.welcome.link.fetch-blocks': 'Dapatkan semua blok', - 'app.welcome.link.block-list': - 'Buat standar dengan cepat, halaman-halaman berdasarkan pengembangan `block`' -}; diff --git a/packages/fes-template/src/locales/pt-BR.js b/packages/fes-template/src/locales/pt-BR.js deleted file mode 100644 index 7a7a80bd..00000000 --- a/packages/fes-template/src/locales/pt-BR.js +++ /dev/null @@ -1,8 +0,0 @@ - -export default { - 'navBar.lang': 'Idiomas', - 'layout.user.link.help': 'ajuda', - 'layout.user.link.privacy': 'política de privacidade', - 'layout.user.link.terms': 'termos de serviços', - 'app.preview.down.block': 'Download this page to your local project' -}; diff --git a/packages/fes-template/src/locales/zh-CN.js b/packages/fes-template/src/locales/zh-CN.js index bbc8138d..be54ef9f 100644 --- a/packages/fes-template/src/locales/zh-CN.js +++ b/packages/fes-template/src/locales/zh-CN.js @@ -1,12 +1,7 @@ export default { - test: '测试', home: '首页', - 'navBar.lang': '语言', - 'layout.user.link.help': '帮助', - 'layout.user.link.privacy': '隐私', - 'layout.user.link.terms': '条款', - 'app.preview.down.block': '下载此页面到本地项目', - 'app.welcome.link.fetch-blocks': '获取全部区块', - 'app.welcome.link.block-list': '基于 block 开发,快速构建标准页面' + store: '状态管理', + editor: '编辑器', + externalLink: '外部链接' }; diff --git a/packages/fes-template/src/locales/zh-TW.js b/packages/fes-template/src/locales/zh-TW.js deleted file mode 100644 index 6347aea9..00000000 --- a/packages/fes-template/src/locales/zh-TW.js +++ /dev/null @@ -1,8 +0,0 @@ - -export default { - 'navBar.lang': '語言', - 'layout.user.link.help': '幫助', - 'layout.user.link.privacy': '隱私', - 'layout.user.link.terms': '條款', - 'app.preview.down.block': '下載此頁面到本地項目' -}; diff --git a/packages/fes-template/src/pages/a/b.vue b/packages/fes-template/src/pages/a/b.vue deleted file mode 100644 index 183c640d..00000000 --- a/packages/fes-template/src/pages/a/b.vue +++ /dev/null @@ -1,8 +0,0 @@ - - diff --git a/packages/fes-template/src/pages/b/index.vue b/packages/fes-template/src/pages/b/index.vue deleted file mode 100644 index 26f31da7..00000000 --- a/packages/fes-template/src/pages/b/index.vue +++ /dev/null @@ -1,8 +0,0 @@ - - diff --git a/packages/fes-template/src/pages/cssModule.vue b/packages/fes-template/src/pages/cssModule.vue new file mode 100644 index 00000000..78d29fd8 --- /dev/null +++ b/packages/fes-template/src/pages/cssModule.vue @@ -0,0 +1,24 @@ + + +{ + "name": "cssModule", + "title": "css Module 测试" +} + + + + diff --git a/packages/fes-template/src/pages/editor.vue b/packages/fes-template/src/pages/editor.vue index 1ec87ff6..e4a89b05 100644 --- a/packages/fes-template/src/pages/editor.vue +++ b/packages/fes-template/src/pages/editor.vue @@ -11,7 +11,7 @@ { "name": "editor", - "title": "monaco-editor" + "title": "$editor" } - diff --git a/packages/fes-template/src/pages/menuTest/a.vue b/packages/fes-template/src/pages/menuTest/a.vue new file mode 100644 index 00000000..cb0d9d84 --- /dev/null +++ b/packages/fes-template/src/pages/menuTest/a.vue @@ -0,0 +1,21 @@ + + + + diff --git a/packages/fes-template/src/pages/menuTest/index.vue b/packages/fes-template/src/pages/menuTest/index.vue new file mode 100644 index 00000000..cc76a7e4 --- /dev/null +++ b/packages/fes-template/src/pages/menuTest/index.vue @@ -0,0 +1,21 @@ + + + + diff --git a/packages/fes-template/src/pages/onepiece.vue b/packages/fes-template/src/pages/onepiece.vue deleted file mode 100644 index 063dea96..00000000 --- a/packages/fes-template/src/pages/onepiece.vue +++ /dev/null @@ -1,21 +0,0 @@ - - -{ - "name": "onepiece", - "title": "onepiece" -} - - diff --git a/packages/fes-template/src/pages/store.vue b/packages/fes-template/src/pages/store.vue index 3c157136..63c9df2b 100644 --- a/packages/fes-template/src/pages/store.vue +++ b/packages/fes-template/src/pages/store.vue @@ -1,16 +1,24 @@ { "name": "store", - "title": "vuex测试" + "title": "$store" } - diff --git a/packages/fes-template/src/pages/test.vue b/packages/fes-template/src/pages/test.vue deleted file mode 100644 index 2c50c8f0..00000000 --- a/packages/fes-template/src/pages/test.vue +++ /dev/null @@ -1,16 +0,0 @@ - - -{ - "name": "test", - "title": "侧事故" -} - - diff --git a/yarn.lock b/yarn.lock index 02a9bd89..56e87919 100644 --- a/yarn.lock +++ b/yarn.lock @@ -125,28 +125,6 @@ "@algolia/logger-common" "4.11.0" "@algolia/requester-common" "4.11.0" -"@ant-design/colors@^5.0.0": - version "5.1.1" - resolved "https://registry.npmmirror.com/@ant-design/colors/download/@ant-design/colors-5.1.1.tgz#800b2186b1e27e66432e67d03ed96af3e21d8940" - integrity sha1-gAshhrHifmZDLmfQPtlq8+IdiUA= - dependencies: - "@ctrl/tinycolor" "^3.3.1" - -"@ant-design/icons-svg@^4.0.0": - version "4.2.1" - resolved "https://registry.npmmirror.com/@ant-design/icons-svg/download/@ant-design/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" - integrity sha1-hjDajrRHGkqr2u19H/apfcss8Fo= - -"@ant-design/icons-vue@^6.0.0": - version "6.0.1" - resolved "https://registry.npmmirror.com/@ant-design/icons-vue/download/@ant-design/icons-vue-6.0.1.tgz#9d804c3c74d2cfaf97cb18e582d3b9400934f5fd" - integrity sha1-nYBMPHTSz6+XyxjlgtO5QAk09f0= - dependencies: - "@ant-design/colors" "^5.0.0" - "@ant-design/icons-svg" "^4.0.0" - "@types/lodash" "^4.14.165" - lodash "^4.17.15" - "@antfu/utils@^0.3.0": version "0.3.0" resolved "https://registry.npmmirror.com/@antfu/utils/download/@antfu/utils-0.3.0.tgz#6306c43b52a883bd8e973e3ed8dd64248418bcc4" @@ -170,32 +148,32 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha1-DfyAMJvuyEEeZecGRhxAiwu5tDE= +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/highlight" "^7.16.0" + "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4": version "7.16.4" resolved "https://registry.npmmirror.com/@babel/compat-data/download/@babel/compat-data-7.16.4.tgz?cache=0&sync_timestamp=1637108666788&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.13", "@babel/core@^7.12.3", "@babel/core@^7.15.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.16.5.tgz#924aa9e1ae56e1e55f7184c8bf073a50d8677f5c" - integrity sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" + integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.5" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helpers" "^7.16.5" - "@babel/parser" "^7.16.5" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.7" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -212,59 +190,59 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.16.5", "@babel/generator@^7.7.2": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf" - integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA== +"@babel/generator@^7.16.7", "@babel/generator@^7.7.2": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" + integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" - integrity sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0= +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz#a8429d064dce8207194b8bf05a70a9ea828746af" - integrity sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.3": - version "7.16.3" - resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.3.tgz?cache=0&sync_timestamp=1636503570900&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" - integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-validator-option" "^7.14.5" + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.0", "@babel/helper-create-class-features-plugin@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.5.tgz#5d1bcd096792c1ebec6249eebc6358eec55d0cad" - integrity sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg== +"@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.7.tgz#9c5b34b53a01f2097daf10678d65135c1b9f84ba" + integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-member-expression-to-functions" "^7.16.5" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.5" - "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-regexp-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.16.0.tgz?cache=0&sync_timestamp=1635567134206&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" - integrity sha1-BrI0jON/zMT14Y3NjXUFPyp8RP8= +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^4.7.1" "@babel/helper-define-polyfill-provider@^0.3.0": @@ -281,109 +259,109 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.16.5.tgz#f6a7f38b3c6d8b07c88faea083c46c09ef5451b8" - integrity sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg== +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-explode-assignable-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.16.0.tgz?cache=0&sync_timestamp=1635567346013&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" - integrity sha1-dTAXM3oV9G+cCfZ0z/EM7pudd3g= +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-function-name/download/@babel/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha1-t90Hl9ALv+5PB+nE6lsOMMi7FIE= +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-function-name/download/@babel/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/helper-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha1-AIjHSGspqctdlIsaHeRttm4InPo= +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha1-TJAjwvHe9+KP9G/B2802o5vqqBo= +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.5.tgz#1bc9f7e87354e86f8879c67b316cb03d3dc2caab" - integrity sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw== +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" - integrity sha1-kFOOYLZy7PG0SPX09UM9N+eaPsM= +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.5.tgz#530ebf6ea87b500f60840578515adda2af470a29" - integrity sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ== +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== dependencies: - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-simple-access" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" - integrity sha1-zs2xRdcMVAlrFWT46fEM19GTszg= +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.16.5.tgz#afe37a45f39fce44a3d50a7958129ea5b1a5c074" - integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-remap-async-to-generator@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.16.5.tgz#e706646dc4018942acb4b29f7e185bc246d65ac3" - integrity sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw== +"@babel/helper-remap-async-to-generator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.16.7.tgz#5ce2416990d55eb6e099128338848ae8ffa58a9a" + integrity sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-wrap-function" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-replace-supers@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.5.tgz#96d3988bd0ab0a2d22c88c6198c3d3234ca25326" - integrity sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ== +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== dependencies: - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-member-expression-to-functions" "^7.16.5" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" - integrity sha1-IdaidiDjg+N1NM9sELugGab5BRc= +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" @@ -392,231 +370,231 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha1-KWcvQ2Y+k23zcKrrIr7ds7rsdDg= +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k= +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha1-bnKh//GNXfy4eOHmLxoCHEty1aM= +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-wrap-function@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.16.5.tgz#0158fca6f6d0889c3fee8a6ed6e5e07b9b54e41f" - integrity sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA== +"@babel/helper-wrap-function@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.16.7.tgz#8ddf9eaa770ed43de4bc3687f3f3b0d6d5ecf014" + integrity sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helpers@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/helpers/download/@babel/helpers-7.16.5.tgz#29a052d4b827846dd76ece16f565b9634c554ebd" - integrity sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw== +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helpers/download/@babel/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== dependencies: - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha1-bOsysspLj182H7f9gh4/3fShclo= +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" + integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.15.0", "@babel/parser@^7.16.0", "@babel/parser@^7.16.4", "@babel/parser@^7.16.5", "@babel/parser@^7.7.2": - version "7.16.6" - resolved "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" - integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.15.0", "@babel/parser@^7.16.4", "@babel/parser@^7.16.7", "@babel/parser@^7.7.2": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" + integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": - version "7.16.2" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz?cache=0&sync_timestamp=1635837715818&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fplugin-bugfix-safari-id-destructuring-collision-in-function-expression%2Fdownload%2F%40babel%2Fplugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" - integrity sha1-KXf8qbIS2xU8GVZ05Xz6uAdzMYM= +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" - integrity sha1-NYly6qsAb16wgmGDsMk8vK8T4eI= +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.16.5.tgz#fd3bd7e0d98404a3d4cbca15a72d533f8c9a2f67" - integrity sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA== +"@babel/plugin-proposal-async-generator-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.16.7.tgz#739adc1212a9e4892de440cd7dfffb06172df78d" + integrity sha512-TTXBT3A5c11eqRzaC6beO6rlFT3Mo9C2e8eB44tTr52ESXSK2CIc2fOp1ynpAwQA8HhBMho+WXhMHWlAe3xkpw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-remap-async-to-generator" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.16.5.tgz#3269f44b89122110f6339806e05d43d84106468a" - integrity sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A== +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-class-static-block@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.16.5.tgz#df58ab015a7d3b0963aafc8f20792dcd834952a9" - integrity sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ== +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-do-expressions@^7.12.13": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-do-expressions/download/@babel/plugin-proposal-do-expressions-7.16.5.tgz#2f923bdecb12eb8018f9c5be3812434a2e3b9d59" - integrity sha512-Q308gyxVU0Uie+if6xRiBSRqtxTu6ZMG6FbyFM5OvRVJ9Ip4RBQkmTCv1JbklnhtGn5RtMDfZRTsOgLPlgEBFA== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-do-expressions/download/@babel/plugin-proposal-do-expressions-7.16.7.tgz#80f55a0397a3899d562dd0f54ed926717b246817" + integrity sha512-IFa27vSFJgVV6p9HN8TBHPIZdd0v3YplR7dRwzM6fSf2R46HrDPOpaH5KwAqOIedMPAo149hC4M1swu42pValw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/plugin-syntax-do-expressions" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-do-expressions" "^7.16.7" -"@babel/plugin-proposal-dynamic-import@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.16.5.tgz#2e0d19d5702db4dcb9bc846200ca02f2e9d60e9e" - integrity sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ== +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-default-from@^7.12.13": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-default-from/download/@babel/plugin-proposal-export-default-from-7.16.5.tgz#8771249ffc9c06c9eb27342cf5c072a83c6d3811" - integrity sha512-pU4aCS+AzGjDD/6LnwSmeelmtqfMSjzQxs7+/AS673bYsshK1XZm9eth6OkgivVscQM8XdkVYhrb6tPFVTBVHA== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-default-from/download/@babel/plugin-proposal-export-default-from-7.16.7.tgz#a40ab158ca55627b71c5513f03d3469026a9e929" + integrity sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/plugin-syntax-export-default-from" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-default-from" "^7.16.7" -"@babel/plugin-proposal-export-namespace-from@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.16.5.tgz#3b4dd28378d1da2fea33e97b9f25d1c2f5bf1ac9" - integrity sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw== +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-function-bind@^7.12.13": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-function-bind/download/@babel/plugin-proposal-function-bind-7.16.5.tgz#ae5724f53901046a8ab0f60d6d0a85705dda6cf0" - integrity sha512-rOr/gYNm8pTBAfnwr/F6uSPjFJMqE2L1jLCoVrAcrt1he5e9F6pV6Cl4JBrFBbUnA+ETMnVFZIhfVbTq7So0Gw== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-function-bind/download/@babel/plugin-proposal-function-bind-7.16.7.tgz#2d08f091b72f0f123a64c5b0aa365c3c3e346413" + integrity sha512-jPhqHqKvjlswvdbo0KlGJDxOJbauEfzvBG0E0P8kdIubQcDcW295PbLsJhrJcTUWfWPJawTxBTOWOohZfCSHXg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/plugin-syntax-function-bind" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-function-bind" "^7.16.7" -"@babel/plugin-proposal-json-strings@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.16.5.tgz#1e726930fca139caab6b084d232a9270d9d16f9c" - integrity sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ== +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.16.5.tgz#df1f2e4b5a0ec07abf061d2c18e53abc237d3ef5" - integrity sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz#652555bfeeeee2d2104058c6225dc6f75e2d0f07" - integrity sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.16.5.tgz#edcb6379b6cf4570be64c45965d8da7a2debf039" - integrity sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw== +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.16.5.tgz#f30f80dacf7bc1404bf67f99c8d9c01665e830ad" - integrity sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw== +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== dependencies: "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.5" + "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-optional-catch-binding@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.16.5.tgz#1a5405765cf589a11a33a1fd75b2baef7d48b74e" - integrity sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ== +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.16.5.tgz#a5fa61056194d5059366c0009cb9a9e66ed75c1f" - integrity sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A== +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-pipeline-operator@^7.12.13": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-pipeline-operator/download/@babel/plugin-proposal-pipeline-operator-7.16.5.tgz#d39f04a396f90ef91b36e59e1f527fef3ec374d4" - integrity sha512-aMw3gPJYa2F6mVnL6QuHr9NtAScspBPTVXU2kaup7FVl02Hr4tY2diaGNdismAOmiroWa/2ENy4EFyoz81ACLg== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-pipeline-operator/download/@babel/plugin-proposal-pipeline-operator-7.16.7.tgz#b6064ebead4a69e53ab19720ebba7c14aa5bb196" + integrity sha512-og/v0C+wGJ2S+EwM9/KNtPB0MYrYR48Wiwlji6R9e6NYM5LXpyBQ1BcUWUXJLAtfub4/geOjLMO3xHDdmlPXoA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/plugin-syntax-pipeline-operator" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-pipeline-operator" "^7.16.7" -"@babel/plugin-proposal-private-methods@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.16.5.tgz#2086f7d78c1b0c712d49b5c3fbc2d1ca21a7ee12" - integrity sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA== +"@babel/plugin-proposal-private-methods@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.16.7.tgz#e418e3aa6f86edd6d327ce84eff188e479f571e0" + integrity sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-property-in-object@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.16.5.tgz#a42d4b56005db3d405b12841309dbca647e7a21b" - integrity sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA== +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.16.5.tgz#35fe753afa7c572f322bd068ff3377bde0f37080" - integrity sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg== +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -646,12 +624,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-do-expressions@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-do-expressions/download/@babel/plugin-syntax-do-expressions-7.16.5.tgz#d6b4b6ead0f87d6ae6ba88295ab52be40c169c73" - integrity sha512-cioOmT8tca/t2nJb1K9wGnAwJGh4lPJfukQomxVX298Yn4WGYoOS3TpAx73qR80pK5kZbdSbedlSyTNAyjloww== +"@babel/plugin-syntax-do-expressions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-do-expressions/download/@babel/plugin-syntax-do-expressions-7.16.7.tgz#3e14c076687742d251a326611e7254e243d966bc" + integrity sha512-y1Z8konmSeZu1c2ClWvNIY9iGwKtzUzRFGt10A0d2WdOfajBj3RwOPeW8RTN+L7Ag8WQdifeAQxBDrqXO7TZhg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -660,12 +638,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-default-from/download/@babel/plugin-syntax-export-default-from-7.16.5.tgz#bfc148b007cba23cd2ce2f3c16df223afb44ab30" - integrity sha512-tvY55nhq4mSG9WbM7IZcLIhdc5jzIZu0PQKJHtZ16+dF7oBxKbqV/Z0e9ta2zaLMvUjH+3rJv1hbZ0+lpXzuFQ== +"@babel/plugin-syntax-export-default-from@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-default-from/download/@babel/plugin-syntax-export-default-from-7.16.7.tgz#fa89cf13b60de2c3f79acdc2b52a21174c6de060" + integrity sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -674,12 +652,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-function-bind@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-function-bind/download/@babel/plugin-syntax-function-bind-7.16.5.tgz#df3edc186fc4bdfe6d24fc3c063d5ff373f1fd6e" - integrity sha512-Jn09tjgZuJIQdbqQCkBQErzjO4LV2NDUz03HSowJD0km7iXsKPX6Sk0G7xIkUItenYNLfkndlWojeTyYC6QbBA== +"@babel/plugin-syntax-function-bind@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-function-bind/download/@babel/plugin-syntax-function-bind-7.16.7.tgz#9b8c9425740c5b39f9ba4c5f252a7500c4457b88" + integrity sha512-MMXirXtr3TWxevJuRwglyFJAkxKPzHKm6UUS4Ki5ZjelSTianSS8grdgAwPtKt6Jk9jjHUuR+QWma5LVfbfh8w== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -696,11 +674,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.5.tgz#bf255d252f78bc8b77a17cadc37d1aa5b8ed4394" - integrity sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -744,12 +722,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-pipeline-operator@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-pipeline-operator/download/@babel/plugin-syntax-pipeline-operator-7.16.5.tgz#f06d2091b4a600c6dcafb2dae2861aea0c959472" - integrity sha512-JNPDHcP1DfYkVMREaQtRo6h8aaZBvK/dlKSRJpZcFv3wD9ZDg4qwwYzTmFxY4hTpwSKyty6rqLb6KIP52v11ig== +"@babel/plugin-syntax-pipeline-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-pipeline-operator/download/@babel/plugin-syntax-pipeline-operator-7.16.7.tgz#594d43695ee7f701533d9bf78eb7cac63ded7a85" + integrity sha512-t021QtCAsMvTQ+hy9aEX1TMhz4rFdnPZtddeTVya9PnX/xj5xoCvE2i1fzTknDpCJudZIsGlI6bAuVu2omrYgw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" @@ -765,309 +743,310 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.0", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.16.5.tgz#f47a33e4eee38554f00fb6b2f894fa1f5649b0b3" - integrity sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw== +"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-arrow-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.16.5.tgz#04c18944dd55397b521d9d7511e791acea7acf2d" - integrity sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ== +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.16.5.tgz#89c9b501e65bb14c4579a6ce9563f859de9b34e4" - integrity sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w== +"@babel/plugin-transform-async-to-generator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.16.7.tgz#646e1262ac341b587ff5449844d4492dbb10ac4b" + integrity sha512-pFEfjnK4DfXCfAlA5I98BYdDJD8NltMzx19gt6DAmfE+2lXRfPUoa0/5SUjT4+TDE1W/rcxU/1lgN55vpAjjdg== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-remap-async-to-generator" "^7.16.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.7" -"@babel/plugin-transform-block-scoped-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.16.5.tgz#af087494e1c387574260b7ee9b58cdb5a4e9b0b0" - integrity sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw== +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.16.5.tgz#b91f254fe53e210eabe4dd0c40f71c0ed253c5e7" - integrity sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ== +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.16.5.tgz#6acf2ec7adb50fb2f3194dcd2909dbd056dcf216" - integrity sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA== +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-replace-supers" "^7.16.5" - "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.16.5.tgz#2af91ebf0cceccfcc701281ada7cfba40a9b322a" - integrity sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg== +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.16.5.tgz#89ebc87499ac4a81b897af53bb5d3eed261bd568" - integrity sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg== +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-dotall-regex@^7.16.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.16.5.tgz#b40739c00b6686820653536d6d143e311de67936" - integrity sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw== +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.16.5.tgz#2450f2742325412b746d7d005227f5e8973b512a" - integrity sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg== +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.16.5.tgz#36e261fa1ab643cfaf30eeab38e00ed1a76081e2" - integrity sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA== +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.16.5.tgz#9b544059c6ca11d565457c0ff1f08e13ce225261" - integrity sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw== +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.16.5.tgz#6896ebb6a5538a75d6a4086a277752f655a7bd15" - integrity sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ== +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.16.5.tgz#af392b90e3edb2bd6dc316844cbfd6b9e009d320" - integrity sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw== +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.16.5.tgz#4bd6ecdc11932361631097b779ca5c7570146dd5" - integrity sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ== +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.16.5.tgz#92c0a3e83f642cb7e75fada9ab497c12c2616527" - integrity sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ== +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== dependencies: - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.16.5", "@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.16.5.tgz#4ee03b089536f076b2773196529d27c32b9d7bde" - integrity sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ== +"@babel/plugin-transform-modules-commonjs@^7.16.7", "@babel/plugin-transform-modules-commonjs@^7.2.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.16.7.tgz#fd119e6a433c527d368425b45df361e1e95d3c1a" + integrity sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w== dependencies: - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.16.5.tgz#07078ba2e3cc94fbdd06836e355c246e98ad006b" - integrity sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA== +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== dependencies: - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.16.5.tgz#caa9c53d636fb4e3c99fd35a4c9ba5e5cd7e002e" - integrity sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw== +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.16.5.tgz#4afd8cdee377ce3568f4e8a9ee67539b69886a3c" - integrity sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.16.7.tgz#749d90d94e73cf62c60a0cc8d6b94d29305a81f2" + integrity sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.16.5.tgz#759ea9d6fbbc20796056a5d89d13977626384416" - integrity sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg== +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.16.5.tgz#8ccd9a1bcd3e7732ff8aa1702d067d8cd70ce380" - integrity sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg== +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-replace-supers" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.16.5.tgz#4fc74b18a89638bd90aeec44a11793ecbe031dde" - integrity sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA== +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.16.5.tgz#58f1465a7202a2bb2e6b003905212dd7a79abe3f" - integrity sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg== +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.16.5.tgz#704cc6d8dd3dd4758267621ab7b36375238cef13" - integrity sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg== +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.16.5.tgz#db95e98799675e193dc2b47d3e72a7c0651d0c30" - integrity sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw== +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-runtime@^7.12.13": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.16.5.tgz#0cc3f01d69f299d5a42cd9ec43b92ea7a777b8db" - integrity sha512-gxpfS8XQWDbQ8oP5NcmpXxtEgCJkbO+W9VhZlOhr0xPyVaRjAQPOv7ZDj9fg0d5s9+NiVvMCE6gbkEkcsxwGRw== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.16.7.tgz#1da184cb83a2287a01956c10c60e66dd503c18aa" + integrity sha512-2FoHiSAWkdq4L06uaDN3rS43i6x28desUVxq+zAFuE6kbWYQeiLPJI5IC7Sg9xKYVcrBKSQkVUfH6aeQYbl9QA== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-polyfill-corejs2 "^0.3.0" babel-plugin-polyfill-corejs3 "^0.4.0" babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.16.5.tgz#ccb60b1a23b799f5b9a14d97c5bc81025ffd96d7" - integrity sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg== +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.16.5.tgz#912b06cff482c233025d3e69cf56d3e8fa166c29" - integrity sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw== +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.16.5.tgz#593579bb2b5a8adfbe02cb43823275d9098f75f9" - integrity sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg== +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.16.5.tgz#343651385fd9923f5aa2275ca352c5d9183e1773" - integrity sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ== +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.16.5.tgz#a1d1bf2c71573fe30965d0e4cd6a3291202e20ed" - integrity sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ== +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typescript@^7.16.1": - version "7.16.1" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409" - integrity sha1-zAZwsoIrAzg1W8Gz0iRqQrgWZAk= +"@babel/plugin-transform-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.16.7.tgz#33f8c2c890fbfdc4ef82446e9abb8de8211a3ff3" + integrity sha512-Hzx1lvBtOCWuCEwMmYOfpQpO7joFeXLgoPuzZZBtTxXqSqUGUubvFGZv2ygo1tB5Bp9q6PXV3H0E/kf7KM0RLA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-typescript" "^7.16.0" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" -"@babel/plugin-transform-unicode-escapes@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.16.5.tgz#80507c225af49b4f4ee647e2a0ce53d2eeff9e85" - integrity sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q== +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.16.5": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.16.5.tgz#ac84d6a1def947d71ffb832426aa53b83d7ed49e" - integrity sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw== +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.13", "@babel/preset-env@^7.15.0": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.16.5.tgz#2e94d922f4a890979af04ffeb6a6b4e44ba90847" - integrity sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.16.7.tgz#c491088856d0b3177822a2bf06cb74d76327aa56" + integrity sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ== dependencies: "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.2" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-async-generator-functions" "^7.16.5" - "@babel/plugin-proposal-class-properties" "^7.16.5" - "@babel/plugin-proposal-class-static-block" "^7.16.5" - "@babel/plugin-proposal-dynamic-import" "^7.16.5" - "@babel/plugin-proposal-export-namespace-from" "^7.16.5" - "@babel/plugin-proposal-json-strings" "^7.16.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.5" - "@babel/plugin-proposal-numeric-separator" "^7.16.5" - "@babel/plugin-proposal-object-rest-spread" "^7.16.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.5" - "@babel/plugin-proposal-optional-chaining" "^7.16.5" - "@babel/plugin-proposal-private-methods" "^7.16.5" - "@babel/plugin-proposal-private-property-in-object" "^7.16.5" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.7" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.7" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -1082,40 +1061,40 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.5" - "@babel/plugin-transform-async-to-generator" "^7.16.5" - "@babel/plugin-transform-block-scoped-functions" "^7.16.5" - "@babel/plugin-transform-block-scoping" "^7.16.5" - "@babel/plugin-transform-classes" "^7.16.5" - "@babel/plugin-transform-computed-properties" "^7.16.5" - "@babel/plugin-transform-destructuring" "^7.16.5" - "@babel/plugin-transform-dotall-regex" "^7.16.5" - "@babel/plugin-transform-duplicate-keys" "^7.16.5" - "@babel/plugin-transform-exponentiation-operator" "^7.16.5" - "@babel/plugin-transform-for-of" "^7.16.5" - "@babel/plugin-transform-function-name" "^7.16.5" - "@babel/plugin-transform-literals" "^7.16.5" - "@babel/plugin-transform-member-expression-literals" "^7.16.5" - "@babel/plugin-transform-modules-amd" "^7.16.5" - "@babel/plugin-transform-modules-commonjs" "^7.16.5" - "@babel/plugin-transform-modules-systemjs" "^7.16.5" - "@babel/plugin-transform-modules-umd" "^7.16.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.5" - "@babel/plugin-transform-new-target" "^7.16.5" - "@babel/plugin-transform-object-super" "^7.16.5" - "@babel/plugin-transform-parameters" "^7.16.5" - "@babel/plugin-transform-property-literals" "^7.16.5" - "@babel/plugin-transform-regenerator" "^7.16.5" - "@babel/plugin-transform-reserved-words" "^7.16.5" - "@babel/plugin-transform-shorthand-properties" "^7.16.5" - "@babel/plugin-transform-spread" "^7.16.5" - "@babel/plugin-transform-sticky-regex" "^7.16.5" - "@babel/plugin-transform-template-literals" "^7.16.5" - "@babel/plugin-transform-typeof-symbol" "^7.16.5" - "@babel/plugin-transform-unicode-escapes" "^7.16.5" - "@babel/plugin-transform-unicode-regex" "^7.16.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.7" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.7" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.7" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" babel-plugin-polyfill-corejs2 "^0.3.0" babel-plugin-polyfill-corejs3 "^0.4.0" babel-plugin-polyfill-regenerator "^0.3.0" @@ -1134,18 +1113,18 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.15.0": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/preset-typescript/download/@babel/preset-typescript-7.16.5.tgz#b86a5b0ae739ba741347d2f58c52f52e63cf1ba1" - integrity sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/preset-typescript/download/@babel/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-typescript" "^7.16.1" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" "@babel/register@^7.15.3": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/register/download/@babel/register-7.16.5.tgz#657d28b7ca68190de8f6159245b5ed1cfa181640" - integrity sha512-NpluD+cToBiZiDsG3y9rtIcqDyivsahpaM9csfyfiq1qQWduSmihUZ+ruIqqSDGjZKZMJfgAElo9x2YWlOQuRw== + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/register/download/@babel/register-7.16.7.tgz#e7b3a6015d1646677538672106bdb3a0b4a07657" + integrity sha512-Ft+cuxorVxFj4RrPDs9TbJNE7ZbuJTyazUC6jLWRvBQT/qIDZPMe7MHgjlrA+11+XDLh+I0Pnx7sxPp4LRhzcA== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1153,44 +1132,44 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" - integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.0.0", "@babel/template@^7.16.0", "@babel/template@^7.3.3": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha1-0Wo16/TNdOICCDNW+rId2JNj3dY= +"@babel/template@^7.0.0", "@babel/template@^7.16.7", "@babel/template@^7.3.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.0", "@babel/traverse@^7.16.5", "@babel/traverse@^7.7.2": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/traverse/download/@babel/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3" - integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.7.2": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/traverse/download/@babel/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" + integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.5" - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/types/download/@babel/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha1-2zsxOAT5aq3Qt3bEgj4SetZyibo= +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/types/download/@babel/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" + integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1394,11 +1373,6 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" -"@ctrl/tinycolor@^3.3.1": - version "3.4.0" - resolved "https://registry.npmmirror.com/@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz#c3c5ae543c897caa9c2a68630bed355be5f9990f" - integrity sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8= - "@docsearch/css@3.0.0-alpha.34": version "3.0.0-alpha.34" resolved "https://registry.npmmirror.com/@docsearch/css/download/@docsearch/css-3.0.0-alpha.34.tgz#5d5c39955956e237884a9997eb29e28c8adc99fa" @@ -1437,6 +1411,21 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@fesjs/fes-design@^0.1.10": + version "0.1.10" + resolved "https://registry.npmmirror.com/@fesjs/fes-design/download/@fesjs/fes-design-0.1.10.tgz#b7caaec676fcd1b2f86f5626b8b575f8d899b0c8" + integrity sha512-VEt3gA6ExM7WRhXE1k98Ufgee8h9tTL6nqJOItqHPB0jEcakW5z/r0tSByJND4es7zthwMUihHBzccwvjOVBCQ== + dependencies: + "@babel/runtime" "^7.16.3" + "@juggle/resize-observer" "^3.3.1" + "@popperjs/core" "^2.4.0" + "@vue/shared" "^3.2.19" + "@vueuse/core" "^6.7.5" + async-validator "^4.0.1" + lodash-es "^4.17.21" + normalize-wheel "^1.0.1" + stickybits "^3.7.9" + "@gar/promisify@^1.0.1": version "1.1.2" resolved "https://registry.npmmirror.com/@gar/promisify/download/@gar/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" @@ -1714,6 +1703,11 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@juggle/resize-observer@^3.3.1": + version "3.3.1" + resolved "https://registry.npmmirror.com/@juggle/resize-observer/download/@juggle/resize-observer-3.3.1.tgz#b50a781709c81e10701004214340f25475a171a0" + integrity sha1-tQp4FwnIHhBwEAQhQ0DyVHWhcaA= + "@lerna/add@4.0.0": version "4.0.0" resolved "https://registry.npmmirror.com/@lerna/add/download/@lerna/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f" @@ -2582,6 +2576,11 @@ resolved "https://registry.npmmirror.com/@polka/url/download/@polka/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha1-XeWiOFo1MJQn9gEZkrVEUU1VmqE= +"@popperjs/core@^2.4.0": + version "2.11.0" + resolved "https://registry.npmmirror.com/@popperjs/core/download/@popperjs/core-2.11.0.tgz#6734f8ebc106a0860dff7f92bf90df193f0935d7" + integrity sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ== + "@rollup/plugin-babel@^5.2.0": version "5.3.0" resolved "https://registry.npmmirror.com/@rollup/plugin-babel/download/@rollup/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" @@ -2636,14 +2635,6 @@ resolved "https://registry.npmmirror.com/@sideway/pinpoint/download/@sideway/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha1-z/j/rcNyrSn9P3gneusp5jLMcN8= -"@simonwep/pickr@~1.8.0": - version "1.8.2" - resolved "https://registry.npmmirror.com/@simonwep/pickr/download/@simonwep/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb" - integrity sha1-ltyGZ1lA18rWPWnCIIPdHLuXl8s= - dependencies: - core-js "^3.15.1" - nanopop "^2.1.0" - "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.npmmirror.com/@sinonjs/commons/download/@sinonjs/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -2845,11 +2836,6 @@ resolved "https://registry.npmmirror.com/@types/linkify-it/download/@types/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" integrity sha1-/SzS7bqn6qx+fzwXSLUqGRQ4Rsk= -"@types/lodash@^4.14.165": - version "4.14.178" - resolved "https://registry.npmmirror.com/@types/lodash/download/@types/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" - integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== - "@types/markdown-it@^12.2.3": version "12.2.3" resolved "https://registry.npmmirror.com/@types/markdown-it/download/@types/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" @@ -2895,7 +2881,7 @@ "@types/prettier@^2.1.5": version "2.4.2" - resolved "https://registry.npmmirror.com/@types/prettier/download/@types/prettier-2.4.2.tgz?cache=0&sync_timestamp=1637269857238&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fprettier%2Fdownload%2F%40types%2Fprettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" + resolved "https://registry.npmmirror.com/@types/prettier/download/@types/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== "@types/prop-types@*": @@ -3076,23 +3062,23 @@ "@vue/compiler-ssr" "3.2.26" "@vue/shared" "3.2.26" -"@vue/shared@3.2.26", "@vue/shared@^3.2.24": +"@vue/shared@3.2.26", "@vue/shared@^3.2.19", "@vue/shared@^3.2.24": version "3.2.26" resolved "https://registry.npmmirror.com/@vue/shared/download/@vue/shared-3.2.26.tgz#7acd1621783571b9a82eca1f041b4a0a983481d9" integrity sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA== -"@vuepress/bundler-vite@2.0.0-beta.31": - version "2.0.0-beta.31" - resolved "https://registry.npmmirror.com/@vuepress/bundler-vite/download/@vuepress/bundler-vite-2.0.0-beta.31.tgz#cd980258eda473b2d44a65713058c9b181570647" - integrity sha512-jjNDlzOd7+iswDZhDv2Dd1o+ZwgRJUPffAcnLUudIhlIv9/UZ+Pk+ozpremckEIahzlpD/m0yEkSjuYK96OyKA== +"@vuepress/bundler-vite@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/bundler-vite/download/@vuepress/bundler-vite-2.0.0-beta.32.tgz#3fdd898e35b242682fd2090cc1b4c5db9b59ce9e" + integrity sha512-ahB5AoPwLnpwCH9Lg6asznjV2tIFpQsWqfZV2Nfv9nxUl0da3iq9lMS9f2IH7RCSLoBa46VOizFCOFsvgeccDQ== dependencies: "@vitejs/plugin-vue" "^1.10.2" "@vue/compiler-sfc" "^3.2.24" "@vue/server-renderer" "^3.2.24" - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" autoprefixer "^10.4.0" connect-history-api-fallback "^1.6.0" postcss "^8.4.4" @@ -3102,240 +3088,240 @@ vue "^3.2.24" vue-router "^4.0.12" -"@vuepress/cli@2.0.0-beta.31": - version "2.0.0-beta.31" - resolved "https://registry.npmmirror.com/@vuepress/cli/download/@vuepress/cli-2.0.0-beta.31.tgz#1a0048af4b8a30819f4dfe9403af94e2c3973e12" - integrity sha512-Kb6agjwyck40uSMR/RPtaYCDqka/SSdR8FJuwAey6DqCDIH1Ag+XHGzh+0tXrRMg5yqt21jQ+8Q//xKU4SqhSw== +"@vuepress/cli@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/cli/download/@vuepress/cli-2.0.0-beta.32.tgz#9a5d1a031e14b2f0aa5cc758d5c0420f987b2e0d" + integrity sha512-idQvMoII23tZ5n6uu5h+IlG+NLNQ0nEfE8xxEZNNf2peryHUdACHrXjtMlk0KzVUgHCjDjM54nY7Gygjh9BNTg== dependencies: - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" cac "^6.7.12" chokidar "^3.5.2" envinfo "^7.8.1" esbuild "^0.13.12" -"@vuepress/client@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/client/download/@vuepress/client-2.0.0-beta.29.tgz#a7c273eb18113795feb62fcbf7d66b269a2cbebe" - integrity sha512-hBXcsrEb63mJt8Qb9hGIu2nvXLF5z+HlweiRgXrIkkeJjbumJhXCfm5kqq+VIw8qNgRpVKOBcINCXN2XjjT3gQ== +"@vuepress/client@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/client/download/@vuepress/client-2.0.0-beta.32.tgz#865ba7e4137fdc82f3158b6bda84d9fb0920932b" + integrity sha512-nSvDsJiWUu+/oqOmI9nv4Tp9ei7+EyAhEaR+vMr7fcbVCGQlNmQo/coxjW6HRvMLR8Xul0Y4SH0Z21WJfZqw3Q== dependencies: - "@vuepress/shared" "2.0.0-beta.28" + "@vuepress/shared" "2.0.0-beta.32" vue "^3.2.24" vue-router "^4.0.12" -"@vuepress/core@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/core/download/@vuepress/core-2.0.0-beta.29.tgz#73b16a3eabe512b6c43c3efcf62ea547e129917c" - integrity sha512-4c58aU6eu+SW9I8XaOs/2n+NxkyR9ZMfvI3ZVu56Oai0/MIWtScBj1MMiGe2lrsU2sVPgqx/qRBODkAi9+ZNQg== +"@vuepress/core@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/core/download/@vuepress/core-2.0.0-beta.32.tgz#51e6772226ba14c14ea04f993b79ba2b89c062f7" + integrity sha512-LyjEEfRCEQJonR3SxVrVl44ZvLP6KKy6nFPinmrjuMe5GLHLSW4z/S+goxm8ka0Fblc51KxDZjtNshAlvYJ/OQ== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/markdown" "2.0.0-beta.29" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/markdown" "2.0.0-beta.32" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" gray-matter "^4.0.3" toml "^3.0.0" -"@vuepress/markdown@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/markdown/download/@vuepress/markdown-2.0.0-beta.29.tgz#367d98070f5a7fd8f6cdfaacb8401091a70755e6" - integrity sha512-BgFCiDfhM4bTKcMRLpvMtbxxUT5Xj4EPN1WQs9+WzFdWPPcq69PsuzA89yJlYxDk+3E+GBXGuA5Ztm2q6hMqsQ== +"@vuepress/markdown@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/markdown/download/@vuepress/markdown-2.0.0-beta.32.tgz#96da55464fef4e048ee5b6c3cfcfdd4264e210c9" + integrity sha512-YRkuGuANBzLQuDE8TBDr9NNFXAWl/Qh3dbwVfM960lY5dk5jPxhTqOH5OGj7skLqxBWG6b4TwqjDKkGGciGkDA== dependencies: "@types/markdown-it" "^12.2.3" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" markdown-it "^12.2.0" markdown-it-anchor "^8.4.1" markdown-it-emoji "^2.0.0" mdurl "^1.0.1" -"@vuepress/plugin-active-header-links@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-active-header-links/download/@vuepress/plugin-active-header-links-2.0.0-beta.29.tgz#baf5662d756ade20bc24f044a1f305f98154e897" - integrity sha512-XIHd0lwsz/08EeyO7n8iQCjvrIQAeC9YVZaOXfx6EJNhTrWyCt1FidhgNOTLrBHzi47pyutNfctw39GQaqJUKA== +"@vuepress/plugin-active-header-links@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-active-header-links/download/@vuepress/plugin-active-header-links-2.0.0-beta.32.tgz#8135b316e78214798ec5dc165586e4ecd71eeb07" + integrity sha512-AbkqP7uGmHyeuRRJMGmI/IGljxMgqz68WeqWYK23E9HisTnZVJek2AOavd+NsKWiHp/oSywQ7Vb0JDA9r4N0cQ== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" ts-debounce "^4.0.0" vue "^3.2.24" vue-router "^4.0.12" -"@vuepress/plugin-back-to-top@2.0.0-beta.30": - version "2.0.0-beta.30" - resolved "https://registry.npmmirror.com/@vuepress/plugin-back-to-top/download/@vuepress/plugin-back-to-top-2.0.0-beta.30.tgz#8b9e973edbcbb9e97d4cb2af45bac3a77bd9182a" - integrity sha512-0msFOSO9fyyLAoJd8Z55dnCuxMlTN2cRv3uiV+q2ts78YjK0kn3IqrzKmW28ca9zTPUyfBC/D6ErhvclsmCzBA== +"@vuepress/plugin-back-to-top@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-back-to-top/download/@vuepress/plugin-back-to-top-2.0.0-beta.32.tgz#9d206e6cbfbf3a910d6d4f4d083acc84604b88a4" + integrity sha512-hX1ijYYw9et6pOseo8RcvgobX6aLB6+yw0Cy0M8k4pW+fqHfqiagEgMXsWjQKTRUmN7rAdVyag6d8DLoHpxNYA== dependencies: - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" ts-debounce "^4.0.0" vue "^3.2.24" -"@vuepress/plugin-container@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-container/download/@vuepress/plugin-container-2.0.0-beta.29.tgz#292ac9bcb5361e21049b84892af5192292d03c34" - integrity sha512-Q148pzDOKQSfShCfQ3virS03xq9Gq320NzDYu+85R/bmpqqUVMdXar27iFiaF/HUQhQ8QSdkh5rstIEWSs+5Pw== +"@vuepress/plugin-container@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-container/download/@vuepress/plugin-container-2.0.0-beta.32.tgz#74d6cb52241772a9ae941f4eef818c2c91b994aa" + integrity sha512-crD54nbQ0PHjYle+e+7YGXrOnC5hCch9QqLTuCA7jKbrrs8yqTtNY1jK2Oc+ZCC6b8SlCeVm/rQCJvbqdp1FlQ== dependencies: "@types/markdown-it" "^12.2.3" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/markdown" "2.0.0-beta.29" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/markdown" "2.0.0-beta.32" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" markdown-it "^12.2.0" markdown-it-container "^3.0.0" "@vuepress/plugin-docsearch@^2.0.0-beta.22": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-docsearch/download/@vuepress/plugin-docsearch-2.0.0-beta.29.tgz#73fb3e72aed8cec73a00a1a48b993bff86a6e9cb" - integrity sha512-R+Kx3HIIqxiTCAnoNYbVlKAHfhxHJvz8BTcgtEdstsfHp0V+2JdvYBtlkUGlkNJDwID9AYNnJCBYPQ/AsKEs7A== + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-docsearch/download/@vuepress/plugin-docsearch-2.0.0-beta.32.tgz#57e60823ab79e04d2afec4129196350444ef08b3" + integrity sha512-BTpbYX1erDXT1kdlZYAHOmu5XwDRhFVVOgipnJ4IrDGgXaDgBvGIGFdBUbmSohtBSJGj/73PAc7xJG2Tga2m+A== dependencies: "@docsearch/css" "3.0.0-alpha.34" "@docsearch/js" "3.0.0-alpha.34" "@docsearch/react" "3.0.0-alpha.34" "@types/react" "^17.0.37" - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" preact "^10.6.2" vue "^3.2.24" vue-router "^4.0.12" -"@vuepress/plugin-external-link-icon@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-external-link-icon/download/@vuepress/plugin-external-link-icon-2.0.0-beta.29.tgz#1d9e96f8a7006bb52003f71eb0199813c9cf201e" - integrity sha512-4pOQXKtEOsWQgQ4+HUvKokJRBE3K0BVAPbTWd/WOkvRHkpP1AWXEcA5hHrOC3o1NPW7cZIWIJWydcRqo9nZBuA== +"@vuepress/plugin-external-link-icon@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-external-link-icon/download/@vuepress/plugin-external-link-icon-2.0.0-beta.32.tgz#c115a5b29b858c18109d01151e8c9147b91acdcd" + integrity sha512-MWnHrz3rxOUXwUXc58yraqEING0PqId9SVyE7VW9fbpnRuuU7CBaszpDsDlgOlGm4ch5MWliCcsZcFPlbZnu3A== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/markdown" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/markdown" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" vue "^3.2.24" -"@vuepress/plugin-git@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-git/download/@vuepress/plugin-git-2.0.0-beta.29.tgz#f2f12ed124e84bcbaf09ca17c2c44763628e8620" - integrity sha512-MiKoydGBn/rCtig7H4mQSnu9Zm41tWmHl4O9R81WJmSDdG3hGl6dfwxYQrTGIcL29/RT7fExjtd3gA7h18Ucig== +"@vuepress/plugin-git@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-git/download/@vuepress/plugin-git-2.0.0-beta.32.tgz#071c71131a602aa4dcd591c5387f6ff50f36fb9e" + integrity sha512-lg3VDiQZaPOm0pHWQgYcvO5fjoMDDIZad+xoAz2yCte4kA41pNvCFi3PcLfO9Vdj8iqc0VS1DBZNMcSTyybnrw== dependencies: - "@vuepress/core" "2.0.0-beta.29" + "@vuepress/core" "2.0.0-beta.32" execa "^5.1.1" -"@vuepress/plugin-medium-zoom@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-medium-zoom/download/@vuepress/plugin-medium-zoom-2.0.0-beta.29.tgz#453097a00db5211fd993b4258f367861781159a5" - integrity sha512-Uwx7pHyUnys52zRPNfv6Be8RtnoX6/w9qoBaw0aTg86DG47CFsV31Yt7+MKrqHqtYxwVBGMcDsW8+uhrANUUEQ== +"@vuepress/plugin-medium-zoom@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-medium-zoom/download/@vuepress/plugin-medium-zoom-2.0.0-beta.32.tgz#2e595e4a929070a809952af563fb3650030dac00" + integrity sha512-iJp7JLmH9imgh0HrKf5BKZDsGOvF09J4LNqk+rCRGhsd8fvx5m/trlB/2jXleZvrzhzwPrR6axE6GuWWQcz5eA== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" medium-zoom "^1.0.6" vue "^3.2.24" -"@vuepress/plugin-nprogress@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-nprogress/download/@vuepress/plugin-nprogress-2.0.0-beta.29.tgz#549db87198257a69635cd0439d044e51fc2a7c97" - integrity sha512-5eXrFSI+P8Io3lqp4KA4bhjNqIJAY1g7AulNdIyBr8ecVlv1bMAizyfSLCG8J7n9EJj3gVd2jJkI+/pQ5ttrTA== +"@vuepress/plugin-nprogress@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-nprogress/download/@vuepress/plugin-nprogress-2.0.0-beta.32.tgz#030b4719370c0dc6ad076d1457f437442a444343" + integrity sha512-EsYBDoUhtnUaAFTMKqyuDLepNyGw+DZT2Y76V3+9MyRMEYH3gTXGzCopdvoenQvaIQC+iz7EDEhzcc7aCDVI8A== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" nprogress "^0.2.0" vue "^3.2.24" vue-router "^4.0.12" -"@vuepress/plugin-palette@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-palette/download/@vuepress/plugin-palette-2.0.0-beta.29.tgz#487d1c2d6b45c66fbddbeb81be2be4e41128c834" - integrity sha512-GIVYcxH2pL3Tq4Yg8R15ZxGXrpu9okRfFBc6quW1+TKAJL8YoLk202x+XwQCfaHz76INbsaZA91AgAZAhBl1wA== +"@vuepress/plugin-palette@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-palette/download/@vuepress/plugin-palette-2.0.0-beta.32.tgz#39051d38b774c254b74ae324af000367fc7e8a5f" + integrity sha512-Yfnth8kYGaIfMAVkvQzWP+/ikWoIK0VTk7hdQtuWuOJlHs4nr/HIQuqvIZQuGR6UR7y90cgpcNs2FsLVEWzehQ== dependencies: - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" chokidar "^3.5.2" -"@vuepress/plugin-prismjs@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-prismjs/download/@vuepress/plugin-prismjs-2.0.0-beta.29.tgz#c00f504620cc16cd953ef8083ac41eb75c3a2cd0" - integrity sha512-POFM/LSBPO9Q15rXpqsVL1/c/Opj6YmVgAHC2dxST47tHlSrwvHgq9j1gYThgOkCe8u5javKakOjoRYr+WWSHA== +"@vuepress/plugin-prismjs@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-prismjs/download/@vuepress/plugin-prismjs-2.0.0-beta.32.tgz#9f63bdaf662064aaa804d1357d36fbee55326b1a" + integrity sha512-Id/HKWxYHY5Rc3T/0aeqEfCEmiRXoiGRjuQpvt2wuYlWZZDawCB6+uMCOpbcY8WeWDFpzVLzwUC9hiOVwUjvCg== dependencies: - "@vuepress/core" "2.0.0-beta.29" + "@vuepress/core" "2.0.0-beta.32" prismjs "^1.25.0" "@vuepress/plugin-pwa-popup@^2.0.0-beta.22": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-pwa-popup/download/@vuepress/plugin-pwa-popup-2.0.0-beta.29.tgz#70361358ce9569d245f065417dcb7adccc8f589f" - integrity sha512-orrK9byHxjWKIa6dpIJGkdCNj6YznfpCbxG5iKgTvpiptIDKwZIdZj4DD6H5PEFJwyKAKC1QADJblJeZZnNT6A== + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-pwa-popup/download/@vuepress/plugin-pwa-popup-2.0.0-beta.32.tgz#5eb97795fba6665c35515cf8948db325787935a5" + integrity sha512-ai940xf2iZ+Q6z6HQExybncm4JkJk4Hb248mfhZnrpYTMr5T30gYUepqA7qLCVhBUQl+tenAhJRva7m5SAHSeg== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/plugin-pwa" "2.0.0-beta.29" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/plugin-pwa" "2.0.0-beta.32" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" vue "^3.2.24" -"@vuepress/plugin-pwa@2.0.0-beta.29", "@vuepress/plugin-pwa@^2.0.0-beta.22": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-pwa/download/@vuepress/plugin-pwa-2.0.0-beta.29.tgz#e3538d00782890cec53f19b063aea17cdc3116e2" - integrity sha512-7ZgBZoSvTyzlULYiicFB3OjruXRr5Y/aYL+uf+9Jl3eFTsCU+wikcs/gD9HigipZg5Ei6XnGXoQOP4B2TtJHqw== +"@vuepress/plugin-pwa@2.0.0-beta.32", "@vuepress/plugin-pwa@^2.0.0-beta.22": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-pwa/download/@vuepress/plugin-pwa-2.0.0-beta.32.tgz#bbe2f1e70c6fd80dccadf26b6ecbc7f0e688afcf" + integrity sha512-pd2dI/tDZ/gB5iuxF7CbIpYsarzDJEoz/sHe7IbnwoPUSGodFG8VPmFr+l9o9bmnnL3BK0WyTjU3TL+NFzKFPQ== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" mitt "^3.0.0" register-service-worker "^1.7.2" vue "^3.2.24" workbox-build "^6.4.2" -"@vuepress/plugin-theme-data@2.0.0-beta.29": - version "2.0.0-beta.29" - resolved "https://registry.npmmirror.com/@vuepress/plugin-theme-data/download/@vuepress/plugin-theme-data-2.0.0-beta.29.tgz#88b76677c0a1ef71657a27414905773558301dae" - integrity sha512-tdQcKjFxuvEf3nD9udkoyEFx8OgNtalNEDUJFNEjJSrn7GHISXTI1w+0xAn4fA/gWQ+QbZC6e6R3lh0NEK0VSA== +"@vuepress/plugin-theme-data@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/plugin-theme-data/download/@vuepress/plugin-theme-data-2.0.0-beta.32.tgz#ce2bf86772163bcc2132d3e1cc9cb32a59049a82" + integrity sha512-20hC3fM9p+mcwgFsnZMjyoNdqgScTCHeGB2bDaxpENUNtXMIIg9SsNJQ59K5vAcNN54vwfk3Y3AKLPCJhHx1Pw== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" vue "^3.2.24" -"@vuepress/shared@2.0.0-beta.28": - version "2.0.0-beta.28" - resolved "https://registry.npmmirror.com/@vuepress/shared/download/@vuepress/shared-2.0.0-beta.28.tgz#9722d8578b5f861a100b5a89593a3b74e24be9d7" - integrity sha512-EXEIw8JjSNlhe+/kqWy6e66E7fE28z/ooJY8+b0Br7HCRBh09M3Kbon3JrUG+KeRFabxZSMr0AL2cmHYzL+tfA== +"@vuepress/shared@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/shared/download/@vuepress/shared-2.0.0-beta.32.tgz#8ac1dca241b124e083c06acbc61fe322eb4f0ee7" + integrity sha512-yQXzBrCyZPCAWzYB7AAIMf5TEb+WvvUXAugoC7jNXYILf/oGCq8fbc9LUH2X/YNZFNsdm+r9N7JfDZ+uddBHkA== dependencies: "@vue/shared" "^3.2.24" -"@vuepress/theme-default@2.0.0-beta.31": - version "2.0.0-beta.31" - resolved "https://registry.npmmirror.com/@vuepress/theme-default/download/@vuepress/theme-default-2.0.0-beta.31.tgz#e96f9e8118cf206eff513b6f238a9013199e662b" - integrity sha512-g+Nf7CYLe7Whg0kmrEGS33EXGGpdOIVKOwxWRIgJiZBLpcDEdsVeAAV+LhDOCbVJkPuVjLNdSzRexaxHhHjPhQ== +"@vuepress/theme-default@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/theme-default/download/@vuepress/theme-default-2.0.0-beta.32.tgz#894d67be9f7c7f171c154a5c4ee74650d0642f4c" + integrity sha512-K/Gy8pozHqgzYsilFSz6Bx+XWr2e8wRR2O/ggK68S1IH64YX908NUzHv1CXy8tERmTbBbTLdSV7CrE4Z1d4HWg== dependencies: - "@vuepress/client" "2.0.0-beta.29" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/plugin-active-header-links" "2.0.0-beta.29" - "@vuepress/plugin-back-to-top" "2.0.0-beta.30" - "@vuepress/plugin-container" "2.0.0-beta.29" - "@vuepress/plugin-external-link-icon" "2.0.0-beta.29" - "@vuepress/plugin-git" "2.0.0-beta.29" - "@vuepress/plugin-medium-zoom" "2.0.0-beta.29" - "@vuepress/plugin-nprogress" "2.0.0-beta.29" - "@vuepress/plugin-palette" "2.0.0-beta.29" - "@vuepress/plugin-prismjs" "2.0.0-beta.29" - "@vuepress/plugin-theme-data" "2.0.0-beta.29" - "@vuepress/shared" "2.0.0-beta.28" - "@vuepress/utils" "2.0.0-beta.28" + "@vuepress/client" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/plugin-active-header-links" "2.0.0-beta.32" + "@vuepress/plugin-back-to-top" "2.0.0-beta.32" + "@vuepress/plugin-container" "2.0.0-beta.32" + "@vuepress/plugin-external-link-icon" "2.0.0-beta.32" + "@vuepress/plugin-git" "2.0.0-beta.32" + "@vuepress/plugin-medium-zoom" "2.0.0-beta.32" + "@vuepress/plugin-nprogress" "2.0.0-beta.32" + "@vuepress/plugin-palette" "2.0.0-beta.32" + "@vuepress/plugin-prismjs" "2.0.0-beta.32" + "@vuepress/plugin-theme-data" "2.0.0-beta.32" + "@vuepress/shared" "2.0.0-beta.32" + "@vuepress/utils" "2.0.0-beta.32" "@vueuse/core" "^7.1.2" sass "^1.44.0" sass-loader "^12.4.0" vue "^3.2.24" vue-router "^4.0.12" -"@vuepress/utils@2.0.0-beta.28": - version "2.0.0-beta.28" - resolved "https://registry.npmmirror.com/@vuepress/utils/download/@vuepress/utils-2.0.0-beta.28.tgz#bcfbf5d2e044cdd00b8215e3185e2c899cb360d1" - integrity sha512-Kho1I20Unc61oniulapxjla30q6SmtMkqAk3X9KJ87Myd7qmXrSvZXHwz5e+IW8rh18yDgWz2FyRFCqNmKvbzA== +"@vuepress/utils@2.0.0-beta.32": + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/@vuepress/utils/download/@vuepress/utils-2.0.0-beta.32.tgz#2a68575324897ccb56abb3882e43aeea9dbc8d86" + integrity sha512-ZbEM23BI7qbLnZYNAYoLF3EgWXVtO/MnB5aYKTC2+dHX90mEkfFoIBk00ICSi28HZJkW0OmsyMVFoUbI8QBvUw== dependencies: "@types/debug" "^4.1.7" "@types/fs-extra" "^9.0.13" "@types/hash-sum" "^1.0.0" - "@vuepress/shared" "2.0.0-beta.28" + "@vuepress/shared" "2.0.0-beta.32" chalk "^4.1.2" debug "^4.3.3" fs-extra "^10.0.0" @@ -3344,18 +3330,33 @@ ora "^5.4.1" upath "^2.0.1" -"@vueuse/core@^7.1.2": - version "7.4.1" - resolved "https://registry.npmmirror.com/@vueuse/core/download/@vueuse/core-7.4.1.tgz#81ede3f67dfd58af8284c910ac2fee25458892c6" - integrity sha512-8UeLPCAieeQLXFHF1/28SIEK6ILLPb/4hp03hR+xkXF00gB/YUp0CEVcRAL9uQ8HTZa3S2T/jTISMc1ZjilM0A== +"@vueuse/core@^6.7.5": + version "6.9.2" + resolved "https://registry.npmmirror.com/@vueuse/core/download/@vueuse/core-6.9.2.tgz#76b16d01f33cf367dd1a2d7f2e31d106443ceb8a" + integrity sha512-FRwl4ccSFuHZBHLGgS9TMv/+Dd6XFaL4o9nph2qtgQIV+z29RBFokw08XjHfykiENRzB01MjYHJ7iRUnsIFQXg== dependencies: - "@vueuse/shared" "7.4.1" + "@vueuse/shared" "6.9.2" vue-demi "*" -"@vueuse/shared@7.4.1": - version "7.4.1" - resolved "https://registry.npmmirror.com/@vueuse/shared/download/@vueuse/shared-7.4.1.tgz#0aa090147fbd66ba56334ada1ffa2dafab815c1b" - integrity sha512-Pzb7XoHIcgPwwBJ5Ow9lZb0HTDyaLDV3pgxKauPGTMN9qvEylG06kUG+VTjJXkPsRtiGu46di8XyFeMw2dongA== +"@vueuse/core@^7.1.2": + version "7.5.1" + resolved "https://registry.npmmirror.com/@vueuse/core/download/@vueuse/core-7.5.1.tgz#3038a0ca6e16f6885d2457778260712180422526" + integrity sha512-GczfdTWqH483zkUHdDYiLm0Tn51OtsQXYc+eBKKIeolh0mgn682KbSYmkrjNytaF7qGc74YxMDAYjkPBW6V2Pg== + dependencies: + "@vueuse/shared" "7.5.1" + vue-demi "*" + +"@vueuse/shared@6.9.2": + version "6.9.2" + resolved "https://registry.npmmirror.com/@vueuse/shared/download/@vueuse/shared-6.9.2.tgz#97e4369fa7262ebc96fe1d6e210268f30b037005" + integrity sha512-lAiMh6XROs0kSKVd0Yb/6GKoQMxC1fYrFDi6opvQWISPtcqRNluRrQxLUZ3WTI78ovtoKRLktjhkFAtydcfFDg== + dependencies: + vue-demi "*" + +"@vueuse/shared@7.5.1": + version "7.5.1" + resolved "https://registry.npmmirror.com/@vueuse/shared/download/@vueuse/shared-7.5.1.tgz#d88a8d8a4799c30e7dd4f965808e78b3793c3da6" + integrity sha512-zMQEuYJyTmr5Hj2rYgSbb4H/cSI8mdaa9dUuw20j6rPV+xLV11y7vCyIkxo31uODDr0p77FMlProKzNDiK9rAA== dependencies: vue-demi "*" @@ -3531,7 +3532,7 @@ JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.npmmirror.com/JSONStream/download/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha1-MgjB8I06TZkmGrZPkjArwV4RHKA= + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" @@ -3584,13 +3585,13 @@ acorn-walk@^8.0.0, acorn-walk@^8.1.1: acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" - resolved "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1637225492710&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + resolved "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1: - version "8.6.0" - resolved "https://registry.npmmirror.com/acorn/download/acorn-8.6.0.tgz?cache=0&sync_timestamp=1637225492710&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" - integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== + version "8.7.0" + resolved "https://registry.npmmirror.com/acorn/download/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== add-stream@^1.0.0: version "1.0.0" @@ -3610,9 +3611,9 @@ agent-base@6, agent-base@^6.0.2: debug "4" agentkeepalive@^4.1.3: - version "4.1.4" - resolved "https://registry.npmmirror.com/agentkeepalive/download/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" - integrity sha1-2SgCikhiyxFxjlUieHLoQqRMlFs= + version "4.2.0" + resolved "https://registry.npmmirror.com/agentkeepalive/download/agentkeepalive-4.2.0.tgz#616ce94ccb41d1a39a45d203d8076fe98713062d" + integrity sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw== dependencies: debug "^4.1.0" depd "^1.1.2" @@ -3653,7 +3654,7 @@ ajv-keywords@^5.0.0: ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6: version "6.12.6" resolved "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -3761,28 +3762,6 @@ ansi-styles@^5.0.0: resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s= -ant-design-vue@^2.2.0: - version "2.2.8" - resolved "https://registry.npmmirror.com/ant-design-vue/download/ant-design-vue-2.2.8.tgz#fa87cf6842d8ee9a0d8af393ff4099ecc4072f2b" - integrity sha1-+ofPaELY7poNivOT/0CZ7MQHLys= - dependencies: - "@ant-design/icons-vue" "^6.0.0" - "@babel/runtime" "^7.10.5" - "@simonwep/pickr" "~1.8.0" - array-tree-filter "^2.1.0" - async-validator "^3.3.0" - dom-align "^1.12.1" - dom-scroll-into-view "^2.0.0" - lodash "^4.17.21" - lodash-es "^4.17.15" - moment "^2.27.0" - omit.js "^2.0.0" - resize-observer-polyfill "^1.5.1" - scroll-into-view-if-needed "^2.2.25" - shallow-equal "^1.0.0" - vue-types "^3.0.0" - warning "^4.0.0" - any-promise@^1.0.0: version "1.3.0" resolved "https://registry.npmmirror.com/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -3885,11 +3864,6 @@ array-includes@^3.1.1: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-tree-filter@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/array-tree-filter/download/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" - integrity sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA= - array-union@^1.0.1: version "1.0.2" resolved "https://registry.npmmirror.com/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -3968,10 +3942,10 @@ async-limiter@~1.0.0: resolved "https://registry.npmmirror.com/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= -async-validator@^3.3.0: - version "3.5.2" - resolved "https://registry.npmmirror.com/async-validator/download/async-validator-3.5.2.tgz?cache=0&sync_timestamp=1634529502627&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasync-validator%2Fdownload%2Fasync-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500" - integrity sha1-aOhmqWgk6LJpT/eoMcGiXETV5QA= +async-validator@^4.0.1: + version "4.0.7" + resolved "https://registry.npmmirror.com/async-validator/download/async-validator-4.0.7.tgz?cache=0&sync_timestamp=1634529502627&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasync-validator%2Fdownload%2Fasync-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe" + integrity sha1-A0oP0hA6ay6/AQ2nUYO+wpkkev4= async@0.9.x: version "0.9.2" @@ -4001,16 +3975,16 @@ atob@^2.1.2: integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= autoprefixer@^10.2.4, autoprefixer@^10.4.0: - version "10.4.0" - resolved "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-10.4.0.tgz#c3577eb32a1079a440ec253e404eaf1eb21388c8" - integrity sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA== + version "10.4.1" + resolved "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-10.4.1.tgz#1735959d6462420569bc42408016acbc56861c12" + integrity sha512-B3ZEG7wtzXDRCEFsan7HmR2AeNsxdJB0+sEC0Hc5/c2NbhJqPwuZm+tn233GBVw82L+6CtD6IPSfVruwKjfV3A== dependencies: - browserslist "^4.17.5" - caniuse-lite "^1.0.30001272" - fraction.js "^4.1.1" + browserslist "^4.19.1" + caniuse-lite "^1.0.30001294" + fraction.js "^4.1.2" normalize-range "^0.1.2" picocolors "^1.0.0" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" aws-sign2@~0.7.0: version "0.7.0" @@ -4203,7 +4177,7 @@ bindings@^1.5.0: bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmmirror.com/bl/download/bl-4.1.0.tgz?cache=0&sync_timestamp=1632752926555&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbl%2Fdownload%2Fbl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmmirror.com/bl/download/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo= dependencies: buffer "^5.5.0" @@ -4451,10 +4425,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001272, caniuse-lite@^1.0.30001286: - version "1.0.30001292" - resolved "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001292.tgz#4a55f61c06abc9595965cfd77897dc7bc1cdc456" - integrity sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001294: + version "1.0.30001294" + resolved "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001294.tgz#4849f27b101fd59ddee3751598c663801032533d" + integrity sha512-LiMlrs1nSKZ8qkNhpUf5KD0Al1KCBE3zaT7OLOwEkagXMEDij98SiOovn9wxVGQpklk9vVC/pUSqgYmkmKOS8g== caseless@~0.12.0: version "0.12.0" @@ -4623,7 +4597,7 @@ cli-spinners@^2.5.0: cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/cli-truncate/download/cli-truncate-2.1.0.tgz?cache=0&sync_timestamp=1633786944437&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcli-truncate%2Fdownload%2Fcli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + resolved "https://registry.npmmirror.com/cli-truncate/download/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha1-w54ovwXtzeW+O5iZKiLe7Vork8c= dependencies: slice-ansi "^3.0.0" @@ -4857,11 +4831,6 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" -compute-scroll-into-view@^1.0.17: - version "1.0.17" - resolved "https://registry.npmmirror.com/compute-scroll-into-view/download/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" - integrity sha1-aojxis2dQunPS6pr7H4FImB6t6s= - concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmmirror.com/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -4931,9 +4900,9 @@ conventional-changelog-angular@^5.0.0, conventional-changelog-angular@^5.0.12: q "^1.5.1" conventional-changelog-conventionalcommits@^4.3.1: - version "4.6.2" - resolved "https://registry.npmmirror.com/conventional-changelog-conventionalcommits/download/conventional-changelog-conventionalcommits-4.6.2.tgz#6debf07a894f7c7e22b950e2f872de334d5d49ed" - integrity sha512-fo+VhM0VtD3wdHZtrPhgvTFjAhAMUjYeQV6B5+DB/cupG1O554pJdTwrvBInq8JLHl+GucKQpZycMPye/OpgSw== + version "4.6.3" + resolved "https://registry.npmmirror.com/conventional-changelog-conventionalcommits/download/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2" + integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== dependencies: compare-func "^2.0.0" lodash "^4.17.15" @@ -4965,13 +4934,13 @@ conventional-changelog-preset-loader@^2.3.4: integrity sha1-FKhVq7/9WQJ/1gJYHx802YYupEw= conventional-changelog-writer@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/conventional-changelog-writer/download/conventional-changelog-writer-5.0.0.tgz#c4042f3f1542f2f41d7d2e0d6cad23aba8df8eec" - integrity sha1-xAQvPxVC8vQdfS4NbK0jq6jfjuw= + version "5.0.1" + resolved "https://registry.npmmirror.com/conventional-changelog-writer/download/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== dependencies: conventional-commits-filter "^2.0.7" dateformat "^3.0.0" - handlebars "^4.7.6" + handlebars "^4.7.7" json-stringify-safe "^5.0.1" lodash "^4.17.15" meow "^8.0.0" @@ -4993,9 +4962,9 @@ conventional-commits-filter@^2.0.7: modify-values "^1.0.0" conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.2.0: - version "3.2.3" - resolved "https://registry.npmmirror.com/conventional-commits-parser/download/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" - integrity sha1-/ENwRpgjlFHj7zX9HY7WRPRr2G4= + version "3.2.4" + resolved "https://registry.npmmirror.com/conventional-commits-parser/download/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" @@ -5070,7 +5039,7 @@ core-js-compat@^3.18.0, core-js-compat@^3.19.1: browserslist "^4.19.1" semver "7.0.0" -core-js@^3.15.1, core-js@^3.6.1, core-js@^3.8.3: +core-js@^3.6.1, core-js@^3.8.3: version "3.20.1" resolved "https://registry.npmmirror.com/core-js/download/core-js-3.20.1.tgz#eb1598047b7813572f1dc24b7c6a95528c99eef3" integrity sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg== @@ -5603,11 +5572,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-align@^1.12.1: - version "1.12.2" - resolved "https://registry.npmmirror.com/dom-align/download/dom-align-1.12.2.tgz#0f8164ebd0c9c21b0c790310493cd855892acd4b" - integrity sha1-D4Fk69DJwhsMeQMQSTzYVYkqzUs= - dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.npmmirror.com/dom-converter/download/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -5615,11 +5579,6 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-scroll-into-view@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/dom-scroll-into-view/download/dom-scroll-into-view-2.0.1.tgz#0decc8522801fd8d3f1c6ba355a74d382c5f989b" - integrity sha1-DezIUigB/Y0/HGujVadNOCxfmJs= - dom-serializer@^1.0.1: version "1.3.2" resolved "https://registry.npmmirror.com/dom-serializer/download/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" @@ -5710,9 +5669,9 @@ ejs@^3.1.6: jake "^10.6.1" electron-to-chromium@^1.4.17: - version "1.4.28" - resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.28.tgz#fef0e92e281df6d568f482d8d53c34ca5374de48" - integrity sha512-Gzbf0wUtKfyPaqf0Plz+Ctinf9eQIzxEqBHwSvbGfeOm9GMNdLxyu1dNiCUfM+x6r4BE0xUJNh3Nmg9gfAtTmg== + version "1.4.30" + resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.30.tgz#0f75a1dce26dffbd5a0f7212e5b87fe0b61cbc76" + integrity sha512-609z9sIMxDHg+TcR/VB3MXwH+uwtrYyeAwWc/orhnr90ixs6WVGSrt85CDLGUdNnLqCA7liv426V20EecjvflQ== emittery@^0.8.1: version "0.8.1" @@ -6092,7 +6051,7 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/eslint-utils/download/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + resolved "https://registry.npmmirror.com/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1632754013477&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc= dependencies: eslint-visitor-keys "^1.1.0" @@ -6665,7 +6624,7 @@ forwarded@0.2.0: resolved "https://registry.npmmirror.com/forwarded/download/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE= -fraction.js@^4.1.1: +fraction.js@^4.1.2: version "4.1.2" resolved "https://registry.npmmirror.com/fraction.js/download/fraction.js-4.1.2.tgz?cache=0&sync_timestamp=1636702345533&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffraction.js%2Fdownload%2Ffraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== @@ -6684,7 +6643,7 @@ fresh@0.5.2: fs-extra@8.1.0: version "8.1.0" - resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1632801157009&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= dependencies: graceful-fs "^4.2.0" @@ -6693,7 +6652,7 @@ fs-extra@8.1.0: fs-extra@^10.0.0: version "10.0.0" - resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-10.0.0.tgz?cache=0&sync_timestamp=1632801157009&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" integrity sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E= dependencies: graceful-fs "^4.2.0" @@ -6702,7 +6661,7 @@ fs-extra@^10.0.0: fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-9.1.0.tgz?cache=0&sync_timestamp=1632801157009&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0= dependencies: at-least-node "^1.0.0" @@ -6749,7 +6708,7 @@ function-bind@^1.1.1: functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz?cache=0&sync_timestamp=1632754013635&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffunctional-red-black-tree%2Fdownload%2Ffunctional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.npmmirror.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gauge@~2.7.3: @@ -6812,7 +6771,7 @@ get-port@^5.1.1: get-stdin@8.0.0: version "8.0.0" - resolved "https://registry.npmmirror.com/get-stdin/download/get-stdin-8.0.0.tgz?cache=0&sync_timestamp=1632753622347&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fget-stdin%2Fdownload%2Fget-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + resolved "https://registry.npmmirror.com/get-stdin/download/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" integrity sha1-y61qc/63X27rIrqeAfiaooqpelM= get-stream@^4.0.0: @@ -6855,9 +6814,9 @@ getpass@^0.1.1: assert-plus "^1.0.0" git-raw-commits@^2.0.0, git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.npmmirror.com/git-raw-commits/download/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha1-4iVe2VY7HJw+pr0FgGQQKQKXu8E= + version "2.0.11" + resolved "https://registry.npmmirror.com/git-raw-commits/download/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== dependencies: dargs "^7.0.0" lodash "^4.17.15" @@ -7036,7 +6995,7 @@ handle-thing@^2.0.0: resolved "https://registry.npmmirror.com/handle-thing/download/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha1-hX95zjWVgMNA1DCBzGSJcNC7I04= -handlebars@^4.7.6: +handlebars@^4.7.7: version "4.7.7" resolved "https://registry.npmmirror.com/handlebars/download/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== @@ -7574,7 +7533,7 @@ ip@^1.1.0, ip@^1.1.5: ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" - resolved "https://registry.npmmirror.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz?cache=0&sync_timestamp=1632797352158&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fipaddr.js%2Fdownload%2Fipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmmirror.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= is-absolute-url@^3.0.3: @@ -7832,11 +7791,6 @@ is-plain-obj@^2.0.0: resolved "https://registry.npmmirror.com/is-plain-obj/download/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha1-ReQuN/zPH0Dajl927iFRWEDAkoc= -is-plain-object@3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/is-plain-object/download/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" - integrity sha1-Zi2S0kwKpDAkB7DUXSHyJRyF+Fs= - is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmmirror.com/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -8014,9 +7968,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/istanbul-reports/download/istanbul-reports-3.1.2.tgz#b80e13cbab0120e1c367ebaa099862361aed5ead" - integrity sha512-0gHxuT1NNC0aEIL1zbJ+MTgPbbHhU77eJPuU35WKA7TgXiSNlCAx4PENoMrH0Or6M2H80TaZcWKhM0IK6V8gRw== + version "3.1.3" + resolved "https://registry.npmmirror.com/istanbul-reports/download/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" + integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -8490,7 +8444,7 @@ joi@17.3.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= @@ -8498,7 +8452,7 @@ joi@17.3.0: js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.npmmirror.com/js-yaml/download/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc= + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -8558,7 +8512,7 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1632754045516&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= json-schema-traverse@^0.4.1: @@ -8707,7 +8661,7 @@ lerna@^4.0.0: less-loader@^8.0.0: version "8.1.1" resolved "https://registry.npmmirror.com/less-loader/download/less-loader-8.1.1.tgz#ababe912580457ad00a4318146aac5b53e023f42" - integrity sha1-q6vpElgEV60ApDGBRqrFtT4CP0I= + integrity sha512-K93jJU7fi3n6rxVvzp8Cb88Uy9tcQKfHlkoezHwKILXhlNYiRQl4yowLIkQqmBXOH/5I8yoKiYeIf781HGkW9g== dependencies: klona "^2.0.4" @@ -8904,10 +8858,10 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash-es@^4.17.15: +lodash-es@^4.17.15, lodash-es@^4.17.21: version "4.17.21" resolved "https://registry.npmmirror.com/lodash-es/download/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha1-Q+YmxG5lkbd1C+srUBFzkMYJ4+4= + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash._reinterpolate@^3.0.0: version "3.0.0" @@ -9002,13 +8956,6 @@ longest@^2.0.1: resolved "https://registry.npmmirror.com/longest/download/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - lower-case@^2.0.2: version "2.0.2" resolved "https://registry.npmmirror.com/lower-case/download/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -9445,11 +9392,6 @@ modify-values@^1.0.0: resolved "https://registry.npmmirror.com/modify-values/download/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha1-s5OfpgVUZHTj4+PGPWS9Q7TuYCI= -moment@^2.27.0: - version "2.29.1" - resolved "https://registry.npmmirror.com/moment/download/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M= - monaco-editor-webpack-plugin@^1.9.1: version "1.9.1" resolved "https://registry.npmmirror.com/monaco-editor-webpack-plugin/download/monaco-editor-webpack-plugin-1.9.1.tgz#eb4bbb1c5e5bfb554541c1ae1542e74c2a9f43fd" @@ -9557,11 +9499,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -nanopop@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/nanopop/download/nanopop-2.1.0.tgz#23476513cee2405888afd2e8a4b54066b70b9e60" - integrity sha1-I0dlE87iQFiIr9LopLVAZrcLnmA= - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -9702,6 +9639,11 @@ normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.npmmirror.com/normalize-url/download/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha1-QNCIW1Nd7/4/MUe+yHfQX+TFZoo= +normalize-wheel@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/normalize-wheel/download/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45" + integrity sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU= + npm-bundled@^1.1.1: version "1.1.2" resolved "https://registry.npmmirror.com/npm-bundled/download/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" @@ -9792,7 +9734,7 @@ npm-registry-fetch@^9.0.0: npm-run-all@^4.1.5: version "4.1.5" - resolved "https://registry.npmmirror.com/npm-run-all/download/npm-run-all-4.1.5.tgz?cache=0&sync_timestamp=1632815060975&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnpm-run-all%2Fdownload%2Fnpm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + resolved "https://registry.npmmirror.com/npm-run-all/download/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" integrity sha1-BEdiAqFe4OLiFAgIYb/xKlHZj7o= dependencies: ansi-styles "^3.2.1" @@ -9935,11 +9877,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.npmmirror.com/obuf/download/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4= -omit.js@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/omit.js/download/omit.js-2.0.2.tgz#dd9b8436fab947a5f3ff214cb2538631e313ec2f" - integrity sha1-3ZuENvq5R6Xz/yFMslOGMeMT7C8= - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -10725,7 +10662,7 @@ postcss-reduce-transforms@^5.0.1: postcss-safe-parser@^5.0.2: version "5.0.2" - resolved "https://registry.npmmirror.com/postcss-safe-parser/download/postcss-safe-parser-5.0.2.tgz?cache=0&sync_timestamp=1632754382511&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-safe-parser%2Fdownload%2Fpostcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" + resolved "https://registry.npmmirror.com/postcss-safe-parser/download/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" integrity sha1-RZ3Sffa8K6ZGCIJLo55F2s9ehS0= dependencies: postcss "^8.1.0" @@ -10833,7 +10770,7 @@ process-nextick-args@~2.0.0: progress@^2.0.0: version "2.0.3" resolved "https://registry.npmmirror.com/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== promise-inflight@^1.0.1: version "1.0.1" @@ -10962,7 +10899,7 @@ query-string@^6.13.8: querystring@0.2.0: version "0.2.0" resolved "https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== querystringify@^2.1.1: version "2.2.0" @@ -11229,7 +11166,7 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: regexpp@^3.0.0, regexpp@^3.1.0: version "3.2.0" - resolved "https://registry.npmmirror.com/regexpp/download/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmmirror.com/regexpp/download/regexpp-3.2.0.tgz?cache=0&sync_timestamp=1632754013810&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregexpp%2Fdownload%2Fregexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha1-BCWido2PI7rXDKS5BGH6LxIT4bI= regexpu-core@^4.7.1: @@ -11273,7 +11210,7 @@ remove-trailing-separator@^1.0.1: renderkid@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/renderkid/download/renderkid-3.0.0.tgz?cache=0&sync_timestamp=1635212591728&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frenderkid%2Fdownload%2Frenderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + resolved "https://registry.npmmirror.com/renderkid/download/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" integrity sha1-X9gj5NaVHTc1jsyaWLHwaDa2Joo= dependencies: css-select "^4.1.3" @@ -11338,11 +11275,6 @@ requires-port@^1.0.0: resolved "https://registry.npmmirror.com/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.npmmirror.com/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ= - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -11486,17 +11418,17 @@ run-parallel@^1.1.9: rxjs@^6.4.0, rxjs@^6.6.0: version "6.6.7" - resolved "https://registry.npmmirror.com/rxjs/download/rxjs-6.6.7.tgz?cache=0&sync_timestamp=1633554575612&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frxjs%2Fdownload%2Frxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + resolved "https://registry.npmmirror.com/rxjs/download/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk= dependencies: tslib "^1.9.0" rxjs@^7.4.0: - version "7.4.0" - resolved "https://registry.npmmirror.com/rxjs/download/rxjs-7.4.0.tgz?cache=0&sync_timestamp=1633554575612&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frxjs%2Fdownload%2Frxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" - integrity sha1-oSpE1+6/AW9f8kQbh/KMmlHOvGg= + version "7.5.1" + resolved "https://registry.npmmirror.com/rxjs/download/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" + integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== dependencies: - tslib "~2.1.0" + tslib "^2.1.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" @@ -11537,9 +11469,9 @@ sass-loader@^12.4.0: neo-async "^2.6.2" sass@^1.32.11, sass@^1.44.0: - version "1.45.1" - resolved "https://registry.npmmirror.com/sass/download/sass-1.45.1.tgz#fa03951f924d1ba5762949567eaf660e608a1ab0" - integrity sha512-pwPRiq29UR0o4X3fiQyCtrESldXvUQAAE0QmcJTpsI4kuHHcLzZ54M1oNBVIXybQv8QF2zfkpFcTxp8ta97dUA== + version "1.45.2" + resolved "https://registry.npmmirror.com/sass/download/sass-1.45.2.tgz#130b428c1692201cfa181139835d6fc378a33323" + integrity sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -11589,13 +11521,6 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" -scroll-into-view-if-needed@^2.2.25: - version "2.2.28" - resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/download/scroll-into-view-if-needed-2.2.28.tgz#5a15b2f58a52642c88c8eca584644e01703d645a" - integrity sha1-WhWy9YpSZCyIyOylhGROAXA9ZFo= - dependencies: - compute-scroll-into-view "^1.0.17" - section-matter@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/section-matter/download/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -11755,11 +11680,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallow-equal@^1.0.0: - version "1.2.1" - resolved "https://registry.npmmirror.com/shallow-equal/download/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" - integrity sha1-TBar+lYEOqINBQMk76aJQLDaedo= - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -11987,27 +11907,27 @@ source-map-url@^0.4.0: source-map@0.5.6: version "0.5.6" - resolved "https://registry.npmmirror.com/source-map/download/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + resolved "https://registry.npmmirror.com/source-map/download/source-map-0.5.6.tgz?cache=0&sync_timestamp=1632753431597&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmmirror.com/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmmirror.com/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1632753431597&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" - resolved "https://registry.npmmirror.com/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmmirror.com/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1632753431597&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" - resolved "https://registry.npmmirror.com/source-map/download/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + resolved "https://registry.npmmirror.com/source-map/download/source-map-0.7.3.tgz?cache=0&sync_timestamp=1632753431597&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha1-UwL4FpAxc1ImVECS5kmB91F1A4M= source-map@^0.8.0-beta.0: version "0.8.0-beta.0" - resolved "https://registry.npmmirror.com/source-map/download/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + resolved "https://registry.npmmirror.com/source-map/download/source-map-0.8.0-beta.0.tgz?cache=0&sync_timestamp=1632753431597&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" integrity sha1-1MG7QsP37pJfAFknuhBwng0dHxE= dependencies: whatwg-url "^7.0.0" @@ -12027,7 +11947,7 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmmirror.com/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmmirror.com/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz?cache=0&sync_timestamp=1632753435168&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fspdx-exceptions%2Fdownload%2Fspdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0= spdx-expression-parse@^3.0.0: @@ -12154,6 +12074,11 @@ std-env@^3.0.1: resolved "https://registry.npmmirror.com/std-env/download/std-env-3.0.1.tgz#bc4cbc0e438610197e34c2d79c3df30b491f5182" integrity sha1-vEy8DkOGEBl+NMLXnD3zC0kfUYI= +stickybits@^3.7.9: + version "3.7.9" + resolved "https://registry.npmmirror.com/stickybits/download/stickybits-3.7.9.tgz#0e469ffb960e1e661bd308ba4da370dc439902bf" + integrity sha1-Dkaf+5YOHmYb0wi6TaNw3EOZAr8= + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/strict-uri-encode/download/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -12476,12 +12401,12 @@ tar@^6.0.2, tar@^6.1.0: temp-dir@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/temp-dir/download/temp-dir-1.0.0.tgz?cache=0&sync_timestamp=1632754425165&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftemp-dir%2Fdownload%2Ftemp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + resolved "https://registry.npmmirror.com/temp-dir/download/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= temp-dir@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/temp-dir/download/temp-dir-2.0.0.tgz?cache=0&sync_timestamp=1632754425165&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftemp-dir%2Fdownload%2Ftemp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + resolved "https://registry.npmmirror.com/temp-dir/download/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" integrity sha1-vekrBb3+sVFugEycAK1FF38xMh4= temp-write@^4.0.0: @@ -12768,16 +12693,11 @@ tslib@^1.10.0, tslib@^1.9.0: resolved "https://registry.npmmirror.com/tslib/download/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha1-zy04vcNKE0vK8QkcQfZhni9nLQA= -tslib@^2.0.3: +tslib@^2.0.3, tslib@^2.1.0: version "2.3.1" resolved "https://registry.npmmirror.com/tslib/download/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE= -tslib@~2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/tslib/download/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.npmmirror.com/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -12806,7 +12726,7 @@ type-check@~0.3.2: type-detect@4.0.8: version "4.0.8" - resolved "https://registry.npmmirror.com/type-detect/download/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmmirror.com/type-detect/download/type-detect-4.0.8.tgz?cache=0&sync_timestamp=1632753479051&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-detect%2Fdownload%2Ftype-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw= type-fest@^0.16.0: @@ -13013,9 +12933,9 @@ url-loader@^4.1.1: schema-utils "^3.0.0" url-parse@^1.4.3, url-parse@^1.5.3: - version "1.5.3" - resolved "https://registry.npmmirror.com/url-parse/download/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" - integrity sha1-ccEwPTj7Zjmt4YPCmSyMwGht+GI= + version "1.5.4" + resolved "https://registry.npmmirror.com/url-parse/download/url-parse-1.5.4.tgz#e4f645a7e2a0852cc8a66b14b292a3e9a11a97fd" + integrity sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -13040,7 +12960,7 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: util-promisify@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/util-promisify/download/util-promisify-2.1.0.tgz?cache=0&sync_timestamp=1632814755562&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Futil-promisify%2Fdownload%2Futil-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + resolved "https://registry.npmmirror.com/util-promisify/download/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= dependencies: object.getownpropertydescriptors "^2.0.3" @@ -13096,7 +13016,7 @@ validate-npm-package-name@^3.0.0: vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmmirror.com/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmmirror.com/vary/download/vary-1.1.2.tgz?cache=0&sync_timestamp=1632753500369&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvary%2Fdownload%2Fvary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= verror@1.10.0: @@ -13109,9 +13029,9 @@ verror@1.10.0: extsprintf "^1.2.0" vite@^2.7.1: - version "2.7.7" - resolved "https://registry.npmmirror.com/vite/download/vite-2.7.7.tgz#f2f1af5f9fc409053130261416000447347bc203" - integrity sha512-Nm4ingl//gMSj/p1aCBHuTc5Fd8W8Mwdci/HUvqCVq8xaJqF7z08S/LRq1M9kS0jRfJk1/f/CwUyQAr6YgsOLw== + version "2.7.10" + resolved "https://registry.npmmirror.com/vite/download/vite-2.7.10.tgz#d12c4c10e56a0ecf7890cb529c15996c6111218f" + integrity sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w== dependencies: esbuild "^0.13.12" postcss "^8.4.5" @@ -13141,7 +13061,7 @@ vue-eslint-parser@^7.10.0, vue-eslint-parser@^7.6.0: vue-i18n@^9.0.0: version "9.1.9" resolved "https://registry.npmmirror.com/vue-i18n/download/vue-i18n-9.1.9.tgz#cb53e06ab5cc5b7eed59332f151caf48d47be9bb" - integrity sha1-y1PgarXMW37tWTMvFRyvSNR76bs= + integrity sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA== dependencies: "@intlify/core-base" "9.1.9" "@intlify/shared" "9.1.9" @@ -13164,13 +13084,6 @@ vue-router@^4.0.1, vue-router@^4.0.12: dependencies: "@vue/devtools-api" "^6.0.0-beta.18" -vue-types@^3.0.0: - version "3.0.2" - resolved "https://registry.npmmirror.com/vue-types/download/vue-types-3.0.2.tgz?cache=0&sync_timestamp=1634179982853&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvue-types%2Fdownload%2Fvue-types-3.0.2.tgz#ec16e05d412c038262fc1efa4ceb9647e7fb601d" - integrity sha1-7BbgXUEsA4Ji/B76TOuWR+f7YB0= - dependencies: - is-plain-object "3.0.1" - vue3-jest@^27.0.0-alpha.1: version "27.0.0-alpha.1" resolved "https://registry.npmmirror.com/vue3-jest/download/vue3-jest-27.0.0-alpha.1.tgz#ccc9ecd963a8ab54e43fbb4cad3c1d14c84c0613" @@ -13194,22 +13107,22 @@ vue@^3.0.5, vue@^3.2.2, vue@^3.2.24: "@vue/server-renderer" "3.2.26" "@vue/shared" "3.2.26" -vuepress-vite@2.0.0-beta.31: - version "2.0.0-beta.31" - resolved "https://registry.npmmirror.com/vuepress-vite/download/vuepress-vite-2.0.0-beta.31.tgz#5b3a16a379eaefb6ebc8e0a53b133a12f3df6693" - integrity sha512-MLs4DI+JkwhJBFxpZmvBxD53N6m0B6oD3tjT3kQdP14mgCl/p1ouqUkAiqpLRGJ+oCoVYH1r0qBnUr6DGFB8bg== +vuepress-vite@2.0.0-beta.32: + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/vuepress-vite/download/vuepress-vite-2.0.0-beta.32.tgz#2db9ba918c159988bec0f832b960d73f9b47c033" + integrity sha512-xmCV2D1SZmKEVDvvSmDhSktW8fqDTpP9HY4yQHiTqU/z0sUE/078qB7aeTQP0fvtrlHuTXSRX3yj/Z62kAYQxg== dependencies: - "@vuepress/bundler-vite" "2.0.0-beta.31" - "@vuepress/cli" "2.0.0-beta.31" - "@vuepress/core" "2.0.0-beta.29" - "@vuepress/theme-default" "2.0.0-beta.31" + "@vuepress/bundler-vite" "2.0.0-beta.32" + "@vuepress/cli" "2.0.0-beta.32" + "@vuepress/core" "2.0.0-beta.32" + "@vuepress/theme-default" "2.0.0-beta.32" vuepress@^2.0.0-beta.22: - version "2.0.0-beta.31" - resolved "https://registry.npmmirror.com/vuepress/download/vuepress-2.0.0-beta.31.tgz#9094892f7be84e2bf38f1490c1f8e6714900a8b4" - integrity sha512-yj9lWg+1aRFpDVhktM9Oaejg/lxrhHJF16GyZ89w3p8+Aj3Y31s7Xvyks5bUH4wIoGAu3PlQDKKnpym9M14+Dw== + version "2.0.0-beta.32" + resolved "https://registry.npmmirror.com/vuepress/download/vuepress-2.0.0-beta.32.tgz#819b0ad0028a9619697d8a5c3e15abfd8f704f0b" + integrity sha512-d0M0FgDcHE6junWEgMIrgvOvtmKYNfswDzqnAm6bwAjpi6kWQ5ojfIsB2/z9wsm8kgMk9Bdg3HsmleiwKwZTuQ== dependencies: - vuepress-vite "2.0.0-beta.31" + vuepress-vite "2.0.0-beta.32" vuex@^4.0.0: version "4.0.2" @@ -13239,13 +13152,6 @@ walker@^1.0.7: dependencies: makeerror "1.0.12" -warning@^4.0.0: - version "4.0.3" - resolved "https://registry.npmmirror.com/warning/download/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha1-Fungd+uKhtavfWSqHgX9hbRnjKM= - dependencies: - loose-envify "^1.0.0" - watchpack@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/watchpack/download/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" @@ -13420,7 +13326,7 @@ webpack@^5.24.2: webpackbar@^5.0.0-3: version "5.0.2" resolved "https://registry.npmmirror.com/webpackbar/download/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" - integrity sha1-091GYhHHOFJ0HfyEK3VW3LwrBXA= + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== dependencies: chalk "^4.1.0" consola "^2.15.3" @@ -13536,9 +13442,9 @@ windicss-webpack-plugin@^1.6.0: windicss "^3.4.0" windicss@^3.4.0: - version "3.4.0" - resolved "https://registry.npmmirror.com/windicss/download/windicss-3.4.0.tgz#2da63739089b5c6f6ca1b7cc28bd855cd5bc95cc" - integrity sha512-X+9Y1/FPxX253Xo4Hk/qfVuvoAxgKx686Z6yHxmBFMH7wRCPdRO42na9k/yEnrW6EqCFJP/GcMIHn3QENaE42g== + version "3.4.2" + resolved "https://registry.npmmirror.com/windicss/download/windicss-3.4.2.tgz#257795c9be8b6e93117ffa3fb27874d225da6679" + integrity sha512-YieqWaXiwPu0JJoB7z03RXdjZjQQJtMZAeXUXu/j3JXSMhIgV/2rUXu4Q7QrworRlbaASZlFhxjnL/78aAty+Q== word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" @@ -13711,7 +13617,7 @@ workbox-window@6.4.2: wrap-ansi@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&sync_timestamp=1632797323088&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= dependencies: ansi-styles "^3.2.0" @@ -13720,7 +13626,7 @@ wrap-ansi@^5.1.0: wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1632797323088&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM= dependencies: ansi-styles "^4.0.0" @@ -13729,7 +13635,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1632797323088&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM= dependencies: ansi-styles "^4.0.0" @@ -13796,7 +13702,7 @@ write-pkg@^4.0.0: ws@^6.2.1: version "6.2.2" resolved "https://registry.npmmirror.com/ws/download/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4= + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" @@ -13817,7 +13723,7 @@ xmlchars@^2.2.0: xtend@~4.0.1: version "4.0.2" - resolved "https://registry.npmmirror.com/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmmirror.com/xtend/download/xtend-4.0.2.tgz?cache=0&sync_timestamp=1632470468448&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= y18n@^4.0.0: From 955fc633ec5831fa69bdfbeda5ef6f0db1498fe9 Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:19:16 +0800 Subject: [PATCH 04/11] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/reference/config/README.md | 97 ++++++++++++++++++- docs/zh/reference/config/README.md | 97 ++++++++++++++++++- packages/fes-preset-built-in/src/index.js | 13 +-- .../plugins/commands/webpackConfig/html.js | 11 +-- .../src/plugins/features/babelPluginImport.js | 20 ---- .../src/plugins/features/devScripts.js | 14 --- .../src/plugins/registerMethods.js | 1 - 7 files changed, 194 insertions(+), 59 deletions(-) delete mode 100644 packages/fes-preset-built-in/src/plugins/features/babelPluginImport.js delete mode 100644 packages/fes-preset-built-in/src/plugins/features/devScripts.js diff --git a/docs/reference/config/README.md b/docs/reference/config/README.md index bcb22cbc..94ea35ca 100644 --- a/docs/reference/config/README.md +++ b/docs/reference/config/README.md @@ -24,6 +24,39 @@ export default { ``` 然后 `import('main')`,实际上是 `import('src/assets/styles/main')`。 +## analyze +- 类型: `object` +- 默认值: +```js +{ + analyzerMode: process.env.ANALYZE_MODE || 'server', + analyzerPort: process.env.ANALYZE_PORT || 8888, + openAnalyzer: process.env.ANALYZE_OPEN !== 'none', + // generate stats file while ANALYZE_DUMP exist + generateStatsFile: !!process.env.ANALYZE_DUMP, + statsFilename: process.env.ANALYZE_DUMP || 'stats.json', + logLevel: process.env.ANALYZE_LOG_LEVEL || 'info', + defaultSizes: 'parsed' // stat // gzip +} +``` +- 详情: + + 构建结果分析,当配置 `process.env.ANALYZE` 时开启,例如执行`ANALYZE=1 fes build` + +## autoprefixer +- 类型: `object` +- 默认值: +```js +{ + flexbox: 'no-2009' +} +``` +- 详情: + + [postcss autoprefixer 插件](https://github.com/postcss/autoprefixer#options) 配置。 + + + ## base - 类型: `string` @@ -32,6 +65,9 @@ export default { 设置路由前缀,通常用于部署到非根目录。比如你有路由 `/pageA`、`/pageB`,然后设置了 `base` 为 `/manage/`,那么就可以通过 `/manage/pageA`、`/manage/pageB` 访问到它们。 + + + ## chainWebpack - 类型:`function` @@ -126,6 +162,34 @@ export default { - 详情: 路由是否按需加载 + + +## exportStatic + +- 类型: `object` +- 默认值: `{}` +- 详情: + +配置 `html` 的输出形式,默认只输出 `index.html`。 + +如果开启 `exportStatic`,则会针对每个路由输出 `html` 文件。 + +比如以下路由, +``` +/ +/users +/list +``` +不开启 `exportStatic` 时,输出, +``` +- index.html +``` +设置 `exportStatic: {}` 后,输出, +``` +- index.html +- users.html +- list.html +``` ## externals - 类型:`object` @@ -151,7 +215,7 @@ export default { - 默认值: `[]` - 详情: - 配置额外的 babel 插件。 + 配置额外的 `babel` 插件。 - 示例: ```js @@ -162,6 +226,15 @@ export default { } ``` +## extraBabelPresets + +- 类型: `array` +- 默认值: `[]` +- 详情: + + 配置额外的 `babel` 插件集。 + + ## extraPostCSSPlugins - 类型: `array` @@ -170,6 +243,13 @@ export default { 设置额外的 [postcss 插件](https://github.com/postcss/postcss/blob/master/docs/plugins.md)。 +## html +- 类型: `object` +- 默认值: `{}` +- 详情: + + 设置[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin#options)。 + ## inlineLimit - 类型: `number` @@ -288,9 +368,9 @@ export default { ``` 然后访问 `/v2/movie/in_theaters_proxy` 就能访问到 [http://api.douban.com/v2/movie/in_theaters_proxy](http://api.douban.com/v2/movie/in_theaters_proxy) 的数据。 -## publicpath +## publicPath -- 类型: `publicPath` +- 类型: `string` - 默认值: `/` - 详情: @@ -300,7 +380,9 @@ export default { - 类型: `object` - 默认值: `{ mode: 'hash' }` -- 详情: 配置路由,具体请查看指南中关于路由的介绍 +- 详情: + + 配置路由,具体请查看指南中关于路由的介绍 ## singular - 类型: `boolean` @@ -361,3 +443,10 @@ const defaultTerserOptions = { - 详情: 配置 [压缩器 terser 的配置项](https://github.com/terser/terser#minify-options) + +## vueLoader +- 类型: `object` +- 默认值:`{}` +- 详情: + + 配置 [Vue Loader](https://vue-loader.vuejs.org/zh/options.html) \ No newline at end of file diff --git a/docs/zh/reference/config/README.md b/docs/zh/reference/config/README.md index bcb22cbc..94ea35ca 100644 --- a/docs/zh/reference/config/README.md +++ b/docs/zh/reference/config/README.md @@ -24,6 +24,39 @@ export default { ``` 然后 `import('main')`,实际上是 `import('src/assets/styles/main')`。 +## analyze +- 类型: `object` +- 默认值: +```js +{ + analyzerMode: process.env.ANALYZE_MODE || 'server', + analyzerPort: process.env.ANALYZE_PORT || 8888, + openAnalyzer: process.env.ANALYZE_OPEN !== 'none', + // generate stats file while ANALYZE_DUMP exist + generateStatsFile: !!process.env.ANALYZE_DUMP, + statsFilename: process.env.ANALYZE_DUMP || 'stats.json', + logLevel: process.env.ANALYZE_LOG_LEVEL || 'info', + defaultSizes: 'parsed' // stat // gzip +} +``` +- 详情: + + 构建结果分析,当配置 `process.env.ANALYZE` 时开启,例如执行`ANALYZE=1 fes build` + +## autoprefixer +- 类型: `object` +- 默认值: +```js +{ + flexbox: 'no-2009' +} +``` +- 详情: + + [postcss autoprefixer 插件](https://github.com/postcss/autoprefixer#options) 配置。 + + + ## base - 类型: `string` @@ -32,6 +65,9 @@ export default { 设置路由前缀,通常用于部署到非根目录。比如你有路由 `/pageA`、`/pageB`,然后设置了 `base` 为 `/manage/`,那么就可以通过 `/manage/pageA`、`/manage/pageB` 访问到它们。 + + + ## chainWebpack - 类型:`function` @@ -126,6 +162,34 @@ export default { - 详情: 路由是否按需加载 + + +## exportStatic + +- 类型: `object` +- 默认值: `{}` +- 详情: + +配置 `html` 的输出形式,默认只输出 `index.html`。 + +如果开启 `exportStatic`,则会针对每个路由输出 `html` 文件。 + +比如以下路由, +``` +/ +/users +/list +``` +不开启 `exportStatic` 时,输出, +``` +- index.html +``` +设置 `exportStatic: {}` 后,输出, +``` +- index.html +- users.html +- list.html +``` ## externals - 类型:`object` @@ -151,7 +215,7 @@ export default { - 默认值: `[]` - 详情: - 配置额外的 babel 插件。 + 配置额外的 `babel` 插件。 - 示例: ```js @@ -162,6 +226,15 @@ export default { } ``` +## extraBabelPresets + +- 类型: `array` +- 默认值: `[]` +- 详情: + + 配置额外的 `babel` 插件集。 + + ## extraPostCSSPlugins - 类型: `array` @@ -170,6 +243,13 @@ export default { 设置额外的 [postcss 插件](https://github.com/postcss/postcss/blob/master/docs/plugins.md)。 +## html +- 类型: `object` +- 默认值: `{}` +- 详情: + + 设置[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin#options)。 + ## inlineLimit - 类型: `number` @@ -288,9 +368,9 @@ export default { ``` 然后访问 `/v2/movie/in_theaters_proxy` 就能访问到 [http://api.douban.com/v2/movie/in_theaters_proxy](http://api.douban.com/v2/movie/in_theaters_proxy) 的数据。 -## publicpath +## publicPath -- 类型: `publicPath` +- 类型: `string` - 默认值: `/` - 详情: @@ -300,7 +380,9 @@ export default { - 类型: `object` - 默认值: `{ mode: 'hash' }` -- 详情: 配置路由,具体请查看指南中关于路由的介绍 +- 详情: + + 配置路由,具体请查看指南中关于路由的介绍 ## singular - 类型: `boolean` @@ -361,3 +443,10 @@ const defaultTerserOptions = { - 详情: 配置 [压缩器 terser 的配置项](https://github.com/terser/terser#minify-options) + +## vueLoader +- 类型: `object` +- 默认值:`{}` +- 详情: + + 配置 [Vue Loader](https://vue-loader.vuejs.org/zh/options.html) \ No newline at end of file diff --git a/packages/fes-preset-built-in/src/index.js b/packages/fes-preset-built-in/src/index.js index 61b10fc6..10e82558 100644 --- a/packages/fes-preset-built-in/src/index.js +++ b/packages/fes-preset-built-in/src/index.js @@ -15,15 +15,16 @@ export default function () { require.resolve('./plugins/features/analyze'), require.resolve('./plugins/features/autoprefixer'), require.resolve('./plugins/features/base'), - require.resolve('./plugins/features/babelPluginImport'), require.resolve('./plugins/features/chainWebpack'), require.resolve('./plugins/features/cssLoader'), require.resolve('./plugins/features/copy'), + require.resolve('./plugins/features/checkVuePackage'), require.resolve('./plugins/features/define'), - require.resolve('./plugins/features/devScripts'), require.resolve('./plugins/features/devServer'), require.resolve('./plugins/features/devtool'), + require.resolve('./plugins/features/dynamicImport'), require.resolve('./plugins/features/externals'), + require.resolve('./plugins/features/exportStatic'), require.resolve('./plugins/features/extraBabelPlugins'), require.resolve('./plugins/features/extraBabelPresets'), require.resolve('./plugins/features/extraPostCSSPlugins'), @@ -32,22 +33,18 @@ export default function () { require.resolve('./plugins/features/inlineLimit'), require.resolve('./plugins/features/lessLoader'), require.resolve('./plugins/features/mountElementId'), + require.resolve('./plugins/features/mock'), require.resolve('./plugins/features/outputPath'), require.resolve('./plugins/features/plugins'), require.resolve('./plugins/features/postcssLoader'), require.resolve('./plugins/features/proxy'), require.resolve('./plugins/features/publicPath'), + require.resolve('./plugins/features/runtimePublicPath'), require.resolve('./plugins/features/singular'), require.resolve('./plugins/features/targets'), require.resolve('./plugins/features/terserOptions'), require.resolve('./plugins/features/nodeModulesTransform'), require.resolve('./plugins/features/vueLoader'), - require.resolve('./plugins/features/mock'), - require.resolve('./plugins/features/dynamicImport'), - require.resolve('./plugins/features/runtimePublicPath'), - require.resolve('./plugins/features/exportStatic'), - require.resolve('./plugins/features/checkVuePackage'), - // misc require.resolve('./plugins/misc/route'), diff --git a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/html.js b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/html.js index aac0f7db..265c39e0 100644 --- a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/html.js +++ b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/html.js @@ -34,7 +34,6 @@ export default async function createHtmlWebpackConfig({ }); } - const multiPageConfig = config.html.pages; const htmlPath = join(cwd, 'public/index.html'); const defaultHtmlPath = resolve(__dirname, 'index-default.html'); const publicCopyIgnore = []; @@ -46,13 +45,9 @@ export default async function createHtmlWebpackConfig({ publicCopyIgnore.push(winPath(htmlOptions.template)); - if (!multiPageConfig) { - webpackConfig - .plugin('html') - .use(require.resolve('html-webpack-plugin'), [htmlOptions]); - } else { - // TODO 支持多页 - } + webpackConfig + .plugin('html') + .use(require.resolve('html-webpack-plugin'), [htmlOptions]); // 如果需要导出html,则根据路由生成对应的html文件 if (config.exportStatic) { diff --git a/packages/fes-preset-built-in/src/plugins/features/babelPluginImport.js b/packages/fes-preset-built-in/src/plugins/features/babelPluginImport.js deleted file mode 100644 index 76dfd763..00000000 --- a/packages/fes-preset-built-in/src/plugins/features/babelPluginImport.js +++ /dev/null @@ -1,20 +0,0 @@ -export default (api) => { - api.describe({ - key: 'babelPluginImport', - config: { - schema(joi) { - return joi.array(); - } - } - }); - - api.modifyBabelOpts((babelOpts) => { - if (api.config.babelPluginImport) { - api.config.babelPluginImport.forEach((config) => { - babelOpts.plugins.push(['import', config]); - }); - } - - return babelOpts; - }); -}; diff --git a/packages/fes-preset-built-in/src/plugins/features/devScripts.js b/packages/fes-preset-built-in/src/plugins/features/devScripts.js deleted file mode 100644 index 8e5ccc6b..00000000 --- a/packages/fes-preset-built-in/src/plugins/features/devScripts.js +++ /dev/null @@ -1,14 +0,0 @@ - -export default (api) => { - api.describe({ - key: 'devScripts', - config: { - schema(joi) { - return joi.object(); - } - }, - enableBy() { - return api.env === 'development'; - } - }); -}; diff --git a/packages/fes-preset-built-in/src/plugins/registerMethods.js b/packages/fes-preset-built-in/src/plugins/registerMethods.js index 165c6faa..61ee2877 100644 --- a/packages/fes-preset-built-in/src/plugins/registerMethods.js +++ b/packages/fes-preset-built-in/src/plugins/registerMethods.js @@ -12,7 +12,6 @@ export default function (api) { 'addCoreExports', 'addRuntimePluginKey', 'addRuntimePlugin', - 'addDevScripts', 'addEntryImportsAhead', 'addEntryImports', 'addEntryCodeAhead', From a90664af8630573ec0ef11cc10fabd889bf204c7 Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:24:23 +0800 Subject: [PATCH 05/11] chore(release): publish - @fesjs/create-fes-app@2.1.0 - @fesjs/plugin-access@2.0.3 - @fesjs/plugin-layout@3.0.0 - @fesjs/plugin-locale@3.0.0 - @fesjs/plugin-qiankun@2.0.8 - @fesjs/preset-built-in@2.0.12 - @fesjs/fes@2.0.13 --- packages/create-fes-app/package.json | 2 +- packages/fes-plugin-access/package.json | 2 +- packages/fes-plugin-layout/package.json | 2 +- packages/fes-plugin-locale/package.json | 2 +- packages/fes-plugin-qiankun/package.json | 6 +++--- packages/fes-preset-built-in/package.json | 2 +- packages/fes/package.json | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/create-fes-app/package.json b/packages/create-fes-app/package.json index b82384a2..60f99c72 100644 --- a/packages/create-fes-app/package.json +++ b/packages/create-fes-app/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/create-fes-app", - "version": "2.0.9", + "version": "2.1.0", "description": "create a app base on fes.js", "main": "lib/index.js", "files": [ diff --git a/packages/fes-plugin-access/package.json b/packages/fes-plugin-access/package.json index 36152b5a..4e31de36 100644 --- a/packages/fes-plugin-access/package.json +++ b/packages/fes-plugin-access/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/plugin-access", - "version": "2.0.2", + "version": "2.0.3", "description": "@fesjs/plugin-access", "main": "lib/index.js", "files": [ diff --git a/packages/fes-plugin-layout/package.json b/packages/fes-plugin-layout/package.json index b2eeac40..fd855508 100644 --- a/packages/fes-plugin-layout/package.json +++ b/packages/fes-plugin-layout/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/plugin-layout", - "version": "2.0.9", + "version": "3.0.0", "description": "@fesjs/plugin-layout", "main": "lib/index.js", "files": [ diff --git a/packages/fes-plugin-locale/package.json b/packages/fes-plugin-locale/package.json index 6c308ea2..61d86df3 100644 --- a/packages/fes-plugin-locale/package.json +++ b/packages/fes-plugin-locale/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/plugin-locale", - "version": "2.0.4", + "version": "3.0.0", "description": "@fesjs/plugin-locale", "main": "lib/index.js", "files": [ diff --git a/packages/fes-plugin-qiankun/package.json b/packages/fes-plugin-qiankun/package.json index 34e0c944..1ecbf0f4 100644 --- a/packages/fes-plugin-qiankun/package.json +++ b/packages/fes-plugin-qiankun/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/plugin-qiankun", - "version": "2.0.7", + "version": "2.0.8", "description": "@fesjs/plugin-qiankun", "main": "lib/index.js", "files": [ @@ -39,7 +39,7 @@ }, "peerDependencies": { "@fesjs/fes": "^2.0.0", - "vue": "^3.0.5", - "@fesjs/fes-design": "^0.1.10" + "@fesjs/fes-design": "^0.1.10", + "vue": "^3.0.5" } } diff --git a/packages/fes-preset-built-in/package.json b/packages/fes-preset-built-in/package.json index f5e2a1ed..e56a7ae3 100644 --- a/packages/fes-preset-built-in/package.json +++ b/packages/fes-preset-built-in/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/preset-built-in", - "version": "2.0.11", + "version": "2.0.12", "description": "@fesjs/preset-built-in", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/fes/package.json b/packages/fes/package.json index ebbbe0ae..70acc3d1 100644 --- a/packages/fes/package.json +++ b/packages/fes/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/fes", - "version": "2.0.12", + "version": "2.0.13", "description": "一个好用的前端管理台快速开发框架", "preferGlobal": true, "scripts": { @@ -39,7 +39,7 @@ ], "dependencies": { "@fesjs/compiler": "^2.0.3", - "@fesjs/preset-built-in": "^2.0.11", + "@fesjs/preset-built-in": "^2.0.12", "@fesjs/runtime": "^2.0.2", "@fesjs/utils": "^2.0.3", "resolve-cwd": "^3.0.0" From 250a929816d88ff542c9fffd063571e45b687b4b Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:28:40 +0800 Subject: [PATCH 06/11] =?UTF-8?q?ci:=20=E5=8E=BB=E6=8E=89npm=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .npmrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .npmrc diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 7f082f23..00000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -registry=https://registry.npmmirror.com \ No newline at end of file From c707d142b9655d457247ff1648684cc0051791cd Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:32:35 +0800 Subject: [PATCH 07/11] =?UTF-8?q?Revert=20"ci:=20=E5=8E=BB=E6=8E=89npm?= =?UTF-8?q?=E9=85=8D=E7=BD=AE"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 250a929816d88ff542c9fffd063571e45b687b4b. --- .npmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..7f082f23 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmmirror.com \ No newline at end of file From 99a2615488b5c46b2028dfbc96ed03e7b513a41b Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:32:55 +0800 Subject: [PATCH 08/11] =?UTF-8?q?Revert=20"Revert=20"ci:=20=E5=8E=BB?= =?UTF-8?q?=E6=8E=89npm=E9=85=8D=E7=BD=AE""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit c707d142b9655d457247ff1648684cc0051791cd. --- .npmrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .npmrc diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 7f082f23..00000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -registry=https://registry.npmmirror.com \ No newline at end of file From 299416497e1908cc3ce8abaeb5527bfdfe7c3468 Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:48:34 +0800 Subject: [PATCH 09/11] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=88layout=E5=92=8Clocale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/fes-template/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/fes-template/package.json b/packages/fes-template/package.json index fcfe39e1..74321411 100644 --- a/packages/fes-template/package.json +++ b/packages/fes-template/package.json @@ -48,8 +48,8 @@ "dependencies": { "@fesjs/fes": "^2.0.0", "@fesjs/plugin-access": "^2.0.0", - "@fesjs/plugin-layout": "^2.0.0", - "@fesjs/plugin-locale": "^2.0.1", + "@fesjs/plugin-layout": "^3.0.0", + "@fesjs/plugin-locale": "^3.0.0", "@fesjs/plugin-model": "^2.0.0", "@fesjs/plugin-enums": "^2.0.0", "@fesjs/plugin-jest": "^2.0.0", From 6d2dedf44a91647c9f286aba38d80e339db6e2ac Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:49:16 +0800 Subject: [PATCH 10/11] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=88layout=E5=92=8Clocale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/create-fes-app/templates/app/pc/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-fes-app/templates/app/pc/package.json b/packages/create-fes-app/templates/app/pc/package.json index e4b1b7a3..d3510602 100644 --- a/packages/create-fes-app/templates/app/pc/package.json +++ b/packages/create-fes-app/templates/app/pc/package.json @@ -49,7 +49,7 @@ "dependencies": { "@fesjs/fes": "^2.0.0", "@fesjs/plugin-access": "^2.0.0", - "@fesjs/plugin-layout": "^2.0.0", + "@fesjs/plugin-layout": "^3.0.0", "@fesjs/plugin-model": "^2.0.0", "@fesjs/plugin-enums": "^2.0.0", "@fesjs/fes-design": "^0.1.10", From 172a3a6fe60fe1bf3f5242e3bb0382e589107f2e Mon Sep 17 00:00:00 2001 From: wanchun <445436867@qq.com> Date: Tue, 4 Jan 2022 17:50:06 +0800 Subject: [PATCH 11/11] chore(release): publish - @fesjs/create-fes-app@2.1.1 --- packages/create-fes-app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-fes-app/package.json b/packages/create-fes-app/package.json index 60f99c72..cd7f0c79 100644 --- a/packages/create-fes-app/package.json +++ b/packages/create-fes-app/package.json @@ -1,6 +1,6 @@ { "name": "@fesjs/create-fes-app", - "version": "2.1.0", + "version": "2.1.1", "description": "create a app base on fes.js", "main": "lib/index.js", "files": [