From 2a9ac82bc0e6ae4cd4c19e7e9037c5a5f1734478 Mon Sep 17 00:00:00 2001 From: underfin <2218301630@qq.com> Date: Tue, 5 Jan 2021 17:35:57 +0800 Subject: [PATCH] feat: support vite@2.x (#13) --- .gitignore | 1 + package.json | 15 +- playground/package.json | 2 +- playground/{vite.config.js => vite.config.ts} | 5 +- playground/yarn.lock | 202 ++--- src/esbuildService.ts | 128 --- src/hmr.ts | 133 +++ src/index.ts | 166 +++- src/jsxTransform.ts | 27 +- src/main.ts | 279 ++++++ src/resolver.ts | 9 - src/serverPlugin.ts | 301 ------- src/style.ts | 35 + src/template.ts | 39 + src/{ => utils}/componentNormalizer.ts | 0 src/utils/descriptorCache.ts | 54 ++ src/utils/query.ts | 27 + src/{ => utils}/vueHotReload.ts | 1 - test/util.ts | 3 +- tsconfig.json | 2 +- yarn.lock | 824 ++---------------- 21 files changed, 871 insertions(+), 1382 deletions(-) rename playground/{vite.config.js => vite.config.ts} (62%) delete mode 100644 src/esbuildService.ts create mode 100644 src/hmr.ts create mode 100644 src/main.ts delete mode 100644 src/resolver.ts delete mode 100644 src/serverPlugin.ts create mode 100644 src/style.ts create mode 100644 src/template.ts rename src/{ => utils}/componentNormalizer.ts (100%) create mode 100644 src/utils/descriptorCache.ts create mode 100644 src/utils/query.ts rename src/{ => utils}/vueHotReload.ts (99%) diff --git a/.gitignore b/.gitignore index 2cb5049..b5ca9a1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ dist *.local yarn-error.log .idea/ +.history/ \ No newline at end of file diff --git a/package.json b/package.json index 47fa703..a78ecfb 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Vite plugin for Vue2", "main": "dist/index.js", "scripts": { - "dev": "tsc -w -p . --skipLibCheck", + "dev": "tsc -w -p . --incremental --skipLibCheck", "test": "jest --clearCache && jest --runInBand --forceExit", "build": "rm -rf dist && tsc -p . --skipLibCheck", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", @@ -41,6 +41,7 @@ }, "dependencies": { "@babel/core": "^7.11.6", + "@rollup/pluginutils": "^4.1.0", "@vue/compiler-sfc": "^3.0.0-rc.5", "@vue/component-compiler-utils": "^3.2.0", "babel-helper-vue-jsx-merge-props": "^2.0.3", @@ -48,19 +49,21 @@ "babel-plugin-transform-vue-jsx": "^3.7.0", "babel-preset-env": "^1.7.0", "chalk": "^4.1.0", - "debug": "^4.1.1", - "esbuild": "^0.5.19", + "debug": "^4.3.1", "fs-extra": "^9.0.1", "hash-sum": "^2.0.0", "prettier": "^2.0.5", - "rollup-plugin-vue": "5.1.9", + "querystring": "^0.2.0", + "rollup": "^2.35.1", + "vite": "2.0.0-beta.4", "vue": "^2.6.11", "vue-template-compiler": "^2.6.11" }, "peerDependencies": { - "vite": ">=1.0.0-rc.13" + "vite": "2.0.0-beta.4" }, "devDependencies": { + "@types/debug": "^4.1.5", "@types/fs-extra": "^9.0.1", "@types/hash-sum": "^1.0.0", "@types/jest": "^26.0.4", @@ -72,7 +75,7 @@ "lint-staged": "^10.2.11", "puppeteer": "^3.0.0", "ts-jest": "^26.1.1", - "typescript": "^3.9.6", + "typescript": "^4.1.2", "yorkie": "^2.0.0" } } diff --git a/playground/package.json b/playground/package.json index 059a982..239d15c 100644 --- a/playground/package.json +++ b/playground/package.json @@ -11,6 +11,6 @@ "author": "", "license": "ISC", "devDependencies": { - "vite": "^1.0.0-rc.4" + "vite": "2.0.0-beta.4" } } diff --git a/playground/vite.config.js b/playground/vite.config.ts similarity index 62% rename from playground/vite.config.js rename to playground/vite.config.ts index 9f4b929..89f58b2 100644 --- a/playground/vite.config.js +++ b/playground/vite.config.ts @@ -1,7 +1,8 @@ +import { defineConfig } from 'vite' const { createVuePlugin } = require('../dist') -const config = { +const config = defineConfig({ plugins: [createVuePlugin({ jsx: true })], -} +}) export default config diff --git a/playground/yarn.lock b/playground/yarn.lock index 6d776cd..cf6c533 100644 --- a/playground/yarn.lock +++ b/playground/yarn.lock @@ -2,154 +2,54 @@ # yarn lockfile v1 -async@^2.6.2: - version "2.6.3" - resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -basic-auth@^1.0.3: - version "1.1.0" - resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" - integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -corser@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" - integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= - -debug@^3.1.1: - version "3.2.6" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= - dependencies: - ms "^2.1.1" - -ecstatic@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" - integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== - dependencies: - he "^1.1.1" - mime "^1.6.0" - minimist "^1.1.0" - url-join "^2.0.5" - -eventemitter3@^4.0.0: - version "4.0.4" - resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha1-tUY6zmNaCD0Bi9x8kXtMXxCoU4Q= - -follow-redirects@^1.0.0: - version "1.12.1" - resolved "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.12.1.tgz?cache=0&sync_timestamp=1592518629143&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" - integrity sha1-3lSmIFMRuT1gOY68Ac9wFWgjErY= - -he@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -http-proxy@^1.18.0: - version "1.18.1" - resolved "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk= - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-server@^0.12.3: - version "0.12.3" - resolved "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz#ba0471d0ecc425886616cb35c4faf279140a0d37" - integrity sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA== - dependencies: - basic-auth "^1.0.3" - colors "^1.4.0" - corser "^2.0.1" - ecstatic "^3.3.2" - http-proxy "^1.18.0" - minimist "^1.2.5" - opener "^1.5.1" - portfinder "^1.0.25" - secure-compare "3.0.1" - union "~0.5.0" - -lodash@^4.17.14: - version "4.17.15" - resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg= - -mime@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -minimist@^1.1.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1584060927134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= - -opener@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== - -portfinder@^1.0.25: - version "1.0.26" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" - integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.1" - -qs@^6.4.0: - version "6.9.4" - resolved "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" - integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -secure-compare@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" - integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= - -union@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" - integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== - dependencies: - qs "^6.4.0" - -url-join@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" - integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= - -vue@^2.6.11: - version "2.6.11" - resolved "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" - integrity sha1-dllNh31LEiNEBuhONSdcbVFBJcU= +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz?cache=0&sync_timestamp=1593955804228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs= + +esbuild@^0.8.26: + version "0.8.29" + resolved "https://registry.npm.taobao.org/esbuild/download/esbuild-0.8.29.tgz?cache=0&sync_timestamp=1609590760009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesbuild%2Fdownload%2Fesbuild-0.8.29.tgz#cc20fb752e0905a3546d68ae1be58f9b97044c39" + integrity sha1-zCD7dS4JBaNUbWiuG+WPm5cETDk= + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1608033993741&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4= + +nanoid@^3.1.20: + version "3.1.20" + resolved "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.20.tgz?cache=0&sync_timestamp=1606833990942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanoid%2Fdownload%2Fnanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha1-utwmPGsdzxS3HvqoX2q0wdbPx4g= + +postcss@^8.2.1: + version "8.2.2" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-8.2.2.tgz?cache=0&sync_timestamp=1609273988566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-8.2.2.tgz#60613b62297005084fd21024a68637798864fe26" + integrity sha1-YGE7YilwBQhP0hAkpoY3eYhk/iY= + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + +rollup@^2.35.1: + version "2.35.1" + resolved "https://registry.npm.taobao.org/rollup/download/rollup-2.35.1.tgz?cache=0&sync_timestamp=1607955456160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frollup%2Fdownload%2Frollup-2.35.1.tgz#e6bc8d10893556a638066f89e8c97f422d03968c" + integrity sha1-5ryNEIk1VqY4Bm+J6Ml/Qi0Dlow= + optionalDependencies: + fsevents "~2.1.2" + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +vite@2.0.0-beta.4: + version "2.0.0-beta.4" + resolved "https://registry.npm.taobao.org/vite/download/vite-2.0.0-beta.4.tgz?cache=0&sync_timestamp=1609742842115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvite%2Fdownload%2Fvite-2.0.0-beta.4.tgz#6ea8e08ae5e6b510548d02ec770d34046622aef7" + integrity sha1-bqjgiuXmtRBUjQLsdw00BGYirvc= + dependencies: + esbuild "^0.8.26" + postcss "^8.2.1" + rollup "^2.35.1" + optionalDependencies: + fsevents "~2.1.2" diff --git a/src/esbuildService.ts b/src/esbuildService.ts deleted file mode 100644 index e68e7cf..0000000 --- a/src/esbuildService.ts +++ /dev/null @@ -1,128 +0,0 @@ -import path from 'path' -import chalk from 'chalk' -import { startService, Service, TransformOptions, Message } from 'esbuild' - -// lazy start the service -let _service: Service | undefined - -const ensureService = async () => { - if (!_service) { - _service = await startService() - } - return _service -} - -export const stopService = () => { - _service && _service.stop() - _service = undefined -} - -export const queryRE = /\?.*$/ -export const hashRE = /#.*$/ - -export const cleanUrl = (url: string) => - url.replace(hashRE, '').replace(queryRE, '') - -const sourceMapRE = /\/\/# sourceMappingURL.*/ - -// transform used in server plugins with a more friendly API -export const transform = async ( - src: string, - request: string, - options: TransformOptions = {} -) => { - const service = await ensureService() - const file = cleanUrl(request) - options = { - ...options, - loader: options.loader || (path.extname(file).slice(1) as any), - sourcemap: true, - sourcefile: request, // ensure source file name contains full query - target: 'es2019' - } - try { - const result = await service.transform(src, options) - if (result.warnings.length) { - console.error(`[vite] warnings while transforming ${file} with esbuild:`) - result.warnings.forEach((m) => printMessage(m, src)) - } - - let code = (result.js || '').replace(sourceMapRE, '') - - return { - code, - map: result.jsSourceMap - } - } catch (e) { - console.error( - chalk.red(`[vite] error while transforming ${file} with esbuild:`) - ) - if (e.errors) { - e.errors.forEach((m: Message) => printMessage(m, src)) - } else { - console.error(e) - } - return { - code: '', - map: undefined - } - } -} - -function printMessage(m: Message, code: string) { - console.error(chalk.yellow(m.text)) - if (m.location) { - const lines = code.split(/\r?\n/g) - const line = Number(m.location.line) - const column = Number(m.location.column) - const offset = - lines - .slice(0, line - 1) - .map((l) => l.length) - .reduce((total, l) => total + l + 1, 0) + column - console.error( - generateCodeFrame(code, offset, offset + 1) - ) - } -} - - -const range: number = 2 - -export function generateCodeFrame( - source: string, - start = 0, - end = source.length -): string { - const lines = source.split(/\r?\n/) - let count = 0 - const res: string[] = [] - for (let i = 0; i < lines.length; i++) { - count += lines[i].length + 1 - if (count >= start) { - for (let j = i - range; j <= i + range || end > count; j++) { - if (j < 0 || j >= lines.length) continue - const line = j + 1 - res.push(`${line}${' '.repeat(3 - String(line).length)}| ${lines[j]}`) - const lineLength = lines[j].length - if (j === i) { - // push underline - const pad = start - (count - lineLength) + 1 - const length = Math.max( - 1, - end > count ? lineLength - pad : end - start - ) - res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length)) - } else if (j > i) { - if (end > count) { - const length = Math.max(Math.min(end - count, lineLength), 1) - res.push(` | ` + '^'.repeat(length)) - } - count += lineLength + 1 - } - } - break - } - } - return res.join('\n') -} diff --git a/src/hmr.ts b/src/hmr.ts new file mode 100644 index 0000000..1b06e31 --- /dev/null +++ b/src/hmr.ts @@ -0,0 +1,133 @@ +import _debug from 'debug' +import { + createDescriptor, + getDescriptor, + setPrevDescriptor, +} from './utils/descriptorCache' +import { ModuleNode, HmrContext } from 'vite' +import { ResolvedOptions } from './index' +import { SFCBlock } from '@vue/component-compiler-utils' + +const debug = _debug('vite:hmr') + +/** + * Vite-specific HMR handling + */ +export async function handleHotUpdate( + { file, modules, read, server }: HmrContext, + options: ResolvedOptions +): Promise { + const prevDescriptor = getDescriptor(file, false) + if (!prevDescriptor) { + // file hasn't been requested yet (e.g. async component) + return + } + + setPrevDescriptor(file, prevDescriptor) + + const content = await read() + const descriptor = createDescriptor(content, file, options) + + let needRerender = false + const affectedModules = new Set() + const mainModule = modules.find( + (m) => !/type=/.test(m.url) || /type=script/.test(m.url) + ) + const templateModule = modules.find((m) => /type=template/.test(m.url)) + + if (!isEqualBlock(descriptor.script, prevDescriptor.script)) { + affectedModules.add(mainModule) + } + + if (!isEqualBlock(descriptor.template, prevDescriptor.template)) { + affectedModules.add(templateModule) + needRerender = true + } + + let didUpdateStyle = false + const prevStyles = prevDescriptor.styles || [] + const nextStyles = descriptor.styles || [] + + // force reload if scoped status has changed + if (prevStyles.some((s) => s.scoped) !== nextStyles.some((s) => s.scoped)) { + // template needs to be invalidated as well + affectedModules.add(templateModule) + affectedModules.add(mainModule) + } + + // only need to update styles if not reloading, since reload forces + // style updates as well. + for (let i = 0; i < nextStyles.length; i++) { + const prev = prevStyles[i] + const next = nextStyles[i] + if (!prev || !isEqualBlock(prev, next)) { + didUpdateStyle = true + const mod = modules.find((m) => m.url.includes(`type=style&index=${i}`)) + if (mod) { + affectedModules.add(mod) + } else { + // new style block - force reload + affectedModules.add(mainModule) + } + } + } + if (prevStyles.length > nextStyles.length) { + // style block removed - force reload + affectedModules.add(mainModule) + } + + const prevCustoms = prevDescriptor.customBlocks || [] + const nextCustoms = descriptor.customBlocks || [] + + // custom blocks update causes a reload + // because the custom block contents is changed and it may be used in JS. + if (prevCustoms.length !== nextCustoms.length) { + // block rmeoved/added, force reload + affectedModules.add(mainModule) + } else { + for (let i = 0; i < nextCustoms.length; i++) { + const prev = prevCustoms[i] + const next = nextCustoms[i] + if (!prev || !isEqualBlock(prev, next)) { + const mod = modules.find((m) => + m.url.includes(`type=${prev.type}&index=${i}`) + ) + if (mod) { + affectedModules.add(mod) + } else { + affectedModules.add(mainModule) + } + } + } + } + + let updateType = [] + if (needRerender) { + updateType.push(`template`) + // template is inlined into main, add main module instead + if (!templateModule) { + affectedModules.add(mainModule) + } + } + if (didUpdateStyle) { + updateType.push(`style`) + } + if (updateType.length) { + debug(`[vue:update(${updateType.join('&')})] ${file}`) + } + return [...affectedModules].filter(Boolean) as ModuleNode[] +} + +function isEqualBlock(a: SFCBlock | null, b: SFCBlock | null) { + if (!a && !b) return true + if (!a || !b) return false + // src imports will trigger their own updates + if (a.src && b.src && a.src === b.src) return true + if (a.content !== b.content) return false + const keysA = Object.keys(a.attrs) + const keysB = Object.keys(b.attrs) + if (keysA.length !== keysB.length) { + return false + } + return keysA.every((key) => a.attrs[key] === b.attrs[key]) +} diff --git a/src/index.ts b/src/index.ts index 1c28a7a..14e8282 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,35 @@ -import { resolver } from './resolver' -import { vuePlugin, setVueCompilerOptions } from './serverPlugin' import { TemplateCompileOptions } from '@vue/component-compiler-utils/lib/compileTemplate' -import { VuePluginOptions } from 'rollup-plugin-vue' -import { jsxTransform } from './jsxTransform' +import { normalizeComponentCode } from './utils/componentNormalizer' +import { vueHotReloadCode } from './utils/vueHotReload' +import fs from 'fs' +import { parseVueRequest } from './utils/query' +import { createFilter } from '@rollup/pluginutils' +import { transformMain } from './main' +import { compileSFCTemplate } from './template' +import { getDescriptor } from './utils/descriptorCache' +import { transformStyle } from './style' +import { ViteDevServer, Plugin } from 'vite' +import { SFCBlock } from '@vue/component-compiler-utils' +import { handleHotUpdate } from './hmr' +import { transformVueJsx } from './jsxTransform' + +export const vueComponentNormalizer = '/vite/vueComponentNormalizer' +export const vueHotReload = '/vite/vueHotReload' + +// extend the descriptor so we can store the scopeId on it +declare module '@vue/component-compiler-utils' { + interface SFCDescriptor { + id: string + } +} export interface VueViteOptions { + include?: string | RegExp | (string | RegExp)[] + exclude?: string | RegExp | (string | RegExp)[] /** * The options for `@vue/component-compiler-utils`. */ - vueTemplateOptions?: TemplateCompileOptions - /** - * The options for `rollup-plugin-vue`. - */ - rollupPluginVueOptions?: VuePluginOptions + vueTemplateOptions?: Partial /** * The options for jsx transform * @default false @@ -20,26 +37,123 @@ export interface VueViteOptions { jsx?: boolean } -export function createVuePlugin(options: VueViteOptions = {}) { - const { vueTemplateOptions, rollupPluginVueOptions, jsx } = options - if (vueTemplateOptions) { - setVueCompilerOptions(vueTemplateOptions) +export interface ResolvedOptions extends VueViteOptions { + root: string + devServer?: ViteDevServer + isProduction: boolean +} + +export function createVuePlugin(rawOptions: VueViteOptions = {}): Plugin { + const options: ResolvedOptions = { + isProduction: process.env.NODE_ENV === 'production', + ...rawOptions, + root: process.cwd(), } + const filter = createFilter(options.include || /\.vue$/, options.exclude) + return { - resolvers: [resolver], - transforms: jsx ? [jsxTransform] : [], - // if set truly `jsx` option, should disabled esbuild - enableEsbuild: !jsx, - configureServer: vuePlugin, - enableRollupPluginVue: false, - rollupInputOptions: { - plugins: [ - require('rollup-plugin-vue')({ - ...rollupPluginVueOptions, - compiler: vueTemplateOptions && vueTemplateOptions.compiler, - }), - ], + name: 'vite-plugin-vue2', + + config(config) { + if (options.jsx) { + return { esbuild: false } + } + }, + + handleHotUpdate(ctx) { + if (!filter(ctx.file)) { + return + } + return handleHotUpdate(ctx, options) + }, + + configureServer(server) { + options.devServer = server + }, + + async resolveId(id, importer) { + if (id === vueComponentNormalizer || id === vueHotReload) { + return id + } + // serve subpart requests (*?vue) as virtual modules + if (parseVueRequest(id).query.vue) { + return id + } + }, + + load(id) { + if (id === vueComponentNormalizer) { + return normalizeComponentCode + } + + if (id === vueHotReload) { + return vueHotReloadCode + } + + const { filename, query } = parseVueRequest(id) + // select corresponding block for subpart virtual modules + if (query.vue) { + if (query.src) { + return fs.readFileSync(filename, 'utf-8') + } + const descriptor = getDescriptor(filename)! + let block: SFCBlock | null | undefined + + if (query.type === 'script') { + block = descriptor.script! + } else if (query.type === 'template') { + block = descriptor.template! + } else if (query.type === 'style') { + block = descriptor.styles[query.index!] + } else if (query.index != null) { + block = descriptor.customBlocks[query.index] + } + if (block) { + return { + code: block.content, + map: block.map as any, + } + } + } + }, + + async transform(code, id) { + const { filename, query } = parseVueRequest(id) + + if (/\.(tsx?|jsx)$/.test(id)) { + return transformVueJsx(code, id) + } + + if (!query.vue && !filter(filename)) { + return + } + + if (!query.vue) { + // main request + return await transformMain(code, filename, options, this) + } + + const descriptor = getDescriptor(filename)! + // sub block request + if (query.type === 'template') { + return compileSFCTemplate( + code, + descriptor.template!, + filename, + options, + this + ) + } + if (query.type === 'style') { + return transformStyle( + code, + filename, + descriptor, + Number(query.index), + this + ) + } }, } } diff --git a/src/jsxTransform.ts b/src/jsxTransform.ts index 70a404d..9810d49 100644 --- a/src/jsxTransform.ts +++ b/src/jsxTransform.ts @@ -1,20 +1,15 @@ -import { Transform } from 'vite/dist/node/transform' import { transform } from '@babel/core' -export const jsxTransform: Transform = { - test({ path }) { - return /\.(tsx?|jsx)$/.test(path) - }, - transform({ id, code }) { - const result = transform(code, { - plugins: ['transform-vue-jsx'], - filename: id, - sourceMaps: true, - })! +// todo hmr +export function transformVueJsx(code: string, filename: string) { + const result = transform(code, { + plugins: ['transform-vue-jsx'], + filename, + sourceMaps: true, + })! - return { - code: result.code as string, - map: result.map as any, - } - }, + return { + code: result.code as string, + map: result.map as any, + } } diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..b7f3cb0 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,279 @@ +import { SFCBlock, SFCDescriptor } from '@vue/component-compiler-utils' +import { rewriteDefault } from '@vue/compiler-sfc' +import { vueHotReload, vueComponentNormalizer, ResolvedOptions } from './index' +import qs from 'querystring' +import { createDescriptor, setDescriptor } from './utils/descriptorCache' +import path from 'path' +import { TransformPluginContext } from 'rollup' +import { RawSourceMap } from '@vue/component-compiler-utils/dist/types' + +export async function transformMain( + code: string, + filePath: string, + options: ResolvedOptions, + pluginContext: TransformPluginContext +) { + const descriptor = createDescriptor(code, filePath, options) + + const hasFunctional = + descriptor.template && descriptor.template.attrs.functional + + // template + const { code: templateCode, templateRequest } = genTemplateRequest( + filePath, + descriptor + ) + // script + const scriptVar = 'script' + const { scriptCode } = await genScriptCode( + scriptVar, + descriptor, + filePath, + options + ) + // style + const cssModuleVar = '__cssModules' + const { scoped, stylesCode } = genStyleRequest( + cssModuleVar, + descriptor, + filePath + ) + + let result = + `${scriptCode} +${templateCode} +const ${cssModuleVar} = {} +${stylesCode} +/* normalize component */ +import normalizer from "${vueComponentNormalizer}" +var component = normalizer( + script, + render, + staticRenderFns, + ${hasFunctional ? `true` : `false`}, + injectStyles, + ${scoped ? JSON.stringify(descriptor.id) : `null`}, + null, + null +) + `.trim() + `\n` + + result += ` +function injectStyles (context) { + for(let o in ${cssModuleVar}){ + this[o] = ${cssModuleVar}[o] + } +}\n` + + // TODO custom block + // // Expose filename. This is used by the devtools and Vue runtime warnings. + if (options.isProduction) { + // Expose the file's full path in development, so that it can be opened + // from the devtools. + code += `\ncomponent.options.__file = ${JSON.stringify( + path.relative(options.root, filePath).replace(/\\/g, '/') + )}` + } + // else if (options.exposeFilename) { + // // Libraries can opt-in to expose their components' filenames in production builds. + // // For security reasons, only expose the file's basename in production. + // code += `\ncomponent.options.__file = ${JSON.stringify(filePath)}` + // } + + if (options.devServer && !options.isProduction) { + result += genHmrCode(descriptor.id, !!hasFunctional, templateRequest) + } + + result += `\nexport default component.exports` + return result +} + +async function genScriptCode( + scriptVar: string, + descriptor: SFCDescriptor, + filename: string, + options: ResolvedOptions +): Promise<{ + scriptCode: string + map?: RawSourceMap +}> { + const { script } = descriptor + let scriptCode = `const ${scriptVar} = {}` + if (!script) { + return { scriptCode } + } + let map + if (script) { + // If the script is js/ts and has no external src, it can be directly placed + // in the main module. + if ( + (!script.lang || (script.lang === 'ts' && options.devServer)) && + !script.src + ) { + scriptCode = rewriteDefault(script.content, scriptVar) + map = script.map + if (script.lang === 'ts') { + const result = await options.devServer!.transformWithEsbuild( + scriptCode, + filename, + { loader: 'ts' }, + map + ) + scriptCode = result.code + map = result.map + } + } else { + if (script.src) { + linkSrcToDescriptor(script.src, filename, descriptor) + } + const src = script.src || filename + const langFallback = (script.src && path.extname(src).slice(1)) || 'js' + const attrsQuery = attrsToQuery(script.attrs, langFallback) + const srcQuery = script.src ? `&src` : `` + const query = `?vue&type=script${srcQuery}${attrsQuery}` + const request = JSON.stringify(src + query) + scriptCode = + `import ${scriptVar} from ${request}\n` + `export * from ${request}` // support named exports + } + } + return { + scriptCode, + map: map as any, + } +} + +function genTemplateRequest(filename: string, descriptor: SFCDescriptor) { + const template = descriptor.template + if (!template) { + return { code: `const render, staticRenderFns` } + } + if (template.src) { + linkSrcToDescriptor(template.src, filename, descriptor) + } + const src = template.src || filename + const srcQuery = template.src ? `&src` : `` + const attrsQuery = attrsToQuery(template.attrs, 'js', true) + const query = `?vue&type=template${srcQuery}${attrsQuery}` + const templateRequest = src + query + return { + code: `import { render, staticRenderFns } from '${templateRequest}'`, + templateRequest, + } +} + +function genHmrCode(id: string, functional: boolean, templateRequest?: string) { + return `\n/* hot reload */ +import __VUE_HMR_RUNTIME__ from "${vueHotReload}" +import vue from "vue" +__VUE_HMR_RUNTIME__.install(vue) +if(__VUE_HMR_RUNTIME__.compatible){ + if (!__VUE_HMR_RUNTIME__.isRecorded('${id}')) { + __VUE_HMR_RUNTIME__.createRecord('${id}', component.options) + } + import.meta.hot.accept((update) => { + __VUE_HMR_RUNTIME__.${ + functional ? 'rerender' : 'reload' + }('${id}', update.default) + }) + ${ + templateRequest + ? `import.meta.hot.accept('${templateRequest}', (update) => { + __VUE_HMR_RUNTIME__.rerender('${id}', update) + })` + : '' + } +} else { + console.log("The hmr is not compatible.") +}` +} + +function genStyleRequest( + cssModuleVar: string, + descriptor: SFCDescriptor, + filename: string +) { + let scoped: boolean = false + let stylesCode = '' + descriptor.styles.forEach((style, i) => { + if (style.src) { + linkSrcToDescriptor(style.src, filename, descriptor) + } + const src = style.src || filename + const attrsQuery = attrsToQuery(style.attrs, 'css') + const srcQuery = style.src ? `&src` : `` + const query = `?vue&type=style&index=${i}${srcQuery}` + const styleRequest = src + query + attrsQuery + if (style.scoped) scoped = true + if (style.module) { + stylesCode += genCSSModulesCode( + i, + styleRequest, + style.module, + cssModuleVar + ) + } else { + stylesCode += `\nimport ${JSON.stringify(styleRequest)}` + } + }) + + return { scoped, stylesCode } +} + +function genCSSModulesCode( + index: number, + request: string, + moduleName: string | boolean, + cssModuleVar: string +): string { + const styleVar = `__style${index}` + const exposedName = typeof moduleName === 'string' ? moduleName : '$style' + // inject `.module` before extension so vite handles it as css module + const moduleRequest = request.replace(/\.(\w+)$/, '.module.$1') + return ( + `\nimport ${styleVar} from ${JSON.stringify(moduleRequest)}` + + `\n${cssModuleVar}["${exposedName}"] = ${styleVar}` + ) +} + +/** + * For blocks with src imports, it is important to link the imported file + * with its owner SFC descriptor so that we can get the information about + * the owner SFC when compiling that file in the transform phase. + */ +function linkSrcToDescriptor( + src: string, + filename: string, + descriptor: SFCDescriptor +) { + const srcFile = path.posix.resolve(path.posix.dirname(filename), src) + setDescriptor(srcFile, descriptor) +} + +// these are built-in query parameters so should be ignored +// if the user happen to add them as attrs +const ignoreList = ['id', 'index', 'src', 'type', 'lang', 'module'] + +function attrsToQuery( + attrs: SFCBlock['attrs'], + langFallback?: string, + forceLangFallback = false +): string { + let query = `` + for (const name in attrs) { + const value = attrs[name] + if (!ignoreList.includes(name)) { + query += `&${qs.escape(name)}${ + value ? `=${qs.escape(String(value))}` : `` + }` + } + } + if (langFallback || attrs.lang) { + query += + `lang` in attrs + ? forceLangFallback + ? `&lang.${langFallback}` + : `&lang.${attrs.lang}` + : `&lang.${langFallback}` + } + return query +} diff --git a/src/resolver.ts b/src/resolver.ts deleted file mode 100644 index fe37584..0000000 --- a/src/resolver.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Resolver } from 'vite' - -export const resolver: Resolver = { - alias(id) { - if (id === 'vue') { - return 'vue/dist/vue.runtime.esm.js' - } - }, -} diff --git a/src/serverPlugin.ts b/src/serverPlugin.ts deleted file mode 100644 index 84ff36e..0000000 --- a/src/serverPlugin.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { ServerPlugin, Context } from 'vite' -import { - parse, - compileTemplate, - SFCDescriptor, - SFCBlock, -} from '@vue/component-compiler-utils' -import * as fs from 'fs-extra' -import hash_sum from 'hash-sum' -import { transform } from './esbuildService' -import { normalizeComponentCode } from './componentNormalizer' -import { vueHotReloadCode } from './vueHotReload' -import path from 'path' -import { resolveImport } from 'vite/dist/node/server/serverPluginModuleRewrite' -import { InternalResolver } from 'vite/dist/node/resolver' -import { cleanUrl } from 'vite/dist/node/utils' -import { - ensureMapEntry, - importerMap, -} from 'vite/dist/node/server/serverPluginHmr' -import { srcImportMap } from 'vite/dist/node/server/serverPluginVue' -import { TemplateCompileOptions } from '@vue/component-compiler-utils/lib/compileTemplate' -import { clientPublicPath } from 'vite/dist/node/server/serverPluginClient' -import { mergeSourceMap } from 'vite/dist/node/server/serverPluginSourceMap' -import { rewriteDefault } from '@vue/compiler-sfc' - -const vueTemplateCompiler = require('vue-template-compiler') - -export const vueComponentNormalizer = '/vite/vueComponentNormalizer' -export const vueHotReload = '/vite/vueHotReload' - -let vueCompilerOptions: TemplateCompileOptions | null = null - -export function setVueCompilerOptions(opts: TemplateCompileOptions) { - vueCompilerOptions = opts -} - -export const vuePlugin: ServerPlugin = ({ - root, - app, - resolver, - watcher, - config, -}) => { - app.use(async (ctx, next) => { - if (ctx.path === clientPublicPath) { - await next() - ctx.type = 'js' - ctx.body = ctx.body.replace( - /__VUE_HMR_RUNTIME__\.rerender\(path, (.+)\)/g, - '__VUE_HMR_RUNTIME__.rerender(path, m)' - ) - return - } - if (ctx.path === vueHotReload) { - ctx.type = 'js' - ctx.body = vueHotReloadCode - return - } - - if (ctx.path === vueComponentNormalizer) { - ctx.type = 'js' - ctx.body = normalizeComponentCode - return - } - - if (!ctx.path.endsWith('.vue') && !ctx.vue) { - return next() - } - - const query = ctx.query - - const publicPath = ctx.path - let filePath = resolver.requestToFile(publicPath) - const source = readFile(filePath) - const descriptor = JSON.parse( - JSON.stringify( - parse({ - source, - compiler: vueTemplateCompiler, - filename: filePath, - sourceRoot: root, - needMap: true, - }) - ) - ) as SFCDescriptor - if (!descriptor) { - return - } - if (!query.type) { - // rely on vite internal sfc parse.... - await next() - ctx.type = 'js' - ctx.body = await parseSFC( - root, - filePath, - publicPath, - descriptor, - resolver - ) - if (descriptor.script) { - ctx.map = descriptor.script.map - } - return - } - - if (query.type === 'template') { - const templateBlock = descriptor.template! - if (templateBlock && templateBlock.src) { - filePath = await resolveSrcImport(root, templateBlock, ctx, resolver) - } - ctx.type = 'js' - ctx.body = compileSFCTemplate(templateBlock, filePath, publicPath) - return - } - - if (query.type === 'style') { - return next() - } - }) -} - -function readFile(filePath: string): string { - return fs.readFileSync(filePath).toString() -} - -async function parseSFC( - root: string, - filePath: string, - publicPath: string, - descriptor: SFCDescriptor, - resolver: InternalResolver -): Promise { - const hasFunctional = - descriptor.template && descriptor.template.attrs.functional - const id = hash_sum(publicPath) - - // template - let templateImport = `var render, staticRenderFns` - if (descriptor.template) { - templateImport = `import { render, staticRenderFns } from "${publicPath}?type=template"` - } - - // script - let scriptImport = `var script = {}` - if (descriptor.script) { - const scriptBlock = descriptor.script - let code = scriptBlock.content - if (scriptBlock && scriptBlock.src) { - const srcPath = resolveImport(root, publicPath, scriptBlock.src, resolver) - code = readFile(resolver.requestToFile(srcPath)) - } - if (scriptBlock.lang === 'ts') { - const res = await transform(code, publicPath, { - loader: 'ts', - }) - code = res.code - if (scriptBlock.map && scriptBlock.map.sourceRoot) { - scriptBlock.map.sourceRoot = '' - } - scriptBlock.map = mergeSourceMap( - scriptBlock.map, - JSON.parse(res.map!) - ) as any - } - - // rewrite export default. - scriptImport = rewriteDefault(code, 'script') - } - - let stylesCode = `` - let hasScoped - if (descriptor.styles.length) { - descriptor.styles - .filter((s) => !!s.content.trim()) - .forEach((s, i) => { - const styleRequest = publicPath + `?type=style&index=${i}` - if (s.scoped) hasScoped = true - if (s.module) { - const styleVar = `__style${i}` - const moduleName = typeof s.module === 'string' ? s.module : '$style' - stylesCode += `\nimport ${styleVar} from ${JSON.stringify( - styleRequest + '&module' - )}` - stylesCode += `\n__cssModules[${JSON.stringify( - moduleName - )}] = ${styleVar}` - } else { - stylesCode += `\nimport ${JSON.stringify(styleRequest)}` - } - }) - } - - let code = - `${scriptImport} -${templateImport} -const __cssModules = {} -${stylesCode} -/* normalize component */ -import normalizer from "${vueComponentNormalizer}" -var component = normalizer( - script, - render, - staticRenderFns, - ${hasFunctional ? `true` : `false`}, - injectStyles, - ${hasScoped ? JSON.stringify(id) : `null`}, - null, - null -) - `.trim() + `\n` - - code += ` -function injectStyles (context) { - for(let o in __cssModules){ - this[o] = __cssModules[o] - } -} - ` - - // TODO custom block - // if (needsHotReload) { - // code += `\n` + genHotReloadCode(id, hasFunctional, templateRequest) - // } - - // // Expose filename. This is used by the devtools and Vue runtime warnings. - // if (process.env.NODE_ENV === 'production') { - // // Expose the file's full path in development, so that it can be opened - // // from the devtools. - // code += `\ncomponent.options.__file = ${JSON.stringify(rawShortFilePath.replace(/\\/g, '/'))}` - // } else if (options.exposeFilename) { - // // Libraries can opt-in to expose their components' filenames in production builds. - // // For security reasons, only expose the file's basename in production. - // code += `\ncomponent.options.__file = ${JSON.stringify(filename)}` - // } - - code += ` -/* hot reload */ -import __VUE_HMR_RUNTIME__ from "${vueHotReload}" -import vue from "vue" -if (import.meta.hot) { - __VUE_HMR_RUNTIME__.install(vue) - if(__VUE_HMR_RUNTIME__.compatible){ - if (!__VUE_HMR_RUNTIME__.isRecorded('${publicPath}')) { - __VUE_HMR_RUNTIME__.createRecord('${publicPath}', component.options) - } - } else { - console.log("The hmr is not compatible.") - } -}` - - code += `\nexport default component.exports` - return code -} - -function compileSFCTemplate( - block: SFCBlock, - filePath: string, - publicPath: string -): string { - const { tips, errors, code } = compileTemplate({ - source: block.content, - filename: filePath, - compiler: vueTemplateCompiler, - transformAssetUrls: true, - transformAssetUrlsOptions: { - base: path.posix.dirname(publicPath), - }, - isProduction: process.env.NODE_ENV === 'production', - isFunctional: !!block.attrs.functional, - optimizeSSR: false, - prettify: false, - ...vueCompilerOptions, - }) - - if (tips) { - tips.forEach(console.warn) - } - - if (errors) { - errors.forEach(console.error) - } - - return code + `\nexport { render, staticRenderFns }` -} - -async function resolveSrcImport( - root: string, - block: SFCBlock, - ctx: Context, - resolver: InternalResolver -) { - const importer = ctx.path - const importee = cleanUrl(resolveImport(root, importer, block.src!, resolver)) - const filePath = resolver.requestToFile(importee) - block.content = (await ctx.read(filePath)).toString() - - ensureMapEntry(importerMap, importee).add(ctx.path) - srcImportMap.set(filePath, ctx.url) - return filePath -} diff --git a/src/style.ts b/src/style.ts new file mode 100644 index 0000000..4f30d3b --- /dev/null +++ b/src/style.ts @@ -0,0 +1,35 @@ +import { TransformPluginContext } from 'rollup' +import { compileStyle, SFCDescriptor } from '@vue/component-compiler-utils' + +export async function transformStyle( + code: string, + filename: string, + descriptor: SFCDescriptor, + index: number, + pluginContext: TransformPluginContext +) { + const block = descriptor.styles[index] + // vite already handles pre-processors and CSS module so this is only + // applying SFC-specific transforms like scoped mode and CSS vars rewrite (v-bind(var)) + const result = compileStyle({ + source: code, + filename, + id: `data-v-${descriptor.id}`, + // todo + // map: pluginContext.getCombinedSourcemap(), + scoped: !!block.scoped, + trim: true, + }) + + if (result.errors.length) { + result.errors.forEach((error: any) => { + pluginContext.error(error) + }) + return null + } + + return { + code: result.code, + map: result.map as any, + } +} diff --git a/src/template.ts b/src/template.ts new file mode 100644 index 0000000..6c60c5d --- /dev/null +++ b/src/template.ts @@ -0,0 +1,39 @@ +import { SFCBlock, compileTemplate } from '@vue/component-compiler-utils' +import * as vueTemplateCompiler from 'vue-template-compiler' +import path from 'path' +import { TransformPluginContext } from 'rollup' +import { ResolvedOptions } from './index' + +export function compileSFCTemplate( + source: string, + block: SFCBlock, + filename: string, + { root, isProduction, vueTemplateOptions }: ResolvedOptions, + pluginContext: TransformPluginContext +): string { + const { tips, errors, code } = compileTemplate({ + source, + filename, + compiler: vueTemplateCompiler as any, + transformAssetUrls: true, + transformAssetUrlsOptions: { + base: path.posix.dirname(path.relative(root, filename)), + }, + isProduction, + isFunctional: !!block.attrs.functional, + optimizeSSR: false, + prettify: false, + ...vueTemplateOptions, + }) + + if (tips) { + tips.forEach(console.warn) + } + + // todo + if (errors) { + // errors.forEach((e) => pluginContext.error(e)) + } + + return code + `\nexport { render, staticRenderFns }` +} diff --git a/src/componentNormalizer.ts b/src/utils/componentNormalizer.ts similarity index 100% rename from src/componentNormalizer.ts rename to src/utils/componentNormalizer.ts diff --git a/src/utils/descriptorCache.ts b/src/utils/descriptorCache.ts new file mode 100644 index 0000000..cf5e550 --- /dev/null +++ b/src/utils/descriptorCache.ts @@ -0,0 +1,54 @@ +import path from 'path' +import slash from 'slash' +import hash from 'hash-sum' +import { parse, SFCDescriptor } from '@vue/component-compiler-utils' +import * as vueTemplateCompiler from 'vue-template-compiler' +import { ResolvedOptions } from '../index' + +const cache = new Map() +const prevCache = new Map() + +export function createDescriptor( + source: string, + filename: string, + { root, isProduction, vueTemplateOptions }: ResolvedOptions +) { + const descriptor = parse({ + source, + compiler: vueTemplateOptions?.compiler || (vueTemplateCompiler as any), + filename, + sourceRoot: root, + needMap: true, + }) + // ensure the path is normalized in a way that is consistent inside + // project (relative to root) and on different systems. + const normalizedPath = slash(path.normalize(path.relative(root, filename))) + descriptor.id = hash(normalizedPath + (isProduction ? source : '')) + + cache.set(filename, descriptor) + return descriptor +} + +export function getPrevDescriptor(filename: string) { + return prevCache.get(filename) +} + +export function setPrevDescriptor(filename: string, entry: SFCDescriptor) { + prevCache.set(filename, entry) +} + +export function getDescriptor(filename: string, errorOnMissing = true) { + if (cache.has(filename)) { + return cache.get(filename)! + } + if (errorOnMissing) { + throw new Error( + `${filename} has no corresponding SFC entry in the cache. ` + + `This is a vite-plugin-vue2 internal error, please open an issue.` + ) + } +} + +export function setDescriptor(filename: string, entry: SFCDescriptor) { + cache.set(filename, entry) +} diff --git a/src/utils/query.ts b/src/utils/query.ts new file mode 100644 index 0000000..9218443 --- /dev/null +++ b/src/utils/query.ts @@ -0,0 +1,27 @@ +import qs from 'querystring' + +export interface VueQuery { + vue?: boolean + src?: boolean + type?: 'script' | 'template' | 'style' | 'custom' + index?: number + lang?: string +} + +export function parseVueRequest(id: string) { + const [filename, rawQuery] = id.split(`?`, 2) + const query = qs.parse(rawQuery) as VueQuery + if (query.vue != null) { + query.vue = true + } + if (query.src != null) { + query.src = true + } + if (query.index != null) { + query.index = Number(query.index) + } + return { + filename, + query, + } +} diff --git a/src/vueHotReload.ts b/src/utils/vueHotReload.ts similarity index 99% rename from src/vueHotReload.ts rename to src/utils/vueHotReload.ts index 27d6f6a..93cf864 100644 --- a/src/vueHotReload.ts +++ b/src/utils/vueHotReload.ts @@ -1,4 +1,3 @@ - export const vueHotReloadCode = ` var Vue // late bind var version diff --git a/test/util.ts b/test/util.ts index 9c1c3b0..321a3dc 100644 --- a/test/util.ts +++ b/test/util.ts @@ -28,7 +28,6 @@ async function build() { const buildOutput = await execa(binPath, ['build'], { cwd: tempDir, }) - expect(buildOutput.stdout).toMatch('Build completed') expect(buildOutput.stderr).toBe('') console.log('build complete. running build tests...') } @@ -53,7 +52,7 @@ export async function startServer(isBuild: boolean) { devServer.stdout.on('data', (data: Buffer) => { if (data.toString().match('running')) { console.log('dev server running.') - resolve() + resolve('') } }) }) diff --git a/tsconfig.json b/tsconfig.json index b31a8cd..338b078 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "esnext", + "target": "ES2019", "moduleResolution": "node", "strict": true, "declaration": true, diff --git a/yarn.lock b/yarn.lock index 745271a..294a610 100644 --- a/yarn.lock +++ b/yarn.lock @@ -552,6 +552,14 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@rollup/pluginutils@^4.1.0": + version "4.1.0" + resolved "https://registry.npm.taobao.org/@rollup/pluginutils/download/@rollup/pluginutils-4.1.0.tgz?cache=0&sync_timestamp=1603765613301&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40rollup%2Fpluginutils%2Fdownload%2F%40rollup%2Fpluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" + integrity sha1-Dcxhx4DjkldVT+t/dyB9zsoTyDg= + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@sinonjs/commons@^1.7.0": version "1.8.0" resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d" @@ -566,11 +574,6 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@types/babel-types@*", "@types/babel-types@^7.0.0": - version "7.0.7" - resolved "https://registry.npm.taobao.org/@types/babel-types/download/@types/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" - integrity sha1-Zn6xZA6AOUNgKAVXN9K5mG7jNuM= - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.9" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" @@ -604,18 +607,16 @@ dependencies: "@babel/types" "^7.3.0" -"@types/babylon@^6.16.2": - version "6.16.5" - resolved "https://registry.npm.taobao.org/@types/babylon/download/@types/babylon-6.16.5.tgz#1c5641db69eb8cdf378edd25b4be7754beeb48b4" - integrity sha1-HFZB22nrjN83jt0ltL53VL7rSLQ= - dependencies: - "@types/babel-types" "*" - "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz?cache=0&sync_timestamp=1588199606687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcolor-name%2Fdownload%2F%40types%2Fcolor-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA= +"@types/debug@^4.1.5": + version "4.1.5" + resolved "https://registry.npm.taobao.org/@types/debug/download/@types/debug-4.1.5.tgz?cache=0&sync_timestamp=1605052849582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fdebug%2Fdownload%2F%40types%2Fdebug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" + integrity sha1-sU76iFK3do2JiQZhPCP2iHE+As0= + "@types/fs-extra@^9.0.1": version "9.0.1" resolved "https://registry.npm.taobao.org/@types/fs-extra/download/@types/fs-extra-9.0.1.tgz?cache=0&sync_timestamp=1589912820343&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Ffs-extra%2Fdownload%2F%40types%2Ffs-extra-9.0.1.tgz#91c8fc4c51f6d5dbe44c2ca9ab09310bd00c7918" @@ -768,22 +769,6 @@ "@vue/compiler-dom" "3.0.0-rc.5" "@vue/shared" "3.0.0-rc.5" -"@vue/component-compiler-utils@^3.0.0", "@vue/component-compiler-utils@^3.1.2": - version "3.1.2" - resolved "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3" - integrity sha1-ghOl/zIC+fITf+VTcPnouWVggcM= - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.14" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2" - "@vue/component-compiler-utils@^3.2.0": version "3.2.0" resolved "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.0.tgz?cache=0&sync_timestamp=1595427694165&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcomponent-compiler-utils%2Fdownload%2F%40vue%2Fcomponent-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d" @@ -800,22 +785,6 @@ optionalDependencies: prettier "^1.18.2" -"@vue/component-compiler@^4.2.3": - version "4.2.3" - resolved "https://registry.npm.taobao.org/@vue/component-compiler/download/@vue/component-compiler-4.2.3.tgz#052855aea0f9a00eb0eb9786bdf447d29292ae37" - integrity sha1-BShVrqD5oA6w65eGvfRH0pKSrjc= - dependencies: - "@vue/component-compiler-utils" "^3.0.0" - clean-css "^4.1.11" - hash-sum "^1.0.2" - postcss-modules-sync "^1.0.0" - source-map "0.6.*" - optionalDependencies: - less "^3.9.0" - pug "^2.0.3" - sass "^1.18.0" - stylus "^0.54.5" - "@vue/shared@3.0.0-rc.5": version "3.0.0-rc.5" resolved "https://registry.npm.taobao.org/@vue/shared/download/@vue/shared-3.0.0-rc.5.tgz#cea2378e3e37363ddc1f5dd158edc9c9b5b3fff0" @@ -834,13 +803,6 @@ abab@^2.0.3: resolved "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== -acorn-globals@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" - integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8= - dependencies: - acorn "^4.0.4" - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -854,16 +816,6 @@ acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^3.1.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz?cache=0&sync_timestamp=1591869431317&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - -acorn@^4.0.4, acorn@~4.0.2: - version "4.0.13" - resolved "https://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz?cache=0&sync_timestamp=1591869431317&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= - acorn@^7.1.1: version "7.3.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" @@ -897,15 +849,6 @@ ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -956,7 +899,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.1: +anymatch@^3.0.3: version "3.1.1" resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha1-xV7PAhheJGklk5kxDBc84xIzsUI= @@ -1011,11 +954,6 @@ arrify@^2.0.1: resolved "https://registry.npm.taobao.org/arrify/download/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo= -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - asn1@~0.2.3: version "0.2.4" resolved "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1621,21 +1559,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4= - big.js@^5.2.2: version "5.2.2" resolved "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&sync_timestamp=1593261419324&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha1-MPpAyef+B9vIlWeM0ocCTeokHdk= - bl@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" @@ -1674,7 +1602,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1: version "3.0.2" resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= @@ -1772,11 +1700,6 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= - camelcase@^2.0.0: version "2.1.1" resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -1814,14 +1737,6 @@ caseless@~0.12.0: resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - chalk@^1.1.3: version "1.1.3" resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591686984650&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1833,7 +1748,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= @@ -1863,28 +1778,6 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -character-parser@^2.1.1: - version "2.2.0" - resolved "https://registry.npm.taobao.org/character-parser/download/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" - integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A= - dependencies: - is-regex "^1.0.3" - -"chokidar@>=2.0.0 <4.0.0": - version "3.4.0" - resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.0.tgz?cache=0&sync_timestamp=1587911196018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" - integrity sha1-swYRQjzjdjV8dlubj5BLn7o8C+g= - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -1910,13 +1803,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@^4.1.11: - version "4.2.3" - resolved "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g= - dependencies: - source-map "~0.6.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035230294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -1937,15 +1823,6 @@ cli-truncate@2.1.0, cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - cliui@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -1955,11 +1832,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -clone@^2.1.2: - version "2.1.2" - resolved "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - co@^4.6.0: version "4.6.0" resolved "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2002,6 +1874,11 @@ color-name@~1.1.4: resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz?cache=0&sync_timestamp=1593955804228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs= + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2039,16 +1916,6 @@ consolidate@^0.15.1: dependencies: bluebird "^3.1.1" -constantinople@^3.0.1, constantinople@^3.1.2: - version "3.1.2" - resolved "https://registry.npm.taobao.org/constantinople/download/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" - integrity sha1-1F7XJPV9PRBQABen06iJwTga5kc= - dependencies: - "@types/babel-types" "^7.0.0" - "@types/babylon" "^6.16.2" - babel-types "^6.26.0" - babylon "^6.18.0" - conventional-changelog-angular@^5.0.10: version "5.0.10" resolved "https://registry.npm.taobao.org/conventional-changelog-angular/download/conventional-changelog-angular-5.0.10.tgz#5cf7b00dd315b6a6a558223c80d5ef24ddb34205" @@ -2274,32 +2141,6 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -css-parse@~2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/css-parse/download/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" - integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= - dependencies: - css "^2.0.0" - -css-selector-tokenizer@^0.7.0: - version "0.7.2" - resolved "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.2.tgz?cache=0&sync_timestamp=1583234719732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-selector-tokenizer%2Fdownload%2Fcss-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" - integrity sha1-EeXifJpI2QKE8i1FBhwwPXolrYc= - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - regexpu-core "^4.6.0" - -css@^2.0.0: - version "2.2.4" - resolved "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz?cache=0&sync_timestamp=1593663579643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss%2Fdownload%2Fcss-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk= - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -2376,12 +2217,12 @@ debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: dependencies: ms "2.0.0" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= +debug@^4.3.1: + version "4.3.1" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566571506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4= dependencies: - ms "2.0.0" + ms "2.1.2" decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: version "1.1.0" @@ -2391,7 +2232,7 @@ decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1580010393599&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2470,11 +2311,6 @@ diff-sequences@^26.0.0: resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" integrity sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg== -doctypes@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/doctypes/download/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" - integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= - domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -2507,11 +2343,6 @@ emoji-regex@^8.0.0: resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -2531,13 +2362,6 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" -errno@^0.1.1: - version "0.1.7" - resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= - dependencies: - prr "~1.0.1" - error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2545,10 +2369,10 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -esbuild@^0.5.19: - version "0.5.19" - resolved "https://registry.npm.taobao.org/esbuild/download/esbuild-0.5.19.tgz?cache=0&sync_timestamp=1593728217381&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesbuild%2Fdownload%2Fesbuild-0.5.19.tgz#00daed3290407e87347266ed285ef4ce86040f13" - integrity sha1-ANrtMpBAfoc0cmbtKF70zoYEDxM= +esbuild@^0.8.26: + version "0.8.29" + resolved "https://registry.npm.taobao.org/esbuild/download/esbuild-0.8.29.tgz?cache=0&sync_timestamp=1609590760009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesbuild%2Fdownload%2Fesbuild-0.8.29.tgz#cc20fb752e0905a3546d68ae1be58f9b97044c39" + integrity sha1-zCD7dS4JBaNUbWiuG+WPm5cETDk= escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" @@ -2582,11 +2406,6 @@ estraverse@^4.2.0: resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.npm.taobao.org/estree-walker/download/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha1-UwSRQ/QMbrkYsjZx0f4yGfOhs2I= - estree-walker@^2.0.1: version "2.0.1" resolved "https://registry.npm.taobao.org/estree-walker/download/estree-walker-2.0.1.tgz#f8e030fb21cefa183b44b7ad516b747434e7a3e0" @@ -2743,11 +2562,6 @@ fast-levenshtein@~2.0.6: resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha1-kXKMWllC7O2FMSg8eUQe5BIsNak= - fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -2860,13 +2674,6 @@ fsevents@^2.1.2, fsevents@~2.1.2: resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4= -generic-names@^1.0.2: - version "1.0.3" - resolved "https://registry.npm.taobao.org/generic-names/download/generic-names-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgeneric-names%2Fdownload%2Fgeneric-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= - dependencies: - loader-utils "^0.2.16" - generic-names@^2.0.1: version "2.0.1" resolved "https://registry.npm.taobao.org/generic-names/download/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" @@ -2975,13 +2782,6 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha1-tsHvQXxOVmPqSY8cRa+saRa7wik= - dependencies: - is-glob "^4.0.1" - glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -3051,11 +2851,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3066,11 +2861,6 @@ has-flag@^4.0.0: resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -3163,7 +2953,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -icss-replace-symbols@^1.0.2, icss-replace-symbols@^1.1.0: +icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= @@ -3180,11 +2970,6 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz?cache=0&sync_timestamp=1569841504754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimage-size%2Fdownload%2Fimage-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= - import-fresh@^3.1.0: version "3.2.1" resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" @@ -3282,13 +3067,6 @@ is-arrayish@^0.2.1: resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= - dependencies: - binary-extensions "^2.0.0" - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3345,14 +3123,6 @@ is-docker@^2.0.0: resolved "https://registry.npm.taobao.org/is-docker/download/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" integrity sha1-LLDfDnXi0GT+GGTDfN6st7Lc8ls= -is-expression@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/is-expression/download/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" - integrity sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8= - dependencies: - acorn "~4.0.2" - object-assign "^4.0.1" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3365,11 +3135,6 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - is-finite@^1.0.0: version "1.1.0" resolved "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz?cache=0&sync_timestamp=1581060993775&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-finite%2Fdownload%2Fis-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" @@ -3385,13 +3150,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= - dependencies: - is-extglob "^2.1.1" - is-number@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3426,18 +3184,6 @@ is-potential-custom-element-name@^1.0.0: resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-promise@^2.0.0: - version "2.2.2" - resolved "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz?cache=0&sync_timestamp=1588001830257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-promise%2Fdownload%2Fis-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha1-OauVnMv5p3TPB597QMeib3YxNfE= - -is-regex@^1.0.3: - version "1.1.0" - resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" - integrity sha1-7OOOOJ5JDfDcIcrqK9WW+Yf3Z/8= - dependencies: - has-symbols "^1.0.1" - is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -3925,16 +3671,6 @@ jest@^26.1.0: import-local "^3.0.2" jest-cli "^26.1.0" -js-base64@^2.1.9: - version "2.6.2" - resolved "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.2.tgz?cache=0&sync_timestamp=1593072063249&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.2.tgz#cf9301bc5cc756892a9a6c8d7138322e5944fb0d" - integrity sha1-z5MBvFzHVokqmmyNcTgyLllE+w0= - -js-stringify@^1.0.1: - version "1.0.2" - resolved "https://registry.npm.taobao.org/js-stringify/download/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" - integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds= - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796305651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4027,11 +3763,6 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz?cache=0&sync_timestamp=1586045666090&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - json5@^1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -4063,14 +3794,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jstransformer@1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/jstransformer/download/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" - integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= - dependencies: - is-promise "^2.0.0" - promise "^7.0.1" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -4100,28 +3823,6 @@ kleur@^3.0.3: resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= - -less@^3.9.0: - version "3.11.3" - resolved "https://registry.npm.taobao.org/less/download/less-3.11.3.tgz#2d853954fcfe0169a8af869620bcaa16563dcc1c" - integrity sha1-LYU5VPz+AWmor4aWILyqFlY9zBw= - dependencies: - clone "^2.1.2" - tslib "^1.10.0" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - make-dir "^2.1.0" - mime "^1.4.1" - promise "^7.1.1" - request "^2.83.0" - source-map "~0.6.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -4196,16 +3897,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - loader-utils@^1.1.0: version "1.4.0" resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" @@ -4297,11 +3988,6 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= - loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -4339,14 +4025,6 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.4" -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1587567610342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -4494,11 +4172,6 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.44.0" -mime@^1.4.1: - version "1.6.0" - resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596728112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= - mime@^2.0.3: version "2.4.6" resolved "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" @@ -4561,13 +4234,6 @@ mkdirp@1.x: resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha1-PrXtYmInVteaXw4qIh3+utdcL34= -mkdirp@~0.5.x: - version "0.5.5" - resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= - dependencies: - minimist "^1.2.5" - modify-values@^1.0.0: version "1.0.1" resolved "https://registry.npm.taobao.org/modify-values/download/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -4578,11 +4244,16 @@ ms@2.0.0: resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= +nanoid@^3.1.20: + version "3.1.20" + resolved "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.20.tgz?cache=0&sync_timestamp=1606833990942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanoid%2Fdownload%2Fnanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha1-utwmPGsdzxS3HvqoX2q0wdbPx4g= + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -4659,7 +4330,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= @@ -4693,7 +4364,7 @@ oauth-sign@~0.9.0: resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1: version "4.1.1" resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -4917,7 +4588,7 @@ performance-now@^2.1.0: resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.2: version "2.2.2" resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0= @@ -4932,11 +4603,6 @@ pify@^3.0.0: resolved "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -4982,14 +4648,6 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" -postcss-modules-local-by-default@^1.1.1: - version "1.2.0" - resolved "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - postcss-modules-local-by-default@^3.0.2: version "3.0.3" resolved "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz?cache=0&sync_timestamp=1595731916732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" @@ -5000,14 +4658,6 @@ postcss-modules-local-by-default@^3.0.2: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^1.0.2: - version "1.1.0" - resolved "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - postcss-modules-scope@^2.2.0: version "2.2.0" resolved "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz?cache=0&sync_timestamp=1584620714522&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-scope%2Fdownload%2Fpostcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" @@ -5016,18 +4666,6 @@ postcss-modules-scope@^2.2.0: postcss "^7.0.6" postcss-selector-parser "^6.0.0" -postcss-modules-sync@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/postcss-modules-sync/download/postcss-modules-sync-1.0.0.tgz#619a719cf78dd16a4834135140b324cf77334be1" - integrity sha1-YZpxnPeN0WpINBNRQLMkz3czS+E= - dependencies: - generic-names "^1.0.2" - icss-replace-symbols "^1.0.2" - postcss "^5.2.5" - postcss-modules-local-by-default "^1.1.1" - postcss-modules-scope "^1.0.2" - string-hash "^1.1.0" - postcss-modules-values@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" @@ -5065,25 +4703,6 @@ postcss-value-parser@^4.1.0: resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss= -postcss@^5.2.5: - version "5.2.18" - resolved "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U= - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1: - version "6.0.23" - resolved "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ= - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.32" resolved "https://registry.npm.taobao.org/postcss/download/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" @@ -5093,6 +4712,15 @@ postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0. source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.2.1: + version "8.2.2" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-8.2.2.tgz?cache=0&sync_timestamp=1609273988566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-8.2.2.tgz#60613b62297005084fd21024a68637798864fe26" + integrity sha1-YGE7YilwBQhP0hAkpoY3eYhk/iY= + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -5143,13 +4771,6 @@ progress@^2.0.1: resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise@^7.0.1, promise@^7.1.1: - version "7.3.1" - resolved "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpromise%2Fdownload%2Fpromise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= - dependencies: - asap "~2.0.3" - prompts@^2.0.1: version "2.3.2" resolved "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" @@ -5163,11 +4784,6 @@ proxy-from-env@^1.0.0: resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5178,111 +4794,6 @@ psl@^1.1.28: resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= -pug-attrs@^2.0.4: - version "2.0.4" - resolved "https://registry.npm.taobao.org/pug-attrs/download/pug-attrs-2.0.4.tgz#b2f44c439e4eb4ad5d4ef25cac20d18ad28cc336" - integrity sha1-svRMQ55OtK1dTvJcrCDRitKMwzY= - dependencies: - constantinople "^3.0.1" - js-stringify "^1.0.1" - pug-runtime "^2.0.5" - -pug-code-gen@^2.0.2: - version "2.0.2" - resolved "https://registry.npm.taobao.org/pug-code-gen/download/pug-code-gen-2.0.2.tgz#ad0967162aea077dcf787838d94ed14acb0217c2" - integrity sha1-rQlnFirqB33PeHg42U7RSssCF8I= - dependencies: - constantinople "^3.1.2" - doctypes "^1.1.0" - js-stringify "^1.0.1" - pug-attrs "^2.0.4" - pug-error "^1.3.3" - pug-runtime "^2.0.5" - void-elements "^2.0.1" - with "^5.0.0" - -pug-error@^1.3.3: - version "1.3.3" - resolved "https://registry.npm.taobao.org/pug-error/download/pug-error-1.3.3.tgz#f342fb008752d58034c185de03602dd9ffe15fa6" - integrity sha1-80L7AIdS1YA0wYXeA2At2f/hX6Y= - -pug-filters@^3.1.1: - version "3.1.1" - resolved "https://registry.npm.taobao.org/pug-filters/download/pug-filters-3.1.1.tgz#ab2cc82db9eeccf578bda89130e252a0db026aa7" - integrity sha1-qyzILbnuzPV4vaiRMOJSoNsCaqc= - dependencies: - clean-css "^4.1.11" - constantinople "^3.0.1" - jstransformer "1.0.0" - pug-error "^1.3.3" - pug-walk "^1.1.8" - resolve "^1.1.6" - uglify-js "^2.6.1" - -pug-lexer@^4.1.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/pug-lexer/download/pug-lexer-4.1.0.tgz#531cde48c7c0b1fcbbc2b85485c8665e31489cfd" - integrity sha1-UxzeSMfAsfy7wrhUhchmXjFInP0= - dependencies: - character-parser "^2.1.1" - is-expression "^3.0.0" - pug-error "^1.3.3" - -pug-linker@^3.0.6: - version "3.0.6" - resolved "https://registry.npm.taobao.org/pug-linker/download/pug-linker-3.0.6.tgz#f5bf218b0efd65ce6670f7afc51658d0f82989fb" - integrity sha1-9b8hiw79Zc5mcPevxRZY0Pgpifs= - dependencies: - pug-error "^1.3.3" - pug-walk "^1.1.8" - -pug-load@^2.0.12: - version "2.0.12" - resolved "https://registry.npm.taobao.org/pug-load/download/pug-load-2.0.12.tgz#d38c85eb85f6e2f704dea14dcca94144d35d3e7b" - integrity sha1-04yF64X24vcE3qFNzKlBRNNdPns= - dependencies: - object-assign "^4.1.0" - pug-walk "^1.1.8" - -pug-parser@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/pug-parser/download/pug-parser-5.0.1.tgz#03e7ada48b6840bd3822f867d7d90f842d0ffdc9" - integrity sha1-A+etpItoQL04Ivhn19kPhC0P/ck= - dependencies: - pug-error "^1.3.3" - token-stream "0.0.1" - -pug-runtime@^2.0.5: - version "2.0.5" - resolved "https://registry.npm.taobao.org/pug-runtime/download/pug-runtime-2.0.5.tgz?cache=0&sync_timestamp=1590409234802&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpug-runtime%2Fdownload%2Fpug-runtime-2.0.5.tgz#6da7976c36bf22f68e733c359240d8ae7a32953a" - integrity sha1-baeXbDa/IvaOczw1kkDYrnoylTo= - -pug-strip-comments@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/pug-strip-comments/download/pug-strip-comments-1.0.4.tgz#cc1b6de1f6e8f5931cf02ec66cdffd3f50eaf8a8" - integrity sha1-zBtt4fbo9ZMc8C7GbN/9P1Dq+Kg= - dependencies: - pug-error "^1.3.3" - -pug-walk@^1.1.8: - version "1.1.8" - resolved "https://registry.npm.taobao.org/pug-walk/download/pug-walk-1.1.8.tgz#b408f67f27912f8c21da2f45b7230c4bd2a5ea7a" - integrity sha1-tAj2fyeRL4wh2i9FtyMMS9Kl6no= - -pug@^2.0.3: - version "2.0.4" - resolved "https://registry.npm.taobao.org/pug/download/pug-2.0.4.tgz?cache=0&sync_timestamp=1590410429990&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpug%2Fdownload%2Fpug-2.0.4.tgz#ee7682ec0a60494b38d48a88f05f3b0ac931377d" - integrity sha1-7naC7ApgSUs41IqI8F87CskxN30= - dependencies: - pug-code-gen "^2.0.2" - pug-filters "^3.1.1" - pug-lexer "^4.1.0" - pug-linker "^3.0.6" - pug-load "^2.0.12" - pug-parser "^5.0.1" - pug-runtime "^2.0.5" - pug-strip-comments "^1.0.4" - pump@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -5417,13 +4928,6 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz?cache=0&sync_timestamp=1584985807685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto= - dependencies: - picomatch "^2.2.1" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -5455,14 +4959,7 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha1-5d5xEdZV57pgwFfb6f83yH5lzew= - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: +regenerate@^1.2.1: version "1.4.1" resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz?cache=0&sync_timestamp=1591301462921&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" integrity sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8= @@ -5503,28 +5000,11 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.6.0: - version "4.7.0" - resolved "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg= - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz?cache=0&sync_timestamp=1590335980151&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsgen%2Fdownload%2Fregjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM= - regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz?cache=0&sync_timestamp=1583896772430&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsparser%2Fdownload%2Fregjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" @@ -5532,13 +5012,6 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI= - dependencies: - jsesc "~0.5.0" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -5549,7 +5022,7 @@ repeat-element@^1.1.2: resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -5577,7 +5050,7 @@ request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.83.0, request@^2.88.2: +request@^2.88.2: version "2.88.2" resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= @@ -5655,13 +5128,6 @@ ret@~0.1.10: resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= - dependencies: - align-text "^0.1.1" - rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -5669,27 +5135,12 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-plugin-vue@5.1.9: - version "5.1.9" - resolved "https://registry.npm.taobao.org/rollup-plugin-vue/download/rollup-plugin-vue-5.1.9.tgz#8769cfdac5531c2d1970222b7887b883db37b866" - integrity sha1-h2nP2sVTHC0ZcCIreIe4g9s3uGY= - dependencies: - "@vue/component-compiler" "^4.2.3" - "@vue/component-compiler-utils" "^3.1.2" - debug "^4.1.1" - hash-sum "^1.0.2" - magic-string "^0.25.7" - querystring "^0.2.0" - rollup-pluginutils "^2.8.2" - source-map "0.7.3" - vue-runtime-helpers "^1.1.2" - -rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.npm.taobao.org/rollup-pluginutils/download/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha1-cvKvB0i1kjZNvTOJ5gDlqURKNR4= - dependencies: - estree-walker "^0.6.1" +rollup@^2.35.1: + version "2.35.1" + resolved "https://registry.npm.taobao.org/rollup/download/rollup-2.35.1.tgz?cache=0&sync_timestamp=1607955456160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frollup%2Fdownload%2Frollup-2.35.1.tgz#e6bc8d10893556a638066f89e8c97f422d03968c" + integrity sha1-5ryNEIk1VqY4Bm+J6Ml/Qi0Dlow= + optionalDependencies: + fsevents "~2.1.2" rsvp@^4.8.4: version "4.8.5" @@ -5720,7 +5171,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= @@ -5740,18 +5191,6 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass@^1.18.0: - version "1.26.9" - resolved "https://registry.npm.taobao.org/sass/download/sass-1.26.9.tgz?cache=0&sync_timestamp=1592863994942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass%2Fdownload%2Fsass-1.26.9.tgz#73c10cbb88c12b22a9e0107725bfd62296f4978f" - integrity sha1-c8EMu4jBKyKp4BB3Jb/WIpb0l48= - dependencies: - chokidar ">=2.0.0 <4.0.0" - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= - saxes@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -5764,7 +5203,7 @@ semver-compare@^1.0.0: resolved "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.7.1" resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= @@ -5895,7 +5334,7 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: +source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584831908370&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= @@ -5919,21 +5358,21 @@ source-map-url@^0.4.0: resolved "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@0.6.*, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= -source-map@0.7.3, source-map@^0.7.3: +source-map@^0.7.3: version "0.7.3" resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha1-UwL4FpAxc1ImVECS5kmB91F1A4M= -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz?cache=0&sync_timestamp=1579203623896&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsourcemap-codec%2Fdownload%2Fsourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -6031,7 +5470,7 @@ string-argv@0.3.1: resolved "https://registry.npm.taobao.org/string-argv/download/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha1-leL77AQnrhkYSTX4FtdKqkxcGdo= -string-hash@^1.1.0, string-hash@^1.1.1: +string-hash@^1.1.1: version "1.1.3" resolved "https://registry.npm.taobao.org/string-hash/download/string-hash-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-hash%2Fdownload%2Fstring-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= @@ -6136,33 +5575,12 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -stylus@^0.54.5: - version "0.54.7" - resolved "https://registry.npm.taobao.org/stylus/download/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" - integrity sha1-xs5Hk5Ze5Ti86+UPMVN7/ATYjNI= - dependencies: - css-parse "~2.0.0" - debug "~3.1.0" - glob "^7.1.3" - mkdirp "~0.5.x" - safer-buffer "^2.1.2" - sax "~1.2.4" - semver "^6.0.0" - source-map "^0.7.3" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= @@ -6325,11 +5743,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -token-stream@0.0.1: - version "0.0.1" - resolved "https://registry.npm.taobao.org/token-stream/download/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" - integrity sha1-zu78cXp2xDFvEm0LnbqlXX598Bo= - tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -6390,7 +5803,7 @@ ts-jest@^26.1.1: semver "7.x" yargs-parser "18.x" -tslib@^1.10.0, tslib@^1.9.0: +tslib@^1.9.0: version "1.13.0" resolved "https://registry.npm.taobao.org/tslib/download/tslib-1.13.0.tgz?cache=0&sync_timestamp=1589412158978&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM= @@ -6446,31 +5859,16 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^3.9.6: - version "3.9.6" - resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.9.6.tgz?cache=0&sync_timestamp=1593760669451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.9.6.tgz#8f3e0198a34c3ae17091b35571d3afd31999365a" - integrity sha1-jz4BmKNMOuFwkbNVcdOv0xmZNlo= - -uglify-js@^2.6.1: - version "2.8.29" - resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz?cache=0&sync_timestamp=1592744803278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" +typescript@^4.1.2: + version "4.1.3" + resolved "https://registry.npm.taobao.org/typescript/download/typescript-4.1.3.tgz?cache=0&sync_timestamp=1609743619095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + integrity sha1-UZ1YK9lMugz4k0x9joRn5HP1O7c= uglify-js@^3.1.4: version "3.10.0" resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" integrity sha1-OXp+bjHOggv9HLVbgE7hQMWHqec= -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= - unbzip2-stream@^1.3.3: version "1.4.3" resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -6479,29 +5877,6 @@ unbzip2-stream@^1.3.3: buffer "^5.2.1" through "^2.3.8" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha1-JhmADEyCWADv3YNDr33Zkzy+KBg= - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw= - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz?cache=0&sync_timestamp=1583948593703&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-match-property-value-ecmascript%2Fdownload%2Funicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha1-DZH2AO7rMJaqlisdb8iIduZOpTE= - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583945817604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ= - union-value@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -6588,15 +5963,16 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -void-elements@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -vue-runtime-helpers@^1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/vue-runtime-helpers/download/vue-runtime-helpers-1.1.2.tgz#446b7b820888ab0c5264d2c3a32468e72e4100f3" - integrity sha1-RGt7ggiIqwxSZNLDoyRo5y5BAPM= +vite@2.0.0-beta.4: + version "2.0.0-beta.4" + resolved "https://registry.npm.taobao.org/vite/download/vite-2.0.0-beta.4.tgz?cache=0&sync_timestamp=1609742842115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvite%2Fdownload%2Fvite-2.0.0-beta.4.tgz#6ea8e08ae5e6b510548d02ec770d34046622aef7" + integrity sha1-bqjgiuXmtRBUjQLsdw00BGYirvc= + dependencies: + esbuild "^0.8.26" + postcss "^8.2.1" + rollup "^2.35.1" + optionalDependencies: + fsevents "~2.1.2" vue-template-compiler@^2.6.11: version "2.6.11" @@ -6687,29 +6063,11 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= - -with@^5.0.0: - version "5.1.1" - resolved "https://registry.npm.taobao.org/with/download/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" - integrity sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4= - dependencies: - acorn "^3.1.0" - acorn-globals "^3.0.0" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= - wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -6811,16 +6169,6 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz?cache=0&sync_timestamp=1593706990702&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"