From f636b37df936c217d851747349b1623580166cf2 Mon Sep 17 00:00:00 2001 From: winixt Date: Sat, 22 May 2021 13:19:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20request=20cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/reference/config/README.md | 20 +- .../templates/app/h5/package.json | 4 +- .../examples/app1/package.json | 4 +- .../examples/main/package.json | 4 +- packages/fes-plugin-request/package.json | 2 +- .../src/template/cacheControl.js | 69 ++++- .../src/template/request.js | 2 +- packages/fes-template-h5/.fes.js | 2 +- packages/fes-template-h5/package.json | 5 +- packages/fes-template-h5/src/app.js | 10 - .../fes-template-h5/src/common/service.js | 4 + packages/fes-template-h5/src/pages/index.vue | 43 ++- packages/fes-template/package.json | 4 +- yarn.lock | 248 +++++++++++++++++- 14 files changed, 375 insertions(+), 46 deletions(-) diff --git a/docs/zh/reference/config/README.md b/docs/zh/reference/config/README.md index fb0cba8a..b4d3e4c4 100644 --- a/docs/zh/reference/config/README.md +++ b/docs/zh/reference/config/README.md @@ -153,11 +153,14 @@ export default { 配置额外的 babel 插件。 -比如: - +- 示例: +```js export default { - extraBabelPlugins: ['babel-plugin-react-require'], -}; + extraBabelPlugins: [ + ['import', { libraryName: 'ant-design-vue', libraryDirectory: 'es', style: 'css' }], + ], +} +``` ## extraPostCSSPlugins @@ -181,14 +184,7 @@ export default { - 默认值: `{}` - 详情: -- 示例: -```js -export default { - extraBabelPlugins: [ - ['import', { libraryName: 'ant-design-vue', libraryDirectory: 'es', style: 'css' }], - ], -} -``` + 设置 [less-loader 配置项](https://github.com/webpack-contrib/less-loader)。 ## mock diff --git a/packages/create-fes-app/templates/app/h5/package.json b/packages/create-fes-app/templates/app/h5/package.json index ea9e1b2d..67230578 100644 --- a/packages/create-fes-app/templates/app/h5/package.json +++ b/packages/create-fes-app/templates/app/h5/package.json @@ -40,7 +40,7 @@ "access": "public" }, "devDependencies": { - "@webank/eslint-config-webank": "0.2.10", + "@webank/eslint-config-webank": "0.3.0", "postcss-px-to-viewport": "1.1.1" }, "dependencies": { @@ -50,4 +50,4 @@ "vue": "^3.0.5" }, "private": true -} +} \ No newline at end of file diff --git a/packages/fes-plugin-qiankun/examples/app1/package.json b/packages/fes-plugin-qiankun/examples/app1/package.json index 15bb6521..8f3fe56c 100644 --- a/packages/fes-plugin-qiankun/examples/app1/package.json +++ b/packages/fes-plugin-qiankun/examples/app1/package.json @@ -43,7 +43,7 @@ "access": "public" }, "devDependencies": { - "@webank/eslint-config-webank": "0.2.10" + "@webank/eslint-config-webank": "0.3.0" }, "dependencies": { "@fesjs/fes": "^2.0.0-rc.0", @@ -51,4 +51,4 @@ "ant-design-vue": "2.0.0" }, "private": true -} +} \ No newline at end of file diff --git a/packages/fes-plugin-qiankun/examples/main/package.json b/packages/fes-plugin-qiankun/examples/main/package.json index 9864aa90..27b5ef55 100644 --- a/packages/fes-plugin-qiankun/examples/main/package.json +++ b/packages/fes-plugin-qiankun/examples/main/package.json @@ -43,7 +43,7 @@ "access": "public" }, "devDependencies": { - "@webank/eslint-config-webank": "0.2.10" + "@webank/eslint-config-webank": "0.3.0" }, "dependencies": { "@fesjs/fes": "^2.0.0-rc.0", @@ -51,4 +51,4 @@ "ant-design-vue": "2.0.0" }, "private": true -} +} \ No newline at end of file diff --git a/packages/fes-plugin-request/package.json b/packages/fes-plugin-request/package.json index 81c5d5e7..8e7858e3 100644 --- a/packages/fes-plugin-request/package.json +++ b/packages/fes-plugin-request/package.json @@ -33,4 +33,4 @@ "dependencies": { "axios": "0.21.1" } -} +} \ No newline at end of file diff --git a/packages/fes-plugin-request/src/template/cacheControl.js b/packages/fes-plugin-request/src/template/cacheControl.js index edc0e58d..03506558 100644 --- a/packages/fes-plugin-request/src/template/cacheControl.js +++ b/packages/fes-plugin-request/src/template/cacheControl.js @@ -46,7 +46,7 @@ const CACHE_TYPE = { const CACHE_DATA_MAP = new Map(); -function genInnerKey(key, cacheType) { +function genInnerKey(key, cacheType = 'ram') { if (cacheType !== CACHE_TYPE.ram) { return `${CACHE_KEY_PREFIX}${key}`; } @@ -121,6 +121,61 @@ function getCacheData({ key, cacheType = 'ram' }) { } } +// 存储缓存队列 +const cacheStartFlag = new Map(); +const cachingQueue = new Map(); + +/** + * 等上一次请求结果 + * 1. 如果上一次请求成功,直接使用上一次的请求结果 + * 2. 如果上一次请求失败,重启本次请求 + */ +function handleCachingStart(ctx, config) { + const _key = genInnerKey(ctx.key, config.cache.cacheType); + const caching = cacheStartFlag.get(_key); + if (caching) { + return new Promise((resolve) => { + const queue = cachingQueue.get(_key) || []; + cachingQueue.set(_key, queue.concat(resolve)); + }); + } + cacheStartFlag.set(_key, true); +} + +// 有请求成功的 +function handleCachingQueueSuccess(ctx, config, data) { + // 移除首次缓存 flag + const _key = genInnerKey(ctx.key, config.cache.cacheType); + const queue = cachingQueue.get(_key); + if (queue && queue.length > 0) { + queue.forEach((resolve) => { + resolve({ + isSuccess: true, + data + }); + }); + } + cachingQueue.delete(_key); + cacheStartFlag.delete(_key); +} + +// 处理请求失败 +function handleCachingQueueError(ctx, config) { + const _key = genInnerKey(ctx.key, config.cache.cacheType); + const queue = cachingQueue.get(_key); + if (queue && queue.length > 0) { + const firstResolve = queue.shift(); + firstResolve({ + isSuccess: false + }); + cachingQueue.set(_key, queue); + } else { + cachingQueue.delete(_key); + cacheStartFlag.delete(_key); + } +} + + export default async (ctx, next) => { const { config } = ctx; if (config.cache) { @@ -131,17 +186,27 @@ export default async (ctx, next) => { }; return; } + const result = await handleCachingStart(ctx, config); + if (result && result.isSuccess) { + ctx.response = { + data: result.data + }; + return; + } } await next(); if (config.cache) { const requestdata = checkHttpRequestHasBody(config.method) ? config.data : config.params; - if (ctx.response && canCache(requestdata) && canCache(ctx.response.data)) { + if (!ctx.error && ctx.response && canCache(requestdata) && canCache(ctx.response.data)) { + handleCachingQueueSuccess(ctx, config, ctx.response.data); setCacheData({ key: ctx.key, data: ctx.response.data, ...config.cache }); + } else { + handleCachingQueueError(ctx, config); } } }; diff --git a/packages/fes-plugin-request/src/template/request.js b/packages/fes-plugin-request/src/template/request.js index fd6cc204..3655be58 100644 --- a/packages/fes-plugin-request/src/template/request.js +++ b/packages/fes-plugin-request/src/template/request.js @@ -67,9 +67,9 @@ function getRequestInstance() { scheduler.use(paramsProcess) .use(genRequestKey) + .use(cacheControl) .use(preventRepeatReq) .use(throttle) - .use(cacheControl) .use(axiosMiddleware) .use(resDataAdaptor) .use(resErrorProcess) diff --git a/packages/fes-template-h5/.fes.js b/packages/fes-template-h5/.fes.js index cc9f10b2..55244669 100644 --- a/packages/fes-template-h5/.fes.js +++ b/packages/fes-template-h5/.fes.js @@ -10,7 +10,7 @@ export default { publicPath: '/', request: { base: '/ras-mas', - dataField: '' + dataField: 'result' }, html: { title: '拉夫德鲁' diff --git a/packages/fes-template-h5/package.json b/packages/fes-template-h5/package.json index a39a4eb5..a7f9d6ed 100644 --- a/packages/fes-template-h5/package.json +++ b/packages/fes-template-h5/package.json @@ -41,14 +41,15 @@ "access": "public" }, "devDependencies": { - "@webank/eslint-config-webank": "0.2.10", + "@webank/eslint-config-webank": "0.3.0", "postcss-px-to-viewport": "1.1.1" }, "dependencies": { + "debounce": "1.2.1", "@fesjs/fes": "^2.0.0-rc.0", "@fesjs/plugin-icon": "^2.0.0-rc.0", "@fesjs/plugin-request": "^2.0.0-rc.0", "vue": "^3.0.5" }, "private": true -} +} \ No newline at end of file diff --git a/packages/fes-template-h5/src/app.js b/packages/fes-template-h5/src/app.js index 2937addf..dd9fb08c 100644 --- a/packages/fes-template-h5/src/app.js +++ b/packages/fes-template-h5/src/app.js @@ -1,14 +1,4 @@ export const request = { - responseInterceptors: [(response) => { - console.log(response); - if (response.data !== '0') { - return Promise.reject({ - response - }); - } - return response; - }], - closeResDataCheck: true, errorHandler: { 111(responseData) { console.log(responseData); diff --git a/packages/fes-template-h5/src/common/service.js b/packages/fes-template-h5/src/common/service.js index e69de29b..25062f14 100644 --- a/packages/fes-template-h5/src/common/service.js +++ b/packages/fes-template-h5/src/common/service.js @@ -0,0 +1,4 @@ +import { request } from '@fesjs/fes'; +import { debounce } from 'debounce'; + +export const debounceRequest = debounce(request, 300); diff --git a/packages/fes-template-h5/src/pages/index.vue b/packages/fes-template-h5/src/pages/index.vue index 98450e11..13d5800b 100644 --- a/packages/fes-template-h5/src/pages/index.vue +++ b/packages/fes-template-h5/src/pages/index.vue @@ -27,8 +27,49 @@ export default { const clickIcon = () => { console.log('click Icon'); }; + // request('/api', null, { + // throttle: 3000, + // cache: true + // }).then((res) => { + // console.log(res); + // }); + + // setTimeout(() => { + // request('/api', null, { + // throttle: 3000, + // cache: true + // }).then((res) => { + // console.log(res); + // }); + // }, 1000); + + // setTimeout(() => { + // request('/api', null, { + // throttle: 3000, + // cache: true + // }).then((res) => { + // console.log(res); + // }); + // request('/api', null, { + // throttle: 3000, + // cache: true + // }).then((res) => { + // console.log(res); + // }); + // }, 3200); + request('/api', null, { - dataField: false + cache: true + }).then((res) => { + console.log(res); + }); + request('/api', null, { + cache: true + }).then((res) => { + console.log(res); + }); + request('/api', null, { + cache: true }).then((res) => { console.log(res); }); diff --git a/packages/fes-template/package.json b/packages/fes-template/package.json index bb18c751..0a030ddf 100644 --- a/packages/fes-template/package.json +++ b/packages/fes-template/package.json @@ -43,7 +43,7 @@ "access": "public" }, "devDependencies": { - "@webank/eslint-config-webank": "0.2.10" + "@webank/eslint-config-webank": "0.3.0" }, "dependencies": { "@fesjs/fes": "^2.0.0-rc.0", @@ -62,4 +62,4 @@ "vuex": "^4.0.0" }, "private": true -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 14b98627..d63530c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -242,6 +242,15 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/eslint-parser@^7.13.14": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.14.3.tgz#8f292caf83dd2d7b364f938fe7074806af6d70ea" + integrity sha512-IfJXKEVRV/Gisvgmih/+05gkBzzg4Dy0gcxkZ84iFiLK8+O+fI1HLnGJv3UrUMPpsMmmThNa69v+UnF80XP+kA== + dependencies: + eslint-scope "^5.1.0" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + "@babel/generator@^7.10.4", "@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.12.1", "@babel/generator@^7.12.5", "@babel/generator@^7.13.0", "@babel/generator@^7.4.0": version "7.13.9" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" @@ -1917,6 +1926,21 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" + integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -4432,6 +4456,22 @@ eslint-plugin-vue "^7.5.0" vue-eslint-parser "^7.4.1" +"@webank/eslint-config-webank@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@webank/eslint-config-webank/-/eslint-config-webank-0.3.0.tgz#250e0eb726958d038529156f6be175b8766ae1d2" + integrity sha512-WH5FI2j+mfBhp7qZsWyotBKy8zRhGkjFr//cJZyAhr4TuWyc3wF9MBjRm7DWP/SzyYFlbELvTf330uUM3zRBLg== + dependencies: + "@babel/eslint-parser" "^7.13.14" + "@babel/plugin-syntax-jsx" "^7.12.13" + confusing-browser-globals "^1.0.10" + eslint "^7.26.0" + eslint-plugin-angular "^4.0.1" + eslint-plugin-html "^6.1.2" + eslint-plugin-import "^2.22.1" + eslint-plugin-node "^11.1.0" + eslint-plugin-vue "^7.9.0" + vue-eslint-parser "^7.6.0" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" @@ -4725,6 +4765,16 @@ ajv@^7.0.2: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b" + integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + algoliasearch@^4.0.0: version "4.8.5" resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.8.5.tgz#17a97b01c46c1ac5c1cd99d950d65e7064c8b8a9" @@ -5009,7 +5059,7 @@ array-ify@^1.0.0: resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= -array-includes@^3.1.1: +array-includes@^3.1.1, array-includes@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== @@ -5052,7 +5102,7 @@ array-unique@^0.3.2: resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.flat@^1.2.3: +array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== @@ -6985,6 +7035,11 @@ dateformat@^3.0.0: resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +debounce@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -7006,7 +7061,7 @@ debug@4.1.1: dependencies: ms "^2.1.1" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: +debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -7285,6 +7340,13 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -7344,6 +7406,11 @@ domelementtype@^2.0.1, domelementtype@^2.1.0: resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== +domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -7372,6 +7439,13 @@ domhandler@^4.0.0: dependencies: domelementtype "^2.1.0" +domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + domutils@1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -7397,6 +7471,15 @@ domutils@^2.4.2: domelementtype "^2.0.1" domhandler "^4.0.0" +domutils@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" + integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -7676,6 +7759,11 @@ escape-string-regexp@^2.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@^1.14.1: version "1.14.3" resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -7704,6 +7792,14 @@ eslint-module-utils@^2.6.0: debug "^2.6.9" pkg-dir "^2.0.0" +eslint-module-utils@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" + integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== + dependencies: + debug "^3.2.7" + pkg-dir "^2.0.0" + eslint-plugin-angular@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/eslint-plugin-angular/-/eslint-plugin-angular-4.0.1.tgz#f6c01d2a1e549d603e29eceb8615b5a989863a5e" @@ -7724,6 +7820,13 @@ eslint-plugin-html@^6.1.1: dependencies: htmlparser2 "^5.0.1" +eslint-plugin-html@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-6.1.2.tgz#fa26e4804428956c80e963b6499c192061c2daf3" + integrity sha512-bhBIRyZFqI4EoF12lGDHAmgfff8eLXx6R52/K3ESQhsxzCzIE6hdebS7Py651f7U3RBotqroUnC3L29bR7qJWQ== + dependencies: + htmlparser2 "^6.0.1" + eslint-plugin-import@^2.18.2: version "2.22.1" resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" @@ -7743,6 +7846,27 @@ eslint-plugin-import@^2.18.2: resolve "^1.17.0" tsconfig-paths "^3.9.0" +eslint-plugin-import@^2.22.1: + version "2.23.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.3.tgz#8a1b073289fff03c4af0f04b6df956b7d463e191" + integrity sha512-wDxdYbSB55F7T5CC7ucDjY641VvKmlRwT0Vxh7PkY1mI4rclVRFWYfsrjDgZvwYYDZ5ee0ZtfFKXowWjqvEoRQ== + dependencies: + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.1" + find-up "^2.0.0" + has "^1.0.3" + is-core-module "^2.4.0" + minimatch "^3.0.4" + object.values "^1.1.3" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" + tsconfig-paths "^3.9.0" + eslint-plugin-node@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" @@ -7765,7 +7889,17 @@ eslint-plugin-vue@^7.5.0: semver "^7.3.2" vue-eslint-parser "^7.6.0" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-plugin-vue@^7.9.0: + version "7.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz#f8e83a2a908f4c43fc8304f5401d4ff671f3d560" + integrity sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw== + dependencies: + eslint-utils "^2.1.0" + natural-compare "^1.4.0" + semver "^7.3.2" + vue-eslint-parser "^7.6.0" + +eslint-scope@^5.0.0, eslint-scope@^5.1.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -7790,6 +7924,11 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== +eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + eslint@^7.15.0: version "7.21.0" resolved "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83" @@ -7833,6 +7972,51 @@ eslint@^7.15.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^7.26.0: + version "7.27.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7" + integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + espree@^6.2.1: version "6.2.1" resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" @@ -8158,7 +8342,7 @@ fast-deep-equal@^2.0.1: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -8916,6 +9100,13 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== + dependencies: + type-fest "^0.20.2" + globby@^11.0.1, globby@^11.0.2: version "11.0.2" resolved "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" @@ -9312,6 +9503,16 @@ htmlparser2@^5.0.1: domutils "^2.4.2" entities "^2.0.0" +htmlparser2@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -9848,6 +10049,13 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" +is-core-module@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -11285,7 +11493,7 @@ lodash.memoize@^4.1.2: resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@^4.4.0: +lodash.merge@^4.4.0, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -11325,6 +11533,11 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + lodash.uniq@^4.3.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -12418,7 +12631,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1: +object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== @@ -13051,6 +13264,13 @@ pkg-up@3.1.0: dependencies: find-up "^3.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -14324,7 +14544,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.20.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -15560,6 +15780,18 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + tapable@^1.0.0: version "1.1.3" resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"