diff --git a/README.md b/README.md index f6e51db73..fa3e46a44 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Vant 3 supports modern browsers and Chrome >= 51、iOS >= 10.0 (same as Vue 3). | Project | Description | | --- | --- | | [3lang3/react-vant](https://github.com/3lang3/react-vant) | React mobile UI Components based on Vant | -| [mxdi9i7/vant-react](https://github.com/mxdi9i7/vant-react) | Mobile UI Components built on React and TS, inspired by Vant | +| [rc-ui-lib](https://github.com/rancui/rc-ui-lib) | React mobile UI Components based on Vant | | [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Alipay MiniProgram UI | | [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro | | [vant-theme](https://github.com/Aisen60/vant-theme) | Online theme preview built on Vant UI | diff --git a/README.zh-CN.md b/README.zh-CN.md index 03f6f2285..42a7d38d6 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -25,7 +25,7 @@ ### 介绍 -Vant 是**有赞前端团队**开源的移动端组件库,于 2017 年开源,已持续维护 4 年时间。Vant 对内承载了有赞所有核心业务,对外服务十多万开发者,是业界主流的移动端组件库之一。 +Vant 是**有赞前端团队**开源的移动端组件库,于 2017 年开源。Vant 对内承载了有赞所有核心业务,对外服务十多万开发者,是业界主流的移动端组件库之一。 目前 Vant 官方提供了 [Vue 2 版本](https://vant-contrib.gitee.io/vant)、[Vue 3 版本](https://vant-contrib.gitee.io/vant/v3)和[微信小程序版本](http://vant-contrib.gitee.io/vant-weapp),并由社区团队维护 [React 版本](https://github.com/mxdi9i7/vant-react)和[支付宝小程序版本](https://github.com/ant-move/Vant-Aliapp)。 @@ -104,7 +104,7 @@ Vant 3 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一致 | 项目 | 描述 | | --- | --- | | [3lang3/react-vant](https://github.com/3lang3/react-vant) | 参照 Vant 打造的 React 框架移动端组件库 | -| [mxdi9i7/vant-react](https://github.com/mxdi9i7/vant-react) | 基于 React 和 TS 构建的移动端组件库 | +| [rc-ui-lib](https://github.com/rancui/rc-ui-lib) | 参照 Vant 打造的 React 框架移动端组件库 | | [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Vant 支付宝小程序版 | | [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro 版 | | [vant-theme](https://github.com/Aisen60/vant-theme) | Vant 在线主题预览工具 | diff --git a/packages/create-vant-cli-app/generators/vue3/package.json.tpl b/packages/create-vant-cli-app/generators/vue3/package.json.tpl index c667d4c71..47764cd62 100644 --- a/packages/create-vant-cli-app/generators/vue3/package.json.tpl +++ b/packages/create-vant-cli-app/generators/vue3/package.json.tpl @@ -31,7 +31,6 @@ }, "devDependencies": { "@vant/cli": "^3.9.0", - "@vue/compiler-sfc": "^3.0.0", "vue": "^3.0.0" }, "eslintConfig": { diff --git a/packages/vant-area-data/build.js b/packages/vant-area-data/build.js new file mode 100644 index 000000000..f696cf294 --- /dev/null +++ b/packages/vant-area-data/build.js @@ -0,0 +1 @@ +require('../vant-use/build'); diff --git a/packages/vant-area-data/package.json b/packages/vant-area-data/package.json index 54d7a255a..0310c686c 100644 --- a/packages/vant-area-data/package.json +++ b/packages/vant-area-data/package.json @@ -1,12 +1,17 @@ { "name": "@vant/area-data", - "version": "1.1.3", + "version": "1.2.1", "description": "Vant 省市区数据", - "main": "./lib/index.js", - "typings": "./lib/index.d.ts", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts", "scripts": { - "build": "rimraf ./lib && tsc", - "release": "pnpm build && npm publish", + "clean": "rimraf ./dist", + "dev": "node ./build.js -w", + "build:types": "tsc -p ./tsconfig.json --emitDeclarationOnly", + "build:bundle": "node ./build.js", + "build": "pnpm clean && pnpm build:bundle && pnpm build:types", + "release": "pnpm build && release-it", "prepare": "pnpm build" }, "publishConfig": { @@ -20,5 +25,16 @@ }, "bugs": "https://github.com/youzan/vant/issues", "author": "chenjiahan", - "license": "MIT" + "license": "MIT", + "devDependencies": { + "esbuild": "^0.13.15", + "release-it": "^14.2.2", + "typescript": "~4.5.2" + }, + "release-it": { + "git": { + "tag": false, + "commitMessage": "release: @vant/area-data ${version}" + } + } } diff --git a/packages/vant-area-data/src/index.ts b/packages/vant-area-data/src/index.ts index c332cb7ac..e09121b2e 100644 --- a/packages/vant-area-data/src/index.ts +++ b/packages/vant-area-data/src/index.ts @@ -390,7 +390,7 @@ export const areaList = { 711100: '新北市', 711200: '宜兰县', 711300: '新竹县', - 711400: '桃园县', + 711400: '桃园市', 711500: '苗栗县', 711700: '彰化县', 711900: '嘉义县', @@ -1290,8 +1290,8 @@ export const areaList = { 330110: '余杭区', 330111: '富阳区', 330112: '临安区', - 330113: '钱塘区', - 330114: '临平区', + 330113: '临平区', + 330114: '钱塘区', 330122: '桐庐县', 330127: '淳安县', 330182: '建德市', diff --git a/packages/vant-area-data/tsconfig.json b/packages/vant-area-data/tsconfig.json index 12b1beb8b..04da53d75 100644 --- a/packages/vant-area-data/tsconfig.json +++ b/packages/vant-area-data/tsconfig.json @@ -1,8 +1,7 @@ { "extends": "../../tsconfig", "compilerOptions": { - "target": "ES2019", - "outDir": "./lib", + "outDir": "./dist", "declaration": true }, "include": ["src/**/*"] diff --git a/packages/vant-cli/cjs/babel.config.cjs b/packages/vant-cli/cjs/babel.config.cjs deleted file mode 100644 index 6d6271e58..000000000 --- a/packages/vant-cli/cjs/babel.config.cjs +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = function (api, options) { - if (api) { - api.cache.never(); - } - - const { BABEL_MODULE, NODE_ENV } = process.env; - const isTest = NODE_ENV === 'test'; - const useESModules = BABEL_MODULE !== 'commonjs' && !isTest; - - return { - presets: [ - [ - require.resolve('@babel/preset-env'), - { - modules: useESModules ? false : 'commonjs', - loose: options.loose, - }, - ], - require.resolve('@babel/preset-typescript'), - ], - plugins: [ - [ - require.resolve('@vue/babel-plugin-jsx'), - { - enableObjectSlots: options.enableObjectSlots, - }, - ], - ], - }; -}; diff --git a/packages/vant-cli/cjs/jest.config.cjs b/packages/vant-cli/cjs/jest.config.cjs index c34ffb7de..8c082594b 100644 --- a/packages/vant-cli/cjs/jest.config.cjs +++ b/packages/vant-cli/cjs/jest.config.cjs @@ -16,8 +16,7 @@ const DEFAULT_CONFIG = { setupFilesAfterEnv: [JEST_SETUP_FILE], moduleFileExtensions: ['js', 'jsx', 'vue', 'ts', 'tsx'], transform: { - '\\.(vue)$': 'vue3-jest', - '\\.(js|jsx|ts|tsx)$': 'babel-jest', + '\\.(js|jsx|ts|tsx|vue)$': '/node_modules/@vant/cli/cjs/jest.transformer.cjs', }, transformIgnorePatterns: ['/node_modules/(?!(@vant/cli))/'], snapshotSerializers: ['jest-serializer-html'], diff --git a/packages/vant-cli/cjs/jest.transformer.cjs b/packages/vant-cli/cjs/jest.transformer.cjs new file mode 100644 index 000000000..2111c8b35 --- /dev/null +++ b/packages/vant-cli/cjs/jest.transformer.cjs @@ -0,0 +1,92 @@ +const sfc = require('vue/compiler-sfc'); +const babel = require('@babel/core'); +const esbuild = require('esbuild'); +const nodePath = require('path'); + +const isJsxFile = (path) => /\.(j|t)sx$/.test(path); +const isTsxFile = (path) => /\.tsx$/.test(path); +const isVueFile = (path) => /\.vue$/.test(path); + +const transformJsx = (code, path) => { + const babelResult = babel.transformSync(code, { + filename: path, + babelrc: false, + presets: isTsxFile(path) ? ['@babel/preset-typescript'] : [], + plugins: [['@vue/babel-plugin-jsx']], + }); + return babelResult?.code || ''; +}; + +const transformSFC = (code, path) => { + const parsedPath = nodePath.parse(path); + const { descriptor, errors } = sfc.parse(code, { + filename: parsedPath.base, + sourceRoot: parsedPath.dir, + }); + + if (errors.length) { + errors.forEach((error) => console.error(error)); + return ''; + } + + const output = []; + let bindingMetadata = {}; + + if (descriptor.script) { + const content = descriptor.script.content.replace( + 'export default', + 'const script =' + ); + output.push(content); + } else if (descriptor.scriptSetup) { + const result = sfc.compileScript(descriptor, { + id: 'mock', + }); + + const content = result.content.replace('export default', 'const script ='); + output.push(content); + + if (result.bindings) { + bindingMetadata = result.bindings; + } + } else { + output.push(`const script = {};`); + } + + if (descriptor.template) { + const render = sfc.compileTemplate({ + id: 'mock', + source: descriptor.template.content, + filename: path, + compilerOptions: { + bindingMetadata, + }, + }).code; + output.push(render); + output.push('script.render = render;'); + } + + output.push('export default script;'); + + return output.join('\n'); +}; + +const transformScript = (code) => + esbuild.transformSync(code, { + target: 'es2016', + format: 'cjs', + loader: 'ts', + }).code; + +module.exports = { + canInstrument: true, + process(code, path) { + if (isVueFile(path)) { + code = transformSFC(code, path); + } + if (isJsxFile(path)) { + code = transformJsx(code, path); + } + return transformScript(code); + }, +}; diff --git a/packages/vant-cli/docs/config.md b/packages/vant-cli/docs/config.md index 66b671709..88303e7fd 100644 --- a/packages/vant-cli/docs/config.md +++ b/packages/vant-cli/docs/config.md @@ -21,8 +21,6 @@ - [site.simulator.url](#sitesimulatorurl) - [site.htmlMeta](#sitehtmlmeta) - [site.enableVConsole](#siteenablevconsole) - - [Babel](#babel) - - [默认配置](#----) - [Postcss](#postcss) - [默认配置](#-----1) - [browserslist](#browserslist) @@ -337,36 +335,13 @@ module.exports = { 是否在 dev 时开启 [vConsole](https://github.com/Tencent/vConsole) 调试,用于移动端 debug。 -## Babel - -通过根目录下的`babel.config.js`文件可以对 Babel 进行配置。 - -### 默认配置 - -推荐使用`vant-cli`内置的 preset,配置如下: - -```js -module.exports = { - presets: ['@vant/cli/preset'], -}; -``` - -`@vant/cli/preset`中默认包含了以下插件: - -- @babel/preset-env(不含 core-js) -- @babel/preset-typescript -- @babel/plugin-transform-object-assign -- @babel/plugin-proposal-optional-chaining -- @babel/plugin-proposal-nullish-coalescing-operator -- @vue/babel-preset-jsx - ## Postcss 通过根目录下的`postcss.config.js`文件可以对 Postcss 进行配置。 ### 默认配置 -`vant-cli`中默认的 Postcss 配置如下: +`vant-cli` 中默认的 Postcss 配置如下: ```js module.exports = { @@ -378,7 +353,7 @@ module.exports = { ## browserslist -推荐在`package.json`文件里添加 browserslist 字段,这个值会被`@babel/preset-env`和`autoprefixer`用来确定目标浏览器的版本,保证编译后代码的兼容性。 +推荐在 `package.json` 文件里添加 browserslist 字段,这个值会被 `autoprefixer` 用来确定目标浏览器的版本,保证编译后代码的兼容性。 在移动端浏览器中使用,可以添加如下配置: diff --git a/packages/vant-cli/docs/directory.md b/packages/vant-cli/docs/directory.md index 44ddd517e..1b870d653 100644 --- a/packages/vant-cli/docs/directory.md +++ b/packages/vant-cli/docs/directory.md @@ -14,7 +14,6 @@ project │ ├─ home.md # 文档首页 │ └─ changelog.md # 更新日志 │ -├─ babel.config.js # Babel 配置文件 ├─ vant.config.mjs # Vant Cli 配置文件 ├─ package.json └─ README.md diff --git a/packages/vant-cli/package.json b/packages/vant-cli/package.json index bf7d00e87..d96a8843f 100644 --- a/packages/vant-cli/package.json +++ b/packages/vant-cli/package.json @@ -1,6 +1,6 @@ { "name": "@vant/cli", - "version": "4.0.0-rc.4", + "version": "4.0.0-rc.5", "type": "module", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -21,8 +21,7 @@ "cjs", "site", "template", - "bin.js", - "preset.cjs" + "bin.js" ], "keywords": [ "vant" @@ -42,32 +41,28 @@ "devDependencies": { "@types/fs-extra": "^9.0.13", "@types/less": "^3.0.3", - "@types/lodash-es": "^4.17.5", "@types/markdown-it": "^12.2.3", - "@vue/compiler-sfc": "^3.2.20", - "vue": "^3.2.20" + "vue": "^3.2.27" }, "dependencies": { - "@types/jest": "^27.0.3", "@babel/core": "^7.16.0", - "@babel/preset-env": "^7.16.0", "@babel/preset-typescript": "^7.16.0", "@docsearch/css": "3.0.0-alpha.41", "@docsearch/js": "3.0.0-alpha.41", + "@types/jest": "^27.0.3", "@vant/eslint-config": "^3.3.2", "@vant/markdown-vetur": "^2.2.0", "@vant/stylelint-config": "^1.4.2", "@vant/touch-emulator": "^1.3.2", - "@vitejs/plugin-vue": "^1.9.4", - "@vitejs/plugin-vue-jsx": "^1.2.0", + "@vitejs/plugin-vue": "^2.0.0", + "@vitejs/plugin-vue-jsx": "^1.3.3", "@vue/babel-plugin-jsx": "^1.1.1", "autoprefixer": "^10.4.0", - "babel-jest": "^27.3.1", "chalk": "^4.1.2", - "clean-css": "^5.2.2", "commander": "^8.3.0", "consola": "^2.15.3", "conventional-changelog": "^3.1.24", + "esbuild": "^0.14.2", "eslint": "^8.1.0", "execa": "^5.1.1", "fast-glob": "^3.2.7", @@ -81,7 +76,6 @@ "jest-serializer-html": "^7.1.0", "less": "^4.1.2", "lint-staged": "^12.1.2", - "lodash-es": "^4.17.21", "markdown-it": "^12.2.0", "markdown-it-anchor": "^8.4.1", "ora": "^6.0.1", @@ -91,13 +85,11 @@ "release-it": "^14.11.6", "stylelint": "^13.0.0", "transliteration": "^2.2.0", - "ts-jest": "^27.0.7", "typescript": "^4.5.2", - "vite": "^2.6.13", + "vite": "^2.7.10", "vite-plugin-html": "^2.1.1", "vite-plugin-md": "^0.11.4", - "vue-router": "^4.0.12", - "vue3-jest": "^27.0.0-alpha.2" + "vue-router": "^4.0.12" }, "release-it": { "git": { diff --git a/packages/vant-cli/preset.cjs b/packages/vant-cli/preset.cjs deleted file mode 100644 index 2892ed00e..000000000 --- a/packages/vant-cli/preset.cjs +++ /dev/null @@ -1,3 +0,0 @@ -const babelConfig = require('./cjs/babel.config.cjs'); - -module.exports = (api, options) => babelConfig(api, options); diff --git a/packages/vant-cli/site/common/style/highlight.less b/packages/vant-cli/site/common/style/highlight.less index 3073cd064..fd6551029 100644 --- a/packages/vant-cli/site/common/style/highlight.less +++ b/packages/vant-cli/site/common/style/highlight.less @@ -21,7 +21,7 @@ pre { margin: 20px 0 0; + p { - margin-top: 20px; + margin-top: 20px !important; } } diff --git a/packages/vant-cli/site/index.html b/packages/vant-cli/site/index.html index 1ddf089a5..797723df5 100644 --- a/packages/vant-cli/site/index.html +++ b/packages/vant-cli/site/index.html @@ -3,7 +3,9 @@ <%= title %> + <% if (description) { %> + <% } %> <%- title %> + <% if (description) { %> + <% } %> { const filePath = join(dir, filename); - return isDir(filePath) ? compileDir(filePath) : compileFile(filePath); + return isDir(filePath) + ? compileDir(filePath, format) + : compileFile(filePath, format); }) ); } @@ -86,13 +89,13 @@ async function copySourceCode() { async function buildESMOutputs() { setModuleEnv('esmodule'); setBuildTarget('package'); - await compileDir(ES_DIR); + await compileDir(ES_DIR, 'esm'); } async function buildCJSOutputs() { setModuleEnv('commonjs'); setBuildTarget('package'); - await compileDir(LIB_DIR); + await compileDir(LIB_DIR, 'cjs'); } async function buildTypeDeclarations() { diff --git a/packages/vant-cli/src/common/constant.ts b/packages/vant-cli/src/common/constant.ts index 4cdc78822..229177a08 100644 --- a/packages/vant-cli/src/common/constant.ts +++ b/packages/vant-cli/src/common/constant.ts @@ -1,4 +1,3 @@ -import { get } from 'lodash-es'; import { existsSync, readFileSync } from 'fs'; import { fileURLToPath, pathToFileURL } from 'url'; import { join, dirname, isAbsolute } from 'path'; @@ -74,7 +73,7 @@ export function getVantConfig() { function getSrcDir() { const vantConfig = getVantConfig(); - const srcDir = get(vantConfig, 'build.srcDir'); + const srcDir = vantConfig.build?.srcDir; if (srcDir) { if (isAbsolute(srcDir)) { diff --git a/packages/vant-cli/src/common/css.ts b/packages/vant-cli/src/common/css.ts index 2aad2021d..98f5679cd 100644 --- a/packages/vant-cli/src/common/css.ts +++ b/packages/vant-cli/src/common/css.ts @@ -1,4 +1,3 @@ -import { get } from 'lodash-es'; import { existsSync } from 'fs'; import { join, isAbsolute } from 'path'; import { getVantConfig } from '../common/index.js'; @@ -8,7 +7,7 @@ type CSS_LANG = 'css' | 'less' | 'scss'; function getCssLang(): CSS_LANG { const vantConfig = getVantConfig(); - const preprocessor = get(vantConfig, 'build.css.preprocessor', 'less'); + const preprocessor = vantConfig.build?.css?.preprocessor || 'less'; if (preprocessor === 'sass') { return 'scss'; @@ -23,7 +22,7 @@ export function getCssBaseFile() { const vantConfig = getVantConfig(); let path = join(STYLE_DIR, `base.${CSS_LANG}`); - const baseFile = get(vantConfig, 'build.css.base', ''); + const baseFile = vantConfig.build?.css?.base || ''; if (baseFile) { path = isAbsolute(baseFile) ? baseFile : join(SRC_DIR, baseFile); } diff --git a/packages/vant-cli/src/common/index.ts b/packages/vant-cli/src/common/index.ts index 65d8c5ea8..2bbe6d085 100644 --- a/packages/vant-cli/src/common/index.ts +++ b/packages/vant-cli/src/common/index.ts @@ -1,5 +1,4 @@ import fse from 'fs-extra'; -import { get } from 'lodash-es'; import { sep, join } from 'path'; import { SRC_DIR, getVantConfig } from './constant.js'; import type { InlineConfig } from 'vite'; @@ -14,6 +13,7 @@ export const TEST_REGEXP = new RegExp('\\' + sep + 'test$'); export const ASSET_REGEXP = /\.(png|jpe?g|gif|webp|ico|jfif|svg|woff2?|ttf)$/i; export const STYLE_REGEXP = /\.(css|less|scss)$/; export const SCRIPT_REGEXP = /\.(js|ts|jsx|tsx)$/; +export const JSX_REGEXP = /\.(j|t)sx$/; export const ENTRY_EXTS = ['js', 'ts', 'tsx', 'jsx', 'vue']; export function removeExt(path: string) { @@ -46,33 +46,14 @@ export function getComponents() { ); } -export function isDir(dir: string) { - return lstatSync(dir).isDirectory(); -} - -export function isDemoDir(dir: string) { - return DEMO_REGEXP.test(dir); -} - -export function isTestDir(dir: string) { - return TEST_REGEXP.test(dir); -} - -export function isAsset(path: string) { - return ASSET_REGEXP.test(path); -} - -export function isSfc(path: string) { - return SFC_REGEXP.test(path); -} - -export function isStyle(path: string) { - return STYLE_REGEXP.test(path); -} - -export function isScript(path: string) { - return SCRIPT_REGEXP.test(path); -} +export const isDir = (dir: string) => lstatSync(dir).isDirectory(); +export const isDemoDir = (dir: string) => DEMO_REGEXP.test(dir); +export const isTestDir = (dir: string) => TEST_REGEXP.test(dir); +export const isAsset = (path: string) => ASSET_REGEXP.test(path); +export const isSfc = (path: string) => SFC_REGEXP.test(path); +export const isStyle = (path: string) => STYLE_REGEXP.test(path); +export const isScript = (path: string) => SCRIPT_REGEXP.test(path); +export const isJsx = (path: string) => JSX_REGEXP.test(path); const camelizeRE = /-(\w)/g; const pascalizeRE = /(\w)(\w*)/g; @@ -135,7 +116,7 @@ export function smartOutputFile(filePath: string, content: string) { export function mergeCustomViteConfig(config: InlineConfig) { const vantConfig = getVantConfig(); - const configureVite = get(vantConfig, 'build.configureVite'); + const configureVite = vantConfig.build?.configureVite; if (configureVite) { return configureVite(config); diff --git a/packages/vant-cli/src/compiler/compile-css.ts b/packages/vant-cli/src/compiler/compile-css.ts index 7070490da..0e2b8f359 100644 --- a/packages/vant-cli/src/compiler/compile-css.ts +++ b/packages/vant-cli/src/compiler/compile-css.ts @@ -1,15 +1,17 @@ import postcss from 'postcss'; import postcssrc from 'postcss-load-config'; -import CleanCss from 'clean-css'; +import { transform } from 'esbuild'; import { POSTCSS_CONFIG_FILE } from '../common/constant.js'; -const cleanCss = new CleanCss(); - export async function compileCss(source: string | Buffer) { const config = await postcssrc({}, POSTCSS_CONFIG_FILE); const { css } = await postcss(config.plugins as any).process(source, { from: undefined, }); - - return cleanCss.minify(css).styles; + const result = await transform(css, { + loader: 'css', + minify: true, + target: ['chrome53', 'safari10'], + }); + return result.code; } diff --git a/packages/vant-cli/src/compiler/compile-sass.ts b/packages/vant-cli/src/compiler/compile-sass.ts index a24d0ad60..6d853dd4d 100644 --- a/packages/vant-cli/src/compiler/compile-sass.ts +++ b/packages/vant-cli/src/compiler/compile-sass.ts @@ -1,5 +1,7 @@ import { createRequire } from 'module'; +const require = createRequire(import.meta.url); + // allow to import from node_modules // @import "~package-name/var.scss" const tildeImporter = (url: string) => { @@ -16,7 +18,6 @@ const tildeImporter = (url: string) => { }; export async function compileSass(filePath: string) { - const require = createRequire(import.meta.url); const { renderSync } = require('sass'); const { css } = renderSync({ file: filePath, importer: tildeImporter }); return css; diff --git a/packages/vant-cli/src/compiler/compile-script.ts b/packages/vant-cli/src/compiler/compile-script.ts index 7afcafaf1..d77a56acd 100644 --- a/packages/vant-cli/src/compiler/compile-script.ts +++ b/packages/vant-cli/src/compiler/compile-script.ts @@ -1,36 +1,56 @@ import fse from 'fs-extra'; +import babel from '@babel/core'; +import esbuild, { type Format } from 'esbuild'; import { sep } from 'path'; -import { transformAsync } from '@babel/core'; -import { replaceExt } from '../common/index.js'; +import { isJsx, replaceExt } from '../common/index.js'; import { replaceCSSImportExt } from '../common/css.js'; import { replaceScriptImportExt } from './get-deps.js'; const { readFileSync, removeSync, outputFileSync } = fse; -export async function compileScript(filePath: string): Promise { - return new Promise((resolve, reject) => { - if (filePath.includes('.d.ts')) { - resolve(); - return; +export async function compileScript( + filePath: string, + format: Format +): Promise { + if (filePath.includes('.d.ts')) { + return; + } + + let code = readFileSync(filePath, 'utf-8'); + + if (!filePath.includes(`${sep}style${sep}`)) { + code = replaceCSSImportExt(code); + } + code = replaceScriptImportExt(code, '.vue', ''); + + if (isJsx(filePath)) { + const babelResult = await babel.transformAsync(code, { + filename: filePath, + babelrc: false, + presets: ['@babel/preset-typescript'], + plugins: [ + [ + '@vue/babel-plugin-jsx', + { + enableObjectSlots: false, + }, + ], + ], + }); + if (babelResult?.code) { + ({ code } = babelResult); } + } - let code = readFileSync(filePath, 'utf-8'); - - if (!filePath.includes(`${sep}style${sep}`)) { - code = replaceCSSImportExt(code); - } - code = replaceScriptImportExt(code, '.vue', ''); - - transformAsync(code, { filename: filePath }) - .then((result) => { - if (result) { - const jsFilePath = replaceExt(filePath, '.js'); - - removeSync(filePath); - outputFileSync(jsFilePath, result.code); - resolve(); - } - }) - .catch(reject); + const esbuildResult = await esbuild.transform(code, { + loader: 'ts', + target: 'es2016', + format, }); + + ({ code } = esbuildResult); + + const jsFilePath = replaceExt(filePath, '.js'); + removeSync(filePath); + outputFileSync(jsFilePath, code); } diff --git a/packages/vant-cli/src/compiler/compile-sfc.ts b/packages/vant-cli/src/compiler/compile-sfc.ts index b4abddfcd..a46b0cf7c 100644 --- a/packages/vant-cli/src/compiler/compile-sfc.ts +++ b/packages/vant-cli/src/compiler/compile-sfc.ts @@ -1,7 +1,7 @@ import fse from 'fs-extra'; import path from 'path'; import hash from 'hash-sum'; -import { parse, SFCBlock, compileTemplate } from '@vue/compiler-sfc'; +import { parse, SFCBlock, compileTemplate } from 'vue/compiler-sfc'; import { replaceExt } from '../common/index.js'; const { remove, readFileSync, outputFile } = fse; diff --git a/packages/vant-cli/src/compiler/gen-package-entry.ts b/packages/vant-cli/src/compiler/gen-package-entry.ts index cf4e1be7c..65510da1a 100644 --- a/packages/vant-cli/src/compiler/gen-package-entry.ts +++ b/packages/vant-cli/src/compiler/gen-package-entry.ts @@ -1,4 +1,3 @@ -import { get } from 'lodash-es'; import { join } from 'path'; import { pascalize, @@ -72,8 +71,8 @@ export function genPackageEntry({ const names = getComponents(); const vantConfig = getVantConfig(); - const namedExport = get(vantConfig, 'build.namedExport', false); - const skipInstall = get(vantConfig, 'build.skipInstall', []).map(pascalize); + const namedExport = vantConfig.build?.namedExport || false; + const skipInstall = (vantConfig.build?.skipInstall || []).map(pascalize); const version = process.env.PACKAGE_VERSION || getPackageJson().version; diff --git a/packages/vant-cli/src/compiler/gen-vetur-config.ts b/packages/vant-cli/src/compiler/gen-vetur-config.ts index 52060eddd..be9cf312b 100644 --- a/packages/vant-cli/src/compiler/gen-vetur-config.ts +++ b/packages/vant-cli/src/compiler/gen-vetur-config.ts @@ -1,5 +1,4 @@ import markdownVetur from '@vant/markdown-vetur'; -import { get } from 'lodash-es'; import { SRC_DIR, VETUR_DIR, @@ -11,13 +10,13 @@ import { export function genVeturConfig() { const pkgJson = getPackageJson(); const vantConfig = getVantConfig(); - const options = get(vantConfig, 'build.vetur'); + const options = vantConfig.build?.vetur; if (options) { markdownVetur.parseAndWrite({ name: vantConfig.name, path: SRC_DIR, - test: /zh-CN\.md/, + test: /README\.md/, version: pkgJson.version, outputDir: VETUR_DIR, ...options, diff --git a/packages/vant-cli/src/config/vite.site.ts b/packages/vant-cli/src/config/vite.site.ts index fe4844cd7..f883904ed 100644 --- a/packages/vant-cli/src/config/vite.site.ts +++ b/packages/vant-cli/src/config/vite.site.ts @@ -1,5 +1,4 @@ import { join } from 'path'; -import { get } from 'lodash-es'; import { createRequire } from 'module'; import hljs from 'highlight.js'; import vitePluginMd from 'vite-plugin-md'; @@ -82,7 +81,7 @@ function getTitle(config: { title: string; description?: string }) { } function getHTMLMeta(vantConfig: any) { - const meta = get(vantConfig, 'site.htmlMeta'); + const meta = vantConfig.site?.htmlMeta; if (meta) { return Object.keys(meta) @@ -99,8 +98,8 @@ export function getViteConfigForSiteDev(): InlineConfig { const vantConfig = getVantConfig(); const siteConfig = getSiteConfig(vantConfig); const title = getTitle(siteConfig); - const baiduAnalytics = get(vantConfig, 'site.baiduAnalytics'); - const enableVConsole = isDev() && get(vantConfig, 'site.enableVConsole'); + const baiduAnalytics = vantConfig.site?.baiduAnalytics; + const enableVConsole = isDev() && vantConfig.site?.enableVConsole; return { root: SITE_SRC_DIR, @@ -136,6 +135,9 @@ export function getViteConfigForSiteDev(): InlineConfig { data: { ...siteConfig, title, + // `description` is used by the HTML ejs template, + // so it needs to be written explicitly here to avoid error: description is not defined + description: siteConfig.description, baiduAnalytics, enableVConsole, meta: getHTMLMeta(vantConfig), @@ -159,8 +161,8 @@ export function getViteConfigForSiteDev(): InlineConfig { export function getViteConfigForSiteProd(): InlineConfig { const devConfig = getViteConfigForSiteDev(); const vantConfig = getVantConfig(); - const outDir = get(vantConfig, 'build.site.outputDir', SITE_DIST_DIR); - const publicPath = get(vantConfig, 'build.site.publicPath', '/'); + const outDir = vantConfig.build?.site?.outputDir || SITE_DIST_DIR; + const publicPath = vantConfig.build?.site?.publicPath || '/'; return { ...devConfig, diff --git a/packages/vant-cli/src/module.d.ts b/packages/vant-cli/src/module.d.ts index 6cb75ccd6..d2726548a 100644 --- a/packages/vant-cli/src/module.d.ts +++ b/packages/vant-cli/src/module.d.ts @@ -1,7 +1,6 @@ // some modules with missing type definitions declare module 'execa'; declare module 'hash-sum'; -declare module 'clean-css'; declare module 'release-it'; declare module 'conventional-changelog'; declare module '@vant/markdown-vetur'; diff --git a/packages/vant-icons/CHANGELOG.md b/packages/vant-icons/CHANGELOG.md index 04582a9d1..853e9ff0c 100644 --- a/packages/vant-icons/CHANGELOG.md +++ b/packages/vant-icons/CHANGELOG.md @@ -1,5 +1,13 @@ ## Changelog +## 1.7.3 + +- complete https protocol + +## 1.7.2 + +- add cash-o icon + ## 1.7.1 - add guide-o icon diff --git a/packages/vant-icons/README.md b/packages/vant-icons/README.md index c5c26e822..af0809483 100644 --- a/packages/vant-icons/README.md +++ b/packages/vant-icons/README.md @@ -17,16 +17,3 @@ pnpm add @vant/icons - [Usage in Vue](https://youzan.github.io/vant/#/zh-CN/icon) - [Usage in Weapp](https://youzan.github.io/vant-weapp/#/icon) - -## Contribution - -### Update Icons - -1. Update assets/icons.sketch -2. Make a Pull Request - -### Add New Icon - -1. Add new icon to assets/icons.sketch -2. Add icon name to src/config.js -3. Make a Pull Request diff --git a/packages/vant-icons/assets/icons.sketch b/packages/vant-icons/assets/icons.sketch index 784cf5eb5..5ef72a7be 100644 Binary files a/packages/vant-icons/assets/icons.sketch and b/packages/vant-icons/assets/icons.sketch differ diff --git a/packages/vant-icons/contribution.zh-CN.md b/packages/vant-icons/contribution.zh-CN.md new file mode 100644 index 000000000..410ed2787 --- /dev/null +++ b/packages/vant-icons/contribution.zh-CN.md @@ -0,0 +1,47 @@ +# 图标贡献指南 + +## 设计稿 + +Vant 图标库托管在 [iconfont.cn](https://iconfont.cn) 上,同时仓库中保留了一份完整的 Sketch 设计稿。 + +[在线预览链接](https://iconfont.cn/collections/detail?cid=31945) + +## 更新流程 + +新增/更新图标的标准流程如下: + +### 1. 绘制图标 + +在 Sketch 中绘制所需的图标,并更新到 `assets/icons.sketch` 文件中。 + +绘制图标前,请阅读:[iconfont - 图标绘制](https://www.iconfont.cn/help/detail?spm=a313x.7781069.1998910419.16&helptype=draw)。 + +### 2. 上传图标 + +从 Sketch 中导出图标对应的 SVG 文件,并上传到 [iconfont 项目](https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=2553510)中。 + + + +> 此步骤需要图标库管理员权限,请联系 Vant 维护者进行添加。 + +### 3. 更新代码 + +在 iconfont 中将更新后的图标库下载到本地,并更新以下文件: + +- `src/index.less`: 更新字体文件的 CDN 链接。 +- `src/encode-woff2.less`: 更新字体文件的 base64 URL。 + +如果有新增图标,还需要更新以下文件: + +- `src/config.js`: 增加新图标的英文名称。 +- `src/common.less`: 增加新图标的样式类。 + +字体文件的 base64 URL 通过 [transfonter](https://transfonter.org/) 生成,步骤如下图所示: + + + +### 4. 发布图标库 + +执行 `yarn release` 命令,发布 `@vant/icons` 到 npm。 + +发布完成后,在对应仓库中进行升级,即可使用新图标。 diff --git a/packages/vant-icons/package.json b/packages/vant-icons/package.json index 25b941ed7..221ab8418 100644 --- a/packages/vant-icons/package.json +++ b/packages/vant-icons/package.json @@ -1,6 +1,6 @@ { "name": "@vant/icons", - "version": "1.7.1", + "version": "1.7.3", "description": "vant icons", "main": "./src/config.js", "types": "./src/config.d.ts", diff --git a/packages/vant-icons/src/common.less b/packages/vant-icons/src/common.less index 3a83431ff..41ebaae23 100644 --- a/packages/vant-icons/src/common.less +++ b/packages/vant-icons/src/common.less @@ -973,3 +973,7 @@ .van-icon-guide-o:before { content: '\e74c'; } + +.van-icon-cash-o:before { + content: '\e74d'; +} diff --git a/packages/vant-icons/src/config.js b/packages/vant-icons/src/config.js index b84bb1dd1..8146364c1 100644 --- a/packages/vant-icons/src/config.js +++ b/packages/vant-icons/src/config.js @@ -149,6 +149,7 @@ export default { 'shrink', 'shield-o', 'guide-o', + 'cash-o', ], filled: [ // has corresponding outline icon diff --git a/packages/vant-icons/src/encode-woff2.less b/packages/vant-icons/src/encode-woff2.less index 9252da11a..20142115a 100644 --- a/packages/vant-icons/src/encode-woff2.less +++ b/packages/vant-icons/src/encode-woff2.less @@ -7,7 +7,7 @@ font-family: 'vant-icon'; font-style: normal; font-display: auto; - src: url('data:font/woff2;charset=utf-8;base64,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') + src: url('data:font/woff2;charset=utf-8;base64,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') format('woff2'), url('//at.alicdn.com/t/font_2553510_61agzg96wm8.woff?t=1631948257467') format('woff'), diff --git a/packages/vant-icons/src/index.less b/packages/vant-icons/src/index.less index 1b1339863..b334d43a2 100644 --- a/packages/vant-icons/src/index.less +++ b/packages/vant-icons/src/index.less @@ -5,10 +5,10 @@ font-style: normal; font-display: auto; font-family: 'vant-icon'; - src: url('//at.alicdn.com/t/font_2553510_61agzg96wm8.woff2?t=1631948257467') + src: url('https://at.alicdn.com/t/font_2553510_5imfhdc20ag.woff2?t=1640074908811') format('woff2'), - url('//at.alicdn.com/t/font_2553510_61agzg96wm8.woff?t=1631948257467') + url('https://at.alicdn.com/t/font_2553510_5imfhdc20ag.woff?t=1640074908811') format('woff'), - url('//at.alicdn.com/t/font_2553510_61agzg96wm8.ttf?t=1631948257467') + url('https://at.alicdn.com/t/font_2553510_5imfhdc20ag.ttf?t=1640074908811') format('truetype'); } diff --git a/packages/vant-icons/yarn.lock b/packages/vant-icons/yarn.lock new file mode 100644 index 000000000..47ee29454 --- /dev/null +++ b/packages/vant-icons/yarn.lock @@ -0,0 +1,1964 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.16.0" + resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha1-DfyAMJvuyEEeZecGRhxAiwu5tDE= + dependencies: + "@babel/highlight" "^7.16.0" + +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k= + +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha1-bOsysspLj182H7f9gh4/3fShclo= + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@iarna/toml@2.2.5": + version "2.2.5" + resolved "https://registry.npmmirror.com/@iarna/toml/download/@iarna/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + integrity sha1-syNmyJtDxvjO+976x3i5yCjjuow= + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.npmmirror.com/@octokit/auth-token/download/@octokit/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha1-J8N+omwgXyhENAJHf/0mExHyHjY= + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.5.1": + version "3.5.1" + resolved "https://registry.npmmirror.com/@octokit/core/download/@octokit/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" + integrity sha1-hgHO6x7A4bG4IXuWCkE+2OlHgJs= + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.0" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.npmmirror.com/@octokit/endpoint/download/@octokit/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha1-O01HpLDnmxAn+4111CIZKLLQVlg= + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.npmmirror.com/@octokit/graphql/download/@octokit/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha1-Zk2bEcDhIRLL944Q9JoFlZqiLMM= + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^11.2.0": + version "11.2.0" + resolved "https://registry.npmmirror.com/@octokit/openapi-types/download/@octokit/openapi-types-11.2.0.tgz?cache=0&sync_timestamp=1633915205206&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40octokit%2Fopenapi-types%2Fdownload%2F%40octokit%2Fopenapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" + integrity sha1-s41/w3NtUqHpayMMHM1KWKL0AKY= + +"@octokit/plugin-paginate-rest@^2.16.8": + version "2.17.0" + resolved "https://registry.npmmirror.com/@octokit/plugin-paginate-rest/download/@octokit/plugin-paginate-rest-2.17.0.tgz?cache=0&sync_timestamp=1633915251594&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40octokit%2Fplugin-paginate-rest%2Fdownload%2F%40octokit%2Fplugin-paginate-rest-2.17.0.tgz#32e9c7cab2a374421d3d0de239102287d791bce7" + integrity sha1-MunHyrKjdEIdPQ3iORAih9eRvOc= + dependencies: + "@octokit/types" "^6.34.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.npmmirror.com/@octokit/plugin-request-log/download/@octokit/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha1-XlDtcIOmE4FrHkooruxft/FGLoU= + +"@octokit/plugin-rest-endpoint-methods@^5.12.0": + version "5.13.0" + resolved "https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/download/@octokit/plugin-rest-endpoint-methods-5.13.0.tgz?cache=0&sync_timestamp=1633915251276&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40octokit%2Fplugin-rest-endpoint-methods%2Fdownload%2F%40octokit%2Fplugin-rest-endpoint-methods-5.13.0.tgz#8c46109021a3412233f6f50d28786f8e552427ba" + integrity sha1-jEYQkCGjQSIz9vUNKHhvjlUkJ7o= + dependencies: + "@octokit/types" "^6.34.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.npmmirror.com/@octokit/request-error/download/@octokit/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha1-nhUDV4Mb/HiNE6T9SxkT1gx01nc= + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.6.0": + version "5.6.2" + resolved "https://registry.npmmirror.com/@octokit/request/download/@octokit/request-5.6.2.tgz#1aa74d5da7b9e04ac60ef232edd9a7438dcf32d8" + integrity sha1-GqdNXae54ErGDvIy7dmnQ43PMtg= + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + universal-user-agent "^6.0.0" + +"@octokit/rest@18.12.0": + version "18.12.0" + resolved "https://registry.npmmirror.com/@octokit/rest/download/@octokit/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha1-8GvElS/IcTAwjYEMqdAOefaYiIE= + dependencies: + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.34.0": + version "6.34.0" + resolved "https://registry.npmmirror.com/@octokit/types/download/@octokit/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" + integrity sha1-xgITMzNNHs+103CoeYFi3fGughg= + dependencies: + "@octokit/openapi-types" "^11.2.0" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.npmmirror.com/@sindresorhus/is/download/@sindresorhus/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o= + +"@sindresorhus/is@^4.0.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@sindresorhus/is/download/@sindresorhus/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" + integrity sha1-Znv8YYaufJ4LRaCJYMVRQ3F24co= + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.npmmirror.com/@szmarczak/http-timer/download/@szmarczak/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha1-sWZeLEYaLNkvTBu/UNVFTeDUtCE= + dependencies: + defer-to-connect "^1.0.1" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmmirror.com/@szmarczak/http-timer/download/@szmarczak/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha1-tKkUu2LnwnLU5Zif5EQPgSqx2Ac= + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.npmmirror.com/@types/cacheable-request/download/@types/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha1-wyTaAZfeCpiiMSFWU2riYkKf9rk= + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.npmmirror.com/@types/http-cache-semantics/download/@types/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha1-Dqe2FJaQK5WJDcTDoRa2DLja6BI= + +"@types/keyv@*": + version "3.1.3" + resolved "https://registry.npmmirror.com/@types/keyv/download/@types/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41" + integrity sha1-HJquMocuwfINza7omp87qI9GXkE= + dependencies: + "@types/node" "*" + +"@types/node@*": + version "17.0.2" + resolved "https://registry.npmmirror.com/@types/node/download/@types/node-17.0.2.tgz#a4c07d47ff737e8ee7e586fe636ff0e1ddff070a" + integrity sha512-JepeIUPFDARgIs0zD/SKPgFsJEAF0X5/qO80llx59gOxFTboS9Amv3S+QfB7lqBId5sFXJ99BN0J6zFRvL9dDA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmmirror.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1637270122173&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.npmmirror.com/@types/responselike/download/@types/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha1-JR9P59FU0rrRJavhtCmyOv0mLik= + dependencies: + "@types/node" "*" + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/ansi-align/download/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha1-DN8S4RGs53OobpofrRIlxDyxmlk= + dependencies: + string-width "^4.1.0" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmmirror.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4= + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= + dependencies: + color-convert "^2.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-union/download/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= + +async-retry@1.3.3: + version "1.3.3" + resolved "https://registry.npmmirror.com/async-retry/download/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha1-Dn82wE2EeOeli9vtgM7fl3eF8oA= + dependencies: + retry "0.13.1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/download/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/base64-js/download/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo= + +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.npmmirror.com/before-after-hook/download/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha1-pujKQQKNkO4sJCIvIByQlWCRYT4= + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/bl/download/bl-4.1.0.tgz?cache=0&sync_timestamp=1632752926555&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbl%2Fdownload%2Fbl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo= + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/boxen/download/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha1-eIy2hvyDwfSG36ikDGj8K4MdK1A= + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/buffer/download/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmmirror.com/cacheable-lookup/download/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha1-WmuGWyxENXvj1evCpGewMnGacAU= + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/cacheable-request/download/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha1-IP+4vRYrpL4R6VZ9gj22UQUsqRI= + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.npmmirror.com/cacheable-request/download/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha1-6g0LiJNkolhUdXMByhKy2nf5HSc= + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/call-bind/download/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= + +camelcase@^6.2.0: + version "6.2.1" + resolved "https://registry.npmmirror.com/camelcase/download/camelcase-6.2.1.tgz?cache=0&sync_timestamp=1636945149415&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" + integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== + +chalk@4.1.2, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmmirror.com/chalk/download/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1634639163489&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y= + +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/ci-info/download/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/cli-boxes/download/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha1-3dUDXSUJT84iDpyrQKRYQKRAMY8= + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.npmmirror.com/cli-spinners/download/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha1-rclU6+KBw3pjGb+kAebdJIj/tw0= + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cli-width/download/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/clone-response/download/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmmirror.com/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/configstore/download/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha1-02UCG130uYzdGH1qOw4/anzF7ZY= + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +cosmiconfig@7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/cosmiconfig/download/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha1-cU11ZSLKzoZ4Z8y0R0xdAbuuXW0= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmmirror.com/cross-spawn/download/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/crypto-random-string/download/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha1-7yp6lm7BEIM4g2m6oC6+rSKbMNU= + +debug@4.3.2: + version "4.3.2" + resolved "https://registry.npmmirror.com/debug/download/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/decompress-response/download/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/decompress-response/download/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha1-yjh2Et234QS9FthaqwDV7PCcZvw= + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.npmmirror.com/defer-to-connect/download/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE= + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/defer-to-connect/download/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha1-gBa9tBQ+RjK3ejRJxiNid95SBYc= + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +deprecated-obj@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/deprecated-obj/download/deprecated-obj-2.0.0.tgz#e6ba93a3989f6ed18d685e7d99fb8d469b4beffc" + integrity sha1-5rqTo5ifbtGNaF59mfuNRptL7/w= + dependencies: + flat "^5.0.2" + lodash "^4.17.20" + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/deprecation/download/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk= + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= + dependencies: + path-type "^4.0.0" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/dot-prop/download/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmmirror.com/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= + dependencies: + is-arrayish "^0.2.1" + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/escape-goat/download/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha1-Gy3HcANnbEV+x2Cy3GjttkgYhnU= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +execa@5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/execa/download/execa-5.1.1.tgz?cache=0&sync_timestamp=1637147228297&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0= + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^4.0.2: + version "4.1.0" + resolved "https://registry.npmmirror.com/execa/download/execa-4.1.0.tgz?cache=0&sync_timestamp=1637147228297&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha1-TlSRrRVy8vF6d9OIxshXE1sihHo= + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.npmmirror.com/fast-glob/download/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha1-/Wy3otfpqnp4RhEehaGW1rL3ZqE= + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmmirror.com/fastq/download/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw= + dependencies: + reusify "^1.0.4" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/figures/download/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= + dependencies: + escape-string-regexp "^1.0.5" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/filter-obj/download/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmmirror.com/flat/download/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha1-jKb+MyBp/6nTJMMnGYxZglnOskE= + +form-data@4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/form-data/download/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.npmmirror.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y= + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/get-stream/download/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha1-SWaheV7lrOZecGxLe+txJX1uItM= + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmmirror.com/get-stream/download/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha1-omLY7vZ6ztV8KFKtYWdSakPL97c= + +git-up@^4.0.0: + version "4.0.5" + resolved "https://registry.npmmirror.com/git-up/download/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" + integrity sha1-57twmBo36i+4/gSWaYAKH5oB11k= + dependencies: + is-ssh "^1.3.0" + parse-url "^6.0.0" + +git-url-parse@11.6.0: + version "11.6.0" + resolved "https://registry.npmmirror.com/git-url-parse/download/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" + integrity sha1-xjS43n+qZkmKK4iTLfMXAsZ99gU= + dependencies: + git-up "^4.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1632953971963&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/glob/download/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/global-dirs/download/global-dirs-3.0.0.tgz?cache=0&sync_timestamp=1632753970628&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobal-dirs%2Fdownload%2Fglobal-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha1-cKdv6E6jFas3sfVXbL3n1I73JoY= + dependencies: + ini "2.0.0" + +globby@11.0.4: + version "11.0.4" + resolved "https://registry.npmmirror.com/globby/download/globby-11.0.4.tgz?cache=0&sync_timestamp=1632753622550&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobby%2Fdownload%2Fglobby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha1-LLr/d8Lypi5x6bKBOme5ejowAaU= + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +got@11.8.3: + version "11.8.3" + resolved "https://registry.npmmirror.com/got/download/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" + integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.npmmirror.com/got/download/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha1-7fRefWf5lUVwXeH3u+7rEhdl7YU= + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2: + version "4.2.8" + resolved "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-symbols/download/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM= + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/has-yarn/download/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha1-E34RNUp7W/EapctknPDG8/8rLnc= + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + dependencies: + function-bind "^1.1.1" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha1-SekcXL82yblLz81xwj1SSex045A= + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/http2-wrapper/download/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha1-uPVeDB8l1OvQizsMLAeflZCACz0= + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/human-signals/download/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA= + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmmirror.com/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmmirror.com/ieee754/download/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= + +ignore@^5.1.4: + version "5.2.0" + resolved "https://registry.npmmirror.com/ignore/download/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-cwd@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/import-cwd/download/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" + integrity sha1-IIRVR3GAFRJuqbNna3WS+4vUz5I= + dependencies: + import-from "^3.0.0" + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmmirror.com/import-fresh/download/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/import-from/download/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha1-BVz+w4zVon2AV8pRN219O/CJGWY= + dependencies: + resolve-from "^5.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ini/download/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha1-5f1Vbs3VcmvpePoQAYYurLCpS8U= + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmmirror.com/ini/download/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= + +inquirer@8.2.0: + version "8.2.0" + resolved "https://registry.npmmirror.com/inquirer/download/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.2.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/interpret/download/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4= + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-ci@3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/is-ci/download/is-ci-3.0.1.tgz?cache=0&sync_timestamp=1635261114993&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-ci%2Fdownload%2Fis-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha1-227L7RvWWcQ9rA9FZh52dBA9GGc= + dependencies: + ci-info "^3.2.0" + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-ci/download/is-ci-2.0.0.tgz?cache=0&sync_timestamp=1635261114993&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-ci%2Fdownload%2Fis-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw= + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.2.0: + version "2.8.0" + resolved "https://registry.npmmirror.com/is-core-module/download/is-core-module-2.8.0.tgz?cache=0&sync_timestamp=1634236519202&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha1-AyEzbD0JJeSX/Zf12VyxFKXM1Ug= + dependencies: + has "^1.0.3" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/is-docker/download/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao= + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + +is-glob@^4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/download/is-glob-4.0.3.tgz?cache=0&sync_timestamp=1632934382080&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-glob%2Fdownload%2Fis-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ= + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/is-installed-globally/download/is-installed-globally-0.4.0.tgz?cache=0&sync_timestamp=1632753986189&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-installed-globally%2Fdownload%2Fis-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha1-mg/UB5ScMPhutpWe8beZTtC3tSA= + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-interactive/download/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4= + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/is-npm/download/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha1-Q+jWXMVuG2f41HJiz2ZwmRk/Rag= + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.npmmirror.com/is-path-inside/download/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha1-0jE2LlOgf/Kw4Op/7QSRYf/RYoM= + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/is-plain-object/download/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q= + +is-ssh@^1.3.0: + version "1.3.3" + resolved "https://registry.npmmirror.com/is-ssh/download/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" + integrity sha1-fxMyhczX8sLH/Il7dxtT2VorLH4= + dependencies: + protocols "^1.1.0" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-stream/download/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha1-+sHj1TuXrVqdCunO8jifWBClwHc= + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmmirror.com/is-wsl/download/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE= + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/is-yarn-global/download/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha1-1QLTOCWQ6jAEiTdGdUyJE5lz4jI= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/json-buffer/download/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/json-buffer/download/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha1-kziAKjDTtmBfvgYT4JQAjKjAWhM= + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1632754045516&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/keyv/download/keyv-3.1.0.tgz?cache=0&sync_timestamp=1635869183541&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fkeyv%2Fdownload%2Fkeyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha1-7MIoSG9pmR5J6UdkhaW+Ho/FxNk= + dependencies: + json-buffer "3.0.0" + +keyv@^4.0.0: + version "4.0.4" + resolved "https://registry.npmmirror.com/keyv/download/keyv-4.0.4.tgz?cache=0&sync_timestamp=1635869183541&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fkeyv%2Fdownload%2Fkeyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376" + integrity sha1-8ECyNuorBu0V7Yb774QH4aHI43Y= + dependencies: + json-buffer "3.0.1" + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/latest-version/download/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha1-EZ3+kI/jjRXfpD7NE/oS7Igy+s4= + dependencies: + package-json "^6.3.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmmirror.com/lines-and-columns/download/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lodash@4.17.21, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/download/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/log-symbols/download/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha1-P727lbRoOsn8eFER55LlWNSr1QM= + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/lowercase-keys/download/lowercase-keys-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flowercase-keys%2Fdownload%2Flowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/lowercase-keys/download/lowercase-keys-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flowercase-keys%2Fdownload%2Flowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha1-JgPni3tLAAbLyi+8yKMgJVislHk= + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/lru-cache/download/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= + dependencies: + yallist "^4.0.0" + +macos-release@^2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/macos-release/download/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" + integrity sha1-BnwsiLXz+zxWo3Wy7JOCYiD6H/I= + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/make-dir/download/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= + dependencies: + semver "^6.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.npmmirror.com/micromatch/download/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k= + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.npmmirror.com/mime-db/download/mime-db-1.51.0.tgz?cache=0&sync_timestamp=1636425972093&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-db%2Fdownload%2Fmime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@2.1.34, mime-types@^2.1.12: + version "2.1.34" + resolved "https://registry.npmmirror.com/mime-types/download/mime-types-2.1.34.tgz?cache=0&sync_timestamp=1636432299957&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/mimic-response/download/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha1-SSNTiHju9CBjy4o+OweYeBSHqxs= + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/mimic-response/download/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha1-LR1Zr5wbEpgVrMwsRqAipc4fo8k= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0: + version "1.2.5" + resolved "https://registry.npmmirror.com/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmmirror.com/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + +new-github-release-url@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/new-github-release-url/download/new-github-release-url-1.0.0.tgz#493847e6fecce39c247e9d89929be773d2e7f777" + integrity sha1-SThH5v7M45wkfp2Jkpvnc9Ln93c= + dependencies: + type-fest "^0.4.1" + +node-fetch@^2.6.1: + version "2.6.6" + resolved "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha1-F1GnwBg06OFpd1hzLp77burfr4k= + dependencies: + whatwg-url "^5.0.0" + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.npmmirror.com/normalize-url/download/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha1-DdkM8SiO4dExO4cIHJpZMu5IUYo= + +normalize-url@^6.0.1, normalize-url@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/normalize-url/download/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha1-QNCIW1Nd7/4/MUe+yHfQX+TFZoo= + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-4.0.1.tgz?cache=0&sync_timestamp=1633420583639&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo= + dependencies: + path-key "^3.0.0" + +object-inspect@^1.9.0: + version "1.12.0" + resolved "https://registry.npmmirror.com/object-inspect/download/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/onetime/download/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= + dependencies: + mimic-fn "^2.1.0" + +open@7.4.2: + version "7.4.2" + resolved "https://registry.npmmirror.com/open/download/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha1-uBR+Jtzz5CYxbHMAif1x7dKcIyE= + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +ora@5.4.1, ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmmirror.com/ora/download/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg= + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-name@4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/os-name/download/os-name-4.0.1.tgz#32cee7823de85a8897647ba4d76db46bf845e555" + integrity sha1-Ms7ngj3oWoiXZHuk1220a/hF5VU= + dependencies: + macos-release "^2.5.0" + windows-release "^4.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/p-cancelable/download/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw= + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/p-cancelable/download/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha1-qrf71BZYL6MqPbSYWcEiSHxe0s8= + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.npmmirror.com/package-json/download/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha1-b+7ayjXnVyWHbQsOZJdGl/7RRbA= + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= + dependencies: + callsites "^3.0.0" + +parse-json@5.2.0, parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/parse-json/download/parse-json-5.2.0.tgz?cache=0&sync_timestamp=1637475771859&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparse-json%2Fdownload%2Fparse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80= + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-path@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/parse-path/download/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" + integrity sha1-gtgew+Bx3MSrSaqfLJwLiWa7Ir8= + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + qs "^6.9.4" + query-string "^6.13.8" + +parse-url@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/parse-url/download/parse-url-6.0.0.tgz#f5dd262a7de9ec00914939220410b66cff09107d" + integrity sha1-9d0mKn3p7ACRSTkiBBC2bP8JEH0= + dependencies: + is-ssh "^1.3.0" + normalize-url "^6.1.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/download/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU= + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= + +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.npmmirror.com/picomatch/download/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/prepend-http/download/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.8" + resolved "https://registry.npmmirror.com/protocols/download/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha1-SO6i2PWNlkSkoyyq5dXbKQoHXOg= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/pupa/download/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha1-9ej9SvwsXZeCj6pSNUnth0SiDWI= + dependencies: + escape-goat "^2.0.0" + +qs@^6.9.4: + version "6.10.2" + resolved "https://registry.npmmirror.com/qs/download/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe" + integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== + dependencies: + side-channel "^1.0.4" + +query-string@^6.13.8: + version "6.14.1" + resolved "https://registry.npmmirror.com/query-string/download/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha1-esLcpG2n8wlEm6D4ax/SglWwyGo= + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/download/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/quick-lru/download/quick-lru-5.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fquick-lru%2Fdownload%2Fquick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha1-NmST5rPkKjpoheLpnRj4D7eoyTI= + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.npmmirror.com/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npmmirror.com/rechoir/download/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.npmmirror.com/registry-auth-token/download/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha1-bXtABkQZGJcszV/tzUHcMix5slA= + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/registry-url/download/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha1-6YM0tQ1UNLgRNrROxjjZwgCcUAk= + dependencies: + rc "^1.2.8" + +release-it@^14.11.6: + version "14.11.8" + resolved "https://registry.npmmirror.com/release-it/download/release-it-14.11.8.tgz#6da25daa93286d832cae4f10008a3bf0c08c2725" + integrity sha512-951DJ0kwjwU7CwGU3BCvRBgLxuJsOPRrZkqx0AsugJdSyPpUdwY9nlU0RAoSKqgh+VTerzecXLIIwgsGIpNxlA== + dependencies: + "@iarna/toml" "2.2.5" + "@octokit/rest" "18.12.0" + async-retry "1.3.3" + chalk "4.1.2" + cosmiconfig "7.0.1" + debug "4.3.2" + deprecated-obj "2.0.0" + execa "5.1.1" + form-data "4.0.0" + git-url-parse "11.6.0" + globby "11.0.4" + got "11.8.3" + import-cwd "3.0.0" + inquirer "8.2.0" + is-ci "3.0.1" + lodash "4.17.21" + mime-types "2.1.34" + new-github-release-url "1.0.0" + open "7.4.2" + ora "5.4.1" + os-name "4.0.1" + parse-json "5.2.0" + semver "7.3.5" + shelljs "0.8.4" + update-notifier "5.1.0" + url-join "4.0.1" + uuid "8.3.2" + yaml "1.10.2" + yargs-parser "20.2.9" + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.npmmirror.com/resolve-alpn/download/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha1-t629rDVGqq7CC0Xn2CZZJwcnJvk= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= + +resolve@^1.1.6: + version "1.20.0" + resolved "https://registry.npmmirror.com/resolve/download/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU= + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/responselike/download/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/responselike/download/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha1-JjkbzDF091D5p56sxAoSpcQtdyM= + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.npmmirror.com/retry/download/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha1-GFsVh6z2eRnWOzVzSeA1N7JIRlg= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/download/reusify-1.0.4.tgz?cache=0&sync_timestamp=1632754301224&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Freusify%2Fdownload%2Freusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmmirror.com/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/download/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.2.0: + version "7.4.0" + resolved "https://registry.npmmirror.com/rxjs/download/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + integrity sha1-oSpE1+6/AW9f8kQbh/KMmlHOvGg= + dependencies: + tslib "~2.1.0" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmmirror.com/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/semver-diff/download/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha1-Bfd85Z8yXgDicGr9Z7tQbdscoys= + dependencies: + semver "^6.3.0" + +semver@7.3.5, semver@^7.3.4: + version "7.3.5" + resolved "https://registry.npmmirror.com/semver/download/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc= + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmmirror.com/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= + +shelljs@0.8.4: + version "0.8.4" + resolved "https://registry.npmmirror.com/shelljs/download/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha1-3naE/ut2f4cWsyYHiooAh1iQ48I= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/side-channel/download/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha1-785cj9wQTudRslxY1CkAEfpeos8= + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.6" + resolved "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/split-on-first/download/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha1-9hCv7uOxK84dDDBCXnY5i3gkml8= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strict-uri-encode/download/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: + version "4.2.3" + resolved "https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk= + dependencies: + ansi-regex "^5.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= + dependencies: + has-flag "^4.0.0" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmmirror.com/through/download/through-2.3.8.tgz?cache=0&sync_timestamp=1632753463431&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fthrough%2Fdownload%2Fthrough-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmmirror.com/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/to-readable-stream/download/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha1-zgqgwvPfat+FLvtASng+d8BHV3E= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz?cache=0&sync_timestamp=1633303287861&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftr46%2Fdownload%2Ftr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/tslib/download/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo= + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ= + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc= + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha1-i993dDOF2KTxO6lfYQ9czWjHKPg= + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmmirror.com/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA= + dependencies: + is-typedarray "^1.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unique-string/download/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha1-OcZFH4GvsnSd4rIz4/fF6IQ72J0= + dependencies: + crypto-random-string "^2.0.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/universal-user-agent/download/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha1-M4H4UDslHA2c0hvB3pOeyd9UgO4= + +update-notifier@5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/update-notifier/download/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha1-SrDXx/NqIx3XMWz3cpMT8CFNmtk= + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +url-join@4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/url-join/download/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha1-tkLiGiZGgI/6F4xMX9o5hE4Szec= + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/url-parse-lax/download/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.npmmirror.com/uuid/download/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz?cache=0&sync_timestamp=1632753508689&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1632753511486&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/widest-line/download/widest-line-3.1.0.tgz?cache=0&sync_timestamp=1634024110428&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwidest-line%2Fdownload%2Fwidest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha1-gpIzO79my0X/DeFgOxNreuFJbso= + dependencies: + string-width "^4.0.0" + +windows-release@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/windows-release/download/windows-release-4.0.0.tgz#4725ec70217d1bf6e02c7772413b29cdde9ec377" + integrity sha1-RyXscCF9G/bgLHdyQTspzd6ew3c= + dependencies: + execa "^4.0.2" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/write-file-atomic/download/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug= + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/xdg-basedir/download/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha1-S8jZmEQDaWIl74OhVzy7y0552xM= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/yallist/download/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= + +yaml@1.10.2, yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.npmmirror.com/yaml/download/yaml-1.10.2.tgz?cache=0&sync_timestamp=1636797577567&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyaml%2Fdownload%2Fyaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha1-IwHF/78StGfejaIzOkWeKeeSDks= + +yargs-parser@20.2.9: + version "20.2.9" + resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031001880&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha1-LrfcOwKJcY/ClfNidThFxBoMlO4= diff --git a/packages/vant-markdown-loader/README.md b/packages/vant-markdown-loader/README.md deleted file mode 100644 index bac03df92..000000000 --- a/packages/vant-markdown-loader/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# vant-markdown-loader - -Simple and fast vue markdown loader, transform markdown to vue component. - -## Install - -```shell -# with npm -npm i @vant/markdown-loader -D - -# with yarn -yarn add @vant/markdown-loader -D - -# with pnpm -pnpm add @vant/markdown-loader -D -``` - -## Options - -- `enableMetaData`: Default `false`. Whether to use [front-matter](https://github.com/jxson/front-matter) to extract markdown meta data - -- `linkOpen`: Default `true`. Whether to add target="\_blank" to all links - -- `wrapper(html, fm)`: Format the returned content using a custom function - - `html`: The result of [markdown-it](https://github.com/markdown-it/markdown-it)'s render - - `fm`: See [fm(string)](https://github.com/jxson/front-matter#fmstring). If `enableMetaData` option is `false`, the value is `undefined`. - - `attributes` - - `body` - - `frontmatter` diff --git a/packages/vant-markdown-loader/package.json b/packages/vant-markdown-loader/package.json deleted file mode 100644 index 493200b47..000000000 --- a/packages/vant-markdown-loader/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "@vant/markdown-loader", - "version": "4.1.1", - "description": "Simple and fast vue markdown loader", - "main": "src/index.js", - "publishConfig": { - "access": "public", - "registry": "https://registry.npmjs.org/" - }, - "repository": { - "type": "git", - "url": "https://github.com/youzan/vant.git", - "directory": "packages/vant-markdown-loader" - }, - "bugs": "https://github.com/youzan/vant/issues", - "author": "chenjiahan", - "license": "MIT", - "dependencies": { - "front-matter": "^4.0.2", - "highlight.js": "^10.7.1", - "loader-utils": "^2.0.0", - "markdown-it": "^12.0.4", - "markdown-it-anchor": "^8.0.0", - "transliteration": "^2.2.0" - } -} diff --git a/packages/vant-markdown-loader/src/card-wrapper.js b/packages/vant-markdown-loader/src/card-wrapper.js deleted file mode 100644 index 6216cdef9..000000000 --- a/packages/vant-markdown-loader/src/card-wrapper.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = function cardWrapper(html) { - const group = html - .replace(/

{ - if (fragment.indexOf('${fragment}`; - } - - return fragment; - }) - .join(''); -}; diff --git a/packages/vant-markdown-loader/src/extract-demo.js b/packages/vant-markdown-loader/src/extract-demo.js deleted file mode 100644 index 384d36963..000000000 --- a/packages/vant-markdown-loader/src/extract-demo.js +++ /dev/null @@ -1,42 +0,0 @@ -const path = require('path'); -const fs = require('fs'); -const os = require('os'); -const parser = require('./md-parser'); - -function hyphenate(str) { - return str.replace(/\B([A-Z])/g, '-$1').toLowerCase(); -} - -module.exports = function extraDemo(content) { - const isWin = /^win/.test(os.platform()); - const markdownDir = path.dirname(this.resourcePath); - const demoLinks = []; - - content = content.replace( - /([\s\S]*?)<\/demo-code>/g, - function (_, attrs, link) { - link = link.trim(); // 去换行符 - const tag = 'demo-code-' + hyphenate(path.basename(link, '.vue')); - let fullLink; - if (isWin) { - fullLink = path.posix.join(...markdownDir.split(path.sep), link); - } else { - fullLink = path.join(markdownDir, link); - } - demoLinks.indexOf(fullLink) === -1 && demoLinks.push(fullLink); - const demoContent = fs.readFileSync(fullLink, { encoding: 'utf8' }); - const demoParseredContent = parser.render( - '```html\n' + demoContent + '\n```' - ); - return ` - - <${tag} /> - - `; - } - ); - - return [content, demoLinks]; -}; diff --git a/packages/vant-markdown-loader/src/highlight.js b/packages/vant-markdown-loader/src/highlight.js deleted file mode 100644 index c5fed8c16..000000000 --- a/packages/vant-markdown-loader/src/highlight.js +++ /dev/null @@ -1,10 +0,0 @@ -const hljs = require('highlight.js'); - -module.exports = function highlight(str, lang) { - if (lang && hljs.getLanguage(lang)) { - // https://github.com/highlightjs/highlight.js/issues/2277 - return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value; - } - - return ''; -}; diff --git a/packages/vant-markdown-loader/src/index.js b/packages/vant-markdown-loader/src/index.js deleted file mode 100644 index ece432bcf..000000000 --- a/packages/vant-markdown-loader/src/index.js +++ /dev/null @@ -1,117 +0,0 @@ -const path = require('path'); -const loaderUtils = require('loader-utils'); -const frontMatter = require('front-matter'); -const parser = require('./md-parser'); -const linkOpen = require('./link-open'); -const cardWrapper = require('./card-wrapper'); -const extractDemo = require('./extract-demo'); -const sideEffectTags = require('./side-effect-tags'); - -function camelize(str) { - return `-${str}`.replace(/-(\w)/g, (_, c) => (c ? c.toUpperCase() : '')); -} - -const sharedVueOptions = `mounted() { - const anchors = [].slice.call(this.$el.querySelectorAll('h2, h3, h4, h5')); - - anchors.forEach(anchor => { - anchor.addEventListener('click', this.scrollToAnchor); - }); - }, - - methods: { - scrollToAnchor(event) { - if (event.target.id) { - this.$router.push({ - name: this.$route.name, - hash: '#' + event.target.id - }) - } - } - }, -`; - -function wrapper(content) { - let demoLinks; - [content, demoLinks] = extractDemo.call(this, content); - content = cardWrapper(content); - - // 不包含 demo-code 的 md 文件,直接使绑定 HTML - if (demoLinks.length === 0) { - content = escape(content); - - return ` - -`; - } - - // 包含 demo-code 的 md 文件,需要走模版渲染 - let styles; - [content, styles] = sideEffectTags(content); - - return ` - - - - -${styles.join('\n')} -`; -} - -module.exports = function (source) { - let options = loaderUtils.getOptions(this) || {}; - this.cacheable && this.cacheable(); - - options = { - wrapper, - linkOpen: true, - ...options, - }; - - let fm; - - if (options.enableMetaData) { - fm = frontMatter(source); - source = fm.body; - } - - if (options.linkOpen) { - linkOpen(parser); - } - - return options.wrapper.call(this, parser.render(source), fm); -}; diff --git a/packages/vant-markdown-loader/src/link-open.js b/packages/vant-markdown-loader/src/link-open.js deleted file mode 100644 index 0e513226a..000000000 --- a/packages/vant-markdown-loader/src/link-open.js +++ /dev/null @@ -1,18 +0,0 @@ -// add target="_blank" to all links -module.exports = function linkOpen(md) { - const defaultRender = - md.renderer.rules.link_open || - function(tokens, idx, options, env, self) { - return self.renderToken(tokens, idx, options); - }; - - md.renderer.rules.link_open = function(tokens, idx, options, env, self) { - const aIndex = tokens[idx].attrIndex('target'); - - if (aIndex < 0) { - tokens[idx].attrPush(['target', '_blank']); // add new attribute - } - - return defaultRender(tokens, idx, options, env, self); - }; -}; diff --git a/packages/vant-markdown-loader/src/md-parser.js b/packages/vant-markdown-loader/src/md-parser.js deleted file mode 100644 index 3940d886f..000000000 --- a/packages/vant-markdown-loader/src/md-parser.js +++ /dev/null @@ -1,14 +0,0 @@ -const MarkdownIt = require('markdown-it'); -const markdownItAnchor = require('markdown-it-anchor'); -const highlight = require('./highlight'); -const { slugify } = require('transliteration'); - -const parser = new MarkdownIt({ - html: true, - highlight, -}).use(markdownItAnchor, { - level: 2, - slugify, -}); - -module.exports = parser; diff --git a/packages/vant-markdown-loader/src/side-effect-tags.js b/packages/vant-markdown-loader/src/side-effect-tags.js deleted file mode 100644 index a7f99fd5b..000000000 --- a/packages/vant-markdown-loader/src/side-effect-tags.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = function sideEffectTags(content) { - const styles = []; - - // 从模版中移除 script 标签 - content = content.replace(/[\s\S]*?<\/script>/g, ''); - - // 从模版中移除 style 标签,并收集到 styles 数组中,以转移为 .vue 文件 的 style 标签 - content = content.replace(/([\s\S]*?)<\/style>/g, (_, css) => { - styles.push(``); - return ''; - }); - - return [content, styles]; -}; diff --git a/packages/vant-markdown-vetur/src/vetur.ts b/packages/vant-markdown-vetur/src/vetur.ts index ff3c424fe..8f6e40392 100644 --- a/packages/vant-markdown-vetur/src/vetur.ts +++ b/packages/vant-markdown-vetur/src/vetur.ts @@ -3,9 +3,9 @@ import { VueTag, VeturTags, VeturAttributes, VeturAttribute } from './type'; export function genVeturTags(tags: VueTag[]) { const veturTags: VeturTags = {}; - tags.forEach(tag => { + tags.forEach((tag) => { veturTags[tag.name] = { - attributes: tag.attributes ? tag.attributes.map(item => item.name) : [], + attributes: tag.attributes ? tag.attributes.map((item) => item.name) : [], }; }); @@ -15,16 +15,16 @@ export function genVeturTags(tags: VueTag[]) { export function genVeturAttributes(tags: VueTag[]) { const veturAttributes: VeturAttributes = {}; - tags.forEach(tag => { + tags.forEach((tag) => { if (tag.attributes) { - tag.attributes.forEach(attr => { - let attribute: VeturAttribute = { + tag.attributes.forEach((attr) => { + const attribute: VeturAttribute = { type: attr.value.type, - description: `${attr.description}, 默认值: ${attr.default}` - } + description: `${attr.description}, Default: ${attr.default}`, + }; if (attr.options.length > 0) { - attribute.options = attr.options + attribute.options = attr.options; } veturAttributes[`${tag.name}/${attr.name}`] = attribute; diff --git a/packages/vant-use/build.js b/packages/vant-use/build.js index 1f2ff0842..a763c8758 100644 --- a/packages/vant-use/build.js +++ b/packages/vant-use/build.js @@ -11,6 +11,8 @@ function bundleBundle(format) { bundle: true, target: ['chrome53'], outfile, + // preserve Chinese character + charset: 'utf8', external: ['vue'], entryPoints: ['./src/index.ts'], }).then(finish); diff --git a/packages/vant-use/package.json b/packages/vant-use/package.json index 8e710264d..520e774f6 100644 --- a/packages/vant-use/package.json +++ b/packages/vant-use/package.json @@ -34,7 +34,7 @@ "esbuild": "^0.13.15", "release-it": "^14.0.2", "typescript": "~4.5.2", - "vue": "^3.2.20" + "vue": "^3.2.27" }, "release-it": { "git": { diff --git a/packages/vant/babel.config.js b/packages/vant/babel.config.js deleted file mode 100644 index 3c2197b76..000000000 --- a/packages/vant/babel.config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - presets: [ - [ - '@vant/cli/preset.cjs', - { - loose: process.env.BUILD_TARGET === 'package', - enableObjectSlots: false, - }, - ], - ], -}; diff --git a/packages/vant/docs/markdown/changelog.en-US.md b/packages/vant/docs/markdown/changelog.en-US.md index 8de69a172..eadaefd07 100644 --- a/packages/vant/docs/markdown/changelog.en-US.md +++ b/packages/vant/docs/markdown/changelog.en-US.md @@ -16,6 +16,94 @@ Vant follows [Semantic Versioning 2.0.0](https://semver.org/lang/zh-CN/). ## Details +### [v3.4.2](https://github.com/compare/v3.4.1...v3.4.2) + +`2022-01-17` + +**Feature** + +- Cascader: add show-header prop [#10202](https://github.com/youzan/vant/issues/10202) +- Image: add position prop [#10142](https://github.com/youzan/vant/issues/10142) +- ImagePreview: improve zoom fluency [#10187](https://github.com/youzan/vant/issues/10187) +- Overlay: add lazy-render prop [#10180](https://github.com/youzan/vant/issues/10180) +- provide english version of web-types [#10207](https://github.com/youzan/vant/issues/10207) + +**Bug Fixes** + +- Calendar: incorrectly selected when a date is disabled [#10196](https://github.com/youzan/vant/issues/10196) +- Image: failed to hide loading when using lazy-load [#10193](https://github.com/youzan/vant/issues/10193) +- ImagePreview: incorrectly closed after zooming [#10188](https://github.com/youzan/vant/issues/10188) +- Skeleton: row prop can't be string type [#10172](https://github.com/youzan/vant/issues/10172) +- useHeight may get the wrong height [#10195](https://github.com/youzan/vant/issues/10195) + +### [v3.4.1](https://github.com/compare/v3.4.0...v3.4.1) + +`2022-01-10` + +**Bug Fixes** + +- Area: missing picker mask [#10164](https://github.com/youzan/vant/issues/10164) +- DatetimePicker: error in some edge cases [#10140](https://github.com/youzan/vant/issues/10140) +- Popover: fix gap under the triangle [#10148](https://github.com/youzan/vant/issues/10148) + +### [v3.4.0](https://github.com/compare/v3.3.7...v3.4.0) + +`2022-01-01` + +**Bug Fixes** + +- Icons: complete https protocol [#10079](https://github.com/youzan/vant/issues/10079) +- Picker: should not render mask and frame when options is empty [#10135](https://github.com/youzan/vant/issues/10135) +- Popup: close event emitted twice [#10132](https://github.com/youzan/vant/issues/10132) +- PullRefresh: may trigger browser bounce in some cases [#10080](https://github.com/youzan/vant/issues/10080) +- Step: fix inactive title style [#10049](https://github.com/youzan/vant/issues/10049) +- SwipeCell: should not trigger open event when opened [#10059](https://github.com/youzan/vant/issues/10059) +- swipe: delay load cause swipe error [#10052](https://github.com/youzan/vant/issues/10052) [#10069](https://github.com/youzan/vant/issues/10069) +- Tabs: should not render line when have no tab [#10063](https://github.com/youzan/vant/issues/10063) + +**Feature** + +- ActionBarIcon: add badge-props prop [#10096](https://github.com/youzan/vant/issues/10096) +- ActionSheet: add option slot [#10065](https://github.com/youzan/vant/issues/10065) +- Badge: add badge-props prop [#10095](https://github.com/youzan/vant/issues/10095) +- GridItem: add badge-props prop [#10097](https://github.com/youzan/vant/issues/10097) +- Icons: add cash-o icon [#10076](https://github.com/youzan/vant/issues/10076) +- ImagePreview: add overlayClass option [#10044](https://github.com/youzan/vant/issues/10044) +- Notify: add position prop [#10056](https://github.com/youzan/vant/issues/10056) +- Popover: add action slot [#10091](https://github.com/youzan/vant/issues/10091) +- Search: add click-left-icon、click-right-icon event [#10139](https://github.com/youzan/vant/issues/10139) +- SidebarItem: add badge-props prop [#10106](https://github.com/youzan/vant/issues/10106) +- Swipe: indicator slot add total param [#10060](https://github.com/youzan/vant/issues/10060) +- TabbarItem: add badge-props prop [#10092](https://github.com/youzan/vant/issues/10092) +- Tabs: add shrink prop [#10125](https://github.com/youzan/vant/issues/10125) + +**style** + +- PullRefresh: remove user-select: none [#10078](https://github.com/youzan/vant/issues/10078) +- TreeSelect: allow select text in content slot [#10081](https://github.com/youzan/vant/issues/10081) + +**Types** + +- define global components for volar [#10136](https://github.com/youzan/vant/issues/10136) +- Field: type prop allow all native types [#10042](https://github.com/youzan/vant/issues/10042) +- Popup: add PopupInstance type [#10062](https://github.com/youzan/vant/issues/10062) +- Search: fix missing event typing [#10134](https://github.com/youzan/vant/issues/10134) + +### [v3.3.7](https://github.com/compare/v3.3.6...v3.3.7) + +`2021-12-12` + +**Feature** + +- Badge: add position prop [#10024](https://github.com/youzan/vant/issues/10024) + +**Bug Fixes** + +- DatetimePicker: should update value after calling picker methods [#10029](https://github.com/youzan/vant/issues/10029) +- Field: fix the length of emoji [#10033](https://github.com/youzan/vant/issues/10033) +- Pagination: change event not work [#10018](https://github.com/youzan/vant/issues/10018) +- fix tree shaking is broken [#10034](https://github.com/youzan/vant/issues/10034) + ### [v3.3.6](https://github.com/compare/v3.3.5...v3.3.6) `2021-12-05` diff --git a/packages/vant/docs/markdown/changelog.zh-CN.md b/packages/vant/docs/markdown/changelog.zh-CN.md index c26e4dcfa..0d16fe384 100644 --- a/packages/vant/docs/markdown/changelog.zh-CN.md +++ b/packages/vant/docs/markdown/changelog.zh-CN.md @@ -16,6 +16,95 @@ Vant 遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范。 ## 更新内容 +### [v3.4.2](https://github.com/compare/v3.4.1...v3.4.2) + +`2022-01-17` + +**Feature** + +- Cascader: 新增 show-header 属性 [#10202](https://github.com/youzan/vant/issues/10202) +- Image: 新增 position 属性 [#10142](https://github.com/youzan/vant/issues/10142) +- ImagePreview: 优化缩放手势的流畅度 [#10187](https://github.com/youzan/vant/issues/10187) +- Overlay: 新增 lazy-render 属性 [#10180](https://github.com/youzan/vant/issues/10180) +- web-types.json 现在默认使用英文描述 [#10207](https://github.com/youzan/vant/issues/10207) + +**Bug Fixes** + +- Calendar: 修复范围选择包括被禁用的日期时可能选择错误的问题 [#10196](https://github.com/youzan/vant/issues/10196) +- Image: 修复使用 lazy-load 时可能无法正常加载的问题 [#10193](https://github.com/youzan/vant/issues/10193) +- ImagePreview: 修复快速缩放手势导致预览关闭的问题 [#10188](https://github.com/youzan/vant/issues/10188) +- Skeleton: 修复 row 属性为字符串类型时不生效的问题 [#10172](https://github.com/youzan/vant/issues/10172) +- NavBar: 修复在 safari 上占位元素高度错误的问题 [#10195](https://github.com/youzan/vant/issues/10195) +- Tabbar: 修复在 safari 上占位元素高度错误的问题 [#10195](https://github.com/youzan/vant/issues/10195) + +### [v3.4.1](https://github.com/compare/v3.4.0...v3.4.1) + +`2022-01-10` + +**Bug Fixes** + +- Area: 修复缺少遮罩层的问题 [#10164](https://github.com/youzan/vant/issues/10164) +- DatetimePicker: 修复边界场景下出现报错的问题 [#10140](https://github.com/youzan/vant/issues/10140) +- Popover: 修复箭头和弹出框之间存在缝隙的问题 [#10148](https://github.com/youzan/vant/issues/10148) + +### [v3.4.0](https://github.com/compare/v3.3.7...v3.4.0) + +`2022-01-01` + +**Bug Fixes** + +- Icons: 修复 URL 缺少协议导致个别浏览器出现异常的问题 [#10079](https://github.com/youzan/vant/issues/10079) +- Picker: 修复选项为空时也会渲染选择框的问题 [#10135](https://github.com/youzan/vant/issues/10135) +- Popup: 修复 close 事件触发两次的问题 [#10132](https://github.com/youzan/vant/issues/10132) +- PullRefresh: 修复在个别浏览器上会触发原生回弹效果的问题 [#10080](https://github.com/youzan/vant/issues/10080) +- Step: 修复 inactive-color 属性未正确生效的问题 [#10049](https://github.com/youzan/vant/issues/10049) +- SwipeCell: 修复打开状态下也会触发 open 事件的问题 [#10059](https://github.com/youzan/vant/issues/10059) +- swipe: 修复个别情况下无法正确滚动的问题 [#10052](https://github.com/youzan/vant/issues/10052) [#10069](https://github.com/youzan/vant/issues/10069) +- Tabs: 修复标签页为空时会渲染一个错误的底部条的问题 [#10063](https://github.com/youzan/vant/issues/10063) + +**Feature** + +- ActionBarIcon: 新增 badge-props 属性 [#10096](https://github.com/youzan/vant/issues/10096) +- ActionSheet: 新增 option 插槽 [#10065](https://github.com/youzan/vant/issues/10065) +- Badge: 新增 badge-props 属性 [#10095](https://github.com/youzan/vant/issues/10095) +- GridItem: 新增 badge-props 属性 [#10097](https://github.com/youzan/vant/issues/10097) +- Icons: 新增 cash-o 图标 [#10076](https://github.com/youzan/vant/issues/10076) +- ImagePreview: 新增 overlayClass 选项 [#10044](https://github.com/youzan/vant/issues/10044) +- Notify: 新增 position 属性 [#10056](https://github.com/youzan/vant/issues/10056) +- Popover: 新增 action 插槽 [#10091](https://github.com/youzan/vant/issues/10091) +- Search: 新增 click-left-icon、click-right-icon 事件 [#10139](https://github.com/youzan/vant/issues/10139) +- SidebarItem: 新增 badge-props 属性 [#10106](https://github.com/youzan/vant/issues/10106) +- Swipe: indicator 插槽新增 total 参数 [#10060](https://github.com/youzan/vant/issues/10060) +- TabbarItem: 新增 badge-props 属性 [#10092](https://github.com/youzan/vant/issues/10092) +- Tabs: 新增 shrink 属性 [#10125](https://github.com/youzan/vant/issues/10125) + +**style** + +- PullRefresh: 移除 `user-select: none` 样式 [#10078](https://github.com/youzan/vant/issues/10078) +- TreeSelect: 允许选中 content 插槽中的文字 [#10081](https://github.com/youzan/vant/issues/10081) + +**Types** + +- 增加所有组件的全局类型,在 volar 中提供默认提示 [#10136](https://github.com/youzan/vant/issues/10136) +- Field: 修复 type 属性定义不全的问题 [#10042](https://github.com/youzan/vant/issues/10042) +- Popup: 导出 PopupInstance 类型 [#10062](https://github.com/youzan/vant/issues/10062) +- Search: 修复事件类型定义不全的问题 [#10134](https://github.com/youzan/vant/issues/10134) + +### [v3.3.7](https://github.com/compare/v3.3.6...v3.3.7) + +`2021-12-12` + +**Feature** + +- Badge: 新增 position 属性 [#10024](https://github.com/youzan/vant/issues/10024) + +**Bug Fixes** + +- DatetimePicker: 修复调用 Picker 实例方法后日期未正确更新的问题 [#10029](https://github.com/youzan/vant/issues/10029) +- Field: 修复输入内容包含 emoji 时,长度计算错误的问题 [#10033](https://github.com/youzan/vant/issues/10033) +- Pagination: 修复 change 事件不触发的问题 [#10018](https://github.com/youzan/vant/issues/10018) +- 修复 tree shaking 不生效的问题 [#10034](https://github.com/youzan/vant/issues/10034) + ### [v3.3.6](https://github.com/compare/v3.3.5...v3.3.6) `2021-12-05` @@ -59,15 +148,15 @@ Vant 遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范。 **Feature** -- 新增 `package.json` 中的 `exports` 字段 [#9952](https://github.com/issues/9952) -- Tabbar: 支持在 route 模式下匹配子路由 [#9926](https://github.com/issues/9926) -- Tabs: 将 `van-tab__pane-wrapper` 类重命名为 `van-tab__panel-wrapper` [#9951](https://github.com/issues/9951) +- 新增 `package.json` 中的 `exports` 字段 [#9952](https://github.com/youzan/vant/issues/9952) +- Tabbar: 支持在 route 模式下匹配子路由 [#9926](https://github.com/youzan/vant/issues/9926) +- Tabs: 将 `van-tab__pane-wrapper` 类重命名为 `van-tab__panel-wrapper` [#9951](https://github.com/youzan/vant/issues/9951) **Bug Fixes** -- Calendar: 修复 show-confirm 为 false 时不会限制最大日期范围的问题 [#9948](https://github.com/issues/9948) -- Calendar: 修复 `scrollToDate` 方法无法精确滚动到对应日期的问题 [#9949](https://github.com/issues/9949) -- Swipe: 修复开始滑动时未阻止 touchmove 事件行为的问题 [#9920](https://github.com/issues/9920) +- Calendar: 修复 show-confirm 为 false 时不会限制最大日期范围的问题 [#9948](https://github.com/youzan/vant/issues/9948) +- Calendar: 修复 `scrollToDate` 方法无法精确滚动到对应日期的问题 [#9949](https://github.com/youzan/vant/issues/9949) +- Swipe: 修复开始滑动时未阻止 touchmove 事件行为的问题 [#9920](https://github.com/youzan/vant/issues/9920) ### [v3.3.1](https://github.com/compare/v3.3.0...v3.3.1) @@ -75,7 +164,7 @@ Vant 遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范。 **Bug Fixes** -- AddressEdit: 修复表单校验不通过时也会触发 save 事件的问题 [#9917](https://github.com/issues/9917) +- AddressEdit: 修复表单校验不通过时也会触发 save 事件的问题 [#9917](https://github.com/youzan/vant/issues/9917) ### [v3.3.0](https://github.com/compare/v3.2.8...v3.3.0) diff --git a/packages/vant/docs/markdown/contribution.zh-CN.md b/packages/vant/docs/markdown/contribution.zh-CN.md index e471e9c26..1c38e9c80 100644 --- a/packages/vant/docs/markdown/contribution.zh-CN.md +++ b/packages/vant/docs/markdown/contribution.zh-CN.md @@ -8,8 +8,8 @@ ### Issue 规范 -- 遇到问题时,请先确认这个问题是否已经在 issue 中有记录或者已被修复 -- 提 issue 时,请用简短的语言描述遇到的问题,并添加出现问题时的环境和复现步骤 +- 遇到问题时,请先确认这个问题是否已经在 issue 中有记录或者已被修复。 +- 提 issue 时,请用简短的语言描述遇到的问题,并添加出现问题时的环境和复现步骤。 ## 参与开发 @@ -71,28 +71,38 @@ src └─ README.zh-CN.md # 中文文档 ``` +### 代码规范 + +在编写代码时,请注意: + +- 确保代码可以通过仓库的 ESLint 和 Stylelint 校验。 +- 确保代码格式是规范的,使用 prettier 进行代码格式化。 +- 确保没有使用超出兼容性范围的 API,比如 `async/await`。 + ## 提交 PR -### Pull Request 规范 +### 参考指南 如果你是第一次在 GitHub 上提 Pull Request ,可以阅读下面这两篇文章来学习: - [如何优雅地在 GitHub 上贡献代码](https://segmentfault.com/a/1190000000736629) - [第一次参与开源](https://github.com/firstcontributions/first-contributions/blob/master/translations/README.chs.md) -#### 规范 +### Pull Request 规范 -- 如果遇到问题,建议保持你的 PR 足够小。保证一个 PR 只解决一个问题或只添加一个功能 -- 当新增组件或者修改原有组件时,记得增加或者修改测试代码,保证代码的稳定 -- 在 PR 中请添加合适的描述,并关联相关的 Issue +在提交 Pull Request 时,请注意: + +- 如果遇到问题,建议保持你的 PR 足够小。保证一个 PR 只解决单个问题、添加单个功能。 +- 当新增组件或者修改原有组件时,记得增加或者修改对应的单元测试,保证代码的稳定。 +- 在 PR 中请添加合适的描述,并关联相关的 Issue。 ### Pull Request 流程 -1. fork 主仓库,如果已经 fork 过,请同步主仓库的最新代码 -2. 基于 fork 后仓库的 dev 分支新建一个分支,比如 `feature/button_color` -3. 在新分支上进行开发,开发完成后,提 Pull Request 到主仓库的 dev 分支 -4. Pull Request 会在 Review 通过后被合并到主仓库 -5. 等待 Vant 发布版本,一般是每周一次 +1. fork 主仓库,如果已经 fork 过,请同步主仓库的最新代码。 +2. 基于 fork 后仓库的 dev 分支新建一个分支,比如 `feature/button_color`。 +3. 在新分支上进行开发,开发完成后,提 Pull Request 到主仓库的 dev 分支。 +4. Pull Request 会在 Review 通过后被合并到主仓库。 +5. 等待 Vant 发布新版本,一般是每周一次。 ### 同步最新代码 diff --git a/packages/vant/docs/markdown/home.en-US.md b/packages/vant/docs/markdown/home.en-US.md index 36e907c5a..9ed7a078f 100644 --- a/packages/vant/docs/markdown/home.en-US.md +++ b/packages/vant/docs/markdown/home.en-US.md @@ -48,7 +48,7 @@ Vant 3 supports modern browsers and Chrome >= 51、iOS >= 10.0 (same as Vue 3). | Project | Description | | --- | --- | | [3lang3/react-vant](https://github.com/3lang3/react-vant) | React mobile UI Components based on Vant | -| [mxdi9i7/vant-react](https://github.com/mxdi9i7/vant-react) | Mobile UI Components built on React and TS, inspired by Vant | +| [rc-ui-lib](https://github.com/rancui/rc-ui-lib) | React Mobile UI Components Library | | [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Alipay MiniProgram UI | | [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro | | [vant-theme](https://github.com/Aisen60/vant-theme) | Online theme preview built on Vant UI | diff --git a/packages/vant/docs/markdown/home.zh-CN.md b/packages/vant/docs/markdown/home.zh-CN.md index 5748fb7e0..c94496d15 100644 --- a/packages/vant/docs/markdown/home.zh-CN.md +++ b/packages/vant/docs/markdown/home.zh-CN.md @@ -8,7 +8,7 @@ ### 介绍 -Vant 是**有赞前端团队**开源的移动端组件库,于 2017 年开源,已持续维护 4 年时间。Vant 对内承载了有赞所有核心业务,对外服务十多万开发者,是业界主流的移动端组件库之一。 +Vant 是**有赞前端团队**开源的移动端组件库,于 2017 年开源。Vant 对内承载了有赞所有核心业务,对外服务十多万开发者,是业界主流的移动端组件库之一。 目前 Vant 官方提供了 [Vue 2 版本](https://vant-contrib.gitee.io/vant)、[Vue 3 版本](https://vant-contrib.gitee.io/vant/v3)和[微信小程序版本](http://vant-contrib.gitee.io/vant-weapp),并由社区团队维护 [React 版本](https://github.com/mxdi9i7/vant-react)和[支付宝小程序版本](https://github.com/ant-move/Vant-Aliapp)。 @@ -62,7 +62,7 @@ Vant 3 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一致 | 项目 | 描述 | | --- | --- | | [3lang3/react-vant](https://github.com/3lang3/react-vant) | 参照 Vant 打造的 React 移动端组件库 | -| [mxdi9i7/vant-react](https://github.com/mxdi9i7/vant-react) | 基于 React 和 TS 构建的移动端组件库 | +| [rc-ui-lib](https://github.com/rancui/rc-ui-lib) | 基于 Vant 的 React 版本移动端 UI 组件库 | | [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Vant 支付宝小程序版 | | [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro 版 | | [vant-theme](https://github.com/Aisen60/vant-theme) | Vant 在线主题预览工具 | diff --git a/packages/vant/docs/markdown/quickstart.en-US.md b/packages/vant/docs/markdown/quickstart.en-US.md index 46ed3a006..da242d60d 100644 --- a/packages/vant/docs/markdown/quickstart.en-US.md +++ b/packages/vant/docs/markdown/quickstart.en-US.md @@ -99,7 +99,14 @@ If you are using vite, please use [vite-plugin-style-import](https://github.com/ #### 1. Install Plugin ```bash -npm i vite-plugin-style-import@1.2.0 -D +# with npm +npm i vite-plugin-style-import -D + +# with yarn +yarn add vite-plugin-style-import -D + +# with pnpm +pnpm add vite-plugin-style-import -D ``` #### 2. Configure Plugin @@ -108,19 +115,13 @@ Configure the plugin in the `vite.config.js` file: ```js import vue from '@vitejs/plugin-vue'; -import styleImport from 'vite-plugin-style-import'; +import styleImport, { VantResolve } from 'vite-plugin-style-import'; export default { plugins: [ vue(), styleImport({ - libs: [ - { - libraryName: 'vant', - esModule: true, - resolveStyle: (name) => `vant/es/${name}/style/index`, - }, - ], + resolves: [VantResolve()], }), ], }; diff --git a/packages/vant/docs/markdown/quickstart.zh-CN.md b/packages/vant/docs/markdown/quickstart.zh-CN.md index 933efc374..e33e68e02 100644 --- a/packages/vant/docs/markdown/quickstart.zh-CN.md +++ b/packages/vant/docs/markdown/quickstart.zh-CN.md @@ -100,7 +100,14 @@ pnpm add vant@3 #### 1. 安装插件 ```bash -npm i vite-plugin-style-import@1.2.0 -D +# 通过 npm 安装 +npm i vite-plugin-style-import -D + +# 通过 yarn 安装 +yarn add vite-plugin-style-import -D + +# 通过 pnpm 安装 +pnpm add vite-plugin-style-import -D ``` #### 2. 配置插件 @@ -109,19 +116,13 @@ npm i vite-plugin-style-import@1.2.0 -D ```js import vue from '@vitejs/plugin-vue'; -import styleImport from 'vite-plugin-style-import'; +import styleImport, { VantResolve } from 'vite-plugin-style-import'; export default { plugins: [ vue(), styleImport({ - libs: [ - { - libraryName: 'vant', - esModule: true, - resolveStyle: (name) => `vant/es/${name}/style/index`, - }, - ], + resolves: [VantResolve()], }), ], }; diff --git a/packages/vant/docs/markdown/vant-use-intro.en-US.md b/packages/vant/docs/markdown/vant-use-intro.en-US.md index 5797982c7..647195f23 100644 --- a/packages/vant/docs/markdown/vant-use-intro.en-US.md +++ b/packages/vant/docs/markdown/vant-use-intro.en-US.md @@ -4,6 +4,21 @@ Vant provide some built-in composition APIs, you can directly use these APIs for development. +### Install + +Although `@vant/use` is already included in Vant's dependencies, it is still recommended to install this package explicitly: + +```shell +# with npm +npm i @vant/use + +# with yarn +yarn add @vant/use + +# with pnpm +pnpm add @vant/use +``` + ### Demo ```js diff --git a/packages/vant/docs/markdown/vant-use-intro.zh-CN.md b/packages/vant/docs/markdown/vant-use-intro.zh-CN.md index 03a548a50..2b3df5a35 100644 --- a/packages/vant/docs/markdown/vant-use-intro.zh-CN.md +++ b/packages/vant/docs/markdown/vant-use-intro.zh-CN.md @@ -2,7 +2,22 @@ ### 介绍 -Vant 内置了一系列的组合式 API,对于安装了 `vant` 的项目,可以直接使用这些 API 进行开发。 +Vant 底层依赖了 `@vant/use` 包,其中内置了一系列的组合式 API。对于使用了 Vant 的项目,可以复用这些 API 进行开发。 + +### 安装 + +虽然 Vant 的依赖中已经包含了 `@vant/use`,但我们仍然推荐显式地安装它: + +```shell +# with npm +npm i @vant/use + +# with yarn +yarn add @vant/use + +# with pnpm +pnpm add @vant/use +``` ### 示例 diff --git a/packages/vant/package.json b/packages/vant/package.json index 490010481..a14960f35 100644 --- a/packages/vant/package.json +++ b/packages/vant/package.json @@ -1,9 +1,9 @@ { "name": "vant", - "version": "3.3.6", + "version": "3.4.2", "description": "Mobile UI Components built on Vue", "main": "lib/vant.cjs.js", - "module": "lib/vant.es.js", + "module": "es/index.js", "style": "lib/index.css", "typings": "lib/index.d.ts", "unpkg": "lib/vant.min.js", @@ -14,11 +14,11 @@ "import": "./lib/ssr.mjs", "require": "./lib/ssr.js" }, - "import": "./lib/vant.es.js", + "import": "./es/index.js", "require": "./lib/vant.cjs.js", "types": "./lib/index.d.ts" }, - "./es": "./lib/vant.es.js", + "./es": "./es/index.js", "./lib": "./lib/vant.cjs.js", "./es/": "./es/", "./lib/": "./lib/", @@ -75,11 +75,10 @@ "@vant/area-data": "^1.1.3", "@vant/cli": "workspace:*", "@vant/eslint-config": "workspace:*", - "@vue/compiler-sfc": "^3.2.20", - "@vue/runtime-core": "^3.2.20", + "@vue/runtime-core": "^3.2.27", "@vue/test-utils": "^2.0.0-rc.16", "typescript": "~4.5.2", - "vue": "^3.2.20", + "vue": "^3.2.27", "vue-router": "^4.0.12" }, "sideEffects": [ diff --git a/packages/vant/src/action-bar-button/ActionBarButton.tsx b/packages/vant/src/action-bar-button/ActionBarButton.tsx index fdcff9c48..f2bda3871 100644 --- a/packages/vant/src/action-bar-button/ActionBarButton.tsx +++ b/packages/vant/src/action-bar-button/ActionBarButton.tsx @@ -1,4 +1,9 @@ -import { computed, PropType, defineComponent, ExtractPropTypes } from 'vue'; +import { + computed, + defineComponent, + type PropType, + type ExtractPropTypes, +} from 'vue'; import { extend, createNamespace } from '../utils'; import { ACTION_BAR_KEY } from '../action-bar/ActionBar'; diff --git a/packages/vant/src/action-bar-button/index.ts b/packages/vant/src/action-bar-button/index.ts index 28f2e20d0..228b44786 100644 --- a/packages/vant/src/action-bar-button/index.ts +++ b/packages/vant/src/action-bar-button/index.ts @@ -4,3 +4,9 @@ import _ActionBarButton from './ActionBarButton'; export const ActionBarButton = withInstall(_ActionBarButton); export default ActionBarButton; export type { ActionBarButtonProps } from './ActionBarButton'; + +declare module 'vue' { + export interface GlobalComponents { + VanActionBarButton: typeof ActionBarButton; + } +} diff --git a/packages/vant/src/action-bar-icon/ActionBarIcon.tsx b/packages/vant/src/action-bar-icon/ActionBarIcon.tsx index ebe77b3b0..753455d04 100644 --- a/packages/vant/src/action-bar-icon/ActionBarIcon.tsx +++ b/packages/vant/src/action-bar-icon/ActionBarIcon.tsx @@ -1,4 +1,4 @@ -import { defineComponent, ExtractPropTypes } from 'vue'; +import { defineComponent, type PropType, type ExtractPropTypes } from 'vue'; import { extend, createNamespace, unknownProp, numericProp } from '../utils'; import { ACTION_BAR_KEY } from '../action-bar/ActionBar'; @@ -8,7 +8,7 @@ import { useRoute, routeProps } from '../composables/use-route'; // Components import { Icon } from '../icon'; -import { Badge } from '../badge'; +import { Badge, type BadgeProps } from '../badge'; const [name, bem] = createNamespace('action-bar-icon'); @@ -19,6 +19,7 @@ const actionBarIconProps = extend({}, routeProps, { color: String, badge: numericProp, iconClass: unknownProp, + badgeProps: Object as PropType>, iconPrefix: String, }); @@ -35,15 +36,17 @@ export default defineComponent({ useParent(ACTION_BAR_KEY); const renderIcon = () => { - const { dot, badge, icon, color, iconClass, iconPrefix } = props; + const { dot, badge, icon, color, iconClass, badgeProps, iconPrefix } = + props; if (slots.icon) { return ( ); } @@ -56,6 +59,7 @@ export default defineComponent({ badge={badge} color={color} class={[bem('icon'), iconClass]} + badgeProps={badgeProps} classPrefix={iconPrefix} /> ); diff --git a/packages/vant/src/action-bar-icon/index.ts b/packages/vant/src/action-bar-icon/index.ts index 72ffb791d..089e85062 100644 --- a/packages/vant/src/action-bar-icon/index.ts +++ b/packages/vant/src/action-bar-icon/index.ts @@ -4,3 +4,9 @@ import _ActionBarIcon from './ActionBarIcon'; export const ActionBarIcon = withInstall(_ActionBarIcon); export default ActionBarIcon; export type { ActionBarIconProps } from './ActionBarIcon'; + +declare module 'vue' { + export interface GlobalComponents { + VanActionBarIcon: typeof ActionBarIcon; + } +} diff --git a/packages/vant/src/action-bar-icon/test/index.spec.ts b/packages/vant/src/action-bar-icon/test/index.spec.ts index 41fa0efa9..6c23fa201 100644 --- a/packages/vant/src/action-bar-icon/test/index.spec.ts +++ b/packages/vant/src/action-bar-icon/test/index.spec.ts @@ -59,3 +59,17 @@ test('should render icon slot with dot correctly', () => { expect(wrapper.html()).toMatchSnapshot(); }); + +test('should render badge-props prop correctly', async () => { + const wrapper = mount(ActionBarIcon, { + props: { + badge: 1, + badgeProps: { + color: 'blue', + }, + }, + }); + + const badge = wrapper.find('.van-badge'); + expect(badge.style.backgroundColor).toEqual('blue'); +}); diff --git a/packages/vant/src/action-bar/ActionBar.tsx b/packages/vant/src/action-bar/ActionBar.tsx index 427ce168b..f1df59efb 100644 --- a/packages/vant/src/action-bar/ActionBar.tsx +++ b/packages/vant/src/action-bar/ActionBar.tsx @@ -1,4 +1,4 @@ -import { defineComponent, ExtractPropTypes } from 'vue'; +import { defineComponent, type ExtractPropTypes } from 'vue'; import { truthProp, createNamespace } from '../utils'; import { useChildren } from '@vant/use'; diff --git a/packages/vant/src/action-bar/README.md b/packages/vant/src/action-bar/README.md index e44f4e477..4f78bfe0c 100644 --- a/packages/vant/src/action-bar/README.md +++ b/packages/vant/src/action-bar/README.md @@ -102,7 +102,8 @@ Use `badge` prop to show badge in icon. | icon-prefix `v3.0.17` | Icon className prefix | _string_ | `van-icon` | | dot | Whether to show red dot | _boolean_ | - | | badge | Content of the badge | _number \| string_ | - | -| url | Link | _string_ | - | +| badge-props `v3.2.8` | Props of Badge,see [Badge - props](#/en-US/badge#props) | _BadgeProps_ | - | +| url | Link URL | _string_ | - | | to | Target route of the link, same as to of vue-router | _string \| object_ | - | | replace | If true, the navigation will not leave a history record | _boolean_ | `false` | @@ -115,7 +116,7 @@ Use `badge` prop to show badge in icon. | color | Button color, support linear-gradient | _string_ | - | | icon | Left Icon | _string_ | - | | disabled | Whether to disable button | _boolean_ | `false` | -| loading | Whether show loading status | _boolean_ | `false` | +| loading | Whether to show loading status | _boolean_ | `false` | | url | Link | _string_ | - | | to | Target route of the link, same as to of vue-router | _string \| object_ | - | | replace | If true, the navigation will not leave a history record | _boolean_ | `false` | diff --git a/packages/vant/src/action-bar/README.zh-CN.md b/packages/vant/src/action-bar/README.zh-CN.md index 8e3b9c348..e7123fa1b 100644 --- a/packages/vant/src/action-bar/README.zh-CN.md +++ b/packages/vant/src/action-bar/README.zh-CN.md @@ -106,6 +106,7 @@ export default { | icon-prefix `v3.0.17` | 图标类名前缀,等同于 Icon 组件的 [class-prefix 属性](#/zh-CN/icon#props) | _string_ | `van-icon` | | dot | 是否显示图标右上角小红点 | _boolean_ | `false` | | badge | 图标右上角徽标的内容 | _number \| string_ | - | +| badge-props `v3.2.8` | 自定义徽标的属性,传入的对象会被透传给 [Badge 组件的 props](#/zh-CN/badge#props) | _BadgeProps_ | - | | url | 点击后跳转的链接地址 | _string_ | - | | to | 点击后跳转的目标路由对象,等同于 vue-router 的 [to 属性](https://router.vuejs.org/zh/api/#to) | _string \| object_ | - | | replace | 是否在跳转时替换当前页面历史 | _boolean_ | `false` | @@ -117,7 +118,7 @@ export default { | text | 按钮文字 | _string_ | - | | type | 按钮类型,可选值为 `primary` `info` `warning` `danger` | _string_ | `default` | | color | 按钮颜色,支持传入 `linear-gradient` 渐变色 | _string_ | - | -| icon | 左侧[图标名称](#/zh-CN/icon)或图片链接 | _string_ | - | +| icon | 左侧图标名称或图片链接,等同于 Icon 组件的 [name 属性](#/zh-CN/icon#props) | _string_ | - | | disabled | 是否禁用按钮 | _boolean_ | `false` | | loading | 是否显示为加载状态 | _boolean_ | `false` | | url | 点击后跳转的链接地址 | _string_ | - | diff --git a/packages/vant/src/action-bar/index.ts b/packages/vant/src/action-bar/index.ts index dd652d2f2..935d850fb 100644 --- a/packages/vant/src/action-bar/index.ts +++ b/packages/vant/src/action-bar/index.ts @@ -4,3 +4,9 @@ import _ActionBar from './ActionBar'; export const ActionBar = withInstall(_ActionBar); export default ActionBar; export type { ActionBarProps } from './ActionBar'; + +declare module 'vue' { + export interface GlobalComponents { + VanActionBar: typeof ActionBar; + } +} diff --git a/packages/vant/src/action-sheet/ActionSheet.tsx b/packages/vant/src/action-sheet/ActionSheet.tsx index 23ee7cae8..c01fa38b3 100644 --- a/packages/vant/src/action-sheet/ActionSheet.tsx +++ b/packages/vant/src/action-sheet/ActionSheet.tsx @@ -1,4 +1,4 @@ -import { nextTick, defineComponent, ExtractPropTypes } from 'vue'; +import { nextTick, defineComponent, type ExtractPropTypes } from 'vue'; // Utils import { @@ -94,18 +94,23 @@ export default defineComponent({ } }; - const renderOption = (item: ActionSheetAction, index: number) => { - const { name, color, subname, loading, callback, disabled, className } = - item; + const renderActionContent = (action: ActionSheetAction, index: number) => { + if (action.loading) { + return ; + } - const Content = loading ? ( - - ) : ( - [ - {name}, - subname &&
{subname}
, - ] - ); + if (slots.action) { + return slots.action({ action, index }); + } + + return [ + {action.name}, + action.subname &&
{action.subname}
, + ]; + }; + + const renderAction = (action: ActionSheetAction, index: number) => { + const { color, loading, callback, disabled, className } = action; const onClick = () => { if (disabled || loading) { @@ -113,14 +118,14 @@ export default defineComponent({ } if (callback) { - callback(item); + callback(action); } if (props.closeOnClickAction) { updateShow(false); } - nextTick(() => emit('select', item, index)); + nextTick(() => emit('select', action, index)); }; return ( @@ -130,7 +135,7 @@ export default defineComponent({ class={[bem('item', { loading, disabled }), className]} onClick={onClick} > - {Content} + {renderActionContent(action, index)} ); }; @@ -154,7 +159,7 @@ export default defineComponent({ {renderHeader()} {renderDescription()}
- {props.actions.map(renderOption)} + {props.actions.map(renderAction)} {slots.default?.()}
{renderCancel()} diff --git a/packages/vant/src/action-sheet/README.md b/packages/vant/src/action-sheet/README.md index 4cf92232d..4cc1a07eb 100644 --- a/packages/vant/src/action-sheet/README.md +++ b/packages/vant/src/action-sheet/README.md @@ -218,11 +218,12 @@ export default { ### Slots -| Name | Description | -| ---------------- | ------------------------------------ | -| default | Custom content | -| description | Custom description above the options | -| cancel `v3.0.10` | Custom the content of cancel button | +| Name | Description | SlotProps | +| --- | --- | --- | +| default | Custom content | +| description | Custom description above the options | +| cancel `v3.0.10` | Custom the content of cancel button | +| action `v3.4.0` | Custom the content of action | _{ action: ActionSheetAction, index: number }_ | ### Types diff --git a/packages/vant/src/action-sheet/README.zh-CN.md b/packages/vant/src/action-sheet/README.zh-CN.md index ebebe54c3..52fad6774 100644 --- a/packages/vant/src/action-sheet/README.zh-CN.md +++ b/packages/vant/src/action-sheet/README.zh-CN.md @@ -187,7 +187,7 @@ export default { | cancel-text | 取消按钮文字 | _string_ | - | | description | 选项上方的描述信息 | _string_ | - | | closeable | 是否显示关闭图标 | _boolean_ | `true` | -| close-icon | 关闭[图标名称](#/zh-CN/icon)或图片链接 | _string_ | `cross` | +| close-icon | 关闭图标名称或图片链接,等同于 Icon 组件的 [name 属性](#/zh-CN/icon#props) | _string_ | `cross` | | duration | 动画时长,单位秒,设置为 0 可以禁用动画 | _number \| string_ | `0.3` | | round | 是否显示圆角 | _boolean_ | `true` | | overlay | 是否显示遮罩层 | _boolean_ | `true` | @@ -230,11 +230,12 @@ export default { ### Slots -| 名称 | 说明 | -| ---------------- | -------------------- | -| default | 自定义面板的展示内容 | -| description | 自定义描述文案 | -| cancel `v3.0.10` | 自定义取消按钮内容 | +| 名称 | 说明 | 参数 | +| --- | --- | --- | +| default | 自定义面板的展示内容 | - | +| description | 自定义描述文案 | - | +| cancel `v3.0.10` | 自定义取消按钮内容 | - | +| action `v3.4.0` | 自定义选项内容 | _{ action: ActionSheetAction, index: number }_ | ### 类型定义 diff --git a/packages/vant/src/action-sheet/index.ts b/packages/vant/src/action-sheet/index.ts index b0c23fc69..475fe8b0d 100644 --- a/packages/vant/src/action-sheet/index.ts +++ b/packages/vant/src/action-sheet/index.ts @@ -4,3 +4,9 @@ import _ActionSheet from './ActionSheet'; export const ActionSheet = withInstall(_ActionSheet); export default ActionSheet; export type { ActionSheetProps, ActionSheetAction } from './ActionSheet'; + +declare module 'vue' { + export interface GlobalComponents { + VanActionSheet: typeof ActionSheet; + } +} diff --git a/packages/vant/src/action-sheet/test/__snapshots__/index.spec.ts.snap b/packages/vant/src/action-sheet/test/__snapshots__/index.spec.ts.snap index 4de50d3d3..242951ad3 100644 --- a/packages/vant/src/action-sheet/test/__snapshots__/index.spec.ts.snap +++ b/packages/vant/src/action-sheet/test/__snapshots__/index.spec.ts.snap @@ -5,6 +5,14 @@ exports[`should allow to custom close icon with closeIcon prop 1`] = ` `; +exports[`should render action slot correctly 1`] = ` + +`; + exports[`should render cancel slot correctly 1`] = ` - Custom title - - -`; - -exports[`time type 1`] = ` +exports[`should render time type correctly 1`] = `
`; + +exports[`should render title slot correctly 1`] = ` +
+ + Custom title + +
+`; diff --git a/packages/vant/src/datetime-picker/test/datetime-picker.spec.tsx b/packages/vant/src/datetime-picker/test/datetime-picker.spec.tsx index 929b4931c..76c0978b5 100644 --- a/packages/vant/src/datetime-picker/test/datetime-picker.spec.tsx +++ b/packages/vant/src/datetime-picker/test/datetime-picker.spec.tsx @@ -3,25 +3,29 @@ import { mount, later } from '../../../test'; import { reactive } from 'vue'; import { useExpose } from '../../composables/use-expose'; -test('confirm & cancel event', () => { +test('should emit confirm event after clicking the confirm button', () => { const onConfirm = jest.fn(); - const onCancel = jest.fn(); - const wrapper = mount(DatetimePicker, { props: { onConfirm, + }, + }); + wrapper.find('.van-picker__confirm').trigger('click'); + expect(onConfirm).toHaveBeenCalledTimes(1); +}); + +test('should emit cancel event after clicking the confirm button', () => { + const onCancel = jest.fn(); + const wrapper = mount(DatetimePicker, { + props: { onCancel, }, }); - - wrapper.find('.van-picker__confirm').trigger('click'); - expect(onConfirm).toHaveBeenCalledTimes(1); - wrapper.find('.van-picker__cancel').trigger('click'); expect(onCancel).toHaveBeenCalledTimes(1); }); -test('time type', () => { +test('should render time type correctly', () => { const wrapper = mount(DatetimePicker, { props: { type: 'time', @@ -33,7 +37,7 @@ test('time type', () => { expect(wrapper.html()).toMatchSnapshot(); }); -test('getPicker method', () => { +test('should allow to call getPicker method', () => { const wrapper = mount(DatetimePicker); expect(wrapper.vm.getPicker()).toBeTruthy(); @@ -86,3 +90,39 @@ test('should emit value correctly when dynamic change min-date', async () => { wrapper.find('.van-picker__confirm').trigger('click'); expect(wrapper.emitted<[Date]>('confirm')![0][0]).toEqual(defaultValue); }); + +test('should update value correctly after calling setColumnIndex method', async () => { + const onConfirm = jest.fn(); + const defaultDate = new Date(2020, 0, 1); + const wrapper = mount(DatetimePicker, { + props: { + type: 'date', + minDate: defaultDate, + maxDate: new Date(2020, 0, 30), + modelValue: defaultDate, + onConfirm, + }, + }); + + wrapper.vm.getPicker().setColumnIndex(2, 14); + await wrapper.find('.van-picker__confirm').trigger('click'); + expect(onConfirm.mock.calls[0]).toEqual([new Date(2020, 0, 15)]); +}); + +test('should update value correctly after calling setColumnValue method', async () => { + const onConfirm = jest.fn(); + const defaultDate = new Date(2020, 0, 1); + const wrapper = mount(DatetimePicker, { + props: { + type: 'date', + minDate: defaultDate, + maxDate: new Date(2020, 0, 30), + modelValue: defaultDate, + onConfirm, + }, + }); + + wrapper.vm.getPicker().setColumnValue(2, '15'); + await wrapper.find('.van-picker__confirm').trigger('click'); + expect(onConfirm.mock.calls[0]).toEqual([new Date(2020, 0, 15)]); +}); diff --git a/packages/vant/src/datetime-picker/utils.ts b/packages/vant/src/datetime-picker/utils.ts index ee09f1387..f6691796b 100644 --- a/packages/vant/src/datetime-picker/utils.ts +++ b/packages/vant/src/datetime-picker/utils.ts @@ -1,6 +1,7 @@ -import { PropType } from 'vue'; import { extend } from '../utils'; import { pickerSharedProps } from '../picker/Picker'; +import type { PropType } from 'vue'; +import type { PickerInstance } from '../picker'; import type { DatetimePickerColumnType } from './types'; export const sharedProps = extend({}, pickerSharedProps, { @@ -17,9 +18,13 @@ export const pickerInheritKeys = Object.keys(pickerSharedProps) as Array< >; export function times(n: number, iteratee: (index: number) => T) { - let index = -1; + if (n < 0) { + return []; + } + const result: T[] = Array(n); + let index = -1; while (++index < n) { result[index] = iteratee(index); } @@ -45,3 +50,27 @@ export function getTrueValue(value: string | undefined): number { export const getMonthEndDay = (year: number, month: number): number => 32 - new Date(year, month - 1, 32).getDate(); + +// https://github.com/youzan/vant/issues/10013 +export const proxyPickerMethods = ( + picker: PickerInstance, + callback: () => void +) => { + const methods = [ + 'setValues', + 'setIndexes', + 'setColumnIndex', + 'setColumnValue', + ]; + return new Proxy(picker, { + get: (target, prop: keyof PickerInstance) => { + if (methods.includes(prop)) { + return (...args: unknown[]) => { + target[prop](...args); + callback(); + }; + } + return target[prop]; + }, + }); +}; diff --git a/packages/vant/src/dialog/Dialog.tsx b/packages/vant/src/dialog/Dialog.tsx index 5a5ff2277..92ca35343 100644 --- a/packages/vant/src/dialog/Dialog.tsx +++ b/packages/vant/src/dialog/Dialog.tsx @@ -1,4 +1,9 @@ -import { PropType, reactive, defineComponent, ExtractPropTypes } from 'vue'; +import { + reactive, + defineComponent, + type PropType, + type ExtractPropTypes, +} from 'vue'; // Utils import { diff --git a/packages/vant/src/dialog/index.ts b/packages/vant/src/dialog/index.ts index 669422675..b3f802a87 100644 --- a/packages/vant/src/dialog/index.ts +++ b/packages/vant/src/dialog/index.ts @@ -9,3 +9,9 @@ export type { DialogOptions, DialogMessageAlign, } from './types'; + +declare module 'vue' { + export interface GlobalComponents { + VanDialog: typeof Dialog.Component; + } +} diff --git a/packages/vant/src/dialog/test/__snapshots__/funciton-call.spec.js.snap b/packages/vant/src/dialog/test/__snapshots__/funciton-call.spec.jsx.snap similarity index 100% rename from packages/vant/src/dialog/test/__snapshots__/funciton-call.spec.js.snap rename to packages/vant/src/dialog/test/__snapshots__/funciton-call.spec.jsx.snap diff --git a/packages/vant/src/dialog/test/funciton-call.spec.js b/packages/vant/src/dialog/test/funciton-call.spec.jsx similarity index 100% rename from packages/vant/src/dialog/test/funciton-call.spec.js rename to packages/vant/src/dialog/test/funciton-call.spec.jsx diff --git a/packages/vant/src/divider/Divider.tsx b/packages/vant/src/divider/Divider.tsx index cd9e96b92..73a481481 100644 --- a/packages/vant/src/divider/Divider.tsx +++ b/packages/vant/src/divider/Divider.tsx @@ -1,4 +1,4 @@ -import { defineComponent, ExtractPropTypes } from 'vue'; +import { defineComponent, type ExtractPropTypes } from 'vue'; import { truthProp, makeStringProp, createNamespace } from '../utils'; const [name, bem] = createNamespace('divider'); diff --git a/packages/vant/src/divider/index.ts b/packages/vant/src/divider/index.ts index 5cf581005..fed2987f3 100644 --- a/packages/vant/src/divider/index.ts +++ b/packages/vant/src/divider/index.ts @@ -4,3 +4,9 @@ import _Divider from './Divider'; export const Divider = withInstall(_Divider); export default Divider; export type { DividerProps, DividerContentPosition } from './Divider'; + +declare module 'vue' { + export interface GlobalComponents { + VanDivider: typeof Divider; + } +} diff --git a/packages/vant/src/dropdown-item/DropdownItem.tsx b/packages/vant/src/dropdown-item/DropdownItem.tsx index fd210535c..401720375 100644 --- a/packages/vant/src/dropdown-item/DropdownItem.tsx +++ b/packages/vant/src/dropdown-item/DropdownItem.tsx @@ -1,11 +1,11 @@ import { reactive, Teleport, - PropType, - TeleportProps, - CSSProperties, defineComponent, - ExtractPropTypes, + type PropType, + type TeleportProps, + type CSSProperties, + type ExtractPropTypes, } from 'vue'; // Utils diff --git a/packages/vant/src/dropdown-item/index.ts b/packages/vant/src/dropdown-item/index.ts index 41973bb12..aa0e04e73 100644 --- a/packages/vant/src/dropdown-item/index.ts +++ b/packages/vant/src/dropdown-item/index.ts @@ -5,3 +5,9 @@ export const DropdownItem = withInstall(_DropdownItem); export default DropdownItem; export type { DropdownItemProps }; export type { DropdownItemInstance, DropdownItemOption } from './types'; + +declare module 'vue' { + export interface GlobalComponents { + VanDropdownItem: typeof DropdownItem; + } +} diff --git a/packages/vant/src/dropdown-menu/DropdownMenu.tsx b/packages/vant/src/dropdown-menu/DropdownMenu.tsx index a671c82f3..8c3ac70a6 100644 --- a/packages/vant/src/dropdown-menu/DropdownMenu.tsx +++ b/packages/vant/src/dropdown-menu/DropdownMenu.tsx @@ -1,10 +1,10 @@ import { ref, computed, - InjectionKey, - CSSProperties, defineComponent, - ExtractPropTypes, + type InjectionKey, + type CSSProperties, + type ExtractPropTypes, } from 'vue'; // Utils @@ -17,7 +17,7 @@ import { makeNumericProp, createNamespace, HAPTICS_FEEDBACK, - ComponentInstance, + type ComponentInstance, } from '../utils'; // Composables diff --git a/packages/vant/src/dropdown-menu/README.zh-CN.md b/packages/vant/src/dropdown-menu/README.zh-CN.md index ee19f252e..9d9a72663 100644 --- a/packages/vant/src/dropdown-menu/README.zh-CN.md +++ b/packages/vant/src/dropdown-menu/README.zh-CN.md @@ -222,11 +222,11 @@ dropdownItemRef.value?.toggle(); ### Option 数据结构 -| 键名 | 说明 | 类型 | -| ----- | -------------------------------------- | ------------------ | -| text | 文字 | _string_ | -| value | 标识符 | _number \| string_ | -| icon | 左侧[图标名称](#/zh-CN/icon)或图片链接 | _string_ | +| 键名 | 说明 | 类型 | +| --- | --- | --- | +| text | 文字 | _string_ | +| value | 标识符 | _number \| string_ | +| icon | 左侧图标名称或图片链接,等同于 Icon 组件的 [name 属性](#/zh-CN/icon#props) | _string_ | ## 主题定制 diff --git a/packages/vant/src/dropdown-menu/index.ts b/packages/vant/src/dropdown-menu/index.ts index fa60bd0af..eba4c8090 100644 --- a/packages/vant/src/dropdown-menu/index.ts +++ b/packages/vant/src/dropdown-menu/index.ts @@ -5,3 +5,9 @@ export const DropdownMenu = withInstall(_DropdownMenu); export default DropdownMenu; export type { DropdownMenuProps }; export type { DropdownMenuDirection } from './types'; + +declare module 'vue' { + export interface GlobalComponents { + VanDropdownMenu: typeof DropdownMenu; + } +} diff --git a/packages/vant/src/empty/Empty.tsx b/packages/vant/src/empty/Empty.tsx index 31c600c7a..94e5bc18c 100644 --- a/packages/vant/src/empty/Empty.tsx +++ b/packages/vant/src/empty/Empty.tsx @@ -1,4 +1,4 @@ -import { defineComponent, ExtractPropTypes } from 'vue'; +import { defineComponent, type ExtractPropTypes } from 'vue'; import { numericProp, getSizeStyle, diff --git a/packages/vant/src/empty/index.ts b/packages/vant/src/empty/index.ts index bd5d4df92..1684d98b0 100644 --- a/packages/vant/src/empty/index.ts +++ b/packages/vant/src/empty/index.ts @@ -4,3 +4,9 @@ import _Empty from './Empty'; export const Empty = withInstall(_Empty); export default Empty; export type { EmptyProps } from './Empty'; + +declare module 'vue' { + export interface GlobalComponents { + VanEmpty: typeof Empty; + } +} diff --git a/packages/vant/src/empty/test/__snapshots__/demo.spec.ts.snap b/packages/vant/src/empty/test/__snapshots__/demo.spec.ts.snap index 2d0f870be..d55e14031 100644 --- a/packages/vant/src/empty/test/__snapshots__/demo.spec.ts.snap +++ b/packages/vant/src/empty/test/__snapshots__/demo.spec.ts.snap @@ -20,7 +20,7 @@ exports[`should render demo and match snapshot 1`] = ` >