From 89aa5f23fe5df19f3aed16d3994d4ee2e96e8af7 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Tue, 12 May 2020 15:06:57 +0800 Subject: [PATCH 0001/1014] build: initial commit with license --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..15f1f7e7a4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. From fe9eac10bb57931efd2e32d54f9a8eef326cae08 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Tue, 12 May 2020 15:07:15 +0800 Subject: [PATCH 0002/1014] build: prototype --- .commitlintrc.js | 11 + .editorconfig | 13 + .eslintignore | 6 + .eslintrc.js | 28 + .gitattributes | 11 + .github/ISSUE_TEMPLATE/bug_report.md | 50 + .github/ISSUE_TEMPLATE/feature_request.md | 23 + .github/PULL_REQUEST_TEMPLATE.md | 40 + .github/lock.yml | 37 + .github/stale.yml | 58 + .gitignore | 20 + .vscode/settings.json | 35 + README.md | 37 + jest.config.js | 37 + lerna.json | 14 + package.json | 57 + .../@vuepress/bundler-webpack/package.json | 42 + .../bundler-webpack/src/build/build.ts | 42 + .../bundler-webpack/src/build/index.ts | 1 + .../src/config/base/createBaseConfig.ts | 51 + .../src/config/base/handleDevtool.ts | 11 + .../src/config/base/handleMode.ts | 9 + .../src/config/base/handleModule.ts | 27 + .../src/config/base/handleModuleAssets.ts | 54 + .../src/config/base/handleModulePug.ts | 12 + .../src/config/base/handleModuleVue.ts | 49 + .../src/config/base/handleOutput.ts | 16 + .../src/config/base/handlePlugins.ts | 16 + .../src/config/base/handleResolve.ts | 17 + .../bundler-webpack/src/config/base/index.ts | 1 + .../src/config/createClientConfig.ts | 28 + .../src/config/createServerConfig.ts | 31 + .../bundler-webpack/src/config/index.ts | 3 + .../src/dev/createDevConfig.ts | 18 + .../src/dev/createDevServer.ts | 11 + .../src/dev/createDevServerConfig.ts | 60 + .../@vuepress/bundler-webpack/src/dev/dev.ts | 42 + .../bundler-webpack/src/dev/index.ts | 5 + .../bundler-webpack/src/dev/resolvePort.ts | 5 + .../@vuepress/bundler-webpack/src/index.ts | 10 + .../@vuepress/bundler-webpack/tsconfig.json | 9 + packages/@vuepress/cli/package.json | 35 + packages/@vuepress/cli/src/index.ts | 0 packages/@vuepress/cli/tsconfig.json | 13 + packages/@vuepress/client/package.json | 34 + packages/@vuepress/client/src/client.ts | 12 + .../client/src/components/Content.ts | 29 + .../client/src/components/Vuepress.ts | 41 + .../@vuepress/client/src/components/index.ts | 2 + packages/@vuepress/client/src/createVueApp.ts | 66 + packages/@vuepress/client/src/index.ts | 1 + .../@vuepress/client/src/injections/index.ts | 2 + .../client/src/injections/pageData.ts | 34 + .../client/src/injections/siteData.ts | 9 + .../@vuepress/client/src/internal/index.ts | 4 + .../client/src/internal/layoutComponents.d.ts | 5 + .../client/src/internal/pageComponents.d.ts | 5 + .../@vuepress/client/src/internal/routes.d.ts | 5 + .../client/src/internal/siteData.d.ts | 7 + packages/@vuepress/client/src/server.ts | 31 + .../@vuepress/client/templates/index.dev.html | 11 + .../@vuepress/client/templates/index.ssr.html | 17 + packages/@vuepress/client/tsconfig.json | 14 + packages/@vuepress/core/package.json | 40 + packages/@vuepress/core/src/app/appInit.ts | 46 + packages/@vuepress/core/src/app/appPrepare.ts | 18 + packages/@vuepress/core/src/app/appUse.ts | 41 + .../@vuepress/core/src/app/appUseByConfig.ts | 22 + packages/@vuepress/core/src/app/createApp.ts | 63 + .../core/src/app/createAppBundler.ts | 15 + .../@vuepress/core/src/app/createAppDir.ts | 45 + .../@vuepress/core/src/app/createAppEnv.ts | 21 + .../core/src/app/createAppMarkdown.ts | 22 + .../core/src/app/createAppOptions.ts | 45 + .../@vuepress/core/src/app/createAppPages.ts | 25 + .../core/src/app/createAppWriteTemp.ts | 42 + .../core/src/app/createClientData.ts | 35 + packages/@vuepress/core/src/app/index.ts | 17 + .../@vuepress/core/src/app/normalizePlugin.ts | 29 + .../core/src/app/normalizePluginConfig.ts | 24 + .../core/src/app/resolvePluginByName.ts | 21 + packages/@vuepress/core/src/app/types.ts | 105 + packages/@vuepress/core/src/index.ts | 5 + .../@vuepress/core/src/page/createPage.ts | 174 + packages/@vuepress/core/src/page/index.ts | 1 + .../@vuepress/core/src/page/inferPagePath.ts | 16 + .../core/src/page/resolveFileContent.ts | 14 + .../core/src/page/resolveFilePath.ts | 39 + .../core/src/page/resolvePageContent.ts | 24 + .../core/src/page/resolvePageDate.ts | 37 + .../core/src/page/resolvePageExcerpt.ts | 15 + .../core/src/page/resolvePageHeaders.ts | 13 + .../@vuepress/core/src/page/resolvePageKey.ts | 4 + .../core/src/page/resolvePagePath.ts | 17 + .../core/src/page/resolvePagePermalink.ts | 34 + .../core/src/page/resolvePageSlug.ts | 14 + .../core/src/page/resolvePageTitle.ts | 15 + packages/@vuepress/core/src/page/utils.ts | 0 .../core/src/plugin-api/createPluginApi.ts | 66 + .../plugin-api/createPluginApiApplyOption.ts | 21 + .../src/plugin-api/createPluginApiOptions.ts | 33 + .../src/plugin-api/createPluginApiPlugins.ts | 7 + .../createPluginApiRegisterOptions.ts | 71 + .../core/src/plugin-api/createPluginApiUse.ts | 12 + .../@vuepress/core/src/plugin-api/index.ts | 7 + .../src/plugin-api/options/createOption.ts | 56 + .../core/src/plugin-api/options/index.ts | 5 + .../options/normalizeOptionAlias.ts | 14 + .../normalizeOptionClientDynamicModules.ts | 30 + .../options/normalizeOptionDefine.ts | 17 + .../core/src/plugin-api/options/types.ts | 69 + packages/@vuepress/core/src/plugins/index.ts | 4 + .../src/plugins/layoutComponentsPlugin.ts | 29 + .../core/src/plugins/pageComponentsPlugin.ts | 28 + .../core/src/plugins/routesPlugin.ts | 65 + .../core/src/plugins/siteDataPlugin.ts | 17 + .../core/src/theme-api/createThemeApi.ts | 48 + .../@vuepress/core/src/theme-api/index.ts | 1 + .../core/src/theme-api/resolveThemeInfo.ts | 43 + .../core/src/theme-api/resolveThemeLayouts.ts | 30 + packages/@vuepress/core/tsconfig.json | 9 + packages/@vuepress/theme-default/package.json | 30 + packages/@vuepress/theme-default/src/index.ts | 1 + packages/@vuepress/theme-default/src/types.ts | 5 + .../@vuepress/theme-default/tsconfig.json | 8 + packages/@vuepress/theme-vue/package.json | 33 + packages/@vuepress/theme-vue/src/index.ts | 0 packages/@vuepress/theme-vue/tsconfig.json | 9 + .../__tests__/normalizeSeparator.spec.ts | 11 + .../preprocessMarkdownContent.spec.ts | 177 + .../__tests__/preprocessVueContent.spec.ts | 60 + packages/@vuepress/utils/package.json | 40 + packages/@vuepress/utils/src/index.ts | 10 + .../@vuepress/utils/src/normalizeSeparator.ts | 7 + .../utils/src/preprocessMarkdownContent.ts | 32 + .../utils/src/preprocessVueContent.ts | 23 + packages/@vuepress/utils/tsconfig.json | 8 + packages/docs/package.json | 9 + packages/docs/src/README.md | 5 + packages/vuepress/package.json | 39 + packages/vuepress/src/index.ts | 0 packages/vuepress/tsconfig.json | 16 + playground/.gitignore | 2 + playground/build.ts | 53 + playground/dev.ts | 59 + playground/package.json | 13 + playground/src/.vuepress/public/logo.png | Bin 0 -> 153793 bytes .../src/.vuepress/theme/assets/logo.png | Bin 0 -> 153793 bytes .../src/.vuepress/theme/components/Logo.vue | 7 + playground/src/.vuepress/theme/index.ts | 7 + .../src/.vuepress/theme/layouts/Layout.vue | 17 + playground/src/.vuepress/theme/shims-vue.d.ts | 4 + playground/src/README.md | 12 + playground/src/about/README.md | 27 + playground/test-plugin.js | 11 + tsconfig.base.json | 19 + tsconfig.json | 14 + yarn.lock | 11419 ++++++++++++++++ 158 files changed, 15391 insertions(+) create mode 100644 .commitlintrc.js create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitattributes create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/lock.yml create mode 100644 .github/stale.yml create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 jest.config.js create mode 100644 lerna.json create mode 100644 package.json create mode 100644 packages/@vuepress/bundler-webpack/package.json create mode 100644 packages/@vuepress/bundler-webpack/src/build/build.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/index.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/createBaseConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleModuleAssets.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleModulePug.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/base/index.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/index.ts create mode 100644 packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/dev/createDevServer.ts create mode 100644 packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/dev/dev.ts create mode 100644 packages/@vuepress/bundler-webpack/src/dev/index.ts create mode 100644 packages/@vuepress/bundler-webpack/src/dev/resolvePort.ts create mode 100644 packages/@vuepress/bundler-webpack/src/index.ts create mode 100644 packages/@vuepress/bundler-webpack/tsconfig.json create mode 100644 packages/@vuepress/cli/package.json create mode 100644 packages/@vuepress/cli/src/index.ts create mode 100644 packages/@vuepress/cli/tsconfig.json create mode 100644 packages/@vuepress/client/package.json create mode 100644 packages/@vuepress/client/src/client.ts create mode 100644 packages/@vuepress/client/src/components/Content.ts create mode 100644 packages/@vuepress/client/src/components/Vuepress.ts create mode 100644 packages/@vuepress/client/src/components/index.ts create mode 100644 packages/@vuepress/client/src/createVueApp.ts create mode 100644 packages/@vuepress/client/src/index.ts create mode 100644 packages/@vuepress/client/src/injections/index.ts create mode 100644 packages/@vuepress/client/src/injections/pageData.ts create mode 100644 packages/@vuepress/client/src/injections/siteData.ts create mode 100644 packages/@vuepress/client/src/internal/index.ts create mode 100644 packages/@vuepress/client/src/internal/layoutComponents.d.ts create mode 100644 packages/@vuepress/client/src/internal/pageComponents.d.ts create mode 100644 packages/@vuepress/client/src/internal/routes.d.ts create mode 100644 packages/@vuepress/client/src/internal/siteData.d.ts create mode 100644 packages/@vuepress/client/src/server.ts create mode 100644 packages/@vuepress/client/templates/index.dev.html create mode 100644 packages/@vuepress/client/templates/index.ssr.html create mode 100644 packages/@vuepress/client/tsconfig.json create mode 100644 packages/@vuepress/core/package.json create mode 100644 packages/@vuepress/core/src/app/appInit.ts create mode 100644 packages/@vuepress/core/src/app/appPrepare.ts create mode 100644 packages/@vuepress/core/src/app/appUse.ts create mode 100644 packages/@vuepress/core/src/app/appUseByConfig.ts create mode 100644 packages/@vuepress/core/src/app/createApp.ts create mode 100644 packages/@vuepress/core/src/app/createAppBundler.ts create mode 100644 packages/@vuepress/core/src/app/createAppDir.ts create mode 100644 packages/@vuepress/core/src/app/createAppEnv.ts create mode 100644 packages/@vuepress/core/src/app/createAppMarkdown.ts create mode 100644 packages/@vuepress/core/src/app/createAppOptions.ts create mode 100644 packages/@vuepress/core/src/app/createAppPages.ts create mode 100644 packages/@vuepress/core/src/app/createAppWriteTemp.ts create mode 100644 packages/@vuepress/core/src/app/createClientData.ts create mode 100644 packages/@vuepress/core/src/app/index.ts create mode 100644 packages/@vuepress/core/src/app/normalizePlugin.ts create mode 100644 packages/@vuepress/core/src/app/normalizePluginConfig.ts create mode 100644 packages/@vuepress/core/src/app/resolvePluginByName.ts create mode 100644 packages/@vuepress/core/src/app/types.ts create mode 100644 packages/@vuepress/core/src/index.ts create mode 100644 packages/@vuepress/core/src/page/createPage.ts create mode 100644 packages/@vuepress/core/src/page/index.ts create mode 100644 packages/@vuepress/core/src/page/inferPagePath.ts create mode 100644 packages/@vuepress/core/src/page/resolveFileContent.ts create mode 100644 packages/@vuepress/core/src/page/resolveFilePath.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageContent.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageDate.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageExcerpt.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageHeaders.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageKey.ts create mode 100644 packages/@vuepress/core/src/page/resolvePagePath.ts create mode 100644 packages/@vuepress/core/src/page/resolvePagePermalink.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageSlug.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageTitle.ts create mode 100644 packages/@vuepress/core/src/page/utils.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApi.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiApplyOption.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiOptions.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiPlugins.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiRegisterOptions.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiUse.ts create mode 100644 packages/@vuepress/core/src/plugin-api/index.ts create mode 100644 packages/@vuepress/core/src/plugin-api/options/createOption.ts create mode 100644 packages/@vuepress/core/src/plugin-api/options/index.ts create mode 100644 packages/@vuepress/core/src/plugin-api/options/normalizeOptionAlias.ts create mode 100644 packages/@vuepress/core/src/plugin-api/options/normalizeOptionClientDynamicModules.ts create mode 100644 packages/@vuepress/core/src/plugin-api/options/normalizeOptionDefine.ts create mode 100644 packages/@vuepress/core/src/plugin-api/options/types.ts create mode 100644 packages/@vuepress/core/src/plugins/index.ts create mode 100644 packages/@vuepress/core/src/plugins/layoutComponentsPlugin.ts create mode 100644 packages/@vuepress/core/src/plugins/pageComponentsPlugin.ts create mode 100644 packages/@vuepress/core/src/plugins/routesPlugin.ts create mode 100644 packages/@vuepress/core/src/plugins/siteDataPlugin.ts create mode 100644 packages/@vuepress/core/src/theme-api/createThemeApi.ts create mode 100644 packages/@vuepress/core/src/theme-api/index.ts create mode 100644 packages/@vuepress/core/src/theme-api/resolveThemeInfo.ts create mode 100644 packages/@vuepress/core/src/theme-api/resolveThemeLayouts.ts create mode 100644 packages/@vuepress/core/tsconfig.json create mode 100644 packages/@vuepress/theme-default/package.json create mode 100644 packages/@vuepress/theme-default/src/index.ts create mode 100644 packages/@vuepress/theme-default/src/types.ts create mode 100644 packages/@vuepress/theme-default/tsconfig.json create mode 100644 packages/@vuepress/theme-vue/package.json create mode 100644 packages/@vuepress/theme-vue/src/index.ts create mode 100644 packages/@vuepress/theme-vue/tsconfig.json create mode 100644 packages/@vuepress/utils/__tests__/normalizeSeparator.spec.ts create mode 100644 packages/@vuepress/utils/__tests__/preprocessMarkdownContent.spec.ts create mode 100644 packages/@vuepress/utils/__tests__/preprocessVueContent.spec.ts create mode 100644 packages/@vuepress/utils/package.json create mode 100644 packages/@vuepress/utils/src/index.ts create mode 100644 packages/@vuepress/utils/src/normalizeSeparator.ts create mode 100644 packages/@vuepress/utils/src/preprocessMarkdownContent.ts create mode 100644 packages/@vuepress/utils/src/preprocessVueContent.ts create mode 100644 packages/@vuepress/utils/tsconfig.json create mode 100644 packages/docs/package.json create mode 100644 packages/docs/src/README.md create mode 100644 packages/vuepress/package.json create mode 100644 packages/vuepress/src/index.ts create mode 100644 packages/vuepress/tsconfig.json create mode 100644 playground/.gitignore create mode 100644 playground/build.ts create mode 100644 playground/dev.ts create mode 100644 playground/package.json create mode 100644 playground/src/.vuepress/public/logo.png create mode 100644 playground/src/.vuepress/theme/assets/logo.png create mode 100644 playground/src/.vuepress/theme/components/Logo.vue create mode 100644 playground/src/.vuepress/theme/index.ts create mode 100644 playground/src/.vuepress/theme/layouts/Layout.vue create mode 100644 playground/src/.vuepress/theme/shims-vue.d.ts create mode 100644 playground/src/README.md create mode 100644 playground/src/about/README.md create mode 100644 playground/test-plugin.js create mode 100644 tsconfig.base.json create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.commitlintrc.js b/.commitlintrc.js new file mode 100644 index 0000000000..36ab0e1bd8 --- /dev/null +++ b/.commitlintrc.js @@ -0,0 +1,11 @@ +const fs = require('fs') +const path = require('path') + +const packages = fs.readdirSync(path.resolve(__dirname, 'packages/@vuepress')) + +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + 'scope-enum': [2, 'always', ['vuepress', ...packages]], + }, +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..5d12634847 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..a370e7cf24 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,6 @@ +node_modules/ +!.vuepress/ +!.eslintrc.js +!.commitlintrc.js +lib/ +dist/ diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..32431c5b92 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,28 @@ +module.exports = { + root: true, + extends: 'vuepress', + overrides: [ + { + files: ['*.ts'], + extends: 'vuepress-typescript', + rules: { + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/no-var-requires': 'off', + }, + }, + { + files: ['**/__tests__/**/*.ts'], + env: { + jest: true, + }, + rules: { + '@typescript-eslint/explicit-function-return-type': 'off', + }, + }, + ], + + rules: { + // TODO: disable for vue 3 Fragment feature + 'vue/valid-template-root': 'off', + }, +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..61dc5666c3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto + +*.txt text eol=crlf + +*.png binary +*.jpg binary +*.jpeg binary +*.ico binary +*.tff binary +*.woff binary +*.woff2 binary diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..6ee7332a57 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,50 @@ +--- +name: Bug report +about: Create a bug report to help us improve +title: '[Bug Report] ' +labels: '' +assignees: '' +--- + +## Environment + + + + + +- VuePress version: +- OS: +- Browser: + +## Describe the bug + + + +## Steps To Reproduce + + + + + +## Screenshots + + + +## Expected behavior + + + +## Additional context + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..05f6ad9333 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,23 @@ +--- +name: Feature request +about: Suggest an idea +title: '[Feature Request] ' +labels: '' +assignees: '' +--- + +## What problem does the feature solve? + + + +## Proposed solution + + + +## Alternative solutions + + + +## Additional context + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..79dfe8267d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,40 @@ + + + + + +**Summary** + + + + + + + +**What kind of change does this PR introduce?** (check at least one) + +- [ ] Bug fix (fix) +- [ ] Feature (feat) +- [ ] Performance enhancement (perf) +- [ ] Code Style (style) +- [ ] Refactor (refactor) +- [ ] Docs (docs) +- [ ] Build-related changes (build) +- [ ] CI-related changes (ci) +- [ ] Testing (test) +- [ ] Other, please describe: + +**Does this PR introduce a breaking change?** (check one) + +- [ ] Yes +- [ ] No + +If yes, please describe the impact and migration path for existing applications: + +**The PR fulfills these requirements** + +- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number) + +**Other information** + + diff --git a/.github/lock.yml b/.github/lock.yml new file mode 100644 index 0000000000..26fb7c9287 --- /dev/null +++ b/.github/lock.yml @@ -0,0 +1,37 @@ +# Configuration for Lock Threads - https://github.com/dessant/lock-threads + +# Number of days of inactivity before a closed issue or pull request is locked +daysUntilLock: 120 + +# Skip issues and pull requests created before a given timestamp. Timestamp must +# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable +skipCreatedBefore: false + +# Issues and pull requests with these labels will be ignored. Set to `[]` to disable +exemptLabels: [] + +# Label to add before locking, such as `outdated`. Set to `false` to disable +lockLabel: false + +# Comment to post before locking. Set to `false` to disable +lockComment: > + This thread has been automatically locked since there has not been + any recent activity after it was closed. Please open a new issue for + related bugs. + +# Assign `resolved` as the reason for locking. Set to `false` to disable +setLockReason: true +# Limit to only `issues` or `pulls` +# only: issues + +# Optionally, specify configuration settings just for `issues` or `pulls` +# issues: +# exemptLabels: +# - help-wanted +# lockLabel: outdated + +# pulls: +# daysUntilLock: 30 + +# Repository to extend settings from +# _extends: repo diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000000..76fb52db25 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,58 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 60 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 7 + +# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) +onlyLabels: [] + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - bug + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: false + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: false + +# Set to true to ignore issues with an assignee (defaults to false) +exemptAssignees: false + +# Label to use when marking as stale +staleLabel: stale + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. + +# Comment to post when removing the stale label. +# unmarkComment: > +# Your comment here. + +# Comment to post when closing a stale Issue or Pull Request. +# closeComment: > +# Your comment here. + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 +# Limit to only `issues` or `pulls` +# only: issues + +# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': +# pulls: +# daysUntilStale: 30 +# markComment: > +# This pull request has been automatically marked as stale because it has not had +# recent activity. It will be closed if no further activity occurs. Thank you +# for your contributions. + +# issues: +# exemptLabels: +# - confirmed diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..12c3cc84ac --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Temp files +.temp/ + +# Dist files +lib/ + +# Test coverage files +coverage/ + +# Node modules +node_modules/ + +# MacOS Desktop Services Store +.DS_Store + +# Log files +*.log + +# Typescript build info +*.tsbuildinfo diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..4b58261d46 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,35 @@ +{ + "editor.insertSpaces": true, + "editor.tabSize": 2, + "files.encoding": "utf8", + "files.eol": "\n", + "files.trimFinalNewlines": true, + "files.trimTrailingWhitespace": true, + "[markdown]": { + "files.trimTrailingWhitespace": false + }, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue" + ], + "vetur.validation.template": false, + "cSpell.words": [ + "devtool", + "frontmatter", + "globby", + "mathjax", + "mergeable", + "netlify", + "nprogress", + "prefetch", + "preload", + "redirector", + "redirectors", + "serializers", + "vuepress", + "zoomable" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000000..12c210e595 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +# vuepress-next + +> With the power of Vue 3.0 and TypeScript + +## Status: Prototype + +Lots of functions are not completed. Just for preview. + +It won't enter alpha stage before the upstream packages (e.g. vue, vue-router, etc) release a stable version. + +### TODO + +- [x] Plugin API +- [ ] Theme API +- [ ] Style processors +- [ ] Palette system +- [ ] Default theme +- [ ] Pre-render (SSR build) +- [ ] Watch & Reload +- [ ] CLI +- [ ] Official plugins +- [ ] ... + +## Develop & Preview + +```sh +# install +yarn + +# build with --watch +yarn dev +# build +yarn build + +# run playground script +yarn play +``` diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000000..47d356f385 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,37 @@ +const { resolve } = require('path') +const { readdirSync } = require('fs') + +const packagesDir = 'packages/@vuepress' +const packages = readdirSync(resolve(__dirname, packagesDir), { + withFileTypes: true, +}) + .filter((item) => item.isDirectory()) + .map(({ name }) => name) + +module.exports = { + rootDir: resolve(__dirname), + testEnvironment: 'node', + preset: 'ts-jest', + globals: { + 'ts-jest': { + tsConfig: '/tsconfig.json', + }, + }, + moduleNameMapper: { + [`^@vuepress/(${packages.join('|')})$`]: `/${packagesDir}/$1/src`, + // TODO: map temp files in client unit tests + [`^@internal/(.*)$`]: `/packages/@vuepress/client/.temp/internal/$1`, + }, + testMatch: ['/packages/**/__tests__/**/*.spec.ts'], + testPathIgnorePatterns: ['/node_modules/'], + snapshotSerializers: [require.resolve('jest-serializer-vue')], + + // coverage config + collectCoverageFrom: [ + '/packages/**/src/**/*.ts', + // TODO: map temp files in client unit tests + '!/packages/@vuepress/client/**/*.ts', + '!**/*.d.ts', + ], + coverageDirectory: 'coverage', +} diff --git a/lerna.json b/lerna.json new file mode 100644 index 0000000000..f88e2a3e5f --- /dev/null +++ b/lerna.json @@ -0,0 +1,14 @@ +{ + "npmClient": "yarn", + "useWorkspaces": true, + "version": "2.0.0-alpha.0", + "command": { + "version": { + "allowBranch": "master", + "conventionalCommits": true, + "exact": true, + "ignoreChanges": ["**/*.md", "packages/docs/*"], + "message": "build: publish" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..b80973f23a --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "private": true, + "workspaces": [ + "playground", + "packages/docs", + "packages/@vuepress/*" + ], + "scripts": { + "build": "tsc --build", + "build:docs": "yarn workspace docs build", + "clean": "lerna run clean --stream --ignore docs", + "dev": "tsc --build --watch", + "dev:docs": "yarn workspace docs dev", + "lint": "lerna run lint --stream", + "play": "yarn workspace playground dev", + "play:build": "yarn workspace playground build", + "release": "yarn lint && yarn clean && yarn build && yarn test && lerna publish", + "test": "jest --runInBand" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "lint-staged": { + "*.{js,ts,vue}": [ + "eslint --fix" + ], + "*.{json,md,yml}": [ + "prettier --write" + ], + "package.json": [ + "sort-package-json" + ] + }, + "prettier": "prettier-config-vuepress", + "devDependencies": { + "@commitlint/cli": "^8.3.5", + "@commitlint/config-conventional": "^8.3.4", + "@types/jest": "^25.2.1", + "eslint": "^6.4.0", + "eslint-config-vuepress": "^2.2.0", + "eslint-config-vuepress-typescript": "^1.1.4", + "husky": "^4.2.5", + "jest": "^25.1.0", + "jest-serializer-vue": "^2.0.2", + "lerna": "^3.20.2", + "lint-staged": "^10.2.2", + "prettier": "^2.0.5", + "prettier-config-vuepress": "^1.0.0", + "rimraf": "^3.0.2", + "sort-package-json": "^1.42.2", + "ts-jest": "^25.5.1", + "typescript": "^3.8.3" + } +} diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json new file mode 100644 index 0000000000..0aecba434b --- /dev/null +++ b/packages/@vuepress/bundler-webpack/package.json @@ -0,0 +1,42 @@ +{ + "name": "@vuepress/bundler-webpack", + "version": "2.0.0-alpha.0", + "description": "Bundler webpack package of VuePress", + "keywords": [ + "vuepress", + "bundler", + "webpack" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + }, + "dependencies": { + "@types/webpack-dev-server": "^3.10.1", + "@vuepress/core": "2.0.0-alpha.0", + "@vuepress/markdown-loader": "^1.5.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "4.3.0", + "portfinder": "^1.0.26", + "url-loader": "^4.1.0", + "vue-loader": "16.0.0-beta.2", + "webpack": "^4.43.0", + "webpack-dev-server": "^3.10.3" + } +} diff --git a/packages/@vuepress/bundler-webpack/src/build/build.ts b/packages/@vuepress/bundler-webpack/src/build/build.ts new file mode 100644 index 0000000000..94f364afcd --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/build.ts @@ -0,0 +1,42 @@ +import * as webpack from 'webpack' +import { App } from '@vuepress/core' +import { fs } from '@vuepress/utils' +import { createClientConfig, createServerConfig } from '../config' + +export const build = async (app: App): Promise => { + // initialize app + await app.init() + + // create webpack config + const clientConfig = createClientConfig(app).toConfig() + const serverConfig = createServerConfig(app).toConfig() + + // prepare app + await app.prepare() + + // empty dest directory + await fs.emptyDir(app.dir.dest()) + + // TODO + + await new Promise((resolve, reject) => { + webpack([clientConfig, serverConfig], (err, stats) => { + if (err) { + reject(err) + } else if (stats.hasErrors()) { + stats.toJson().errors.forEach((err) => { + console.error(err) + }) + reject(new Error('Failed to compile with errors')) + } else { + if (stats.hasWarnings()) { + stats.toJson().warnings.forEach((warning) => { + console.warn(warning) + }) + } + + resolve() + } + }) + }) +} diff --git a/packages/@vuepress/bundler-webpack/src/build/index.ts b/packages/@vuepress/bundler-webpack/src/build/index.ts new file mode 100644 index 0000000000..51767a1772 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/index.ts @@ -0,0 +1 @@ +export * from './build' diff --git a/packages/@vuepress/bundler-webpack/src/config/base/createBaseConfig.ts b/packages/@vuepress/bundler-webpack/src/config/base/createBaseConfig.ts new file mode 100644 index 0000000000..3cbf49da68 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/createBaseConfig.ts @@ -0,0 +1,51 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' +import { handleDevtool } from './handleDevtool' +import { handleMode } from './handleMode' +import { handleModule } from './handleModule' +import { handleOutput } from './handleOutput' +import { handleResolve } from './handleResolve' +import { handlePlugins } from './handlePlugins' + +export const createBaseConfig = (app: App): Config => { + // create new webpack-chain config + const config = new Config() + + /** + * mode + */ + handleMode(config, app) + + /** + * output + */ + handleOutput(config, app) + + /** + * devtool + */ + handleDevtool(config, app) + + /** + * resolve + */ + handleResolve(config, app) + + /** + * module + */ + handleModule(config, app) + + /** + * plugins + */ + handlePlugins(config) + + // apply plugin option: alias + app.pluginApi.applyOption('alias', config) + + // apply plugin option: define + app.pluginApi.applyOption('define', config) + + return config +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts new file mode 100644 index 0000000000..82f6eef43f --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts @@ -0,0 +1,11 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' + +/** + * Set webpack devtool + */ +export const handleDevtool = (config: Config, app: App): void => { + config.devtool( + app.env.isDebug ? 'source-map' : 'cheap-module-eval-source-map' + ) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts new file mode 100644 index 0000000000..ce920956e7 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts @@ -0,0 +1,9 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' + +/** + * Set webpack mode + */ +export const handleMode = (config: Config, app: App): void => { + config.mode(app.env.isProd ? 'production' : 'development') +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts new file mode 100644 index 0000000000..040494637c --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts @@ -0,0 +1,27 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' +import { handleModuleAssets } from './handleModuleAssets' +import { handleModulePug } from './handleModulePug' +import { handleModuleVue } from './handleModuleVue' + +/** + * Set webpack module + */ +export const handleModule = (config: Config, app: App): void => { + // noParse + config.module.noParse( + /(^(vue|vue-router|vuex|vuex-router-sync)$)|(^@vue\/[^/]*$)/ + ) + + // vue & markdown files + handleModuleVue(config, app) + + // pug files, for templates + handleModulePug(config) + + // images & media & fonts + handleModuleAssets(config) + + // TODO: scripts, evergreen, babel, ts + // TODO: styles +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModuleAssets.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleModuleAssets.ts new file mode 100644 index 0000000000..d4b0027b26 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleModuleAssets.ts @@ -0,0 +1,54 @@ +import * as Config from 'webpack-chain' + +/** + * Set webpack config to handle assets files + */ +export const handleModuleAssets = ( + config: Config, + inlineLimit = 10000 +): void => { + // images + config.module + .rule('images') + .test(/\.(png|jpe?g|gif)(\?.*)?$/) + .use('url-loader') + .loader('url-loader') + .options({ + limit: inlineLimit, + name: `assets/img/[name].[hash:8].[ext]`, + }) + + // svg + // do not base64-inline SVGs. + // https://github.com/facebookincubator/create-react-app/pull/1180 + config.module + .rule('svg') + .test(/\.(svg)(\?.*)?$/) + .use('file-loader') + .loader('file-loader') + .options({ + name: `assets/img/[name].[hash:8].[ext]`, + }) + + // media + config.module + .rule('media') + .test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/) + .use('url-loader') + .loader('url-loader') + .options({ + limit: inlineLimit, + name: `assets/media/[name].[hash:8].[ext]`, + }) + + // fonts + config.module + .rule('fonts') + .test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i) + .use('url-loader') + .loader('url-loader') + .options({ + limit: inlineLimit, + name: `assets/fonts/[name].[hash:8].[ext]`, + }) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModulePug.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleModulePug.ts new file mode 100644 index 0000000000..28a9a0d7f1 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleModulePug.ts @@ -0,0 +1,12 @@ +import * as Config from 'webpack-chain' + +/** + * Set webpack module to handle pug files + */ +export const handleModulePug = (config: Config): void => { + config.module + .rule('pug') + .test(/\.pug$/) + .use('pug-plain-loader') + .loader('pug-plain-loader') +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts new file mode 100644 index 0000000000..df3f853196 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts @@ -0,0 +1,49 @@ +import * as Config from 'webpack-chain' +import { VueLoaderPlugin } from 'vue-loader' +import { App } from '@vuepress/core' + +const applyVuePipeline = (rule: Config.Rule): void => { + // rule + // .use('cache-loader') + // .loader('cache-loader') + // .options({ + // cacheDirectory, + // cacheIdentifier: finalCacheIdentifier, + // }) + + rule + .use('vue-loader') + .loader('vue-loader') + .options({ + compilerOptions: { + preserveWhitespace: true, + }, + // cacheDirectory, + // cacheIdentifier: finalCacheIdentifier, + }) +} + +/** + * Set webpack module to handle vue files + */ +export const handleModuleVue = (config: Config, app: App): void => { + // .vue files + const vueRule = config.module.rule('vue').test(/\.vue$/) + applyVuePipeline(vueRule) + + // .md files + const mdRule = config.module.rule('markdown').test(/\.md$/) + applyVuePipeline(mdRule) + mdRule + .use('markdown-loader') + // TODO + .loader(require.resolve('@vuepress/markdown-loader')) + .options({ + sourceDir: app.dir.source(), + // TODO + // markdown: app.markdown, + }) + + // use vue-loader plugin + config.plugin('vue-loader').use(VueLoaderPlugin) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts new file mode 100644 index 0000000000..939fdb9ffc --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts @@ -0,0 +1,16 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' + +/** + * Set webpack output + */ +export const handleOutput = (config: Config, app: App): void => { + config.output + .path(app.dir.dest()) + .filename( + app.env.isProd + ? 'assets/js/[name].[chunkhash:8].js' + : 'assets/js/[name].js' + ) + .publicPath(app.options.base) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts b/packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts new file mode 100644 index 0000000000..78b112b281 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts @@ -0,0 +1,16 @@ +import { DefinePlugin } from 'webpack' +import * as Config from 'webpack-chain' + +/** + * Set webpack plugins + */ +export const handlePlugins = (config: Config): void => { + // define plugin + config.plugin('define').use(DefinePlugin, [ + { + VUEPRESS_VERSION: JSON.stringify( + require('@vuepress/core/package.json').version + ), + }, + ]) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts new file mode 100644 index 0000000000..f287e4019b --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts @@ -0,0 +1,17 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' + +/** + * Set webpack resolve + */ +export const handleResolve = (config: Config, app: App): void => { + config.resolve.alias + // alias + .set('@temp', app.dir.temp()) + .set('@internal', app.dir.temp('internal')) + .end() + // extensions + // TODO: whether to resolve ts, styl by default or not + .extensions.merge(['.js', '.jsx', '.ts', '.tsx', '.vue', '.json', '.styl']) + .end() +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/index.ts b/packages/@vuepress/bundler-webpack/src/config/base/index.ts new file mode 100644 index 0000000000..c904024fb3 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/base/index.ts @@ -0,0 +1 @@ +export * from './createBaseConfig' diff --git a/packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts b/packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts new file mode 100644 index 0000000000..621b768472 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts @@ -0,0 +1,28 @@ +import { HotModuleReplacementPlugin } from 'webpack' +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' +import { createBaseConfig } from './base' + +export const createClientConfig = (app: App): Config => { + const config = createBaseConfig(app) + + // client entry + config.entry('app').add(app.dir.client('lib/client.js')) + + if (app.env.isProd) { + // TODO: extract-css + // TODO: optimization.splitChunks + // TODO: ssr client plugin + // TODO: optimize assets + } + + if (app.env.isDev) { + // HMR plugin + config.plugin('hmr').use(HotModuleReplacementPlugin) + } + + // apply plugin option: chainWebpack + app.pluginApi.applyOption('chainWebpack', config, false) + + return config +} diff --git a/packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts b/packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts new file mode 100644 index 0000000000..18c32bcab9 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts @@ -0,0 +1,31 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' +import { createBaseConfig } from './base' + +export const createServerConfig = (app: App): Config => { + const config = createBaseConfig(app) + + // server entry + config.entry('app').add(app.dir.client('lib/server.js')) + + // set target to node + config.target('node') + + // set externals + // TODO + config.externals([/(^(vue|vue-router)$)|(^@vue\/[^/]*$)/]) + + // devtool + // TODO: differences from client config, remove? + config.devtool('source-map') + + // do not need to minimize server bundle + config.optimization.minimize(false) + + // TODO + + // apply plugin option: chainWebpack + app.pluginApi.applyOption('chainWebpack', config, true) + + return config +} diff --git a/packages/@vuepress/bundler-webpack/src/config/index.ts b/packages/@vuepress/bundler-webpack/src/config/index.ts new file mode 100644 index 0000000000..3ec7e30692 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/index.ts @@ -0,0 +1,3 @@ +export * from './base/createBaseConfig' +export * from './createClientConfig' +export * from './createServerConfig' diff --git a/packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts b/packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts new file mode 100644 index 0000000000..189b3c1eb8 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts @@ -0,0 +1,18 @@ +import { HotModuleReplacementPlugin } from 'webpack' +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' +import { createClientConfig } from '../config' + +export const createDevConfig = (app: App): Config => { + const config = createClientConfig(app) + + config.plugin('html').use(require('html-webpack-plugin'), [ + { + template: app.options.templateDev, + }, + ]) + + config.plugin('hmr').use(HotModuleReplacementPlugin) + + return config +} diff --git a/packages/@vuepress/bundler-webpack/src/dev/createDevServer.ts b/packages/@vuepress/bundler-webpack/src/dev/createDevServer.ts new file mode 100644 index 0000000000..14ea680ca3 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/dev/createDevServer.ts @@ -0,0 +1,11 @@ +import * as webpack from 'webpack' +import * as WebpackDevServer from 'webpack-dev-server' + +export const createDevServer = ( + webpackConfig: webpack.Configuration, + serverConfig: WebpackDevServer.Configuration +): WebpackDevServer => { + const compiler = webpack(webpackConfig) + + return new WebpackDevServer(compiler, serverConfig) +} diff --git a/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts b/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts new file mode 100644 index 0000000000..f544d893b4 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts @@ -0,0 +1,60 @@ +import * as fs from 'fs' +import * as path from 'path' +import * as WebpackDevServer from 'webpack-dev-server' +import { App } from '@vuepress/core' +import { normalizeSeparator } from '@vuepress/utils' + +export const createDevServerConfig = ( + app: App +): WebpackDevServer.Configuration => { + // TODO: extract to public plugin + const contentBase = app.dir.source('.vuepress/public') + + const serverConfig: WebpackDevServer.Configuration = { + disableHostCheck: true, + inline: true, + compress: true, + clientLogLevel: app.env.isDebug ? 'debug' : 'error', + noInfo: !app.env.isDebug, + hot: true, + // quiet: true, + stats: 'minimal', + overlay: false, + open: app.options.open, + writeToDisk: false, + host: app.options.host, + publicPath: app.options.base, + contentBase, + headers: { + 'access-control-allow-origin': '*', + }, + watchOptions: { + ignored: [ + // Do not watch node_modules + 'node_modules', + // Always watch temp dir + `!${normalizeSeparator(app.dir.temp())}/**`, + ], + }, + historyApiFallback: { + disableDotRule: true, + rewrites: [ + { from: /./, to: path.posix.join(app.options.base, 'index.html') }, + ], + }, + before: async (expressApp, server): Promise => { + if (fs.existsSync(contentBase)) { + expressApp.use(app.options.base, require('express').static(contentBase)) + } + + // apply plugin option: beforeDevServer + await app.pluginApi.applyOption('beforeDevServer', expressApp, server) + }, + after: async (expressApp, server): Promise => { + // apply plugin option: afterDevServer + await app.pluginApi.applyOption('afterDevServer', expressApp, server) + }, + } + + return serverConfig +} diff --git a/packages/@vuepress/bundler-webpack/src/dev/dev.ts b/packages/@vuepress/bundler-webpack/src/dev/dev.ts new file mode 100644 index 0000000000..118de576be --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/dev/dev.ts @@ -0,0 +1,42 @@ +import { App } from '@vuepress/core' +import { createDevConfig } from './createDevConfig' +import { createDevServer } from './createDevServer' +import { createDevServerConfig } from './createDevServerConfig' +import { resolvePort } from './resolvePort' + +export const dev = async (app: App): Promise => { + // initialize app + await app.init() + + // create webpack config + const config = createDevConfig(app) + const webpackConfig = config.toConfig() + + // create webpack-dev-server config + const serverConfig = createDevServerConfig(app) + + // create webpack-dev-server + const server = createDevServer(webpackConfig, serverConfig) + + // resolve host and port + const host = app.options.host + const port = await resolvePort(app.options.port) + + // prepare app + await app.prepare() + + // TODO: watch + // - config change: restart from app.init() + // - page change: restart from app.prepare() + // notice the different behaviors of "webpack watch" and "our watch" + + return new Promise((resolve, reject) => { + server.listen(port, host, (err) => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) +} diff --git a/packages/@vuepress/bundler-webpack/src/dev/index.ts b/packages/@vuepress/bundler-webpack/src/dev/index.ts new file mode 100644 index 0000000000..1b0a9405b6 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/dev/index.ts @@ -0,0 +1,5 @@ +export * from './createDevConfig' +export * from './createDevServer' +export * from './createDevServerConfig' +export * from './dev' +export * from './resolvePort' diff --git a/packages/@vuepress/bundler-webpack/src/dev/resolvePort.ts b/packages/@vuepress/bundler-webpack/src/dev/resolvePort.ts new file mode 100644 index 0000000000..8f87cc46d3 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/dev/resolvePort.ts @@ -0,0 +1,5 @@ +import * as portfinder from 'portfinder' + +export const resolvePort = async (port: number): Promise => { + return portfinder.getPortPromise({ port }) +} diff --git a/packages/@vuepress/bundler-webpack/src/index.ts b/packages/@vuepress/bundler-webpack/src/index.ts new file mode 100644 index 0000000000..e08c90efb2 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/index.ts @@ -0,0 +1,10 @@ +import { AppBundler } from '@vuepress/core' +import { build } from './build' +import { dev } from './dev' + +const webpackBundler: AppBundler = { + dev, + build, +} + +export = webpackBundler diff --git a/packages/@vuepress/bundler-webpack/tsconfig.json b/packages/@vuepress/bundler-webpack/tsconfig.json new file mode 100644 index 0000000000..366db0ea70 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [{ "path": "../core" }] +} diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json new file mode 100644 index 0000000000..491fc7442f --- /dev/null +++ b/packages/@vuepress/cli/package.json @@ -0,0 +1,35 @@ +{ + "name": "@vuepress/cli", + "version": "2.0.0-alpha.0", + "description": "CLI package of VuePress", + "keywords": [ + "vuepress", + "cli" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "bin": { + "vuepress-cli": "lib/index.js" + }, + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + }, + "dependencies": { + "@vuepress/core": "2.0.0-alpha.0" + } +} diff --git a/packages/@vuepress/cli/src/index.ts b/packages/@vuepress/cli/src/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@vuepress/cli/tsconfig.json b/packages/@vuepress/cli/tsconfig.json new file mode 100644 index 0000000000..0ea5482209 --- /dev/null +++ b/packages/@vuepress/cli/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [ + { "path": "../client" }, + { "path": "../core" }, + { "path": "../utils" } + ] +} diff --git a/packages/@vuepress/client/package.json b/packages/@vuepress/client/package.json new file mode 100644 index 0000000000..fd8fcb9a61 --- /dev/null +++ b/packages/@vuepress/client/package.json @@ -0,0 +1,34 @@ +{ + "name": "@vuepress/client", + "version": "2.0.0-alpha.0", + "description": "Client package of VuePress", + "keywords": [ + "vuepress", + "client" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib", + "templates" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + }, + "dependencies": { + "vue": "3.0.0-beta.10", + "vue-router": "4.0.0-alpha.10" + } +} diff --git a/packages/@vuepress/client/src/client.ts b/packages/@vuepress/client/src/client.ts new file mode 100644 index 0000000000..0bbb4df7d8 --- /dev/null +++ b/packages/@vuepress/client/src/client.ts @@ -0,0 +1,12 @@ +import { createApp } from 'vue' +import { createWebHistory } from 'vue-router' +import { createVueApp } from './createVueApp' + +createVueApp({ + appCreator: createApp, + historyCreator: createWebHistory, +}).then(({ app, router }) => { + router.isReady().then(() => { + app.mount('#app') + }) +}) diff --git a/packages/@vuepress/client/src/components/Content.ts b/packages/@vuepress/client/src/components/Content.ts new file mode 100644 index 0000000000..751a852a3e --- /dev/null +++ b/packages/@vuepress/client/src/components/Content.ts @@ -0,0 +1,29 @@ +import { h, VNode } from 'vue' +import { pageComponents } from '@internal/pageComponents' +import { usePageData } from '../injections' + +/** + * Markdown rendered content + */ +export const Content = (props: { pageKey: string }): VNode => { + let key: string + + // use the page key from props directly + if (props?.pageKey) { + key = props.pageKey + } else { + // get current page key from page data + const { page } = usePageData() + key = page.value.key + } + + const component = pageComponents[key] + + if (component) { + // use page component + return h(component) + } else { + // fallback + return h('div', 'Page does not exist. This is a fallback content.') + } +} diff --git a/packages/@vuepress/client/src/components/Vuepress.ts b/packages/@vuepress/client/src/components/Vuepress.ts new file mode 100644 index 0000000000..3e42e03988 --- /dev/null +++ b/packages/@vuepress/client/src/components/Vuepress.ts @@ -0,0 +1,41 @@ +import { h, ComponentOptions } from 'vue' +import { layoutComponents } from '@internal/layoutComponents' +import { usePageData } from '../injections' +import { Content } from './Content' + +/** + * Global Layout + */ +export const Vuepress: ComponentOptions = { + setup() { + let layout: string + + const { page } = usePageData() + + if (page.value.path) { + // if current page exists + + // use layout from frontmatter + const frontmatterLayout = page.value.frontmatter.layout + + if (typeof frontmatterLayout === 'string') { + layout = frontmatterLayout + } else { + // fallback to Layout component + layout = 'Layout' + } + } else { + layout = 'NotFound' + } + + const component = layoutComponents[layout] + + if (component) { + // use layout component + return () => h(component) + } else { + // fallback to Content + return () => h(Content) + } + }, +} diff --git a/packages/@vuepress/client/src/components/index.ts b/packages/@vuepress/client/src/components/index.ts new file mode 100644 index 0000000000..812ac14de5 --- /dev/null +++ b/packages/@vuepress/client/src/components/index.ts @@ -0,0 +1,2 @@ +export * from './Content' +export * from './Vuepress' diff --git a/packages/@vuepress/client/src/createVueApp.ts b/packages/@vuepress/client/src/createVueApp.ts new file mode 100644 index 0000000000..934f23f7d4 --- /dev/null +++ b/packages/@vuepress/client/src/createVueApp.ts @@ -0,0 +1,66 @@ +import { CreateAppFunction, App, h, ComponentOptions } from 'vue' +import { + createRouter, + useRoute, + Router, + RouterView, + RouterHistory, +} from 'vue-router' +import { pageComponents } from '@internal/pageComponents' +import { routes } from '@internal/routes' +import { siteData } from '@internal/siteData' +import { Content } from './components' +import { siteDataKey } from './injections' + +export type AppCreator = CreateAppFunction +export type HistoryCreator = (base?: string) => RouterHistory + +export async function createVueApp({ + appCreator, + historyCreator, +}: { + appCreator: AppCreator + historyCreator: HistoryCreator +}): Promise<{ + app: App + router: Router +}> { + const appOptions: ComponentOptions = { + setup() { + const route = useRoute() + return { route } + }, + + render() { + return h('div', { id: 'app' }, [ + h(RouterView), + // TODO: global ui, portal? + h('div', { class: 'global-ui' }), + ]) + }, + } + + const app = appCreator(appOptions) + + const history = historyCreator(siteData.base) + + const router = createRouter({ + history, + routes, + }) + + app.use(router) + app.component('Content', Content) + + Object.entries(pageComponents).forEach(([name, component]) => { + app.component(name, component) + }) + + // provide siteData + app.provide(siteDataKey, siteData) + + return { + app, + router, + } +} diff --git a/packages/@vuepress/client/src/index.ts b/packages/@vuepress/client/src/index.ts new file mode 100644 index 0000000000..fba7b57005 --- /dev/null +++ b/packages/@vuepress/client/src/index.ts @@ -0,0 +1 @@ +export * from './injections' diff --git a/packages/@vuepress/client/src/injections/index.ts b/packages/@vuepress/client/src/injections/index.ts new file mode 100644 index 0000000000..e5636f1494 --- /dev/null +++ b/packages/@vuepress/client/src/injections/index.ts @@ -0,0 +1,2 @@ +export * from './pageData' +export * from './siteData' diff --git a/packages/@vuepress/client/src/injections/pageData.ts b/packages/@vuepress/client/src/injections/pageData.ts new file mode 100644 index 0000000000..03954651c8 --- /dev/null +++ b/packages/@vuepress/client/src/injections/pageData.ts @@ -0,0 +1,34 @@ +import { computed, ComputedRef } from 'vue' +import { useRoute } from 'vue-router' +import { PageData } from '@internal/siteData' +import { useSiteData } from './siteData' + +export const usePageData = (): { + page: ComputedRef + title: ComputedRef + frontmatter: ComputedRef +} => { + const siteData = useSiteData() + const route = useRoute() + + const page = computed( + () => + siteData.pages.find((item) => item.path === route.path) || { + key: '', + path: '', + title: '', + frontmatter: {}, + excerpt: '', + headers: [], + } + ) + + const title = computed(() => page.value.title) + const frontmatter = computed(() => page.value.frontmatter) + + return { + page, + title, + frontmatter, + } +} diff --git a/packages/@vuepress/client/src/injections/siteData.ts b/packages/@vuepress/client/src/injections/siteData.ts new file mode 100644 index 0000000000..e355c53665 --- /dev/null +++ b/packages/@vuepress/client/src/injections/siteData.ts @@ -0,0 +1,9 @@ +import { inject, InjectionKey } from 'vue' +import { SiteData } from '@internal/siteData' + +export const siteDataKey: InjectionKey = Symbol('siteData') + +export const useSiteData = (): SiteData => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return inject(siteDataKey)! +} diff --git a/packages/@vuepress/client/src/internal/index.ts b/packages/@vuepress/client/src/internal/index.ts new file mode 100644 index 0000000000..cf91013979 --- /dev/null +++ b/packages/@vuepress/client/src/internal/index.ts @@ -0,0 +1,4 @@ +/** + * This is a fake module for webpack aliases + */ +export {} diff --git a/packages/@vuepress/client/src/internal/layoutComponents.d.ts b/packages/@vuepress/client/src/internal/layoutComponents.d.ts new file mode 100644 index 0000000000..28843866d6 --- /dev/null +++ b/packages/@vuepress/client/src/internal/layoutComponents.d.ts @@ -0,0 +1,5 @@ +import { AsyncComponentLoader } from 'vue' + +declare module '@internal/layoutComponents' { + export const layoutComponents: Record +} diff --git a/packages/@vuepress/client/src/internal/pageComponents.d.ts b/packages/@vuepress/client/src/internal/pageComponents.d.ts new file mode 100644 index 0000000000..6efd5f7906 --- /dev/null +++ b/packages/@vuepress/client/src/internal/pageComponents.d.ts @@ -0,0 +1,5 @@ +import { AsyncComponentLoader } from 'vue' + +declare module '@internal/pageComponents' { + export const pageComponents: Record +} diff --git a/packages/@vuepress/client/src/internal/routes.d.ts b/packages/@vuepress/client/src/internal/routes.d.ts new file mode 100644 index 0000000000..5c06ecda0e --- /dev/null +++ b/packages/@vuepress/client/src/internal/routes.d.ts @@ -0,0 +1,5 @@ +import { RouteRecordRaw } from 'vue-router' + +declare module '@internal/routes' { + export const routes: RouteRecordRaw[] +} diff --git a/packages/@vuepress/client/src/internal/siteData.d.ts b/packages/@vuepress/client/src/internal/siteData.d.ts new file mode 100644 index 0000000000..e193e53844 --- /dev/null +++ b/packages/@vuepress/client/src/internal/siteData.d.ts @@ -0,0 +1,7 @@ +import { ClientData, ClientDataPage } from '@vuepress/core' + +declare module '@internal/siteData' { + export type SiteData = ClientData + export type PageData = ClientDataPage + export const siteData: SiteData +} diff --git a/packages/@vuepress/client/src/server.ts b/packages/@vuepress/client/src/server.ts new file mode 100644 index 0000000000..84083816cf --- /dev/null +++ b/packages/@vuepress/client/src/server.ts @@ -0,0 +1,31 @@ +import { createSSRApp, App } from 'vue' +import { createMemoryHistory } from 'vue-router' +import { createVueApp } from './createVueApp' + +// TODO: move to a better place +type VuepressSSRContext = { + url: string + title: string + lang: string + description: string + version: string +} + +export default (context: VuepressSSRContext): Promise => + new Promise((resolve, reject) => { + createVueApp({ + appCreator: createSSRApp, + historyCreator: createMemoryHistory, + }).then(({ app, router }) => { + const { url } = context + const { fullPath } = router.resolve(url) + + if (fullPath !== url) { + // eslint-disable-next-line prefer-promise-reject-errors + return reject({ url: fullPath }) + } + + router.push(url) + router.isReady().then(() => resolve(app)) + }) + }) diff --git a/packages/@vuepress/client/templates/index.dev.html b/packages/@vuepress/client/templates/index.dev.html new file mode 100644 index 0000000000..06f743c5aa --- /dev/null +++ b/packages/@vuepress/client/templates/index.dev.html @@ -0,0 +1,11 @@ + + + + + + + + +
+ + diff --git a/packages/@vuepress/client/templates/index.ssr.html b/packages/@vuepress/client/templates/index.ssr.html new file mode 100644 index 0000000000..351c008efe --- /dev/null +++ b/packages/@vuepress/client/templates/index.ssr.html @@ -0,0 +1,17 @@ + + + + + + {{ title }} + + {{{ userHeadTags }}} + {{{ pageMeta }}} + {{{ renderResourceHints() }}} + {{{ renderStyles() }}} + + + + {{{ renderScripts() }}} + + diff --git a/packages/@vuepress/client/tsconfig.json b/packages/@vuepress/client/tsconfig.json new file mode 100644 index 0000000000..67d79e972b --- /dev/null +++ b/packages/@vuepress/client/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2015", + "module": "ES2015", + "rootDir": "./src", + "outDir": "./lib", + "baseUrl": ".", + "paths": { + "@internal/*": ["src/internal/index.ts"] + } + }, + "include": ["./src"] +} diff --git a/packages/@vuepress/core/package.json b/packages/@vuepress/core/package.json new file mode 100644 index 0000000000..16b69a50a9 --- /dev/null +++ b/packages/@vuepress/core/package.json @@ -0,0 +1,40 @@ +{ + "name": "@vuepress/core", + "version": "2.0.0-alpha.0", + "description": "Core package of VuePress", + "keywords": [ + "vuepress", + "core" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + }, + "dependencies": { + "@types/webpack-dev-server": "^3.10.1", + "@vue/server-renderer": "3.0.0-beta.10", + "@vuepress/client": "2.0.0-alpha.0", + "@vuepress/markdown": "^1.3.1", + "@vuepress/shared-utils": "^1.4.1", + "@vuepress/utils": "2.0.0-alpha.0", + "vue": "3.0.0-beta.10", + "vue-router": "4.0.0-alpha.10", + "webpack-chain": "^6.4.0" + } +} diff --git a/packages/@vuepress/core/src/app/appInit.ts b/packages/@vuepress/core/src/app/appInit.ts new file mode 100644 index 0000000000..a85e55940d --- /dev/null +++ b/packages/@vuepress/core/src/app/appInit.ts @@ -0,0 +1,46 @@ +import { + layoutComponentsPlugin, + pageComponentsPlugin, + routesPlugin, + siteDataPlugin, +} from '../plugins' +import { createThemeApi } from '../theme-api' +import { App } from './createApp' +import { createAppMarkdown } from './createAppMarkdown' +import { createAppWriteTemp } from './createAppWriteTemp' + +export const appInit = async (app: App): Promise => { + // create write temp util + app.writeTemp = await createAppWriteTemp(app) + + // create theme api, resolve themes and layouts + app.themeApi = createThemeApi(app) + + // use internal plugins + const internalPlugins = [ + layoutComponentsPlugin, + pageComponentsPlugin, + routesPlugin, + siteDataPlugin, + // TODO: use theme-api plugin + ] + internalPlugins.forEach((item) => app.use(item)) + + // use user plugins + app.options.plugins.forEach((item) => app.useByConfig(item)) + + // use theme plugin + if (app.themeApi.parentTheme) { + app.use(app.themeApi.parentTheme.plugin) + } + app.use(app.themeApi.theme.plugin) + + // register all options of plugins that have been used + app.pluginApi.registerOptions() + + // create markdown + app.markdown = createAppMarkdown(app) + + // apply plugin option: onInitialized + await app.pluginApi.applyOption('onInitialized', app) +} diff --git a/packages/@vuepress/core/src/app/appPrepare.ts b/packages/@vuepress/core/src/app/appPrepare.ts new file mode 100644 index 0000000000..8ba5fab7e3 --- /dev/null +++ b/packages/@vuepress/core/src/app/appPrepare.ts @@ -0,0 +1,18 @@ +import { App } from './createApp' +import { createAppPages } from './createAppPages' + +export const appPrepare = async (app: App): Promise => { + // create pages + app.pages = await createAppPages(app) + + // TODO: additionalPages + + // apply plugin option: onPrepared + await app.pluginApi.applyOption('onPrepared', app) + + // apply plugin option: clientDynamicModules + await app.pluginApi.applyOption('clientDynamicModules', app) + + // TODO: enhanceAppFiles + // TODO: globalUIComponents +} diff --git a/packages/@vuepress/core/src/app/appUse.ts b/packages/@vuepress/core/src/app/appUse.ts new file mode 100644 index 0000000000..088e89fadd --- /dev/null +++ b/packages/@vuepress/core/src/app/appUse.ts @@ -0,0 +1,41 @@ +import { logger, chalk } from '@vuepress/shared-utils' +import { App } from './createApp' +import { normalizePlugin } from './normalizePlugin' +import { Plugin } from './types' + +export const appUse = ( + app: App, + rawPlugin: Plugin | string, + config?: T +): void => { + // normalize plugin + const plugin = normalizePlugin(app, rawPlugin, config) + + // TODO: migrate logger + // print log + if (plugin.name.startsWith('@vuepress/internal')) { + logger.debug(`Use plugin ${chalk.magenta(plugin.name)}`) + } else { + logger.info(`Use plugin ${chalk.magenta(plugin.name)}`) + } + + if (plugin.multiple !== true) { + // remove duplicated plugin + const duplicateIndex = app.pluginApi.plugins.findIndex( + ({ name }) => name === plugin.name + ) + if (duplicateIndex !== -1) { + app.pluginApi.plugins.splice(duplicateIndex, 1) + } + } + + // use plugin + app.pluginApi.use(plugin) + + // TODO: nested plugins with `multiple` may cause potential problems + + // if the plugin uses other plugins + if (plugin.plugins) { + plugin.plugins.forEach(app.useByConfig) + } +} diff --git a/packages/@vuepress/core/src/app/appUseByConfig.ts b/packages/@vuepress/core/src/app/appUseByConfig.ts new file mode 100644 index 0000000000..a0914ba9f7 --- /dev/null +++ b/packages/@vuepress/core/src/app/appUseByConfig.ts @@ -0,0 +1,22 @@ +import { App } from './createApp' +import { normalizePluginConfig } from './normalizePluginConfig' +import { PluginConfig } from './types' + +export const appUseByConfig = ( + app: App, + pluginConfig: PluginConfig +): void => { + const normalizedPluginConfig = normalizePluginConfig(pluginConfig) + + if (normalizedPluginConfig === false) { + return + } + + const [plugin, config] = normalizedPluginConfig + + if (config === false) { + return + } + + return app.use(plugin, config === true ? {} : config) +} diff --git a/packages/@vuepress/core/src/app/createApp.ts b/packages/@vuepress/core/src/app/createApp.ts new file mode 100644 index 0000000000..e21d1d49a3 --- /dev/null +++ b/packages/@vuepress/core/src/app/createApp.ts @@ -0,0 +1,63 @@ +import { PluginApi, createPluginApi } from '../plugin-api' +import { ThemeApi } from '../theme-api' +import { appInit } from './appInit' +import { appPrepare } from './appPrepare' +import { appUse } from './appUse' +import { appUseByConfig } from './appUseByConfig' +import { AppBundler, createAppBundler } from './createAppBundler' +import { AppDir, createAppDir } from './createAppDir' +import { AppEnv, createAppEnv } from './createAppEnv' +import { AppOptions, createAppOptions } from './createAppOptions' +import { AppMarkdown } from './createAppMarkdown' +import { AppWriteTemp } from './createAppWriteTemp' +import { AppPages } from './createAppPages' +import { AppConfig, PluginConfig, Plugin } from './types' + +export interface App { + // created + options: AppOptions + dir: AppDir + env: AppEnv + pluginApi: PluginApi + use: (plugin: Plugin | string, config?: T) => void + useByConfig: (pluginConfig: PluginConfig) => void + init: () => Promise + prepare: () => Promise + dev: () => ReturnType + build: () => ReturnType + + // initialized + markdown: AppMarkdown + writeTemp: AppWriteTemp + themeApi: ThemeApi + + // prepared + pages: AppPages +} + +/** + * Create vuepress app + */ +export const createApp = (config: AppConfig): App => { + const options = createAppOptions(config) + const dir = createAppDir(options) + const env = createAppEnv(options) + const bundler = createAppBundler(options) + const pluginApi = createPluginApi() + + const app = { + options, + dir, + env, + pluginApi, + + use: (...args) => appUse(app, ...args), + useByConfig: (...args) => appUseByConfig(app, ...args), + init: () => appInit(app), + prepare: () => appPrepare(app), + dev: () => bundler.dev(app), + build: () => bundler.build(app), + } as App + + return app +} diff --git a/packages/@vuepress/core/src/app/createAppBundler.ts b/packages/@vuepress/core/src/app/createAppBundler.ts new file mode 100644 index 0000000000..efc49248b7 --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppBundler.ts @@ -0,0 +1,15 @@ +import { App } from './createApp' +import { AppOptions } from './createAppOptions' + +export interface AppBundler { + dev: (app: App) => Promise + build: (app: App) => Promise +} + +export const createAppBundler = (options: AppOptions): AppBundler => { + switch (options.bundler) { + case 'webpack': + default: + return require('@vuepress/bundler-webpack') as AppBundler + } +} diff --git a/packages/@vuepress/core/src/app/createAppDir.ts b/packages/@vuepress/core/src/app/createAppDir.ts new file mode 100644 index 0000000000..429a2b523c --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppDir.ts @@ -0,0 +1,45 @@ +import { resolve } from 'path' +import { AppOptions } from './createAppOptions' + +/** + * Directory util function + */ +export type DirFunction = (...args: string[]) => string + +/** + * Create directory util function + */ +export const createDirFunction = (baseDir: string): DirFunction => { + return (...args: string[]): string => resolve(baseDir, ...args) +} + +/** + * Directory utils + */ +export interface AppDir { + temp: DirFunction + source: DirFunction + dest: DirFunction + client: DirFunction +} + +/** + * Create directory utils for vuepress app + */ +export const createAppDir = (options: AppOptions): AppDir => { + const temp = createDirFunction(options.dirTemp) + const source = createDirFunction(options.dirSource) + const dest = createDirFunction(options.dirDest) + + // @vuepress/client + const client = createDirFunction( + resolve(require.resolve('@vuepress/client/package.json'), '..') + ) + + return { + temp, + source, + dest, + client, + } +} diff --git a/packages/@vuepress/core/src/app/createAppEnv.ts b/packages/@vuepress/core/src/app/createAppEnv.ts new file mode 100644 index 0000000000..3f6f1dfbd8 --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppEnv.ts @@ -0,0 +1,21 @@ +import { AppOptions } from './createAppOptions' + +/** + * Environment flags + */ +export interface AppEnv { + isProd: boolean + isTest: boolean + isDev: boolean + isDebug: boolean +} + +/** + * Create environment flags for vuepress app + */ +export const createAppEnv = (options: AppOptions): AppEnv => ({ + isProd: process.env.NODE_ENV === 'production', + isTest: process.env.NODE_ENV === 'test', + isDev: process.env.NODE_ENV === 'development', + isDebug: options.debug, +}) diff --git a/packages/@vuepress/core/src/app/createAppMarkdown.ts b/packages/@vuepress/core/src/app/createAppMarkdown.ts new file mode 100644 index 0000000000..4076e6652f --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppMarkdown.ts @@ -0,0 +1,22 @@ +import * as createMarkdown from '@vuepress/markdown' +import { App } from './createApp' + +// TODO +export type AppMarkdown = any + +/** + * Create markdown parser for vuepress app + */ +export const createAppMarkdown = (app: App): AppMarkdown => { + const markdown: AppMarkdown = createMarkdown({ + // TODO: use markdown config from app.options + beforeInstantiate: (config) => { + app.pluginApi.applyOption('chainMarkdown', config) + }, + afterInstantiate: (md) => { + app.pluginApi.applyOption('extendMarkdown', md) + }, + }) + + return markdown +} diff --git a/packages/@vuepress/core/src/app/createAppOptions.ts b/packages/@vuepress/core/src/app/createAppOptions.ts new file mode 100644 index 0000000000..11216e7f8b --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppOptions.ts @@ -0,0 +1,45 @@ +import { resolve } from 'path' +import { AppConfig } from './types' + +/** + * Options (normalized config) of vuepress app + */ +export type AppOptions = Required + +/** + * Create options (normalized config) for vuepress app + */ +export const createAppOptions = (config: AppConfig): AppOptions => { + return { + // Meta + title: '', + description: '', + head: [], + locales: {}, + + // Dev & Build + bundler: 'webpack', + base: '', + host: '0.0.0.0', + port: 8080, + debug: false, + open: false, + + // Dirs + dirDest: resolve(config.dirSource, '.vuepress/dist'), + dirTemp: resolve(config.dirSource, '.vuepress/.temp'), + + // Template + templateDev: require.resolve('@vuepress/client/templates/index.dev.html'), + templateSSR: require.resolve('@vuepress/client/templates/index.ssr.html'), + + // Plugins + plugins: [], + + // Theme + theme: '@vuepress/default', + themeConfig: {}, + + ...config, + } +} diff --git a/packages/@vuepress/core/src/app/createAppPages.ts b/packages/@vuepress/core/src/app/createAppPages.ts new file mode 100644 index 0000000000..f078980e18 --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppPages.ts @@ -0,0 +1,25 @@ +import { globby } from '@vuepress/utils' +import { App } from './createApp' +import { Page, createPage } from '../page' + +export type AppPages = Page[] + +/** + * Create pages for vuepress app + */ +export const createAppPages = async (app: App): Promise => { + const patterns = ['**/*.md', '**/*.vue', '!.vuepress', '!node_modules'] + const pagePaths = await globby(patterns, { + cwd: app.dir.source(), + }) + + const pages = await Promise.all( + pagePaths.map((filePath) => + createPage(app, { + filePath, + }) + ) + ) + + return pages +} diff --git a/packages/@vuepress/core/src/app/createAppWriteTemp.ts b/packages/@vuepress/core/src/app/createAppWriteTemp.ts new file mode 100644 index 0000000000..1c1349ea42 --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppWriteTemp.ts @@ -0,0 +1,42 @@ +import { parse } from 'path' +import { fs } from '@vuepress/utils' +import { App } from './createApp' + +/** + * Internal temp cache + */ +type TempCache = Map + +/** + * Write temp file util + */ +export type AppWriteTemp = (file: string, content: string) => Promise + +/** + * Create write temp file util for vuepress app + */ +export const createAppWriteTemp = async (app: App): Promise => { + const dirTemp = app.dir.temp() + + // ensure temp directory exists + await fs.ensureDir(dirTemp) + + // TODO: check if temp dir is safe to empty + // empty temp directory + await fs.emptyDir(dirTemp) + + const tempCache: TempCache = new Map() + + const writeTemp: AppWriteTemp = async (file: string, content: string) => { + const filePath = app.dir.temp(file) + const contentCached = tempCache.get(filePath) + if (contentCached !== content) { + await fs.ensureDir(parse(filePath).dir) + await fs.writeFile(filePath, content) + tempCache.set(filePath, content) + } + return filePath + } + + return writeTemp +} diff --git a/packages/@vuepress/core/src/app/createClientData.ts b/packages/@vuepress/core/src/app/createClientData.ts new file mode 100644 index 0000000000..f9690b1ae9 --- /dev/null +++ b/packages/@vuepress/core/src/app/createClientData.ts @@ -0,0 +1,35 @@ +import { Page } from '../page' +import { App } from './createApp' + +export interface ClientData { + title: string + description: string + base: string + pages: ClientDataPage[] +} + +export type ClientDataPage = Pick< + Page, + 'key' | 'path' | 'title' | 'frontmatter' | 'excerpt' | 'headers' +> + +/** + * Create data from app, which will be used in client + */ +export const createClientData = (app: App): ClientData => { + return { + title: app.options.title, + description: app.options.description, + base: app.options.base, + pages: app.pages.map( + ({ key, path, title, frontmatter, excerpt, headers }) => ({ + key, + path, + title, + frontmatter, + excerpt, + headers, + }) + ), + } +} diff --git a/packages/@vuepress/core/src/app/index.ts b/packages/@vuepress/core/src/app/index.ts new file mode 100644 index 0000000000..9acda3ee08 --- /dev/null +++ b/packages/@vuepress/core/src/app/index.ts @@ -0,0 +1,17 @@ +export * from './appInit' +export * from './appPrepare' +export * from './appUse' +export * from './appUseByConfig' +export * from './createApp' +export * from './createAppBundler' +export * from './createAppDir' +export * from './createAppEnv' +export * from './createAppMarkdown' +export * from './createAppOptions' +export * from './createAppPages' +export * from './createAppWriteTemp' +export * from './createClientData' +export * from './normalizePlugin' +export * from './normalizePluginConfig' +export * from './resolvePluginByName' +export * from './types' diff --git a/packages/@vuepress/core/src/app/normalizePlugin.ts b/packages/@vuepress/core/src/app/normalizePlugin.ts new file mode 100644 index 0000000000..4fb6c8620b --- /dev/null +++ b/packages/@vuepress/core/src/app/normalizePlugin.ts @@ -0,0 +1,29 @@ +import { isFunction, isString } from '@vuepress/utils' +import { App } from './createApp' +import { resolvePluginByName } from './resolvePluginByName' +import { Plugin, PluginOptions } from './types' + +export const normalizePlugin = ( + app: App, + plugin: Plugin | string, + config?: Partial +): PluginOptions => { + const resolvedPlugin = isString(plugin) ? resolvePluginByName(plugin) : plugin + + // TODO + if (resolvedPlugin === null) { + throw new Error() + } + + const invokedPlugin = isFunction(resolvedPlugin) + ? resolvedPlugin(config ?? {}, app) + : resolvedPlugin + + const normalizedPlugin: PluginOptions = { + ...invokedPlugin, + + // TODO: normalize plugin name + } + + return normalizedPlugin +} diff --git a/packages/@vuepress/core/src/app/normalizePluginConfig.ts b/packages/@vuepress/core/src/app/normalizePluginConfig.ts new file mode 100644 index 0000000000..26b179ebb4 --- /dev/null +++ b/packages/@vuepress/core/src/app/normalizePluginConfig.ts @@ -0,0 +1,24 @@ +import { isArray, isString } from '@vuepress/utils' +import { PluginConfig } from './types' + +export type NormalizedPluginConfig = [ + string, + Partial | boolean +] + +export const normalizePluginConfig = ( + pluginConfig: PluginConfig +): NormalizedPluginConfig | false => { + // 'container' -> ['container', {}] + if (isString(pluginConfig)) { + return [pluginConfig, {}] + } + + // ['container'] -> ['container', {}] + // ['container', options] -> ['container', options] + if (isArray(pluginConfig)) { + return [pluginConfig[0], pluginConfig[1] ?? {}] + } + + return false +} diff --git a/packages/@vuepress/core/src/app/resolvePluginByName.ts b/packages/@vuepress/core/src/app/resolvePluginByName.ts new file mode 100644 index 0000000000..85671137bd --- /dev/null +++ b/packages/@vuepress/core/src/app/resolvePluginByName.ts @@ -0,0 +1,21 @@ +import { moduleResolver } from '@vuepress/shared-utils' +import { Plugin } from './types' + +// TODO: migrate module resolver +const cwd = process.cwd() +const resolver = moduleResolver.getPluginResolver(cwd) + +/** + * Resolve a plugin according to the name string + */ +export const resolvePluginByName = (pluginName: string): Plugin | null => { + // TODO: for current plugin resolver, the `entry` is the module + const result = resolver.resolve(pluginName, cwd) + + if (!result.entry) { + return null + } + + // TODO: plugin name + return (result.entry as unknown) as Plugin +} diff --git a/packages/@vuepress/core/src/app/types.ts b/packages/@vuepress/core/src/app/types.ts new file mode 100644 index 0000000000..c0a82158bb --- /dev/null +++ b/packages/@vuepress/core/src/app/types.ts @@ -0,0 +1,105 @@ +import { Options } from '../plugin-api' +import { App } from './createApp' + +export interface LocaleConfig extends Omit { + path?: string +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type PluginConfig = + // plugins: ['container'] + | string + // plugins: [['container']] + | [string] + // plugins: [['container', options]] + // plugins: [['container', false]] + | [string, Partial | boolean] + +export interface ThemeConfig { + locales?: LocaleConfig + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: any +} + +/** + * Config to create vuepress app + */ +export interface AppConfig { + // Meta + title?: string + description?: string + head?: Array<[string, Record]> + locales?: LocaleConfig + + // Dev & Build + bundler?: 'webpack' + base?: string + host?: string + port?: number + debug?: boolean + open?: boolean + + // Dirs + dirSource: string + dirDest?: string + dirTemp?: string + + // Template + templateDev?: string + templateSSR?: string + + // Plugins + plugins?: PluginConfig[] + + // Theme + theme?: string + themeConfig?: T +} + +/** + * Type of vuepress plugin + */ +export type Plugin< + T extends object = {}, + U extends PluginOptions = PluginOptions +> = U | PluginFunction + +/** + * Function type of vuepress plugin + */ +export type PluginFunction< + T extends object = {}, + U extends PluginOptions = PluginOptions +> = (pluginConfig: Partial, app: App) => U + +/** + * Options type of vuepress plugin + */ +export interface PluginOptions extends Options { + // allow use a plugin multiple times or not + multiple?: boolean + + // allow use plugins in plugin + plugins?: PluginConfig[] +} + +/** + * Type of vuepress theme + */ +export type Theme = Plugin + +/** + * Function type of vuepress theme + */ +export type ThemeFunction = PluginFunction< + T, + ThemeOptions +> + +/** + * Options type of vuepress theme + */ +export interface ThemeOptions extends Omit { + extend?: string + // TODO: extend -> extends +} diff --git a/packages/@vuepress/core/src/index.ts b/packages/@vuepress/core/src/index.ts new file mode 100644 index 0000000000..ec07fefb50 --- /dev/null +++ b/packages/@vuepress/core/src/index.ts @@ -0,0 +1,5 @@ +export * from './app' +export * from './page' +export * from './plugin-api' +export * from './plugins' +export * from './theme-api' diff --git a/packages/@vuepress/core/src/page/createPage.ts b/packages/@vuepress/core/src/page/createPage.ts new file mode 100644 index 0000000000..eb328978b9 --- /dev/null +++ b/packages/@vuepress/core/src/page/createPage.ts @@ -0,0 +1,174 @@ +import { App } from '../app' +import { inferPagePath } from './inferPagePath' +import { resolveFilePath } from './resolveFilePath' +import { resolveFileContent } from './resolveFileContent' +import { resolvePageContent } from './resolvePageContent' +import { resolvePageDate } from './resolvePageDate' +import { resolvePageExcerpt } from './resolvePageExcerpt' +import { resolvePageHeaders, PageHeader } from './resolvePageHeaders' +import { resolvePageKey } from './resolvePageKey' +import { resolvePagePath } from './resolvePagePath' +import { resolvePagePermalink } from './resolvePagePermalink' +import { resolvePageSlug } from './resolvePageSlug' +import { resolvePageTitle } from './resolvePageTitle' + +export interface PageConfig { + permalink?: string + permalinkPattern?: string + filePath?: string + frontmatter?: PageFrontmatter + content?: string +} + +export type PageFrontmatter = Record + +export interface Page { + /** + * Identifier of the page + * + * Will also be used as the component name + * + * @example 'v-foobar' + */ + key: string + + /** + * Route path of the page + * + * Firstly inferred from the file path + * + * Might be overridden by permalink + * + * @example '/guide/index.html' + * @example '/2020/02/02/hello-world.html' + */ + path: string + + /** + * Path of the page that inferred from file path + * + * If the page does not come from a file, it would be `null` + * + * @example '/guide/index.html' + */ + pathInferred: string | null + + /** + * Absolute path of the source file + * + * If the page does not come from a file, it would be `null` + */ + filePath: string | null + + /** + * Relative path of the source file + * + * If the page does not come from a file, it would be `null` + */ + filePathRelative: string | null + + /** + * Title of the page + */ + title: string + + /** + * Content of the page + */ + content: string + + /** + * Front matter of the page + */ + frontmatter: PageFrontmatter + + /** + * Excerpt of the page + */ + excerpt: string + + /** + * Headers of the page + */ + headers: PageHeader[] + + /** + * Slug of the page + */ + slug: string + + /** + * Date of the page + */ + date: string +} + +export const createPage = async ( + app: App, + config: PageConfig +): Promise => { + // resolve absolute path and relative path + const { filePath, filePathRelative } = resolveFilePath(app, config) + + // resolve the raw content + const rawContent = await resolveFileContent(config, filePath) + + // resolve content & frontmatter & raw excerpt from raw content + const { content, frontmatter, excerpt: rawExcerpt } = resolvePageContent( + rawContent, + filePath + ) + + // resolve title from content + const title = resolvePageTitle(frontmatter, content) + + // resolve headers from content + const headers = resolvePageHeaders(app, content) + + // resolve excerpt from raw excerpt + const excerpt = resolvePageExcerpt( + rawExcerpt, + app, + frontmatter, + filePathRelative + ) + + // resolve slug from file path + const slug = resolvePageSlug(filePathRelative) + + // resolve date from file path + const date = resolvePageDate(frontmatter, filePathRelative) + + // infer page path according to file path + const pathInferred = inferPagePath(filePathRelative) + + // resolve page permalink + const permalink = resolvePagePermalink( + config, + frontmatter, + slug, + date, + pathInferred + ) + + // resolve page path + const path = resolvePagePath(permalink, pathInferred) + + // resolve path key + const key = resolvePageKey(path) + + return { + key, + path, + pathInferred, + filePath, + filePathRelative, + title, + content, + frontmatter, + excerpt, + headers, + slug, + date, + } +} diff --git a/packages/@vuepress/core/src/page/index.ts b/packages/@vuepress/core/src/page/index.ts new file mode 100644 index 0000000000..07775a196d --- /dev/null +++ b/packages/@vuepress/core/src/page/index.ts @@ -0,0 +1 @@ +export * from './createPage' diff --git a/packages/@vuepress/core/src/page/inferPagePath.ts b/packages/@vuepress/core/src/page/inferPagePath.ts new file mode 100644 index 0000000000..718fedbd7f --- /dev/null +++ b/packages/@vuepress/core/src/page/inferPagePath.ts @@ -0,0 +1,16 @@ +/** + * Infer page path according to file path + */ +export const inferPagePath = ( + filePathRelative: string | null +): string | null => { + if (!filePathRelative) { + return null + } + + // foo.md -> /foo.html + // foo.vue -> /foo.html + // foo/bar.md -> /foo/bar.html + // foo/bar.vue -> /foo/bar.html + return `/${filePathRelative.replace(/\.(vue|md)$/, '.html')}` +} diff --git a/packages/@vuepress/core/src/page/resolveFileContent.ts b/packages/@vuepress/core/src/page/resolveFileContent.ts new file mode 100644 index 0000000000..91d1a7b3be --- /dev/null +++ b/packages/@vuepress/core/src/page/resolveFileContent.ts @@ -0,0 +1,14 @@ +import { fs } from '@vuepress/utils' +import { PageConfig } from './createPage' + +export const resolveFileContent = async ( + config: PageConfig, + filePath: string | null +): Promise => { + if (filePath) { + // read page content from file + return fs.readFile(filePath, 'utf-8') + } + + return config.content || '' +} diff --git a/packages/@vuepress/core/src/page/resolveFilePath.ts b/packages/@vuepress/core/src/page/resolveFilePath.ts new file mode 100644 index 0000000000..d45d133819 --- /dev/null +++ b/packages/@vuepress/core/src/page/resolveFilePath.ts @@ -0,0 +1,39 @@ +import { relative, isAbsolute } from 'path' +import { normalizeSeparator } from '@vuepress/utils' +import { App } from '../app' +import { PageConfig } from './createPage' + +/** + * Resolve absolute and relative path of page file + */ +export const resolveFilePath = ( + app: App, + { filePath }: PageConfig +): { + filePath: string | null + filePathRelative: string | null +} => { + // empty file path + if (!filePath) { + return { + filePath: null, + filePathRelative: null, + } + } + + // absolute file path + if (isAbsolute(filePath)) { + return { + filePath, + filePathRelative: normalizeSeparator( + relative(app.dir.source(), filePath) + ), + } + } + + // relative file path + return { + filePath: normalizeSeparator(app.dir.source(filePath)), + filePathRelative: filePath, + } +} diff --git a/packages/@vuepress/core/src/page/resolvePageContent.ts b/packages/@vuepress/core/src/page/resolvePageContent.ts new file mode 100644 index 0000000000..dc78934c6c --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageContent.ts @@ -0,0 +1,24 @@ +import { + preprocessMarkdownContent, + PreprocessMarkdownContentResult, + preprocessVueContent, +} from '@vuepress/utils' + +export const resolvePageContent = ( + rawContent: string, + filePath: string | null +): PreprocessMarkdownContentResult => { + if (rawContent && filePath) { + if (filePath.endsWith('.md')) { + return preprocessMarkdownContent(rawContent) + } else if (filePath.endsWith('.vue')) { + return preprocessVueContent(rawContent) + } + } + + return { + content: '', + frontmatter: {}, + excerpt: '', + } +} diff --git a/packages/@vuepress/core/src/page/resolvePageDate.ts b/packages/@vuepress/core/src/page/resolvePageDate.ts new file mode 100644 index 0000000000..72a865d68e --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageDate.ts @@ -0,0 +1,37 @@ +import * as path from 'path' +import { PageFrontmatter } from './createPage' + +const DATE_RE = /(\d{4}-\d{1,2}(-\d{1,2})?)-(.*)/ + +export const resolvePageDate = ( + frontmatter: PageFrontmatter, + filePathRelative: string | null +): string => { + if (!filePathRelative) { + return '' + } + + if (typeof frontmatter.date === 'string') { + return frontmatter.date + } + + const filename = path.parse(filePathRelative).name + + if (filename) { + const matches = filename.match(DATE_RE) + if (matches) { + return matches[1] + } + } + + const dirname = path.basename(path.dirname(filePathRelative)) + + if (dirname) { + const matches = dirname.match(DATE_RE) + if (matches) { + return matches[1] + } + } + + return '' +} diff --git a/packages/@vuepress/core/src/page/resolvePageExcerpt.ts b/packages/@vuepress/core/src/page/resolvePageExcerpt.ts new file mode 100644 index 0000000000..3c0cedfb4b --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageExcerpt.ts @@ -0,0 +1,15 @@ +import { App } from '../app' +import { PageFrontmatter } from './createPage' + +export const resolvePageExcerpt = ( + rawExcerpt: string, + app: App, + frontmatter: PageFrontmatter, + filePathRelative: string | null +): string => { + const { html } = app.markdown.render(rawExcerpt, { + frontmatter: frontmatter, + relativePath: filePathRelative, + }) + return html +} diff --git a/packages/@vuepress/core/src/page/resolvePageHeaders.ts b/packages/@vuepress/core/src/page/resolvePageHeaders.ts new file mode 100644 index 0000000000..0dc2f7b522 --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageHeaders.ts @@ -0,0 +1,13 @@ +import { extractHeaders } from '@vuepress/shared-utils' +import { App } from '../app' + +export interface PageHeader { + level: number + title: string + slug: string +} + +export const resolvePageHeaders = (app: App, content: string): PageHeader[] => { + // TODO: include headers level + return extractHeaders(content, ['h2', 'h3'], app.markdown) as PageHeader[] +} diff --git a/packages/@vuepress/core/src/page/resolvePageKey.ts b/packages/@vuepress/core/src/page/resolvePageKey.ts new file mode 100644 index 0000000000..c87c87a20d --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageKey.ts @@ -0,0 +1,4 @@ +import { hash } from '@vuepress/utils' + +export const resolvePageKey = (identifier: string): string => + `v-${hash(identifier)}` diff --git a/packages/@vuepress/core/src/page/resolvePagePath.ts b/packages/@vuepress/core/src/page/resolvePagePath.ts new file mode 100644 index 0000000000..acbcee57ee --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePagePath.ts @@ -0,0 +1,17 @@ +export const resolvePagePath = ( + permalink: string | null, + pathInferred: string | null +): string => { + // use permalink first + if (permalink) { + return permalink + } + + // use inferred path + if (pathInferred) { + // TODO: handle index file path + return pathInferred.replace(/\/(README|index).html$/i, '/') + } + + return '' +} diff --git a/packages/@vuepress/core/src/page/resolvePagePermalink.ts b/packages/@vuepress/core/src/page/resolvePagePermalink.ts new file mode 100644 index 0000000000..367753400c --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePagePermalink.ts @@ -0,0 +1,34 @@ +import { getPermalink } from '@vuepress/shared-utils' +import { PageConfig, PageFrontmatter } from './createPage' + +export const resolvePagePermalink = ( + config: PageConfig, + frontmatter: PageFrontmatter, + slug: string, + date: string, + pathInferred: string | null +): string | null => { + if (typeof frontmatter.permalink === 'string') { + return frontmatter.permalink + } + + if (config.permalink) { + return config.permalink + } + + const pattern = + typeof frontmatter.permalinkPattern === 'string' + ? frontmatter.permalinkPattern + : config.permalinkPattern || '' + + return ( + getPermalink({ + pattern, + slug, + date, + // TODO: handle localePath + localePath: '/', + regularPath: pathInferred || '', + }) || null + ) +} diff --git a/packages/@vuepress/core/src/page/resolvePageSlug.ts b/packages/@vuepress/core/src/page/resolvePageSlug.ts new file mode 100644 index 0000000000..0da19ded6a --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageSlug.ts @@ -0,0 +1,14 @@ +import * as path from 'path' + +const DATE_RE = /(\d{4}-\d{1,2}(-\d{1,2})?)-(.*)/ + +export const resolvePageSlug = (filePathRelative: string | null): string => { + if (!filePathRelative) { + return '' + } + + const filename = path.parse(filePathRelative).name + const match = filename.match(DATE_RE) + + return match ? match[3] : filename +} diff --git a/packages/@vuepress/core/src/page/resolvePageTitle.ts b/packages/@vuepress/core/src/page/resolvePageTitle.ts new file mode 100644 index 0000000000..274c9b46ba --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageTitle.ts @@ -0,0 +1,15 @@ +import { inferTitle } from '@vuepress/shared-utils' +import { PageFrontmatter } from './createPage' + +export interface PageHeader { + level: number + title: string + slug: string +} + +export const resolvePageTitle = ( + frontmatter: PageFrontmatter, + content: string +): string => { + return inferTitle(frontmatter, content) || '' +} diff --git a/packages/@vuepress/core/src/page/utils.ts b/packages/@vuepress/core/src/page/utils.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@vuepress/core/src/plugin-api/createPluginApi.ts b/packages/@vuepress/core/src/plugin-api/createPluginApi.ts new file mode 100644 index 0000000000..77a116299a --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/createPluginApi.ts @@ -0,0 +1,66 @@ +import { + PluginApiApplyOption, + createPluginApiApplyOption, +} from './createPluginApiApplyOption' +import { + PluginApiOptions, + createPluginApiOptions, +} from './createPluginApiOptions' +import { + PluginApiPlugins, + createPluginApiPlugins, +} from './createPluginApiPlugins' +import { + PluginApiRegisterOptions, + createPluginApiRegisterOptions, +} from './createPluginApiRegisterOptions' +import { PluginApiUse, createPluginApiUse } from './createPluginApiUse' + +export interface PluginApi { + /** + * Plugins that have been used + */ + plugins: PluginApiPlugins + + /** + * All available option objects + */ + options: PluginApiOptions + + /** + * Use a plugin + * + * Should be invoked before `registerOptions()` + */ + use: PluginApiUse + + /** + * Register options of plugins + * + * Should be invoked after `use()`, and before `applyOption()` + */ + registerOptions: PluginApiRegisterOptions + + /** + * Apply a registered option with corresponding params + * + * Should be invoked after `applyOption()` + */ + applyOption: PluginApiApplyOption +} + +export const createPluginApi = (): PluginApi => { + const plugins = createPluginApiPlugins() + const options = createPluginApiOptions() + const use = createPluginApiUse(plugins) + const registerOptions = createPluginApiRegisterOptions(plugins, options) + const applyOption = createPluginApiApplyOption(options) + + return { + plugins, + options, + use, + registerOptions, + applyOption, + } +} diff --git a/packages/@vuepress/core/src/plugin-api/createPluginApiApplyOption.ts b/packages/@vuepress/core/src/plugin-api/createPluginApiApplyOption.ts new file mode 100644 index 0000000000..b1f4b6a7b1 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/createPluginApiApplyOption.ts @@ -0,0 +1,21 @@ +import { OptionsNormalized } from './options' +import { PluginApiOptions } from './createPluginApiOptions' + +export type PluginApiApplyOption = ( + name: T, + ...args: Parameters +) => Promise + +export const createPluginApiApplyOption = ( + options: PluginApiOptions +): PluginApiApplyOption => { + const applyOption: PluginApiApplyOption = async (name, ...args) => { + const option = options[name] + if (option) { + // @ts-ignore + await option.apply(...args) + } + } + + return applyOption +} diff --git a/packages/@vuepress/core/src/plugin-api/createPluginApiOptions.ts b/packages/@vuepress/core/src/plugin-api/createPluginApiOptions.ts new file mode 100644 index 0000000000..d00e3e3b27 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/createPluginApiOptions.ts @@ -0,0 +1,33 @@ +import { Option, OptionsNormalized, createOption } from './options' + +export type PluginApiOptions = { + [K in keyof OptionsNormalized]: Option +} + +export const createPluginApiOptions = (): PluginApiOptions => { + const options: PluginApiOptions = { + // webpack config + alias: createOption(), + define: createOption(), + chainWebpack: createOption(), + + // dev server + beforeDevServer: createOption(), + afterDevServer: createOption(), + + // markdown + extendMarkdown: createOption(), + chainMarkdown: createOption(), + + // files + clientDynamicModules: createOption({ applyInParallel: true }), + + // life cycle hooks + onInitialized: createOption(), + onPrepared: createOption(), + onUpdated: createOption(), + onGenerated: createOption(), + } + + return options +} diff --git a/packages/@vuepress/core/src/plugin-api/createPluginApiPlugins.ts b/packages/@vuepress/core/src/plugin-api/createPluginApiPlugins.ts new file mode 100644 index 0000000000..c91d90620a --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/createPluginApiPlugins.ts @@ -0,0 +1,7 @@ +import { Options } from './options' + +export type PluginApiPlugins = Options[] + +export const createPluginApiPlugins = (): PluginApiPlugins => { + return [] +} diff --git a/packages/@vuepress/core/src/plugin-api/createPluginApiRegisterOptions.ts b/packages/@vuepress/core/src/plugin-api/createPluginApiRegisterOptions.ts new file mode 100644 index 0000000000..b397a10337 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/createPluginApiRegisterOptions.ts @@ -0,0 +1,71 @@ +import { PluginApiOptions } from './createPluginApiOptions' +import { PluginApiPlugins } from './createPluginApiPlugins' +import { + normalizeOptionAlias, + normalizeOptionClientDynamicModules, + normalizeOptionDefine, +} from './options' + +export type PluginApiRegisterOptions = () => void + +export const createPluginApiRegisterOptions = ( + plugins: PluginApiPlugins, + options: PluginApiOptions +): PluginApiRegisterOptions => { + const registerOptions: PluginApiRegisterOptions = () => { + plugins.forEach( + ({ + name: pluginName, + + alias, + define, + clientDynamicModules, + + ...opts + }) => { + /** + * custom options + */ + + if (alias) { + options.alias.add({ + pluginName, + value: normalizeOptionAlias(alias), + }) + } + + if (define) { + options.define.add({ + pluginName, + value: normalizeOptionDefine(define), + }) + } + + if (clientDynamicModules) { + options.clientDynamicModules.add({ + pluginName, + value: normalizeOptionClientDynamicModules( + clientDynamicModules, + pluginName + ), + }) + } + + /** + * common options + */ + + Object.entries(opts).forEach(([key, value]) => { + if (options[key]) { + options[key].add({ + pluginName, + value, + }) + } + }) + } + ) + } + + return registerOptions +} diff --git a/packages/@vuepress/core/src/plugin-api/createPluginApiUse.ts b/packages/@vuepress/core/src/plugin-api/createPluginApiUse.ts new file mode 100644 index 0000000000..d764692051 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/createPluginApiUse.ts @@ -0,0 +1,12 @@ +import { PluginApiPlugins } from './createPluginApiPlugins' +import { Options } from './options' + +export type PluginApiUse = (plugin: Options) => void + +export const createPluginApiUse = (plugins: PluginApiPlugins): PluginApiUse => { + const use: PluginApiUse = (plugin) => { + plugins.push(plugin) + } + + return use +} diff --git a/packages/@vuepress/core/src/plugin-api/index.ts b/packages/@vuepress/core/src/plugin-api/index.ts new file mode 100644 index 0000000000..bce9b07f86 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/index.ts @@ -0,0 +1,7 @@ +export * from './createPluginApi' +export * from './createPluginApiApplyOption' +export * from './createPluginApiOptions' +export * from './createPluginApiPlugins' +export * from './createPluginApiRegisterOptions' +export * from './createPluginApiUse' +export * from './options' diff --git a/packages/@vuepress/core/src/plugin-api/options/createOption.ts b/packages/@vuepress/core/src/plugin-api/options/createOption.ts new file mode 100644 index 0000000000..1cc7f38463 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/options/createOption.ts @@ -0,0 +1,56 @@ +import { OptionsNormalized } from './types' + +export interface OptionItem { + pluginName: string + value: OptionsNormalized[T] +} + +export type OptionApply = ( + ...args: Parameters +) => Promise + +export interface Option { + items: OptionItem[] + add: (item: OptionItem) => void + apply: OptionApply +} + +export const createOption = ({ + applyInParallel = false, +}: { + applyInParallel?: boolean +} = {}): Option => { + const items: OptionItem[] = [] + + const itemApply = async ( + item: OptionItem, + ...args: Parameters + ): Promise => { + try { + // @ts-ignore + await item.value(...args) + } catch (error) { + // TODO: logger + console.log(`${item.pluginName}`) + throw error + } + } + + const option: Option = { + items, + add: (item) => { + option.items.push(item) + }, + apply: async (...args) => { + if (applyInParallel) { + await Promise.all(option.items.map((item) => itemApply(item, ...args))) + } else { + for (const item of option.items) { + await itemApply(item, ...args) + } + } + }, + } + + return option +} diff --git a/packages/@vuepress/core/src/plugin-api/options/index.ts b/packages/@vuepress/core/src/plugin-api/options/index.ts new file mode 100644 index 0000000000..fc6ce3d038 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/options/index.ts @@ -0,0 +1,5 @@ +export * from './createOption' +export * from './normalizeOptionAlias' +export * from './normalizeOptionClientDynamicModules' +export * from './normalizeOptionDefine' +export * from './types' diff --git a/packages/@vuepress/core/src/plugin-api/options/normalizeOptionAlias.ts b/packages/@vuepress/core/src/plugin-api/options/normalizeOptionAlias.ts new file mode 100644 index 0000000000..476c330d57 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/options/normalizeOptionAlias.ts @@ -0,0 +1,14 @@ +import { isFunction } from '@vuepress/utils' +import { Options, OptionsNormalized } from './types' + +export const normalizeOptionAlias = ( + alias: Required['alias'] +): OptionsNormalized['alias'] => (config) => { + // resolve alias object + const aliasValue = isFunction(alias) ? alias() : alias + + // set aliases + Object.entries(aliasValue).forEach(([key, value]) => { + config.resolve.alias.set(key, value) + }) +} diff --git a/packages/@vuepress/core/src/plugin-api/options/normalizeOptionClientDynamicModules.ts b/packages/@vuepress/core/src/plugin-api/options/normalizeOptionClientDynamicModules.ts new file mode 100644 index 0000000000..6b73573052 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/options/normalizeOptionClientDynamicModules.ts @@ -0,0 +1,30 @@ +import { isArray } from '@vuepress/utils' +import { Options, OptionsNormalized } from './types' + +export const normalizeOptionClientDynamicModules = ( + clientDynamicModules: Required['clientDynamicModules'], + pluginName: string +): OptionsNormalized['clientDynamicModules'] => async (app) => { + // resolve clientDynamicModules object + const clientDynamicModulesValue = await clientDynamicModules(app) + + const generatedFiles = isArray(clientDynamicModulesValue) + ? clientDynamicModulesValue + : [clientDynamicModulesValue] + + // set aliases + Promise.all( + generatedFiles.map(async ({ content, filename, dirname }) => { + await app.writeTemp( + `${dirname}/${filename}`, + `\ +/** + * Generated by "${pluginName}" + */ + +${content} +` + ) + }) + ) +} diff --git a/packages/@vuepress/core/src/plugin-api/options/normalizeOptionDefine.ts b/packages/@vuepress/core/src/plugin-api/options/normalizeOptionDefine.ts new file mode 100644 index 0000000000..8bac467286 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/options/normalizeOptionDefine.ts @@ -0,0 +1,17 @@ +import { isFunction } from '@vuepress/utils' +import { Options, OptionsNormalized } from './types' + +export const normalizeOptionDefine = ( + define: Required['define'] +): OptionsNormalized['define'] => (config) => { + // resolve define object + const defineValue = isFunction(define) ? define() : define + + // tap the arguments of DefinePlugin + config.plugin('define').tap(([options]) => { + Object.entries(defineValue).forEach(([key, value]) => { + options[key] = JSON.stringify(value) + }) + return [options] + }) +} diff --git a/packages/@vuepress/core/src/plugin-api/options/types.ts b/packages/@vuepress/core/src/plugin-api/options/types.ts new file mode 100644 index 0000000000..5af354d326 --- /dev/null +++ b/packages/@vuepress/core/src/plugin-api/options/types.ts @@ -0,0 +1,69 @@ +import { Application } from 'express' +import * as Config from 'webpack-chain' +import * as WebpackDevServer from 'webpack-dev-server' +import { App, AppMarkdown } from '../../app' + +export interface GeneratedFile { + content: string + filename: string + dirname?: string +} + +/** + * Options type that exposed to users + */ +export interface Options { + // plugin name + name: string + + // webpack config + alias?: Record | (() => Record) + define?: Record | (() => Record) + chainWebpack?: (config: Config, isServer: boolean) => void + + // TODO: configureWebpack + + // dev server + beforeDevServer?: (expressApp: Application, server: WebpackDevServer) => void + afterDevServer?: (expressApp: Application, server: WebpackDevServer) => void + + // markdown + extendMarkdown?: (md: AppMarkdown) => void + // TODO: ask markdown-it-chain to add types definitions + chainMarkdown?: (config: any) => void + + // files + clientDynamicModules?: ( + app: App + ) => + | GeneratedFile + | GeneratedFile[] + | Promise + | Promise + + // TODO: clientRootMixin + // TODO: enhanceAppFiles -> clientEnhanceAppFiles + // TODO: extendPageData + // TODO: additionalPages + // TODO: globalUIComponents + // TODO: extendCli + + // life cycle hooks + onInitialized?: (app: App) => void | Promise + onPrepared?: (app: App) => void | Promise + onUpdated?: (app: App) => void | Promise + onGenerated?: (app: App, pagePaths: string[]) => void | Promise +} + +/** + * Options type that normalized for internal usage + */ +export interface OptionsNormalized + extends Omit< + Required, + 'name' | 'alias' | 'define' | 'clientDynamicModules' + > { + alias: (config: Config) => void + define: (config: Config) => void + clientDynamicModules: (app: App) => Promise +} diff --git a/packages/@vuepress/core/src/plugins/index.ts b/packages/@vuepress/core/src/plugins/index.ts new file mode 100644 index 0000000000..22634504ed --- /dev/null +++ b/packages/@vuepress/core/src/plugins/index.ts @@ -0,0 +1,4 @@ +export * from './layoutComponentsPlugin' +export * from './pageComponentsPlugin' +export * from './routesPlugin' +export * from './siteDataPlugin' diff --git a/packages/@vuepress/core/src/plugins/layoutComponentsPlugin.ts b/packages/@vuepress/core/src/plugins/layoutComponentsPlugin.ts new file mode 100644 index 0000000000..26ef6caadf --- /dev/null +++ b/packages/@vuepress/core/src/plugins/layoutComponentsPlugin.ts @@ -0,0 +1,29 @@ +import { Plugin } from '../app' + +export const layoutComponentsPlugin: Plugin = { + name: '@vuepress/internal-layout-components', + + async clientDynamicModules(app) { + const layouts = app.themeApi.layouts + + const content = `\ +import { defineAsyncComponent } from 'vue' + +export const layoutComponents = {\ +${layouts + .map( + ({ name, path }) => ` + ${JSON.stringify(name)}: defineAsyncComponent(() => import(${ + app.env.isDebug ? `/* webpackChunkName: "layout-${name}" */` : '' + }${JSON.stringify(path)})),` + ) + .join('')} +}` + + return { + content, + filename: 'layoutComponents.js', + dirname: 'internal', + } + }, +} diff --git a/packages/@vuepress/core/src/plugins/pageComponentsPlugin.ts b/packages/@vuepress/core/src/plugins/pageComponentsPlugin.ts new file mode 100644 index 0000000000..2782d0712c --- /dev/null +++ b/packages/@vuepress/core/src/plugins/pageComponentsPlugin.ts @@ -0,0 +1,28 @@ +import { Plugin } from '../app' + +export const pageComponentsPlugin: Plugin = { + name: '@vuepress/internal-page-components', + + async clientDynamicModules(app) { + const content = `\ +import { defineAsyncComponent } from 'vue' + +export const pageComponents = {\ +${app.pages + .filter(({ filePath }) => filePath) + .map( + ({ key, filePath }) => ` + ${JSON.stringify(key)}: defineAsyncComponent(() => import(${ + app.env.isDebug ? `/* webpackChunkName: "page-${key}" */` : '' + }${JSON.stringify(filePath)})),` + ) + .join('')} +}` + + return { + content, + filename: 'pageComponents.js', + dirname: 'internal', + } + }, +} diff --git a/packages/@vuepress/core/src/plugins/routesPlugin.ts b/packages/@vuepress/core/src/plugins/routesPlugin.ts new file mode 100644 index 0000000000..24045b8a70 --- /dev/null +++ b/packages/@vuepress/core/src/plugins/routesPlugin.ts @@ -0,0 +1,65 @@ +import { Plugin } from '../app' + +export const routesPlugin: Plugin<{}> = { + name: '@vuepress/internal-routes', + + async clientDynamicModules({ pages }) { + const content = `\ +import { Vuepress } from '@vuepress/client/lib/components/Vuepress' + +export const routes = [\ +${pages.map(({ key, path, pathInferred }) => { + const items: string[] = [] + + // page route + items.push(` + { + name: ${JSON.stringify(key)}, + path: ${JSON.stringify(path)}, + component: Vuepress, + },`) + + // redirect from decoded path + const decodedPath = decodeURIComponent(path) + if (decodedPath !== path) { + items.push(` + { + path: ${JSON.stringify(decodedPath)}, + redirect: ${JSON.stringify(path)}, + },`) + } + + // redirect from index path + if (/\/$/.test(path)) { + items.push(` + { + path: ${JSON.stringify(path + 'index.html')}, + redirect: ${JSON.stringify(path)}, + },`) + } + + // redirect from inferred path + if (pathInferred !== null && pathInferred !== path) { + items.push(` + { + path: ${JSON.stringify(pathInferred)}, + redirect: ${JSON.stringify(path)}, + },`) + } + + return items.join('') +})} + { + path: '/:catchAll(.*)', + component: Vuepress, + }, +] +` + + return { + content, + filename: 'routes.js', + dirname: 'internal', + } + }, +} diff --git a/packages/@vuepress/core/src/plugins/siteDataPlugin.ts b/packages/@vuepress/core/src/plugins/siteDataPlugin.ts new file mode 100644 index 0000000000..3bd415af5f --- /dev/null +++ b/packages/@vuepress/core/src/plugins/siteDataPlugin.ts @@ -0,0 +1,17 @@ +import { Plugin, createClientData } from '../app' + +export const siteDataPlugin: Plugin<{}> = { + name: '@vuepress/internal-site-data', + + async clientDynamicModules(app) { + const content = `\ +export const siteData = ${JSON.stringify(createClientData(app), null, 2)} +` + + return { + content, + filename: 'siteData.js', + dirname: 'internal', + } + }, +} diff --git a/packages/@vuepress/core/src/theme-api/createThemeApi.ts b/packages/@vuepress/core/src/theme-api/createThemeApi.ts new file mode 100644 index 0000000000..edaa274c0b --- /dev/null +++ b/packages/@vuepress/core/src/theme-api/createThemeApi.ts @@ -0,0 +1,48 @@ +import { fs } from '@vuepress/utils' +import { App } from '../app' +import { ThemeInfo, resolveThemeInfo } from './resolveThemeInfo' +import { ThemeLayout, resolveThemeLayouts } from './resolveThemeLayouts' + +export interface ThemeApi { + /** + * Current theme + */ + theme: ThemeInfo + + /** + * Parent theme + */ + parentTheme: ThemeInfo | null + + /** + * Layouts + */ + layouts: ThemeLayout[] +} + +export const createThemeApi = (app: App): ThemeApi => { + // use local theme or not + const localThemePath = app.dir.source('.vuepress/theme') + const hasLocalTheme = fs.existsSync(localThemePath) + + const theme = resolveThemeInfo( + app, + hasLocalTheme ? localThemePath : app.options.theme + ) + + const parentTheme = theme.plugin.extend + ? resolveThemeInfo(app, theme.plugin.extend) + : null + + const layouts = [ + ...(parentTheme ? resolveThemeLayouts(parentTheme) : []), + // TODO: parent theme and current theme may have layouts of same name + ...resolveThemeLayouts(theme), + ] + + return { + theme, + parentTheme, + layouts, + } +} diff --git a/packages/@vuepress/core/src/theme-api/index.ts b/packages/@vuepress/core/src/theme-api/index.ts new file mode 100644 index 0000000000..1d4b09c3be --- /dev/null +++ b/packages/@vuepress/core/src/theme-api/index.ts @@ -0,0 +1 @@ +export * from './createThemeApi' diff --git a/packages/@vuepress/core/src/theme-api/resolveThemeInfo.ts b/packages/@vuepress/core/src/theme-api/resolveThemeInfo.ts new file mode 100644 index 0000000000..8aaed10a6b --- /dev/null +++ b/packages/@vuepress/core/src/theme-api/resolveThemeInfo.ts @@ -0,0 +1,43 @@ +import { basename } from 'path' +import { moduleResolver } from '@vuepress/shared-utils' +import { App, ThemeOptions, normalizePlugin } from '../app' + +// TODO: migrate module resolver +const cwd = process.cwd() +const resolver = moduleResolver.getThemeResolver(cwd) + +export interface ThemeInfo { + /** + * Path of theme + */ + path: string + + /** + * Plugin options of theme + */ + plugin: ThemeOptions +} + +export const resolveThemeInfo = (app: App, themeName: string): ThemeInfo => { + // TODO: for current theme resolver, the `entry` is the path string + const result = resolver.resolve(themeName, cwd) + + if (!result.entry) { + throw new Error() + } + + const plugin = normalizePlugin( + app, + require(result.entry), + app.options.themeConfig + ) + + // TODO: normalize theme path + // TODO: normalize theme plugin name + return { + path: result.entry.match(/.(js|ts)$/) + ? basename(result.entry) + : result.entry, + plugin, + } +} diff --git a/packages/@vuepress/core/src/theme-api/resolveThemeLayouts.ts b/packages/@vuepress/core/src/theme-api/resolveThemeLayouts.ts new file mode 100644 index 0000000000..50a0abe12b --- /dev/null +++ b/packages/@vuepress/core/src/theme-api/resolveThemeLayouts.ts @@ -0,0 +1,30 @@ +import { resolve } from 'path' +import { fs } from '@vuepress/utils' +import { ThemeInfo } from './resolveThemeInfo' + +export interface ThemeLayout { + /** + * Path of layout + */ + path: string + + /** + * Name of layout + */ + name: string +} + +export const resolveThemeLayouts = (themeInfo: ThemeInfo): ThemeLayout[] => { + const dirLayout = resolve(themeInfo.path, 'layouts') + + const files = fs.readdirSync(dirLayout) + + const layouts = files + .filter((file) => file.endsWith('.vue')) + .map((file) => ({ + name: file.replace(/.vue$/, ''), + path: resolve(dirLayout, file), + })) + + return layouts +} diff --git a/packages/@vuepress/core/tsconfig.json b/packages/@vuepress/core/tsconfig.json new file mode 100644 index 0000000000..ce870b84d4 --- /dev/null +++ b/packages/@vuepress/core/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [{ "path": "../client" }, { "path": "../utils" }] +} diff --git a/packages/@vuepress/theme-default/package.json b/packages/@vuepress/theme-default/package.json new file mode 100644 index 0000000000..11d3a4e091 --- /dev/null +++ b/packages/@vuepress/theme-default/package.json @@ -0,0 +1,30 @@ +{ + "name": "@vuepress/theme-default", + "version": "2.0.0-alpha.0", + "description": "Default theme of VuePress", + "keywords": [ + "vuepress", + "theme", + "default" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + } +} diff --git a/packages/@vuepress/theme-default/src/index.ts b/packages/@vuepress/theme-default/src/index.ts new file mode 100644 index 0000000000..c9f6f047dc --- /dev/null +++ b/packages/@vuepress/theme-default/src/index.ts @@ -0,0 +1 @@ +export * from './types' diff --git a/packages/@vuepress/theme-default/src/types.ts b/packages/@vuepress/theme-default/src/types.ts new file mode 100644 index 0000000000..97c50a3f23 --- /dev/null +++ b/packages/@vuepress/theme-default/src/types.ts @@ -0,0 +1,5 @@ +export interface DefaultThemeConfig { + logo?: string + navbar?: boolean + // TODO +} diff --git a/packages/@vuepress/theme-default/tsconfig.json b/packages/@vuepress/theme-default/tsconfig.json new file mode 100644 index 0000000000..efb524260e --- /dev/null +++ b/packages/@vuepress/theme-default/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"] +} diff --git a/packages/@vuepress/theme-vue/package.json b/packages/@vuepress/theme-vue/package.json new file mode 100644 index 0000000000..d64de62fdb --- /dev/null +++ b/packages/@vuepress/theme-vue/package.json @@ -0,0 +1,33 @@ +{ + "name": "@vuepress/theme-vue", + "version": "2.0.0-alpha.0", + "description": "Vue theme of VuePress", + "keywords": [ + "vuepress", + "theme", + "vue" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + }, + "dependencies": { + "@vuepress/theme-default": "2.0.0-alpha.0" + } +} diff --git a/packages/@vuepress/theme-vue/src/index.ts b/packages/@vuepress/theme-vue/src/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@vuepress/theme-vue/tsconfig.json b/packages/@vuepress/theme-vue/tsconfig.json new file mode 100644 index 0000000000..dc4b16871f --- /dev/null +++ b/packages/@vuepress/theme-vue/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [{ "path": "../theme-default" }] +} diff --git a/packages/@vuepress/utils/__tests__/normalizeSeparator.spec.ts b/packages/@vuepress/utils/__tests__/normalizeSeparator.spec.ts new file mode 100644 index 0000000000..4f0c7ea2ad --- /dev/null +++ b/packages/@vuepress/utils/__tests__/normalizeSeparator.spec.ts @@ -0,0 +1,11 @@ +import { normalizeSeparator } from '@vuepress/utils' + +describe('utils > normalizeSeparator', () => { + it('should transform windows separator to posix separator', () => { + expect(normalizeSeparator('c:\\foo\\bar\\')).toBe('c:/foo/bar/') + }) + + it('should keep posix separator as is', () => { + expect(normalizeSeparator('/foo/bar/')).toBe('/foo/bar/') + }) +}) diff --git a/packages/@vuepress/utils/__tests__/preprocessMarkdownContent.spec.ts b/packages/@vuepress/utils/__tests__/preprocessMarkdownContent.spec.ts new file mode 100644 index 0000000000..0f88f3ed77 --- /dev/null +++ b/packages/@vuepress/utils/__tests__/preprocessMarkdownContent.spec.ts @@ -0,0 +1,177 @@ +import { preprocessMarkdownContent } from '@vuepress/utils' + +const rawContentWithoutFrontmatterAndExcerpt = `\ +# h1 + +Foo bar +` + +const rawContentWithoutFrontmatter = `\ +# h1 +Foo bar + + + +hello +` + +const rawContentWithoutExcerpt = `\ +--- +foo: bar +--- +# h1 +Foo bar +` + +const rawContent = `\ +--- +foo: bar +--- +# h1 +Foo bar + + + +hello +` + +const rawContentWithWrongFrontmatter = `\ + +--- +foo: bar +--- +# h1 +Foo bar + + + +hello +` + +const stripFrontmatter = (str: string) => str.replace(/^---\n.*\n---\n/s, '') +const extractExcerpt = (str: string) => + str.match(/^(.*)/s)?.[1] || '' + +describe('utils > preprocessMarkdownContent', () => { + describe('content', () => { + it('should get stripped content 1', () => { + const { content } = preprocessMarkdownContent( + rawContentWithoutFrontmatterAndExcerpt + ) + + expect(content).toBe( + stripFrontmatter(rawContentWithoutFrontmatterAndExcerpt) + ) + }) + + it('should get stripped content 2', () => { + const { content } = preprocessMarkdownContent( + rawContentWithoutFrontmatter + ) + + expect(content).toBe(stripFrontmatter(rawContentWithoutFrontmatter)) + }) + + it('should get stripped content 3', () => { + const { content } = preprocessMarkdownContent(rawContentWithoutExcerpt) + + expect(content).toBe(stripFrontmatter(rawContentWithoutExcerpt)) + }) + + it('should get stripped content 4', () => { + const { content } = preprocessMarkdownContent(rawContent) + + expect(content).toBe(stripFrontmatter(rawContent)) + }) + + it('should get stripped content 5', () => { + const { content } = preprocessMarkdownContent( + rawContentWithWrongFrontmatter + ) + + expect(content).toBe(stripFrontmatter(rawContentWithWrongFrontmatter)) + }) + }) + + describe('frontmatter', () => { + it('should get correct frontmatter 1', () => { + const { frontmatter } = preprocessMarkdownContent( + rawContentWithoutExcerpt + ) + + expect(frontmatter).toEqual({ foo: 'bar' }) + }) + + it('should get correct frontmatter 2', () => { + const { frontmatter } = preprocessMarkdownContent(rawContent) + + expect(frontmatter).toEqual({ foo: 'bar' }) + }) + + it('should get empty frontmatter 1', () => { + const { frontmatter } = preprocessMarkdownContent( + rawContentWithoutFrontmatterAndExcerpt + ) + + expect(frontmatter).toEqual({}) + }) + + it('should get empty frontmatter 2', () => { + const { frontmatter } = preprocessMarkdownContent( + rawContentWithoutFrontmatter + ) + + expect(frontmatter).toEqual({}) + }) + + it('should get empty frontmatter 3', () => { + const { frontmatter } = preprocessMarkdownContent( + rawContentWithWrongFrontmatter + ) + + expect(frontmatter).toEqual({}) + }) + }) + + describe('excerpt', () => { + it('should get correct excerpt 1', () => { + const { excerpt } = preprocessMarkdownContent( + rawContentWithoutFrontmatter + ) + + expect(excerpt).toBe( + extractExcerpt(stripFrontmatter(rawContentWithoutFrontmatter)) + ) + }) + + it('should get correct excerpt 2', () => { + const { excerpt } = preprocessMarkdownContent(rawContent) + + expect(excerpt).toBe(extractExcerpt(stripFrontmatter(rawContent))) + }) + + it('should get correct excerpt 3', () => { + const { excerpt } = preprocessMarkdownContent( + rawContentWithWrongFrontmatter + ) + + expect(excerpt).toBe( + extractExcerpt(stripFrontmatter(rawContentWithWrongFrontmatter)) + ) + }) + + it('should get empty excerpt 1', () => { + const { excerpt } = preprocessMarkdownContent( + rawContentWithoutFrontmatterAndExcerpt + ) + + expect(excerpt).toBe('') + }) + + it('should get empty excerpt 2', () => { + const { excerpt } = preprocessMarkdownContent(rawContentWithoutExcerpt) + + expect(excerpt).toBe('') + }) + }) +}) diff --git a/packages/@vuepress/utils/__tests__/preprocessVueContent.spec.ts b/packages/@vuepress/utils/__tests__/preprocessVueContent.spec.ts new file mode 100644 index 0000000000..1fc1ac9ba8 --- /dev/null +++ b/packages/@vuepress/utils/__tests__/preprocessVueContent.spec.ts @@ -0,0 +1,60 @@ +import { preprocessVueContent } from '@vuepress/utils' + +const rawContent = `\ + +foo: bar + + + +` +const rawContentWithoutFrontmatter = `\ + +` + +describe('utils > preprocessVueContent', () => { + describe('content', () => { + it('should get empty content 1', () => { + const { content } = preprocessVueContent(rawContent) + + expect(content).toBe('') + }) + + it('should get empty content 2', () => { + const { content } = preprocessVueContent(rawContentWithoutFrontmatter) + + expect(content).toBe('') + }) + }) + + describe('frontmatter', () => { + it('should get correct frontmatter', () => { + const { frontmatter } = preprocessVueContent(rawContent) + + expect(frontmatter).toEqual({ foo: 'bar' }) + }) + + it('should get empty frontmatter', () => { + const { frontmatter } = preprocessVueContent(rawContentWithoutFrontmatter) + + expect(frontmatter).toEqual({}) + }) + }) + + describe('excerpt', () => { + it('should get empty excerpt 1', () => { + const { excerpt } = preprocessVueContent(rawContent) + + expect(excerpt).toBe('') + }) + + it('should get empty excerpt 2', () => { + const { excerpt } = preprocessVueContent(rawContentWithoutFrontmatter) + + expect(excerpt).toBe('') + }) + }) +}) diff --git a/packages/@vuepress/utils/package.json b/packages/@vuepress/utils/package.json new file mode 100644 index 0000000000..c363774c3b --- /dev/null +++ b/packages/@vuepress/utils/package.json @@ -0,0 +1,40 @@ +{ + "name": "@vuepress/utils", + "version": "2.0.0-alpha.0", + "description": "Utils package of VuePress", + "keywords": [ + "vuepress", + "utils" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + }, + "dependencies": { + "@types/fs-extra": "^8.1.0", + "@types/hash-sum": "^1.0.0", + "@vue/compiler-sfc": "^3.0.0-beta.10", + "@vue/shared": "^3.0.0-beta.10", + "fs-extra": "^9.0.0", + "globby": "^11.0.0", + "gray-matter": "^4.0.2", + "hash-sum": "^2.0.0", + "toml": "^3.0.0" + } +} diff --git a/packages/@vuepress/utils/src/index.ts b/packages/@vuepress/utils/src/index.ts new file mode 100644 index 0000000000..47de6f5d88 --- /dev/null +++ b/packages/@vuepress/utils/src/index.ts @@ -0,0 +1,10 @@ +import { isArray, isFunction, isString } from '@vue/shared' +import * as fs from 'fs-extra' +import * as globby from 'globby' +import hash = require('hash-sum') + +export { fs, globby, hash, isArray, isFunction, isString } + +export * from './normalizeSeparator' +export * from './preprocessMarkdownContent' +export * from './preprocessVueContent' diff --git a/packages/@vuepress/utils/src/normalizeSeparator.ts b/packages/@vuepress/utils/src/normalizeSeparator.ts new file mode 100644 index 0000000000..4a857b590f --- /dev/null +++ b/packages/@vuepress/utils/src/normalizeSeparator.ts @@ -0,0 +1,7 @@ +/** + * Normalize the path segment separator to posix-style + * + * @see https://github.com/micromatch/micromatch#backslashes + */ +export const normalizeSeparator = (filePath: string): string => + filePath.replace(/\\/g, '/') diff --git a/packages/@vuepress/utils/src/preprocessMarkdownContent.ts b/packages/@vuepress/utils/src/preprocessMarkdownContent.ts new file mode 100644 index 0000000000..752d41c1c0 --- /dev/null +++ b/packages/@vuepress/utils/src/preprocessMarkdownContent.ts @@ -0,0 +1,32 @@ +import * as matter from 'gray-matter' +import * as toml from 'toml' + +export interface PreprocessMarkdownContentResult { + content: string + // eslint-disable-next-line @typescript-eslint/no-explicit-any + frontmatter: Record + excerpt: string +} + +export const preprocessMarkdownContent = ( + rawContent: string +): PreprocessMarkdownContentResult => { + // `excerpt` won't be `undefined` with our options + // so here we add /* istanbul ignore next */ + // to ignore `excerpt = ''` branch + + /* istanbul ignore next */ + const { content, data, excerpt = '' } = matter(rawContent, { + // eslint-disable-next-line @typescript-eslint/camelcase + excerpt_separator: '', + engines: { + toml: toml.parse.bind(toml), + }, + }) + + return { + content, + frontmatter: data, + excerpt, + } +} diff --git a/packages/@vuepress/utils/src/preprocessVueContent.ts b/packages/@vuepress/utils/src/preprocessVueContent.ts new file mode 100644 index 0000000000..65ea6120ca --- /dev/null +++ b/packages/@vuepress/utils/src/preprocessVueContent.ts @@ -0,0 +1,23 @@ +import { parse } from '@vue/compiler-sfc' +import { + preprocessMarkdownContent, + PreprocessMarkdownContentResult, +} from './preprocessMarkdownContent' + +export const preprocessVueContent = ( + rawContent: string +): PreprocessMarkdownContentResult => { + const { + descriptor: { customBlocks }, + } = parse(rawContent, { + sourceMap: false, + }) + + const frontmatterBlock = customBlocks.find( + ({ type }) => type === 'frontmatter' + ) + + const frontmatterContent = frontmatterBlock?.content || '' + + return preprocessMarkdownContent(`---\n${frontmatterContent}\n---`) +} diff --git a/packages/@vuepress/utils/tsconfig.json b/packages/@vuepress/utils/tsconfig.json new file mode 100644 index 0000000000..efb524260e --- /dev/null +++ b/packages/@vuepress/utils/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"] +} diff --git a/packages/docs/package.json b/packages/docs/package.json new file mode 100644 index 0000000000..1aec946a78 --- /dev/null +++ b/packages/docs/package.json @@ -0,0 +1,9 @@ +{ + "name": "docs", + "version": "2.0.0-alpha.0", + "private": true, + "scripts": { + "build": "vuepress build src --temp .temp", + "dev": "vuepress dev src --temp .temp --no-cache" + } +} diff --git a/packages/docs/src/README.md b/packages/docs/src/README.md new file mode 100644 index 0000000000..0e001b5c7f --- /dev/null +++ b/packages/docs/src/README.md @@ -0,0 +1,5 @@ +--- +home: true +--- + + diff --git a/packages/vuepress/package.json b/packages/vuepress/package.json new file mode 100644 index 0000000000..5b2696a3f0 --- /dev/null +++ b/packages/vuepress/package.json @@ -0,0 +1,39 @@ +{ + "name": "vuepress", + "version": "2.0.0-alpha.0", + "description": "Vue-powered Static Site Generator", + "keywords": [ + "documentation", + "generator", + "vue", + "vuepress" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "bin": { + "vuepress": "lib/index.js" + }, + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b", + "clean": "rimraf lib tsconfig.tsbuildinfo", + "lint": "eslint --ext .ts src" + }, + "dependencies": { + "@vuepress/bundler-webpack": "2.0.0-alpha.0", + "@vuepress/cli": "2.0.0-alpha.0", + "@vuepress/theme-default": "2.0.0-alpha.0" + } +} diff --git a/packages/vuepress/src/index.ts b/packages/vuepress/src/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/vuepress/tsconfig.json b/packages/vuepress/tsconfig.json new file mode 100644 index 0000000000..c99078e620 --- /dev/null +++ b/packages/vuepress/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [ + { "path": "../@vuepress/bundler-webpack" }, + { "path": "../@vuepress/cli" }, + { "path": "../@vuepress/client" }, + { "path": "../@vuepress/core" }, + { "path": "../@vuepress/theme-default" }, + { "path": "../@vuepress/utils" } + ] +} diff --git a/playground/.gitignore b/playground/.gitignore new file mode 100644 index 0000000000..882c6802aa --- /dev/null +++ b/playground/.gitignore @@ -0,0 +1,2 @@ +dist +webpack-dev-config.json diff --git a/playground/build.ts b/playground/build.ts new file mode 100644 index 0000000000..84b3cca6b6 --- /dev/null +++ b/playground/build.ts @@ -0,0 +1,53 @@ +import { resolve } from 'path' +import { createApp, build } from '@vuepress/core/src' + +const main = async (): Promise => { + process.env.NODE_ENV = 'development' + + const app = createApp({ + title: 'title', + description: 'description', + head: [], + locales: {}, + + base: '/', + host: '0.0.0.0', + port: 8080, + debug: true, + open: false, + + templateDev: require.resolve('@vuepress/client/templates/index.dev.html'), + templateSSR: require.resolve('@vuepress/client/templates/index.ssr.html'), + + dirSource: resolve(__dirname, 'src'), + dirDest: resolve(__dirname, 'dist'), + dirTemp: resolve(__dirname, '.temp'), + + // Theme + theme: '@vuepress/default', + themeConfig: {}, + + plugins: [[resolve(__dirname, 'test-plugin.js')]], + }) + + // app.use(resolve(__dirname, 'test-plugin.js')) + // app.use(require('./test-plugin')) + + // app.pluginApi.use({ + // name: 'test', + // multiple: false, + // alias: { + // test: 'alias', + // }, + // chainWebpack: config => config.resolve.alias.set('test2', 'chainWebpack'), + // define: { + // __TEST__: 'define', + // }, + // }) + + await build(app) + + // console.log(app.pages) +} + +main() diff --git a/playground/dev.ts b/playground/dev.ts new file mode 100644 index 0000000000..4a6fd1e78a --- /dev/null +++ b/playground/dev.ts @@ -0,0 +1,59 @@ +import { resolve } from 'path' +import { createApp } from '@vuepress/core/src' +import { createDevConfig } from '@vuepress/bundler-webpack/src/dev' + +const main = async (): Promise => { + process.env.NODE_ENV = 'development' + + const app = createApp({ + title: 'title', + description: 'description', + head: [], + locales: {}, + + base: '/', + host: '0.0.0.0', + port: 8080, + debug: true, + open: false, + + templateDev: require.resolve('@vuepress/client/templates/index.dev.html'), + templateSSR: require.resolve('@vuepress/client/templates/index.ssr.html'), + + dirSource: resolve(__dirname, 'src'), + dirDest: resolve(__dirname, 'dist'), + dirTemp: resolve(__dirname, '.temp'), + + // Theme + theme: '@vuepress/default', + themeConfig: {}, + + plugins: [[resolve(__dirname, 'test-plugin.js')]], + }) + + // app.use(resolve(__dirname, 'test-plugin.js')) + // app.use(require('./test-plugin')) + + // app.pluginApi.use({ + // name: 'test', + // multiple: false, + // alias: { + // test: 'alias', + // }, + // chainWebpack: config => config.resolve.alias.set('test2', 'chainWebpack'), + // define: { + // __TEST__: 'define', + // }, + // }) + + await app.dev() + + require('fs').writeFileSync( + 'webpack-dev-config.json', + JSON.stringify(createDevConfig(app).toConfig(), null, ' ') + ) + + // console.log(app.pages) +} + +main() diff --git a/playground/package.json b/playground/package.json new file mode 100644 index 0000000000..d24022dc37 --- /dev/null +++ b/playground/package.json @@ -0,0 +1,13 @@ +{ + "name": "playground", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "ts-node build.ts", + "dev": "ts-node dev.ts" + }, + "devDependencies": { + "@vue/component-compiler-utils": "^3.1.2", + "ts-node": "^8.10.1" + } +} diff --git a/playground/src/.vuepress/public/logo.png b/playground/src/.vuepress/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6beaff060d4e383169f86b007e13ef7313d393 GIT binary patch literal 153793 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%0Aq;h1Y(#@xNill5DXwfr+?5g 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%0Aq;h1Y(#@xNill5DXwfr+?5g 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 + + + + diff --git a/playground/src/.vuepress/theme/index.ts b/playground/src/.vuepress/theme/index.ts new file mode 100644 index 0000000000..4e0c81c178 --- /dev/null +++ b/playground/src/.vuepress/theme/index.ts @@ -0,0 +1,7 @@ +import { Theme } from '@vuepress/core' + +const theme: Theme = { + name: 'local-theme', +} + +export = theme diff --git a/playground/src/.vuepress/theme/layouts/Layout.vue b/playground/src/.vuepress/theme/layouts/Layout.vue new file mode 100644 index 0000000000..40f2a01ef6 --- /dev/null +++ b/playground/src/.vuepress/theme/layouts/Layout.vue @@ -0,0 +1,17 @@ + + + diff --git a/playground/src/.vuepress/theme/shims-vue.d.ts b/playground/src/.vuepress/theme/shims-vue.d.ts new file mode 100644 index 0000000000..66be827f4f --- /dev/null +++ b/playground/src/.vuepress/theme/shims-vue.d.ts @@ -0,0 +1,4 @@ +declare module '*.vue' { + import { Component } from 'vue' + export default Component +} diff --git a/playground/src/README.md b/playground/src/README.md new file mode 100644 index 0000000000..8316ec60cf --- /dev/null +++ b/playground/src/README.md @@ -0,0 +1,12 @@ +--- +home: true +title: 'frontmatter title' +--- + +Nav + +- About + +# Home + +Hello, world diff --git a/playground/src/about/README.md b/playground/src/about/README.md new file mode 100644 index 0000000000..2bd9122f73 --- /dev/null +++ b/playground/src/about/README.md @@ -0,0 +1,27 @@ +--- +title: about title +--- + +Nav + +- Home + +# About + +- Title: {{ page.title }} +- Path: {{ page.path }} +- Key: {{ page.key }} + + diff --git a/playground/test-plugin.js b/playground/test-plugin.js new file mode 100644 index 0000000000..f2523fc2b1 --- /dev/null +++ b/playground/test-plugin.js @@ -0,0 +1,11 @@ +module.exports = { + name: 'test', + multiple: false, + alias: { + test: 'alias', + }, + chainWebpack: (config) => config.resolve.alias.set('test2', 'chainWebpack'), + define: { + __TEST__: 'define', + }, +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000000..138415b1a2 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "lib": ["DOM", "ES2020"], + "module": "commonjs", + "moduleResolution": "node", + "newLine": "lf", + "noEmitOnError": true, + "noImplicitAny": false, + "resolveJsonModule": true, + "skipLibCheck": true, // TODO: temporally enable for webpack 5 + "sourceMap": true, + "strict": true, + "strictNullChecks": true, + "target": "es2015" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..90c357327c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.base.json", + "references": [ + { "path": "./packages/@vuepress/bundler-webpack" }, + { "path": "./packages/@vuepress/cli" }, + { "path": "./packages/@vuepress/client" }, + { "path": "./packages/@vuepress/core" }, + { "path": "./packages/@vuepress/theme-default" }, + { "path": "./packages/@vuepress/theme-vue" }, + { "path": "./packages/@vuepress/utils" }, + { "path": "./packages/vuepress" } + ], + "files": [] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..4e79be1aa2 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,11419 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" + integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.6" + "@babel/parser" "^7.9.6" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" + integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== + dependencies: + "@babel/types" "^7.9.6" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-replace-supers@^7.8.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" + integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== + +"@babel/helpers@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" + integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" + integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" + integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" + integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/runtime@^7.9.2": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" + integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.3.3", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" + integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" + integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== + dependencies: + "@babel/helper-validator-identifier" "^7.9.5" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@commitlint/cli@^8.3.5": + version "8.3.5" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-8.3.5.tgz#6d93a3a8b2437fa978999d3f6a336bcc70be3fd3" + integrity sha512-6+L0vbw55UEdht71pgWOE55SRgb+8OHcEwGDB234VlIBFGK9P2QOBU7MHiYJ5cjdjCQ0rReNrGjOHmJ99jwf0w== + dependencies: + "@commitlint/format" "^8.3.4" + "@commitlint/lint" "^8.3.5" + "@commitlint/load" "^8.3.5" + "@commitlint/read" "^8.3.4" + babel-polyfill "6.26.0" + chalk "2.4.2" + get-stdin "7.0.0" + lodash "4.17.15" + meow "5.0.0" + resolve-from "5.0.0" + resolve-global "1.0.0" + +"@commitlint/config-conventional@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz#fed13b3711690663b176c1f6b39c205a565618d2" + integrity sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g== + dependencies: + conventional-changelog-conventionalcommits "4.2.1" + +"@commitlint/ensure@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-8.3.4.tgz#6931677e4ca0fde71686ae3b7a367261647a341d" + integrity sha512-8NW77VxviLhD16O3EUd02lApMFnrHexq10YS4F4NftNoErKbKaJ0YYedktk2boKrtNRf/gQHY/Qf65edPx4ipw== + dependencies: + lodash "4.17.15" + +"@commitlint/execute-rule@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.3.4.tgz#1b63f0713b197889d90b76f9eea1abc010d256b1" + integrity sha512-f4HigYjeIBn9f7OuNv5zh2y5vWaAhNFrfeul8CRJDy82l3Y+09lxOTGxfF3uMXKrZq4LmuK6qvvRCZ8mUrVvzQ== + +"@commitlint/format@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-8.3.4.tgz#7cd1f0ba5a3289c8d14d7dac29ee1fc1597fe1d9" + integrity sha512-809wlQ/ND6CLZON+w2Rb3YM2TLNDfU2xyyqpZeqzf2reJNpySMSUAeaO/fNDJSOKIsOsR3bI01rGu6hv28k+Nw== + dependencies: + chalk "^2.0.1" + +"@commitlint/is-ignored@^8.3.5": + version "8.3.5" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-8.3.5.tgz#e6f59496e1b1ce58020d519cd578ad0f43169199" + integrity sha512-Zo+8a6gJLFDTqyNRx53wQi/XTiz8mncvmWf/4oRG+6WRcBfjSSHY7KPVj5Y6UaLy2EgZ0WQ2Tt6RdTDeQiQplA== + dependencies: + semver "6.3.0" + +"@commitlint/lint@^8.3.5": + version "8.3.5" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-8.3.5.tgz#627e75adb1cc803cc723e33cc2ba4aa27cbb9f0c" + integrity sha512-02AkI0a6PU6rzqUvuDkSi6rDQ2hUgkq9GpmdJqfai5bDbxx2939mK4ZO+7apbIh4H6Pae7EpYi7ffxuJgm+3hQ== + dependencies: + "@commitlint/is-ignored" "^8.3.5" + "@commitlint/parse" "^8.3.4" + "@commitlint/rules" "^8.3.4" + babel-runtime "^6.23.0" + lodash "4.17.15" + +"@commitlint/load@^8.3.5": + version "8.3.5" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.3.5.tgz#3f059225ede92166ba94cf4c48e3d67c8b08b18a" + integrity sha512-poF7R1CtQvIXRmVIe63FjSQmN9KDqjRtU5A6hxqXBga87yB2VUJzic85TV6PcQc+wStk52cjrMI+g0zFx+Zxrw== + dependencies: + "@commitlint/execute-rule" "^8.3.4" + "@commitlint/resolve-extends" "^8.3.5" + babel-runtime "^6.23.0" + chalk "2.4.2" + cosmiconfig "^5.2.0" + lodash "4.17.15" + resolve-from "^5.0.0" + +"@commitlint/message@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-8.3.4.tgz#b4e50d14aa6e15a5ad0767b952a7953f3681d768" + integrity sha512-nEj5tknoOKXqBsaQtCtgPcsAaf5VCg3+fWhss4Vmtq40633xLq0irkdDdMEsYIx8rGR0XPBTukqzln9kAWCkcA== + +"@commitlint/parse@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-8.3.4.tgz#d741f8b9104b35d0f4c10938165b20cbf167f81e" + integrity sha512-b3uQvpUQWC20EBfKSfMRnyx5Wc4Cn778bVeVOFErF/cXQK725L1bYFvPnEjQO/GT8yGVzq2wtLaoEqjm1NJ/Bw== + dependencies: + conventional-changelog-angular "^1.3.3" + conventional-commits-parser "^3.0.0" + lodash "^4.17.11" + +"@commitlint/read@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-8.3.4.tgz#81a34283d8cd7b2acdf57829a91761e9c7791455" + integrity sha512-FKv1kHPrvcAG5j+OSbd41IWexsbLhfIXpxVC/YwQZO+FR0EHmygxQNYs66r+GnhD1EfYJYM4WQIqd5bJRx6OIw== + dependencies: + "@commitlint/top-level" "^8.3.4" + "@marionebl/sander" "^0.6.0" + babel-runtime "^6.23.0" + git-raw-commits "^2.0.0" + +"@commitlint/resolve-extends@^8.3.5": + version "8.3.5" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.3.5.tgz#8fff800f292ac217ae30b1862f5f9a84b278310a" + integrity sha512-nHhFAK29qiXNe6oH6uG5wqBnCR+BQnxlBW/q5fjtxIaQALgfoNLHwLS9exzbIRFqwJckpR6yMCfgMbmbAOtklQ== + dependencies: + import-fresh "^3.0.0" + lodash "4.17.15" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/rules@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-8.3.4.tgz#41da7e16c6b89af268fe81c87a158c1fd2ac82b1" + integrity sha512-xuC9dlqD5xgAoDFgnbs578cJySvwOSkMLQyZADb1xD5n7BNcUJfP8WjT9W1Aw8K3Wf8+Ym/ysr9FZHXInLeaRg== + dependencies: + "@commitlint/ensure" "^8.3.4" + "@commitlint/message" "^8.3.4" + "@commitlint/to-lines" "^8.3.4" + babel-runtime "^6.23.0" + +"@commitlint/to-lines@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-8.3.4.tgz#ce24963b6d86dbe51d88d5e3028ab28f38562e2e" + integrity sha512-5AvcdwRsMIVq0lrzXTwpbbG5fKRTWcHkhn/hCXJJ9pm1JidsnidS1y0RGkb3O50TEHGewhXwNoavxW9VToscUA== + +"@commitlint/top-level@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-8.3.4.tgz#803fc6e8f5be5efa5f3551761acfca961f1d8685" + integrity sha512-nOaeLBbAqSZNpKgEtO6NAxmui1G8ZvLG+0wb4rvv6mWhPDzK1GNZkCd8FUZPahCoJ1iHDoatw7F8BbJLg4nDjg== + dependencies: + find-up "^4.0.0" + +"@evocateur/libnpmaccess@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" + integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + +"@evocateur/libnpmpublish@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" + integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + semver "^5.5.1" + ssri "^6.0.1" + +"@evocateur/npm-registry-fetch@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" + integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.1.2" + +"@evocateur/pacote@^9.6.3": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" + integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + bluebird "^3.5.3" + cacache "^12.0.3" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.5.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.4.4" + npm-pick-manifest "^3.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.3" + safe-buffer "^5.2.0" + semver "^5.7.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" + integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" + integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== + dependencies: + "@jest/types" "^25.5.0" + chalk "^3.0.0" + jest-message-util "^25.5.0" + jest-util "^25.5.0" + slash "^3.0.0" + +"@jest/core@^25.5.4": + version "25.5.4" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" + integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== + dependencies: + "@jest/console" "^25.5.0" + "@jest/reporters" "^25.5.1" + "@jest/test-result" "^25.5.0" + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^25.5.0" + jest-config "^25.5.4" + jest-haste-map "^25.5.1" + jest-message-util "^25.5.0" + jest-regex-util "^25.2.6" + jest-resolve "^25.5.1" + jest-resolve-dependencies "^25.5.4" + jest-runner "^25.5.4" + jest-runtime "^25.5.4" + jest-snapshot "^25.5.1" + jest-util "^25.5.0" + jest-validate "^25.5.0" + jest-watcher "^25.5.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" + realpath-native "^2.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" + integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== + dependencies: + "@jest/fake-timers" "^25.5.0" + "@jest/types" "^25.5.0" + jest-mock "^25.5.0" + +"@jest/fake-timers@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" + integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== + dependencies: + "@jest/types" "^25.5.0" + jest-message-util "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + lolex "^5.0.0" + +"@jest/globals@^25.5.2": + version "25.5.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" + integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== + dependencies: + "@jest/environment" "^25.5.0" + "@jest/types" "^25.5.0" + expect "^25.5.0" + +"@jest/reporters@^25.5.1": + version "25.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" + integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^25.5.1" + jest-resolve "^25.5.1" + jest-util "^25.5.0" + jest-worker "^25.5.0" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^3.1.0" + terminal-link "^2.0.0" + v8-to-istanbul "^4.1.3" + optionalDependencies: + node-notifier "^6.0.0" + +"@jest/source-map@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" + integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" + integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== + dependencies: + "@jest/console" "^25.5.0" + "@jest/types" "^25.5.0" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^25.5.4": + version "25.5.4" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" + integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== + dependencies: + "@jest/test-result" "^25.5.0" + graceful-fs "^4.2.4" + jest-haste-map "^25.5.1" + jest-runner "^25.5.4" + jest-runtime "^25.5.4" + +"@jest/transform@^25.5.1": + version "25.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" + integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^25.5.0" + babel-plugin-istanbul "^6.0.0" + chalk "^3.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^25.5.1" + jest-regex-util "^25.2.6" + jest-util "^25.5.0" + micromatch "^4.0.2" + pirates "^4.0.1" + realpath-native "^2.0.0" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@lerna/add@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309" + integrity sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/bootstrap" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + npm-package-arg "^6.1.0" + p-map "^2.1.0" + semver "^6.2.0" + +"@lerna/bootstrap@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.20.0.tgz#635d71046830f208e851ab429a63da1747589e37" + integrity sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/has-npm-version" "3.16.5" + "@lerna/npm-install" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/symlink-binary" "3.17.0" + "@lerna/symlink-dependencies" "3.17.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + get-port "^4.2.0" + multimatch "^3.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + read-package-tree "^5.1.6" + semver "^6.2.0" + +"@lerna/changed@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.20.0.tgz#66b97ebd6c8f8d207152ee524a0791846a9097ae" + integrity sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/check-working-tree@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" + integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== + dependencies: + "@lerna/collect-uncommitted" "3.16.5" + "@lerna/describe-ref" "3.16.5" + "@lerna/validation-error" "3.13.0" + +"@lerna/child-process@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" + integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== + dependencies: + chalk "^2.3.1" + execa "^1.0.0" + strong-log-transformer "^2.0.0" + +"@lerna/clean@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.20.0.tgz#ba777e373ddeae63e57860df75d47a9e5264c5b2" + integrity sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" + integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== + dependencies: + "@lerna/global-options" "3.13.0" + dedent "^0.7.0" + npmlog "^4.1.2" + yargs "^14.2.2" + +"@lerna/collect-uncommitted@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" + integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== + dependencies: + "@lerna/child-process" "3.16.5" + chalk "^2.3.1" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/collect-updates@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" + integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/describe-ref" "3.16.5" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^2.0.0" + +"@lerna/command@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.5.tgz#14c6d2454adbfd365f8027201523e6c289cd3cd9" + integrity sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/project" "3.18.0" + "@lerna/validation-error" "3.13.0" + "@lerna/write-log-file" "3.13.0" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^1.0.0" + is-ci "^2.0.0" + npmlog "^4.1.2" + +"@lerna/conventional-commits@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz#08efd2e5b45acfaf3f151a53a3ec7ecade58a7bc" + integrity sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ== + dependencies: + "@lerna/validation-error" "3.13.0" + conventional-changelog-angular "^5.0.3" + conventional-changelog-core "^3.1.6" + conventional-recommended-bump "^5.0.0" + fs-extra "^8.1.0" + get-stream "^4.0.0" + lodash.template "^4.5.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + semver "^6.2.0" + +"@lerna/create-symlink@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" + integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== + dependencies: + "@zkochan/cmd-shim" "^3.1.0" + fs-extra "^8.1.0" + npmlog "^4.1.2" + +"@lerna/create@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.5.tgz#11ac539f069248eaf7bc4c42e237784330f4fc47" + integrity sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + camelcase "^5.0.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + globby "^9.2.0" + init-package-json "^1.10.3" + npm-package-arg "^6.1.0" + p-reduce "^1.0.0" + pify "^4.0.1" + semver "^6.2.0" + slash "^2.0.0" + validate-npm-package-license "^3.0.3" + validate-npm-package-name "^3.0.0" + whatwg-url "^7.0.0" + +"@lerna/describe-ref@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" + integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + +"@lerna/diff@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.5.tgz#e9e2cb882f84d5b84f0487c612137305f07accbc" + integrity sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/validation-error" "3.13.0" + npmlog "^4.1.2" + +"@lerna/exec@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.20.0.tgz#29f0c01aee2340eb46f90706731fef2062a49639" + integrity sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/filter-options@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" + integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/filter-packages" "3.18.0" + dedent "^0.7.0" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/filter-packages@3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" + integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== + dependencies: + "@lerna/validation-error" "3.13.0" + multimatch "^3.0.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" + integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== + dependencies: + npmlog "^4.1.2" + +"@lerna/get-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" + integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== + dependencies: + fs-extra "^8.1.0" + ssri "^6.0.1" + tar "^4.4.8" + +"@lerna/github-client@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" + integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== + dependencies: + "@lerna/child-process" "3.16.5" + "@octokit/plugin-enterprise-rest" "^3.6.1" + "@octokit/rest" "^16.28.4" + git-url-parse "^11.1.2" + npmlog "^4.1.2" + +"@lerna/gitlab-client@3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" + integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== + dependencies: + node-fetch "^2.5.0" + npmlog "^4.1.2" + whatwg-url "^7.0.0" + +"@lerna/global-options@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" + integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== + +"@lerna/has-npm-version@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" + integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== + dependencies: + "@lerna/child-process" "3.16.5" + semver "^6.2.0" + +"@lerna/import@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.5.tgz#a9c7d8601870729851293c10abd18b3707f7ba5e" + integrity sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + p-map-series "^1.0.0" + +"@lerna/info@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.20.0.tgz#3a5212f3029f2bc6255f9533bdf4bcb120ef329a" + integrity sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/output" "3.13.0" + envinfo "^7.3.1" + +"@lerna/init@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.5.tgz#86dd0b2b3290755a96975069b5cb007f775df9f5" + integrity sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + fs-extra "^8.1.0" + p-map "^2.1.0" + write-json-file "^3.2.0" + +"@lerna/link@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.5.tgz#f24347e4f0b71d54575bd37cfa1794bc8ee91b18" + integrity sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/package-graph" "3.18.5" + "@lerna/symlink-dependencies" "3.17.0" + p-map "^2.1.0" + slash "^2.0.0" + +"@lerna/list@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.20.0.tgz#7e67cc29c5cf661cfd097e8a7c2d3dcce7a81029" + integrity sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/listable@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" + integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== + dependencies: + "@lerna/query-graph" "3.18.5" + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" + integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== + dependencies: + byte-size "^5.0.1" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" + integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== + dependencies: + config-chain "^1.1.11" + pify "^4.0.1" + +"@lerna/npm-dist-tag@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" + integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + "@lerna/otplease" "3.18.5" + figgy-pudding "^3.5.1" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + +"@lerna/npm-install@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" + integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" + +"@lerna/npm-publish@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" + integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== + dependencies: + "@evocateur/libnpmpublish" "^1.2.2" + "@lerna/otplease" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + read-package-json "^2.0.13" + +"@lerna/npm-run-script@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" + integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + npmlog "^4.1.2" + +"@lerna/otplease@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" + integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== + dependencies: + "@lerna/prompt" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/output@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" + integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== + dependencies: + npmlog "^4.1.2" + +"@lerna/pack-directory@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" + integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== + dependencies: + "@lerna/get-packed" "3.16.0" + "@lerna/package" "3.16.0" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + npm-packlist "^1.4.4" + npmlog "^4.1.2" + tar "^4.4.10" + temp-write "^3.4.0" + +"@lerna/package-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" + integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== + dependencies: + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/validation-error" "3.13.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + semver "^6.2.0" + +"@lerna/package@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" + integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== + dependencies: + load-json-file "^5.3.0" + npm-package-arg "^6.1.0" + write-pkg "^3.1.0" + +"@lerna/prerelease-id-from-version@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" + integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== + dependencies: + semver "^6.2.0" + +"@lerna/profiler@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" + integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== + dependencies: + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npmlog "^4.1.2" + upath "^1.2.0" + +"@lerna/project@3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670" + integrity sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA== + dependencies: + "@lerna/package" "3.16.0" + "@lerna/validation-error" "3.13.0" + cosmiconfig "^5.1.0" + dedent "^0.7.0" + dot-prop "^4.2.0" + glob-parent "^5.0.0" + globby "^9.2.0" + load-json-file "^5.3.0" + npmlog "^4.1.2" + p-map "^2.1.0" + resolve-from "^4.0.0" + write-json-file "^3.2.0" + +"@lerna/prompt@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" + integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== + dependencies: + inquirer "^6.2.0" + npmlog "^4.1.2" + +"@lerna/publish@3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.20.2.tgz#a45d29813099b3249657ea913d0dc3f8ebc5cc2e" + integrity sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA== + dependencies: + "@evocateur/libnpmaccess" "^3.1.2" + "@evocateur/npm-registry-fetch" "^4.0.0" + "@evocateur/pacote" "^9.6.3" + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/describe-ref" "3.16.5" + "@lerna/log-packed" "3.16.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/npm-dist-tag" "3.18.5" + "@lerna/npm-publish" "3.18.5" + "@lerna/otplease" "3.18.5" + "@lerna/output" "3.13.0" + "@lerna/pack-directory" "3.16.4" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + "@lerna/version" "3.20.2" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-pipe "^1.2.0" + semver "^6.2.0" + +"@lerna/pulse-till-done@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" + integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== + dependencies: + npmlog "^4.1.2" + +"@lerna/query-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" + integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== + dependencies: + "@lerna/package-graph" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/resolve-symlink@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" + integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== + dependencies: + fs-extra "^8.1.0" + npmlog "^4.1.2" + read-cmd-shim "^1.0.1" + +"@lerna/rimraf-dir@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" + integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" + +"@lerna/run-lifecycle@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" + integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== + dependencies: + "@lerna/npm-conf" "3.16.0" + figgy-pudding "^3.5.1" + npm-lifecycle "^3.1.2" + npmlog "^4.1.2" + +"@lerna/run-topologically@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" + integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== + dependencies: + "@lerna/query-graph" "3.18.5" + figgy-pudding "^3.5.1" + p-queue "^4.0.0" + +"@lerna/run@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.20.0.tgz#a479f7c42bdf9ebabb3a1e5a2bdebb7a8d201151" + integrity sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-run-script" "3.16.5" + "@lerna/output" "3.13.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/timer" "3.13.0" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/symlink-binary@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" + integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/package" "3.16.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + +"@lerna/symlink-dependencies@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" + integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/resolve-symlink" "3.16.0" + "@lerna/symlink-binary" "3.17.0" + fs-extra "^8.1.0" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + +"@lerna/timer@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" + integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== + +"@lerna/validation-error@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" + integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== + dependencies: + npmlog "^4.1.2" + +"@lerna/version@3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.20.2.tgz#3709141c0f537741d9bc10cb24f56897bcb30428" + integrity sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q== + dependencies: + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/conventional-commits" "3.18.5" + "@lerna/github-client" "3.16.5" + "@lerna/gitlab-client" "3.15.0" + "@lerna/output" "3.13.0" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + chalk "^2.3.1" + dedent "^0.7.0" + load-json-file "^5.3.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-map "^2.1.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^6.2.0" + slash "^2.0.0" + temp-write "^3.4.0" + write-json-file "^3.2.0" + +"@lerna/write-log-file@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" + integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== + dependencies: + npmlog "^4.1.2" + write-file-atomic "^2.3.0" + +"@marionebl/sander@^0.6.0": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b" + integrity sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s= + dependencies: + graceful-fs "^4.1.3" + mkdirp "^0.5.1" + rimraf "^2.5.2" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@octokit/auth-token@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" + integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== + dependencies: + "@octokit/types" "^2.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.1.tgz#16d5c0e7a83e3a644d1ddbe8cded6c3d038d31d7" + integrity sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A== + dependencies: + "@octokit/types" "^2.11.1" + is-plain-object "^3.0.0" + universal-user-agent "^5.0.0" + +"@octokit/plugin-enterprise-rest@^3.6.1": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" + integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" + integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.0.tgz#94ca7293373654400fbb2995f377f9473e00834b" + integrity sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.2.tgz#74f8e5bbd39dc738a1b127629791f8ad1b3193ee" + integrity sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^2.11.1" + deprecation "^2.0.0" + is-plain-object "^3.0.0" + node-fetch "^2.3.0" + once "^1.4.0" + universal-user-agent "^5.0.0" + +"@octokit/rest@^16.28.4": + version "16.43.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" + integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1", "@octokit/types@^2.11.1": + version "2.16.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.0.tgz#e793563d67d6ba3675462839b156e2799146128d" + integrity sha512-hA06ZYqkAVxvwFVu7yqRNVBGfG9MZvLMbqfgfm6F79g5xWspxsbL/2/rHcFP/z1YBN3zbcNQYuUHiBml4b24MA== + dependencies: + "@types/node" ">= 8" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== + dependencies: + any-observable "^0.3.0" + +"@sinonjs/commons@^1.7.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.2.tgz#505f55c74e0272b43f6c52d81946bed7058fc0e2" + integrity sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw== + dependencies: + type-detect "4.0.8" + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/babel__core@^7.1.7": + version "7.1.7" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" + integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18" + integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q== + dependencies: + "@babel/types" "^7.3.0" + +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/connect-history-api-fallback@*": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz#4772b79b8b53185f0f4c9deab09236baf76ee3b4" + integrity sha512-7SxFCd+FLlxCfwVwbyPxbR4khL9aNikJhrorw8nUIOqeuooc9gifBuDQOJw5kzN7i6i3vLn9G8Wde/4QDihpYw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.33" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" + integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== + dependencies: + "@types/node" "*" + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/express-serve-static-core@*": + version "4.17.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.7.tgz#dfe61f870eb549dc6d7e12050901847c7d7e915b" + integrity sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.6" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.6.tgz#6bce49e49570507b86ea1b07b806f04697fac45e" + integrity sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/fs-extra@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" + integrity sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" + integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + dependencies: + "@types/node" "*" + +"@types/hash-sum@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/hash-sum/-/hash-sum-1.0.0.tgz#838f4e8627887d42b162d05f3d96ca636c2bc504" + integrity sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg== + +"@types/html-minifier-terser@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" + integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== + +"@types/http-proxy-middleware@*": + version "0.19.3" + resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" + integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== + dependencies: + "@types/connect" "*" + "@types/http-proxy" "*" + "@types/node" "*" + +"@types/http-proxy@*": + version "1.17.4" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b" + integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest@^25.2.1": + version "25.2.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.1.tgz#9544cd438607955381c1bdbdb97767a249297db5" + integrity sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA== + dependencies: + jest-diff "^25.2.1" + pretty-format "^25.2.1" + +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + +"@types/mime@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" + integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== + +"@types/mini-css-extract-plugin@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@types/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.1.tgz#d4bdde5197326fca039d418f4bdda03dc74dc451" + integrity sha512-+mN04Oszdz9tGjUP/c1ReVwJXxSniLd7lF++sv+8dkABxVNthg6uccei+4ssKxRHGoMmPxdn7uBdJWONSJGTGQ== + dependencies: + "@types/webpack" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/minimist@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" + integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= + +"@types/node@*", "@types/node@>= 8": + version "13.13.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.5.tgz#96ec3b0afafd64a4ccea9107b75bf8489f0e5765" + integrity sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^1.19.0": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" + integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== + +"@types/qs@*": + version "6.9.2" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.2.tgz#faab98ec4f96ee72c829b7ec0983af4f4d343113" + integrity sha512-a9bDi4Z3zCZf4Lv1X/vwnvbbDYSNz59h3i3KdyuYYN+YrLjSeJD0dnphdULDfySvUv6Exy/O0K6wX/kQpnPQ+A== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/serve-static@*": + version "1.13.3" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" + integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g== + dependencies: + "@types/express-serve-static-core" "*" + "@types/mime" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/tapable@*", "@types/tapable@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" + integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== + +"@types/uglify-js@*": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.0.tgz#4490a140ca82aa855ad68093829e7fd6ae94ea87" + integrity sha512-3ZcoyPYHVOCcLpnfZwD47KFLr8W/mpUcgjpf1M4Q78TMJIw7KMAHSjiCLJp1z3ZrBR9pTLbe191O0TldFK5zcw== + dependencies: + source-map "^0.6.1" + +"@types/webpack-dev-server@^3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz#93b7133cc9dab1ca1b76659f5ef8b763ad54c28a" + integrity sha512-2nwwQ/qHRghUirvG/gEDkOQDa+d881UTJM7EG9ok5KNaYCjYVvy7fdaO528Lcym9OQDn75SvruPYVVvMJxqO0g== + dependencies: + "@types/connect-history-api-fallback" "*" + "@types/express" "*" + "@types/http-proxy-middleware" "*" + "@types/serve-static" "*" + "@types/webpack" "*" + +"@types/webpack-sources@*": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" + integrity sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.6.1" + +"@types/webpack@*", "@types/webpack@^4.41.8": + version "4.41.12" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.12.tgz#0386ee2a2814368e2f2397abb036c0bf173ff6c3" + integrity sha512-BpCtM4NnBen6W+KEhrL9jKuZCXVtiH6+0b6cxdvNt2EwU949Al334PjQSl2BeAyvAX9mgoNNG21wvjP3xZJJ5w== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.0": + version "15.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" + integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^2.9.0": + version "2.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.32.0.tgz#5d5cc2e00b1d4a4b848cc68bfdd3aede1ef0ad16" + integrity sha512-nb1kSUa8cd22hGgxpGdVT6/iyP7IKyrnyZEGYo+tN8iyDdXvXa+nfsX03tJVeFfhbkwR/0CDk910zPbqSflAsg== + dependencies: + "@typescript-eslint/experimental-utils" "2.32.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.32.0": + version "2.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.32.0.tgz#bee7fbe1d21d13a273066d70abc82549d0b7943e" + integrity sha512-oDWuB2q5AXsQ/mLq2N4qtWiBASWXPf7KhqXgeGH4QsyVKx+km8F6Vfqd3bspJQyhyCqxcbLO/jKJuIV3DzHZ6A== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.32.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^2.9.0": + version "2.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.32.0.tgz#a1ace8ab1af529580bfb6cc2cd55fd8d8b1e68ab" + integrity sha512-swRtH835fUfm2khchiOVNchU3gVNaZNj2pY92QSx4kXan+RzaGNrwIRaCyX8uqzmK0xNPzseaUYHP8CsmrsjFw== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.32.0" + "@typescript-eslint/typescript-estree" "2.32.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.32.0": + version "2.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.32.0.tgz#0e4ae2e883557f94039b13ac0ecfcfbb09835b8d" + integrity sha512-hQpbWM/Y2iq6jB9FHYJBqa3h1R9IEGodOtajhb261cVHt9cz30AKjXM6WP7LxJdEPPlyJ9rPTZVgBUgZgiyPgw== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@vue/compiler-core@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.0-beta.10.tgz#42b62871d36839c794fb6650c322a4c517a2c813" + integrity sha512-GX5D9a0mjTUzZkd1PTDbETQlP0zcDb4k8wnMsYr1ZW/HXHn+PeS131FWSXz7kV4hVFiwOgxLfN+GEXseZXrxrA== + dependencies: + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + "@vue/shared" "3.0.0-beta.10" + estree-walker "^0.8.1" + source-map "^0.6.1" + +"@vue/compiler-core@3.0.0-beta.12": + version "3.0.0-beta.12" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.0-beta.12.tgz#1d9bfeeedd7fb9fd8181e762b8c42568e9caf69c" + integrity sha512-+UjGiEo/RLx7yaAUfSuhZCvXypV85CKgVERXvtL/yOLd+3Y37Z7d5Qwnsej3S4NPvhvHNUFplhU1P1LOucw0pg== + dependencies: + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + "@vue/shared" "3.0.0-beta.12" + estree-walker "^0.8.1" + source-map "^0.6.1" + +"@vue/compiler-dom@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.0-beta.10.tgz#5b35df447eb96cb7faed37b76a8a9aca71a87c67" + integrity sha512-S1Qqc74Hc3BnHjORzWJvG4Fj5B4O8aqTF1Oyd+Px65CB6qkbAaqTLneYnM5by/78j8inmt4FCHOf48L+gzChRA== + dependencies: + "@vue/compiler-core" "3.0.0-beta.10" + "@vue/shared" "3.0.0-beta.10" + +"@vue/compiler-dom@3.0.0-beta.12": + version "3.0.0-beta.12" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.0-beta.12.tgz#f455898b96d421d71c808ca35b8349504a2f7ffd" + integrity sha512-HEirNEGczvMep3suCZO91q/1x5wEO0y0MvZJ51HJL2UZBSUjBSp/8ilBVWpOoOYC6mYVoxEIm1Jv9AoSsOipzQ== + dependencies: + "@vue/compiler-core" "3.0.0-beta.12" + "@vue/shared" "3.0.0-beta.12" + +"@vue/compiler-sfc@^3.0.0-beta.10": + version "3.0.0-beta.12" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.0.0-beta.12.tgz#ed93aa0f07d5d099cea7582118e05fbb7c77b1c6" + integrity sha512-YtX7SJdk68eKPwcL0u515MjOerMSao5UrM0EtL5zxLlQUiokmqxddxALEM28C62CoUonAWr8CWqnb262u0DBoA== + dependencies: + "@vue/compiler-core" "3.0.0-beta.12" + "@vue/compiler-dom" "3.0.0-beta.12" + "@vue/compiler-ssr" "3.0.0-beta.12" + "@vue/shared" "3.0.0-beta.12" + consolidate "^0.15.1" + hash-sum "^2.0.0" + lru-cache "^5.1.1" + merge-source-map "^1.1.0" + postcss "^7.0.27" + postcss-modules "^2.0.0" + postcss-selector-parser "^6.0.2" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.0.0-beta.10.tgz#13d862282533e6a075df82152ee8df8f51a28ee8" + integrity sha512-gjIz+kUUT7axvJU+pSi5ZnNjl/DnmT/npQWUfLlizG8HTyfAhbf/YG6H389OyDwZEs8mMjfxz/Jd0fSZQRgjdQ== + dependencies: + "@vue/compiler-dom" "3.0.0-beta.10" + "@vue/shared" "3.0.0-beta.10" + +"@vue/compiler-ssr@3.0.0-beta.12": + version "3.0.0-beta.12" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.0.0-beta.12.tgz#ba935628ca2c917e8114b24d95ebfaf345136eb1" + integrity sha512-e1HRCQn5wCOQpcjLWUMyWPzKQSFmn2Sn0ZuhXPBsK1IlR1ElFOK6EC/EUHGwz3piFWZpuqpEWX7+0B9AYWNJAg== + dependencies: + "@vue/compiler-dom" "3.0.0-beta.12" + "@vue/shared" "3.0.0-beta.12" + +"@vue/component-compiler-utils@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3" + integrity sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^7.0.14" + postcss-selector-parser "^6.0.2" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" + optionalDependencies: + prettier "^1.18.2" + +"@vue/reactivity@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.0.0-beta.10.tgz#c63ee8dc9b6205d41595d20e2b5ff5cadf6b3cd7" + integrity sha512-4f/hqdVptNMxCcZfmyxBRrOV0AT0z41CrRtJWCpLQhr+VEisKVhpfe7P7hhfp8prbPhSWa9oZuqVtb5MccgN4g== + dependencies: + "@vue/shared" "3.0.0-beta.10" + +"@vue/runtime-core@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.0-beta.10.tgz#4294faa5fc14fb4286598a566f86691014f6ec2b" + integrity sha512-oBIckKooEeohEPwrn57cuoghNyqY630xmp2exBKiFEaVK3d9N8JBNaFAzw1KZsDNzSyZbUdHzqOZIcZjindypw== + dependencies: + "@vue/reactivity" "3.0.0-beta.10" + "@vue/shared" "3.0.0-beta.10" + +"@vue/runtime-dom@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.0.0-beta.10.tgz#bd06be5e075dabf5eb883f596e7923ec78821f90" + integrity sha512-xrPf0KN1Xe8mFzqxUMxpkzwJjVZcGFEKZLcX4Oh2EmxikD9lnR6DghyPy/LL8QOpJUge6p2mmsqvXwS6MODHDA== + dependencies: + "@vue/runtime-core" "3.0.0-beta.10" + "@vue/shared" "3.0.0-beta.10" + csstype "^2.6.8" + +"@vue/server-renderer@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.0.0-beta.10.tgz#7249c0104474e7f1facdc0665434239d50c5c039" + integrity sha512-MLx4AQJF9WFyOzV4YWXAzINRhp4UJPBGC/A9d2PVjs+SlFRjLSdV/hi5otAIzC+rMARJZbmKRpNDgfvleA/gvw== + dependencies: + "@vue/compiler-ssr" "3.0.0-beta.10" + "@vue/shared" "3.0.0-beta.10" + +"@vue/shared@3.0.0-beta.10": + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.0-beta.10.tgz#4c8f9aebcd5a0e9dafb9fb788569f4ce49d209e5" + integrity sha512-nKPkVB1KqhGuR6lPDcPJ+mhrfVuIGXNmw8s6ecPGjhjil2DetSe1RhgfwRBM0U/QuqUD6RjsIT5WZlnV7878Gg== + +"@vue/shared@3.0.0-beta.12", "@vue/shared@^3.0.0-beta.10": + version "3.0.0-beta.12" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.0-beta.12.tgz#cb7a2bb047919d2c944bf822032b0a8aa869ba1d" + integrity sha512-cA0DD3VFGYI76lbM90fAYXNJ9EmDNsm1tthO4FIY18DwziZKJWCfQBhEfHQd2skHcTE4OqH5eBxgsKEdn/LuGQ== + +"@vuepress/markdown-loader@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.5.0.tgz#8e1c3bdc128cb6fbb720b88e67c96711e2615d13" + integrity sha512-Qu9mkH736yNN1a7Si6UhbUcLGOoHg76hnpWvgaCvHEIGdGKiJopNO0Sjgioo9n4OwS21dtefjhafsmp9nZqYoQ== + dependencies: + "@vuepress/markdown" "1.5.0" + loader-utils "^1.1.0" + lru-cache "^5.1.1" + +"@vuepress/markdown@1.5.0", "@vuepress/markdown@^1.3.1": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.5.0.tgz#608502380cb2d92f3d47303cf36c4226e79a63e7" + integrity sha512-dSIRa3kLz0hjEbl1XN70Uqz7MFiK8Nx7bHxXF9uhN8b870R2Hs1vQlWVgDfyC4NICb5aVhks4q7W2TDIOIgjtw== + dependencies: + "@vuepress/shared-utils" "1.5.0" + markdown-it "^8.4.1" + markdown-it-anchor "^5.0.2" + markdown-it-chain "^1.3.0" + markdown-it-emoji "^1.4.0" + markdown-it-table-of-contents "^0.4.0" + prismjs "^1.13.0" + +"@vuepress/shared-utils@1.5.0", "@vuepress/shared-utils@^1.4.1": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.5.0.tgz#b8e1f6058199e03447630394f2ab66c6749ad0e3" + integrity sha512-YKMMuiODPmk09vGnXrpGFCuDIyltZSM4K3OUZoxViZWiYhWxbBS7YY6CVScrcQxG59rk+OPXQb1mP/ItIvOEow== + dependencies: + chalk "^2.3.2" + diacritics "^1.3.0" + escape-html "^1.0.3" + fs-extra "^7.0.1" + globby "^9.2.0" + gray-matter "^4.0.1" + hash-sum "^1.0.2" + semver "^6.0.0" + upath "^1.1.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@zkochan/cmd-shim@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" + integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== + dependencies: + is-windows "^1.0.0" + mkdirp-promise "^5.0.1" + mz "^2.5.0" + +JSONStream@^1.0.4, JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^6.0.1, acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.0, acorn@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" + integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ== + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^3.0.0, ansi-colors@^3.2.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-includes@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + +babel-eslint@^10.0.3: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-jest@^25.5.1: + version "25.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" + integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== + dependencies: + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^25.5.0" + chalk "^3.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" + integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__traverse" "^7.0.6" + +babel-polyfill@6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-current-node-syntax@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6" + integrity sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +babel-preset-jest@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" + integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== + dependencies: + babel-plugin-jest-hoist "^25.5.0" + babel-preset-current-node-syntax "^0.1.2" + +babel-runtime@^6.23.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +bn.js@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5" + integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.1.0.tgz#4fe971b379a5aeb4925e06779f9fa1f41d249d70" + integrity sha512-VYxo7cDCeYUoBZ0ZCy4UyEUCP3smyBd4DRQM5nrFS1jJjPJjX7rP3oLRpPoWfkhQfyJ0I9ZbHbKafrFD/SGlrg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + dependencies: + pascal-case "^3.1.1" + tslib "^1.10.0" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" + integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +clipboard@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + +compare-versions@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +condense-newlines@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" + integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8= + dependencies: + extend-shallow "^2.0.1" + is-whitespace "^0.3.0" + kind-of "^3.0.2" + +config-chain@^1.1.11, config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +conventional-changelog-angular@^1.3.3: + version "1.6.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" + integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-angular@^5.0.3: + version "5.0.10" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.10.tgz#5cf7b00dd315b6a6a558223c80d5ef24ddb34205" + integrity sha512-k7RPPRs0vp8+BtPsM9uDxRl6KcgqtCJmzRD1wRtgqmhQ96g8ifBGo9O/TZBG23jqlXS/rg8BKRDELxfnQQGiaA== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-conventionalcommits@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz#d6cb2e2c5d7bfca044a08b9dba84b4082e1a1bd9" + integrity sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q== + dependencies: + compare-func "^1.3.1" + lodash "^4.2.1" + q "^1.5.1" + +conventional-changelog-core@^3.1.6: + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" + integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== + dependencies: + conventional-changelog-writer "^4.0.6" + conventional-commits-parser "^3.0.3" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^2.0.3" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^3.0.0" + +conventional-changelog-preset-loader@^2.1.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^4.0.6: + version "4.0.16" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.16.tgz#ca10f2691a8ea6d3c2eb74bd35bcf40aa052dda5" + integrity sha512-jmU1sDJDZpm/dkuFxBeRXvyNcJQeKhGtVcFFkwTphUAzyYWcwz2j36Wcv+Mv2hU3tpvLMkysOPXJTLO55AUrYQ== + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^2.0.6" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^7.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^3.0.0" + +conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c" + integrity sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4" + integrity sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^7.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" + integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.1.1" + conventional-commits-filter "^2.0.2" + conventional-commits-parser "^3.0.3" + git-raw-commits "2.0.0" + git-semver-tags "^2.0.3" + meow "^4.0.0" + q "^1.5.1" + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.1.0, cosmiconfig@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" + integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-modules-loader-core@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" + integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY= + dependencies: + icss-replace-symbols "1.1.0" + postcss "6.0.1" + postcss-modules-extract-imports "1.1.0" + postcss-modules-local-by-default "1.2.0" + postcss-modules-scope "1.1.0" + postcss-modules-values "1.3.0" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + regexpu-core "^4.6.0" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssom@^0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^2.6.8: + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= + dependencies: + number-is-nan "^1.0.0" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + +detect-newline@3.1.0, detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +diacritics@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" + integrity sha1-PvqHMj67hj5mls67AILUj/PW96E= + +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= + dependencies: + is-obj "^1.0.0" + +dot-prop@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +editorconfig@^0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" + integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== + dependencies: + commander "^2.19.0" + lru-cache "^4.1.5" + semver "^5.6.0" + sigmund "^1.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +elegant-spinner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-2.0.0.tgz#f236378985ecd16da75488d166be4b688fd5af94" + integrity sha512-5YRYHhvhYzV/FC4AiMdeSIg3jAYGq9xFvbhZMpPlJoBsfYgrw2DSCYeXfat6tYBu45PWiyRr3+flaCPPmviPaA== + +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381" + integrity sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA== + dependencies: + ansi-colors "^3.2.1" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436" + integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw== + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +envinfo@^7.3.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236" + integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.11.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@^6.7.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" + integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== + dependencies: + get-stdin "^6.0.0" + +eslint-config-standard@^14.1.0: + version "14.1.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" + integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== + +eslint-config-vuepress-typescript@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/eslint-config-vuepress-typescript/-/eslint-config-vuepress-typescript-1.1.4.tgz#0deb3df0144517d3475f1d0b91c8e89aa7cff4c0" + integrity sha512-6j3+wxvED5i28r9v8CzzMjCSFUynDiyDO3Q6gnevOJ5QX5dYO6nzzhtgQkvqD3GURBG4ng5yTdjmnAR+XureBw== + dependencies: + "@typescript-eslint/eslint-plugin" "^2.9.0" + "@typescript-eslint/parser" "^2.9.0" + eslint-config-vuepress "2.2.0" + +eslint-config-vuepress@2.2.0, eslint-config-vuepress@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-vuepress/-/eslint-config-vuepress-2.2.0.tgz#b6c43ce0ebd02bbc0eb159f7ec44591a50b52096" + integrity sha512-o3mYcK9w67dnpFFlNdwzokNyR3rwztxq/SiVA4/XZayLY0yNcx9JY0Mi/ZM6GT9buTni99z3YPlept3vh/GJrA== + dependencies: + babel-eslint "^10.0.3" + eslint-config-prettier "^6.7.0" + eslint-config-standard "^14.1.0" + eslint-plugin-import "^2.18.2" + eslint-plugin-node "^10.0.0" + eslint-plugin-prettier "^3.1.1" + eslint-plugin-promise "^4.2.1" + eslint-plugin-standard "^4.0.1" + eslint-plugin-vue "^6.0.1" + +eslint-import-resolver-node@^0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.4.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-es@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" + integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== + dependencies: + eslint-utils "^1.4.2" + regexpp "^3.0.0" + +eslint-plugin-import@^2.18.2: + version "2.20.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" + integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.1" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.12.0" + +eslint-plugin-node@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" + integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== + dependencies: + eslint-plugin-es "^2.0.0" + eslint-utils "^1.4.2" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-prettier@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca" + integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-promise@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + +eslint-plugin-standard@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" + integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== + +eslint-plugin-vue@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" + integrity sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ== + dependencies: + natural-compare "^1.4.0" + semver "^5.6.0" + vue-eslint-parser "^7.0.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.2, eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.4.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + +estree-walker@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.8.1.tgz#6230ce2ec9a5cb03888afcaf295f97d90aa52b79" + integrity sha512-H6cJORkqvrNziu0KX2hqOMAlA2CiuAxHeGJXSIoKA/KLv229Dw806J3II6mKTm5xiDX1At1EXCfsOQPB+tMB+g== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +eventemitter3@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.3.tgz#850b43083fdb36a246f03168f189e9054f90bdb4" + integrity sha512-HyaFeyfTa18nYjft59vEPsvuq6ZVcrCC1rBw6Fx8ZV9NcuUITBNCnTOyr0tHHkkHn//d+lzhsL1YybgtLQ7lng== + +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + 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" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.1.tgz#988488781f1f0238cd156f7aaede11c3e853b4c1" + integrity sha512-SCjM/zlBdOK8Q5TIjOn6iEHZaPHFsMoTxXQ2nvUvtPnuohz3H2dIozSg+etNR98dGoYUp2ENSKLL/XaMmbxVgw== + 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" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" + integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== + dependencies: + "@jest/types" "^25.5.0" + ansi-styles "^4.0.0" + jest-get-type "^25.2.6" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-regex-util "^25.2.6" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-glob@^3.0.3, fast-glob@^3.1.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" + integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +fastq@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" + integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0, figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-loader@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" + integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-versions@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== + dependencies: + debug "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" + integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +generic-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" + integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ== + dependencies: + loader-utils "^1.1.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + +get-stdin@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-hooks-list@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156" + integrity sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ== + +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-raw-commits@^2.0.0: + version "2.0.7" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.7.tgz#02e9357727a9755efa8e14dd5e59b381c29068fb" + integrity sha512-SkwrTqrDxw8y0G1uGJ9Zw13F7qu3LF8V4BifyDeiJCxSnjRGZD9SaoMiMqUvvXMXh6S3sOQ1DsBN7L2fMUZW/g== + dependencies: + dargs "^7.0.0" + lodash.template "^4.0.2" + meow "^7.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" + integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== + dependencies: + meow "^4.0.0" + semver "^6.0.0" + +git-up@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" + integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +git-url-parse@^11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" + integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== + dependencies: + git-up "^4.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + 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@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.0.tgz#abfcd0630037ae174a88590132c2f6804e291072" + integrity sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.0.tgz#56fd0e9f0d4f8fb0c456f1ab0dee96e1380bc154" + integrity sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg== + 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" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= + dependencies: + delegate "^3.1.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gray-matter@^4.0.1, gray-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +handlebars@^4.7.6: + version "4.7.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= + +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#95d3df037f04835e9d1a09d1767c0e361a7de916" + integrity sha512-tiYE76O1zunboByeB/nFGwUEb263Z3nkNv6Lz2oLC1s6M36bLKfTrjQ+7ssVfaucVllE+N7hh/FbpbxvnIA+LQ== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd" + integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +husky@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36" + integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ== + dependencies: + chalk "^4.0.0" + ci-info "^2.0.0" + compare-versions "^3.6.0" + cosmiconfig "^6.0.0" + find-versions "^3.2.0" + opencollective-postinstall "^2.0.2" + pkg-dir "^4.2.0" + please-upgrade-node "^3.2.0" + slash "^3.0.0" + which-pm-runs "^1.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1, ignore@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.2, ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +inquirer@^6.2.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +inquirer@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0, is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" + integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== + dependencies: + isobject "^4.0.0" + +is-regex@^1.0.4, is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-ssh@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + dependencies: + protocols "^1.1.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-whitespace@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" + integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= + +is-windows@^1.0.0, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +javascript-stringify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" + integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= + +javascript-stringify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" + integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow== + +jest-changed-files@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" + integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== + dependencies: + "@jest/types" "^25.5.0" + execa "^3.2.0" + throat "^5.0.0" + +jest-cli@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" + integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== + dependencies: + "@jest/core" "^25.5.4" + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + chalk "^3.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^25.5.4" + jest-util "^25.5.0" + jest-validate "^25.5.0" + prompts "^2.0.1" + realpath-native "^2.0.0" + yargs "^15.3.1" + +jest-config@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" + integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^25.5.4" + "@jest/types" "^25.5.0" + babel-jest "^25.5.1" + chalk "^3.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^25.5.0" + jest-environment-node "^25.5.0" + jest-get-type "^25.2.6" + jest-jasmine2 "^25.5.4" + jest-regex-util "^25.2.6" + jest-resolve "^25.5.1" + jest-util "^25.5.0" + jest-validate "^25.5.0" + micromatch "^4.0.2" + pretty-format "^25.5.0" + realpath-native "^2.0.0" + +jest-diff@^25.2.1, jest-diff@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-docblock@^25.3.0: + version "25.3.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" + integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== + dependencies: + detect-newline "^3.0.0" + +jest-each@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" + integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== + dependencies: + "@jest/types" "^25.5.0" + chalk "^3.0.0" + jest-get-type "^25.2.6" + jest-util "^25.5.0" + pretty-format "^25.5.0" + +jest-environment-jsdom@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" + integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== + dependencies: + "@jest/environment" "^25.5.0" + "@jest/fake-timers" "^25.5.0" + "@jest/types" "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + jsdom "^15.2.1" + +jest-environment-node@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" + integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== + dependencies: + "@jest/environment" "^25.5.0" + "@jest/fake-timers" "^25.5.0" + "@jest/types" "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + semver "^6.3.0" + +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + +jest-haste-map@^25.5.1: + version "25.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" + integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== + dependencies: + "@jest/types" "^25.5.0" + "@types/graceful-fs" "^4.1.2" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-serializer "^25.5.0" + jest-util "^25.5.0" + jest-worker "^25.5.0" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + which "^2.0.2" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" + integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^25.5.0" + "@jest/source-map" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + chalk "^3.0.0" + co "^4.6.0" + expect "^25.5.0" + is-generator-fn "^2.0.0" + jest-each "^25.5.0" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-runtime "^25.5.4" + jest-snapshot "^25.5.1" + jest-util "^25.5.0" + pretty-format "^25.5.0" + throat "^5.0.0" + +jest-leak-detector@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" + integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== + dependencies: + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-matcher-utils@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" + integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== + dependencies: + chalk "^3.0.0" + jest-diff "^25.5.0" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-message-util@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" + integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^25.5.0" + "@types/stack-utils" "^1.0.1" + chalk "^3.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^1.0.1" + +jest-mock@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" + integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== + dependencies: + "@jest/types" "^25.5.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" + integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== + +jest-resolve-dependencies@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" + integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== + dependencies: + "@jest/types" "^25.5.0" + jest-regex-util "^25.2.6" + jest-snapshot "^25.5.1" + +jest-resolve@^25.5.1: + version "25.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" + integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== + dependencies: + "@jest/types" "^25.5.0" + browser-resolve "^1.11.3" + chalk "^3.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.1" + read-pkg-up "^7.0.1" + realpath-native "^2.0.0" + resolve "^1.17.0" + slash "^3.0.0" + +jest-runner@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" + integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== + dependencies: + "@jest/console" "^25.5.0" + "@jest/environment" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + chalk "^3.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^25.5.4" + jest-docblock "^25.3.0" + jest-haste-map "^25.5.1" + jest-jasmine2 "^25.5.4" + jest-leak-detector "^25.5.0" + jest-message-util "^25.5.0" + jest-resolve "^25.5.1" + jest-runtime "^25.5.4" + jest-util "^25.5.0" + jest-worker "^25.5.0" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" + integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== + dependencies: + "@jest/console" "^25.5.0" + "@jest/environment" "^25.5.0" + "@jest/globals" "^25.5.2" + "@jest/source-map" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^25.5.4" + jest-haste-map "^25.5.1" + jest-message-util "^25.5.0" + jest-mock "^25.5.0" + jest-regex-util "^25.2.6" + jest-resolve "^25.5.1" + jest-snapshot "^25.5.1" + jest-util "^25.5.0" + jest-validate "^25.5.0" + realpath-native "^2.0.0" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.3.1" + +jest-serializer-vue@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz#b238ef286357ec6b480421bd47145050987d59b3" + integrity sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM= + dependencies: + pretty "2.0.0" + +jest-serializer@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" + integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== + dependencies: + graceful-fs "^4.2.4" + +jest-snapshot@^25.5.1: + version "25.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" + integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^25.5.0" + "@types/prettier" "^1.19.0" + chalk "^3.0.0" + expect "^25.5.0" + graceful-fs "^4.2.4" + jest-diff "^25.5.0" + jest-get-type "^25.2.6" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-resolve "^25.5.1" + make-dir "^3.0.0" + natural-compare "^1.4.0" + pretty-format "^25.5.0" + semver "^6.3.0" + +jest-util@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" + integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== + dependencies: + "@jest/types" "^25.5.0" + chalk "^3.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + make-dir "^3.0.0" + +jest-validate@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" + integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== + dependencies: + "@jest/types" "^25.5.0" + camelcase "^5.3.1" + chalk "^3.0.0" + jest-get-type "^25.2.6" + leven "^3.1.0" + pretty-format "^25.5.0" + +jest-watcher@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" + integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== + dependencies: + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + jest-util "^25.5.0" + string-length "^3.1.0" + +jest-worker@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^25.1.0: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" + integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== + dependencies: + "@jest/core" "^25.5.4" + import-local "^3.0.2" + jest-cli "^25.5.4" + +js-beautify@^1.6.12: + version "1.11.0" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.11.0.tgz#afb873dc47d58986360093dcb69951e8bcd5ded2" + integrity sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A== + dependencies: + config-chain "^1.1.12" + editorconfig "^0.15.3" + glob "^7.1.3" + mkdirp "~1.0.3" + nopt "^4.0.3" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.11.0, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^15.2.1: + version "15.2.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" + integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== + dependencies: + abab "^2.0.0" + acorn "^7.1.0" + acorn-globals "^4.3.2" + array-equal "^1.0.0" + cssom "^0.4.1" + cssstyle "^2.0.0" + data-urls "^1.1.0" + domexception "^1.0.1" + escodegen "^1.11.1" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.2.0" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.7" + saxes "^3.1.9" + symbol-tree "^3.2.2" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^7.0.0" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@2.x, json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lerna@^3.20.2: + version "3.20.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.20.2.tgz#abf84e73055fe84ee21b46e64baf37b496c24864" + integrity sha512-bjdL7hPLpU3Y8CBnw/1ys3ynQMUjiK6l9iDWnEGwFtDy48Xh5JboR9ZJwmKGCz9A/sarVVIGwf1tlRNKUG9etA== + dependencies: + "@lerna/add" "3.20.0" + "@lerna/bootstrap" "3.20.0" + "@lerna/changed" "3.20.0" + "@lerna/clean" "3.20.0" + "@lerna/cli" "3.18.5" + "@lerna/create" "3.18.5" + "@lerna/diff" "3.18.5" + "@lerna/exec" "3.20.0" + "@lerna/import" "3.18.5" + "@lerna/info" "3.20.0" + "@lerna/init" "3.18.5" + "@lerna/link" "3.18.5" + "@lerna/list" "3.20.0" + "@lerna/publish" "3.20.2" + "@lerna/run" "3.20.0" + "@lerna/version" "3.20.2" + import-local "^2.0.0" + npmlog "^4.1.2" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +linkify-it@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" + integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== + dependencies: + uc.micro "^1.0.1" + +lint-staged@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.2.tgz#901403c120eb5d9443a0358b55038b04c8a7db9b" + integrity sha512-78kNqNdDeKrnqWsexAmkOU3Z5wi+1CsQmUmfCuYgMTE8E4rAIX8RHW7xgxwAZ+LAayb7Cca4uYX4P3LlevzjVg== + dependencies: + chalk "^4.0.0" + commander "^5.0.0" + cosmiconfig "^6.0.0" + debug "^4.1.1" + dedent "^0.7.0" + execa "^4.0.0" + listr2 "1.3.8" + log-symbols "^3.0.0" + micromatch "^4.0.2" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "^3.3.0" + +listr2@1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-1.3.8.tgz#30924d79de1e936d8c40af54b6465cb814a9c828" + integrity sha512-iRDRVTgSDz44tBeBBg/35TQz4W+EZBWsDUq7hPpqeUHm7yLPNll0rkwW3lIX9cPAK7l+x95mGWLpxjqxftNfZA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-truncate "^2.1.0" + elegant-spinner "^2.0.0" + enquirer "^2.3.4" + figures "^3.2.0" + indent-string "^4.0.0" + log-update "^4.0.0" + p-map "^4.0.0" + pad "^3.2.0" + rxjs "^6.3.3" + through "^2.3.8" + uuid "^7.0.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.0.2, lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@4.17.15, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.2.1: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + +lolex@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + +lru-cache@^4.1.2, lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +macos-release@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" + integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-it-anchor@^5.0.2: + version "5.2.7" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.2.7.tgz#ec740f6bd03258a582cd0c65b9644b9f9852e5a3" + integrity sha512-REFmIaSS6szaD1bye80DMbp7ePwsPNvLTR5HunsUcZ0SG0rWJQ+Pz24R4UlTKtjKBPhxo0v0tOBDYjZQQknW8Q== + +markdown-it-chain@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz#ccf6fe86c10266bafb4e547380dfd7f277cc17bc" + integrity sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ== + dependencies: + webpack-chain "^4.9.0" + +markdown-it-emoji@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc" + integrity sha1-m+4OmpkKljupbfaYDE/dsF37Tcw= + +markdown-it-table-of-contents@^0.4.0: + version "0.4.4" + resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz#3dc7ce8b8fc17e5981c77cc398d1782319f37fbc" + integrity sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw== + +markdown-it@^8.4.1: + version "8.4.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" + integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +meow@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.0.1.tgz#1ed4a0a50b3844b451369c48362eb0515f04c1dc" + integrity sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw== + dependencies: + "@types/minimist" "^1.2.0" + arrify "^2.0.1" + camelcase "^6.0.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "^4.0.2" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@4.x, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@^2.1.26, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009" + integrity sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" + integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY= + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist-options@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.0.2.tgz#29c4021373ded40d546186725e57761e4b1984a7" + integrity sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@~1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== + dependencies: + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.0" + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.3.0, node-fetch@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +node-gyp@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" + integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" + integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== + dependencies: + growly "^1.3.0" + is-wsl "^2.1.1" + semver "^6.3.0" + shellwords "^0.1.1" + which "^1.3.1" + +nopt@^4.0.1, nopt@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-lifecycle@^3.1.2: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +opencollective-postinstall@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" + integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.1, optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-each-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-map@^2.0.0, p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= + +p-queue@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" + integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== + dependencies: + eventemitter3 "^3.1.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= + dependencies: + p-reduce "^1.0.0" + +pad@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/pad/-/pad-3.2.0.tgz#be7a1d1cb6757049b4ad5b70e71977158fea95d1" + integrity sha512-2u0TrjcGbOjBTJpyewEl4hBO3OeX5wWue7eIFPzQTg6wFSvoaHcBTTUY5m+n0hd04gmTCPuY0kCpVIVuw5etwg== + dependencies: + wcwidth "^1.0.1" + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" + integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== + dependencies: + dot-case "^3.0.3" + tslib "^1.10.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" + integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-url@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" + integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +portfinder@^1.0.26: + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-modules-extract-imports@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-2.0.0.tgz#473d0d7326651d8408585c2a154115d5cb36cce0" + integrity sha512-eqp+Bva+U2cwQO7dECJ8/V+X+uH1HduNeITB0CPPFAu6d/8LKQ32/j+p9rQ2YL1QytVcrNU0X+fBqgGmQIA1Rw== + dependencies: + css-modules-loader-core "^1.1.0" + generic-names "^2.0.1" + lodash.camelcase "^4.3.0" + postcss "^7.0.1" + string-hash "^1.1.1" + +postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" + integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I= + dependencies: + chalk "^1.1.3" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27: + version "7.0.30" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.30.tgz#cc9378beffe46a02cbc4506a0477d05fcea9a8e2" + integrity sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier-config-vuepress@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-config-vuepress/-/prettier-config-vuepress-1.0.0.tgz#261db9da11ad626fbe637f14fba8a9fc8215581a" + integrity sha512-tGZIz+L7Vu46wqPlmUunXDcxDtU0CQEyBYuDAvXIlI84aMqcI6GS32snjZJNB6iczuLVB324dTpiyEEUKKN7hA== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^1.18.2: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +prettier@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== + +pretty-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +pretty@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" + integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU= + dependencies: + condense-newlines "^0.2.1" + extend-shallow "^2.0.1" + js-beautify "^1.6.12" + +prismjs@^1.13.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.20.0.tgz#9b685fc480a3514ee7198eac6a3bf5024319ff03" + integrity sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ== + optionalDependencies: + clipboard "^2.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +prompts@^2.0.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.7" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +read-cmd-shim@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.1.6: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@~1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +realpath-native@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" + integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.6.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + +request-promise-native@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-global@1.0.0, resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +saxes@^3.1.9: + version "3.1.11" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5: + version "2.6.6" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c" + integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@6.3.0, semver@6.x, semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slide@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +sort-object-keys@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" + integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== + +sort-package-json@^1.42.2: + version "1.42.2" + resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.42.2.tgz#ac7e1a6abc1b2c8836768f8d9dfe790d9f3b44e6" + integrity sha512-B4cIYKeBdNUJXHPxe0G+x3uHHpSWSgJ3z62+W1C28wT1whkEhrz/B3r9lSyW+VVhz1rc+ymGmNkr1mJ323w0xQ== + dependencies: + detect-indent "^6.0.0" + detect-newline "3.1.0" + git-hooks-list "1.0.3" + globby "10.0.0" + is-plain-obj "2.1.0" + sort-object-keys "^1.1.3" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-argv@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + +string-length@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" + integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== + dependencies: + astral-regex "^1.0.0" + strip-ansi "^5.2.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== + +strong-log-transformer@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +temp-write@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^3.0.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.6.3: + version "4.6.13" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.13.tgz#e879a7364a5e0db52ba4891ecde007422c56a916" + integrity sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.0, through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" + integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== + dependencies: + readable-stream "2 || 3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + +ts-jest@^25.5.1: + version "25.5.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" + integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + micromatch "4.x" + mkdirp "0.x" + semver "6.x" + yargs-parser "18.x" + +ts-node@^8.10.1: + version "8.10.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.1.tgz#77da0366ff8afbe733596361d2df9a60fc9c9bd3" + integrity sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9" + integrity sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +uglify-js@^3.1.4: + version "3.9.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.9.2.tgz#012b74fb6a2e440d9ba1f79110a479d3b1f2d48d" + integrity sha512-zGVwKslUAD/EeqOrD1nQaBmXIHl1Vw371we8cvS8I6mYK9rmgX5tv8AAeJdfsQ3Kk5mGax2SVV/AizxdNGhl7Q== + dependencies: + commander "~2.20.3" + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" + integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== + dependencies: + os-name "^3.1.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.0, upath@^1.1.1, upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.0.tgz#c7d6b0d6b0fccd51ab3ffc58a78d32b8d89a7be2" + integrity sha512-IzgAAIC8wRrg6NYkFIJY09vtktQcsvU8V6HhtQj9PTefbYImzLB1hufqo4m+RyM5N3mLx5BqJKccgxJS+W3kqw== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.26" + schema-utils "^2.6.5" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +v8-to-istanbul@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" + integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vue-eslint-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.0.0.tgz#a4ed2669f87179dedd06afdd8736acbb3a3864d6" + integrity sha512-yR0dLxsTT7JfD2YQo9BhnQ6bUTLsZouuzt9SKRP7XNaZJV459gvlsJo4vT2nhZ/2dH9j3c53bIx9dnqU2prM9g== + dependencies: + debug "^4.1.1" + eslint-scope "^5.0.0" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + lodash "^4.17.15" + +vue-loader@16.0.0-beta.2: + version "16.0.0-beta.2" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.0.0-beta.2.tgz#45492439608984fe926ca7d83fb9704ec8cc518e" + integrity sha512-kOU5tV0w/gDnKWP+vjAZmQPQJ00GNH6VJfOnMAU4c54OTqg7UqLbpEkFA2HFWe6Ws/3imal3uODYN2M19LmMAw== + dependencies: + "@types/mini-css-extract-plugin" "^0.9.1" + chalk "^3.0.0" + hash-sum "^2.0.0" + loader-utils "^1.2.3" + merge-source-map "^1.1.0" + source-map "^0.6.1" + +vue-router@4.0.0-alpha.10: + version "4.0.0-alpha.10" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.0-alpha.10.tgz#d27fc8c0713b6198f9c50af9b9e8be15f311f869" + integrity sha512-dA2ywr/rk2yc6JG3nn1eu9wlhR3AAO1dAs75uqY2N8HxvJviSxO0YAm0aHvLkFYTNa9JGV+ao0gr5oJzVbGTaQ== + +vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== + +vue@3.0.0-beta.10: + version "3.0.0-beta.10" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.0.0-beta.10.tgz#2e506a2923d84e3aacbdea0c1f232a7f78fc22e6" + integrity sha512-qA7uwX9mFtPd7yUF0lZq3B5yd9AZBmyCk/CCakhyCBqfWE4KsqaIYwb2Uwn6VXn0/aNzKZ8akP0OYCKygq1fkg== + dependencies: + "@vue/compiler-dom" "3.0.0-beta.10" + "@vue/runtime-dom" "3.0.0-beta.10" + "@vue/shared" "3.0.0-beta.10" + +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +watchpack@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" + integrity sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA== + dependencies: + chokidar "^2.1.8" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-chain@^4.9.0: + version "4.12.1" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" + integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^1.6.0" + +webpack-chain@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.4.0.tgz#22f0b27b6a9bc9ee3cba4f9e6513cf66394034e2" + integrity sha512-f97PYqxU+9/u0IUqp/ekAHRhBD1IQwhBv3wlJo2nvyELpr2vNnUqO3XQEk+qneg0uWGP54iciotszpjfnEExFA== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^2.0.1" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.10.3: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.43.0: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.1" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +windows-release@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.0.tgz#dce167e9f8be733f21c849ebd4d03fe66b29b9f0" + integrity sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ== + dependencies: + execa "^1.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + 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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-json-file@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" + integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.7.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" + integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== + dependencies: + "@babel/runtime" "^7.9.2" + +yargs-parser@18.x, yargs-parser@^18.1.1, yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^15.0.1: + version "15.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^14.2.2: + version "14.2.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yargs@^15.3.1: + version "15.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 9ab23a12df249945e366b80abacf3db24affa603 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Wed, 30 Sep 2020 02:45:59 +0800 Subject: [PATCH 0003/1014] build: preview --- .eslintignore | 6 +- .eslintrc.js | 7 +- .github/ISSUE_TEMPLATE/bug_report.md | 50 - .github/ISSUE_TEMPLATE/feature_request.md | 23 - .github/PULL_REQUEST_TEMPLATE.md | 40 - .github/lock.yml | 37 - .github/stale.yml | 58 - .gitignore | 3 + .vscode/settings.json | 1 + README.md | 110 +- jest.config.js | 2 +- package.json | 51 +- .../@vuepress/bundler-webpack/package.json | 28 +- .../bundler-webpack/src/build/build.ts | 42 - .../bundler-webpack/src/build/createBuild.ts | 100 + .../src/build/createClientConfig.ts | 81 + .../src/build/createServerConfig.ts | 53 + .../bundler-webpack/src/build/index.ts | 2 +- .../bundler-webpack/src/build/renderPage.ts | 120 + .../src/build/renderPagePrefetchLinks.ts | 32 + .../src/build/renderPagePreloadLinks.ts | 39 + .../src/build/renderPageScripts.ts | 22 + .../src/build/renderPageStyles.ts | 23 + .../src/build/resolveClientManifestMeta.ts | 49 + .../src/build/resolveFileMeta.ts | 15 + .../src/build/resolveFileMetaType.ts | 21 + .../src/build/resolvePageClientFilesMeta.ts | 18 + .../src/build/ssr/createClientPlugin.ts | 118 + .../bundler-webpack/src/build/ssr/index.ts | 2 + .../bundler-webpack/src/build/ssr/utils.ts | 3 + .../src/build/ssr/vuepressLoader.ts | 32 + .../bundler-webpack/src/build/types.ts | 29 + .../src/config/base/handleDevtool.ts | 11 - .../src/config/base/handleMode.ts | 9 - .../src/config/base/handleModule.ts | 27 - .../src/config/base/handleModuleVue.ts | 49 - .../src/config/base/handleOutput.ts | 16 - .../src/config/base/handlePlugins.ts | 16 - .../src/config/base/handleResolve.ts | 17 - .../bundler-webpack/src/config/base/index.ts | 1 - .../src/config/{base => }/createBaseConfig.ts | 34 +- .../src/config/createClientBaseConfig.ts | 32 + .../src/config/createClientConfig.ts | 28 - .../src/config/createServerConfig.ts | 31 - .../src/config/handleDevtool.ts | 17 + .../bundler-webpack/src/config/handleMode.ts | 15 + .../src/config/handleModule.ts | 46 + .../config/{base => }/handleModuleAssets.ts | 32 +- .../src/config/handleModuleJs.ts | 73 + .../src/config/{base => }/handleModulePug.ts | 4 +- .../src/config/handleModuleStyles.ts | 45 + .../src/config/handleModuleTs.ts | 44 + .../src/config/handleModuleVue.ts | 47 + .../bundler-webpack/src/config/handleNode.ts | 22 + .../src/config/handleOutput.ts | 35 + .../src/config/handlePlugins.ts | 37 + .../src/config/handleResolve.ts | 33 + .../bundler-webpack/src/config/index.ts | 5 +- .../src/config/resolveBabelLoaderOptions.ts | 51 + .../src/config/resolveCacheLoaderOptions.ts | 34 + .../bundler-webpack/src/createBundler.ts | 15 + .../src/dev/{dev.ts => createDev.ts} | 18 +- .../src/dev/createDevConfig.ts | 13 +- .../src/dev/createDevServerConfig.ts | 20 +- .../bundler-webpack/src/dev/index.ts | 2 +- .../@vuepress/bundler-webpack/src/index.ts | 11 +- .../bundler-webpack/tsconfig.build.json | 13 + .../@vuepress/bundler-webpack/tsconfig.json | 7 +- packages/@vuepress/cli/package.json | 5 +- packages/@vuepress/cli/tsconfig.build.json | 9 + packages/@vuepress/cli/tsconfig.json | 11 +- packages/@vuepress/client/.eslintrc.js | 6 + packages/@vuepress/client/package.json | 10 +- .../client/src/components/Content.ts | 3 +- .../@vuepress/client/src/components/Debug.ts | 33 + .../client/src/components/Vuepress.ts | 18 +- .../@vuepress/client/src/components/index.ts | 1 + packages/@vuepress/client/src/constants.d.ts | 4 + .../@vuepress/client/src/createServerApp.ts | 14 + packages/@vuepress/client/src/createVueApp.ts | 69 +- packages/@vuepress/client/src/index.ts | 7 + .../client/src/injections/pageData.ts | 10 +- .../client/src/injections/siteData.ts | 21 +- .../src/internal/clientAppEnhances.d.ts | 5 + .../client/src/internal/clientAppSetups.d.ts | 5 + .../@vuepress/client/src/internal/index.ts | 4 - .../client/src/internal/layoutComponents.d.ts | 2 +- .../client/src/internal/pageComponents.d.ts | 2 +- .../client/src/internal/pagesData.d.ts | 6 + .../@vuepress/client/src/internal/routes.d.ts | 2 +- .../client/src/internal/siteData.d.ts | 5 +- packages/@vuepress/client/src/server.ts | 31 - .../client/src/types/clientAppEnhance.ts | 9 + .../client/src/types/clientAppSetup.ts | 1 + packages/@vuepress/client/src/types/index.ts | 2 + packages/@vuepress/client/tsconfig.build.json | 10 + packages/@vuepress/client/tsconfig.json | 14 +- packages/@vuepress/core/package.json | 18 +- packages/@vuepress/core/src/app/appInit.ts | 42 +- packages/@vuepress/core/src/app/appPrepare.ts | 46 +- packages/@vuepress/core/src/app/appUse.ts | 19 +- .../@vuepress/core/src/app/appUseByConfig.ts | 15 +- packages/@vuepress/core/src/app/createApp.ts | 46 +- .../core/src/app/createAppBundler.ts | 18 +- .../@vuepress/core/src/app/createAppDir.ts | 33 +- .../@vuepress/core/src/app/createAppEnv.ts | 13 +- .../core/src/app/createAppMarkdown.ts | 22 - .../core/src/app/createAppOptions.ts | 117 +- .../@vuepress/core/src/app/createAppPages.ts | 13 +- .../core/src/app/createAppVersion.ts | 6 + .../core/src/app/createAppWriteTemp.ts | 23 +- .../core/src/app/createClientData.ts | 35 - packages/@vuepress/core/src/app/index.ts | 10 - .../@vuepress/core/src/app/normalizePlugin.ts | 28 +- .../core/src/app/normalizePluginConfig.ts | 17 +- .../@vuepress/core/src/app/prepare/index.ts | 7 + .../app/prepare/prepareClientAppEnhances.ts | 29 + .../src/app/prepare/prepareClientAppSetups.ts | 27 + .../app/prepare/prepareLayoutComponents.ts | 23 + .../src/app/prepare/preparePageComponents.ts | 32 + .../core/src/app/prepare/preparePageData.ts | 54 + .../prepare/prepareRoutes.ts} | 44 +- .../core/src/app/prepare/prepareSiteData.ts | 21 + .../core/src/app/resolvePluginByName.ts | 26 +- packages/@vuepress/core/src/app/types.ts | 105 - packages/@vuepress/core/src/index.ts | 2 +- .../@vuepress/core/src/page/createPage.ts | 138 +- .../@vuepress/core/src/page/file/index.ts | 2 + .../src/page/{ => file}/resolveFileContent.ts | 7 +- .../src/page/{ => file}/resolveFilePath.ts | 16 +- packages/@vuepress/core/src/page/index.ts | 11 + .../@vuepress/core/src/page/inferPagePath.ts | 29 +- .../core/src/page/resolvePageComponent.ts | 53 + .../core/src/page/resolvePageContent.ts | 45 +- .../core/src/page/resolvePageDate.ts | 42 +- .../core/src/page/resolvePageExcerpt.ts | 5 +- .../core/src/page/resolvePageFile.ts | 23 + .../core/src/page/resolvePageHeaders.ts | 13 - .../core/src/page/resolvePagePath.ts | 3 + .../core/src/page/resolvePagePermalink.ts | 45 +- .../core/src/page/resolvePageSlug.ts | 2 +- .../core/src/page/resolvePageTitle.ts | 22 +- .../core/src/plugin-api/createHookQueue.ts | 94 + .../core/src/plugin-api/createPluginApi.ts | 67 +- .../plugin-api/createPluginApiApplyOption.ts | 21 - .../src/plugin-api/createPluginApiHooks.ts | 26 + .../src/plugin-api/createPluginApiOptions.ts | 33 - .../src/plugin-api/createPluginApiPlugins.ts | 7 - .../createPluginApiRegisterHooks.ts | 64 + .../createPluginApiRegisterOptions.ts | 71 - .../core/src/plugin-api/createPluginApiUse.ts | 12 - .../@vuepress/core/src/plugin-api/index.ts | 11 +- .../plugin-api/normalizeClientFilesHook.ts | 28 + .../plugin-api/normalizeReturnObjectHook.ts | 9 + .../src/plugin-api/options/createOption.ts | 56 - .../core/src/plugin-api/options/index.ts | 5 - .../options/normalizeOptionAlias.ts | 14 - .../normalizeOptionClientDynamicModules.ts | 30 - .../options/normalizeOptionDefine.ts | 17 - .../core/src/plugin-api/options/types.ts | 69 - packages/@vuepress/core/src/plugins/index.ts | 4 - .../src/plugins/layoutComponentsPlugin.ts | 29 - .../core/src/plugins/pageComponentsPlugin.ts | 28 - .../core/src/plugins/siteDataPlugin.ts | 17 - .../core/src/theme-api/createThemeApi.ts | 38 +- .../core/src/theme-api/resolveThemeInfo.ts | 38 +- .../core/src/theme-api/resolveThemeLayouts.ts | 23 +- packages/@vuepress/core/src/types/app.ts | 72 + packages/@vuepress/core/src/types/bundler.ts | 40 + packages/@vuepress/core/src/types/config.ts | 60 + packages/@vuepress/core/src/types/index.ts | 34 + packages/@vuepress/core/src/types/page.ts | 87 + .../core/src/types/plugin-api/hooks.ts | 126 + .../core/src/types/plugin-api/index.ts | 2 + .../core/src/types/plugin-api/pluginApi.ts | 26 + packages/@vuepress/core/src/types/plugin.ts | 67 + .../core/src/types/theme-api/index.ts | 1 + .../core/src/types/theme-api/themeApi.ts | 51 + packages/@vuepress/core/src/types/theme.ts | 46 + packages/@vuepress/core/tsconfig.build.json | 14 + packages/@vuepress/core/tsconfig.json | 7 +- .../markdown/__tests__/markdown.spec.ts | 45 + .../plugins/customComponentPlugin.spec.ts | 370 + .../plugins/extractHeadersPlugin.spec.ts | 230 + .../__tests__/plugins/hoistTagsPlugin.spec.ts | 60 + .../__tests__/plugins/linksPlugin.spec.ts | 454 ++ .../markdown/__tests__/utils/compose.spec.ts | 33 + .../__tests__/utils/parseEmoji.spec.ts | 17 + .../__tests__/utils/parseHeaderDeeply.spec.ts | 35 + .../utils/removeNonCodeWrappedHTML.spec.ts | 55 + .../markdown/__tests__/utils/slugify.spec.ts | 32 + .../__tests__/utils/unescapeHtml.spec.ts | 8 + packages/@vuepress/markdown/package.json | 37 + packages/@vuepress/markdown/src/index.ts | 4 + packages/@vuepress/markdown/src/markdown.ts | 132 + .../customComponentPlugin.ts | 15 + .../customComponentPlugin/htmlBlock.ts | 100 + .../plugins/customComponentPlugin/index.ts | 3 + .../customComponentPlugin/inlineTags.ts | 74 + .../src/plugins/extractHeadersPlugin.ts | 45 + .../markdown/src/plugins/hoistTagsPlugin.ts | 39 + .../@vuepress/markdown/src/plugins/index.ts | 4 + .../markdown/src/plugins/linksPlugin/index.ts | 1 + .../src/plugins/linksPlugin/isExternalLink.ts | 19 + .../src/plugins/linksPlugin/linksPlugin.ts | 151 + .../src/plugins/linksPlugin/resolvePaths.ts | 44 + packages/@vuepress/markdown/src/types.ts | 130 + .../@vuepress/markdown/src/utils/compose.ts | 9 + .../@vuepress/markdown/src/utils/index.ts | 8 + .../markdown/src/utils/parseEmoji.ts | 4 + .../markdown/src/utils/parseHeader.ts | 23 + .../markdown/src/utils/parseHeaderDeeply.ts | 7 + .../src/utils/removeMarkdownTokens.ts | 5 + .../src/utils/removeNonCodeWrappedHTML.ts | 6 + .../@vuepress/markdown/src/utils/slugify.ts | 22 + .../markdown/src/utils/unescapeHtml.ts | 7 + .../@vuepress/markdown/tsconfig.build.json | 12 + packages/@vuepress/markdown/tsconfig.json | 4 + .../__tests__/utils/ensureEndingSlash.spec.ts | 20 + .../utils/ensureLeadingSlash.spec.ts | 20 + .../__tests__/utils/formatDateString.spec.ts | 32 + .../utils/normalizePackageName.spec.ts | 66 + .../__tests__/utils/removeEndingSlash.spec.ts | 20 + .../utils/removeLeadingSlash.spec.ts | 20 + packages/@vuepress/shared/package.json | 32 + packages/@vuepress/shared/src/index.ts | 2 + packages/@vuepress/shared/src/types/client.ts | 15 + packages/@vuepress/shared/src/types/index.ts | 3 + packages/@vuepress/shared/src/types/page.ts | 59 + packages/@vuepress/shared/src/types/site.ts | 81 + .../shared/src/utils/ensureEndingSlash.ts | 5 + .../shared/src/utils/ensureLeadingSlash.ts | 5 + .../shared/src/utils/formatDateString.ts | 19 + packages/@vuepress/shared/src/utils/index.ts | 8 + .../shared/src/utils/normalizePackageName.ts | 50 + .../shared/src/utils/removeEndingSlash.ts | 4 + .../shared/src/utils/removeLeadingSlash.ts | 5 + packages/@vuepress/shared/tsconfig.build.json | 8 + packages/@vuepress/shared/tsconfig.json | 4 + packages/@vuepress/theme-default/package.json | 5 +- .../theme-default/tsconfig.build.json | 8 + .../@vuepress/theme-default/tsconfig.json | 6 +- packages/@vuepress/theme-vue/package.json | 5 +- .../@vuepress/theme-vue/tsconfig.build.json | 9 + packages/@vuepress/theme-vue/tsconfig.json | 7 +- .../__tests__/__fixtures__/bar.js} | 0 .../utils/__tests__/__fixtures__/foo/index.js | 0 .../__tests__/normalizeSeparator.spec.ts | 11 - .../preprocessMarkdownContent.spec.ts | 177 - .../__tests__/preprocessVueContent.spec.ts | 60 - .../utils/__tests__/renderHead.spec.ts | 80 + .../utils/__tests__/renderHeadAttrs.spec.ts | 28 + .../utils/__tests__/requireResolve.spec.ts | 54 + packages/@vuepress/utils/package.json | 18 +- packages/@vuepress/utils/src/index.ts | 12 +- .../@vuepress/utils/src/normalizeSeparator.ts | 7 - .../utils/src/preprocessMarkdownContent.ts | 32 - .../utils/src/preprocessVueContent.ts | 23 - packages/@vuepress/utils/src/renderHead.ts | 17 + .../@vuepress/utils/src/renderHeadAttrs.ts | 12 + .../@vuepress/utils/src/requireResolve.ts | 13 + packages/@vuepress/utils/tsconfig.build.json | 9 + packages/@vuepress/utils/tsconfig.json | 6 +- packages/docs/tsconfig.json | 4 + packages/vuepress/package.json | 4 +- packages/vuepress/tsconfig.build.json | 16 + packages/vuepress/tsconfig.json | 14 +- playground/build.ts | 53 - playground/dev.ts | 59 - .../{src => docs}/.vuepress/public/logo.png | Bin .../.vuepress/theme/assets/logo.png | Bin .../.vuepress/theme/components/Logo.vue | 0 .../{src => docs}/.vuepress/theme/index.ts | 0 .../.vuepress/theme/layouts/Layout.vue | 11 +- .../.vuepress/theme/shims-vue.d.ts | 0 playground/docs/README.md | 24 + playground/{src => docs}/about/README.md | 2 + playground/docs/foo/index.md | 29 + playground/docs/test.md | 29 + playground/package.json | 11 +- playground/src/README.md | 12 - playground/src/app.ts | 45 + playground/src/build.ts | 11 + playground/src/clientAppEnhance.ts | 7 + playground/src/clientAppSetup.ts | 11 + playground/src/dev.ts | 12 + playground/src/test-plugin.js | 36 + playground/test-plugin.js | 11 - playground/tsconfig.json | 9 + tsconfig.base.json | 2 +- tsconfig.json | 18 +- yarn.lock | 6304 +++++++++++------ 292 files changed, 10620 insertions(+), 4672 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/lock.yml delete mode 100644 .github/stale.yml delete mode 100644 packages/@vuepress/bundler-webpack/src/build/build.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/createBuild.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/createClientConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/createServerConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/renderPage.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/renderPagePrefetchLinks.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/renderPagePreloadLinks.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/renderPageScripts.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/renderPageStyles.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/resolveClientManifestMeta.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/resolveFileMeta.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/resolveFileMetaType.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/resolvePageClientFilesMeta.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/ssr/createClientPlugin.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/ssr/index.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/ssr/utils.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/ssr/vuepressLoader.ts create mode 100644 packages/@vuepress/bundler-webpack/src/build/types.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/base/index.ts rename packages/@vuepress/bundler-webpack/src/config/{base => }/createBaseConfig.ts (51%) create mode 100644 packages/@vuepress/bundler-webpack/src/config/createClientBaseConfig.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts delete mode 100644 packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleDevtool.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleMode.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleModule.ts rename packages/@vuepress/bundler-webpack/src/config/{base => }/handleModuleAssets.ts (56%) create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleModuleJs.ts rename packages/@vuepress/bundler-webpack/src/config/{base => }/handleModulePug.ts (58%) create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleModuleVue.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleNode.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleOutput.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handlePlugins.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/handleResolve.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/resolveBabelLoaderOptions.ts create mode 100644 packages/@vuepress/bundler-webpack/src/config/resolveCacheLoaderOptions.ts create mode 100644 packages/@vuepress/bundler-webpack/src/createBundler.ts rename packages/@vuepress/bundler-webpack/src/dev/{dev.ts => createDev.ts} (74%) create mode 100644 packages/@vuepress/bundler-webpack/tsconfig.build.json create mode 100644 packages/@vuepress/cli/tsconfig.build.json create mode 100644 packages/@vuepress/client/.eslintrc.js create mode 100644 packages/@vuepress/client/src/components/Debug.ts create mode 100644 packages/@vuepress/client/src/constants.d.ts create mode 100644 packages/@vuepress/client/src/createServerApp.ts create mode 100644 packages/@vuepress/client/src/internal/clientAppEnhances.d.ts create mode 100644 packages/@vuepress/client/src/internal/clientAppSetups.d.ts delete mode 100644 packages/@vuepress/client/src/internal/index.ts create mode 100644 packages/@vuepress/client/src/internal/pagesData.d.ts delete mode 100644 packages/@vuepress/client/src/server.ts create mode 100644 packages/@vuepress/client/src/types/clientAppEnhance.ts create mode 100644 packages/@vuepress/client/src/types/clientAppSetup.ts create mode 100644 packages/@vuepress/client/src/types/index.ts create mode 100644 packages/@vuepress/client/tsconfig.build.json delete mode 100644 packages/@vuepress/core/src/app/createAppMarkdown.ts create mode 100644 packages/@vuepress/core/src/app/createAppVersion.ts delete mode 100644 packages/@vuepress/core/src/app/createClientData.ts create mode 100644 packages/@vuepress/core/src/app/prepare/index.ts create mode 100644 packages/@vuepress/core/src/app/prepare/prepareClientAppEnhances.ts create mode 100644 packages/@vuepress/core/src/app/prepare/prepareClientAppSetups.ts create mode 100644 packages/@vuepress/core/src/app/prepare/prepareLayoutComponents.ts create mode 100644 packages/@vuepress/core/src/app/prepare/preparePageComponents.ts create mode 100644 packages/@vuepress/core/src/app/prepare/preparePageData.ts rename packages/@vuepress/core/src/{plugins/routesPlugin.ts => app/prepare/prepareRoutes.ts} (57%) create mode 100644 packages/@vuepress/core/src/app/prepare/prepareSiteData.ts delete mode 100644 packages/@vuepress/core/src/app/types.ts create mode 100644 packages/@vuepress/core/src/page/file/index.ts rename packages/@vuepress/core/src/page/{ => file}/resolveFileContent.ts (63%) rename packages/@vuepress/core/src/page/{ => file}/resolveFilePath.ts (52%) create mode 100644 packages/@vuepress/core/src/page/resolvePageComponent.ts create mode 100644 packages/@vuepress/core/src/page/resolvePageFile.ts delete mode 100644 packages/@vuepress/core/src/page/resolvePageHeaders.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createHookQueue.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiApplyOption.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiHooks.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiOptions.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiPlugins.ts create mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiRegisterHooks.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiRegisterOptions.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/createPluginApiUse.ts create mode 100644 packages/@vuepress/core/src/plugin-api/normalizeClientFilesHook.ts create mode 100644 packages/@vuepress/core/src/plugin-api/normalizeReturnObjectHook.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/options/createOption.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/options/index.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/options/normalizeOptionAlias.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/options/normalizeOptionClientDynamicModules.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/options/normalizeOptionDefine.ts delete mode 100644 packages/@vuepress/core/src/plugin-api/options/types.ts delete mode 100644 packages/@vuepress/core/src/plugins/index.ts delete mode 100644 packages/@vuepress/core/src/plugins/layoutComponentsPlugin.ts delete mode 100644 packages/@vuepress/core/src/plugins/pageComponentsPlugin.ts delete mode 100644 packages/@vuepress/core/src/plugins/siteDataPlugin.ts create mode 100644 packages/@vuepress/core/src/types/app.ts create mode 100644 packages/@vuepress/core/src/types/bundler.ts create mode 100644 packages/@vuepress/core/src/types/config.ts create mode 100644 packages/@vuepress/core/src/types/index.ts create mode 100644 packages/@vuepress/core/src/types/page.ts create mode 100644 packages/@vuepress/core/src/types/plugin-api/hooks.ts create mode 100644 packages/@vuepress/core/src/types/plugin-api/index.ts create mode 100644 packages/@vuepress/core/src/types/plugin-api/pluginApi.ts create mode 100644 packages/@vuepress/core/src/types/plugin.ts create mode 100644 packages/@vuepress/core/src/types/theme-api/index.ts create mode 100644 packages/@vuepress/core/src/types/theme-api/themeApi.ts create mode 100644 packages/@vuepress/core/src/types/theme.ts create mode 100644 packages/@vuepress/core/tsconfig.build.json create mode 100644 packages/@vuepress/markdown/__tests__/markdown.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/plugins/customComponentPlugin.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/plugins/extractHeadersPlugin.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/plugins/hoistTagsPlugin.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/plugins/linksPlugin.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/utils/compose.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/utils/parseEmoji.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/utils/parseHeaderDeeply.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/utils/removeNonCodeWrappedHTML.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/utils/slugify.spec.ts create mode 100644 packages/@vuepress/markdown/__tests__/utils/unescapeHtml.spec.ts create mode 100644 packages/@vuepress/markdown/package.json create mode 100644 packages/@vuepress/markdown/src/index.ts create mode 100644 packages/@vuepress/markdown/src/markdown.ts create mode 100644 packages/@vuepress/markdown/src/plugins/customComponentPlugin/customComponentPlugin.ts create mode 100644 packages/@vuepress/markdown/src/plugins/customComponentPlugin/htmlBlock.ts create mode 100644 packages/@vuepress/markdown/src/plugins/customComponentPlugin/index.ts create mode 100644 packages/@vuepress/markdown/src/plugins/customComponentPlugin/inlineTags.ts create mode 100644 packages/@vuepress/markdown/src/plugins/extractHeadersPlugin.ts create mode 100644 packages/@vuepress/markdown/src/plugins/hoistTagsPlugin.ts create mode 100644 packages/@vuepress/markdown/src/plugins/index.ts create mode 100644 packages/@vuepress/markdown/src/plugins/linksPlugin/index.ts create mode 100644 packages/@vuepress/markdown/src/plugins/linksPlugin/isExternalLink.ts create mode 100644 packages/@vuepress/markdown/src/plugins/linksPlugin/linksPlugin.ts create mode 100644 packages/@vuepress/markdown/src/plugins/linksPlugin/resolvePaths.ts create mode 100644 packages/@vuepress/markdown/src/types.ts create mode 100644 packages/@vuepress/markdown/src/utils/compose.ts create mode 100644 packages/@vuepress/markdown/src/utils/index.ts create mode 100644 packages/@vuepress/markdown/src/utils/parseEmoji.ts create mode 100644 packages/@vuepress/markdown/src/utils/parseHeader.ts create mode 100644 packages/@vuepress/markdown/src/utils/parseHeaderDeeply.ts create mode 100644 packages/@vuepress/markdown/src/utils/removeMarkdownTokens.ts create mode 100644 packages/@vuepress/markdown/src/utils/removeNonCodeWrappedHTML.ts create mode 100644 packages/@vuepress/markdown/src/utils/slugify.ts create mode 100644 packages/@vuepress/markdown/src/utils/unescapeHtml.ts create mode 100644 packages/@vuepress/markdown/tsconfig.build.json create mode 100644 packages/@vuepress/markdown/tsconfig.json create mode 100644 packages/@vuepress/shared/__tests__/utils/ensureEndingSlash.spec.ts create mode 100644 packages/@vuepress/shared/__tests__/utils/ensureLeadingSlash.spec.ts create mode 100644 packages/@vuepress/shared/__tests__/utils/formatDateString.spec.ts create mode 100644 packages/@vuepress/shared/__tests__/utils/normalizePackageName.spec.ts create mode 100644 packages/@vuepress/shared/__tests__/utils/removeEndingSlash.spec.ts create mode 100644 packages/@vuepress/shared/__tests__/utils/removeLeadingSlash.spec.ts create mode 100644 packages/@vuepress/shared/package.json create mode 100644 packages/@vuepress/shared/src/index.ts create mode 100644 packages/@vuepress/shared/src/types/client.ts create mode 100644 packages/@vuepress/shared/src/types/index.ts create mode 100644 packages/@vuepress/shared/src/types/page.ts create mode 100644 packages/@vuepress/shared/src/types/site.ts create mode 100644 packages/@vuepress/shared/src/utils/ensureEndingSlash.ts create mode 100644 packages/@vuepress/shared/src/utils/ensureLeadingSlash.ts create mode 100644 packages/@vuepress/shared/src/utils/formatDateString.ts create mode 100644 packages/@vuepress/shared/src/utils/index.ts create mode 100644 packages/@vuepress/shared/src/utils/normalizePackageName.ts create mode 100644 packages/@vuepress/shared/src/utils/removeEndingSlash.ts create mode 100644 packages/@vuepress/shared/src/utils/removeLeadingSlash.ts create mode 100644 packages/@vuepress/shared/tsconfig.build.json create mode 100644 packages/@vuepress/shared/tsconfig.json create mode 100644 packages/@vuepress/theme-default/tsconfig.build.json create mode 100644 packages/@vuepress/theme-vue/tsconfig.build.json rename packages/@vuepress/{core/src/page/utils.ts => utils/__tests__/__fixtures__/bar.js} (100%) create mode 100644 packages/@vuepress/utils/__tests__/__fixtures__/foo/index.js delete mode 100644 packages/@vuepress/utils/__tests__/normalizeSeparator.spec.ts delete mode 100644 packages/@vuepress/utils/__tests__/preprocessMarkdownContent.spec.ts delete mode 100644 packages/@vuepress/utils/__tests__/preprocessVueContent.spec.ts create mode 100644 packages/@vuepress/utils/__tests__/renderHead.spec.ts create mode 100644 packages/@vuepress/utils/__tests__/renderHeadAttrs.spec.ts create mode 100644 packages/@vuepress/utils/__tests__/requireResolve.spec.ts delete mode 100644 packages/@vuepress/utils/src/normalizeSeparator.ts delete mode 100644 packages/@vuepress/utils/src/preprocessMarkdownContent.ts delete mode 100644 packages/@vuepress/utils/src/preprocessVueContent.ts create mode 100644 packages/@vuepress/utils/src/renderHead.ts create mode 100644 packages/@vuepress/utils/src/renderHeadAttrs.ts create mode 100644 packages/@vuepress/utils/src/requireResolve.ts create mode 100644 packages/@vuepress/utils/tsconfig.build.json create mode 100644 packages/docs/tsconfig.json create mode 100644 packages/vuepress/tsconfig.build.json delete mode 100644 playground/build.ts delete mode 100644 playground/dev.ts rename playground/{src => docs}/.vuepress/public/logo.png (100%) rename playground/{src => docs}/.vuepress/theme/assets/logo.png (100%) rename playground/{src => docs}/.vuepress/theme/components/Logo.vue (100%) rename playground/{src => docs}/.vuepress/theme/index.ts (100%) rename playground/{src => docs}/.vuepress/theme/layouts/Layout.vue (66%) rename playground/{src => docs}/.vuepress/theme/shims-vue.d.ts (100%) create mode 100644 playground/docs/README.md rename playground/{src => docs}/about/README.md (87%) create mode 100644 playground/docs/foo/index.md create mode 100644 playground/docs/test.md delete mode 100644 playground/src/README.md create mode 100644 playground/src/app.ts create mode 100644 playground/src/build.ts create mode 100644 playground/src/clientAppEnhance.ts create mode 100644 playground/src/clientAppSetup.ts create mode 100644 playground/src/dev.ts create mode 100644 playground/src/test-plugin.js delete mode 100644 playground/test-plugin.js create mode 100644 playground/tsconfig.json diff --git a/.eslintignore b/.eslintignore index a370e7cf24..04a8b3d2e3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,6 @@ node_modules/ -!.vuepress/ -!.eslintrc.js -!.commitlintrc.js +.temp/ lib/ dist/ +!.vuepress/ +!.*.js diff --git a/.eslintrc.js b/.eslintrc.js index 32431c5b92..de18383820 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -5,8 +5,13 @@ module.exports = { { files: ['*.ts'], extends: 'vuepress-typescript', + parserOptions: { + project: ['packages/**/tsconfig.json', 'playground/tsconfig.json'], + }, rules: { - '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-var-requires': 'off', }, }, diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 6ee7332a57..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: Bug report -about: Create a bug report to help us improve -title: '[Bug Report] ' -labels: '' -assignees: '' ---- - -## Environment - - - - - -- VuePress version: -- OS: -- Browser: - -## Describe the bug - - - -## Steps To Reproduce - - - - - -## Screenshots - - - -## Expected behavior - - - -## Additional context - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 05f6ad9333..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Feature request -about: Suggest an idea -title: '[Feature Request] ' -labels: '' -assignees: '' ---- - -## What problem does the feature solve? - - - -## Proposed solution - - - -## Alternative solutions - - - -## Additional context - - diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 79dfe8267d..0000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,40 +0,0 @@ - - - - - -**Summary** - - - - - - - -**What kind of change does this PR introduce?** (check at least one) - -- [ ] Bug fix (fix) -- [ ] Feature (feat) -- [ ] Performance enhancement (perf) -- [ ] Code Style (style) -- [ ] Refactor (refactor) -- [ ] Docs (docs) -- [ ] Build-related changes (build) -- [ ] CI-related changes (ci) -- [ ] Testing (test) -- [ ] Other, please describe: - -**Does this PR introduce a breaking change?** (check one) - -- [ ] Yes -- [ ] No - -If yes, please describe the impact and migration path for existing applications: - -**The PR fulfills these requirements** - -- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number) - -**Other information** - - diff --git a/.github/lock.yml b/.github/lock.yml deleted file mode 100644 index 26fb7c9287..0000000000 --- a/.github/lock.yml +++ /dev/null @@ -1,37 +0,0 @@ -# Configuration for Lock Threads - https://github.com/dessant/lock-threads - -# Number of days of inactivity before a closed issue or pull request is locked -daysUntilLock: 120 - -# Skip issues and pull requests created before a given timestamp. Timestamp must -# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable -skipCreatedBefore: false - -# Issues and pull requests with these labels will be ignored. Set to `[]` to disable -exemptLabels: [] - -# Label to add before locking, such as `outdated`. Set to `false` to disable -lockLabel: false - -# Comment to post before locking. Set to `false` to disable -lockComment: > - This thread has been automatically locked since there has not been - any recent activity after it was closed. Please open a new issue for - related bugs. - -# Assign `resolved` as the reason for locking. Set to `false` to disable -setLockReason: true -# Limit to only `issues` or `pulls` -# only: issues - -# Optionally, specify configuration settings just for `issues` or `pulls` -# issues: -# exemptLabels: -# - help-wanted -# lockLabel: outdated - -# pulls: -# daysUntilLock: 30 - -# Repository to extend settings from -# _extends: repo diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 76fb52db25..0000000000 --- a/.github/stale.yml +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration for probot-stale - https://github.com/probot/stale - -# Number of days of inactivity before an Issue or Pull Request becomes stale -daysUntilStale: 60 - -# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. -# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. -daysUntilClose: 7 - -# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) -onlyLabels: [] - -# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable -exemptLabels: - - bug - -# Set to true to ignore issues in a project (defaults to false) -exemptProjects: false - -# Set to true to ignore issues in a milestone (defaults to false) -exemptMilestones: false - -# Set to true to ignore issues with an assignee (defaults to false) -exemptAssignees: false - -# Label to use when marking as stale -staleLabel: stale - -# Comment to post when marking as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. - -# Comment to post when removing the stale label. -# unmarkComment: > -# Your comment here. - -# Comment to post when closing a stale Issue or Pull Request. -# closeComment: > -# Your comment here. - -# Limit the number of actions per hour, from 1-30. Default is 30 -limitPerRun: 30 -# Limit to only `issues` or `pulls` -# only: issues - -# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': -# pulls: -# daysUntilStale: 30 -# markComment: > -# This pull request has been automatically marked as stale because it has not had -# recent activity. It will be closed if no further activity occurs. Thank you -# for your contributions. - -# issues: -# exemptLabels: -# - confirmed diff --git a/.gitignore b/.gitignore index 12c3cc84ac..ef7e8e0e6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # Temp files .temp/ +# Cache files +.cache/ + # Dist files lib/ diff --git a/.vscode/settings.json b/.vscode/settings.json index 4b58261d46..fdc2d4f9b2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,6 +29,7 @@ "redirector", "redirectors", "serializers", + "slugify", "vuepress", "zoomable" ] diff --git a/README.md b/README.md index 12c210e595..b9de9efd7e 100644 --- a/README.md +++ b/README.md @@ -2,36 +2,104 @@ > With the power of Vue 3.0 and TypeScript -## Status: Prototype +## Status: Pre-Alpha -Lots of functions are not completed. Just for preview. +Core features have been completed, but are still unstable. -It won't enter alpha stage before the upstream packages (e.g. vue, vue-router, etc) release a stable version. - -### TODO - -- [x] Plugin API -- [ ] Theme API -- [ ] Style processors -- [ ] Palette system -- [ ] Default theme -- [ ] Pre-render (SSR build) -- [ ] Watch & Reload -- [ ] CLI -- [ ] Official plugins -- [ ] ... +Accepting issues and PRs from community. Contribution welcome! ## Develop & Preview ```sh -# install +# install dependencies +# with yarn classic workspaces yarn -# build with --watch +# run dev and build script +# compiling typescript source code yarn dev -# build yarn build -# run playground script -yarn play +# testing +yarn test + +# run playground script to preview +# start a dev-server +yarn play:dev +# build static files +yarn play:build +# serve static files locally +yarn play:serve ``` + +### TODO List + +Features in the following list are not fully determined, and might be changed or removed during development. + +- [ ] @vuepress/core + + - [x] Plugin API + - [x] clientAppEnhanceFiles + - [x] clientAppSetupFiles + - [ ] extendPageData + - [ ] extendCli + - [ ] additionalPages + - [ ] globalUIComponents + - [ ] configureWebpack + - [ ] Theme API + - [ ] Palette System + - [ ] Theme Inheritance + +- [ ] @vuepress/markdown + + - [x] customComponentPlugin + - [ ] highlightPlugin + - [ ] highlightLinesPlugin + - [x] hoistTagsPlugin + - [ ] lineNumbersPlugin + - [x] linksPlugin + - [ ] snippetsPlugin + +- [ ] @vuepress/bundler-webpack + + - [x] Dev server (dev) + - [x] Pre-render (build) + - [ ] Style pre-processors config + +- [ ] @vuepress/theme-default + +- [ ] @vuepress/cli + + - [ ] Resolve user config file + - [ ] Watch & Reload (dev) + +- [ ] official plugins + +- [ ] docs + - [ ] Migration Guide + +### Breaking Changes + +Temporarily record some breaking changes here. + +#### Core + +- permalink patterns + - `:i_month` -> removed + - `:i_day` -> removed + - `:minutes` -> removed (undocumented in 1.0) + - `:seconds` -> removed (undocumented in 1.0) + - `:regular` -> `:raw` + +#### Plugin API + +- `ready` -> `onPrepared` +- `updated` -> removed +- `generated` -> `onGenerated` +- `clientDynamicModules` -> removed, use `app.writeTemp()` in `onPrepared` hook directly +- `enhanceAppFiles` -> `clientAppEnhanceFiles` +- `clientRootMixin` -> `clientAppSetupFiles` + +#### Theme API + +- `extend` -> `extends` diff --git a/jest.config.js b/jest.config.js index 47d356f385..c676d82eb6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -23,7 +23,7 @@ module.exports = { [`^@internal/(.*)$`]: `/packages/@vuepress/client/.temp/internal/$1`, }, testMatch: ['/packages/**/__tests__/**/*.spec.ts'], - testPathIgnorePatterns: ['/node_modules/'], + testPathIgnorePatterns: ['/node_modules/', '/__fixtures__/'], snapshotSerializers: [require.resolve('jest-serializer-vue')], // coverage config diff --git a/package.json b/package.json index b80973f23a..a131e4ae74 100644 --- a/package.json +++ b/package.json @@ -7,13 +7,14 @@ ], "scripts": { "build": "tsc --build", - "build:docs": "yarn workspace docs build", "clean": "lerna run clean --stream --ignore docs", "dev": "tsc --build --watch", - "dev:docs": "yarn workspace docs dev", - "lint": "lerna run lint --stream", - "play": "yarn workspace playground dev", + "docs:build": "yarn workspace docs build", + "docs:dev": "yarn workspace docs dev", + "lint": "eslint --ext .js,.ts,.vue .", "play:build": "yarn workspace playground build", + "play:dev": "yarn workspace playground dev", + "play:serve": "yarn workspace playground serve", "release": "yarn lint && yarn clean && yarn build && yarn test && lerna publish", "test": "jest --runInBand" }, @@ -24,34 +25,30 @@ } }, "lint-staged": { - "*.{js,ts,vue}": [ - "eslint --fix" - ], - "*.{json,md,yml}": [ - "prettier --write" - ], - "package.json": [ - "sort-package-json" - ] + "*.{js,ts,vue}": "eslint --fix", + "*.{json,md,yml}": "prettier --write", + "package.json": "sort-package-json" }, "prettier": "prettier-config-vuepress", "devDependencies": { - "@commitlint/cli": "^8.3.5", - "@commitlint/config-conventional": "^8.3.4", - "@types/jest": "^25.2.1", - "eslint": "^6.4.0", + "@commitlint/cli": "^11.0.0", + "@commitlint/config-conventional": "^11.0.0", + "@types/debug": "^4.1.5", + "@types/jest": "^26.0.14", + "core-js": "^3.6.5", + "eslint": "^7.10.0", "eslint-config-vuepress": "^2.2.0", - "eslint-config-vuepress-typescript": "^1.1.4", - "husky": "^4.2.5", - "jest": "^25.1.0", + "eslint-config-vuepress-typescript": "^1.3.0", + "husky": "^4.3.0", + "jest": "^26.4.2", "jest-serializer-vue": "^2.0.2", - "lerna": "^3.20.2", - "lint-staged": "^10.2.2", - "prettier": "^2.0.5", - "prettier-config-vuepress": "^1.0.0", + "lerna": "^3.22.1", + "lint-staged": "^10.4.0", + "prettier": "^2.1.2", + "prettier-config-vuepress": "^1.1.0", "rimraf": "^3.0.2", - "sort-package-json": "^1.42.2", - "ts-jest": "^25.5.1", - "typescript": "^3.8.3" + "sort-package-json": "^1.46.0", + "ts-jest": "^26.4.1", + "typescript": "^4.0.3" } } diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index 0aecba434b..f4625ca710 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -23,20 +23,34 @@ "lib" ], "scripts": { - "build": "tsc -b", - "clean": "rimraf lib tsconfig.tsbuildinfo", - "lint": "eslint --ext .ts src" + "build": "tsc -b tsconfig.build.json", + "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { + "@babel/core": "^7.11.6", "@types/webpack-dev-server": "^3.10.1", + "@types/webpack-env": "^1.15.3", + "@vue/babel-preset-app": "^4.5.6", + "@vue/compiler-sfc": "^3.0.0", + "@vue/server-renderer": "^3.0.0", + "@vuepress/client": "2.0.0-alpha.0", "@vuepress/core": "2.0.0-alpha.0", - "@vuepress/markdown-loader": "^1.5.0", + "@vuepress/utils": "2.0.0-alpha.0", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "core-js": "^3.6.5", + "css-loader": "^4.3.0", "file-loader": "^6.0.0", - "html-webpack-plugin": "4.3.0", + "html-webpack-plugin": "^4.5.0", + "mini-css-extract-plugin": "^0.11.2", + "optimize-css-assets-webpack-plugin": "^5.0.4", "portfinder": "^1.0.26", + "style-loader": "^1.2.1", + "ts-loader": "^8.0.4", "url-loader": "^4.1.0", - "vue-loader": "16.0.0-beta.2", - "webpack": "^4.43.0", + "vue-loader": "^16.0.0-beta.8", + "webpack": "^4.44.2", + "webpack-chain": "^6.5.1", "webpack-dev-server": "^3.10.3" } } diff --git a/packages/@vuepress/bundler-webpack/src/build/build.ts b/packages/@vuepress/bundler-webpack/src/build/build.ts deleted file mode 100644 index 94f364afcd..0000000000 --- a/packages/@vuepress/bundler-webpack/src/build/build.ts +++ /dev/null @@ -1,42 +0,0 @@ -import * as webpack from 'webpack' -import { App } from '@vuepress/core' -import { fs } from '@vuepress/utils' -import { createClientConfig, createServerConfig } from '../config' - -export const build = async (app: App): Promise => { - // initialize app - await app.init() - - // create webpack config - const clientConfig = createClientConfig(app).toConfig() - const serverConfig = createServerConfig(app).toConfig() - - // prepare app - await app.prepare() - - // empty dest directory - await fs.emptyDir(app.dir.dest()) - - // TODO - - await new Promise((resolve, reject) => { - webpack([clientConfig, serverConfig], (err, stats) => { - if (err) { - reject(err) - } else if (stats.hasErrors()) { - stats.toJson().errors.forEach((err) => { - console.error(err) - }) - reject(new Error('Failed to compile with errors')) - } else { - if (stats.hasWarnings()) { - stats.toJson().warnings.forEach((warning) => { - console.warn(warning) - }) - } - - resolve() - } - }) - }) -} diff --git a/packages/@vuepress/bundler-webpack/src/build/createBuild.ts b/packages/@vuepress/bundler-webpack/src/build/createBuild.ts new file mode 100644 index 0000000000..a03500db1b --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/createBuild.ts @@ -0,0 +1,100 @@ +import * as webpack from 'webpack' +import type { CreateServerAppEntry } from '@vuepress/client' +import type { App, Bundler } from '@vuepress/core' +import { fs } from '@vuepress/utils' +import type { BundlerWebpackOptions } from '../createBundler' +import { + createClientConfig, + clientManifestFilename, +} from './createClientConfig' +import { createServerConfig } from './createServerConfig' +import { renderPage } from './renderPage' +import { resolveClientManifestMeta } from './resolveClientManifestMeta' +import type { ClientManifest } from './ssr' + +export const createBuild = ( + options: BundlerWebpackOptions +): Bundler['build'] => async (app: App) => { + // initialize app + await app.init() + + // create webpack config + const clientConfig = createClientConfig(app).toConfig() + const serverConfig = createServerConfig(app).toConfig() + + // prepare app + await app.prepare() + + // empty dest directory + await fs.emptyDir(app.dir.dest()) + + // webpack compile + await new Promise((resolve, reject) => { + webpack([clientConfig, serverConfig], (err, stats) => { + if (err) { + reject(err) + } else if (stats.hasErrors()) { + stats.toJson().errors.forEach((err) => { + console.error(err) + }) + reject(new Error('Failed to compile with errors')) + } else { + if (stats.hasWarnings()) { + stats.toJson().warnings.forEach((warning) => { + console.warn(warning) + }) + } + + resolve() + } + }) + }) + + // load ssr template file + const ssrTemplate = (await fs.readFile(app.options.templateSSR)).toString() + + // load the client manifest file + const clientManifest = require(app.dir.dest( + clientManifestFilename + )) as ClientManifest + + // resolve client files meta + const { + allFilesMeta, + initialFilesMeta, + asyncFilesMeta, + moduleFilesMetaMap, + } = resolveClientManifestMeta(clientManifest) + + // load the compiled server bundle + const { createServerApp } = require(app.dir.dest( + '.server/app' + )) as CreateServerAppEntry + + // create vue ssr app + const { app: vueApp, router: vueRouter } = await createServerApp() + + // pre-render pages to html files + for (const page of app.pages) { + await renderPage({ + app, + page, + vueApp, + vueRouter, + ssrTemplate, + allFilesMeta, + initialFilesMeta, + asyncFilesMeta, + moduleFilesMetaMap, + }) + } + + // keep the server bundle files in debug mode + if (!app.env.isDebug) { + // empty server dest directory after pages rendered + await fs.emptyDir(app.dir.dest('.server')) + } + + // plugin hook: onGenerated + await app.pluginApi.hooks.onGenerated.process(app) +} diff --git a/packages/@vuepress/bundler-webpack/src/build/createClientConfig.ts b/packages/@vuepress/bundler-webpack/src/build/createClientConfig.ts new file mode 100644 index 0000000000..61cd7ae3f6 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/createClientConfig.ts @@ -0,0 +1,81 @@ +import * as Config from 'webpack-chain' +import * as MiniCSSExtractPlugin from 'mini-css-extract-plugin' +// import * as OptimizeCSSAssetsWebpackPlugin from 'optimize-css-assets-webpack-plugin' +import { App } from '@vuepress/core' +import { createClientBaseConfig } from '../config' +import { createClientPlugin } from './ssr' + +/** + * Filename of the client manifest file that generated by client plugin + */ +export const clientManifestFilename = '.server/client-manifest.json' + +export const createClientConfig = (app: App): Config => { + const isServer = false + const isBuild = true + + const config = createClientBaseConfig({ + app, + isBuild, + }) + + // use internal vuepress-loader to handle SSR dependencies + // TODO: remove this loader and modify `build/renderPage` when vue-loader supports SSR + config.module + .rule('vue') + .test(/\.vue$/) + .use('vuepress-loader') + .before('vue-loader') + .loader(require.resolve('./ssr/vuepressLoader')) + .end() + + // vuepress client plugin, handle client assets info for ssr + config + .plugin('vuepress-client') + .use(createClientPlugin(clientManifestFilename)) + + // optimizations for production + if (app.env.isProd) { + // extract-css + config.plugin('extract-css').use(MiniCSSExtractPlugin, [ + { + filename: 'assets/css/styles.[chunkhash:8].css', + }, + ]) + + // // ensure all css are extracted together. + // // since most of the CSS will be from the theme and very little + // // CSS will be from async chunks + // config.optimization.splitChunks({ + // cacheGroups: { + // styles: { + // name: 'styles', + // // necessary to ensure async chunks are also extracted + // test: (m) => { + // return /css\/mini-extract/.test(m.type) + // }, + // chunks: 'all', + // enforce: true, + // }, + // }, + // }) + // // TODO: optimize assets + // config + // .plugin('optimize-css') + // .use(OptimizeCSSAssetsWebpackPlugin, [ + // { + // canPrint: false, + // cssProcessorOptions: { + // parser: require('postcss-safe-parser'), + // autoprefixer: { disable: true }, + // mergeLonghand: false, + // }, + // }, + // ]) + } + + // plugin hook: chainWebpack + app.pluginApi.hooks.chainWebpack.process(config, isServer, isBuild) + + return config +} diff --git a/packages/@vuepress/bundler-webpack/src/build/createServerConfig.ts b/packages/@vuepress/bundler-webpack/src/build/createServerConfig.ts new file mode 100644 index 0000000000..b81b3dd277 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/createServerConfig.ts @@ -0,0 +1,53 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' +import { createBaseConfig } from '../config' + +export const createServerConfig = (app: App): Config => { + const isServer = true + const isBuild = true + + const config = createBaseConfig({ + app, + isServer, + isBuild, + }) + + // server entry + config.entry('app').add(app.dir.client('lib/createServerApp.js')) + + // server output + // remove after pages rendered + config.output + .path(app.dir.dest('.server')) + .filename('app.js') + .publicPath(app.options.base) + .libraryTarget('commonjs2') + + // set target to node + // vue-loader will use compiler-ssr internally + config.target('node') + + // set externals + config.externals([/(^(vue|vue-router)$)|(^@vue\/[^/]*$)/]) + + // devtool + config.devtool('source-map') + + // do not need to minimize server bundle + config.optimization.minimize(false) + + // use internal vuepress-loader to handle SSR dependencies + // TODO: remove this loader and modify `build/renderPage` when vue-loader supports SSR + config.module + .rule('vue') + .test(/\.vue$/) + .use('vuepress-loader') + .before('vue-loader') + .loader(require.resolve('./ssr/vuepressLoader')) + .end() + + // plugin hook: chainWebpack + app.pluginApi.hooks.chainWebpack.process(config, isServer, isBuild) + + return config +} diff --git a/packages/@vuepress/bundler-webpack/src/build/index.ts b/packages/@vuepress/bundler-webpack/src/build/index.ts index 51767a1772..13bc8b96f1 100644 --- a/packages/@vuepress/bundler-webpack/src/build/index.ts +++ b/packages/@vuepress/bundler-webpack/src/build/index.ts @@ -1 +1 @@ -export * from './build' +export * from './createBuild' diff --git a/packages/@vuepress/bundler-webpack/src/build/renderPage.ts b/packages/@vuepress/bundler-webpack/src/build/renderPage.ts new file mode 100644 index 0000000000..97b268a23c --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/renderPage.ts @@ -0,0 +1,120 @@ +import type { App as VueApp } from 'vue' +import type { Router as VueRouter } from 'vue-router' +import { renderToString } from '@vue/server-renderer' +import type { SSRContext } from '@vue/server-renderer' +import type { Page, App } from '@vuepress/core' +import { isArray, removeLeadingSlash } from '@vuepress/shared' +import { fs, renderHead } from '@vuepress/utils' +import { renderPagePrefetchLinks } from './renderPagePrefetchLinks' +import { renderPagePreloadLinks } from './renderPagePreloadLinks' +import { renderPageScripts } from './renderPageScripts' +import { renderPageStyles } from './renderPageStyles' +import { resolvePageClientFilesMeta } from './resolvePageClientFilesMeta' +import type { FileMeta, ModuleFilesMetaMap } from './types' + +export interface VuepressSSRContext extends SSRContext { + _registeredComponents: Set +} + +/** + * Render page to html file, return the html file path + */ +export const renderPage = async ({ + app, + page, + vueApp, + vueRouter, + ssrTemplate, + allFilesMeta, + initialFilesMeta, + asyncFilesMeta, + moduleFilesMetaMap, +}: { + app: App + page: Page + vueApp: VueApp + vueRouter: VueRouter + ssrTemplate: string + allFilesMeta: FileMeta[] + initialFilesMeta: FileMeta[] + asyncFilesMeta: FileMeta[] + moduleFilesMetaMap: ModuleFilesMetaMap +}): Promise => { + // switch to current page route + await vueRouter.push(page.path) + await vueRouter.isReady() + + // create vue ssr context + const ssrContext: VuepressSSRContext = { + _registeredComponents: new Set(), + } + + // render current page to string + const pageRendered = await renderToString(vueApp, ssrContext) + + // resolve client files that used by this page + const pageClientFilesMeta = resolvePageClientFilesMeta({ + moduleRequests: Array.from(ssrContext._registeredComponents), + moduleFilesMetaMap, + }) + + // resolve page head config + const pageHead = isArray(page.frontmatter.head) ? page.frontmatter.head : [] + + // TODO: change the template? currently we simply use vue 2 ssr template + // generate html string + const html = ssrTemplate + // page lang + // TODO + .replace('{{ lang }}', 'en') + // page title + // TODO: locale title + .replace( + '{{ title }}', + `${page.title ? `${page.title} | ` : ``}${app.options.title}` + ) + // vuepress version + .replace('{{ version }}', `v${app.version}`) + // site config head + // TODO: locale head + // TODO: locale description + .replace('{{{ userHeadTags }}}', app.options.head.map(renderHead).join('')) + // page frontmatter head + .replace('{{{ pageMeta }}}', pageHead.map(renderHead).join('')) + // page preload & prefetch links + .replace( + '{{{ renderResourceHints() }}}', + `${renderPagePreloadLinks({ + app, + initialFilesMeta, + pageClientFilesMeta, + })}${renderPagePrefetchLinks({ + app, + asyncFilesMeta, + pageClientFilesMeta, + })}` + ) + // page styles + .replace( + '{{{ renderStyles() }}}', + renderPageStyles({ app, initialFilesMeta, pageClientFilesMeta }) + ) + .replace('', pageRendered) + // page scripts + .replace( + '{{{ renderScripts() }}}', + renderPageScripts({ app, initialFilesMeta, pageClientFilesMeta }) + ) + + // TODO: teleports + + // get html file name + const htmlFilename = app.dir.dest( + removeLeadingSlash(page.path.replace(/\/$/, '/index.html')) + ) + + // write html file + await fs.outputFile(htmlFilename, html) + + return htmlFilename +} diff --git a/packages/@vuepress/bundler-webpack/src/build/renderPagePrefetchLinks.ts b/packages/@vuepress/bundler-webpack/src/build/renderPagePrefetchLinks.ts new file mode 100644 index 0000000000..7e2774c1d3 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/renderPagePrefetchLinks.ts @@ -0,0 +1,32 @@ +import type { App } from '@vuepress/core' +import type { FileMeta } from './types' + +/** + * Render prefetch links of current page + */ +export const renderPagePrefetchLinks = ({ + app, + asyncFilesMeta, + pageClientFilesMeta, +}: { + app: App + asyncFilesMeta: FileMeta[] + pageClientFilesMeta: FileMeta[] +}): string => { + // shouldPrefetch option + const shouldPrefetch = app.options.shouldPrefetch + + // async files excluding files used by current page should be prefetch + const prefetchFilesMeta = asyncFilesMeta.filter( + ({ file }) => !pageClientFilesMeta.some((f) => f.file === file) + ) + + return prefetchFilesMeta + .map(({ file, type }) => { + if (shouldPrefetch && !shouldPrefetch(file, type)) { + return '' + } + return `` + }) + .join('') +} diff --git a/packages/@vuepress/bundler-webpack/src/build/renderPagePreloadLinks.ts b/packages/@vuepress/bundler-webpack/src/build/renderPagePreloadLinks.ts new file mode 100644 index 0000000000..5c98338b3a --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/renderPagePreloadLinks.ts @@ -0,0 +1,39 @@ +import type { App } from '@vuepress/core' +import type { FileMeta } from './types' + +/** + * Render preload links of current page + */ +export const renderPagePreloadLinks = ({ + app, + initialFilesMeta, + pageClientFilesMeta, +}: { + app: App + initialFilesMeta: FileMeta[] + pageClientFilesMeta: FileMeta[] +}): string => { + // shouldPreload option + const shouldPreload = app.options.shouldPreload + + // initial files and files used by current page should be preload + const preloadFilesMeta = [...initialFilesMeta, ...pageClientFilesMeta] + + return preloadFilesMeta + .map(({ file, extension, type }) => { + // by default, we only preload scripts or css + if (!shouldPreload && type !== 'script' && type !== 'style') { + return '' + } + + // user wants to explicitly control what to preload + if (shouldPreload && !shouldPreload(file, type)) { + return '' + } + + return `` + }) + .join('') +} diff --git a/packages/@vuepress/bundler-webpack/src/build/renderPageScripts.ts b/packages/@vuepress/bundler-webpack/src/build/renderPageScripts.ts new file mode 100644 index 0000000000..6f444e1c8c --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/renderPageScripts.ts @@ -0,0 +1,22 @@ +import type { App } from '@vuepress/core' +import type { FileMeta } from './types' + +/** + * Render scripts of current page + */ +export const renderPageScripts = ({ + app, + initialFilesMeta, + pageClientFilesMeta, +}: { + app: App + initialFilesMeta: FileMeta[] + pageClientFilesMeta: FileMeta[] +}): string => + // include initial JS files and other async JS files of current page + [...pageClientFilesMeta, ...initialFilesMeta] + .filter(({ type }) => type === 'script') + .map( + ({ file }) => `` + ) + .join('') diff --git a/packages/@vuepress/bundler-webpack/src/build/renderPageStyles.ts b/packages/@vuepress/bundler-webpack/src/build/renderPageStyles.ts new file mode 100644 index 0000000000..77b19f01a5 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/renderPageStyles.ts @@ -0,0 +1,23 @@ +import type { App } from '@vuepress/core' +import type { FileMeta } from './types' + +/** + * Render styles of current page + */ +export const renderPageStyles = ({ + app, + initialFilesMeta, + pageClientFilesMeta, +}: { + app: App + initialFilesMeta: FileMeta[] + pageClientFilesMeta: FileMeta[] +}): string => + // include initial CSS files and other async CSS files of current page + // notice here we put async CSS files after initial CSS files + [...initialFilesMeta, ...pageClientFilesMeta] + .filter(({ type }) => type === 'style') + .map( + ({ file }) => `` + ) + .join('') diff --git a/packages/@vuepress/bundler-webpack/src/build/resolveClientManifestMeta.ts b/packages/@vuepress/bundler-webpack/src/build/resolveClientManifestMeta.ts new file mode 100644 index 0000000000..7de1ba6591 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/resolveClientManifestMeta.ts @@ -0,0 +1,49 @@ +import { resolveFileMeta } from './resolveFileMeta' +import type { ClientManifest } from './ssr' +import type { FileMeta, ModuleFilesMetaMap } from './types' + +/** + * Resolve files meta from clientManifest + */ +export const resolveClientManifestMeta = ({ + all, + initial, + async, + modules, +}: ClientManifest): { + allFilesMeta: FileMeta[] + initialFilesMeta: FileMeta[] + asyncFilesMeta: FileMeta[] + moduleFilesMetaMap: ModuleFilesMetaMap +} => { + // all files meta + const allFilesMeta = all.map(resolveFileMeta) + + // initial files meta + const initialFilesMeta = initial.map(resolveFileMeta) + + // async files meta + const asyncFilesMeta = async.map(resolveFileMeta) + + // module to files meta map + const moduleFilesMetaMap = Object.fromEntries( + Object.entries(modules).map(([moduleRequest, assetFilesIndex]) => { + return [ + moduleRequest, + assetFilesIndex + .map((fileIndex) => allFilesMeta[fileIndex]) + .filter( + ({ file, type }) => + async.includes(file) || (type !== 'style' && type !== 'script') + ), + ] + }) + ) + + return { + allFilesMeta, + initialFilesMeta, + asyncFilesMeta, + moduleFilesMetaMap, + } +} diff --git a/packages/@vuepress/bundler-webpack/src/build/resolveFileMeta.ts b/packages/@vuepress/bundler-webpack/src/build/resolveFileMeta.ts new file mode 100644 index 0000000000..ac847b9214 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/resolveFileMeta.ts @@ -0,0 +1,15 @@ +import { path } from '@vuepress/utils' +import { resolveFileMetaType } from './resolveFileMetaType' +import type { FileMeta } from './types' + +/** + * Resolve client file meta from to file name + */ +export const resolveFileMeta = (file: string): FileMeta => { + const extension = path.extname(file).slice(1) + return { + file, + extension, + type: resolveFileMetaType(extension), + } +} diff --git a/packages/@vuepress/bundler-webpack/src/build/resolveFileMetaType.ts b/packages/@vuepress/bundler-webpack/src/build/resolveFileMetaType.ts new file mode 100644 index 0000000000..4ba5af8975 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/resolveFileMetaType.ts @@ -0,0 +1,21 @@ +import type { FileMetaType } from './types' + +/** + * Resolve client file type by extension + */ +export const resolveFileMetaType = (extension: string): FileMetaType => { + if (extension === 'js') { + return 'script' + } + if (extension === 'css') { + return 'style' + } + if (/jpe?g|png|svg|gif|webp|ico/.test(extension)) { + return 'image' + } + if (/woff2?|ttf|otf|eot/.test(extension)) { + return 'font' + } + // not exhausting all possibilities here, but above covers common cases + return '' +} diff --git a/packages/@vuepress/bundler-webpack/src/build/resolvePageClientFilesMeta.ts b/packages/@vuepress/bundler-webpack/src/build/resolvePageClientFilesMeta.ts new file mode 100644 index 0000000000..0e762b391d --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/resolvePageClientFilesMeta.ts @@ -0,0 +1,18 @@ +import type { FileMeta, ModuleFilesMetaMap } from './types' + +/** + * Get all client files according to module requests of a page + */ +export const resolvePageClientFilesMeta = ({ + moduleRequests, + moduleFilesMetaMap, +}: { + moduleRequests: string[] + moduleFilesMetaMap: ModuleFilesMetaMap +}): FileMeta[] => { + const files: Set = new Set() + moduleRequests.forEach((request) => { + moduleFilesMetaMap[request]?.forEach((file) => files.add(file)) + }) + return Array.from(files) +} diff --git a/packages/@vuepress/bundler-webpack/src/build/ssr/createClientPlugin.ts b/packages/@vuepress/bundler-webpack/src/build/ssr/createClientPlugin.ts new file mode 100644 index 0000000000..1c044ffefc --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/ssr/createClientPlugin.ts @@ -0,0 +1,118 @@ +import type { Plugin, Stats } from 'webpack' +import { isCSS, isJS } from './utils' + +export interface ClientManifest { + all: string[] + initial: string[] + async: string[] + modules: Record +} + +/** + * Vuepress client plugin + * + * Collecting webpack bundled files info for SSR + */ +export const createClientPlugin = ( + filename = 'vuepress-ssr-client-manifest.json' +): Plugin => { + const clientPlugin: Plugin = { + apply(compiler) { + compiler.hooks.emit.tapAsync( + 'vuepress-client-plugin', + (compilation, cb) => { + // get webpack stats object + const stats = compilation.getStats().toJson() + + const { + assets = [], + modules = [], + entrypoints = {}, + chunks = [], + } = stats + + // get all files + const allFiles = assets.map((a) => a.name) + + // get initial entry files + const initialFiles = Object.keys(entrypoints) + .map((name) => entrypoints[name].assets) + .reduce((assets, all) => all.concat(assets), []) + .filter((file) => isJS(file) || isCSS(file)) + + // get files that should be loaded asynchronously + // i.e. script and style files that are not included in the initial entry files + const asyncFiles = allFiles.filter( + (file) => + (isJS(file) || isCSS(file)) && !initialFiles.includes(file) + ) + + // get asset modules + const assetModules = modules.filter( + ( + m + ): m is Stats.FnModules & + Required> => + !!(m.assets && m.assets.length) + ) + + // get modules for client manifest + const manifestModules: ClientManifest['modules'] = {} + + const fileToIndex = (file: string): number => allFiles.indexOf(file) + + modules.forEach((m) => { + // ignore modules duplicated in multiple chunks + if (m.chunks.length !== 1) { + return + } + + const cid = m.chunks[0] + const chunk = chunks.find((c) => c.id === cid) + + if (!chunk || !chunk.files) { + return + } + + // remove appended hash of module identifier + // which is the request string of the module + const request = m.identifier.replace(/\s\w+$/, '') + + // get chunk files index + const files = [...chunk.files.map(fileToIndex)] + + // find all asset modules associated with the same chunk + assetModules.forEach((m) => { + if (m.chunks.some((id) => id === cid)) { + // get asset files + files.push(...m.assets.map(fileToIndex)) + } + }) + + // map the module request to files index + manifestModules[request] = files + }) + + // generate client manifest json file + const clientManifest: ClientManifest = { + all: allFiles, + initial: initialFiles, + async: asyncFiles, + modules: manifestModules, + } + + const clientManifestJson = JSON.stringify(clientManifest, null, 2) + + compilation.assets[filename] = { + source: () => clientManifestJson, + size: () => clientManifestJson.length, + } + + cb() + } + ) + }, + } + + return clientPlugin +} diff --git a/packages/@vuepress/bundler-webpack/src/build/ssr/index.ts b/packages/@vuepress/bundler-webpack/src/build/ssr/index.ts new file mode 100644 index 0000000000..cb27209d1e --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/ssr/index.ts @@ -0,0 +1,2 @@ +export * from './createClientPlugin' +export * from './utils' diff --git a/packages/@vuepress/bundler-webpack/src/build/ssr/utils.ts b/packages/@vuepress/bundler-webpack/src/build/ssr/utils.ts new file mode 100644 index 0000000000..33be37d50f --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/ssr/utils.ts @@ -0,0 +1,3 @@ +export const isJS = (file: string): boolean => /\.js(\?[^.]+)?$/.test(file) + +export const isCSS = (file: string): boolean => /\.css(\?[^.]+)?$/.test(file) diff --git a/packages/@vuepress/bundler-webpack/src/build/ssr/vuepressLoader.ts b/packages/@vuepress/bundler-webpack/src/build/ssr/vuepressLoader.ts new file mode 100644 index 0000000000..01d28281b3 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/ssr/vuepressLoader.ts @@ -0,0 +1,32 @@ +import type * as webpack from 'webpack' + +/** + * A webpack loader to handle SSR dependencies + * + * This loader will only take effect in server bundle + * because we only replace `ssrRender` code + * + * But we still need to use this loader in client, + * to ensure that the module `request` in client and + * server bundle are the same + */ +export = function vuepressLoader( + this: webpack.loader.LoaderContext, + source: string +): string { + // get `request` from loader context + const { request } = this + + // add `request` to `ssrContext._registeredComponents` to handle SSR dependencies + return source.replace( + 'script.ssrRender = ssrRender', + `\ +import { ssrContextKey } from 'vue' +script.ssrRender = (...args) => { + const ssrContext = args[2].appContext.provides[ssrContextKey] + ssrContext._registeredComponents.add(${JSON.stringify(request)}) + return ssrRender(...args) +} +` + ) +} diff --git a/packages/@vuepress/bundler-webpack/src/build/types.ts b/packages/@vuepress/bundler-webpack/src/build/types.ts new file mode 100644 index 0000000000..5cf926c25c --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/build/types.ts @@ -0,0 +1,29 @@ +/** + * Client file meta + */ +export interface FileMeta { + /** + * file name + */ + file: string + + /** + * file extension + */ + extension: string + + /** + * file type + */ + type: FileMetaType +} + +/** + * Client file meta type, mainly used for + */ +export type FileMetaType = 'script' | 'style' | 'image' | 'font' | '' + +/** + * A "module request" to "client files meta" key-value map + */ +export type ModuleFilesMetaMap = Record diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts deleted file mode 100644 index 82f6eef43f..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleDevtool.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' - -/** - * Set webpack devtool - */ -export const handleDevtool = (config: Config, app: App): void => { - config.devtool( - app.env.isDebug ? 'source-map' : 'cheap-module-eval-source-map' - ) -} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts deleted file mode 100644 index ce920956e7..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleMode.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' - -/** - * Set webpack mode - */ -export const handleMode = (config: Config, app: App): void => { - config.mode(app.env.isProd ? 'production' : 'development') -} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts deleted file mode 100644 index 040494637c..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleModule.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' -import { handleModuleAssets } from './handleModuleAssets' -import { handleModulePug } from './handleModulePug' -import { handleModuleVue } from './handleModuleVue' - -/** - * Set webpack module - */ -export const handleModule = (config: Config, app: App): void => { - // noParse - config.module.noParse( - /(^(vue|vue-router|vuex|vuex-router-sync)$)|(^@vue\/[^/]*$)/ - ) - - // vue & markdown files - handleModuleVue(config, app) - - // pug files, for templates - handleModulePug(config) - - // images & media & fonts - handleModuleAssets(config) - - // TODO: scripts, evergreen, babel, ts - // TODO: styles -} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts deleted file mode 100644 index df3f853196..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleModuleVue.ts +++ /dev/null @@ -1,49 +0,0 @@ -import * as Config from 'webpack-chain' -import { VueLoaderPlugin } from 'vue-loader' -import { App } from '@vuepress/core' - -const applyVuePipeline = (rule: Config.Rule): void => { - // rule - // .use('cache-loader') - // .loader('cache-loader') - // .options({ - // cacheDirectory, - // cacheIdentifier: finalCacheIdentifier, - // }) - - rule - .use('vue-loader') - .loader('vue-loader') - .options({ - compilerOptions: { - preserveWhitespace: true, - }, - // cacheDirectory, - // cacheIdentifier: finalCacheIdentifier, - }) -} - -/** - * Set webpack module to handle vue files - */ -export const handleModuleVue = (config: Config, app: App): void => { - // .vue files - const vueRule = config.module.rule('vue').test(/\.vue$/) - applyVuePipeline(vueRule) - - // .md files - const mdRule = config.module.rule('markdown').test(/\.md$/) - applyVuePipeline(mdRule) - mdRule - .use('markdown-loader') - // TODO - .loader(require.resolve('@vuepress/markdown-loader')) - .options({ - sourceDir: app.dir.source(), - // TODO - // markdown: app.markdown, - }) - - // use vue-loader plugin - config.plugin('vue-loader').use(VueLoaderPlugin) -} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts deleted file mode 100644 index 939fdb9ffc..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleOutput.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' - -/** - * Set webpack output - */ -export const handleOutput = (config: Config, app: App): void => { - config.output - .path(app.dir.dest()) - .filename( - app.env.isProd - ? 'assets/js/[name].[chunkhash:8].js' - : 'assets/js/[name].js' - ) - .publicPath(app.options.base) -} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts b/packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts deleted file mode 100644 index 78b112b281..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/handlePlugins.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DefinePlugin } from 'webpack' -import * as Config from 'webpack-chain' - -/** - * Set webpack plugins - */ -export const handlePlugins = (config: Config): void => { - // define plugin - config.plugin('define').use(DefinePlugin, [ - { - VUEPRESS_VERSION: JSON.stringify( - require('@vuepress/core/package.json').version - ), - }, - ]) -} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts b/packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts deleted file mode 100644 index f287e4019b..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleResolve.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' - -/** - * Set webpack resolve - */ -export const handleResolve = (config: Config, app: App): void => { - config.resolve.alias - // alias - .set('@temp', app.dir.temp()) - .set('@internal', app.dir.temp('internal')) - .end() - // extensions - // TODO: whether to resolve ts, styl by default or not - .extensions.merge(['.js', '.jsx', '.ts', '.tsx', '.vue', '.json', '.styl']) - .end() -} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/index.ts b/packages/@vuepress/bundler-webpack/src/config/base/index.ts deleted file mode 100644 index c904024fb3..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/base/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './createBaseConfig' diff --git a/packages/@vuepress/bundler-webpack/src/config/base/createBaseConfig.ts b/packages/@vuepress/bundler-webpack/src/config/createBaseConfig.ts similarity index 51% rename from packages/@vuepress/bundler-webpack/src/config/base/createBaseConfig.ts rename to packages/@vuepress/bundler-webpack/src/config/createBaseConfig.ts index 3cbf49da68..e16663f1b6 100644 --- a/packages/@vuepress/bundler-webpack/src/config/base/createBaseConfig.ts +++ b/packages/@vuepress/bundler-webpack/src/config/createBaseConfig.ts @@ -1,51 +1,53 @@ import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' +import type { App } from '@vuepress/core' import { handleDevtool } from './handleDevtool' import { handleMode } from './handleMode' import { handleModule } from './handleModule' -import { handleOutput } from './handleOutput' +import { handleNode } from './handleNode' import { handleResolve } from './handleResolve' import { handlePlugins } from './handlePlugins' -export const createBaseConfig = (app: App): Config => { +export const createBaseConfig = ({ + app, + isServer, + isBuild, +}: { + app: App + isServer: boolean + isBuild: boolean +}): Config => { // create new webpack-chain config const config = new Config() /** * mode */ - handleMode(config, app) + handleMode({ app, config }) /** - * output + * node */ - handleOutput(config, app) + handleNode({ config }) /** * devtool */ - handleDevtool(config, app) + handleDevtool({ app, config }) /** * resolve */ - handleResolve(config, app) + handleResolve({ app, config }) /** * module */ - handleModule(config, app) + handleModule({ app, config, isServer, isBuild }) /** * plugins */ - handlePlugins(config) - - // apply plugin option: alias - app.pluginApi.applyOption('alias', config) - - // apply plugin option: define - app.pluginApi.applyOption('define', config) + handlePlugins({ app, config }) return config } diff --git a/packages/@vuepress/bundler-webpack/src/config/createClientBaseConfig.ts b/packages/@vuepress/bundler-webpack/src/config/createClientBaseConfig.ts new file mode 100644 index 0000000000..a11bde4fae --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/createClientBaseConfig.ts @@ -0,0 +1,32 @@ +import * as Config from 'webpack-chain' +import { App } from '@vuepress/core' +import { createBaseConfig } from './createBaseConfig' + +export const createClientBaseConfig = ({ + app, + isBuild, +}: { + app: App + isBuild: boolean +}): Config => { + const config = createBaseConfig({ + app, + isServer: false, + isBuild, + }) + + // client entry + config.entry('app').add(app.dir.client('lib/client.js')) + + // client output + config.output + .path(app.dir.dest()) + .filename( + app.env.isProd + ? 'assets/js/[name].[chunkhash:8].js' + : 'assets/js/[name].js' + ) + .publicPath(app.options.base) + + return config +} diff --git a/packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts b/packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts deleted file mode 100644 index 621b768472..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/createClientConfig.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { HotModuleReplacementPlugin } from 'webpack' -import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' -import { createBaseConfig } from './base' - -export const createClientConfig = (app: App): Config => { - const config = createBaseConfig(app) - - // client entry - config.entry('app').add(app.dir.client('lib/client.js')) - - if (app.env.isProd) { - // TODO: extract-css - // TODO: optimization.splitChunks - // TODO: ssr client plugin - // TODO: optimize assets - } - - if (app.env.isDev) { - // HMR plugin - config.plugin('hmr').use(HotModuleReplacementPlugin) - } - - // apply plugin option: chainWebpack - app.pluginApi.applyOption('chainWebpack', config, false) - - return config -} diff --git a/packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts b/packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts deleted file mode 100644 index 18c32bcab9..0000000000 --- a/packages/@vuepress/bundler-webpack/src/config/createServerConfig.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as Config from 'webpack-chain' -import { App } from '@vuepress/core' -import { createBaseConfig } from './base' - -export const createServerConfig = (app: App): Config => { - const config = createBaseConfig(app) - - // server entry - config.entry('app').add(app.dir.client('lib/server.js')) - - // set target to node - config.target('node') - - // set externals - // TODO - config.externals([/(^(vue|vue-router)$)|(^@vue\/[^/]*$)/]) - - // devtool - // TODO: differences from client config, remove? - config.devtool('source-map') - - // do not need to minimize server bundle - config.optimization.minimize(false) - - // TODO - - // apply plugin option: chainWebpack - app.pluginApi.applyOption('chainWebpack', config, true) - - return config -} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleDevtool.ts b/packages/@vuepress/bundler-webpack/src/config/handleDevtool.ts new file mode 100644 index 0000000000..a97c49d945 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleDevtool.ts @@ -0,0 +1,17 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' + +/** + * Set webpack devtool + */ +export const handleDevtool = ({ + app, + config, +}: { + app: App + config: Config +}): void => { + config.devtool( + app.env.isDebug ? 'source-map' : 'cheap-module-eval-source-map' + ) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleMode.ts b/packages/@vuepress/bundler-webpack/src/config/handleMode.ts new file mode 100644 index 0000000000..63c30367e8 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleMode.ts @@ -0,0 +1,15 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' + +/** + * Set webpack mode + */ +export const handleMode = ({ + app, + config, +}: { + app: App + config: Config +}): void => { + config.mode(app.env.isProd ? 'production' : 'development') +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleModule.ts b/packages/@vuepress/bundler-webpack/src/config/handleModule.ts new file mode 100644 index 0000000000..f583496cf1 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleModule.ts @@ -0,0 +1,46 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' +import { handleModuleAssets } from './handleModuleAssets' +import { handleModuleJs } from './handleModuleJs' +import { handleModulePug } from './handleModulePug' +import { handleModuleStyles } from './handleModuleStyles' +import { handleModuleTs } from './handleModuleTs' +import { handleModuleVue } from './handleModuleVue' + +/** + * Set webpack module + */ +export const handleModule = ({ + app, + config, + isServer, + isBuild, +}: { + app: App + config: Config + isBuild: boolean + isServer: boolean +}): void => { + // noParse + config.module.noParse( + /(^(vue|vue-router|vuex|vuex-router-sync)$)|(^@vue\/[^/]*$)/ + ) + + // vue files + handleModuleVue({ app, config, isServer }) + + // pug files, for templates + handleModulePug({ config }) + + // images & media & fonts + handleModuleAssets({ app, config }) + + // js files + handleModuleJs({ app, config, isServer }) + + // ts files + handleModuleTs({ app, config }) + + // styles files + handleModuleStyles({ app, config, isServer, isBuild }) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModuleAssets.ts b/packages/@vuepress/bundler-webpack/src/config/handleModuleAssets.ts similarity index 56% rename from packages/@vuepress/bundler-webpack/src/config/base/handleModuleAssets.ts rename to packages/@vuepress/bundler-webpack/src/config/handleModuleAssets.ts index d4b0027b26..9cb7fc5ab8 100644 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleModuleAssets.ts +++ b/packages/@vuepress/bundler-webpack/src/config/handleModuleAssets.ts @@ -1,12 +1,18 @@ -import * as Config from 'webpack-chain' +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' /** * Set webpack config to handle assets files */ -export const handleModuleAssets = ( - config: Config, - inlineLimit = 10000 -): void => { +export const handleModuleAssets = ({ + app, + config, + inlineLimit = 10000, +}: { + app: App + config: Config + inlineLimit?: number +}): void => { // images config.module .rule('images') @@ -15,7 +21,9 @@ export const handleModuleAssets = ( .loader('url-loader') .options({ limit: inlineLimit, - name: `assets/img/[name].[hash:8].[ext]`, + name: app.env.isProd + ? `assets/img/[name].[hash:8].[ext]` + : `assets/img/[name].[ext]`, }) // svg @@ -27,7 +35,9 @@ export const handleModuleAssets = ( .use('file-loader') .loader('file-loader') .options({ - name: `assets/img/[name].[hash:8].[ext]`, + name: app.env.isProd + ? `assets/img/[name].[hash:8].[ext]` + : `assets/img/[name].[ext]`, }) // media @@ -38,7 +48,9 @@ export const handleModuleAssets = ( .loader('url-loader') .options({ limit: inlineLimit, - name: `assets/media/[name].[hash:8].[ext]`, + name: app.env.isProd + ? `assets/media/[name].[hash:8].[ext]` + : `assets/media/[name].[ext]`, }) // fonts @@ -49,6 +61,8 @@ export const handleModuleAssets = ( .loader('url-loader') .options({ limit: inlineLimit, - name: `assets/fonts/[name].[hash:8].[ext]`, + name: app.env.isProd + ? `assets/fonts/[name].[hash:8].[ext]` + : `assets/fonts/[name].[ext]`, }) } diff --git a/packages/@vuepress/bundler-webpack/src/config/handleModuleJs.ts b/packages/@vuepress/bundler-webpack/src/config/handleModuleJs.ts new file mode 100644 index 0000000000..21fce2954c --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleModuleJs.ts @@ -0,0 +1,73 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' +import { path } from '@vuepress/utils' +import { resolveCacheLoaderOptions } from './resolveCacheLoaderOptions' +import { resolveBabelLoaderOptions } from './resolveBabelLoaderOptions' + +/** + * Set webpack module to handle js files + */ +export const handleModuleJs = ({ + app, + config, + isServer, +}: { + app: App + config: Config + isServer: boolean +}): void => { + // only enable babel in production client bundle + // when `evergreen` option is set to `false` + if (app.options.evergreen === false && app.env.isProd && !isServer) { + const cacheLoaderOptions = resolveCacheLoaderOptions({ + app, + identifier: { + 'babel-loader': require('babel-loader/package.json').version, + }, + }) + + const babelLoaderOptions = resolveBabelLoaderOptions({ + app, + cacheLoaderOptions, + }) + + // TODO: webpack v5 issue https://github.com/webpack/webpack/issues/11467 + // config.module + // .rule('mjs') + // .test(/\.m?js/) + // .resolve.fullySpecified(false) + + config.module + .rule('js') + .test(/\.jsx?$/) + .exclude.add((filePath) => { + // always transpile js / jsx in vue files + if (/\.vue\.jsx?$/.test(filePath)) { + return false + } + // transpile all core packages and vuepress related packages. + // i.e. + // @vuepress/* + // vuepress-* + if ( + /(@vuepress[/\\][^/\\]*|vuepress-[^/\\]*)[/\\](?!node_modules).*\.js$/.test( + filePath + ) + ) { + return false + } + // transpile @babel/runtime until fix for babel/babel#7597 is released + if (filePath.includes(path.join('@babel', 'runtime'))) { + return false + } + // don't transpile node_modules + return /node_modules/.test(filePath) + }) + .end() + // use babel-loader + .use('babel-loader') + .loader('babel-loader') + .options(babelLoaderOptions) + .end() + } +} diff --git a/packages/@vuepress/bundler-webpack/src/config/base/handleModulePug.ts b/packages/@vuepress/bundler-webpack/src/config/handleModulePug.ts similarity index 58% rename from packages/@vuepress/bundler-webpack/src/config/base/handleModulePug.ts rename to packages/@vuepress/bundler-webpack/src/config/handleModulePug.ts index 28a9a0d7f1..fdb288bcca 100644 --- a/packages/@vuepress/bundler-webpack/src/config/base/handleModulePug.ts +++ b/packages/@vuepress/bundler-webpack/src/config/handleModulePug.ts @@ -1,9 +1,9 @@ -import * as Config from 'webpack-chain' +import type * as Config from 'webpack-chain' /** * Set webpack module to handle pug files */ -export const handleModulePug = (config: Config): void => { +export const handleModulePug = ({ config }: { config: Config }): void => { config.module .rule('pug') .test(/\.pug$/) diff --git a/packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts b/packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts new file mode 100644 index 0000000000..587915ae61 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts @@ -0,0 +1,45 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' +import * as MiniCSSExtractPlugin from 'mini-css-extract-plugin' + +/** + * Set webpack module to handle style files + */ +export const handleModuleStyles = ({ + app, + config, + isServer, + isBuild, +}: { + app: App + config: Config + isServer: boolean + isBuild: boolean +}): void => { + // TODO: postcss + // TODO: sass + // TODO: scss + // TODO: less + // TODO: stylus + + const cssRule = config.module.rule('css').test(/\.css$/) + + if (!isServer) { + if (isBuild) { + cssRule.use('extract-css-loader').loader(MiniCSSExtractPlugin.loader) + } else { + cssRule.use('style-loader').loader('style-loader') + } + } + + cssRule.use('css-loader').loader('css-loader').options({ + // TODO: css modules + modules: false, + // modules: { + // localIdentName: `[local]_[hash:base64:8]`, + // exportOnlyLocals: isServer, + // }, + importLoaders: 1, + sourceMap: !app.env.isProd, + }) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts b/packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts new file mode 100644 index 0000000000..8c43954d4e --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts @@ -0,0 +1,44 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' +import { resolveCacheLoaderOptions } from './resolveCacheLoaderOptions' + +/** + * Set webpack module to handle ts files + */ +export const handleModuleTs = ({ + app, + config, +}: { + app: App + config: Config +}): void => { + const cacheLoaderOptions = resolveCacheLoaderOptions({ + app, + identifier: { + 'ts-loader': require('ts-loader/package.json').version, + }, + }) + + config.module + .rule('ts') + .test(/\.tsx?/) + // use cache-loader + .use('cache-loader') + .loader('cache-loader') + .options(cacheLoaderOptions) + .end() + // use ts-loader + .use('ts-loader') + .loader('ts-loader') + .options({ + // TODO: if we enable `transpileOnly`, we may need extra + // type check support like fork-ts-checker-webpack-plugin + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + appendTsxSuffixTo: [/\.vue$/], + compilerOptions: { + declaration: false, + }, + }) + .end() +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleModuleVue.ts b/packages/@vuepress/bundler-webpack/src/config/handleModuleVue.ts new file mode 100644 index 0000000000..3332927dd6 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleModuleVue.ts @@ -0,0 +1,47 @@ +import * as Config from 'webpack-chain' +import { VueLoaderPlugin } from 'vue-loader' +import type { App } from '@vuepress/core' +import { resolveCacheLoaderOptions } from './resolveCacheLoaderOptions' + +/** + * Set webpack module to handle vue files + */ +export const handleModuleVue = ({ + app, + config, + isServer, +}: { + app: App + config: Config + isServer: boolean +}): void => { + const cacheLoaderOptions = resolveCacheLoaderOptions({ + app, + identifier: { + 'vue-loader': require('vue-loader/package.json').version, + // vue ssr app will generate different code + // so we need `isServer` to identify the cache + isServer, + }, + }) + + // .vue files + config.module + .rule('vue') + .test(/\.vue$/) + // use cache-loader + .use('cache-loader') + .loader('cache-loader') + .options(cacheLoaderOptions) + .end() + // use vue-loader + .use('vue-loader') + .loader('vue-loader') + .options({ + ...cacheLoaderOptions, + }) + .end() + + // use vue-loader plugin + config.plugin('vue-loader').use(VueLoaderPlugin) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleNode.ts b/packages/@vuepress/bundler-webpack/src/config/handleNode.ts new file mode 100644 index 0000000000..aecb1c7d30 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleNode.ts @@ -0,0 +1,22 @@ +import type * as Config from 'webpack-chain' + +/** + * Set webpack node config + */ +export const handleNode = ({ config }: { config: Config }): void => { + // do not polyfill or mock node globals and modules + config.node.merge({ + __filename: false, + __dirname: false, + Buffer: false, + global: false, + process: false, + setImmediate: false, + + dgram: 'empty', + fs: 'empty', + net: 'empty', + tls: 'empty', + child_process: 'empty', + }) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleOutput.ts b/packages/@vuepress/bundler-webpack/src/config/handleOutput.ts new file mode 100644 index 0000000000..d01d910775 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleOutput.ts @@ -0,0 +1,35 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' + +/** + * Set webpack output + */ +export const handleOutput = ({ + app, + config, + isServer, +}: { + app: App + config: Config + isServer: boolean +}): void => { + if (isServer) { + // server output + // remove after pages rendered + config.output + .path(app.dir.dest('.server')) + .filename('app.js') + .publicPath(app.options.base) + .libraryTarget('commonjs2') + } else { + // client output + config.output + .path(app.dir.dest()) + .filename( + app.env.isProd + ? 'assets/js/[name].[chunkhash:8].js' + : 'assets/js/[name].js' + ) + .publicPath(app.options.base) + } +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handlePlugins.ts b/packages/@vuepress/bundler-webpack/src/config/handlePlugins.ts new file mode 100644 index 0000000000..5d06d1d905 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handlePlugins.ts @@ -0,0 +1,37 @@ +import { DefinePlugin } from 'webpack' +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' + +/** + * Set webpack plugins + */ +export const handlePlugins = ({ + app, + config, +}: { + app: App + config: Config +}): void => { + // define plugin + config.plugin('define').use(DefinePlugin, [ + { + 'process.env.NODE_ENV': JSON.stringify(app.env.nodeEnv), + '__VERSION__': JSON.stringify(app.version), + '__DEV__': JSON.stringify(app.env.isDev), + }, + ]) + + // plugin hook: define + const defineResult = app.pluginApi.hooks.define.processSync() + + // tap the arguments of DefinePlugin + config.plugin('define').tap(([options]) => { + defineResult.forEach((defineObject) => + Object.entries(defineObject).forEach(([key, value]) => { + options[key] = JSON.stringify(value) + }) + ) + + return [options] + }) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/handleResolve.ts b/packages/@vuepress/bundler-webpack/src/config/handleResolve.ts new file mode 100644 index 0000000000..f15fb0fab5 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/handleResolve.ts @@ -0,0 +1,33 @@ +import type * as Config from 'webpack-chain' +import type { App } from '@vuepress/core' + +/** + * Set webpack resolve + */ +export const handleResolve = ({ + app, + config, +}: { + app: App + config: Config +}): void => { + config.resolve.alias + // alias + .set('@temp', app.dir.temp()) + .set('@internal', app.dir.temp('internal')) + .end() + // extensions + // TODO: whether to resolve ts, styl by default or not + .extensions.merge(['.js', '.jsx', '.ts', '.tsx', '.vue', '.json', '.styl']) + .end() + + // plugin hook: alias + const aliasResult = app.pluginApi.hooks.alias.processSync() + + // set aliases + aliasResult.forEach((aliasObject) => + Object.entries(aliasObject).forEach(([key, value]) => { + config.resolve.alias.set(key, value) + }) + ) +} diff --git a/packages/@vuepress/bundler-webpack/src/config/index.ts b/packages/@vuepress/bundler-webpack/src/config/index.ts index 3ec7e30692..8ab99cbd79 100644 --- a/packages/@vuepress/bundler-webpack/src/config/index.ts +++ b/packages/@vuepress/bundler-webpack/src/config/index.ts @@ -1,3 +1,2 @@ -export * from './base/createBaseConfig' -export * from './createClientConfig' -export * from './createServerConfig' +export * from './createBaseConfig' +export * from './createClientBaseConfig' diff --git a/packages/@vuepress/bundler-webpack/src/config/resolveBabelLoaderOptions.ts b/packages/@vuepress/bundler-webpack/src/config/resolveBabelLoaderOptions.ts new file mode 100644 index 0000000000..c28c129566 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/resolveBabelLoaderOptions.ts @@ -0,0 +1,51 @@ +import type { TransformOptions } from '@babel/core' +import type { App } from '@vuepress/core' +import type { CacheLoaderOptions } from './resolveCacheLoaderOptions' + +/** + * @see https://babeljs.io/docs/en/options + */ +export type BabelLoaderOptions = TransformOptions & CacheLoaderOptions + +export const resolveBabelLoaderOptions = ({ + app, + cacheLoaderOptions, +}: { + app: App + cacheLoaderOptions: CacheLoaderOptions +}): BabelLoaderOptions => { + return { + // do not pick local project babel config (.babelrc) + babelrc: false, + + // do not pick local project babel config (babel.config.js) + configFile: false, + + presets: [ + [ + // use @vue/babel-preset-app, which is mainly for vue-cli projects + // so we may need some extra options + require.resolve('@vue/babel-preset-app'), + { + // TODO: determine if we need to set this option in test + // modules: app.env.isTest ? 'commonjs' : false, + + // if `evergreen: true`, do not add polyfills automatically so set this option to `false` + // if `evergreen: false` (default), add polyfills automatically so set this options to `'usage'` + useBuiltIns: app.options.evergreen ? false : 'usage', + + // enable jsx feature + jsx: true, + + // ensure polyfills are injected into entry files + // only client entry is required + entryFiles: [app.dir.client('lib/client.js')], + }, + ], + ], + + // here we use babel-loader with caching instead of cache-loader + babel-loader + // @see https://github.com/babel/babel-loader/issues/525 + ...cacheLoaderOptions, + } +} diff --git a/packages/@vuepress/bundler-webpack/src/config/resolveCacheLoaderOptions.ts b/packages/@vuepress/bundler-webpack/src/config/resolveCacheLoaderOptions.ts new file mode 100644 index 0000000000..92646a4c07 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/config/resolveCacheLoaderOptions.ts @@ -0,0 +1,34 @@ +import type { App } from '@vuepress/core' + +/** + * Only partial of the options that will be used internally + * + * @see https://www.npmjs.com/package/cache-loader#options + */ +export interface CacheLoaderOptions { + cacheDirectory?: string + cacheIdentifier?: string +} + +export const resolveCacheLoaderOptions = ({ + app, + identifier, +}: { + app: App + identifier?: Record +}): CacheLoaderOptions => { + const cacheDirectory = app.options.dirCache + const cacheIdentifier = JSON.stringify({ + ...identifier, + 'isDebug': app.env.isDebug, + 'isProd': app.env.isProd, + 'vuepress': app.version, + 'cache-loader': require('cache-loader/package.json').version, + // TODO: determine what else should be used as cache key + }) + + return { + cacheDirectory, + cacheIdentifier, + } +} diff --git a/packages/@vuepress/bundler-webpack/src/createBundler.ts b/packages/@vuepress/bundler-webpack/src/createBundler.ts new file mode 100644 index 0000000000..a3d2f7f52b --- /dev/null +++ b/packages/@vuepress/bundler-webpack/src/createBundler.ts @@ -0,0 +1,15 @@ +import type * as WebpackDevServer from 'webpack-dev-server' +import type { CreateBundlerFunction } from '@vuepress/core' +import { createBuild } from './build' +import { createDev } from './dev' + +// TODO: bundler options +export type BundlerWebpackOptions = Record + +export const createBundler: CreateBundlerFunction< + BundlerWebpackOptions, + WebpackDevServer +> = (options) => ({ + dev: createDev(options), + build: createBuild(options), +}) diff --git a/packages/@vuepress/bundler-webpack/src/dev/dev.ts b/packages/@vuepress/bundler-webpack/src/dev/createDev.ts similarity index 74% rename from packages/@vuepress/bundler-webpack/src/dev/dev.ts rename to packages/@vuepress/bundler-webpack/src/dev/createDev.ts index 118de576be..b36defb18d 100644 --- a/packages/@vuepress/bundler-webpack/src/dev/dev.ts +++ b/packages/@vuepress/bundler-webpack/src/dev/createDev.ts @@ -1,10 +1,16 @@ -import { App } from '@vuepress/core' +import type * as WebpackDevServer from 'webpack-dev-server' +import type { App, BundlerFunc } from '@vuepress/core' +import type { BundlerWebpackOptions } from '../createBundler' import { createDevConfig } from './createDevConfig' import { createDevServer } from './createDevServer' import { createDevServerConfig } from './createDevServerConfig' import { resolvePort } from './resolvePort' -export const dev = async (app: App): Promise => { +export const createDev = ( + options: BundlerWebpackOptions +): BundlerFunc => async ( + app: App +): Promise => { // initialize app await app.init() @@ -15,9 +21,6 @@ export const dev = async (app: App): Promise => { // create webpack-dev-server config const serverConfig = createDevServerConfig(app) - // create webpack-dev-server - const server = createDevServer(webpackConfig, serverConfig) - // resolve host and port const host = app.options.host const port = await resolvePort(app.options.port) @@ -30,12 +33,15 @@ export const dev = async (app: App): Promise => { // - page change: restart from app.prepare() // notice the different behaviors of "webpack watch" and "our watch" + // create webpack-dev-server + const server = createDevServer(webpackConfig, serverConfig) + return new Promise((resolve, reject) => { server.listen(port, host, (err) => { if (err) { reject(err) } else { - resolve() + resolve(server) } }) }) diff --git a/packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts b/packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts index 189b3c1eb8..499cf039c0 100644 --- a/packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts +++ b/packages/@vuepress/bundler-webpack/src/dev/createDevConfig.ts @@ -1,10 +1,16 @@ import { HotModuleReplacementPlugin } from 'webpack' import * as Config from 'webpack-chain' import { App } from '@vuepress/core' -import { createClientConfig } from '../config' +import { createClientBaseConfig } from '../config' export const createDevConfig = (app: App): Config => { - const config = createClientConfig(app) + const isServer = false + const isBuild = false + + const config = createClientBaseConfig({ + app, + isBuild, + }) config.plugin('html').use(require('html-webpack-plugin'), [ { @@ -14,5 +20,8 @@ export const createDevConfig = (app: App): Config => { config.plugin('hmr').use(HotModuleReplacementPlugin) + // plugin hook: chainWebpack + app.pluginApi.hooks.chainWebpack.process(config, isServer, isBuild) + return config } diff --git a/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts b/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts index f544d893b4..baa41f9e87 100644 --- a/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts +++ b/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts @@ -1,8 +1,6 @@ -import * as fs from 'fs' -import * as path from 'path' import * as WebpackDevServer from 'webpack-dev-server' import { App } from '@vuepress/core' -import { normalizeSeparator } from '@vuepress/utils' +import { fs, path } from '@vuepress/utils' export const createDevServerConfig = ( app: App @@ -33,7 +31,7 @@ export const createDevServerConfig = ( // Do not watch node_modules 'node_modules', // Always watch temp dir - `!${normalizeSeparator(app.dir.temp())}/**`, + `!${app.dir.temp()}/**`, ], }, historyApiFallback: { @@ -42,17 +40,17 @@ export const createDevServerConfig = ( { from: /./, to: path.posix.join(app.options.base, 'index.html') }, ], }, - before: async (expressApp, server): Promise => { - if (fs.existsSync(contentBase)) { + before: (expressApp, server) => { + if (fs.pathExistsSync(contentBase)) { expressApp.use(app.options.base, require('express').static(contentBase)) } - // apply plugin option: beforeDevServer - await app.pluginApi.applyOption('beforeDevServer', expressApp, server) + // plugin hook: beforeDevServer + app.pluginApi.hooks.beforeDevServer.processSync(expressApp, server) }, - after: async (expressApp, server): Promise => { - // apply plugin option: afterDevServer - await app.pluginApi.applyOption('afterDevServer', expressApp, server) + after: (expressApp, server) => { + // plugin hook: afterDevServer + app.pluginApi.hooks.afterDevServer.processSync(expressApp, server) }, } diff --git a/packages/@vuepress/bundler-webpack/src/dev/index.ts b/packages/@vuepress/bundler-webpack/src/dev/index.ts index 1b0a9405b6..2ab698d938 100644 --- a/packages/@vuepress/bundler-webpack/src/dev/index.ts +++ b/packages/@vuepress/bundler-webpack/src/dev/index.ts @@ -1,5 +1,5 @@ +export * from './createDev' export * from './createDevConfig' export * from './createDevServer' export * from './createDevServerConfig' -export * from './dev' export * from './resolvePort' diff --git a/packages/@vuepress/bundler-webpack/src/index.ts b/packages/@vuepress/bundler-webpack/src/index.ts index e08c90efb2..4d2e1c853b 100644 --- a/packages/@vuepress/bundler-webpack/src/index.ts +++ b/packages/@vuepress/bundler-webpack/src/index.ts @@ -1,10 +1,5 @@ -import { AppBundler } from '@vuepress/core' -import { build } from './build' -import { dev } from './dev' +import type * as WebpackDevServer from 'webpack-dev-server' -const webpackBundler: AppBundler = { - dev, - build, -} +export { WebpackDevServer } -export = webpackBundler +export * from './createBundler' diff --git a/packages/@vuepress/bundler-webpack/tsconfig.build.json b/packages/@vuepress/bundler-webpack/tsconfig.build.json new file mode 100644 index 0000000000..d9c60c6ec2 --- /dev/null +++ b/packages/@vuepress/bundler-webpack/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [ + { "path": "../client/tsconfig.build.json" }, + { "path": "../core/tsconfig.build.json" }, + { "path": "../utils/tsconfig.build.json" } + ] +} diff --git a/packages/@vuepress/bundler-webpack/tsconfig.json b/packages/@vuepress/bundler-webpack/tsconfig.json index 366db0ea70..3b79150329 100644 --- a/packages/@vuepress/bundler-webpack/tsconfig.json +++ b/packages/@vuepress/bundler-webpack/tsconfig.json @@ -1,9 +1,4 @@ { "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./lib" - }, - "include": ["./src"], - "references": [{ "path": "../core" }] + "include": ["./src"] } diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index 491fc7442f..686e4cd177 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -25,9 +25,8 @@ "lib" ], "scripts": { - "build": "tsc -b", - "clean": "rimraf lib tsconfig.tsbuildinfo", - "lint": "eslint --ext .ts src" + "build": "tsc -b tsconfig.build.json", + "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { "@vuepress/core": "2.0.0-alpha.0" diff --git a/packages/@vuepress/cli/tsconfig.build.json b/packages/@vuepress/cli/tsconfig.build.json new file mode 100644 index 0000000000..7974672a55 --- /dev/null +++ b/packages/@vuepress/cli/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [{ "path": "../core/tsconfig.build.json" }] +} diff --git a/packages/@vuepress/cli/tsconfig.json b/packages/@vuepress/cli/tsconfig.json index 0ea5482209..3114e03c34 100644 --- a/packages/@vuepress/cli/tsconfig.json +++ b/packages/@vuepress/cli/tsconfig.json @@ -1,13 +1,4 @@ { "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./lib" - }, - "include": ["./src"], - "references": [ - { "path": "../client" }, - { "path": "../core" }, - { "path": "../utils" } - ] + "include": ["./src", "./__tests__"] } diff --git a/packages/@vuepress/client/.eslintrc.js b/packages/@vuepress/client/.eslintrc.js new file mode 100644 index 0000000000..ccd5def411 --- /dev/null +++ b/packages/@vuepress/client/.eslintrc.js @@ -0,0 +1,6 @@ +module.exports = { + globals: { + __VERSION__: 'readonly', + __DEV__: 'readonly', + }, +} diff --git a/packages/@vuepress/client/package.json b/packages/@vuepress/client/package.json index fd8fcb9a61..d2d7728cd8 100644 --- a/packages/@vuepress/client/package.json +++ b/packages/@vuepress/client/package.json @@ -23,12 +23,12 @@ "templates" ], "scripts": { - "build": "tsc -b", - "clean": "rimraf lib tsconfig.tsbuildinfo", - "lint": "eslint --ext .ts src" + "build": "tsc -b tsconfig.build.json", + "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "vue": "3.0.0-beta.10", - "vue-router": "4.0.0-alpha.10" + "@vuepress/shared": "2.0.0-alpha.0", + "vue": "^3.0.0", + "vue-router": "4.0.0-beta.11" } } diff --git a/packages/@vuepress/client/src/components/Content.ts b/packages/@vuepress/client/src/components/Content.ts index 751a852a3e..af3d16a09e 100644 --- a/packages/@vuepress/client/src/components/Content.ts +++ b/packages/@vuepress/client/src/components/Content.ts @@ -1,4 +1,5 @@ -import { h, VNode } from 'vue' +import { h } from 'vue' +import type { VNode } from 'vue' import { pageComponents } from '@internal/pageComponents' import { usePageData } from '../injections' diff --git a/packages/@vuepress/client/src/components/Debug.ts b/packages/@vuepress/client/src/components/Debug.ts new file mode 100644 index 0000000000..8b16900c27 --- /dev/null +++ b/packages/@vuepress/client/src/components/Debug.ts @@ -0,0 +1,33 @@ +import { h, toDisplayString, toRefs } from 'vue' +import type { ComponentOptions } from 'vue' +import { useRoute } from 'vue-router' +import { useSiteData, usePageData } from '../injections' + +export const Debug: ComponentOptions = { + setup() { + const { path, name, hash, fullPath } = toRefs(useRoute()) + const site = useSiteData() + const { page } = usePageData() + + return () => + h( + 'div', + { + class: 'vuepress-debug', + }, + [ + h( + 'pre', + `route ${toDisplayString({ + path: path.value, + name: name.value, + hash: hash.value, + fullPath: fullPath.value, + })}` + ), + h('pre', `site ${toDisplayString(site.value)}`), + h('pre', `page ${toDisplayString(page.value)}`), + ] + ) + }, +} diff --git a/packages/@vuepress/client/src/components/Vuepress.ts b/packages/@vuepress/client/src/components/Vuepress.ts index 3e42e03988..763d44d72e 100644 --- a/packages/@vuepress/client/src/components/Vuepress.ts +++ b/packages/@vuepress/client/src/components/Vuepress.ts @@ -1,4 +1,5 @@ -import { h, ComponentOptions } from 'vue' +import { h } from 'vue' +import type { ComponentOptions } from 'vue' import { layoutComponents } from '@internal/layoutComponents' import { usePageData } from '../injections' import { Content } from './Content' @@ -8,7 +9,8 @@ import { Content } from './Content' */ export const Vuepress: ComponentOptions = { setup() { - let layout: string + // get layout of current page + let layoutName = 'NotFound' const { page } = usePageData() @@ -19,20 +21,18 @@ export const Vuepress: ComponentOptions = { const frontmatterLayout = page.value.frontmatter.layout if (typeof frontmatterLayout === 'string') { - layout = frontmatterLayout + layoutName = frontmatterLayout } else { // fallback to Layout component - layout = 'Layout' + layoutName = 'Layout' } - } else { - layout = 'NotFound' } - const component = layoutComponents[layout] + const layoutComponent = layoutComponents[layoutName] - if (component) { + if (layoutComponent) { // use layout component - return () => h(component) + return () => h(layoutComponent) } else { // fallback to Content return () => h(Content) diff --git a/packages/@vuepress/client/src/components/index.ts b/packages/@vuepress/client/src/components/index.ts index 812ac14de5..990a426420 100644 --- a/packages/@vuepress/client/src/components/index.ts +++ b/packages/@vuepress/client/src/components/index.ts @@ -1,2 +1,3 @@ export * from './Content' +export * from './Debug' export * from './Vuepress' diff --git a/packages/@vuepress/client/src/constants.d.ts b/packages/@vuepress/client/src/constants.d.ts new file mode 100644 index 0000000000..52bc5f01c4 --- /dev/null +++ b/packages/@vuepress/client/src/constants.d.ts @@ -0,0 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + +declare const __VERSION__: string +declare const __DEV__: boolean diff --git a/packages/@vuepress/client/src/createServerApp.ts b/packages/@vuepress/client/src/createServerApp.ts new file mode 100644 index 0000000000..a9ce6bc215 --- /dev/null +++ b/packages/@vuepress/client/src/createServerApp.ts @@ -0,0 +1,14 @@ +import { createSSRApp } from 'vue' +import { createMemoryHistory } from 'vue-router' +import { createVueApp } from './createVueApp' +import type { CreateVueAppResult } from './createVueApp' + +export interface CreateServerAppEntry { + createServerApp: () => Promise +} + +export const createServerApp = async (): Promise => + createVueApp({ + appCreator: createSSRApp, + historyCreator: createMemoryHistory, + }) diff --git a/packages/@vuepress/client/src/createVueApp.ts b/packages/@vuepress/client/src/createVueApp.ts index 934f23f7d4..4afe839a01 100644 --- a/packages/@vuepress/client/src/createVueApp.ts +++ b/packages/@vuepress/client/src/createVueApp.ts @@ -1,63 +1,72 @@ -import { CreateAppFunction, App, h, ComponentOptions } from 'vue' -import { - createRouter, - useRoute, - Router, - RouterView, - RouterHistory, -} from 'vue-router' +import { h } from 'vue' +import type { CreateAppFunction, App, ComponentOptions } from 'vue' +import { createRouter, RouterView } from 'vue-router' +import type { Router, RouterHistory } from 'vue-router' +import { removeEndingSlash } from '@vuepress/shared' +import { clientAppEnhances } from '@internal/clientAppEnhances' +import { clientAppSetups } from '@internal/clientAppSetups' import { pageComponents } from '@internal/pageComponents' import { routes } from '@internal/routes' -import { siteData } from '@internal/siteData' -import { Content } from './components' -import { siteDataKey } from './injections' +import { siteData } from './injections' +import { Content, Debug } from './components' export type AppCreator = CreateAppFunction export type HistoryCreator = (base?: string) => RouterHistory +export type CreateVueAppResult = { + app: App + router: Router +} -export async function createVueApp({ +export const createVueApp = async ({ appCreator, historyCreator, }: { appCreator: AppCreator historyCreator: HistoryCreator -}): Promise<{ - app: App - router: Router -}> { +}): Promise => { + // options to create vue app const appOptions: ComponentOptions = { setup() { - const route = useRoute() - return { route } - }, + // invoke all clientAppSetups + for (const clientAppSetup of clientAppSetups) { + clientAppSetup() + } - render() { - return h('div', { id: 'app' }, [ - h(RouterView), - // TODO: global ui, portal? - h('div', { class: 'global-ui' }), - ]) + return () => + h('div', { id: 'app' }, [ + h(RouterView), + // TODO: global ui, portal? + h('div', { class: 'global-ui' }), + ]) }, } + // create vue app const app = appCreator(appOptions) - const history = historyCreator(siteData.base) - + // create vue-router const router = createRouter({ - history, + // TODO: it might be an issue of vue-router that have to remove the ending slash + history: historyCreator(removeEndingSlash(siteData.value.base)), routes, }) + // use vue-router app.use(router) + + // register built-in components app.component('Content', Content) + app.component('Debug', __DEV__ ? Debug : () => null) + // register all pages components Object.entries(pageComponents).forEach(([name, component]) => { app.component(name, component) }) - // provide siteData - app.provide(siteDataKey, siteData) + // invoke all clientAppEnhances + for (const clientAppEnhance of clientAppEnhances) { + await clientAppEnhance({ app, router, siteData }) + } return { app, diff --git a/packages/@vuepress/client/src/index.ts b/packages/@vuepress/client/src/index.ts index fba7b57005..a16d6080b1 100644 --- a/packages/@vuepress/client/src/index.ts +++ b/packages/@vuepress/client/src/index.ts @@ -1 +1,8 @@ +import type { CreateServerAppEntry } from './createServerApp' + +export type { CreateServerAppEntry } + +export * from './components' +export * from './createVueApp' export * from './injections' +export * from './types' diff --git a/packages/@vuepress/client/src/injections/pageData.ts b/packages/@vuepress/client/src/injections/pageData.ts index 03954651c8..7159943163 100644 --- a/packages/@vuepress/client/src/injections/pageData.ts +++ b/packages/@vuepress/client/src/injections/pageData.ts @@ -1,19 +1,19 @@ -import { computed, ComputedRef } from 'vue' +import { computed } from 'vue' +import type { ComputedRef } from 'vue' import { useRoute } from 'vue-router' -import { PageData } from '@internal/siteData' -import { useSiteData } from './siteData' +import { pagesData } from '@internal/pagesData' +import type { PageData } from '@internal/pagesData' export const usePageData = (): { page: ComputedRef title: ComputedRef frontmatter: ComputedRef } => { - const siteData = useSiteData() const route = useRoute() const page = computed( () => - siteData.pages.find((item) => item.path === route.path) || { + pagesData[route.path] ?? { key: '', path: '', title: '', diff --git a/packages/@vuepress/client/src/injections/siteData.ts b/packages/@vuepress/client/src/injections/siteData.ts index e355c53665..12d20e1920 100644 --- a/packages/@vuepress/client/src/injections/siteData.ts +++ b/packages/@vuepress/client/src/injections/siteData.ts @@ -1,9 +1,20 @@ -import { inject, InjectionKey } from 'vue' -import { SiteData } from '@internal/siteData' +import { readonly, ref } from 'vue' +import type { Ref, DeepReadonly } from 'vue' +import { siteData as siteDataRaw } from '@internal/siteData' +import type { SiteData as SiteDataRaw } from '@internal/siteData' -export const siteDataKey: InjectionKey = Symbol('siteData') +export type SiteData = Ref> + +export const siteData: SiteData = ref(readonly(siteDataRaw)) export const useSiteData = (): SiteData => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return inject(siteDataKey)! + return siteData +} + +// TODO: HMR +if (module.hot) { + module.hot.accept('@internal/siteData', () => { + console.log('Accepting the updated siteData module!') + siteData.value = readonly(siteDataRaw) + }) } diff --git a/packages/@vuepress/client/src/internal/clientAppEnhances.d.ts b/packages/@vuepress/client/src/internal/clientAppEnhances.d.ts new file mode 100644 index 0000000000..8de1d9ef4a --- /dev/null +++ b/packages/@vuepress/client/src/internal/clientAppEnhances.d.ts @@ -0,0 +1,5 @@ +import type { ClientAppEnhance } from '../types' + +declare module '@internal/clientAppEnhances' { + export const clientAppEnhances: ClientAppEnhance[] +} diff --git a/packages/@vuepress/client/src/internal/clientAppSetups.d.ts b/packages/@vuepress/client/src/internal/clientAppSetups.d.ts new file mode 100644 index 0000000000..62b76b3f82 --- /dev/null +++ b/packages/@vuepress/client/src/internal/clientAppSetups.d.ts @@ -0,0 +1,5 @@ +import type { ClientAppSetup } from '../types' + +declare module '@internal/clientAppSetups' { + export const clientAppSetups: ClientAppSetup[] +} diff --git a/packages/@vuepress/client/src/internal/index.ts b/packages/@vuepress/client/src/internal/index.ts deleted file mode 100644 index cf91013979..0000000000 --- a/packages/@vuepress/client/src/internal/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This is a fake module for webpack aliases - */ -export {} diff --git a/packages/@vuepress/client/src/internal/layoutComponents.d.ts b/packages/@vuepress/client/src/internal/layoutComponents.d.ts index 28843866d6..ef5d2634b1 100644 --- a/packages/@vuepress/client/src/internal/layoutComponents.d.ts +++ b/packages/@vuepress/client/src/internal/layoutComponents.d.ts @@ -1,4 +1,4 @@ -import { AsyncComponentLoader } from 'vue' +import type { AsyncComponentLoader } from 'vue' declare module '@internal/layoutComponents' { export const layoutComponents: Record diff --git a/packages/@vuepress/client/src/internal/pageComponents.d.ts b/packages/@vuepress/client/src/internal/pageComponents.d.ts index 6efd5f7906..d6c45320b8 100644 --- a/packages/@vuepress/client/src/internal/pageComponents.d.ts +++ b/packages/@vuepress/client/src/internal/pageComponents.d.ts @@ -1,4 +1,4 @@ -import { AsyncComponentLoader } from 'vue' +import type { AsyncComponentLoader } from 'vue' declare module '@internal/pageComponents' { export const pageComponents: Record diff --git a/packages/@vuepress/client/src/internal/pagesData.d.ts b/packages/@vuepress/client/src/internal/pagesData.d.ts new file mode 100644 index 0000000000..9c8a1aa3db --- /dev/null +++ b/packages/@vuepress/client/src/internal/pagesData.d.ts @@ -0,0 +1,6 @@ +import type { ClientPageData } from '@vuepress/shared' + +declare module '@internal/pagesData' { + export type PageData = ClientPageData + export const pagesData: Record +} diff --git a/packages/@vuepress/client/src/internal/routes.d.ts b/packages/@vuepress/client/src/internal/routes.d.ts index 5c06ecda0e..14dd504fa7 100644 --- a/packages/@vuepress/client/src/internal/routes.d.ts +++ b/packages/@vuepress/client/src/internal/routes.d.ts @@ -1,4 +1,4 @@ -import { RouteRecordRaw } from 'vue-router' +import type { RouteRecordRaw } from 'vue-router' declare module '@internal/routes' { export const routes: RouteRecordRaw[] diff --git a/packages/@vuepress/client/src/internal/siteData.d.ts b/packages/@vuepress/client/src/internal/siteData.d.ts index e193e53844..70eaf046e4 100644 --- a/packages/@vuepress/client/src/internal/siteData.d.ts +++ b/packages/@vuepress/client/src/internal/siteData.d.ts @@ -1,7 +1,6 @@ -import { ClientData, ClientDataPage } from '@vuepress/core' +import type { ClientSiteData } from '@vuepress/shared' declare module '@internal/siteData' { - export type SiteData = ClientData - export type PageData = ClientDataPage + export type SiteData = ClientSiteData export const siteData: SiteData } diff --git a/packages/@vuepress/client/src/server.ts b/packages/@vuepress/client/src/server.ts deleted file mode 100644 index 84083816cf..0000000000 --- a/packages/@vuepress/client/src/server.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createSSRApp, App } from 'vue' -import { createMemoryHistory } from 'vue-router' -import { createVueApp } from './createVueApp' - -// TODO: move to a better place -type VuepressSSRContext = { - url: string - title: string - lang: string - description: string - version: string -} - -export default (context: VuepressSSRContext): Promise => - new Promise((resolve, reject) => { - createVueApp({ - appCreator: createSSRApp, - historyCreator: createMemoryHistory, - }).then(({ app, router }) => { - const { url } = context - const { fullPath } = router.resolve(url) - - if (fullPath !== url) { - // eslint-disable-next-line prefer-promise-reject-errors - return reject({ url: fullPath }) - } - - router.push(url) - router.isReady().then(() => resolve(app)) - }) - }) diff --git a/packages/@vuepress/client/src/types/clientAppEnhance.ts b/packages/@vuepress/client/src/types/clientAppEnhance.ts new file mode 100644 index 0000000000..6526d46e24 --- /dev/null +++ b/packages/@vuepress/client/src/types/clientAppEnhance.ts @@ -0,0 +1,9 @@ +import type { App } from 'vue' +import type { Router } from 'vue-router' +import type { SiteData } from '../injections' + +export type ClientAppEnhance = (context: { + app: App + router: Router + siteData: SiteData +}) => void | Promise diff --git a/packages/@vuepress/client/src/types/clientAppSetup.ts b/packages/@vuepress/client/src/types/clientAppSetup.ts new file mode 100644 index 0000000000..35f47d5632 --- /dev/null +++ b/packages/@vuepress/client/src/types/clientAppSetup.ts @@ -0,0 +1 @@ +export type ClientAppSetup = () => void diff --git a/packages/@vuepress/client/src/types/index.ts b/packages/@vuepress/client/src/types/index.ts new file mode 100644 index 0000000000..3191bbeb0f --- /dev/null +++ b/packages/@vuepress/client/src/types/index.ts @@ -0,0 +1,2 @@ +export * from './clientAppEnhance' +export * from './clientAppSetup' diff --git a/packages/@vuepress/client/tsconfig.build.json b/packages/@vuepress/client/tsconfig.build.json new file mode 100644 index 0000000000..3ca7ad12a8 --- /dev/null +++ b/packages/@vuepress/client/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "ES2015", + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [{ "path": "../shared/tsconfig.build.json" }] +} diff --git a/packages/@vuepress/client/tsconfig.json b/packages/@vuepress/client/tsconfig.json index 67d79e972b..a1831fb1b1 100644 --- a/packages/@vuepress/client/tsconfig.json +++ b/packages/@vuepress/client/tsconfig.json @@ -1,14 +1,16 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "target": "ES2015", - "module": "ES2015", - "rootDir": "./src", - "outDir": "./lib", "baseUrl": ".", "paths": { - "@internal/*": ["src/internal/index.ts"] + "@internal/clientAppEnhances": ["src/internal/clientAppEnhances.d.ts"], + "@internal/clientAppSetups": ["src/internal/clientAppSetups.d.ts"], + "@internal/layoutComponents": ["src/internal/layoutComponents.d.ts"], + "@internal/pageComponents": ["src/internal/pageComponents.d.ts"], + "@internal/pagesData": ["src/internal/pagesData.d.ts"], + "@internal/routes": ["src/internal/routes.d.ts"], + "@internal/siteData": ["src/internal/siteData.d.ts"] } }, - "include": ["./src"] + "include": ["./src", "./__tests__"] } diff --git a/packages/@vuepress/core/package.json b/packages/@vuepress/core/package.json index 16b69a50a9..4dc880607f 100644 --- a/packages/@vuepress/core/package.json +++ b/packages/@vuepress/core/package.json @@ -22,19 +22,19 @@ "lib" ], "scripts": { - "build": "tsc -b", - "clean": "rimraf lib tsconfig.tsbuildinfo", - "lint": "eslint --ext .ts src" + "build": "tsc -b tsconfig.build.json", + "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { "@types/webpack-dev-server": "^3.10.1", - "@vue/server-renderer": "3.0.0-beta.10", + "@vue/server-renderer": "^3.0.0", "@vuepress/client": "2.0.0-alpha.0", - "@vuepress/markdown": "^1.3.1", - "@vuepress/shared-utils": "^1.4.1", + "@vuepress/markdown": "2.0.0-alpha.0", + "@vuepress/shared": "2.0.0-alpha.0", "@vuepress/utils": "2.0.0-alpha.0", - "vue": "3.0.0-beta.10", - "vue-router": "4.0.0-alpha.10", - "webpack-chain": "^6.4.0" + "date-fns": "^2.16.1", + "gray-matter": "^4.0.2", + "toml": "^3.0.0", + "webpack-chain": "^6.5.1" } } diff --git a/packages/@vuepress/core/src/app/appInit.ts b/packages/@vuepress/core/src/app/appInit.ts index a85e55940d..b42b978791 100644 --- a/packages/@vuepress/core/src/app/appInit.ts +++ b/packages/@vuepress/core/src/app/appInit.ts @@ -1,30 +1,20 @@ -import { - layoutComponentsPlugin, - pageComponentsPlugin, - routesPlugin, - siteDataPlugin, -} from '../plugins' import { createThemeApi } from '../theme-api' -import { App } from './createApp' -import { createAppMarkdown } from './createAppMarkdown' +import type { App } from '../types' import { createAppWriteTemp } from './createAppWriteTemp' +/** + * Initialize a vuepress app + * + * Plugins should be used before initialization. + */ export const appInit = async (app: App): Promise => { // create write temp util app.writeTemp = await createAppWriteTemp(app) // create theme api, resolve themes and layouts - app.themeApi = createThemeApi(app) - - // use internal plugins - const internalPlugins = [ - layoutComponentsPlugin, - pageComponentsPlugin, - routesPlugin, - siteDataPlugin, - // TODO: use theme-api plugin - ] - internalPlugins.forEach((item) => app.use(item)) + app.themeApi = await createThemeApi(app) + + // TODO: use theme-api plugin // use user plugins app.options.plugins.forEach((item) => app.useByConfig(item)) @@ -35,12 +25,14 @@ export const appInit = async (app: App): Promise => { } app.use(app.themeApi.theme.plugin) - // register all options of plugins that have been used - app.pluginApi.registerOptions() + // register all hooks of plugins that have been used + // plugins should be used before `registerHooks()` + // hooks in plugins will take effect after `registerHooks()` + app.pluginApi.registerHooks() - // create markdown - app.markdown = createAppMarkdown(app) + // plugin hook: extendMarkdown + await app.pluginApi.hooks.extendMarkdown.process(app.markdown) - // apply plugin option: onInitialized - await app.pluginApi.applyOption('onInitialized', app) + // plugin hook: onInitialized + await app.pluginApi.hooks.onInitialized.process(app) } diff --git a/packages/@vuepress/core/src/app/appPrepare.ts b/packages/@vuepress/core/src/app/appPrepare.ts index 8ba5fab7e3..4b83fe9363 100644 --- a/packages/@vuepress/core/src/app/appPrepare.ts +++ b/packages/@vuepress/core/src/app/appPrepare.ts @@ -1,18 +1,52 @@ -import { App } from './createApp' +import type { App } from '../types' import { createAppPages } from './createAppPages' +import { + prepareClientAppEnhances, + prepareClientAppSetups, + prepareLayoutComponents, + preparePageComponents, + preparePageData, + prepareRoutes, + prepareSiteData, +} from './prepare' +/** + * Prepare files for development or build + * + * - page components + * - routes + * - site data + * - other files that generated by plugins + */ export const appPrepare = async (app: App): Promise => { // create pages app.pages = await createAppPages(app) // TODO: additionalPages - // apply plugin option: onPrepared - await app.pluginApi.applyOption('onPrepared', app) + // generate page component file + await preparePageComponents(app) - // apply plugin option: clientDynamicModules - await app.pluginApi.applyOption('clientDynamicModules', app) + // generate page data files + await preparePageData(app) + + // generate layout components map file + await prepareLayoutComponents(app) + + // generate routes file + await prepareRoutes(app) + + // generate site data file + await prepareSiteData(app) + + // generate client app setups file + await prepareClientAppSetups(app) + + // generate client app enhances file + await prepareClientAppEnhances(app) - // TODO: enhanceAppFiles // TODO: globalUIComponents + + // plugin hook: onPrepared + await app.pluginApi.hooks.onPrepared.process(app) } diff --git a/packages/@vuepress/core/src/app/appUse.ts b/packages/@vuepress/core/src/app/appUse.ts index 088e89fadd..2e4a5b05cb 100644 --- a/packages/@vuepress/core/src/app/appUse.ts +++ b/packages/@vuepress/core/src/app/appUse.ts @@ -1,23 +1,18 @@ -import { logger, chalk } from '@vuepress/shared-utils' -import { App } from './createApp' +import { chalk } from '@vuepress/utils' +import type { App, Plugin, PluginOptions } from '../types' import { normalizePlugin } from './normalizePlugin' -import { Plugin } from './types' -export const appUse = ( +export const appUse = ( app: App, rawPlugin: Plugin | string, - config?: T + config?: Partial ): void => { // normalize plugin const plugin = normalizePlugin(app, rawPlugin, config) - // TODO: migrate logger // print log - if (plugin.name.startsWith('@vuepress/internal')) { - logger.debug(`Use plugin ${chalk.magenta(plugin.name)}`) - } else { - logger.info(`Use plugin ${chalk.magenta(plugin.name)}`) - } + // TODO: logger + console.log(`Use plugin ${chalk.magenta(plugin.name)}`) if (plugin.multiple !== true) { // remove duplicated plugin @@ -30,7 +25,7 @@ export const appUse = ( } // use plugin - app.pluginApi.use(plugin) + app.pluginApi.plugins.push(plugin) // TODO: nested plugins with `multiple` may cause potential problems diff --git a/packages/@vuepress/core/src/app/appUseByConfig.ts b/packages/@vuepress/core/src/app/appUseByConfig.ts index a0914ba9f7..d33af20890 100644 --- a/packages/@vuepress/core/src/app/appUseByConfig.ts +++ b/packages/@vuepress/core/src/app/appUseByConfig.ts @@ -1,22 +1,17 @@ -import { App } from './createApp' +import type { App, PluginOptions, PluginConfig } from '../types' import { normalizePluginConfig } from './normalizePluginConfig' -import { PluginConfig } from './types' -export const appUseByConfig = ( +export const appUseByConfig = ( app: App, pluginConfig: PluginConfig ): void => { - const normalizedPluginConfig = normalizePluginConfig(pluginConfig) + const normalizedPluginConfig = normalizePluginConfig(pluginConfig) - if (normalizedPluginConfig === false) { - return - } + if (normalizedPluginConfig === false) return const [plugin, config] = normalizedPluginConfig - if (config === false) { - return - } + if (config === false) return return app.use(plugin, config === true ? {} : config) } diff --git a/packages/@vuepress/core/src/app/createApp.ts b/packages/@vuepress/core/src/app/createApp.ts index e21d1d49a3..50ffc27042 100644 --- a/packages/@vuepress/core/src/app/createApp.ts +++ b/packages/@vuepress/core/src/app/createApp.ts @@ -1,54 +1,34 @@ -import { PluginApi, createPluginApi } from '../plugin-api' -import { ThemeApi } from '../theme-api' +import { createMarkdown } from '@vuepress/markdown' +import { createPluginApi } from '../plugin-api' +import type { App, VuepressConfig } from '../types' import { appInit } from './appInit' import { appPrepare } from './appPrepare' import { appUse } from './appUse' import { appUseByConfig } from './appUseByConfig' -import { AppBundler, createAppBundler } from './createAppBundler' -import { AppDir, createAppDir } from './createAppDir' -import { AppEnv, createAppEnv } from './createAppEnv' -import { AppOptions, createAppOptions } from './createAppOptions' -import { AppMarkdown } from './createAppMarkdown' -import { AppWriteTemp } from './createAppWriteTemp' -import { AppPages } from './createAppPages' -import { AppConfig, PluginConfig, Plugin } from './types' - -export interface App { - // created - options: AppOptions - dir: AppDir - env: AppEnv - pluginApi: PluginApi - use: (plugin: Plugin | string, config?: T) => void - useByConfig: (pluginConfig: PluginConfig) => void - init: () => Promise - prepare: () => Promise - dev: () => ReturnType - build: () => ReturnType - - // initialized - markdown: AppMarkdown - writeTemp: AppWriteTemp - themeApi: ThemeApi - - // prepared - pages: AppPages -} +import { createAppBundler } from './createAppBundler' +import { createAppDir } from './createAppDir' +import { createAppEnv } from './createAppEnv' +import { createAppOptions } from './createAppOptions' +import { createAppVersion } from './createAppVersion' /** * Create vuepress app */ -export const createApp = (config: AppConfig): App => { +export const createApp = (config: VuepressConfig): App => { + const version = createAppVersion() const options = createAppOptions(config) const dir = createAppDir(options) const env = createAppEnv(options) const bundler = createAppBundler(options) + const markdown = createMarkdown(options.markdown) const pluginApi = createPluginApi() const app = { + version, options, dir, env, + markdown, pluginApi, use: (...args) => appUse(app, ...args), diff --git a/packages/@vuepress/core/src/app/createAppBundler.ts b/packages/@vuepress/core/src/app/createAppBundler.ts index efc49248b7..39d08dbe64 100644 --- a/packages/@vuepress/core/src/app/createAppBundler.ts +++ b/packages/@vuepress/core/src/app/createAppBundler.ts @@ -1,15 +1,13 @@ -import { App } from './createApp' -import { AppOptions } from './createAppOptions' +import type { AppOptions, Bundler, BundlerEntry } from '../types' -export interface AppBundler { - dev: (app: App) => Promise - build: (app: App) => Promise -} - -export const createAppBundler = (options: AppOptions): AppBundler => { +export const createAppBundler = (options: AppOptions): Bundler => { switch (options.bundler) { case 'webpack': - default: - return require('@vuepress/bundler-webpack') as AppBundler + default: { + const { + createBundler, + } = require('@vuepress/bundler-webpack') as BundlerEntry + return createBundler(options.bundlerConfig) + } } } diff --git a/packages/@vuepress/core/src/app/createAppDir.ts b/packages/@vuepress/core/src/app/createAppDir.ts index 429a2b523c..83e8a7e422 100644 --- a/packages/@vuepress/core/src/app/createAppDir.ts +++ b/packages/@vuepress/core/src/app/createAppDir.ts @@ -1,39 +1,24 @@ -import { resolve } from 'path' -import { AppOptions } from './createAppOptions' - -/** - * Directory util function - */ -export type DirFunction = (...args: string[]) => string +import { path } from '@vuepress/utils' +import type { AppDir, AppDirFunction, AppOptions } from '../types' /** * Create directory util function */ -export const createDirFunction = (baseDir: string): DirFunction => { - return (...args: string[]): string => resolve(baseDir, ...args) -} - -/** - * Directory utils - */ -export interface AppDir { - temp: DirFunction - source: DirFunction - dest: DirFunction - client: DirFunction +export const createAppDirFunction = (baseDir: string): AppDirFunction => { + return (...args: string[]): string => path.resolve(baseDir, ...args) } /** * Create directory utils for vuepress app */ export const createAppDir = (options: AppOptions): AppDir => { - const temp = createDirFunction(options.dirTemp) - const source = createDirFunction(options.dirSource) - const dest = createDirFunction(options.dirDest) + const temp = createAppDirFunction(options.dirTemp) + const source = createAppDirFunction(options.dirSource) + const dest = createAppDirFunction(options.dirDest) // @vuepress/client - const client = createDirFunction( - resolve(require.resolve('@vuepress/client/package.json'), '..') + const client = createAppDirFunction( + path.resolve(require.resolve('@vuepress/client/package.json'), '..') ) return { diff --git a/packages/@vuepress/core/src/app/createAppEnv.ts b/packages/@vuepress/core/src/app/createAppEnv.ts index 3f6f1dfbd8..4eaddcbd52 100644 --- a/packages/@vuepress/core/src/app/createAppEnv.ts +++ b/packages/@vuepress/core/src/app/createAppEnv.ts @@ -1,14 +1,4 @@ -import { AppOptions } from './createAppOptions' - -/** - * Environment flags - */ -export interface AppEnv { - isProd: boolean - isTest: boolean - isDev: boolean - isDebug: boolean -} +import type { AppEnv, AppOptions } from '../types' /** * Create environment flags for vuepress app @@ -18,4 +8,5 @@ export const createAppEnv = (options: AppOptions): AppEnv => ({ isTest: process.env.NODE_ENV === 'test', isDev: process.env.NODE_ENV === 'development', isDebug: options.debug, + nodeEnv: process.env.NODE_ENV, }) diff --git a/packages/@vuepress/core/src/app/createAppMarkdown.ts b/packages/@vuepress/core/src/app/createAppMarkdown.ts deleted file mode 100644 index 4076e6652f..0000000000 --- a/packages/@vuepress/core/src/app/createAppMarkdown.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as createMarkdown from '@vuepress/markdown' -import { App } from './createApp' - -// TODO -export type AppMarkdown = any - -/** - * Create markdown parser for vuepress app - */ -export const createAppMarkdown = (app: App): AppMarkdown => { - const markdown: AppMarkdown = createMarkdown({ - // TODO: use markdown config from app.options - beforeInstantiate: (config) => { - app.pluginApi.applyOption('chainMarkdown', config) - }, - afterInstantiate: (md) => { - app.pluginApi.applyOption('extendMarkdown', md) - }, - }) - - return markdown -} diff --git a/packages/@vuepress/core/src/app/createAppOptions.ts b/packages/@vuepress/core/src/app/createAppOptions.ts index 11216e7f8b..207e361290 100644 --- a/packages/@vuepress/core/src/app/createAppOptions.ts +++ b/packages/@vuepress/core/src/app/createAppOptions.ts @@ -1,45 +1,80 @@ -import { resolve } from 'path' -import { AppConfig } from './types' - -/** - * Options (normalized config) of vuepress app - */ -export type AppOptions = Required +import { path } from '@vuepress/utils' +import type { AppOptions, VuepressConfig } from '../types' /** * Create options (normalized config) for vuepress app */ -export const createAppOptions = (config: AppConfig): AppOptions => { - return { - // Meta - title: '', - description: '', - head: [], - locales: {}, - - // Dev & Build - bundler: 'webpack', - base: '', - host: '0.0.0.0', - port: 8080, - debug: false, - open: false, - - // Dirs - dirDest: resolve(config.dirSource, '.vuepress/dist'), - dirTemp: resolve(config.dirSource, '.vuepress/.temp'), - - // Template - templateDev: require.resolve('@vuepress/client/templates/index.dev.html'), - templateSSR: require.resolve('@vuepress/client/templates/index.ssr.html'), - - // Plugins - plugins: [], - - // Theme - theme: '@vuepress/default', - themeConfig: {}, - - ...config, - } -} +export const createAppOptions = ({ + // site config + base = '', + title = '', + description = '', + head = [], + locales = {}, + + // markdown config + markdown = {}, + + // plugins config + plugins = [], + + // theme config + theme = '@vuepress/default', + themeConfig = {}, + + // directory config + dirSource, + dirDest = path.resolve(dirSource, '.vuepress/dist'), + dirTemp = path.resolve(dirSource, '.vuepress/.temp'), + dirCache = path.resolve( + require.resolve('cache-loader/package.json'), + '../../.cache' + ), + + // development config + host = '0.0.0.0', + port = 8080, + debug = false, + open = false, + evergreen = false, + templateDev = path.normalize( + require.resolve('@vuepress/client/templates/index.dev.html') + ), + templateSSR = path.normalize( + require.resolve('@vuepress/client/templates/index.ssr.html') + ), + + // bundler config + bundler = 'webpack', + bundlerConfig = {}, + + // ssr config + shouldPreload = null, + shouldPrefetch = null, +}: VuepressConfig): AppOptions => ({ + // site config + base, + title, + description, + head, + locales, + markdown, + plugins, + theme, + themeConfig, + dirSource, + dirDest, + dirTemp, + dirCache, + debug, + host, + port, + open, + evergreen, + templateDev, + templateSSR, + bundler, + bundlerConfig, + shouldPreload, + shouldPrefetch, +}) diff --git a/packages/@vuepress/core/src/app/createAppPages.ts b/packages/@vuepress/core/src/app/createAppPages.ts index f078980e18..d3926176c3 100644 --- a/packages/@vuepress/core/src/app/createAppPages.ts +++ b/packages/@vuepress/core/src/app/createAppPages.ts @@ -1,18 +1,19 @@ import { globby } from '@vuepress/utils' -import { App } from './createApp' -import { Page, createPage } from '../page' - -export type AppPages = Page[] +import { createPage } from '../page' +import type { App, Page } from '../types' /** * Create pages for vuepress app */ -export const createAppPages = async (app: App): Promise => { - const patterns = ['**/*.md', '**/*.vue', '!.vuepress', '!node_modules'] +export const createAppPages = async (app: App): Promise => { + const patterns = ['**/*.md', '!.vuepress', '!node_modules'] const pagePaths = await globby(patterns, { cwd: app.dir.source(), }) + // TODO + // may need to limit the max parallel tasks + // or change to serial tasks const pages = await Promise.all( pagePaths.map((filePath) => createPage(app, { diff --git a/packages/@vuepress/core/src/app/createAppVersion.ts b/packages/@vuepress/core/src/app/createAppVersion.ts new file mode 100644 index 0000000000..bc7464d991 --- /dev/null +++ b/packages/@vuepress/core/src/app/createAppVersion.ts @@ -0,0 +1,6 @@ +/** + * Create version of vuepress app + */ +export const createAppVersion = (): string => { + return require('../../package.json')?.version || '' +} diff --git a/packages/@vuepress/core/src/app/createAppWriteTemp.ts b/packages/@vuepress/core/src/app/createAppWriteTemp.ts index 1c1349ea42..e5b849088a 100644 --- a/packages/@vuepress/core/src/app/createAppWriteTemp.ts +++ b/packages/@vuepress/core/src/app/createAppWriteTemp.ts @@ -1,16 +1,5 @@ -import { parse } from 'path' import { fs } from '@vuepress/utils' -import { App } from './createApp' - -/** - * Internal temp cache - */ -type TempCache = Map - -/** - * Write temp file util - */ -export type AppWriteTemp = (file: string, content: string) => Promise +import type { App, AppWriteTemp } from '../types' /** * Create write temp file util for vuepress app @@ -18,21 +7,19 @@ export type AppWriteTemp = (file: string, content: string) => Promise export const createAppWriteTemp = async (app: App): Promise => { const dirTemp = app.dir.temp() - // ensure temp directory exists - await fs.ensureDir(dirTemp) - + // TODO: add flag to control empty temp directory or not // TODO: check if temp dir is safe to empty // empty temp directory await fs.emptyDir(dirTemp) - const tempCache: TempCache = new Map() + // TODO: temp cache from files + const tempCache = new Map() const writeTemp: AppWriteTemp = async (file: string, content: string) => { const filePath = app.dir.temp(file) const contentCached = tempCache.get(filePath) if (contentCached !== content) { - await fs.ensureDir(parse(filePath).dir) - await fs.writeFile(filePath, content) + await fs.outputFile(filePath, content) tempCache.set(filePath, content) } return filePath diff --git a/packages/@vuepress/core/src/app/createClientData.ts b/packages/@vuepress/core/src/app/createClientData.ts deleted file mode 100644 index f9690b1ae9..0000000000 --- a/packages/@vuepress/core/src/app/createClientData.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Page } from '../page' -import { App } from './createApp' - -export interface ClientData { - title: string - description: string - base: string - pages: ClientDataPage[] -} - -export type ClientDataPage = Pick< - Page, - 'key' | 'path' | 'title' | 'frontmatter' | 'excerpt' | 'headers' -> - -/** - * Create data from app, which will be used in client - */ -export const createClientData = (app: App): ClientData => { - return { - title: app.options.title, - description: app.options.description, - base: app.options.base, - pages: app.pages.map( - ({ key, path, title, frontmatter, excerpt, headers }) => ({ - key, - path, - title, - frontmatter, - excerpt, - headers, - }) - ), - } -} diff --git a/packages/@vuepress/core/src/app/index.ts b/packages/@vuepress/core/src/app/index.ts index 9acda3ee08..700f839157 100644 --- a/packages/@vuepress/core/src/app/index.ts +++ b/packages/@vuepress/core/src/app/index.ts @@ -3,15 +3,5 @@ export * from './appPrepare' export * from './appUse' export * from './appUseByConfig' export * from './createApp' -export * from './createAppBundler' -export * from './createAppDir' -export * from './createAppEnv' -export * from './createAppMarkdown' -export * from './createAppOptions' -export * from './createAppPages' -export * from './createAppWriteTemp' -export * from './createClientData' export * from './normalizePlugin' export * from './normalizePluginConfig' -export * from './resolvePluginByName' -export * from './types' diff --git a/packages/@vuepress/core/src/app/normalizePlugin.ts b/packages/@vuepress/core/src/app/normalizePlugin.ts index 4fb6c8620b..6ad0f22644 100644 --- a/packages/@vuepress/core/src/app/normalizePlugin.ts +++ b/packages/@vuepress/core/src/app/normalizePlugin.ts @@ -1,29 +1,27 @@ -import { isFunction, isString } from '@vuepress/utils' -import { App } from './createApp' +import { isFunction, isString } from '@vuepress/shared' +import type { App, Plugin, PluginObject, PluginOptions } from '../types' import { resolvePluginByName } from './resolvePluginByName' -import { Plugin, PluginOptions } from './types' -export const normalizePlugin = ( +export const normalizePlugin = < + T extends PluginOptions = PluginOptions, + U extends PluginObject = PluginObject +>( app: App, - plugin: Plugin | string, + plugin: Plugin | string, config?: Partial -): PluginOptions => { - const resolvedPlugin = isString(plugin) ? resolvePluginByName(plugin) : plugin +): U => { + const resolvedPlugin = isString(plugin) + ? resolvePluginByName(plugin) + : plugin // TODO if (resolvedPlugin === null) { throw new Error() } - const invokedPlugin = isFunction(resolvedPlugin) + const pluginObject = isFunction(resolvedPlugin) ? resolvedPlugin(config ?? {}, app) : resolvedPlugin - const normalizedPlugin: PluginOptions = { - ...invokedPlugin, - - // TODO: normalize plugin name - } - - return normalizedPlugin + return pluginObject as U } diff --git a/packages/@vuepress/core/src/app/normalizePluginConfig.ts b/packages/@vuepress/core/src/app/normalizePluginConfig.ts index 26b179ebb4..dcf468aca4 100644 --- a/packages/@vuepress/core/src/app/normalizePluginConfig.ts +++ b/packages/@vuepress/core/src/app/normalizePluginConfig.ts @@ -1,14 +1,13 @@ -import { isArray, isString } from '@vuepress/utils' -import { PluginConfig } from './types' +import { isArray, isString } from '@vuepress/shared' +import type { + PluginOptions, + PluginConfig, + PluginConfigNormalized, +} from '../types' -export type NormalizedPluginConfig = [ - string, - Partial | boolean -] - -export const normalizePluginConfig = ( +export const normalizePluginConfig = ( pluginConfig: PluginConfig -): NormalizedPluginConfig | false => { +): PluginConfigNormalized | false => { // 'container' -> ['container', {}] if (isString(pluginConfig)) { return [pluginConfig, {}] diff --git a/packages/@vuepress/core/src/app/prepare/index.ts b/packages/@vuepress/core/src/app/prepare/index.ts new file mode 100644 index 0000000000..2d628c9f70 --- /dev/null +++ b/packages/@vuepress/core/src/app/prepare/index.ts @@ -0,0 +1,7 @@ +export * from './prepareClientAppEnhances' +export * from './prepareClientAppSetups' +export * from './prepareLayoutComponents' +export * from './preparePageComponents' +export * from './preparePageData' +export * from './prepareRoutes' +export * from './prepareSiteData' diff --git a/packages/@vuepress/core/src/app/prepare/prepareClientAppEnhances.ts b/packages/@vuepress/core/src/app/prepare/prepareClientAppEnhances.ts new file mode 100644 index 0000000000..45f2568b99 --- /dev/null +++ b/packages/@vuepress/core/src/app/prepare/prepareClientAppEnhances.ts @@ -0,0 +1,29 @@ +import type { App } from '../../types' + +/** + * Generate client app enhances temp file + */ +export const prepareClientAppEnhances = async (app: App): Promise => { + // plugin hook: clientAppEnhanceFiles + const clientAppEnhanceFiles = await app.pluginApi.hooks.clientAppEnhanceFiles.process( + app + ) + + // flat the hook result to get the file paths array + const filePaths = clientAppEnhanceFiles.flat() + + // generate client app enhance files entry + const content = `\ +${filePaths + .map( + (filePath, index) => `import clientAppEnhance${index} from '${filePath}'` + ) + .join('\n')} + +export const clientAppEnhances = [ + ${filePaths.map((_, index) => ` clientAppEnhance${index},`).join('\n')} +] +` + + await app.writeTemp('internal/clientAppEnhances.js', content) +} diff --git a/packages/@vuepress/core/src/app/prepare/prepareClientAppSetups.ts b/packages/@vuepress/core/src/app/prepare/prepareClientAppSetups.ts new file mode 100644 index 0000000000..592df699db --- /dev/null +++ b/packages/@vuepress/core/src/app/prepare/prepareClientAppSetups.ts @@ -0,0 +1,27 @@ +import type { App } from '../../types' + +/** + * Generate client app setups temp file + */ +export const prepareClientAppSetups = async (app: App): Promise => { + // plugin hook: clientAppSetupFiles + const clientAppSetupFiles = await app.pluginApi.hooks.clientAppSetupFiles.process( + app + ) + + // flat the hook result to get the file paths array + const filePaths = clientAppSetupFiles.flat() + + // generate client app enhance files entry + const content = `\ +${filePaths + .map((filePath, index) => `import clientAppSetup${index} from '${filePath}'`) + .join('\n')} + +export const clientAppSetups = [ + ${filePaths.map((_, index) => ` clientAppSetup${index},`).join('\n')} +] +` + + await app.writeTemp('internal/clientAppSetups.js', content) +} diff --git a/packages/@vuepress/core/src/app/prepare/prepareLayoutComponents.ts b/packages/@vuepress/core/src/app/prepare/prepareLayoutComponents.ts new file mode 100644 index 0000000000..f89d88cd0a --- /dev/null +++ b/packages/@vuepress/core/src/app/prepare/prepareLayoutComponents.ts @@ -0,0 +1,23 @@ +import type { App } from '../../types' + +/** + * Generate layout components temp file + */ +export const prepareLayoutComponents = async (app: App): Promise => { + const content = `\ +import { defineAsyncComponent } from 'vue' + +export const layoutComponents = {\ +${app.themeApi.layouts + .map( + ({ name, path }) => ` + ${JSON.stringify(name)}: defineAsyncComponent(() => import(${ + app.env.isDebug ? `/* webpackChunkName: "layout-${name}" */` : '' + }${JSON.stringify(path)})),` + ) + .join('')} +} +` + + await app.writeTemp('internal/layoutComponents.js', content) +} diff --git a/packages/@vuepress/core/src/app/prepare/preparePageComponents.ts b/packages/@vuepress/core/src/app/prepare/preparePageComponents.ts new file mode 100644 index 0000000000..7070a541fc --- /dev/null +++ b/packages/@vuepress/core/src/app/prepare/preparePageComponents.ts @@ -0,0 +1,32 @@ +import type { App } from '../../types' + +/** + * Generate page components temp file + */ +export const preparePageComponents = async (app: App): Promise => { + // generate page component files + for (const page of app.pages) { + await app.writeTemp( + page.componentFilePathRelative, + page.componentFileContent + ) + } + + // generate page components map file + const content = `\ +import { defineAsyncComponent } from 'vue' + +export const pageComponents = {\ +${app.pages + .map( + ({ key, componentFilePath }) => ` + ${JSON.stringify(key)}: defineAsyncComponent(() => import(${ + app.env.isDebug ? `/* webpackChunkName: "page-${key}" */` : '' + }${JSON.stringify(app.dir.temp(componentFilePath))})),` + ) + .join('')} +} +` + + await app.writeTemp('internal/pageComponents.js', content) +} diff --git a/packages/@vuepress/core/src/app/prepare/preparePageData.ts b/packages/@vuepress/core/src/app/prepare/preparePageData.ts new file mode 100644 index 0000000000..43eb541128 --- /dev/null +++ b/packages/@vuepress/core/src/app/prepare/preparePageData.ts @@ -0,0 +1,54 @@ +import type { App, ClientPageData, Page } from '../../types' + +export const generateClientPageData = ({ + key, + path, + title, + frontmatter, + excerpt, + headers, +}: Page): ClientPageData => { + return { + key, + path, + title, + frontmatter, + excerpt, + headers, + } +} + +/** + * Generate page data temp file + */ +export const preparePageData = async (app: App): Promise => { + // generate data of all pages + for (const page of app.pages) { + await app.writeTemp( + `internal/pagesData/${page.key}.js`, + `export default ${JSON.stringify( + generateClientPageData(page), + null, + 2 + )}\n` + ) + } + + // generate pagesData entry + const content = `\ +${app.pages + .map(({ key }, index) => `import page${index} from './${key}'`) + .join('\n')} + +export const pagesData = {\ +${app.pages + .map( + ({ path }, index) => ` + ${JSON.stringify(path)}: page${index},` + ) + .join('\n')} +} +` + + await app.writeTemp('internal/pagesData/index.js', content) +} diff --git a/packages/@vuepress/core/src/plugins/routesPlugin.ts b/packages/@vuepress/core/src/app/prepare/prepareRoutes.ts similarity index 57% rename from packages/@vuepress/core/src/plugins/routesPlugin.ts rename to packages/@vuepress/core/src/app/prepare/prepareRoutes.ts index 24045b8a70..45facc96f1 100644 --- a/packages/@vuepress/core/src/plugins/routesPlugin.ts +++ b/packages/@vuepress/core/src/app/prepare/prepareRoutes.ts @@ -1,53 +1,54 @@ -import { Plugin } from '../app' +import type { App } from '../../types' -export const routesPlugin: Plugin<{}> = { - name: '@vuepress/internal-routes', - - async clientDynamicModules({ pages }) { - const content = `\ +/** + * Generate routes temp file + */ +export const prepareRoutes = async (app: App): Promise => { + const content = `\ import { Vuepress } from '@vuepress/client/lib/components/Vuepress' export const routes = [\ -${pages.map(({ key, path, pathInferred }) => { - const items: string[] = [] +${app.pages.map(({ key, path, pathInferred }) => { + const routesMap: Record = {} // page route - items.push(` + routesMap[path] = ` { name: ${JSON.stringify(key)}, path: ${JSON.stringify(path)}, component: Vuepress, - },`) + },` // redirect from decoded path const decodedPath = decodeURIComponent(path) if (decodedPath !== path) { - items.push(` + routesMap[decodedPath] = ` { path: ${JSON.stringify(decodedPath)}, redirect: ${JSON.stringify(path)}, - },`) + },` } // redirect from index path if (/\/$/.test(path)) { - items.push(` + const indexPath = path + 'index.html' + routesMap[indexPath] = ` { - path: ${JSON.stringify(path + 'index.html')}, + path: ${JSON.stringify(indexPath)}, redirect: ${JSON.stringify(path)}, - },`) + },` } // redirect from inferred path if (pathInferred !== null && pathInferred !== path) { - items.push(` + routesMap[pathInferred] = ` { path: ${JSON.stringify(pathInferred)}, redirect: ${JSON.stringify(path)}, - },`) + },` } - return items.join('') + return Object.values(routesMap).join('') })} { path: '/:catchAll(.*)', @@ -56,10 +57,5 @@ ${pages.map(({ key, path, pathInferred }) => { ] ` - return { - content, - filename: 'routes.js', - dirname: 'internal', - } - }, + await app.writeTemp('internal/routes.js', content) } diff --git a/packages/@vuepress/core/src/app/prepare/prepareSiteData.ts b/packages/@vuepress/core/src/app/prepare/prepareSiteData.ts new file mode 100644 index 0000000000..dd3e5b8030 --- /dev/null +++ b/packages/@vuepress/core/src/app/prepare/prepareSiteData.ts @@ -0,0 +1,21 @@ +import type { App, ClientSiteData } from '../../types' + +const generateClientSiteData = (app: App): ClientSiteData => { + return { + base: app.options.base, + title: app.options.title, + description: app.options.description, + locales: app.options.locales, + } +} + +/** + * Generate site data temp file + */ +export const prepareSiteData = async (app: App): Promise => { + const content = `\ +export const siteData = ${JSON.stringify(generateClientSiteData(app), null, 2)} +` + + await app.writeTemp('internal/siteData.js', content) +} diff --git a/packages/@vuepress/core/src/app/resolvePluginByName.ts b/packages/@vuepress/core/src/app/resolvePluginByName.ts index 85671137bd..b8a1dde185 100644 --- a/packages/@vuepress/core/src/app/resolvePluginByName.ts +++ b/packages/@vuepress/core/src/app/resolvePluginByName.ts @@ -1,21 +1,23 @@ -import { moduleResolver } from '@vuepress/shared-utils' -import { Plugin } from './types' - -// TODO: migrate module resolver -const cwd = process.cwd() -const resolver = moduleResolver.getPluginResolver(cwd) +import { normalizePackageName } from '@vuepress/shared' +import { requireResolve } from '@vuepress/utils' +import type { Plugin, PluginObject, PluginOptions } from '../types' /** * Resolve a plugin according to the name string */ -export const resolvePluginByName = (pluginName: string): Plugin | null => { - // TODO: for current plugin resolver, the `entry` is the module - const result = resolver.resolve(pluginName, cwd) +export const resolvePluginByName = < + T extends PluginOptions = PluginOptions, + U extends PluginObject = PluginObject +>( + pluginName: string +): Plugin | null => { + const result = + requireResolve(pluginName) ?? + requireResolve(normalizePackageName(pluginName, 'vuepress', 'plugin')) - if (!result.entry) { + if (result === null) { return null } - // TODO: plugin name - return (result.entry as unknown) as Plugin + return require(result) } diff --git a/packages/@vuepress/core/src/app/types.ts b/packages/@vuepress/core/src/app/types.ts deleted file mode 100644 index c0a82158bb..0000000000 --- a/packages/@vuepress/core/src/app/types.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Options } from '../plugin-api' -import { App } from './createApp' - -export interface LocaleConfig extends Omit { - path?: string -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type PluginConfig = - // plugins: ['container'] - | string - // plugins: [['container']] - | [string] - // plugins: [['container', options]] - // plugins: [['container', false]] - | [string, Partial | boolean] - -export interface ThemeConfig { - locales?: LocaleConfig - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any -} - -/** - * Config to create vuepress app - */ -export interface AppConfig { - // Meta - title?: string - description?: string - head?: Array<[string, Record]> - locales?: LocaleConfig - - // Dev & Build - bundler?: 'webpack' - base?: string - host?: string - port?: number - debug?: boolean - open?: boolean - - // Dirs - dirSource: string - dirDest?: string - dirTemp?: string - - // Template - templateDev?: string - templateSSR?: string - - // Plugins - plugins?: PluginConfig[] - - // Theme - theme?: string - themeConfig?: T -} - -/** - * Type of vuepress plugin - */ -export type Plugin< - T extends object = {}, - U extends PluginOptions = PluginOptions -> = U | PluginFunction - -/** - * Function type of vuepress plugin - */ -export type PluginFunction< - T extends object = {}, - U extends PluginOptions = PluginOptions -> = (pluginConfig: Partial, app: App) => U - -/** - * Options type of vuepress plugin - */ -export interface PluginOptions extends Options { - // allow use a plugin multiple times or not - multiple?: boolean - - // allow use plugins in plugin - plugins?: PluginConfig[] -} - -/** - * Type of vuepress theme - */ -export type Theme = Plugin - -/** - * Function type of vuepress theme - */ -export type ThemeFunction = PluginFunction< - T, - ThemeOptions -> - -/** - * Options type of vuepress theme - */ -export interface ThemeOptions extends Omit { - extend?: string - // TODO: extend -> extends -} diff --git a/packages/@vuepress/core/src/index.ts b/packages/@vuepress/core/src/index.ts index ec07fefb50..d0415257b8 100644 --- a/packages/@vuepress/core/src/index.ts +++ b/packages/@vuepress/core/src/index.ts @@ -1,5 +1,5 @@ export * from './app' export * from './page' export * from './plugin-api' -export * from './plugins' export * from './theme-api' +export * from './types' diff --git a/packages/@vuepress/core/src/page/createPage.ts b/packages/@vuepress/core/src/page/createPage.ts index eb328978b9..1bd6a6eaf4 100644 --- a/packages/@vuepress/core/src/page/createPage.ts +++ b/packages/@vuepress/core/src/page/createPage.ts @@ -1,130 +1,34 @@ -import { App } from '../app' +import type { App, Page, PageOptions } from '../types' import { inferPagePath } from './inferPagePath' -import { resolveFilePath } from './resolveFilePath' -import { resolveFileContent } from './resolveFileContent' +import { resolvePageComponent } from './resolvePageComponent' import { resolvePageContent } from './resolvePageContent' import { resolvePageDate } from './resolvePageDate' import { resolvePageExcerpt } from './resolvePageExcerpt' -import { resolvePageHeaders, PageHeader } from './resolvePageHeaders' +import { resolvePageFile } from './resolvePageFile' import { resolvePageKey } from './resolvePageKey' import { resolvePagePath } from './resolvePagePath' import { resolvePagePermalink } from './resolvePagePermalink' import { resolvePageSlug } from './resolvePageSlug' import { resolvePageTitle } from './resolvePageTitle' -export interface PageConfig { - permalink?: string - permalinkPattern?: string - filePath?: string - frontmatter?: PageFrontmatter - content?: string -} - -export type PageFrontmatter = Record - -export interface Page { - /** - * Identifier of the page - * - * Will also be used as the component name - * - * @example 'v-foobar' - */ - key: string - - /** - * Route path of the page - * - * Firstly inferred from the file path - * - * Might be overridden by permalink - * - * @example '/guide/index.html' - * @example '/2020/02/02/hello-world.html' - */ - path: string - - /** - * Path of the page that inferred from file path - * - * If the page does not come from a file, it would be `null` - * - * @example '/guide/index.html' - */ - pathInferred: string | null - - /** - * Absolute path of the source file - * - * If the page does not come from a file, it would be `null` - */ - filePath: string | null - - /** - * Relative path of the source file - * - * If the page does not come from a file, it would be `null` - */ - filePathRelative: string | null - - /** - * Title of the page - */ - title: string - - /** - * Content of the page - */ - content: string - - /** - * Front matter of the page - */ - frontmatter: PageFrontmatter - - /** - * Excerpt of the page - */ - excerpt: string - - /** - * Headers of the page - */ - headers: PageHeader[] - - /** - * Slug of the page - */ - slug: string - - /** - * Date of the page - */ - date: string -} - export const createPage = async ( app: App, - config: PageConfig + options: PageOptions ): Promise => { - // resolve absolute path and relative path - const { filePath, filePathRelative } = resolveFilePath(app, config) - - // resolve the raw content - const rawContent = await resolveFileContent(config, filePath) + // 1. resolve page file path and content + const { filePath, filePathRelative, fileContent } = await resolvePageFile( + app, + options + ) // resolve content & frontmatter & raw excerpt from raw content - const { content, frontmatter, excerpt: rawExcerpt } = resolvePageContent( - rawContent, - filePath + const { frontmatter, content, excerpt: rawExcerpt } = resolvePageContent( + fileContent ) // resolve title from content const title = resolvePageTitle(frontmatter, content) - // resolve headers from content - const headers = resolvePageHeaders(app, content) - // resolve excerpt from raw excerpt const excerpt = resolvePageExcerpt( rawExcerpt, @@ -140,15 +44,16 @@ export const createPage = async ( const date = resolvePageDate(frontmatter, filePathRelative) // infer page path according to file path - const pathInferred = inferPagePath(filePathRelative) + const { pathInferred, pathLocale } = inferPagePath(app, filePathRelative) // resolve page permalink const permalink = resolvePagePermalink( - config, + options, frontmatter, slug, date, - pathInferred + pathInferred, + pathLocale ) // resolve page path @@ -157,17 +62,30 @@ export const createPage = async ( // resolve path key const key = resolvePageKey(path) + const { + headers, + links, + componentFilePath, + componentFilePathRelative, + componentFileContent, + } = await resolvePageComponent(app, content, filePathRelative, path) + return { key, path, pathInferred, + pathLocale, filePath, filePathRelative, + componentFilePath, + componentFilePathRelative, + componentFileContent, title, content, frontmatter, excerpt, headers, + links, slug, date, } diff --git a/packages/@vuepress/core/src/page/file/index.ts b/packages/@vuepress/core/src/page/file/index.ts new file mode 100644 index 0000000000..9648460de9 --- /dev/null +++ b/packages/@vuepress/core/src/page/file/index.ts @@ -0,0 +1,2 @@ +export * from './resolveFileContent' +export * from './resolveFilePath' diff --git a/packages/@vuepress/core/src/page/resolveFileContent.ts b/packages/@vuepress/core/src/page/file/resolveFileContent.ts similarity index 63% rename from packages/@vuepress/core/src/page/resolveFileContent.ts rename to packages/@vuepress/core/src/page/file/resolveFileContent.ts index 91d1a7b3be..d4f07b4d5e 100644 --- a/packages/@vuepress/core/src/page/resolveFileContent.ts +++ b/packages/@vuepress/core/src/page/file/resolveFileContent.ts @@ -1,8 +1,8 @@ import { fs } from '@vuepress/utils' -import { PageConfig } from './createPage' +import type { PageOptions } from '../../types' export const resolveFileContent = async ( - config: PageConfig, + options: PageOptions, filePath: string | null ): Promise => { if (filePath) { @@ -10,5 +10,6 @@ export const resolveFileContent = async ( return fs.readFile(filePath, 'utf-8') } - return config.content || '' + // load content from options + return options.content || '' } diff --git a/packages/@vuepress/core/src/page/resolveFilePath.ts b/packages/@vuepress/core/src/page/file/resolveFilePath.ts similarity index 52% rename from packages/@vuepress/core/src/page/resolveFilePath.ts rename to packages/@vuepress/core/src/page/file/resolveFilePath.ts index d45d133819..3ca3c2c73b 100644 --- a/packages/@vuepress/core/src/page/resolveFilePath.ts +++ b/packages/@vuepress/core/src/page/file/resolveFilePath.ts @@ -1,14 +1,12 @@ -import { relative, isAbsolute } from 'path' -import { normalizeSeparator } from '@vuepress/utils' -import { App } from '../app' -import { PageConfig } from './createPage' +import { path } from '@vuepress/utils' +import type { App, PageOptions } from '../../types' /** * Resolve absolute and relative path of page file */ export const resolveFilePath = ( app: App, - { filePath }: PageConfig + { filePath }: PageOptions ): { filePath: string | null filePathRelative: string | null @@ -22,18 +20,16 @@ export const resolveFilePath = ( } // absolute file path - if (isAbsolute(filePath)) { + if (path.isAbsolute(filePath)) { return { filePath, - filePathRelative: normalizeSeparator( - relative(app.dir.source(), filePath) - ), + filePathRelative: path.relative(app.dir.source(), filePath), } } // relative file path return { - filePath: normalizeSeparator(app.dir.source(filePath)), + filePath: app.dir.source(filePath), filePathRelative: filePath, } } diff --git a/packages/@vuepress/core/src/page/index.ts b/packages/@vuepress/core/src/page/index.ts index 07775a196d..23439bbf37 100644 --- a/packages/@vuepress/core/src/page/index.ts +++ b/packages/@vuepress/core/src/page/index.ts @@ -1 +1,12 @@ export * from './createPage' +export * from './inferPagePath' +export * from './resolvePageComponent' +export * from './resolvePageContent' +export * from './resolvePageDate' +export * from './resolvePageExcerpt' +export * from './resolvePageFile' +export * from './resolvePageKey' +export * from './resolvePagePath' +export * from './resolvePagePermalink' +export * from './resolvePageSlug' +export * from './resolvePageTitle' diff --git a/packages/@vuepress/core/src/page/inferPagePath.ts b/packages/@vuepress/core/src/page/inferPagePath.ts index 718fedbd7f..f33ef08b44 100644 --- a/packages/@vuepress/core/src/page/inferPagePath.ts +++ b/packages/@vuepress/core/src/page/inferPagePath.ts @@ -1,16 +1,35 @@ +import type { App } from '../types' + /** * Infer page path according to file path */ export const inferPagePath = ( + app: App, filePathRelative: string | null -): string | null => { +): { + pathInferred: string | null + pathLocale: string +} => { if (!filePathRelative) { - return null + return { + pathInferred: null, + pathLocale: '/', + } } + // infer page path // foo.md -> /foo.html - // foo.vue -> /foo.html // foo/bar.md -> /foo/bar.html - // foo/bar.vue -> /foo/bar.html - return `/${filePathRelative.replace(/\.(vue|md)$/, '.html')}` + const pathInferred = `/${filePathRelative.replace(/\.md$/, '.html')}` + + // infer page locale path + const pathLocale = + Object.keys(app.options.locales).find((locale) => + pathInferred.startsWith(locale) + ) ?? '/' + + return { + pathInferred, + pathLocale, + } } diff --git a/packages/@vuepress/core/src/page/resolvePageComponent.ts b/packages/@vuepress/core/src/page/resolvePageComponent.ts new file mode 100644 index 0000000000..c200b176a3 --- /dev/null +++ b/packages/@vuepress/core/src/page/resolvePageComponent.ts @@ -0,0 +1,53 @@ +import type { + MarkdownEnv, + MarkdownHeader, + MarkdownLink, +} from '@vuepress/markdown' +import { path } from '@vuepress/utils' +import type { App } from '../types' + +export const resolvePageComponent = async ( + app: App, + content: string, + filePathRelative: string | null, + routePath: string +): Promise<{ + headers: MarkdownHeader[] + links: MarkdownLink[] + componentFilePath: string + componentFilePathRelative: string + componentFileContent: string +}> => { + const markdownEnv: MarkdownEnv = { + base: app.options.base, + filePathRelative, + } + + const rendered = app.markdown.render(content, markdownEnv) + const { headers = [], links = [], hoistedTags = [] } = markdownEnv + + // TODO: links check + + // resolve component file content + // take the rendered markdown content as - - diff --git a/playground/docs/.vuepress/theme/index.ts b/playground/docs/.vuepress/theme/index.ts deleted file mode 100644 index 4e0c81c178..0000000000 --- a/playground/docs/.vuepress/theme/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Theme } from '@vuepress/core' - -const theme: Theme = { - name: 'local-theme', -} - -export = theme diff --git a/playground/docs/.vuepress/theme/layouts/Layout.vue b/playground/docs/.vuepress/theme/layouts/Layout.vue deleted file mode 100644 index 1941b60cbc..0000000000 --- a/playground/docs/.vuepress/theme/layouts/Layout.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/playground/docs/.vuepress/theme/shims-vue.d.ts b/playground/docs/.vuepress/theme/shims-vue.d.ts deleted file mode 100644 index 66be827f4f..0000000000 --- a/playground/docs/.vuepress/theme/shims-vue.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.vue' { - import { Component } from 'vue' - export default Component -} diff --git a/playground/docs/README.md b/playground/docs/README.md index ce8076e650..23d40b8dbe 100644 --- a/playground/docs/README.md +++ b/playground/docs/README.md @@ -1,5 +1,5 @@ --- -home: true +layout: Home title: 'frontmatter title' head: - - meta diff --git a/playground/package.json b/playground/package.json index e4770a7d7e..aaa47bac29 100644 --- a/playground/package.json +++ b/playground/package.json @@ -3,16 +3,14 @@ "version": "0.0.0", "private": true, "scripts": { - "build": "ts-node src/build.ts", - "dev": "ts-node src/dev.ts", + "build": "vuepress build docs --temp .temp", + "dev": "vuepress dev docs --temp .temp", "serve": "serve dist" }, - "dependencies": { - "@vuepress/bundler-webpack": "2.0.0-alpha.0", - "@vuepress/core": "2.0.0-alpha.0" - }, "devDependencies": { - "serve": "^11.3.2", - "ts-node": "^8.10.1" + "@vuepress/bundler-webpack": "2.0.0-alpha.0", + "@vuepress/cli": "2.0.0-alpha.0", + "@vuepress/core": "2.0.0-alpha.0", + "serve": "^11.3.2" } } diff --git a/playground/src/app.ts b/playground/src/app.ts deleted file mode 100644 index d27d8ce128..0000000000 --- a/playground/src/app.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { createApp } from '@vuepress/core' -import type { App } from '@vuepress/core' -import { path } from '@vuepress/utils' - -export const createVuepressApp = (): App => - createApp({ - title: 'title', - description: 'description', - head: [['meta', { from: 'site config' }]], - - locales: { - '/': { - lang: 'en-US', - title: 'VuePress', - description: 'Vue-powered Static Site Generator', - }, - '/zh/': { - lang: 'zh-CN', - title: 'VuePress', - description: 'Vue 驱动的静态网站生成器', - }, - }, - - base: '/', - host: '0.0.0.0', - port: 8080, - debug: true, - open: false, - - templateDev: require.resolve('@vuepress/client/templates/index.dev.html'), - templateSSR: require.resolve('@vuepress/client/templates/index.ssr.html'), - - dirSource: path.resolve(__dirname, '../docs'), - dirDest: path.resolve(__dirname, '../dist'), - dirTemp: path.resolve(__dirname, '../.temp'), - - // Theme - theme: '@vuepress/default', - themeConfig: {}, - - plugins: [[path.resolve(__dirname, 'test-plugin.js')]], - - shouldPrefetch: null, - shouldPreload: null, - }) diff --git a/playground/src/build.ts b/playground/src/build.ts deleted file mode 100644 index f56084ca49..0000000000 --- a/playground/src/build.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createVuepressApp } from './app' - -const main = async (): Promise => { - process.env.NODE_ENV = 'production' - - const app = createVuepressApp() - - await app.build() -} - -main() diff --git a/playground/src/dev.ts b/playground/src/dev.ts deleted file mode 100644 index cae4dec8be..0000000000 --- a/playground/src/dev.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { WebpackDevServer } from '@vuepress/bundler-webpack' -import { createVuepressApp } from './app' - -const main = async (): Promise => { - process.env.NODE_ENV = 'development' - - const app = createVuepressApp() - - await app.dev() -} - -main() diff --git a/playground/tsconfig.json b/playground/tsconfig.json index 70e0006f78..52d86122ec 100644 --- a/playground/tsconfig.json +++ b/playground/tsconfig.json @@ -5,5 +5,5 @@ "declaration": false, "declarationMap": false }, - "include": ["./src", "./docs/.vuepress/**/*.ts"] + "include": ["./docs/.vuepress/**/*.ts"] } From f5f2b79f766d078379c762161aaf5e4b2947c1d3 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 17 Oct 2020 00:59:10 +0800 Subject: [PATCH 0029/1014] fix(bundler-webpack): use loader options type --- .../bundler-webpack/src/config/handleModuleStyles.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts b/packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts index 7da648233c..d1fb359bbc 100644 --- a/packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts +++ b/packages/@vuepress/bundler-webpack/src/config/handleModuleStyles.ts @@ -1,7 +1,7 @@ import type * as Config from 'webpack-chain' import type { App } from '@vuepress/core' import * as MiniCSSExtractPlugin from 'mini-css-extract-plugin' -import type { BundlerWebpackOptions } from '../types' +import type { BundlerWebpackOptions, LoaderOptions } from '../types' type StyleRule = Config.Rule> @@ -49,7 +49,7 @@ export const handleModuleStyles = ({ rule: StyleRule cssModules: boolean loaderName?: string - loaderOptions?: Record + loaderOptions?: LoaderOptions }): void => { if (!isServer) { if (isBuild) { @@ -99,7 +99,7 @@ export const handleModuleStyles = ({ lang: string test: RegExp loaderName?: string - loaderOptions?: Record + loaderOptions?: LoaderOptions }): void => { const { modulesRule, normalRule } = createStyleRules({ lang, @@ -142,10 +142,7 @@ export const handleModuleStyles = ({ lang: 'sass', test: /\.sass$/, loaderName: 'sass-loader', - loaderOptions: { - indentedSyntax: true, - ...options.sass, - }, + loaderOptions: options.sass, }) handleStyle({ From 6681b0b41f7b342add635672989250f98cccf73d Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 17 Oct 2020 01:00:26 +0800 Subject: [PATCH 0030/1014] fix(cli): remove extra app init and prepare --- packages/@vuepress/cli/src/commands/build.ts | 6 ------ packages/@vuepress/cli/src/commands/dev.ts | 6 ------ 2 files changed, 12 deletions(-) diff --git a/packages/@vuepress/cli/src/commands/build.ts b/packages/@vuepress/cli/src/commands/build.ts index 3c995146cc..85901e8473 100644 --- a/packages/@vuepress/cli/src/commands/build.ts +++ b/packages/@vuepress/cli/src/commands/build.ts @@ -60,12 +60,6 @@ export const build = async ( ...appConfig, }) - // initialize - await app.init() - - // prepare - await app.prepare() - // build await bundler.build(app) } diff --git a/packages/@vuepress/cli/src/commands/dev.ts b/packages/@vuepress/cli/src/commands/dev.ts index bd0f8c1508..81826f1eac 100644 --- a/packages/@vuepress/cli/src/commands/dev.ts +++ b/packages/@vuepress/cli/src/commands/dev.ts @@ -70,12 +70,6 @@ export const dev = async ( ...appConfig, }) - // initialize - await app.init() - - // prepare - await app.prepare() - // TODO: watch & reload await bundler.dev(app) } From 0b57c7e566d857d8d2e3f0e85eb60d7bdc6790d0 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 17 Oct 2020 01:01:59 +0800 Subject: [PATCH 0031/1014] build: disable composite and declarationMap options --- packages/@vuepress/theme-default/tsconfig.json | 4 ++++ packages/docs/tsconfig.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/packages/@vuepress/theme-default/tsconfig.json b/packages/@vuepress/theme-default/tsconfig.json index 0cb1b2b03d..8a311b6110 100644 --- a/packages/@vuepress/theme-default/tsconfig.json +++ b/packages/@vuepress/theme-default/tsconfig.json @@ -1,4 +1,8 @@ { "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": false, + "declarationMap": false + }, "include": ["./layouts", "./src", "./__tests__"] } diff --git a/packages/docs/tsconfig.json b/packages/docs/tsconfig.json index ce897777d0..ee8dd62b24 100644 --- a/packages/docs/tsconfig.json +++ b/packages/docs/tsconfig.json @@ -1,4 +1,8 @@ { "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": false, + "declarationMap": false + }, "include": ["./src"] } From e01cb12c195a198b57ec149070110706ba913cd4 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 17 Oct 2020 01:19:51 +0800 Subject: [PATCH 0032/1014] fix(cli): disable noInfo option --- .../@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts b/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts index baa41f9e87..d8ef96c69c 100644 --- a/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts +++ b/packages/@vuepress/bundler-webpack/src/dev/createDevServerConfig.ts @@ -13,7 +13,7 @@ export const createDevServerConfig = ( inline: true, compress: true, clientLogLevel: app.env.isDebug ? 'debug' : 'error', - noInfo: !app.env.isDebug, + // noInfo: !app.env.isDebug, hot: true, // quiet: true, stats: 'minimal', From 87a001586743f534e7cf505742824170738a7865 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 17 Oct 2020 01:57:58 +0800 Subject: [PATCH 0033/1014] chore(theme-default): migrating default theme --- .../{layouts => components}/Home.vue | 51 +++++++- .../theme-default/layouts/Layout.vue | 23 ++-- .../theme-default/src/clientAppEnhance.ts | 9 ++ packages/@vuepress/theme-default/src/index.ts | 2 + .../@vuepress/theme-default/styles/index.styl | 2 + .../theme-default/styles/normalize.styl | 112 ++++++++++++++++++ 6 files changed, 182 insertions(+), 17 deletions(-) rename packages/@vuepress/theme-default/{layouts => components}/Home.vue (63%) create mode 100644 packages/@vuepress/theme-default/src/clientAppEnhance.ts create mode 100644 packages/@vuepress/theme-default/styles/index.styl create mode 100644 packages/@vuepress/theme-default/styles/normalize.styl diff --git a/packages/@vuepress/theme-default/layouts/Home.vue b/packages/@vuepress/theme-default/components/Home.vue similarity index 63% rename from packages/@vuepress/theme-default/layouts/Home.vue rename to packages/@vuepress/theme-default/components/Home.vue index ec9767e3bc..362cbfaaa1 100644 --- a/packages/@vuepress/theme-default/layouts/Home.vue +++ b/packages/@vuepress/theme-default/components/Home.vue @@ -1,10 +1,53 @@ diff --git a/packages/@vuepress/theme-default/layouts/Layout.vue b/packages/@vuepress/theme-default/layouts/Layout.vue index f3d591810d..79095e862a 100644 --- a/packages/@vuepress/theme-default/layouts/Layout.vue +++ b/packages/@vuepress/theme-default/layouts/Layout.vue @@ -1,30 +1,27 @@ diff --git a/packages/@vuepress/theme-default/layouts/Layout.vue b/packages/@vuepress/theme-default/layouts/Layout.vue index 9d5f8a3cdb..a2d7acf18c 100644 --- a/packages/@vuepress/theme-default/layouts/Layout.vue +++ b/packages/@vuepress/theme-default/layouts/Layout.vue @@ -1,6 +1,6 @@ diff --git a/packages/@vuepress/theme-default/src/composables/index.ts b/packages/@vuepress/theme-default/src/composables/index.ts index 80c7ec3bbf..dc0d7b6809 100644 --- a/packages/@vuepress/theme-default/src/composables/index.ts +++ b/packages/@vuepress/theme-default/src/composables/index.ts @@ -1,3 +1,4 @@ export * from './useNavLink' export * from './useResolveRouteWithRedirect' export * from './useSidebarItems' +export * from './useThemeData' diff --git a/packages/@vuepress/theme-default/src/composables/useSidebarItems.ts b/packages/@vuepress/theme-default/src/composables/useSidebarItems.ts index a5e5a32fb2..41b69c5825 100644 --- a/packages/@vuepress/theme-default/src/composables/useSidebarItems.ts +++ b/packages/@vuepress/theme-default/src/composables/useSidebarItems.ts @@ -1,11 +1,7 @@ -import { computed, inject } from 'vue' +import { inject } from 'vue' import type { ComputedRef, InjectionKey } from 'vue' import { useRoute } from 'vue-router' -import { - usePageData, - usePageFrontmatter, - useThemeLocaleData, -} from '@vuepress/client' +import { usePageData } from '@vuepress/client' import type { PageHeader } from '@vuepress/client' import { isArray, @@ -14,7 +10,7 @@ import { resolveLocalePath, } from '@vuepress/shared' import type { - DefaultThemeOptions, + DefaultThemeData, DefaultThemePageFrontmatter, SidebarConfigArray, SidebarConfigObject, @@ -44,35 +40,31 @@ export const useSidebarItems = (): SidebarItemsRef => { * * It should only be resolved and provided once */ -export const resolveSidebarItems = (): SidebarItemsRef => { - const frontmatter = usePageFrontmatter() - const themeLocale = useThemeLocaleData() - +export const resolveSidebarItems = ( + frontmatter: DefaultThemePageFrontmatter, + themeLocale: DefaultThemeData +): ResolvedSidebarItem[] => { // get sidebar config from frontmatter > themeConfig - const sidebarConfig = computed( - () => frontmatter.value.sidebar ?? themeLocale.value.sidebar ?? 'auto' - ) + const sidebarConfig = frontmatter.sidebar ?? themeLocale.sidebar ?? 'auto' // resolve sidebar items according to the config - return computed(() => { - if (frontmatter.value.home === true || sidebarConfig.value === false) { - return [] - } + if (frontmatter.home === true || sidebarConfig === false) { + return [] + } - if (sidebarConfig.value === 'auto') { - return resolveAutoSidebarItems() - } + if (sidebarConfig === 'auto') { + return resolveAutoSidebarItems() + } - if (isArray(sidebarConfig.value)) { - return resolveArraySidebarItems(sidebarConfig.value) - } + if (isArray(sidebarConfig)) { + return resolveArraySidebarItems(sidebarConfig) + } - if (isPlainObject(sidebarConfig.value)) { - return resolveMultiSidebarItems(sidebarConfig.value) - } + if (isPlainObject(sidebarConfig)) { + return resolveMultiSidebarItems(sidebarConfig) + } - return [] - }) + return [] } /** diff --git a/packages/@vuepress/theme-default/src/composables/useThemeData.ts b/packages/@vuepress/theme-default/src/composables/useThemeData.ts new file mode 100644 index 0000000000..6775f324dd --- /dev/null +++ b/packages/@vuepress/theme-default/src/composables/useThemeData.ts @@ -0,0 +1,8 @@ +import { + useThemeData as _useThemeData, + useThemeLocaleData as _useThemeLocaleData, +} from '@vuepress/plugin-theme-data/lib/composables' +import type { DefaultThemeData } from '../types' + +export const useThemeData = () => _useThemeData() +export const useThemeLocaleData = () => _useThemeLocaleData() diff --git a/packages/@vuepress/theme-default/src/index.ts b/packages/@vuepress/theme-default/src/index.ts index 6637d20d6b..112119a7a4 100644 --- a/packages/@vuepress/theme-default/src/index.ts +++ b/packages/@vuepress/theme-default/src/index.ts @@ -1,7 +1,7 @@ import type { Theme } from '@vuepress/core' import { path } from '@vuepress/utils' import { - assignDefaultOptions, + assignDefaultLocaleOptions, resolveActiveHeaderLinksPluginOptions, resolveContainerPluginOptions, resolveContainerPluginOptionsForDetails, @@ -16,8 +16,11 @@ import type { DefaultThemeOptions } from './types' export * from './node' export * from './types' -export const defaultTheme: Theme = (options, app) => { - assignDefaultOptions(options) +export const defaultTheme: Theme = ({ + themePlugins = {}, + ...localeOptions +}) => { + assignDefaultLocaleOptions(localeOptions) return { name: '@vuepress/theme-default', @@ -34,28 +37,38 @@ export const defaultTheme: Theme = (options, app) => { plugins: [ [ '@vuepress/active-header-links', - resolveActiveHeaderLinksPluginOptions(options), + resolveActiveHeaderLinksPluginOptions(themePlugins), ], - ['@vuepress/back-to-top', options.themePlugins?.backToTop !== false], - ['@vuepress/container', resolveContainerPluginOptions(options, 'tip')], + ['@vuepress/back-to-top', themePlugins.backToTop !== false], [ '@vuepress/container', - resolveContainerPluginOptions(options, 'warning'), + resolveContainerPluginOptions(themePlugins, localeOptions, 'tip'), ], - ['@vuepress/container', resolveContainerPluginOptions(options, 'danger')], - ['@vuepress/container', resolveContainerPluginOptionsForDetails(options)], [ '@vuepress/container', - resolveContainerPluginOptionsForCodeGroup(options), + resolveContainerPluginOptions(themePlugins, localeOptions, 'warning'), ], [ '@vuepress/container', - resolveContainerPluginOptionsForCodeGroupItem(options), + resolveContainerPluginOptions(themePlugins, localeOptions, 'danger'), ], - ['@vuepress/git', resolveGitPluginOptions(options)], - ['@vuepress/medium-zoom', resolveMediumZoomPluginOptions(options)], - ['@vuepress/nprogress', options.themePlugins?.nprogress !== false], - ['@vuepress/palette-stylus', resolvePaletteStylusPluginOptions(options)], + [ + '@vuepress/container', + resolveContainerPluginOptionsForDetails(themePlugins), + ], + [ + '@vuepress/container', + resolveContainerPluginOptionsForCodeGroup(themePlugins), + ], + [ + '@vuepress/container', + resolveContainerPluginOptionsForCodeGroupItem(themePlugins), + ], + ['@vuepress/git', resolveGitPluginOptions(themePlugins, localeOptions)], + ['@vuepress/medium-zoom', resolveMediumZoomPluginOptions(themePlugins)], + ['@vuepress/nprogress', themePlugins.nprogress !== false], + ['@vuepress/palette-stylus', resolvePaletteStylusPluginOptions()], + ['@vuepress/theme-data', { themeData: localeOptions }], ], } } diff --git a/packages/@vuepress/theme-default/src/layouts/404.vue b/packages/@vuepress/theme-default/src/layouts/404.vue index 97ed497fa7..1066e78c6c 100644 --- a/packages/@vuepress/theme-default/src/layouts/404.vue +++ b/packages/@vuepress/theme-default/src/layouts/404.vue @@ -12,15 +12,15 @@ ` diff --git a/packages/@vuepress/bundler-vite/src/build/renderPageStyles.ts b/packages/@vuepress/bundler-vite/src/build/renderPageStyles.ts new file mode 100644 index 0000000000..e255a98ce5 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/build/renderPageStyles.ts @@ -0,0 +1,14 @@ +import type { OutputAsset } from 'rollup' +import type { App } from '@vuepress/core' + +/** + * Render styles of current page + */ +export const renderPageStyles = ({ + app, + outputCssAsset, +}: { + app: App + outputCssAsset: OutputAsset +}): string => + `` diff --git a/packages/@vuepress/bundler-vite/src/build/resolvePageChunkFiles.ts b/packages/@vuepress/bundler-vite/src/build/resolvePageChunkFiles.ts new file mode 100644 index 0000000000..ee00ec9df5 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/build/resolvePageChunkFiles.ts @@ -0,0 +1,22 @@ +import type { OutputChunk, RollupOutput } from 'rollup' +import type { Page } from '@vuepress/core' + +export const resolvePageChunkFiles = ({ + page, + output, +}: { + page: Page + output: RollupOutput['output'] +}): string[] => + output + .filter( + (item): item is OutputChunk => + item.type === 'chunk' && + (item.facadeModuleId === page.componentFilePath || + item.facadeModuleId === page.dataFilePath) + ) + .flatMap(({ fileName, imports, dynamicImports }) => [ + fileName, + ...imports, + ...dynamicImports, + ]) diff --git a/packages/@vuepress/bundler-vite/src/build/resolveViteConfig.ts b/packages/@vuepress/bundler-vite/src/build/resolveViteConfig.ts new file mode 100644 index 0000000000..7bbd63e70f --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/build/resolveViteConfig.ts @@ -0,0 +1,34 @@ +import { mergeConfig, UserConfig } from 'vite' +import type { App } from '@vuepress/core' +import { createPlugin } from '../plugin' +import type { ViteBundlerOptions } from '../types' + +export const resolveViteConfig = ({ + app, + options, + isServer, +}: { + app: App + options: ViteBundlerOptions + isServer: boolean +}): UserConfig => + mergeConfig( + { + logLevel: app.env.isDebug ? 'info' : 'warn', + build: { + ssr: isServer, + outDir: isServer ? app.dir.dest('.server') : app.dir.dest(), + cssCodeSplit: false, + polyfillDynamicImport: false, + rollupOptions: { + input: isServer + ? app.dir.client('lib/server.js') + : app.dir.client('lib/client.js'), + preserveEntrySignatures: 'allow-extension', + }, + minify: isServer ? false : !app.env.isDebug, + }, + plugins: [createPlugin({ app, options, isServer, isBuild: true })], + }, + options.viteOptions ?? {} + ) diff --git a/packages/@vuepress/bundler-vite/src/createBundler.ts b/packages/@vuepress/bundler-vite/src/createBundler.ts new file mode 100644 index 0000000000..e9e1282ad7 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/createBundler.ts @@ -0,0 +1,11 @@ +import type { CreateBundlerFunction } from '@vuepress/core' +import { createBuild } from './build' +import { createDev } from './dev' +import type { ViteBundlerOptions } from './types' + +export const createBundler: CreateBundlerFunction = ( + options +) => ({ + dev: createDev(options), + build: createBuild(options), +}) diff --git a/packages/@vuepress/bundler-vite/src/dev/createDev.ts b/packages/@vuepress/bundler-vite/src/dev/createDev.ts new file mode 100644 index 0000000000..511ccd0fed --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/dev/createDev.ts @@ -0,0 +1,33 @@ +import { createServer, mergeConfig } from 'vite' +import type { App, Bundler } from '@vuepress/core' +import { createPlugin } from '../plugin' +import type { ViteBundlerOptions } from '../types' + +export const createDev = ( + options: ViteBundlerOptions +): Bundler['dev'] => async (app: App) => { + const server = await createServer( + mergeConfig( + { + server: { + host: app.options.host, + port: app.options.port, + open: app.options.open, + }, + plugins: [ + createPlugin({ + app, + options, + isServer: false, + isBuild: false, + }), + ], + }, + options.viteOptions ?? {} + ) + ) + + await server.listen() + + return server.close.bind(server) +} diff --git a/packages/@vuepress/bundler-vite/src/dev/index.ts b/packages/@vuepress/bundler-vite/src/dev/index.ts new file mode 100644 index 0000000000..8a18dc6edc --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/dev/index.ts @@ -0,0 +1 @@ +export * from './createDev' diff --git a/packages/@vuepress/bundler-vite/src/index.ts b/packages/@vuepress/bundler-vite/src/index.ts new file mode 100644 index 0000000000..d82ea08d06 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/index.ts @@ -0,0 +1,2 @@ +export * from './createBundler' +export * from './types' diff --git a/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts new file mode 100644 index 0000000000..dec19774e0 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts @@ -0,0 +1,59 @@ +import type { Plugin } from 'vite' +import createVuePlugin from '@vitejs/plugin-vue' +import type { App } from '@vuepress/core' +import { fs } from '@vuepress/utils' +import type { ViteBundlerOptions } from '../types' +import { resolveAlias } from './resolveAlias' +import { resolveDefine } from './resolveDefine' + +export const createPlugin = ({ + app, + options, + isServer, + isBuild, +}: { + app: App + options: ViteBundlerOptions + isServer: boolean + isBuild: boolean +}): Plugin[] => [ + createVuePlugin(options.vuePluginOptions), + { + name: 'vuepress', + + config: () => ({ + root: app.dir.source(), + base: app.options.base, + mode: isBuild ? 'production' : 'development', + publicDir: app.dir.public(), + define: resolveDefine({ app, isServer }), + resolve: { + alias: resolveAlias({ app }), + }, + }), + + configureServer(server) { + return () => { + // inject client entry-point to dev template + server.middlewares.use((req, res, next) => { + if (req.url!.endsWith('.html')) { + res.statusCode = 200 + const template = fs.readFileSync(app.options.templateDev).toString() + const clientEntry = app.dir.client('lib/client.js') + res.end( + template.replace( + /<\/body>/, + `${[ + ``, + ``, + ].join('')}` + ) + ) + return + } + next() + }) + } + }, + }, +] diff --git a/packages/@vuepress/bundler-vite/src/plugin/index.ts b/packages/@vuepress/bundler-vite/src/plugin/index.ts new file mode 100644 index 0000000000..87030fa0a8 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/plugin/index.ts @@ -0,0 +1,3 @@ +export * from './createPlugin' +export * from './resolveAlias' +export * from './resolveDefine' diff --git a/packages/@vuepress/bundler-vite/src/plugin/resolveAlias.ts b/packages/@vuepress/bundler-vite/src/plugin/resolveAlias.ts new file mode 100644 index 0000000000..25221129b2 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/plugin/resolveAlias.ts @@ -0,0 +1,36 @@ +import type { AliasOptions } from 'vite' +import type { App } from '@vuepress/core' + +export const resolveAlias = ({ app }: { app: App }): AliasOptions => { + const alias: AliasOptions = { + '@internal': app.dir.temp('internal'), + '@temp': app.dir.temp(), + '@source': app.dir.source(), + } + + // plugin hook: alias + const aliasResult = app.pluginApi.hooks.alias.processSync(app) + + aliasResult.forEach((aliasObject) => + Object.entries(aliasObject).forEach(([key, value]) => { + alias[key] = value + }) + ) + + return [ + ...Object.keys(alias).map((p) => ({ + find: p, + replacement: alias[p], + })), + { + find: /^vue$/, + replacement: require.resolve( + '@vue/runtime-dom/dist/runtime-dom.esm-bundler.js' + ), + }, + { + find: /^vue-router$/, + replacement: require.resolve('vue-router/dist/vue-router.esm-bundler.js'), + }, + ] +} diff --git a/packages/@vuepress/bundler-vite/src/plugin/resolveDefine.ts b/packages/@vuepress/bundler-vite/src/plugin/resolveDefine.ts new file mode 100644 index 0000000000..585119f493 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/plugin/resolveDefine.ts @@ -0,0 +1,31 @@ +import type { UserConfig } from 'vite' +import type { App } from '@vuepress/core' + +export const resolveDefine = ({ + app, + isServer, +}: { + app: App + isServer: boolean +}): UserConfig['define'] => { + const define: UserConfig['define'] = { + __VERSION__: JSON.stringify(app.version), + __DEV__: JSON.stringify(app.env.isDev), + __SSR__: JSON.stringify(isServer), + // @see http://link.vuejs.org/feature-flags + // enable options API by default + __VUE_OPTIONS_API__: JSON.stringify(true), + __VUE_PROD_DEVTOOLS__: JSON.stringify(false), + } + + // plugin hook: define + const defineResult = app.pluginApi.hooks.define.processSync(app) + + defineResult.forEach((defineObject) => + Object.entries(defineObject).forEach(([key, value]) => { + define[key] = JSON.stringify(value) + }) + ) + + return define +} diff --git a/packages/@vuepress/bundler-vite/src/types.ts b/packages/@vuepress/bundler-vite/src/types.ts new file mode 100644 index 0000000000..2248a0d96c --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/types.ts @@ -0,0 +1,10 @@ +import type { InlineConfig } from 'vite' +import { Options as VuePluginOptions } from '@vitejs/plugin-vue' + +/** + * Options for bundler-vite + */ +export interface ViteBundlerOptions { + viteOptions?: InlineConfig + vuePluginOptions?: VuePluginOptions +} diff --git a/packages/@vuepress/bundler-vite/tsconfig.build.json b/packages/@vuepress/bundler-vite/tsconfig.build.json new file mode 100644 index 0000000000..51281ac138 --- /dev/null +++ b/packages/@vuepress/bundler-vite/tsconfig.build.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [ + { "path": "../client/tsconfig.build.json" }, + { "path": "../core/tsconfig.build.json" }, + { "path": "../shared/tsconfig.build.json" }, + { "path": "../utils/tsconfig.build.json" } + ] +} diff --git a/packages/@vuepress/bundler-vite/tsconfig.json b/packages/@vuepress/bundler-vite/tsconfig.json new file mode 100644 index 0000000000..3b79150329 --- /dev/null +++ b/packages/@vuepress/bundler-vite/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../../tsconfig.base.json", + "include": ["./src"] +} diff --git a/tsconfig.json b/tsconfig.json index a52edb9f0c..bdbf254d9a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "./tsconfig.base.json", "references": [ + { "path": "./packages/@vuepress/bundler-vite/tsconfig.build.json" }, { "path": "./packages/@vuepress/bundler-webpack/tsconfig.build.json" }, { "path": "./packages/@vuepress/cli/tsconfig.build.json" }, { "path": "./packages/@vuepress/client/tsconfig.build.json" }, diff --git a/yarn.lock b/yarn.lock index f9625f34d5..67d222a674 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2691,6 +2691,11 @@ "@typescript-eslint/types" "4.16.1" eslint-visitor-keys "^2.0.0" +"@vitejs/plugin-vue@^1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.1.5.tgz#fa1e8e5e049c35e213672e33f73fe81706ad5dbe" + integrity sha512-4DV8VPYo8/OR1YsnK39QN16xhKENt2XvcmJxqfRtyz75kvbjBYh1zTSHLp7XsXqv4R2I+fOZlbEBvxosMYLcPA== + "@vue/compiler-core@3.0.7": version "3.0.7" resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.7.tgz#421782a4c67cc3f2b7c30457ef446d74f8524f74" @@ -4882,7 +4887,7 @@ esbuild@^0.8.42: resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.43.tgz#19d79f8c6d1cc6dadd50942057a5aff906a1ecf2" integrity sha512-ZVE2CpootS4jtnfV0bbtJdgRsHEXcMP0P7ZXGfTmNzzhBr2e5ag7Vp3ry0jmw8zduJz4iHzxg4m5jtPxWERz1w== -esbuild@^0.8.54: +esbuild@^0.8.52, esbuild@^0.8.54: version "0.8.54" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.54.tgz#2f32ff80e95c69a0f25b799d76a27c05e2857cdf" integrity sha512-DJH38OiTgXJxFb/EhHrCrY8eGmtdkTtWymHpN9IYN9AF+4jykT0dQArr7wzFejpVbaB0TMIq2+vfNRWr3LXpvw== @@ -5607,11 +5612,6 @@ fsevents@^2.1.2, fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -6431,7 +6431,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.1.0, is-core-module@^2.2.0: +is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== @@ -9082,7 +9082,7 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.1.10, postcss@^8.2.6: +postcss@^8.1.10, postcss@^8.2.1, postcss@^8.2.6: version "8.2.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== @@ -9706,7 +9706,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -9714,14 +9714,6 @@ resolve@^1.1.6: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -9769,12 +9761,12 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup@^2.25.0: - version "2.38.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.38.0.tgz#57942d5a10826cb12ed1f19c261f774efa502d2d" - integrity sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw== +rollup@^2.25.0, rollup@^2.38.5, rollup@^2.41.2: + version "2.41.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.41.2.tgz#b7db5cb7c21c2d524e8b26ef39c7e9808a290c7e" + integrity sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg== optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.1" rsvp@^4.8.4: version "4.8.5" @@ -11263,6 +11255,18 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vite@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.0.5.tgz#ac46857a3fa8686d077921e61bd48a986931df1d" + integrity sha512-QTgEDbq1WsTtr6j+++ewjhBFEk6c8v0xz4fb/OWJQKNYU8ZZtphOshwOqAlnarSstPBtWCBR0tsugXx6ajfoUg== + dependencies: + esbuild "^0.8.52" + postcss "^8.2.1" + resolve "^1.19.0" + rollup "^2.38.5" + optionalDependencies: + fsevents "~2.3.1" + vue-eslint-parser@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz#01ea1a2932f581ff244336565d712801f8f72561" From a7c7e3a99052f08af1c31f2920a5c1c8781848c2 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 12:54:24 +0800 Subject: [PATCH 0699/1014] refactor(plugin-docsearch): import docsearch directly --- .../@vuepress/plugin-docsearch/package.json | 4 +- .../src/components/Docsearch.ts | 30 +++------- yarn.lock | 60 +++++++++---------- 3 files changed, 40 insertions(+), 54 deletions(-) diff --git a/packages/@vuepress/plugin-docsearch/package.json b/packages/@vuepress/plugin-docsearch/package.json index 73e8da2b66..6eb0a16f7a 100644 --- a/packages/@vuepress/plugin-docsearch/package.json +++ b/packages/@vuepress/plugin-docsearch/package.json @@ -30,8 +30,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@docsearch/css": "3.0.0-alpha.31", - "@docsearch/js": "3.0.0-alpha.31", + "@docsearch/css": "3.0.0-alpha.34", + "@docsearch/js": "3.0.0-alpha.34", "@types/react": "^17.0.0", "@vuepress/client": "2.0.0-alpha.25", "@vuepress/core": "2.0.0-alpha.25", diff --git a/packages/@vuepress/plugin-docsearch/src/components/Docsearch.ts b/packages/@vuepress/plugin-docsearch/src/components/Docsearch.ts index 61010b0231..9b5cee3c41 100644 --- a/packages/@vuepress/plugin-docsearch/src/components/Docsearch.ts +++ b/packages/@vuepress/plugin-docsearch/src/components/Docsearch.ts @@ -1,24 +1,12 @@ import { defineComponent, getCurrentInstance, h, onMounted, watch } from 'vue' import type { PropType } from 'vue' +// @ts-ignore: docsearch type issue +import docsearch from '@docsearch/js' import type { DocSearchProps } from '@docsearch/react' -export type DocsearchProps = DocSearchProps - -type DocsearchFuncProps = DocSearchProps & { - container: string -} +import '@docsearch/css' -type DocsearchFunc = (props: DocsearchFuncProps) => void - -const loadDocsearch = async (): Promise => { - const [docsearch] = await Promise.all([ - // @ts-ignore: docsearch types issue - import('@docsearch/js'), - // @ts-ignore - import('@docsearch/css'), - ]) - return docsearch.default -} +export type DocsearchProps = DocSearchProps export const Docsearch = defineComponent({ name: 'Docsearch', @@ -34,12 +22,10 @@ export const Docsearch = defineComponent({ const vm = getCurrentInstance() const initialize = (options: DocsearchProps): void => { - loadDocsearch().then((docsearch) => { - docsearch({ - ...options, - // the container selector - container: '#docsearch', - }) + docsearch({ + ...options, + // the container selector + container: '#docsearch', }) } diff --git a/yarn.lock b/yarn.lock index 67d222a674..5af12e4e55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,24 +2,24 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@^1.0.0-alpha.35": - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.39.tgz#46d4c612243df75da9f2c57edd6f6d7b08633f13" - integrity sha512-Iaer2aItGbNlJr5/lI65zR0yfFCEVedBwm8A3MTLB6Gj/A5sXscL+X4mP04hQemUMqZ9c2cLryVN1UI0h09t3w== +"@algolia/autocomplete-core@1.0.0-alpha.44": + version "1.0.0-alpha.44" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz#e626dba45f5f3950d6beb0ab055395ef0f7e8bb2" + integrity sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA== dependencies: - "@algolia/autocomplete-shared" "1.0.0-alpha.39" + "@algolia/autocomplete-shared" "1.0.0-alpha.44" -"@algolia/autocomplete-preset-algolia@^1.0.0-alpha.35": - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.39.tgz#efbd238cf8fba4ed178344cca70b84addb0f0209" - integrity sha512-0E9dvwk1ibGpQk7Kq1M8bqcxZ5ToXowAxcICLpy6SwQoWAV4P5lygkeU3gkkEwqZCzCdRbB+KbahUP62ie26Jw== +"@algolia/autocomplete-preset-algolia@1.0.0-alpha.44": + version "1.0.0-alpha.44" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz#0ea0b255d0be10fbe262e281472dd6e4619b62ba" + integrity sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng== dependencies: - "@algolia/autocomplete-shared" "1.0.0-alpha.39" + "@algolia/autocomplete-shared" "1.0.0-alpha.44" -"@algolia/autocomplete-shared@1.0.0-alpha.39": - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.39.tgz#5f661a09150cb5a049d4697eb57fffb4adbceb63" - integrity sha512-t0tOPVBjWicKWtysQZbblXmFDRToTgXXtjSeiDCeAfD9lCN7jx52F8kkT1ZnzhmAHcSpcaLagjTLttcyJwJjwQ== +"@algolia/autocomplete-shared@1.0.0-alpha.44": + version "1.0.0-alpha.44" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz#db13902ad1667e455711b77d08cae1a0feafaa48" + integrity sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg== "@algolia/cache-browser-local-storage@4.8.4": version "4.8.4" @@ -1102,27 +1102,27 @@ dependencies: chalk "^4.0.0" -"@docsearch/css@3.0.0-alpha.31": - version "3.0.0-alpha.31" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.0.0-alpha.31.tgz#5fb8595201b3f120e5bc4ae4d536068b1a5ca695" - integrity sha512-pjNLRycNWiU1LKalkyy1koz/QjTSgUT2Oxl84zH99CAqu44Ow0rsPPda16gkq83SknnHlM2lM3vpruUg2qg+3w== +"@docsearch/css@3.0.0-alpha.34": + version "3.0.0-alpha.34" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.0.0-alpha.34.tgz#5d5c39955956e237884a9997eb29e28c8adc99fa" + integrity sha512-ZUbmxbN9gQp3vuBo9GDnm+ywB9aZQSh0ogjt6865PmeRUvyCCvgSwyZktliLPvAztoGX56qewQjxNcso3RrSow== -"@docsearch/js@3.0.0-alpha.31": - version "3.0.0-alpha.31" - resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.0.0-alpha.31.tgz#a180cb0b790682f41ac2a8e352e84bdd5a6a2807" - integrity sha512-XYBzBOCqRabGU0JnD/d08ukbGVJq3OCNdrTm8o8l0uMULoiyZHiTWq0tS1XS7cW9XewhRAorPR1aSxKvEG4RFA== +"@docsearch/js@3.0.0-alpha.34": + version "3.0.0-alpha.34" + resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.0.0-alpha.34.tgz#5c83a21b6f04bfb11fbf1d2a5175e6aa1365230f" + integrity sha512-6tQV/8FsDGo1tnubur0Rgh4dS1F5XU94WT0xfm628aSoQPizS7Q9ET+YJHzy40sIHlb4jI7v+bZwzo/D5fw/NA== dependencies: - "@docsearch/react" "3.0.0-alpha.31" + "@docsearch/react" "3.0.0-alpha.34" preact "^10.0.0" -"@docsearch/react@3.0.0-alpha.31": - version "3.0.0-alpha.31" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.0.0-alpha.31.tgz#3389cf4c7695e3a87a14b86e462ae08a8e08b84e" - integrity sha512-rgWTJqbG9CdX2Z0kfhoijhD2CcIHAV1j66Nc2LzDY5rYMqzqa4x1Xi+tISxZysjWwWacnlo6QL/50ogXXr6gaw== +"@docsearch/react@3.0.0-alpha.34": + version "3.0.0-alpha.34" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.0.0-alpha.34.tgz#fb7e31e31593c26dadb607b9451d274b84b0b05a" + integrity sha512-BBVxu2qY1fyhxJfrGZvknFL6j1fJ3wLZvf2DsmVfmihu/RhYYnf8/C1gbc7RWX2fSoSzbQCcSuNbn4RvjuUJ+A== dependencies: - "@algolia/autocomplete-core" "^1.0.0-alpha.35" - "@algolia/autocomplete-preset-algolia" "^1.0.0-alpha.35" - "@docsearch/css" "3.0.0-alpha.31" + "@algolia/autocomplete-core" "1.0.0-alpha.44" + "@algolia/autocomplete-preset-algolia" "1.0.0-alpha.44" + "@docsearch/css" "3.0.0-alpha.34" algoliasearch "^4.0.0" "@eslint/eslintrc@^0.4.0": From 15205172c3b56fc8a879bba040f4ecc815d2c924 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 16:12:02 +0800 Subject: [PATCH 0700/1014] feat(client): add defineClientAppEnhance and defineClientAppSetup utils --- docs/reference/client-api.md | 46 ++++++++----------- docs/zh/reference/client-api.md | 46 ++++++++----------- .../src/utils/defineClientAppEnhance.ts | 5 ++ .../client/src/utils/defineClientAppSetup.ts | 5 ++ packages/@vuepress/client/src/utils/index.ts | 2 + 5 files changed, 50 insertions(+), 54 deletions(-) create mode 100644 packages/@vuepress/client/src/utils/defineClientAppEnhance.ts create mode 100644 packages/@vuepress/client/src/utils/defineClientAppSetup.ts diff --git a/docs/reference/client-api.md b/docs/reference/client-api.md index 7c29d731d4..f906704ea8 100644 --- a/docs/reference/client-api.md +++ b/docs/reference/client-api.md @@ -66,55 +66,47 @@ Client API is provided by [@vuepress/client](https://www.npmjs.com/package/@vuep ## Utils -### withBase - -- Details: - - Prefix URL with site [base](./config.md#base). - -- Also see: - - [Guide > Assets > Base Helper](../guide/assets.md#base-helper) - -## Types - -In addition to the type helpers mentioned below, we also provide type definitions related to the above composition API, such as `SiteData` and `PageData`. - -### ClientAppSetup +### defineClientAppSetup - Details: - Type helper for [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles). + Helper for creating [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles). - Example: Create `clientAppSetup.ts` file: ```ts -import type { ClientAppSetup } from '@vuepress/client' +import { defineClientAppSetup } from '@vuepress/client' -const clientAppSetup: ClientAppSetup = () => { +export default defineClientAppSetup(() => { // ... -} - -export default clientAppSetup +}) ``` -### ClientAppEnhance +### defineClientAppEnhance - Details: - Type helper for [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles). + Helper for creating [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles). - Example: Create `clientAppEnhance.ts` file: ```ts -import type { ClientAppEnhance } from '@vuepress/client' +import { defineClientAppEnhance } from '@vuepress/client' -const clientAppEnhance: ClientAppEnhance = ({ app, router, siteData }) => { +export default defineClientAppEnhance(({ app, router, siteData }) => { // ... -} - -export default clientAppEnhance +}) ``` + +### withBase + +- Details: + + Prefix URL with site [base](./config.md#base). + +- Also see: + - [Guide > Assets > Base Helper](../guide/assets.md#base-helper) diff --git a/docs/zh/reference/client-api.md b/docs/zh/reference/client-api.md index cc469ed5ab..2711c48476 100644 --- a/docs/zh/reference/client-api.md +++ b/docs/zh/reference/client-api.md @@ -66,55 +66,47 @@ ## 工具函数 -### withBase - -- 详情: - - 在 URL 前添加站点 [base](./config.md#base) 前缀。 - -- 参考: - - [指南 > 静态资源 > Base Helper](../guide/assets.md#base-helper) - -## 类型 - -除了下列提到的类型 Helper 以外,我们同样提供了和上述 Composition API 相关的类型定义,如 `SiteData`, `PageData` 等。 - -### ClientAppSetup +### defineClientAppSetup - 详情: - 为 [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles) 提供的类型 Helper 。 + 帮助你创建 [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles) 的工具函数。 - 示例: 创建 `clientAppSetup.ts` 文件: ```ts -import type { ClientAppSetup } from '@vuepress/client' +import { defineClientAppSetup } from '@vuepress/client' -const clientAppSetup: ClientAppSetup = () => { +export default defineClientAppSetup(() => { // ... -} - -export default clientAppSetup +}) ``` -### ClientAppEnhance +### defineClientAppEnhance - 详情: - 为 [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles) 提供的类型 Helper 。 + 帮助你创建 [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles) 的工具函数。 - 示例: 创建 `clientAppEnhance.ts` 文件: ```ts -import type { ClientAppEnhance } from '@vuepress/client' +import { defineClientAppEnhance } from '@vuepress/client' -const clientAppEnhance: ClientAppEnhance = ({ app, router, siteData }) => { +export default defineClientAppEnhance(({ app, router, siteData }) => { // ... -} - -export default clientAppEnhance +}) ``` + +### withBase + +- 详情: + + 在 URL 前添加站点 [base](./config.md#base) 前缀。 + +- 参考: + - [指南 > 静态资源 > Base Helper](../guide/assets.md#base-helper) diff --git a/packages/@vuepress/client/src/utils/defineClientAppEnhance.ts b/packages/@vuepress/client/src/utils/defineClientAppEnhance.ts new file mode 100644 index 0000000000..f7e3f4f414 --- /dev/null +++ b/packages/@vuepress/client/src/utils/defineClientAppEnhance.ts @@ -0,0 +1,5 @@ +import type { ClientAppEnhance } from '../types' + +export const defineClientAppEnhance = ( + clientAppEnhance: ClientAppEnhance +): ClientAppEnhance => clientAppEnhance diff --git a/packages/@vuepress/client/src/utils/defineClientAppSetup.ts b/packages/@vuepress/client/src/utils/defineClientAppSetup.ts new file mode 100644 index 0000000000..3f55f5125c --- /dev/null +++ b/packages/@vuepress/client/src/utils/defineClientAppSetup.ts @@ -0,0 +1,5 @@ +import type { ClientAppSetup } from '../types' + +export const defineClientAppSetup = ( + clientAppSetup: ClientAppSetup +): ClientAppSetup => clientAppSetup diff --git a/packages/@vuepress/client/src/utils/index.ts b/packages/@vuepress/client/src/utils/index.ts index 159880ed44..6b3db771b6 100644 --- a/packages/@vuepress/client/src/utils/index.ts +++ b/packages/@vuepress/client/src/utils/index.ts @@ -1 +1,3 @@ +export * from './defineClientAppEnhance' +export * from './defineClientAppSetup' export * from './withBase' From 682d9bd762ef24a822764c3d36aa72512cc3c53a Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 16:12:33 +0800 Subject: [PATCH 0701/1014] refactor: use client utils --- .../src/clientAppSetup.ts | 8 +++----- .../plugin-docsearch/src/clientAppEnhance.ts | 14 ++++++++------ .../src/clientAppEnhance.ts | 8 +++----- .../plugin-medium-zoom/src/clientAppEnhance.ts | 8 +++----- .../plugin-nprogress/src/clientAppSetup.ts | 8 +++----- .../@vuepress/plugin-pwa/src/clientAppSetup.ts | 9 +++------ .../plugin-theme-data/src/clientAppEnhance.ts | 9 +++------ .../theme-default/src/clientAppEnhance.ts | 8 +++----- .../@vuepress/theme-default/src/clientAppSetup.ts | 9 +++------ 9 files changed, 32 insertions(+), 49 deletions(-) diff --git a/packages/@vuepress/plugin-active-header-links/src/clientAppSetup.ts b/packages/@vuepress/plugin-active-header-links/src/clientAppSetup.ts index 0a8adca581..6e03f64dc2 100644 --- a/packages/@vuepress/plugin-active-header-links/src/clientAppSetup.ts +++ b/packages/@vuepress/plugin-active-header-links/src/clientAppSetup.ts @@ -1,4 +1,4 @@ -import type { ClientAppSetup } from '@vuepress/client' +import { defineClientAppSetup } from '@vuepress/client' import { useActiveHeaderLinks } from './composables' declare const __SSR__: boolean @@ -7,7 +7,7 @@ declare const AHL_HEADER_ANCHOR_SELECTOR: string declare const AHL_DELAY: number declare const AHL_OFFSET: number -const clientAppSetup: ClientAppSetup = () => { +export default defineClientAppSetup(() => { if (__SSR__) return useActiveHeaderLinks({ @@ -16,6 +16,4 @@ const clientAppSetup: ClientAppSetup = () => { delay: AHL_DELAY, offset: AHL_OFFSET, }) -} - -export default clientAppSetup +}) diff --git a/packages/@vuepress/plugin-docsearch/src/clientAppEnhance.ts b/packages/@vuepress/plugin-docsearch/src/clientAppEnhance.ts index 94bc272003..1a5981276b 100644 --- a/packages/@vuepress/plugin-docsearch/src/clientAppEnhance.ts +++ b/packages/@vuepress/plugin-docsearch/src/clientAppEnhance.ts @@ -1,8 +1,12 @@ import { createElement } from 'preact' import { computed, h } from 'vue' import { useRouter } from 'vue-router' -import { usePageLang, useRouteLocale, useSiteData } from '@vuepress/client' -import type { ClientAppEnhance } from '@vuepress/client' +import { + defineClientAppEnhance, + usePageLang, + useRouteLocale, + useSiteData, +} from '@vuepress/client' import { resolveRoutePathFromUrl } from '@vuepress/shared' import type { LocaleConfig } from '@vuepress/shared' import { Docsearch } from './components/Docsearch' @@ -24,7 +28,7 @@ const isSpecialClick = (event: MouseEvent): boolean => { ) } -const clientAppEnhance: ClientAppEnhance = ({ app }) => { +export default defineClientAppEnhance(({ app }) => { // wrap the `` component with plugin options // eslint-disable-next-line vue/match-component-file-name app.component('Docsearch', { @@ -90,6 +94,4 @@ const clientAppEnhance: ClientAppEnhance = ({ app }) => { return () => h(Docsearch, { options: options.value }) }, }) -} - -export default clientAppEnhance +}) diff --git a/packages/@vuepress/plugin-google-analytics/src/clientAppEnhance.ts b/packages/@vuepress/plugin-google-analytics/src/clientAppEnhance.ts index d1684aa4f9..6c144c304c 100644 --- a/packages/@vuepress/plugin-google-analytics/src/clientAppEnhance.ts +++ b/packages/@vuepress/plugin-google-analytics/src/clientAppEnhance.ts @@ -1,4 +1,4 @@ -import type { ClientAppEnhance } from '@vuepress/client' +import { defineClientAppEnhance } from '@vuepress/client' import { useGoogleAnalytics } from './composables' declare const __DEV__: boolean @@ -7,10 +7,8 @@ declare const GA_ID: string const id = GA_ID -const clientAppEnhance: ClientAppEnhance = () => { +export default defineClientAppEnhance(() => { if (__DEV__ || __SSR__ || !id) return useGoogleAnalytics(id) -} - -export default clientAppEnhance +}) diff --git a/packages/@vuepress/plugin-medium-zoom/src/clientAppEnhance.ts b/packages/@vuepress/plugin-medium-zoom/src/clientAppEnhance.ts index b445aca2c2..33144db947 100644 --- a/packages/@vuepress/plugin-medium-zoom/src/clientAppEnhance.ts +++ b/packages/@vuepress/plugin-medium-zoom/src/clientAppEnhance.ts @@ -1,6 +1,6 @@ import mediumZoom from 'medium-zoom' import type { ZoomOptions } from 'medium-zoom' -import type { ClientAppEnhance } from '@vuepress/client' +import { defineClientAppEnhance } from '@vuepress/client' import { mediumZoomSymbol } from './composables' import '../styles/medium-zoom.css' @@ -14,7 +14,7 @@ const selector = MZ_SELECTOR const zoomOptions = MZ_ZOOM_OPTIONS const delay = MZ_DELAY -const clientAppEnhance: ClientAppEnhance = ({ app, router }) => { +export default defineClientAppEnhance(({ app, router }) => { if (__SSR__ || !selector) return // create zoom instance and provide it @@ -28,6 +28,4 @@ const clientAppEnhance: ClientAppEnhance = ({ app, router }) => { router.afterEach(() => { setTimeout(() => zoom.refresh(), delay) }) -} - -export default clientAppEnhance +}) diff --git a/packages/@vuepress/plugin-nprogress/src/clientAppSetup.ts b/packages/@vuepress/plugin-nprogress/src/clientAppSetup.ts index 19b7f8115f..15f979a4ba 100644 --- a/packages/@vuepress/plugin-nprogress/src/clientAppSetup.ts +++ b/packages/@vuepress/plugin-nprogress/src/clientAppSetup.ts @@ -1,11 +1,11 @@ import * as nprogress from 'nprogress' import { onMounted } from 'vue' import { useRouter } from 'vue-router' -import type { ClientAppSetup } from '@vuepress/client' +import { defineClientAppSetup } from '@vuepress/client' import '../styles/nprogress.css' -const clientAppSetup: ClientAppSetup = () => { +export default defineClientAppSetup(() => { onMounted(() => { // get vue-router instance const router = useRouter() @@ -32,6 +32,4 @@ const clientAppSetup: ClientAppSetup = () => { nprogress.done() }) }) -} - -export default clientAppSetup +}) diff --git a/packages/@vuepress/plugin-pwa/src/clientAppSetup.ts b/packages/@vuepress/plugin-pwa/src/clientAppSetup.ts index 8cb2358459..921d72cae6 100644 --- a/packages/@vuepress/plugin-pwa/src/clientAppSetup.ts +++ b/packages/@vuepress/plugin-pwa/src/clientAppSetup.ts @@ -1,7 +1,6 @@ import mitt from 'mitt' import { onMounted, provide } from 'vue' -import { withBase } from '@vuepress/client' -import type { ClientAppSetup } from '@vuepress/client' +import { defineClientAppSetup, withBase } from '@vuepress/client' import { pwaEventSymbol } from './composables' import type { PwaEvent } from './composables' @@ -11,7 +10,7 @@ declare const __PWA_SW_FILENAME__: string const swFilename = __PWA_SW_FILENAME__ -const clientAppSetup: ClientAppSetup = () => { +export default defineClientAppSetup(() => { if (__DEV__ || __SSR__ || !swFilename) return const log = (...args: any[]): void => @@ -63,6 +62,4 @@ const clientAppSetup: ClientAppSetup = () => { }, }) }) -} - -export default clientAppSetup +}) diff --git a/packages/@vuepress/plugin-theme-data/src/clientAppEnhance.ts b/packages/@vuepress/plugin-theme-data/src/clientAppEnhance.ts index 830d1d2853..d70048070d 100644 --- a/packages/@vuepress/plugin-theme-data/src/clientAppEnhance.ts +++ b/packages/@vuepress/plugin-theme-data/src/clientAppEnhance.ts @@ -1,13 +1,12 @@ import { computed } from 'vue' -import { routeLocaleSymbol } from '@vuepress/client' -import type { ClientAppEnhance } from '@vuepress/client' +import { defineClientAppEnhance, routeLocaleSymbol } from '@vuepress/client' import { useThemeData, resolveThemeLocaleData, themeLocaleDataSymbol, } from './composables' -const clientAppEnhance: ClientAppEnhance = ({ app }) => { +export default defineClientAppEnhance(({ app }) => { // provide theme data & theme locale data const themeData = useThemeData() const routeLocale = @@ -29,6 +28,4 @@ const clientAppEnhance: ClientAppEnhance = ({ app }) => { }, }, }) -} - -export default clientAppEnhance +}) diff --git a/packages/@vuepress/theme-default/src/clientAppEnhance.ts b/packages/@vuepress/theme-default/src/clientAppEnhance.ts index c3f4fbb93a..86b5499db5 100644 --- a/packages/@vuepress/theme-default/src/clientAppEnhance.ts +++ b/packages/@vuepress/theme-default/src/clientAppEnhance.ts @@ -1,4 +1,4 @@ -import type { ClientAppEnhance } from '@vuepress/client' +import { defineClientAppEnhance } from '@vuepress/client' import Badge from './components/global/Badge.vue' import CodeGroup from './components/global/CodeGroup.vue' import CodeGroupItem from './components/global/CodeGroupItem.vue' @@ -8,7 +8,7 @@ import './styles/index.scss' declare const DOCSEARCH_PROPS: unknown -const clientAppEnhance: ClientAppEnhance = ({ app }) => { +export default defineClientAppEnhance(({ app }) => { /* eslint-disable vue/match-component-file-name */ app.component('Badge', Badge) app.component('CodeGroup', CodeGroup) @@ -26,6 +26,4 @@ const clientAppEnhance: ClientAppEnhance = ({ app }) => { app.component('Docsearch', () => null) } /* eslint-enable vue/match-component-file-name */ -} - -export default clientAppEnhance +}) diff --git a/packages/@vuepress/theme-default/src/clientAppSetup.ts b/packages/@vuepress/theme-default/src/clientAppSetup.ts index f66e427181..eeea7e575c 100644 --- a/packages/@vuepress/theme-default/src/clientAppSetup.ts +++ b/packages/@vuepress/theme-default/src/clientAppSetup.ts @@ -1,6 +1,5 @@ import { computed, provide } from 'vue' -import { usePageFrontmatter } from '@vuepress/client' -import type { ClientAppSetup } from '@vuepress/client' +import { defineClientAppSetup, usePageFrontmatter } from '@vuepress/client' import { resolveSidebarItems, sidebarItemsSymbol, @@ -8,7 +7,7 @@ import { } from './composables' import type { DefaultThemePageFrontmatter } from './types' -const clientAppSetup: ClientAppSetup = () => { +export default defineClientAppSetup(() => { // we need to access sidebar items in multiple components // so we make it global computed const themeLocale = useThemeLocaleData() @@ -17,6 +16,4 @@ const clientAppSetup: ClientAppSetup = () => { resolveSidebarItems(frontmatter.value, themeLocale.value) ) provide(sidebarItemsSymbol, sidebarItems) -} - -export default clientAppSetup +}) From c20f7b7be5d04cb247d699c31bf6f68071180df6 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 16:20:07 +0800 Subject: [PATCH 0702/1014] feat(cli): add defineUserConfig util --- docs/.vuepress/config.ts | 8 +++----- packages/@vuepress/cli/src/config/defineUserConfig.ts | 9 +++++++++ packages/@vuepress/cli/src/config/index.ts | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 packages/@vuepress/cli/src/config/defineUserConfig.ts diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index 5aee671e0c..6c383eac96 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -1,10 +1,10 @@ import * as chokidar from 'chokidar' -import type { UserConfig } from '@vuepress/cli' +import { defineUserConfig } from '@vuepress/cli' import type { DefaultThemeOptions } from '@vuepress/theme-default' import { chalk, logger } from '@vuepress/utils' import { navbar, sidebar } from './configs' -const config: UserConfig = { +export default defineUserConfig({ base: '/', head: [ @@ -187,6 +187,4 @@ const config: UserConfig = { }) watchers.push(watcher) }, -} - -export = config +}) diff --git a/packages/@vuepress/cli/src/config/defineUserConfig.ts b/packages/@vuepress/cli/src/config/defineUserConfig.ts new file mode 100644 index 0000000000..7eb1089c92 --- /dev/null +++ b/packages/@vuepress/cli/src/config/defineUserConfig.ts @@ -0,0 +1,9 @@ +import type { BundlerConfig, ThemeConfig } from '@vuepress/core' +import type { UserConfig } from './types' + +export const defineUserConfig = < + T extends ThemeConfig = ThemeConfig, + U extends BundlerConfig = BundlerConfig +>( + config: UserConfig +): UserConfig => config diff --git a/packages/@vuepress/cli/src/config/index.ts b/packages/@vuepress/cli/src/config/index.ts index 72778291ef..321c325870 100644 --- a/packages/@vuepress/cli/src/config/index.ts +++ b/packages/@vuepress/cli/src/config/index.ts @@ -1,3 +1,4 @@ +export * from './defineUserConfig' export * from './loadUserConfig' export * from './loadUserConfigEs' export * from './resolveUserConfigConventionalPath' From 525c18d5a64fbdbdeb5ce1348ec1e1ead3dbd8f9 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 16:48:23 +0800 Subject: [PATCH 0703/1014] feat: implement vite hmr --- .../client/src/injections/pageData.ts | 2 +- .../client/src/injections/pagesData.ts | 7 +++++- .../client/src/injections/siteData.ts | 7 +++++- packages/@vuepress/client/tsconfig.json | 3 ++- .../core/src/app/prepare/preparePageData.ts | 23 +++++++++++-------- .../src/composables/useThemeData.ts | 7 +++++- .../@vuepress/plugin-theme-data/tsconfig.json | 3 ++- 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/packages/@vuepress/client/src/injections/pageData.ts b/packages/@vuepress/client/src/injections/pageData.ts index badf920e3d..0402b02a5b 100644 --- a/packages/@vuepress/client/src/injections/pageData.ts +++ b/packages/@vuepress/client/src/injections/pageData.ts @@ -38,7 +38,7 @@ export const resolvePageData = async (routePath: string): Promise => { return pageData ?? pageDataEmpty } -if (import.meta.webpackHot) { +if (import.meta.webpackHot || import.meta.hot) { // reuse vue HMR runtime __VUE_HMR_RUNTIME__.updatePageData = (newPageData: PageData) => { if (newPageData.key === pageData.value.key) { diff --git a/packages/@vuepress/client/src/injections/pagesData.ts b/packages/@vuepress/client/src/injections/pagesData.ts index ab57e2c44f..5a8fae125f 100644 --- a/packages/@vuepress/client/src/injections/pagesData.ts +++ b/packages/@vuepress/client/src/injections/pagesData.ts @@ -15,6 +15,11 @@ export const usePagesData = (): PagesDataRef => { if (import.meta.webpackHot) { import.meta.webpackHot!.accept('@internal/pagesData', () => { pagesData.value = readonly(pagesDataRaw) as PagesData - console.log('[vuepress] pagesData is updated') + }) +} + +if (import.meta.hot) { + import.meta.hot!.accept('@internal/pagesData', () => { + pagesData.value = readonly(pagesDataRaw) as PagesData }) } diff --git a/packages/@vuepress/client/src/injections/siteData.ts b/packages/@vuepress/client/src/injections/siteData.ts index f677e3bd44..437fc01922 100644 --- a/packages/@vuepress/client/src/injections/siteData.ts +++ b/packages/@vuepress/client/src/injections/siteData.ts @@ -13,6 +13,11 @@ export const useSiteData = (): SiteDataRef => siteData if (import.meta.webpackHot) { import.meta.webpackHot!.accept('@internal/siteData', () => { siteData.value = readonly(siteDataRaw) as SiteData - console.log('[vuepress] siteData is updated') + }) +} + +if (import.meta.hot) { + import.meta.hot!.accept('@internal/siteData', () => { + siteData.value = readonly(siteDataRaw) as SiteData }) } diff --git a/packages/@vuepress/client/tsconfig.json b/packages/@vuepress/client/tsconfig.json index f962b89f7c..452f76b0ea 100644 --- a/packages/@vuepress/client/tsconfig.json +++ b/packages/@vuepress/client/tsconfig.json @@ -18,7 +18,8 @@ "@internal/pagesData": ["src/types/internal/pagesData.d.ts"], "@internal/pagesRoutes": ["src/types/internal/pagesRoutes.d.ts"], "@internal/siteData": ["src/types/internal/siteData.d.ts"] - } + }, + "types": ["webpack-env", "vite/client"] }, "include": ["./src", "./__tests__"] } diff --git a/packages/@vuepress/core/src/app/prepare/preparePageData.ts b/packages/@vuepress/core/src/app/prepare/preparePageData.ts index 857eba3b5f..63e57a2607 100644 --- a/packages/@vuepress/core/src/app/prepare/preparePageData.ts +++ b/packages/@vuepress/core/src/app/prepare/preparePageData.ts @@ -1,6 +1,18 @@ import type { App, Page } from '../../types' import { resolvePageData } from './resolvePageData' +const HMR_CODE = ` +if (import.meta.webpackHot) { + import.meta.webpackHot.accept() + __VUE_HMR_RUNTIME__.updatePageData(data) +} + +if (import.meta.hot) { + import.meta.hot.accept() + __VUE_HMR_RUNTIME__.updatePageData(data) +} +` + /** * Generate page data temp file of a single page */ @@ -20,16 +32,9 @@ export const preparePageData = async (app: App, page: Page): Promise => { // page data file content let content = `export const data = ${JSON.stringify(pageData, null, 2)}\n` - // HMR support - const hmrCode = ` -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - __VUE_HMR_RUNTIME__.updatePageData(data) -} -` - + // inject HMR code if (app.env.isDev) { - content += hmrCode + content += HMR_CODE } await app.writeTemp(page.dataFilePathRelative, content) diff --git a/packages/@vuepress/plugin-theme-data/src/composables/useThemeData.ts b/packages/@vuepress/plugin-theme-data/src/composables/useThemeData.ts index b40b5e36d3..f1385796cd 100644 --- a/packages/@vuepress/plugin-theme-data/src/composables/useThemeData.ts +++ b/packages/@vuepress/plugin-theme-data/src/composables/useThemeData.ts @@ -14,6 +14,11 @@ export const useThemeData = < if (import.meta.webpackHot) { import.meta.webpackHot!.accept('@internal/themeData', () => { themeData.value = readonly(themeDataRaw) as ThemeData - console.log('[vuepress] themeData is updated') + }) +} + +if (import.meta.hot) { + import.meta.hot!.accept('@internal/themeData', () => { + themeData.value = readonly(themeDataRaw) as ThemeData }) } diff --git a/packages/@vuepress/plugin-theme-data/tsconfig.json b/packages/@vuepress/plugin-theme-data/tsconfig.json index 61e62052df..ad488c788d 100644 --- a/packages/@vuepress/plugin-theme-data/tsconfig.json +++ b/packages/@vuepress/plugin-theme-data/tsconfig.json @@ -5,7 +5,8 @@ "baseUrl": ".", "paths": { "@internal/themeData": ["src/types/internal/themeData.d.ts"] - } + }, + "types": ["webpack-env", "vite/client"] }, "include": ["./src", "./__tests__"] } From 7bf58964b636ddede2c7881ca4318c3cd5a5b6fb Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 16:59:04 +0800 Subject: [PATCH 0704/1014] build: sync bundler version and keywords --- packages/@vuepress/bundler-vite/package.json | 3 ++- packages/@vuepress/bundler-webpack/package.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index 5122a52335..678f9b3ee2 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -1,8 +1,9 @@ { "name": "@vuepress/bundler-vite", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.26", "description": "Bundler vite package of VuePress", "keywords": [ + "vuepress-bundler", "vuepress", "bundler", "vite" diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index de753f740d..221be7579c 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -3,6 +3,7 @@ "version": "2.0.0-alpha.26", "description": "Bundler webpack package of VuePress", "keywords": [ + "vuepress-bundler", "vuepress", "bundler", "webpack" From 03a658364d8c5f0b2510e10cd2bf8ec8bcbf41cb Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 17:02:41 +0800 Subject: [PATCH 0705/1014] feat(vuepress-vite): add vuepress-vite package --- .commitlintrc.js | 2 +- packages/vuepress-vite/bin/vuepress.js | 3 ++ packages/vuepress-vite/package.json | 40 ++++++++++++++++++++++ packages/vuepress-vite/src/index.ts | 9 +++++ packages/vuepress-vite/tsconfig.build.json | 15 ++++++++ packages/vuepress-vite/tsconfig.json | 4 +++ tsconfig.json | 3 +- 7 files changed, 74 insertions(+), 2 deletions(-) create mode 100755 packages/vuepress-vite/bin/vuepress.js create mode 100644 packages/vuepress-vite/package.json create mode 100644 packages/vuepress-vite/src/index.ts create mode 100644 packages/vuepress-vite/tsconfig.build.json create mode 100644 packages/vuepress-vite/tsconfig.json diff --git a/.commitlintrc.js b/.commitlintrc.js index 36ab0e1bd8..f611808dc0 100644 --- a/.commitlintrc.js +++ b/.commitlintrc.js @@ -6,6 +6,6 @@ const packages = fs.readdirSync(path.resolve(__dirname, 'packages/@vuepress')) module.exports = { extends: ['@commitlint/config-conventional'], rules: { - 'scope-enum': [2, 'always', ['vuepress', ...packages]], + 'scope-enum': [2, 'always', ['vuepress', 'vuepress-vite', ...packages]], }, } diff --git a/packages/vuepress-vite/bin/vuepress.js b/packages/vuepress-vite/bin/vuepress.js new file mode 100755 index 0000000000..f2bf474f2f --- /dev/null +++ b/packages/vuepress-vite/bin/vuepress.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('@vuepress/cli/bin/vuepress') diff --git a/packages/vuepress-vite/package.json b/packages/vuepress-vite/package.json new file mode 100644 index 0000000000..215851c8d7 --- /dev/null +++ b/packages/vuepress-vite/package.json @@ -0,0 +1,40 @@ +{ + "name": "vuepress-vite", + "version": "2.0.0-alpha.26", + "description": "Vue-powered Static Site Generator", + "keywords": [ + "documentation", + "generator", + "vue", + "vuepress" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "Evan You", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "bin": { + "vuepress": "bin/vuepress.js" + }, + "files": [ + "bin", + "lib" + ], + "scripts": { + "build": "tsc -b tsconfig.build.json", + "clean": "rimraf lib *.tsbuildinfo" + }, + "dependencies": { + "@vuepress/bundler-vite": "2.0.0-alpha.26", + "@vuepress/cli": "2.0.0-alpha.26", + "@vuepress/core": "2.0.0-alpha.25", + "@vuepress/theme-default": "2.0.0-alpha.26" + } +} diff --git a/packages/vuepress-vite/src/index.ts b/packages/vuepress-vite/src/index.ts new file mode 100644 index 0000000000..b5c769b43e --- /dev/null +++ b/packages/vuepress-vite/src/index.ts @@ -0,0 +1,9 @@ +export * from '@vuepress/cli' +export * from '@vuepress/core' + +export type { ViteBundlerOptions } from '@vuepress/bundler-vite' + +export type { + DefaultThemeOptions, + DefaultThemeLocaleData, +} from '@vuepress/theme-default' diff --git a/packages/vuepress-vite/tsconfig.build.json b/packages/vuepress-vite/tsconfig.build.json new file mode 100644 index 0000000000..aaae0a7ae1 --- /dev/null +++ b/packages/vuepress-vite/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "CommonJS", + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [ + { "path": "../@vuepress/bundler-vite/tsconfig.build.json" }, + { "path": "../@vuepress/cli/tsconfig.build.json" }, + { "path": "../@vuepress/core/tsconfig.build.json" }, + { "path": "../@vuepress/theme-default/tsconfig.build.json" } + ] +} diff --git a/packages/vuepress-vite/tsconfig.json b/packages/vuepress-vite/tsconfig.json new file mode 100644 index 0000000000..06bd5e393a --- /dev/null +++ b/packages/vuepress-vite/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["./src", "./__tests__"] +} diff --git a/tsconfig.json b/tsconfig.json index bdbf254d9a..ae39abe45b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,7 +30,8 @@ { "path": "./packages/@vuepress/theme-default/tsconfig.build.json" }, { "path": "./packages/@vuepress/theme-vue/tsconfig.build.json" }, { "path": "./packages/@vuepress/utils/tsconfig.build.json" }, - { "path": "./packages/vuepress/tsconfig.build.json" } + { "path": "./packages/vuepress/tsconfig.build.json" }, + { "path": "./packages/vuepress-vite/tsconfig.build.json" } ], "files": [] } From 30e83a1f69182bfc3c4e550e5b1531a833978874 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 17:30:17 +0800 Subject: [PATCH 0706/1014] docs: use config definition util --- docs/guide/configuration.md | 9 ++++----- docs/zh/guide/configuration.md | 15 +++++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/docs/guide/configuration.md b/docs/guide/configuration.md index 0aaf3f66a3..1e4316cb68 100644 --- a/docs/guide/configuration.md +++ b/docs/guide/configuration.md @@ -35,9 +35,10 @@ module.exports = { ```ts -import type { UserConfig, DefaultThemeOptions } from 'vuepress' +import { defineUserConfig } from 'vuepress' +import type { DefaultThemeOptions } from 'vuepress' -const config: UserConfig = { +export default defineUserConfig({ lang: 'en-US', title: 'Hello VuePress', description: 'Just playing around', @@ -45,9 +46,7 @@ const config: UserConfig = { themeConfig: { logo: 'https://vuejs.org/images/logo.png', }, -} - -export = config +}) ``` diff --git a/docs/zh/guide/configuration.md b/docs/zh/guide/configuration.md index 681b7e5c91..99048af7a2 100644 --- a/docs/zh/guide/configuration.md +++ b/docs/zh/guide/configuration.md @@ -35,19 +35,18 @@ module.exports = { ```ts -import type { UserConfig, DefaultThemeOptions } from 'vuepress' +import { defineUserConfig } from 'vuepress' +import type { DefaultThemeOptions } from 'vuepress' -const config: UserConfig = { - lang: 'zh-CN', - title: '你好, VuePress !', - description: '这是我的第一个 VuePress 站点', +export default defineUserConfig({ + lang: 'en-US', + title: 'Hello VuePress', + description: 'Just playing around', themeConfig: { logo: 'https://vuejs.org/images/logo.png', }, -} - -export = config +}) ``` From 6701b1ed5b5eb3e8060ec818743b9c7b605e55cd Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 19:15:19 +0800 Subject: [PATCH 0707/1014] build: add vuepress-vite to workspace --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 771af9388b..58b4df5999 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "private": true, "workspaces": [ "packages/vuepress", + "packages/vuepress-vite", "packages/@vuepress/*" ], "scripts": { From 934a32ac966146cdc641084b0be7673f7f5b43f5 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 20:29:10 +0800 Subject: [PATCH 0708/1014] docs: bundler guide and reference --- docs/guide/bundler.md | 86 ++++++++++++++++++++++- docs/reference/bundler/vite.md | 18 ++++- docs/reference/bundler/webpack.md | 101 ++++++++++++++++++++++++++- docs/reference/config.md | 5 ++ docs/zh/guide/bundler.md | 86 ++++++++++++++++++++++- docs/zh/reference/bundler/vite.md | 18 ++++- docs/zh/reference/bundler/webpack.md | 101 ++++++++++++++++++++++++++- docs/zh/reference/config.md | 5 ++ 8 files changed, 414 insertions(+), 6 deletions(-) diff --git a/docs/guide/bundler.md b/docs/guide/bundler.md index 82ea1f1c0c..c1317ccd3a 100644 --- a/docs/guide/bundler.md +++ b/docs/guide/bundler.md @@ -1,3 +1,87 @@ # Bundler -> TODO +VuePress has been using [webpack](https://webpack.js.org/) as the bundler to dev and build sites. Since VuePress v2, other tools like [Vite](https://vitejs.dev/) are also supported. + +Although it is possible to create other bundler packages by community users, currently we only suggest to use the bundlers provided by VuePress team. + +## Webpack + +When using the [vuepress](https://www.npmjs.com/package/vuepress) package, the webpack bundler is installed: + +```sh +npm install -D vuepress +``` + +You can specify the name of the bundler to use in [bundler](../reference/config.md#bundler) option, or omit it because webpack is the default bundler. Then you can set [options of webpack bundler](../reference/bundler/webpack.md) via [bundlerConfig](../reference/config.md#bundlerconfig) option: + + + + +```js +module.exports = { + bundler: '@vuepress/webpack', + bundlerConfig: { + // webpack bundler options + }, +} +``` + + + + + +```ts +import { defineUserConfig } from 'vuepress' +import type { DefaultThemeOptions, WebpackBundlerOptions } from 'vuepress' + +export default defineUserConfig({ + bundler: '@vuepress/webpack', + bundlerConfig: { + // webpack bundler options + }, +}) +``` + + + + +## Vite + +If you want to use Vite instead, you can switch to [vuepress-vite](https://www.npmjs.com/package/vuepress-vite) package: + +```sh +npm install -D vuepress-vite +``` + +Next, you need to specify the name of the bundler to use in [bundler](../reference/config.md#bundler) option. Then you can set [options of vite bundler](../reference/bundler/vite.md) via [bundlerConfig](../reference/config.md#bundlerconfig) option: + + + + +```js +module.exports = { + bundler: '@vuepress/vite', + bundlerConfig: { + // vite bundler options + }, +} +``` + + + + + +```ts +import { defineUserConfig } from 'vuepress-vite' +import type { DefaultThemeOptions, ViteBundlerOptions } from 'vuepress-vite' + +export default defineUserConfig({ + bundler: '@vuepress/vite', + bundlerConfig: { + // vite bundler options + }, +}) +``` + + + diff --git a/docs/reference/bundler/vite.md b/docs/reference/bundler/vite.md index d5d34b36d4..cbde3ad97e 100644 --- a/docs/reference/bundler/vite.md +++ b/docs/reference/bundler/vite.md @@ -1,3 +1,19 @@ # Vite -> TODO +## viteOptions + +- Details: + + Accepts all options of Vite. + +- Also see: + - [Vite > Config](https://vitejs.dev/config/) + +## vuePluginOptions + +- Details: + + Accepts all options of [@vitejs/plugin-vue](https://www.npmjs.com/package/@vitejs/plugin-vue). + +- Also see: + - [Vite > Plugins > Official Plugins](https://vitejs.dev/plugins/#vitejs-plugin-vue) diff --git a/docs/reference/bundler/webpack.md b/docs/reference/bundler/webpack.md index 9486fe9466..0bf73d3e12 100644 --- a/docs/reference/bundler/webpack.md +++ b/docs/reference/bundler/webpack.md @@ -1,3 +1,102 @@ # Webpack -> TODO +## configureWebpack + +- Type: `(config: WebpackConfiguration, isServer: boolean, isBuild: boolean) => WebpackConfiguration` + +- Details: + + Edit the internal webpack config. + + This option accepts a function that will receive a webpack config object as the 1st argument, an `isServer` flag as the 2nd argument and an `isBuild` flag as the 3rd argument. You can either mutate the config directly, or return an object to be merged by [webpack-merge](https://github.com/survivejs/webpack-merge). + +## chainWebpack + +- Type: `(config: WebpackChainConfig, isServer: boolean, isBuild: boolean) => void` + +- Details: + + Edit the internal webpack config with [webpack-chain](https://github.com/mozilla-neutrino/webpack-chain). + + This option accepts a function that will receive a `Config` instance that provided by `webpack-chain` as the 1st argument an `isServer` flag as the 2nd argument and an `isBuild` flag as the 3rd argument. + +## beforeDevServer + +- Type: `(expressApp: Application, server: WebpackDevServer) => void` + +- Details: + + A hook to be called in `devServer.before` of webpack. + + The arguments of the function are the first two arguments of `devServer.before`. + +- Also see: + - [Webpack > Configuration > DevServer > devServer.before](https://webpack.js.org/configuration/dev-server/#devserverbefore) + +## afterDevServer + +- Type: `(expressApp: Application, server: WebpackDevServer) => void` + +- Details: + + A hook to be called in `devServer.after` of webpack. + + The arguments of the function are the first two arguments of `devServer.after`. + +- Also see: + - [Webpack > Configuration > DevServer > devServer.after](https://webpack.js.org/configuration/dev-server/#devserverafter) + +## postcss + +- Type: `PostcssLoaderOptions` + +- Details: + + Options for `postcss-loader`. + +- Also see: + - [postcss-loader > Options](https://github.com/webpack-contrib/postcss-loader#options) + +## stylus + +- Type: `StylusLoaderOptions` + +- Details: + + Options for `stylus-loader`. + +- Also see: + - [stylus-loader > Options](https://github.com/webpack-contrib/stylus-loader#options) + +## scss + +- Type: `SassLoaderOptions` + +- Details: + + Options for `sass-loader` for `.scss` files. + +- Also see: + - [sass-loader > Options](https://github.com/webpack-contrib/sass-loader#options) + +## sass + +- Type: `SassLoaderOptions` + +- Details: + + Options for `sass-loader` for `.sass` files. + +- Also see: + - [sass-loader > Options](https://github.com/webpack-contrib/sass-loader#options) + +## less + +- Type: `LessLoaderOptions` + +- Details: + + Options for `less-loader`. + +- Also see: + - [less-loader > Options](https://github.com/webpack-contrib/less-loader#options) diff --git a/docs/reference/config.md b/docs/reference/config.md index ce0fec6926..9d4afb972b 100644 --- a/docs/reference/config.md +++ b/docs/reference/config.md @@ -207,6 +207,11 @@ module.exports = { Provide config options to the used bundler. The options will vary depending on the bundler you are using. +- Also see: + - [Guide > Bundler](../guide/bundler.md) + - [Bundlers > Webpack](./bundler/webpack.md) + - [Bundlers > Vite](./bundler/vite.md) + ## Directory Config ### dest diff --git a/docs/zh/guide/bundler.md b/docs/zh/guide/bundler.md index d6659134d6..7ecadafce0 100644 --- a/docs/zh/guide/bundler.md +++ b/docs/zh/guide/bundler.md @@ -1,3 +1,87 @@ # 打包工具 -> TODO +VuePress 一直以来都在使用 [webpack](https://webpack.js.org/) 作为打包工具来进行网站的开发和构建。从 VuePress v2 开始,也可以支持使用其他工具,如 [Vite](https://vitejs.dev/) 等。 + +尽管社区用户也可以创建打包工具 Package ,但目前我们仅推荐使用由 VuePress 团队提供的打包工具。 + +## Webpack + +在使用 [vuepress](https://www.npmjs.com/package/vuepress) Package 时,安装的是 webpack 打包工具: + +```sh +npm install -D vuepress +``` + +你可以在 [bundler](../reference/config.md#bundler) 配置项中设置你要使用的打包工具名称,或者不设置它,因为 webpack 是默认的打包工具。此时你可以通过 [bundlerConfig](../reference/config.md#bundlerconfig) 配置项来设置 [webpack 打包工具的选项](../reference/bundler/webpack.md) : + + + + +```js +module.exports = { + bundler: '@vuepress/webpack', + bundlerConfig: { + // webpack 打包工具的选项 + }, +} +``` + + + + + +```ts +import { defineUserConfig } from 'vuepress' +import type { DefaultThemeOptions, WebpackBundlerOptions } from 'vuepress' + +export default defineUserConfig({ + bundler: '@vuepress/webpack', + bundlerConfig: { + // webpack 打包工具的选项 + }, +}) +``` + + + + +## Vite + +如果想要改为使用 Vite ,你可以切换成 [vuepress-vite](https://www.npmjs.com/package/vuepress-vite) Package : + +```sh +npm install -D vuepress-vite +``` + +接下来,你需要在 [bundler](../reference/config.md#bundler) 配置项中设置你要使用的打包工具名称。此时你可以通过 [bundlerConfig](../reference/config.md#bundlerconfig) 配置项来设置 [vite 打包工具的选项](../reference/bundler/vite.md) : + + + + +```js +module.exports = { + bundler: '@vuepress/vite', + bundlerConfig: { + // vite 打包工具的选项 + }, +} +``` + + + + + +```ts +import { defineUserConfig } from 'vuepress-vite' +import type { DefaultThemeOptions, ViteBundlerOptions } from 'vuepress-vite' + +export default defineUserConfig({ + bundler: '@vuepress/vite', + bundlerConfig: { + // vite 打包工具的选项 + }, +}) +``` + + + diff --git a/docs/zh/reference/bundler/vite.md b/docs/zh/reference/bundler/vite.md index d5d34b36d4..80f123f590 100644 --- a/docs/zh/reference/bundler/vite.md +++ b/docs/zh/reference/bundler/vite.md @@ -1,3 +1,19 @@ # Vite -> TODO +## viteOptions + +- 详情: + + 接收 Vite 的所有配置项。 + +- 参考: + - [Vite > Config](https://vitejs.dev/config/) + +## vuePluginOptions + +- 详情: + + 接收 [@vitejs/plugin-vue](https://www.npmjs.com/package/@vitejs/plugin-vue) 的所有配置项。 + +- 参考: + - [Vite > Plugins > Official Plugins](https://vitejs.dev/plugins/#vitejs-plugin-vue) diff --git a/docs/zh/reference/bundler/webpack.md b/docs/zh/reference/bundler/webpack.md index 9486fe9466..2df4f6e6fd 100644 --- a/docs/zh/reference/bundler/webpack.md +++ b/docs/zh/reference/bundler/webpack.md @@ -1,3 +1,102 @@ # Webpack -> TODO +## configureWebpack + +- 类型: `(config: WebpackConfiguration, isServer: boolean, isBuild: boolean) => WebpackConfiguration` + +- 详情: + + 用于修改内部的 Webpack 配置。 + + 该配置项接收一个函数,该函数的第一个参数是 Webpack 配置对象,第二个参数是 `isServer` 标志位,第三个参数是 `isBuild` 标志位。 + +## chainWebpack + +- 类型: `(config: WebpackChainConfig, isServer: boolean, isBuild: boolean) => void` + +- 详情: + + 通过 [webpack-chain](https://github.com/mozilla-neutrino/webpack-chain) 来修改内部的 Webpack 配置。 + + 该配置项接收一个函数,该函数的第一个参数是由 `webpack-chain` 提供的 `Config` 实例,第二个参数是 `isServer` 标志位,第三个参数是 `isBuild` 标志位。 + +## beforeDevServer + +- 类型: `(expressApp: Application, server: WebpackDevServer) => void` + +- 详情: + + 在 Webpack 的 `devServer.before` 中调用的 Hook 。 + + 函数的参数是 `devServer.before` 的前两个参数。 + +- 参考: + - [Webpack > Configuration > DevServer > devServer.before](https://webpack.js.org/configuration/dev-server/#devserverbefore) + +## afterDevServer + +- 类型: `(expressApp: Application, server: WebpackDevServer) => void` + +- 详情: + + 在 Webpack 的 `devServer.after` 中调用的 Hook 。 + + 函数的参数是 `devServer.after` 的前两个参数。 + +- 参考: + - [Webpack > Configuration > DevServer > devServer.after](https://webpack.js.org/configuration/dev-server/#devserverafter) + +## postcss + +- 类型: `PostcssLoaderOptions` + +- 详情: + + `postcss-loader` 的配置项。 + +- 参考: + - [postcss-loader > Options](https://github.com/webpack-contrib/postcss-loader#options) + +## stylus + +- 类型: `StylusLoaderOptions` + +- 详情: + + `stylus-loader` 的配置项。 + +- 参考: + - [stylus-loader > Options](https://github.com/webpack-contrib/stylus-loader#options) + +## scss + +- 类型: `SassLoaderOptions` + +- 详情: + + 针对 `.scss` 文件的 `sass-loader` 的配置项。 + +- 参考: + - [sass-loader > Options](https://github.com/webpack-contrib/sass-loader#options) + +## sass + +- 类型: `SassLoaderOptions` + +- 详情: + + 针对 `.sass` 文件的 `sass-loader` 的配置项。 + +- 参考: + - [sass-loader > Options](https://github.com/webpack-contrib/sass-loader#options) + +## less + +- 类型: `LessLoaderOptions` + +- 详情: + + `less-loader` 的配置项。 + +- 参考: + - [less-loader > Options](https://github.com/webpack-contrib/less-loader#options) diff --git a/docs/zh/reference/config.md b/docs/zh/reference/config.md index c6702e3a24..f96588bcf1 100644 --- a/docs/zh/reference/config.md +++ b/docs/zh/reference/config.md @@ -206,6 +206,11 @@ module.exports = { 为当前使用的打包工具提供的配置项。具体的配置项取决于你使用的打包工具。 +- 参考: + - [指南 > 打包工具](../guide/bundler.md) + - [打包工具 > Webpack](./bundler/webpack.md) + - [打包工具 > Vite](./bundler/vite.md) + ## 目录配置 ### dest From ccba698ba8d93b3ba55a0f76489386e1c4b79fd8 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 20:40:04 +0800 Subject: [PATCH 0709/1014] build: publish v2.0.0-beta.0 --- CHANGELOG.md | 26 +++++++++++++++++++ lerna.json | 2 +- packages/@vuepress/bundler-vite/CHANGELOG.md | 11 ++++++++ packages/@vuepress/bundler-vite/package.json | 10 +++---- .../@vuepress/bundler-webpack/CHANGELOG.md | 8 ++++++ .../@vuepress/bundler-webpack/package.json | 10 +++---- packages/@vuepress/cli/CHANGELOG.md | 11 ++++++++ packages/@vuepress/cli/package.json | 6 ++--- packages/@vuepress/client/CHANGELOG.md | 12 +++++++++ packages/@vuepress/client/package.json | 4 +-- packages/@vuepress/core/CHANGELOG.md | 11 ++++++++ packages/@vuepress/core/package.json | 10 +++---- packages/@vuepress/markdown/CHANGELOG.md | 8 ++++++ packages/@vuepress/markdown/package.json | 6 ++--- .../plugin-active-header-links/CHANGELOG.md | 8 ++++++ .../plugin-active-header-links/package.json | 8 +++--- .../@vuepress/plugin-back-to-top/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-back-to-top/package.json | 6 ++--- .../@vuepress/plugin-container/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-container/package.json | 10 +++---- packages/@vuepress/plugin-debug/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-debug/package.json | 8 +++--- .../@vuepress/plugin-docsearch/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-docsearch/package.json | 10 +++---- packages/@vuepress/plugin-git/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-git/package.json | 4 +-- .../plugin-google-analytics/CHANGELOG.md | 11 ++++++++ .../plugin-google-analytics/package.json | 8 +++--- .../@vuepress/plugin-medium-zoom/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-medium-zoom/package.json | 8 +++--- .../@vuepress/plugin-nprogress/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-nprogress/package.json | 8 +++--- .../@vuepress/plugin-palette/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-palette/package.json | 6 ++--- .../@vuepress/plugin-pwa-popup/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-pwa-popup/package.json | 12 ++++----- packages/@vuepress/plugin-pwa/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-pwa/package.json | 8 +++--- .../@vuepress/plugin-theme-data/CHANGELOG.md | 11 ++++++++ .../@vuepress/plugin-theme-data/package.json | 10 +++---- packages/@vuepress/shared/CHANGELOG.md | 8 ++++++ packages/@vuepress/shared/package.json | 2 +- packages/@vuepress/theme-default/CHANGELOG.md | 16 ++++++++++++ packages/@vuepress/theme-default/package.json | 26 +++++++++---------- packages/@vuepress/theme-vue/CHANGELOG.md | 8 ++++++ packages/@vuepress/theme-vue/package.json | 4 +-- packages/@vuepress/utils/CHANGELOG.md | 8 ++++++ packages/@vuepress/utils/package.json | 4 +-- packages/vuepress-vite/CHANGELOG.md | 11 ++++++++ packages/vuepress-vite/package.json | 10 +++---- packages/vuepress/CHANGELOG.md | 8 ++++++ packages/vuepress/package.json | 10 +++---- 52 files changed, 361 insertions(+), 105 deletions(-) create mode 100644 packages/@vuepress/bundler-vite/CHANGELOG.md create mode 100644 packages/vuepress-vite/CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f92d19490..1a79b3a76a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,32 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Bug Fixes + +* **plugin-google-analytics:** fix types ([92aa486](https://github.com/vuepress/vuepress-next/commit/92aa48629d0355808a15942594e499d39bb3f1e7)) + + +### Features + +* **vuepress-vite:** add vuepress-vite package ([03a6583](https://github.com/vuepress/vuepress-next/commit/03a658364d8c5f0b2510e10cd2bf8ec8bcbf41cb)) +* implement vite hmr ([525c18d](https://github.com/vuepress/vuepress-next/commit/525c18d5a64fbdbdeb5ce1348ec1e1ead3dbd8f9)) +* **bundler-vite:** add vite support :zap: ([7d612c4](https://github.com/vuepress/vuepress-next/commit/7d612c45d83d42b246316f93cc3385a9968307af)) +* **cli:** add defineUserConfig util ([c20f7b7](https://github.com/vuepress/vuepress-next/commit/c20f7b7be5d04cb247d699c31bf6f68071180df6)) +* **client:** add defineClientAppEnhance and defineClientAppSetup utils ([1520517](https://github.com/vuepress/vuepress-next/commit/15205172c3b56fc8a879bba040f4ecc815d2c924)) +* **theme-default:** use sass as css pre-processor ([7eb1fd8](https://github.com/vuepress/vuepress-next/commit/7eb1fd8b8901d3f2c2335ad550b7d601a9354826)) + + +### BREAKING CHANGES + +* **theme-default:** the palette system of default theme is migrated to sass + + + + + # [2.0.0-alpha.26](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-02-24) diff --git a/lerna.json b/lerna.json index cc177eabc7..ade6aea8bc 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,7 @@ { "npmClient": "yarn", "useWorkspaces": true, - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "command": { "version": { "allowBranch": "main", diff --git a/packages/@vuepress/bundler-vite/CHANGELOG.md b/packages/@vuepress/bundler-vite/CHANGELOG.md new file mode 100644 index 0000000000..744565aa35 --- /dev/null +++ b/packages/@vuepress/bundler-vite/CHANGELOG.md @@ -0,0 +1,11 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Features + +* **bundler-vite:** add vite support :zap: ([7d612c4](https://github.com/vuepress/vuepress-next/commit/7d612c45d83d42b246316f93cc3385a9968307af)) diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index 678f9b3ee2..6a9876170d 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-vite", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "Bundler vite package of VuePress", "keywords": [ "vuepress-bundler", @@ -31,10 +31,10 @@ "@vitejs/plugin-vue": "^1.1.5", "@vue/compiler-sfc": "^3.0.7", "@vue/server-renderer": "^3.0.7", - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "rollup": "^2.41.2", "vite": "2.0.5", "vue": "^3.0.7", diff --git a/packages/@vuepress/bundler-webpack/CHANGELOG.md b/packages/@vuepress/bundler-webpack/CHANGELOG.md index f86991eba2..63e8496e0c 100644 --- a/packages/@vuepress/bundler-webpack/CHANGELOG.md +++ b/packages/@vuepress/bundler-webpack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/bundler-webpack + + + + + # [2.0.0-alpha.26](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-02-24) diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index 221be7579c..a923d750e7 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-webpack", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "Bundler webpack package of VuePress", "keywords": [ "vuepress-bundler", @@ -32,10 +32,10 @@ "@types/webpack-env": "^1.16.0", "@vue/compiler-sfc": "^3.0.7", "@vue/server-renderer": "^3.0.7", - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "autoprefixer": "^10.2.4", "copy-webpack-plugin": "^7.0.0", "css-loader": "^5.1.1", diff --git a/packages/@vuepress/cli/CHANGELOG.md b/packages/@vuepress/cli/CHANGELOG.md index d3e0be43ce..ad6619c7e1 100644 --- a/packages/@vuepress/cli/CHANGELOG.md +++ b/packages/@vuepress/cli/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Features + +* **cli:** add defineUserConfig util ([c20f7b7](https://github.com/vuepress/vuepress-next/commit/c20f7b7be5d04cb247d699c31bf6f68071180df6)) + + + + + # [2.0.0-alpha.26](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-02-24) diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index 91f08accaf..e30a99b522 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/cli", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "CLI package of VuePress", "keywords": [ "vuepress", @@ -30,8 +30,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "cac": "^6.7.2", "chokidar": "^3.5.1", "envinfo": "^7.7.4", diff --git a/packages/@vuepress/client/CHANGELOG.md b/packages/@vuepress/client/CHANGELOG.md index 10d0554514..21fc165982 100644 --- a/packages/@vuepress/client/CHANGELOG.md +++ b/packages/@vuepress/client/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Features + +* implement vite hmr ([525c18d](https://github.com/vuepress/vuepress-next/commit/525c18d5a64fbdbdeb5ce1348ec1e1ead3dbd8f9)) +* **client:** add defineClientAppEnhance and defineClientAppSetup utils ([1520517](https://github.com/vuepress/vuepress-next/commit/15205172c3b56fc8a879bba040f4ecc815d2c924)) + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) diff --git a/packages/@vuepress/client/package.json b/packages/@vuepress/client/package.json index 10e3cff717..7d73193179 100644 --- a/packages/@vuepress/client/package.json +++ b/packages/@vuepress/client/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/client", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "Client package of VuePress", "keywords": [ "vuepress", @@ -28,7 +28,7 @@ "copy": "cpx \"src/**/*.{d.ts,css}\" lib" }, "dependencies": { - "@vuepress/shared": "2.0.0-alpha.25", + "@vuepress/shared": "2.0.0-beta.0", "vue": "^3.0.7", "vue-router": "^4.0.4" }, diff --git a/packages/@vuepress/core/CHANGELOG.md b/packages/@vuepress/core/CHANGELOG.md index 58bbcb5104..14973bccd3 100644 --- a/packages/@vuepress/core/CHANGELOG.md +++ b/packages/@vuepress/core/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Features + +* implement vite hmr ([525c18d](https://github.com/vuepress/vuepress-next/commit/525c18d5a64fbdbdeb5ce1348ec1e1ead3dbd8f9)) + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) diff --git a/packages/@vuepress/core/package.json b/packages/@vuepress/core/package.json index 6be9991faa..fa6803a3f3 100644 --- a/packages/@vuepress/core/package.json +++ b/packages/@vuepress/core/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/core", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "Core package of VuePress", "keywords": [ "vuepress", @@ -26,10 +26,10 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/markdown": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/markdown": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "gray-matter": "^4.0.2", "toml": "^3.0.0" }, diff --git a/packages/@vuepress/markdown/CHANGELOG.md b/packages/@vuepress/markdown/CHANGELOG.md index d1b857f0ab..feff87151a 100644 --- a/packages/@vuepress/markdown/CHANGELOG.md +++ b/packages/@vuepress/markdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/markdown + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) diff --git a/packages/@vuepress/markdown/package.json b/packages/@vuepress/markdown/package.json index 7f36a1969d..df4d4387b4 100644 --- a/packages/@vuepress/markdown/package.json +++ b/packages/@vuepress/markdown/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/markdown", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "Markdown package of VuePress", "keywords": [ "vuepress", @@ -27,8 +27,8 @@ }, "dependencies": { "@types/markdown-it": "^12.0.1", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "markdown-it": "^12.0.4", "markdown-it-anchor": "^7.0.2", "markdown-it-emoji": "^2.0.0", diff --git a/packages/@vuepress/plugin-active-header-links/CHANGELOG.md b/packages/@vuepress/plugin-active-header-links/CHANGELOG.md index b95c963985..c0e4d80521 100644 --- a/packages/@vuepress/plugin-active-header-links/CHANGELOG.md +++ b/packages/@vuepress/plugin-active-header-links/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-active-header-links + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-active-header-links diff --git a/packages/@vuepress/plugin-active-header-links/package.json b/packages/@vuepress/plugin-active-header-links/package.json index 7d30c9cf2a..7e85ce3c31 100644 --- a/packages/@vuepress/plugin-active-header-links/package.json +++ b/packages/@vuepress/plugin-active-header-links/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-active-header-links", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - active header links", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "ts-debounce": "^3.0.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-back-to-top/CHANGELOG.md b/packages/@vuepress/plugin-back-to-top/CHANGELOG.md index 7fdd4179b8..841f5e7e52 100644 --- a/packages/@vuepress/plugin-back-to-top/CHANGELOG.md +++ b/packages/@vuepress/plugin-back-to-top/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-back-to-top + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-back-to-top diff --git a/packages/@vuepress/plugin-back-to-top/package.json b/packages/@vuepress/plugin-back-to-top/package.json index 26fb78bdff..8ad661f4d7 100644 --- a/packages/@vuepress/plugin-back-to-top/package.json +++ b/packages/@vuepress/plugin-back-to-top/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-back-to-top", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - back to top", "keywords": [ "vuepress-plugin", @@ -29,8 +29,8 @@ "copy": "cpx \"src/**/*.vue\" lib" }, "dependencies": { - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "ts-debounce": "^3.0.0", "vue": "^3.0.7" }, diff --git a/packages/@vuepress/plugin-container/CHANGELOG.md b/packages/@vuepress/plugin-container/CHANGELOG.md index b790efe4be..144a00978e 100644 --- a/packages/@vuepress/plugin-container/CHANGELOG.md +++ b/packages/@vuepress/plugin-container/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-container + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-container diff --git a/packages/@vuepress/plugin-container/package.json b/packages/@vuepress/plugin-container/package.json index 325f16ae3a..53f386c1ae 100644 --- a/packages/@vuepress/plugin-container/package.json +++ b/packages/@vuepress/plugin-container/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-container", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - markdown container", "keywords": [ "vuepress-plugin", @@ -30,10 +30,10 @@ }, "dependencies": { "@types/markdown-it": "^12.0.1", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/markdown": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/markdown": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "markdown-it": "^12.0.4", "markdown-it-container": "^3.0.0" }, diff --git a/packages/@vuepress/plugin-debug/CHANGELOG.md b/packages/@vuepress/plugin-debug/CHANGELOG.md index b50c9ce976..3faac2e7ba 100644 --- a/packages/@vuepress/plugin-debug/CHANGELOG.md +++ b/packages/@vuepress/plugin-debug/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-debug + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-debug diff --git a/packages/@vuepress/plugin-debug/package.json b/packages/@vuepress/plugin-debug/package.json index 8c941ed3af..035ad1089b 100644 --- a/packages/@vuepress/plugin-debug/package.json +++ b/packages/@vuepress/plugin-debug/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-debug", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - debug", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "copy": "cpx \"src/**/*.css\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "vue": "^3.0.7", "vue-router": "^4.0.4" }, diff --git a/packages/@vuepress/plugin-docsearch/CHANGELOG.md b/packages/@vuepress/plugin-docsearch/CHANGELOG.md index bc507fc26f..87221ab566 100644 --- a/packages/@vuepress/plugin-docsearch/CHANGELOG.md +++ b/packages/@vuepress/plugin-docsearch/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-docsearch + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-docsearch diff --git a/packages/@vuepress/plugin-docsearch/package.json b/packages/@vuepress/plugin-docsearch/package.json index 6eb0a16f7a..9dc6575a55 100644 --- a/packages/@vuepress/plugin-docsearch/package.json +++ b/packages/@vuepress/plugin-docsearch/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-docsearch", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - docsearch", "keywords": [ "vuepress-plugin", @@ -33,10 +33,10 @@ "@docsearch/css": "3.0.0-alpha.34", "@docsearch/js": "3.0.0-alpha.34", "@types/react": "^17.0.0", - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "preact": "^10.0.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-git/CHANGELOG.md b/packages/@vuepress/plugin-git/CHANGELOG.md index ce4568ab35..d7cdfa4508 100644 --- a/packages/@vuepress/plugin-git/CHANGELOG.md +++ b/packages/@vuepress/plugin-git/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-git + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-git diff --git a/packages/@vuepress/plugin-git/package.json b/packages/@vuepress/plugin-git/package.json index 7a03fe15ce..cda72877fb 100644 --- a/packages/@vuepress/plugin-git/package.json +++ b/packages/@vuepress/plugin-git/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-git", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - git", "keywords": [ "vuepress-plugin", @@ -28,7 +28,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-alpha.25", + "@vuepress/core": "2.0.0-beta.0", "execa": "^4.1.0" }, "publishConfig": { diff --git a/packages/@vuepress/plugin-google-analytics/CHANGELOG.md b/packages/@vuepress/plugin-google-analytics/CHANGELOG.md index ffc93157b1..329dc6c9dc 100644 --- a/packages/@vuepress/plugin-google-analytics/CHANGELOG.md +++ b/packages/@vuepress/plugin-google-analytics/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Bug Fixes + +* **plugin-google-analytics:** fix types ([92aa486](https://github.com/vuepress/vuepress-next/commit/92aa48629d0355808a15942594e499d39bb3f1e7)) + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-google-analytics diff --git a/packages/@vuepress/plugin-google-analytics/package.json b/packages/@vuepress/plugin-google-analytics/package.json index cc8f110331..4c52071652 100644 --- a/packages/@vuepress/plugin-google-analytics/package.json +++ b/packages/@vuepress/plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-google-analytics", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - google-analytics", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25" + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md b/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md index 8c814bd660..cb6566ca15 100644 --- a/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md +++ b/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-medium-zoom + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-medium-zoom diff --git a/packages/@vuepress/plugin-medium-zoom/package.json b/packages/@vuepress/plugin-medium-zoom/package.json index e649759f5b..4626886731 100644 --- a/packages/@vuepress/plugin-medium-zoom/package.json +++ b/packages/@vuepress/plugin-medium-zoom/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-medium-zoom", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - medium-zoom", "keywords": [ "vuepress-plugin", @@ -31,9 +31,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "medium-zoom": "^1.0.6", "vue": "^3.0.7" }, diff --git a/packages/@vuepress/plugin-nprogress/CHANGELOG.md b/packages/@vuepress/plugin-nprogress/CHANGELOG.md index 2c25935eda..c2d510d43c 100644 --- a/packages/@vuepress/plugin-nprogress/CHANGELOG.md +++ b/packages/@vuepress/plugin-nprogress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-nprogress + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-nprogress diff --git a/packages/@vuepress/plugin-nprogress/package.json b/packages/@vuepress/plugin-nprogress/package.json index 85bd51f7f9..8adb4fc418 100644 --- a/packages/@vuepress/plugin-nprogress/package.json +++ b/packages/@vuepress/plugin-nprogress/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-nprogress", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - nprogress", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "nprogress": "^0.2.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-palette/CHANGELOG.md b/packages/@vuepress/plugin-palette/CHANGELOG.md index 524b1a8e15..7c16fed0ad 100644 --- a/packages/@vuepress/plugin-palette/CHANGELOG.md +++ b/packages/@vuepress/plugin-palette/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-palette + + + + + # [2.0.0-alpha.26](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-02-24) diff --git a/packages/@vuepress/plugin-palette/package.json b/packages/@vuepress/plugin-palette/package.json index 937c8ba443..c6e3f1a2b1 100644 --- a/packages/@vuepress/plugin-palette/package.json +++ b/packages/@vuepress/plugin-palette/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-palette", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "VuePress plugin - palette", "keywords": [ "vuepress-plugin", @@ -33,8 +33,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25" + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md b/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md index fffb88f711..5256d14346 100644 --- a/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md +++ b/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-pwa-popup + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-pwa-popup diff --git a/packages/@vuepress/plugin-pwa-popup/package.json b/packages/@vuepress/plugin-pwa-popup/package.json index 046157f247..9f7b49029c 100644 --- a/packages/@vuepress/plugin-pwa-popup/package.json +++ b/packages/@vuepress/plugin-pwa-popup/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-pwa-popup", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - PWA popup", "keywords": [ "vuepress-plugin", @@ -31,11 +31,11 @@ "copy": "cpx \"src/**/*.css\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/plugin-pwa": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25" + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/plugin-pwa": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-pwa/CHANGELOG.md b/packages/@vuepress/plugin-pwa/CHANGELOG.md index c75033c81c..344e9224ab 100644 --- a/packages/@vuepress/plugin-pwa/CHANGELOG.md +++ b/packages/@vuepress/plugin-pwa/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-pwa + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/plugin-pwa diff --git a/packages/@vuepress/plugin-pwa/package.json b/packages/@vuepress/plugin-pwa/package.json index 82725f0ec7..a70c386639 100644 --- a/packages/@vuepress/plugin-pwa/package.json +++ b/packages/@vuepress/plugin-pwa/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-pwa", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - progressive web application", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "mitt": "^2.1.0", "register-service-worker": "^1.7.2", "vue": "^3.0.7", diff --git a/packages/@vuepress/plugin-theme-data/CHANGELOG.md b/packages/@vuepress/plugin-theme-data/CHANGELOG.md index c976049f01..21dbc6ff60 100644 --- a/packages/@vuepress/plugin-theme-data/CHANGELOG.md +++ b/packages/@vuepress/plugin-theme-data/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Features + +* implement vite hmr ([525c18d](https://github.com/vuepress/vuepress-next/commit/525c18d5a64fbdbdeb5ce1348ec1e1ead3dbd8f9)) + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) diff --git a/packages/@vuepress/plugin-theme-data/package.json b/packages/@vuepress/plugin-theme-data/package.json index 4614a59e34..5cda61c919 100644 --- a/packages/@vuepress/plugin-theme-data/package.json +++ b/packages/@vuepress/plugin-theme-data/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-theme-data", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "VuePress plugin - theme data", "keywords": [ "vuepress-plugin", @@ -29,10 +29,10 @@ "copy": "cpx \"src/**/*.d.ts\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25" + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/shared/CHANGELOG.md b/packages/@vuepress/shared/CHANGELOG.md index b6a0d79993..a20603d4a2 100644 --- a/packages/@vuepress/shared/CHANGELOG.md +++ b/packages/@vuepress/shared/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/shared + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) diff --git a/packages/@vuepress/shared/package.json b/packages/@vuepress/shared/package.json index 43bbb53836..ee3ae3e05a 100644 --- a/packages/@vuepress/shared/package.json +++ b/packages/@vuepress/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/shared", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "Utils that shared between VuePress node and client", "keywords": [ "vuepress", diff --git a/packages/@vuepress/theme-default/CHANGELOG.md b/packages/@vuepress/theme-default/CHANGELOG.md index a35cc0a276..bec2e36753 100644 --- a/packages/@vuepress/theme-default/CHANGELOG.md +++ b/packages/@vuepress/theme-default/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Features + +* **theme-default:** use sass as css pre-processor ([7eb1fd8](https://github.com/vuepress/vuepress-next/commit/7eb1fd8b8901d3f2c2335ad550b7d601a9354826)) + + +### BREAKING CHANGES + +* **theme-default:** the palette system of default theme is migrated to sass + + + + + # [2.0.0-alpha.26](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-02-24) diff --git a/packages/@vuepress/theme-default/package.json b/packages/@vuepress/theme-default/package.json index 40e176c995..e4f9dbe2f0 100644 --- a/packages/@vuepress/theme-default/package.json +++ b/packages/@vuepress/theme-default/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-default", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "Default theme of VuePress", "keywords": [ "vuepress-theme", @@ -29,18 +29,18 @@ "copy": "cpx \"src/**/*.{d.ts,vue,scss}\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-alpha.25", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/plugin-active-header-links": "2.0.0-alpha.25", - "@vuepress/plugin-back-to-top": "2.0.0-alpha.25", - "@vuepress/plugin-container": "2.0.0-alpha.25", - "@vuepress/plugin-git": "2.0.0-alpha.25", - "@vuepress/plugin-medium-zoom": "2.0.0-alpha.25", - "@vuepress/plugin-nprogress": "2.0.0-alpha.25", - "@vuepress/plugin-palette": "2.0.0-alpha.26", - "@vuepress/plugin-theme-data": "2.0.0-alpha.25", - "@vuepress/shared": "2.0.0-alpha.25", - "@vuepress/utils": "2.0.0-alpha.25", + "@vuepress/client": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/plugin-active-header-links": "2.0.0-beta.0", + "@vuepress/plugin-back-to-top": "2.0.0-beta.0", + "@vuepress/plugin-container": "2.0.0-beta.0", + "@vuepress/plugin-git": "2.0.0-beta.0", + "@vuepress/plugin-medium-zoom": "2.0.0-beta.0", + "@vuepress/plugin-nprogress": "2.0.0-beta.0", + "@vuepress/plugin-palette": "2.0.0-beta.0", + "@vuepress/plugin-theme-data": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/utils": "2.0.0-beta.0", "sass": "^1.32.8", "sass-loader": "^11.0.1", "vue": "^3.0.7", diff --git a/packages/@vuepress/theme-vue/CHANGELOG.md b/packages/@vuepress/theme-vue/CHANGELOG.md index da2ffae5b9..e5786294fa 100644 --- a/packages/@vuepress/theme-vue/CHANGELOG.md +++ b/packages/@vuepress/theme-vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/theme-vue + + + + + # [2.0.0-alpha.26](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-02-24) **Note:** Version bump only for package @vuepress/theme-vue diff --git a/packages/@vuepress/theme-vue/package.json b/packages/@vuepress/theme-vue/package.json index 2f55331fea..f4a033c723 100644 --- a/packages/@vuepress/theme-vue/package.json +++ b/packages/@vuepress/theme-vue/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-vue", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "Vue theme of VuePress", "keywords": [ "vuepress-theme", @@ -28,7 +28,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/theme-default": "2.0.0-alpha.26" + "@vuepress/theme-default": "2.0.0-beta.0" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/utils/CHANGELOG.md b/packages/@vuepress/utils/CHANGELOG.md index 537d24f859..a1f3e2988a 100644 --- a/packages/@vuepress/utils/CHANGELOG.md +++ b/packages/@vuepress/utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package @vuepress/utils + + + + + # [2.0.0-alpha.25](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-02-20) **Note:** Version bump only for package @vuepress/utils diff --git a/packages/@vuepress/utils/package.json b/packages/@vuepress/utils/package.json index d7e288d204..e14b7cf6a3 100644 --- a/packages/@vuepress/utils/package.json +++ b/packages/@vuepress/utils/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/utils", - "version": "2.0.0-alpha.25", + "version": "2.0.0-beta.0", "description": "Utils package of VuePress", "keywords": [ "vuepress", @@ -29,7 +29,7 @@ "@types/debug": "^4.1.5", "@types/fs-extra": "^9.0.8", "@types/hash-sum": "^1.0.0", - "@vuepress/shared": "2.0.0-alpha.25", + "@vuepress/shared": "2.0.0-beta.0", "chalk": "^4.1.0", "debug": "^4.3.1", "fs-extra": "^9.1.0", diff --git a/packages/vuepress-vite/CHANGELOG.md b/packages/vuepress-vite/CHANGELOG.md new file mode 100644 index 0000000000..3be6d1039d --- /dev/null +++ b/packages/vuepress-vite/CHANGELOG.md @@ -0,0 +1,11 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + + +### Features + +* **vuepress-vite:** add vuepress-vite package ([03a6583](https://github.com/vuepress/vuepress-next/commit/03a658364d8c5f0b2510e10cd2bf8ec8bcbf41cb)) diff --git a/packages/vuepress-vite/package.json b/packages/vuepress-vite/package.json index 215851c8d7..1ffcbad18e 100644 --- a/packages/vuepress-vite/package.json +++ b/packages/vuepress-vite/package.json @@ -1,6 +1,6 @@ { "name": "vuepress-vite", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,9 +32,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-vite": "2.0.0-alpha.26", - "@vuepress/cli": "2.0.0-alpha.26", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/theme-default": "2.0.0-alpha.26" + "@vuepress/bundler-vite": "2.0.0-beta.0", + "@vuepress/cli": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/theme-default": "2.0.0-beta.0" } } diff --git a/packages/vuepress/CHANGELOG.md b/packages/vuepress/CHANGELOG.md index 61797baefd..d8cfdede13 100644 --- a/packages/vuepress/CHANGELOG.md +++ b/packages/vuepress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) + +**Note:** Version bump only for package vuepress + + + + + # [2.0.0-alpha.26](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-02-24) **Note:** Version bump only for package vuepress diff --git a/packages/vuepress/package.json b/packages/vuepress/package.json index c0aa663ceb..f212ffce0e 100644 --- a/packages/vuepress/package.json +++ b/packages/vuepress/package.json @@ -1,6 +1,6 @@ { "name": "vuepress", - "version": "2.0.0-alpha.26", + "version": "2.0.0-beta.0", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,9 +32,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-webpack": "2.0.0-alpha.26", - "@vuepress/cli": "2.0.0-alpha.26", - "@vuepress/core": "2.0.0-alpha.25", - "@vuepress/theme-default": "2.0.0-alpha.26" + "@vuepress/bundler-webpack": "2.0.0-beta.0", + "@vuepress/cli": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.0", + "@vuepress/theme-default": "2.0.0-beta.0" } } From 65467b74ed87a847db63041902ab091114b4e5e8 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 20:47:42 +0800 Subject: [PATCH 0710/1014] docs: update status --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6b3d862af7..4c6f795c0a 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,16 @@ [![npm](https://badgen.net/npm/v/vuepress/next)](https://www.npmjs.com/package/vuepress) [![license](https://badgen.net/github/license/vuepress/vuepress-next)](https://github.com/vuepress/vuepress-next/blob/main/LICENSE) -## Status: Alpha +## Status: Beta The codebase has been completely refactored with TypeScript. Some major changes: - Fully migrated to Vue 3 - Extract `@vuepress/cli` from `vuepress` package - Extract `@vuepress/client` from `@vuepress/core` package -- Extract `@vuepress/bundler-webpack` from `@vuepress/core` package and migrate to webpack 5 - - As webpack is decoupled with core, other bundlers are also possible to be supported - Extract `@vuepress/plugin-palette` from `@vuepress/core` package - stylus is no longer the default CSS pre-processor, and the way of styles customization should be determined by theme +- Extract `@vuepress/bundler-webpack` from `@vuepress/core` package and migrate to webpack 5 +- Provide `@vuepress/bundler-vite` for [Vite](https://vitejs.dev/) support The migration guide has not finished yet. For now you can check out the breaking changes list below as reference. From 0767546306924465d986d9d69b11ba56dcc5e6b2 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 22:19:11 +0800 Subject: [PATCH 0711/1014] build: stop generating source map files --- tsconfig.base.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsconfig.base.json b/tsconfig.base.json index cf2e262364..4f003c3c1b 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -2,7 +2,7 @@ "compilerOptions": { "composite": true, "declaration": true, - "declarationMap": true, + "declarationMap": false, "lib": ["DOM", "ES2020"], "module": "CommonJS", "moduleResolution": "node", @@ -11,7 +11,7 @@ "noImplicitAny": false, "resolveJsonModule": true, "skipLibCheck": true, - "sourceMap": true, + "sourceMap": false, "strict": true, "strictNullChecks": true, "target": "ES2018" From f4299d8828064e7fdde1cc7058fe339872ecd147 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 13 Mar 2021 22:25:51 +0800 Subject: [PATCH 0712/1014] build: publish v2.0.0-beta.1 --- CHANGELOG.md | 8 ++++++ lerna.json | 2 +- packages/@vuepress/bundler-vite/CHANGELOG.md | 8 ++++++ packages/@vuepress/bundler-vite/package.json | 10 +++---- .../@vuepress/bundler-webpack/CHANGELOG.md | 8 ++++++ .../@vuepress/bundler-webpack/package.json | 10 +++---- packages/@vuepress/cli/CHANGELOG.md | 8 ++++++ packages/@vuepress/cli/package.json | 6 ++--- packages/@vuepress/client/CHANGELOG.md | 8 ++++++ packages/@vuepress/client/package.json | 4 +-- packages/@vuepress/core/CHANGELOG.md | 8 ++++++ packages/@vuepress/core/package.json | 10 +++---- packages/@vuepress/markdown/CHANGELOG.md | 8 ++++++ packages/@vuepress/markdown/package.json | 6 ++--- .../plugin-active-header-links/CHANGELOG.md | 8 ++++++ .../plugin-active-header-links/package.json | 8 +++--- .../@vuepress/plugin-back-to-top/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-back-to-top/package.json | 6 ++--- .../@vuepress/plugin-container/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-container/package.json | 10 +++---- packages/@vuepress/plugin-debug/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-debug/package.json | 8 +++--- .../@vuepress/plugin-docsearch/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-docsearch/package.json | 10 +++---- packages/@vuepress/plugin-git/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-git/package.json | 4 +-- .../plugin-google-analytics/CHANGELOG.md | 8 ++++++ .../plugin-google-analytics/package.json | 8 +++--- .../@vuepress/plugin-medium-zoom/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-medium-zoom/package.json | 8 +++--- .../@vuepress/plugin-nprogress/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-nprogress/package.json | 8 +++--- .../@vuepress/plugin-palette/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-palette/package.json | 6 ++--- .../@vuepress/plugin-pwa-popup/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-pwa-popup/package.json | 12 ++++----- packages/@vuepress/plugin-pwa/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-pwa/package.json | 8 +++--- .../@vuepress/plugin-theme-data/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-theme-data/package.json | 10 +++---- packages/@vuepress/shared/CHANGELOG.md | 8 ++++++ packages/@vuepress/shared/package.json | 2 +- packages/@vuepress/theme-default/CHANGELOG.md | 8 ++++++ packages/@vuepress/theme-default/package.json | 26 +++++++++---------- packages/@vuepress/theme-vue/CHANGELOG.md | 8 ++++++ packages/@vuepress/theme-vue/package.json | 4 +-- packages/@vuepress/utils/CHANGELOG.md | 8 ++++++ packages/@vuepress/utils/package.json | 4 +-- packages/vuepress-vite/CHANGELOG.md | 8 ++++++ packages/vuepress-vite/package.json | 10 +++---- packages/vuepress/CHANGELOG.md | 8 ++++++ packages/vuepress/package.json | 10 +++---- 52 files changed, 313 insertions(+), 105 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a79b3a76a..1b4c944b83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package vuepress-next + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/lerna.json b/lerna.json index ade6aea8bc..71c0ff7aec 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,7 @@ { "npmClient": "yarn", "useWorkspaces": true, - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "command": { "version": { "allowBranch": "main", diff --git a/packages/@vuepress/bundler-vite/CHANGELOG.md b/packages/@vuepress/bundler-vite/CHANGELOG.md index 744565aa35..0a98d5fc5e 100644 --- a/packages/@vuepress/bundler-vite/CHANGELOG.md +++ b/packages/@vuepress/bundler-vite/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/bundler-vite + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index 6a9876170d..0d04e34046 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-vite", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Bundler vite package of VuePress", "keywords": [ "vuepress-bundler", @@ -31,10 +31,10 @@ "@vitejs/plugin-vue": "^1.1.5", "@vue/compiler-sfc": "^3.0.7", "@vue/server-renderer": "^3.0.7", - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "rollup": "^2.41.2", "vite": "2.0.5", "vue": "^3.0.7", diff --git a/packages/@vuepress/bundler-webpack/CHANGELOG.md b/packages/@vuepress/bundler-webpack/CHANGELOG.md index 63e8496e0c..5425eb56e3 100644 --- a/packages/@vuepress/bundler-webpack/CHANGELOG.md +++ b/packages/@vuepress/bundler-webpack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/bundler-webpack + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/bundler-webpack diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index a923d750e7..df3a2a5aae 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-webpack", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Bundler webpack package of VuePress", "keywords": [ "vuepress-bundler", @@ -32,10 +32,10 @@ "@types/webpack-env": "^1.16.0", "@vue/compiler-sfc": "^3.0.7", "@vue/server-renderer": "^3.0.7", - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "autoprefixer": "^10.2.4", "copy-webpack-plugin": "^7.0.0", "css-loader": "^5.1.1", diff --git a/packages/@vuepress/cli/CHANGELOG.md b/packages/@vuepress/cli/CHANGELOG.md index ad6619c7e1..f2e60040ca 100644 --- a/packages/@vuepress/cli/CHANGELOG.md +++ b/packages/@vuepress/cli/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/cli + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index e30a99b522..d903d01641 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/cli", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "CLI package of VuePress", "keywords": [ "vuepress", @@ -30,8 +30,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "cac": "^6.7.2", "chokidar": "^3.5.1", "envinfo": "^7.7.4", diff --git a/packages/@vuepress/client/CHANGELOG.md b/packages/@vuepress/client/CHANGELOG.md index 21fc165982..dc3c77bbf4 100644 --- a/packages/@vuepress/client/CHANGELOG.md +++ b/packages/@vuepress/client/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/client + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/@vuepress/client/package.json b/packages/@vuepress/client/package.json index 7d73193179..3e9e49f5dd 100644 --- a/packages/@vuepress/client/package.json +++ b/packages/@vuepress/client/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/client", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Client package of VuePress", "keywords": [ "vuepress", @@ -28,7 +28,7 @@ "copy": "cpx \"src/**/*.{d.ts,css}\" lib" }, "dependencies": { - "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.1", "vue": "^3.0.7", "vue-router": "^4.0.4" }, diff --git a/packages/@vuepress/core/CHANGELOG.md b/packages/@vuepress/core/CHANGELOG.md index 14973bccd3..712bafe3d1 100644 --- a/packages/@vuepress/core/CHANGELOG.md +++ b/packages/@vuepress/core/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/core + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/@vuepress/core/package.json b/packages/@vuepress/core/package.json index fa6803a3f3..c8c642a2ac 100644 --- a/packages/@vuepress/core/package.json +++ b/packages/@vuepress/core/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/core", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Core package of VuePress", "keywords": [ "vuepress", @@ -26,10 +26,10 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/markdown": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/markdown": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "gray-matter": "^4.0.2", "toml": "^3.0.0" }, diff --git a/packages/@vuepress/markdown/CHANGELOG.md b/packages/@vuepress/markdown/CHANGELOG.md index feff87151a..1787573b94 100644 --- a/packages/@vuepress/markdown/CHANGELOG.md +++ b/packages/@vuepress/markdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/markdown + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/markdown diff --git a/packages/@vuepress/markdown/package.json b/packages/@vuepress/markdown/package.json index df4d4387b4..a0a6592223 100644 --- a/packages/@vuepress/markdown/package.json +++ b/packages/@vuepress/markdown/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/markdown", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Markdown package of VuePress", "keywords": [ "vuepress", @@ -27,8 +27,8 @@ }, "dependencies": { "@types/markdown-it": "^12.0.1", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "markdown-it": "^12.0.4", "markdown-it-anchor": "^7.0.2", "markdown-it-emoji": "^2.0.0", diff --git a/packages/@vuepress/plugin-active-header-links/CHANGELOG.md b/packages/@vuepress/plugin-active-header-links/CHANGELOG.md index c0e4d80521..2c9c9f8273 100644 --- a/packages/@vuepress/plugin-active-header-links/CHANGELOG.md +++ b/packages/@vuepress/plugin-active-header-links/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-active-header-links + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-active-header-links diff --git a/packages/@vuepress/plugin-active-header-links/package.json b/packages/@vuepress/plugin-active-header-links/package.json index 7e85ce3c31..051fea7237 100644 --- a/packages/@vuepress/plugin-active-header-links/package.json +++ b/packages/@vuepress/plugin-active-header-links/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-active-header-links", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - active header links", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "ts-debounce": "^3.0.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-back-to-top/CHANGELOG.md b/packages/@vuepress/plugin-back-to-top/CHANGELOG.md index 841f5e7e52..8f19c980cd 100644 --- a/packages/@vuepress/plugin-back-to-top/CHANGELOG.md +++ b/packages/@vuepress/plugin-back-to-top/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-back-to-top + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-back-to-top diff --git a/packages/@vuepress/plugin-back-to-top/package.json b/packages/@vuepress/plugin-back-to-top/package.json index 8ad661f4d7..b96c30867a 100644 --- a/packages/@vuepress/plugin-back-to-top/package.json +++ b/packages/@vuepress/plugin-back-to-top/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-back-to-top", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - back to top", "keywords": [ "vuepress-plugin", @@ -29,8 +29,8 @@ "copy": "cpx \"src/**/*.vue\" lib" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "ts-debounce": "^3.0.0", "vue": "^3.0.7" }, diff --git a/packages/@vuepress/plugin-container/CHANGELOG.md b/packages/@vuepress/plugin-container/CHANGELOG.md index 144a00978e..6f02b05eac 100644 --- a/packages/@vuepress/plugin-container/CHANGELOG.md +++ b/packages/@vuepress/plugin-container/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-container + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-container diff --git a/packages/@vuepress/plugin-container/package.json b/packages/@vuepress/plugin-container/package.json index 53f386c1ae..6b19d35258 100644 --- a/packages/@vuepress/plugin-container/package.json +++ b/packages/@vuepress/plugin-container/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-container", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - markdown container", "keywords": [ "vuepress-plugin", @@ -30,10 +30,10 @@ }, "dependencies": { "@types/markdown-it": "^12.0.1", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/markdown": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/markdown": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "markdown-it": "^12.0.4", "markdown-it-container": "^3.0.0" }, diff --git a/packages/@vuepress/plugin-debug/CHANGELOG.md b/packages/@vuepress/plugin-debug/CHANGELOG.md index 3faac2e7ba..334910a2a3 100644 --- a/packages/@vuepress/plugin-debug/CHANGELOG.md +++ b/packages/@vuepress/plugin-debug/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-debug + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-debug diff --git a/packages/@vuepress/plugin-debug/package.json b/packages/@vuepress/plugin-debug/package.json index 035ad1089b..9be489c758 100644 --- a/packages/@vuepress/plugin-debug/package.json +++ b/packages/@vuepress/plugin-debug/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-debug", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - debug", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "copy": "cpx \"src/**/*.css\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "vue": "^3.0.7", "vue-router": "^4.0.4" }, diff --git a/packages/@vuepress/plugin-docsearch/CHANGELOG.md b/packages/@vuepress/plugin-docsearch/CHANGELOG.md index 87221ab566..4ef9fc5a80 100644 --- a/packages/@vuepress/plugin-docsearch/CHANGELOG.md +++ b/packages/@vuepress/plugin-docsearch/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-docsearch + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-docsearch diff --git a/packages/@vuepress/plugin-docsearch/package.json b/packages/@vuepress/plugin-docsearch/package.json index 9dc6575a55..3a5ff2ffe3 100644 --- a/packages/@vuepress/plugin-docsearch/package.json +++ b/packages/@vuepress/plugin-docsearch/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-docsearch", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - docsearch", "keywords": [ "vuepress-plugin", @@ -33,10 +33,10 @@ "@docsearch/css": "3.0.0-alpha.34", "@docsearch/js": "3.0.0-alpha.34", "@types/react": "^17.0.0", - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "preact": "^10.0.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-git/CHANGELOG.md b/packages/@vuepress/plugin-git/CHANGELOG.md index d7cdfa4508..80a491759e 100644 --- a/packages/@vuepress/plugin-git/CHANGELOG.md +++ b/packages/@vuepress/plugin-git/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-git + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-git diff --git a/packages/@vuepress/plugin-git/package.json b/packages/@vuepress/plugin-git/package.json index cda72877fb..5b9764c334 100644 --- a/packages/@vuepress/plugin-git/package.json +++ b/packages/@vuepress/plugin-git/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-git", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - git", "keywords": [ "vuepress-plugin", @@ -28,7 +28,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.0", + "@vuepress/core": "2.0.0-beta.1", "execa": "^4.1.0" }, "publishConfig": { diff --git a/packages/@vuepress/plugin-google-analytics/CHANGELOG.md b/packages/@vuepress/plugin-google-analytics/CHANGELOG.md index 329dc6c9dc..13094f9025 100644 --- a/packages/@vuepress/plugin-google-analytics/CHANGELOG.md +++ b/packages/@vuepress/plugin-google-analytics/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-google-analytics + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/@vuepress/plugin-google-analytics/package.json b/packages/@vuepress/plugin-google-analytics/package.json index 4c52071652..23dd369435 100644 --- a/packages/@vuepress/plugin-google-analytics/package.json +++ b/packages/@vuepress/plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-google-analytics", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - google-analytics", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0" + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md b/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md index cb6566ca15..5fc3e71cb8 100644 --- a/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md +++ b/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-medium-zoom + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-medium-zoom diff --git a/packages/@vuepress/plugin-medium-zoom/package.json b/packages/@vuepress/plugin-medium-zoom/package.json index 4626886731..738eb1a06c 100644 --- a/packages/@vuepress/plugin-medium-zoom/package.json +++ b/packages/@vuepress/plugin-medium-zoom/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-medium-zoom", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - medium-zoom", "keywords": [ "vuepress-plugin", @@ -31,9 +31,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "medium-zoom": "^1.0.6", "vue": "^3.0.7" }, diff --git a/packages/@vuepress/plugin-nprogress/CHANGELOG.md b/packages/@vuepress/plugin-nprogress/CHANGELOG.md index c2d510d43c..11bff5bb0f 100644 --- a/packages/@vuepress/plugin-nprogress/CHANGELOG.md +++ b/packages/@vuepress/plugin-nprogress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-nprogress + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-nprogress diff --git a/packages/@vuepress/plugin-nprogress/package.json b/packages/@vuepress/plugin-nprogress/package.json index 8adb4fc418..fa95bd7af7 100644 --- a/packages/@vuepress/plugin-nprogress/package.json +++ b/packages/@vuepress/plugin-nprogress/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-nprogress", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - nprogress", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "nprogress": "^0.2.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-palette/CHANGELOG.md b/packages/@vuepress/plugin-palette/CHANGELOG.md index 7c16fed0ad..68cbaec672 100644 --- a/packages/@vuepress/plugin-palette/CHANGELOG.md +++ b/packages/@vuepress/plugin-palette/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-palette + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-palette diff --git a/packages/@vuepress/plugin-palette/package.json b/packages/@vuepress/plugin-palette/package.json index c6e3f1a2b1..705b69fdd3 100644 --- a/packages/@vuepress/plugin-palette/package.json +++ b/packages/@vuepress/plugin-palette/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-palette", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - palette", "keywords": [ "vuepress-plugin", @@ -33,8 +33,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0" + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md b/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md index 5256d14346..47a1c7c7c7 100644 --- a/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md +++ b/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-pwa-popup + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-pwa-popup diff --git a/packages/@vuepress/plugin-pwa-popup/package.json b/packages/@vuepress/plugin-pwa-popup/package.json index 9f7b49029c..36e6484695 100644 --- a/packages/@vuepress/plugin-pwa-popup/package.json +++ b/packages/@vuepress/plugin-pwa-popup/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-pwa-popup", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - PWA popup", "keywords": [ "vuepress-plugin", @@ -31,11 +31,11 @@ "copy": "cpx \"src/**/*.css\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/plugin-pwa": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0" + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/plugin-pwa": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-pwa/CHANGELOG.md b/packages/@vuepress/plugin-pwa/CHANGELOG.md index 344e9224ab..febf9660d4 100644 --- a/packages/@vuepress/plugin-pwa/CHANGELOG.md +++ b/packages/@vuepress/plugin-pwa/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-pwa + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-pwa diff --git a/packages/@vuepress/plugin-pwa/package.json b/packages/@vuepress/plugin-pwa/package.json index a70c386639..3d64ee91bd 100644 --- a/packages/@vuepress/plugin-pwa/package.json +++ b/packages/@vuepress/plugin-pwa/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-pwa", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - progressive web application", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "mitt": "^2.1.0", "register-service-worker": "^1.7.2", "vue": "^3.0.7", diff --git a/packages/@vuepress/plugin-theme-data/CHANGELOG.md b/packages/@vuepress/plugin-theme-data/CHANGELOG.md index 21dbc6ff60..a7f271bcb7 100644 --- a/packages/@vuepress/plugin-theme-data/CHANGELOG.md +++ b/packages/@vuepress/plugin-theme-data/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/plugin-theme-data + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/@vuepress/plugin-theme-data/package.json b/packages/@vuepress/plugin-theme-data/package.json index 5cda61c919..fda172377b 100644 --- a/packages/@vuepress/plugin-theme-data/package.json +++ b/packages/@vuepress/plugin-theme-data/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-theme-data", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "VuePress plugin - theme data", "keywords": [ "vuepress-plugin", @@ -29,10 +29,10 @@ "copy": "cpx \"src/**/*.d.ts\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0" + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/shared/CHANGELOG.md b/packages/@vuepress/shared/CHANGELOG.md index a20603d4a2..faabe942aa 100644 --- a/packages/@vuepress/shared/CHANGELOG.md +++ b/packages/@vuepress/shared/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/shared + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/shared diff --git a/packages/@vuepress/shared/package.json b/packages/@vuepress/shared/package.json index ee3ae3e05a..89cb352370 100644 --- a/packages/@vuepress/shared/package.json +++ b/packages/@vuepress/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/shared", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Utils that shared between VuePress node and client", "keywords": [ "vuepress", diff --git a/packages/@vuepress/theme-default/CHANGELOG.md b/packages/@vuepress/theme-default/CHANGELOG.md index bec2e36753..c2aaa21414 100644 --- a/packages/@vuepress/theme-default/CHANGELOG.md +++ b/packages/@vuepress/theme-default/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/theme-default + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/@vuepress/theme-default/package.json b/packages/@vuepress/theme-default/package.json index e4f9dbe2f0..76a9c1cc91 100644 --- a/packages/@vuepress/theme-default/package.json +++ b/packages/@vuepress/theme-default/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-default", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Default theme of VuePress", "keywords": [ "vuepress-theme", @@ -29,18 +29,18 @@ "copy": "cpx \"src/**/*.{d.ts,vue,scss}\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/plugin-active-header-links": "2.0.0-beta.0", - "@vuepress/plugin-back-to-top": "2.0.0-beta.0", - "@vuepress/plugin-container": "2.0.0-beta.0", - "@vuepress/plugin-git": "2.0.0-beta.0", - "@vuepress/plugin-medium-zoom": "2.0.0-beta.0", - "@vuepress/plugin-nprogress": "2.0.0-beta.0", - "@vuepress/plugin-palette": "2.0.0-beta.0", - "@vuepress/plugin-theme-data": "2.0.0-beta.0", - "@vuepress/shared": "2.0.0-beta.0", - "@vuepress/utils": "2.0.0-beta.0", + "@vuepress/client": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/plugin-active-header-links": "2.0.0-beta.1", + "@vuepress/plugin-back-to-top": "2.0.0-beta.1", + "@vuepress/plugin-container": "2.0.0-beta.1", + "@vuepress/plugin-git": "2.0.0-beta.1", + "@vuepress/plugin-medium-zoom": "2.0.0-beta.1", + "@vuepress/plugin-nprogress": "2.0.0-beta.1", + "@vuepress/plugin-palette": "2.0.0-beta.1", + "@vuepress/plugin-theme-data": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/utils": "2.0.0-beta.1", "sass": "^1.32.8", "sass-loader": "^11.0.1", "vue": "^3.0.7", diff --git a/packages/@vuepress/theme-vue/CHANGELOG.md b/packages/@vuepress/theme-vue/CHANGELOG.md index e5786294fa..ea9c6ba273 100644 --- a/packages/@vuepress/theme-vue/CHANGELOG.md +++ b/packages/@vuepress/theme-vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/theme-vue + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/theme-vue diff --git a/packages/@vuepress/theme-vue/package.json b/packages/@vuepress/theme-vue/package.json index f4a033c723..3f193f328a 100644 --- a/packages/@vuepress/theme-vue/package.json +++ b/packages/@vuepress/theme-vue/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-vue", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Vue theme of VuePress", "keywords": [ "vuepress-theme", @@ -28,7 +28,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/theme-default": "2.0.0-beta.0" + "@vuepress/theme-default": "2.0.0-beta.1" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/utils/CHANGELOG.md b/packages/@vuepress/utils/CHANGELOG.md index a1f3e2988a..b5b405bfd1 100644 --- a/packages/@vuepress/utils/CHANGELOG.md +++ b/packages/@vuepress/utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package @vuepress/utils + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package @vuepress/utils diff --git a/packages/@vuepress/utils/package.json b/packages/@vuepress/utils/package.json index e14b7cf6a3..d40d49d6c3 100644 --- a/packages/@vuepress/utils/package.json +++ b/packages/@vuepress/utils/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/utils", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Utils package of VuePress", "keywords": [ "vuepress", @@ -29,7 +29,7 @@ "@types/debug": "^4.1.5", "@types/fs-extra": "^9.0.8", "@types/hash-sum": "^1.0.0", - "@vuepress/shared": "2.0.0-beta.0", + "@vuepress/shared": "2.0.0-beta.1", "chalk": "^4.1.0", "debug": "^4.3.1", "fs-extra": "^9.1.0", diff --git a/packages/vuepress-vite/CHANGELOG.md b/packages/vuepress-vite/CHANGELOG.md index 3be6d1039d..3dca398783 100644 --- a/packages/vuepress-vite/CHANGELOG.md +++ b/packages/vuepress-vite/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package vuepress-vite + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) diff --git a/packages/vuepress-vite/package.json b/packages/vuepress-vite/package.json index 1ffcbad18e..d941171fec 100644 --- a/packages/vuepress-vite/package.json +++ b/packages/vuepress-vite/package.json @@ -1,6 +1,6 @@ { "name": "vuepress-vite", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,9 +32,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-vite": "2.0.0-beta.0", - "@vuepress/cli": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/theme-default": "2.0.0-beta.0" + "@vuepress/bundler-vite": "2.0.0-beta.1", + "@vuepress/cli": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/theme-default": "2.0.0-beta.1" } } diff --git a/packages/vuepress/CHANGELOG.md b/packages/vuepress/CHANGELOG.md index d8cfdede13..4852093bf2 100644 --- a/packages/vuepress/CHANGELOG.md +++ b/packages/vuepress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) + +**Note:** Version bump only for package vuepress + + + + + # [2.0.0-beta.0](https://github.com/vuepress/vuepress-next/compare/v2.0.0-alpha.26...v2.0.0-beta.0) (2021-03-13) **Note:** Version bump only for package vuepress diff --git a/packages/vuepress/package.json b/packages/vuepress/package.json index f212ffce0e..7e98835e53 100644 --- a/packages/vuepress/package.json +++ b/packages/vuepress/package.json @@ -1,6 +1,6 @@ { "name": "vuepress", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.1", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,9 +32,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-webpack": "2.0.0-beta.0", - "@vuepress/cli": "2.0.0-beta.0", - "@vuepress/core": "2.0.0-beta.0", - "@vuepress/theme-default": "2.0.0-beta.0" + "@vuepress/bundler-webpack": "2.0.0-beta.1", + "@vuepress/cli": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.1", + "@vuepress/theme-default": "2.0.0-beta.1" } } From 055b280a8488c42614702533cc9eb8fb2852c71b Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 12:25:18 +0800 Subject: [PATCH 0713/1014] fix(bundler-vite): workaround for vitejs/vite#2503 --- .../bundler-vite/src/plugin/createPlugin.ts | 2 ++ .../src/plugin/createWorkaroundPlugin.ts | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/@vuepress/bundler-vite/src/plugin/createWorkaroundPlugin.ts diff --git a/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts index dec19774e0..2ab04bdf27 100644 --- a/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts +++ b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts @@ -3,6 +3,7 @@ import createVuePlugin from '@vitejs/plugin-vue' import type { App } from '@vuepress/core' import { fs } from '@vuepress/utils' import type { ViteBundlerOptions } from '../types' +import { createWorkaroundPlugin } from './createWorkaroundPlugin' import { resolveAlias } from './resolveAlias' import { resolveDefine } from './resolveDefine' @@ -18,6 +19,7 @@ export const createPlugin = ({ isBuild: boolean }): Plugin[] => [ createVuePlugin(options.vuePluginOptions), + createWorkaroundPlugin(), { name: 'vuepress', diff --git a/packages/@vuepress/bundler-vite/src/plugin/createWorkaroundPlugin.ts b/packages/@vuepress/bundler-vite/src/plugin/createWorkaroundPlugin.ts new file mode 100644 index 0000000000..be3d4fb941 --- /dev/null +++ b/packages/@vuepress/bundler-vite/src/plugin/createWorkaroundPlugin.ts @@ -0,0 +1,21 @@ +import type { Plugin, ViteDevServer, DepOptimizationMetadata } from 'vite' + +export const createWorkaroundPlugin = (): Plugin => { + let server: + | (ViteDevServer & { _optimizeDepsMetadata?: DepOptimizationMetadata }) + | null + return { + name: 'vuepress:workaround', + enforce: 'pre', + configureServer(_server) { + server = _server + }, + resolveId() { + // workaround for https://github.com/vitejs/vite/issues/2503 + if (server?._optimizeDepsMetadata?.browserHash) { + server._optimizeDepsMetadata.browserHash = '' + } + return null + }, + } +} From 57089344f87bf381f8e6f2711eb6df9364c72432 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 13:03:28 +0800 Subject: [PATCH 0714/1014] fix(bundler-vite): avoid optimizing client package --- packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts index 2ab04bdf27..9eaac96162 100644 --- a/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts +++ b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts @@ -32,6 +32,10 @@ export const createPlugin = ({ resolve: { alias: resolveAlias({ app }), }, + optimizeDeps: { + include: ['@vuepress/shared'], + exclude: ['@vuepress/client'], + }, }), configureServer(server) { From 2aeb2bf9b70b149bf2e56d2fd1b593e6628d72dd Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 13:10:04 +0800 Subject: [PATCH 0715/1014] fix(plugin-nprogress): always optimize nprogress with vite --- packages/@vuepress/plugin-nprogress/src/index.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/@vuepress/plugin-nprogress/src/index.ts b/packages/@vuepress/plugin-nprogress/src/index.ts index bc1e9f9153..a674726513 100644 --- a/packages/@vuepress/plugin-nprogress/src/index.ts +++ b/packages/@vuepress/plugin-nprogress/src/index.ts @@ -7,6 +7,19 @@ export const nprogressPlugin: Plugin = { name: '@vuepress/plugin-nprogress', clientAppSetupFiles: path.resolve(__dirname, './clientAppSetup.js'), + + onInitialized(app) { + if (app.options.bundler.endsWith('vite')) { + app.options.bundlerConfig.viteOptions = require('vite').mergeConfig( + app.options.bundlerConfig.viteOptions, + { + optimizeDeps: { + include: ['nprogress'], + }, + } + ) + } + }, } export default nprogressPlugin From 5026d5cf0c140d5d9dafd6a530f4eae164bc6c40 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 13:52:01 +0800 Subject: [PATCH 0716/1014] build: bump dev-deps --- package.json | 16 ++-- yarn.lock | 240 ++++++++++++++++++++++++++------------------------- 2 files changed, 131 insertions(+), 125 deletions(-) diff --git a/package.json b/package.json index 58b4df5999..dc33b04d0d 100644 --- a/package.json +++ b/package.json @@ -32,26 +32,26 @@ }, "prettier": "prettier-config-vuepress", "devDependencies": { - "@commitlint/cli": "^12.0.1", - "@commitlint/config-conventional": "^12.0.1", + "@commitlint/cli": "^12.1.0", + "@commitlint/config-conventional": "^12.1.0", "@types/jest": "^26.0.20", "anywhere": "^1.5.0", "chokidar": "^3.5.1", "cpx2": "^3.0.0", "cross-env": "^7.0.3", - "eslint": "^7.21.0", - "eslint-config-vuepress": "^3.2.0", - "eslint-config-vuepress-typescript": "^2.2.0", + "eslint": "^7.22.0", + "eslint-config-vuepress": "^3.2.1", + "eslint-config-vuepress-typescript": "^2.2.1", "husky": "^4.3.8", "jest": "^26.6.3", "jest-serializer-vue": "^2.0.2", "lerna": "^4.0.0", "lint-staged": "^10.5.4", "prettier": "^2.2.1", - "prettier-config-vuepress": "^1.1.1", + "prettier-config-vuepress": "^1.2.0", "rimraf": "^3.0.2", "sort-package-json": "^1.49.0", - "ts-jest": "^26.4.4", - "typescript": "^4.2.2" + "ts-jest": "^26.5.3", + "typescript": "^4.2.3" } } diff --git a/yarn.lock b/yarn.lock index 5af12e4e55..d6595ca189 100644 --- a/yarn.lock +++ b/yarn.lock @@ -964,15 +964,15 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@commitlint/cli@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-12.0.1.tgz#8960e34e8f1aed8b2ea50f223ee817fdf2264ffb" - integrity sha512-V+cMYNHJOr40XT9Kvz3Vrz1Eh7QE1rjQrUbifawDAqcOrBJFuoXwU2SAcRtYFCSqFy9EhbreQGhZFs8dYb90KA== +"@commitlint/cli@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-12.1.0.tgz#6f960b7f89a15ffdbabb2cbecc45514944218906" + integrity sha512-VjDjQ0kSQASvTjk1pKaigHPXCw99hye/laPbOjpX4AVJXJjMm6oV1EitZHatINImDUgVLVLpG2Y9DI/bLcVjcg== dependencies: "@commitlint/format" "^12.0.1" - "@commitlint/lint" "^12.0.1" - "@commitlint/load" "^12.0.1" - "@commitlint/read" "^12.0.1" + "@commitlint/lint" "^12.1.0" + "@commitlint/load" "^12.1.0" + "@commitlint/read" "^12.1.0" "@commitlint/types" "^12.0.1" get-stdin "8.0.0" lodash "^4.17.19" @@ -980,10 +980,10 @@ resolve-global "1.0.0" yargs "^16.2.0" -"@commitlint/config-conventional@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-12.0.1.tgz#7bf3bbf68bda967c5165135ebe8f2055decf1a83" - integrity sha512-1ZhB135lh47zVmf1orwcjxuKuam11fJIH/bdVxW9XiQv8XPwC6iIp19knfl8FcOT78AVBnes1z6EVxgUeP2/4Q== +"@commitlint/config-conventional@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-12.1.0.tgz#be8c8b150d6dd7bd81f59b6def39d1f938fff53c" + integrity sha512-kBQUO9XVyMSOPAFalnwrrvMODLvTGOpLcSkrTCgNChAo7w0FDk9ZWK5SnPfURR6/2A2bu3nCbJsfcYUJ0B7p2g== dependencies: conventional-changelog-conventionalcommits "^4.3.1" @@ -1008,28 +1008,28 @@ "@commitlint/types" "^12.0.1" chalk "^4.0.0" -"@commitlint/is-ignored@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-12.0.1.tgz#0e59b0524e16300b1d9d62f8c138f083f22ebf9a" - integrity sha512-AplfLn5mX/kWTIiSolcOhTYcgphuGLX8FUr+HmyHBEqUkO36jt0z9caysH47fqU71ePtH63v1DWm+RYQ5RPDjg== +"@commitlint/is-ignored@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-12.1.0.tgz#26f0d9fb14dff50e66f6ffedc9408dee513783ac" + integrity sha512-q8urjMNTKqvQzKOn4qLUp30vM6TK8Bxeu7lUfOrevmxuAGsIN5dr/preeFvFstP4hYIEIzrr8A2ZADCp6RSd9A== dependencies: "@commitlint/types" "^12.0.1" semver "7.3.4" -"@commitlint/lint@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-12.0.1.tgz#a88b01c81cb6ca1867bd3d8fd288ba30017c2b7d" - integrity sha512-1lKyRCq4ahJrY+Xxo8LsqCbALeJkodtEfpmYHeA5HpPMnK7lRSplLqOLcTCjoPfd4vO+gl6aDEZN+ow3YGQBOg== +"@commitlint/lint@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-12.1.0.tgz#11b1d72982a67575ea2f666ec1fd88c3f193e925" + integrity sha512-RZEdLZKx+JIBMG4HOemlgU04JQGHU9FZALbjscHZYBofnFfxr95izdP6n5sVIK542/BYpcwXWhqQ06jS8f7U5g== dependencies: - "@commitlint/is-ignored" "^12.0.1" - "@commitlint/parse" "^12.0.1" - "@commitlint/rules" "^12.0.1" + "@commitlint/is-ignored" "^12.1.0" + "@commitlint/parse" "^12.1.0" + "@commitlint/rules" "^12.1.0" "@commitlint/types" "^12.0.1" -"@commitlint/load@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.0.1.tgz#4d180fc88e5b4cfcb476a245d899f85154137502" - integrity sha512-dX8KdCWn7w0bTkkk3zKQpe9X8vsTRa5EM+1ffF313wCX9b6tGa9vujhEHCkSzKAbbE2tFV64CHZygE7rtlHdIA== +"@commitlint/load@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.1.0.tgz#ac18ad1b80e239551ad63209d660a04f3950cb58" + integrity sha512-dMQainAoKsqFFY6+BdeoCSqiiG9Y9xsqCUJfICkOUx+kzrRrlANpT/Leyd8M5RYmZiIIrxGVUKfa1c/DTaOakQ== dependencies: "@commitlint/execute-rule" "^12.0.1" "@commitlint/resolve-extends" "^12.0.1" @@ -1039,24 +1039,24 @@ lodash "^4.17.19" resolve-from "^5.0.0" -"@commitlint/message@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-12.0.1.tgz#caff6743db78c30a063809501cf4b835c3ce7fa6" - integrity sha512-fXuoxRC+NT1wEQi6p8oHfT7wvWIRgTk+udlRJnWTjmMpiYzVnMmmZfasdShirWr4TtxQtMyL+5DVgh7Y98kURw== +"@commitlint/message@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-12.1.0.tgz#661d92715dafa2251d9c46563a243acc2bbd286c" + integrity sha512-5kc4MYWJUV2npn4QQnDWr8B1osB8o/QEPnWxjnCc2JD/PMDR8svt2ja+dyjZQcLC+9Ta1G2Tu6dy1LLhyTsghw== -"@commitlint/parse@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-12.0.1.tgz#ba8641f53e15b523808ba2eaa48c1bf0129c91c4" - integrity sha512-7oEGASmzBnHir5jSIR7KephXrKh7rIi9a6RpH1tOT+CIENYvhe8EDtIy29qMt+RLa2LlaPF7YrAgaJRfzG0YDQ== +"@commitlint/parse@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-12.1.0.tgz#0bb7169e261af070190077a4aca367373c37f7a0" + integrity sha512-n3y6MxsbmsXo/eCDheN1hVsNrhQ7v9vREdLkX7MWnjnrZhD4jyMQ1DfWpd6Fo5ss0gzpfeS/HTXTgkU1S2V8DQ== dependencies: "@commitlint/types" "^12.0.1" conventional-changelog-angular "^5.0.11" conventional-commits-parser "^3.0.0" -"@commitlint/read@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-12.0.1.tgz#41f3295ed9f451d4c65223cd37ddd59ef714bddb" - integrity sha512-baa0YeD4QOctEuthLpExQSi9xPiw0kDPfUVHqp8I88iuIXJECeS8S1+1GBiz89e8dLN9zmEE+sN9vtJHdAp9YA== +"@commitlint/read@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-12.1.0.tgz#5d691e7fdc6397dd3dbc1ee8cb16b4d4f25a55d2" + integrity sha512-BXD0U/qFwPQtSOOZpD46pdhDGJ5eCVLwt41So8FdLidb28YWKA1O7Zb9CWCirG/eN42axfSNhz7XY1mD5gNa3Q== dependencies: "@commitlint/top-level" "^12.0.1" "@commitlint/types" "^12.0.1" @@ -1073,13 +1073,13 @@ resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-12.0.1.tgz#1c81345f468597656141338a493d5e426e44dab9" - integrity sha512-A5O0ubNGugZR9WWxk5IVOLo07lpdUwhG5WkAW2lYpgZ7Z/2U4PLob9b4Ih1eHbQu+gnVeFr91k7F0DrpM7B8EQ== +"@commitlint/rules@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-12.1.0.tgz#da612ffda4992ac1c30589f777f92b73f97460cd" + integrity sha512-jVuF/l60u+FBde2tto0iiFsAj0RVlKDkeENEQ6hQjdYNAxeOV7dUBndTY9vmhmCfL928sHBqRGTicdLwHHgSvA== dependencies: "@commitlint/ensure" "^12.0.1" - "@commitlint/message" "^12.0.1" + "@commitlint/message" "^12.1.0" "@commitlint/to-lines" "^12.0.1" "@commitlint/types" "^12.0.1" @@ -2462,7 +2462,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@26.x", "@types/jest@^26.0.20": +"@types/jest@^26.0.20": version "26.0.20" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== @@ -2622,12 +2622,12 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz#2caf6a79dd19c3853b8d39769a27fccb24e4e651" - integrity sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ== + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.17.0.tgz#6f856eca4e6a52ce9cf127dfd349096ad936aa2d" + integrity sha512-/fKFDcoHg8oNan39IKFOb5WmV7oWhQe1K6CDaAVfJaNWEhmfqlA24g+u1lqU5bMH7zuNasfMId4LaYWC5ijRLw== dependencies: - "@typescript-eslint/experimental-utils" "4.16.1" - "@typescript-eslint/scope-manager" "4.16.1" + "@typescript-eslint/experimental-utils" "4.17.0" + "@typescript-eslint/scope-manager" "4.17.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -2635,60 +2635,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz#da7a396dc7d0e01922acf102b76efff17320b328" - integrity sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ== +"@typescript-eslint/experimental-utils@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.17.0.tgz#762c44aaa1a6a3c05b6d63a8648fb89b89f84c80" + integrity sha512-ZR2NIUbnIBj+LGqCFGQ9yk2EBQrpVVFOh9/Kd0Lm6gLpSAcCuLLe5lUCibKGCqyH9HPwYC0GIJce2O1i8VYmWA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.16.1" - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/typescript-estree" "4.16.1" + "@typescript-eslint/scope-manager" "4.17.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/typescript-estree" "4.17.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.16.1.tgz#3bbd3234dd3c5b882b2bcd9899bc30e1e1586d2a" - integrity sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg== + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.17.0.tgz#141b647ffc72ebebcbf9b0fe6087f65b706d3215" + integrity sha512-KYdksiZQ0N1t+6qpnl6JeK9ycCFprS9xBAiIrw4gSphqONt8wydBw4BXJi3C11ywZmyHulvMaLjWsxDjUSDwAw== dependencies: - "@typescript-eslint/scope-manager" "4.16.1" - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/typescript-estree" "4.16.1" + "@typescript-eslint/scope-manager" "4.17.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/typescript-estree" "4.17.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz#244e2006bc60cfe46987e9987f4ff49c9e3f00d5" - integrity sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw== +"@typescript-eslint/scope-manager@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.17.0.tgz#f4edf94eff3b52a863180f7f89581bf963e3d37d" + integrity sha512-OJ+CeTliuW+UZ9qgULrnGpPQ1bhrZNFpfT/Bc0pzNeyZwMik7/ykJ0JHnQ7krHanFN9wcnPK89pwn84cRUmYjw== dependencies: - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/visitor-keys" "4.16.1" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/visitor-keys" "4.17.0" -"@typescript-eslint/types@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.16.1.tgz#5ba2d3e38b1a67420d2487519e193163054d9c15" - integrity sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA== +"@typescript-eslint/types@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.17.0.tgz#f57d8fc7f31b348db946498a43050083d25f40ad" + integrity sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g== -"@typescript-eslint/typescript-estree@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz#c2fc46b05a48fbf8bbe8b66a63f0a9ba04b356f1" - integrity sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg== +"@typescript-eslint/typescript-estree@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz#b835d152804f0972b80dbda92477f9070a72ded1" + integrity sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ== dependencies: - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/visitor-keys" "4.16.1" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/visitor-keys" "4.17.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz#d7571fb580749fae621520deeb134370bbfc7293" - integrity sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w== +"@typescript-eslint/visitor-keys@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz#9c304cfd20287c14a31d573195a709111849b14d" + integrity sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ== dependencies: - "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/types" "4.17.0" eslint-visitor-keys "^2.0.0" "@vitejs/plugin-vue@^1.1.5": @@ -4934,19 +4934,19 @@ eslint-config-standard@^16.0.2: resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz#71e91727ac7a203782d0a5ca4d1c462d14e234f6" integrity sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw== -eslint-config-vuepress-typescript@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-vuepress-typescript/-/eslint-config-vuepress-typescript-2.2.0.tgz#5637961c6f58d83e22c85b12b00710c660eaaca4" - integrity sha512-oYBI981KxIaRqj+Kemh2PrADdR9Bnb0k8uIg6/1F7S1uKQAgQdx8yxlgRF3byWjWHmKcikHjoE5E46bpjAvoOg== +eslint-config-vuepress-typescript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-vuepress-typescript/-/eslint-config-vuepress-typescript-2.2.1.tgz#3b23e71fd49a30a2021fd24846886e67923b12b0" + integrity sha512-UZCEbjKDDr5uYoQhF1jCszkTbo+cxEemDvs/Gey8+vEnxcEdnHNEW8SeRPJ5ytoXJxPtLC1bdqeIE9HZtdlgfQ== dependencies: "@typescript-eslint/eslint-plugin" "^4.16.1" "@typescript-eslint/parser" "^4.16.1" - eslint-config-vuepress "3.2.0" + eslint-config-vuepress "3.2.1" -eslint-config-vuepress@3.2.0, eslint-config-vuepress@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-vuepress/-/eslint-config-vuepress-3.2.0.tgz#a5015e9e97dfc490ff1028d7d449961539b8e7bd" - integrity sha512-HAJ5IKpiuZIwiVt8iA6YMInFWZO8lh72H1DVDiigsNTa+32LE1tdBImwfXSxLzh4hnukGD3SxE2kqAdj6HukGg== +eslint-config-vuepress@3.2.1, eslint-config-vuepress@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-vuepress/-/eslint-config-vuepress-3.2.1.tgz#c5d1390d144dadec59e64cc444e65622eeb09f6e" + integrity sha512-zjDJykPc26A1eDvl4Brdduu1/QxOgYjUo37sGe+k01oRWv9w9JqgkIeF6WpF70UYRHZJBeYy200sqtp8uKuu9g== dependencies: eslint-config-prettier "^8.1.0" eslint-config-standard "^16.0.2" @@ -5058,10 +5058,10 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.21.0: - version "7.21.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83" - integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg== +eslint@^7.22.0: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.22.0.tgz#07ecc61052fec63661a2cab6bd507127c07adc6f" + integrity sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.0" @@ -5080,7 +5080,7 @@ eslint@^7.21.0: file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^12.1.0" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -5088,7 +5088,7 @@ eslint@^7.21.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.20" + lodash "^4.17.21" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -5833,6 +5833,13 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.6.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.6.0.tgz#d77138e53738567bb96a3916ff6f6b487af20ef7" + integrity sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ== + dependencies: + type-fest "^0.20.2" + globby@10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.0.tgz#abfcd0630037ae174a88590132c2f6804e291072" @@ -7576,11 +7583,6 @@ lodash.ismatch@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -7601,6 +7603,11 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash@4.x, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" @@ -9106,10 +9113,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier-config-vuepress@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/prettier-config-vuepress/-/prettier-config-vuepress-1.1.1.tgz#a9779139985bcd9f4b612f90decf407b3f2cb215" - integrity sha512-HLiMPxXkKm/5pC3N41QJwwLgGkJ3cvQPQd68lqiFGO59j05EiOu4MkH3kueGIxgR5/SxWsB1KeYRMYmyTizapQ== +prettier-config-vuepress@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prettier-config-vuepress/-/prettier-config-vuepress-1.2.0.tgz#cb6c61a532b3c1fdc73f3af1a589ebf656f82268" + integrity sha512-khbF7Jc2P93/91kISGzLYPlg+wONRzBnx+Y3M29ohJmASpM/tXmdv/3NlhHzWEax+IlC0Bj48THInDfeQjh9EA== prettier-linter-helpers@^1.0.0: version "1.0.0" @@ -10879,18 +10886,17 @@ ts-debounce@^3.0.0: resolved "https://registry.yarnpkg.com/ts-debounce/-/ts-debounce-3.0.0.tgz#9beedf59c04de3b5bef8ff28bd6885624df357be" integrity sha512-7jiRWgN4/8IdvCxbIwnwg2W0bbYFBH6BxFqBjMKk442t7+liF2Z1H6AUCcl8e/pD93GjPru+axeiJwFmRww1WQ== -ts-jest@^26.4.4: - version "26.4.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" - integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg== +ts-jest@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.3.tgz#a6ee00ba547be3b09877550df40a1465d0295554" + integrity sha512-nBiiFGNvtujdLryU7MiMQh1iPmnZ/QvOskBbD2kURiI1MwqvxlxNnaAB/z9TbslMqCsSbu5BXvSSQPc5tvHGeA== dependencies: - "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" jest-util "^26.1.0" json5 "2.x" - lodash.memoize "4.x" + lodash "4.x" make-error "1.x" mkdirp "1.x" semver "7.x" @@ -11009,10 +11015,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c" - integrity sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ== +typescript@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" + integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" From 33c0a83c67c4331ec16c176da1adb47facb6cd9f Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 14:11:57 +0800 Subject: [PATCH 0717/1014] build: use standalone tsconfig for eslint --- .eslintrc.js | 2 +- docs/tsconfig.json | 4 ---- package.json | 4 ++-- packages/@vuepress/cli/tsconfig.json | 2 +- tsconfig.eslint.json | 5 +++++ 5 files changed, 9 insertions(+), 8 deletions(-) delete mode 100644 docs/tsconfig.json create mode 100644 tsconfig.eslint.json diff --git a/.eslintrc.js b/.eslintrc.js index 30c1ccdedb..9270270eb2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,7 +6,7 @@ module.exports = { files: ['*.ts', '*.vue'], extends: 'vuepress-typescript', parserOptions: { - project: ['docs/tsconfig.json', 'packages/**/tsconfig.json'], + project: ['tsconfig.eslint.json'], }, rules: { '@typescript-eslint/ban-ts-comment': 'off', diff --git a/docs/tsconfig.json b/docs/tsconfig.json deleted file mode 100644 index a5c51487a5..0000000000 --- a/docs/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../tsconfig.base.json", - "include": [".vuepress/**/*"] -} diff --git a/package.json b/package.json index dc33b04d0d..67a159c20a 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "docs:clean": "rimraf docs/.vuepress/.temp docs/.vuepress/.cache docs/.vuepress/dist", "docs:dev": "vuepress dev docs --clean-cache", "docs:serve": "anywhere -h localhost -d docs/.vuepress/dist", - "lint": "cross-env NODE_OPTIONS=\"--max-old-space-size=4096\" eslint --ext .js,.ts,.vue .", + "lint": "eslint --ext .js,.ts,.vue .", "release": "yarn lint && yarn clean && yarn copy && yarn build && yarn test && lerna publish prerelease --dist-tag next", "test": "jest --runInBand" }, @@ -26,7 +26,7 @@ } }, "lint-staged": { - "*.{js,ts,vue}": "cross-env NODE_OPTIONS=\"--max-old-space-size=4096\" eslint --fix", + "*.{js,ts,vue}": "eslint --fix", "*.{json,yml,css,scss}": "prettier --write", "package.json": "sort-package-json" }, diff --git a/packages/@vuepress/cli/tsconfig.json b/packages/@vuepress/cli/tsconfig.json index 32028d339b..3114e03c34 100644 --- a/packages/@vuepress/cli/tsconfig.json +++ b/packages/@vuepress/cli/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../../tsconfig.base.json", - "include": ["./src", "./__tests__", "./__tests__/**/.vuepress/**/*"] + "include": ["./src", "./__tests__"] } diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000000..c85adb24fa --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["**/.vuepress/**/*", "packages/**/*"], + "exclude": ["node_modules", ".temp", "lib", "dist"] +} From bde5d5a1e981723838b4231d1ea082f7b149e7bd Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 14:12:46 +0800 Subject: [PATCH 0718/1014] chore(theme-default): fix typo in comments --- .../@vuepress/theme-default/src/types/options.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@vuepress/theme-default/src/types/options.ts b/packages/@vuepress/theme-default/src/types/options.ts index 2e231358ba..a7fea610ec 100644 --- a/packages/@vuepress/theme-default/src/types/options.ts +++ b/packages/@vuepress/theme-default/src/types/options.ts @@ -122,21 +122,21 @@ export interface DefaultThemeLocaleData extends LocaleData { sidebar?: 'auto' | false | SidebarConfig /** - * Page meta - edit lint config + * Page meta - edit link config * * Whether to show "Edit this page" or not */ editLink?: boolean /** - * Page meta - edit lint config + * Page meta - edit link config * * The text to replace the default "Edit this page" */ editLinkText?: string /** - * Page meta - edit lint config + * Page meta - edit link config * * Pattern of edit link * @@ -145,7 +145,7 @@ export interface DefaultThemeLocaleData extends LocaleData { editLinkPattern?: string /** - * Page meta - edit lint config + * Page meta - edit link config * * Use `repo` config by default * @@ -154,14 +154,14 @@ export interface DefaultThemeLocaleData extends LocaleData { docsRepo?: string /** - * Page meta - edit lint config + * Page meta - edit link config * * Set this config if the branch of your docs is not 'master' */ docsBranch?: string /** - * Page meta - edit lint config + * Page meta - edit link config * * Set this config if your docs is placed in sub dir of your `docsRepo` */ From 70b3a6b62696825ff95f8dcc1b7cb25679eb8b75 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 14:20:02 +0800 Subject: [PATCH 0719/1014] build: publish v2.0.0-beta.2 --- CHANGELOG.md | 13 +++++++++++++ lerna.json | 2 +- packages/@vuepress/bundler-vite/CHANGELOG.md | 12 ++++++++++++ packages/@vuepress/bundler-vite/package.json | 2 +- packages/@vuepress/cli/CHANGELOG.md | 8 ++++++++ packages/@vuepress/cli/package.json | 2 +- packages/@vuepress/plugin-nprogress/CHANGELOG.md | 11 +++++++++++ packages/@vuepress/plugin-nprogress/package.json | 2 +- packages/@vuepress/theme-default/CHANGELOG.md | 8 ++++++++ packages/@vuepress/theme-default/package.json | 4 ++-- packages/@vuepress/theme-vue/CHANGELOG.md | 8 ++++++++ packages/@vuepress/theme-vue/package.json | 4 ++-- packages/vuepress-vite/CHANGELOG.md | 8 ++++++++ packages/vuepress-vite/package.json | 8 ++++---- packages/vuepress/CHANGELOG.md | 8 ++++++++ packages/vuepress/package.json | 6 +++--- 16 files changed, 91 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b4c944b83..d1d4a89578 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + + +### Bug Fixes + +* **bundler-vite:** avoid optimizing client package ([5708934](https://github.com/vuepress/vuepress-next/commit/57089344f87bf381f8e6f2711eb6df9364c72432)) +* **bundler-vite:** workaround for vitejs/vite[#2503](https://github.com/vuepress/vuepress-next/issues/2503) ([055b280](https://github.com/vuepress/vuepress-next/commit/055b280a8488c42614702533cc9eb8fb2852c71b)) +* **plugin-nprogress:** always optimize nprogress with vite ([2aeb2bf](https://github.com/vuepress/vuepress-next/commit/2aeb2bf9b70b149bf2e56d2fd1b593e6628d72dd)) + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package vuepress-next diff --git a/lerna.json b/lerna.json index 71c0ff7aec..fb6a2da037 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,7 @@ { "npmClient": "yarn", "useWorkspaces": true, - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "command": { "version": { "allowBranch": "main", diff --git a/packages/@vuepress/bundler-vite/CHANGELOG.md b/packages/@vuepress/bundler-vite/CHANGELOG.md index 0a98d5fc5e..2840aeabc6 100644 --- a/packages/@vuepress/bundler-vite/CHANGELOG.md +++ b/packages/@vuepress/bundler-vite/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + + +### Bug Fixes + +* **bundler-vite:** avoid optimizing client package ([5708934](https://github.com/vuepress/vuepress-next/commit/57089344f87bf381f8e6f2711eb6df9364c72432)) +* **bundler-vite:** workaround for vitejs/vite[#2503](https://github.com/vuepress/vuepress-next/issues/2503) ([055b280](https://github.com/vuepress/vuepress-next/commit/055b280a8488c42614702533cc9eb8fb2852c71b)) + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/bundler-vite diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index 0d04e34046..19aa01d00b 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-vite", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "Bundler vite package of VuePress", "keywords": [ "vuepress-bundler", diff --git a/packages/@vuepress/cli/CHANGELOG.md b/packages/@vuepress/cli/CHANGELOG.md index f2e60040ca..ec53f1d196 100644 --- a/packages/@vuepress/cli/CHANGELOG.md +++ b/packages/@vuepress/cli/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + +**Note:** Version bump only for package @vuepress/cli + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/cli diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index d903d01641..9cd9837c1c 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/cli", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "CLI package of VuePress", "keywords": [ "vuepress", diff --git a/packages/@vuepress/plugin-nprogress/CHANGELOG.md b/packages/@vuepress/plugin-nprogress/CHANGELOG.md index 11bff5bb0f..18f3c806b4 100644 --- a/packages/@vuepress/plugin-nprogress/CHANGELOG.md +++ b/packages/@vuepress/plugin-nprogress/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + + +### Bug Fixes + +* **plugin-nprogress:** always optimize nprogress with vite ([2aeb2bf](https://github.com/vuepress/vuepress-next/commit/2aeb2bf9b70b149bf2e56d2fd1b593e6628d72dd)) + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-nprogress diff --git a/packages/@vuepress/plugin-nprogress/package.json b/packages/@vuepress/plugin-nprogress/package.json index fa95bd7af7..e8143ce3e7 100644 --- a/packages/@vuepress/plugin-nprogress/package.json +++ b/packages/@vuepress/plugin-nprogress/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-nprogress", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "VuePress plugin - nprogress", "keywords": [ "vuepress-plugin", diff --git a/packages/@vuepress/theme-default/CHANGELOG.md b/packages/@vuepress/theme-default/CHANGELOG.md index c2aaa21414..7926530041 100644 --- a/packages/@vuepress/theme-default/CHANGELOG.md +++ b/packages/@vuepress/theme-default/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + +**Note:** Version bump only for package @vuepress/theme-default + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/theme-default diff --git a/packages/@vuepress/theme-default/package.json b/packages/@vuepress/theme-default/package.json index 76a9c1cc91..c5a3f11fce 100644 --- a/packages/@vuepress/theme-default/package.json +++ b/packages/@vuepress/theme-default/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-default", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "Default theme of VuePress", "keywords": [ "vuepress-theme", @@ -36,7 +36,7 @@ "@vuepress/plugin-container": "2.0.0-beta.1", "@vuepress/plugin-git": "2.0.0-beta.1", "@vuepress/plugin-medium-zoom": "2.0.0-beta.1", - "@vuepress/plugin-nprogress": "2.0.0-beta.1", + "@vuepress/plugin-nprogress": "2.0.0-beta.2", "@vuepress/plugin-palette": "2.0.0-beta.1", "@vuepress/plugin-theme-data": "2.0.0-beta.1", "@vuepress/shared": "2.0.0-beta.1", diff --git a/packages/@vuepress/theme-vue/CHANGELOG.md b/packages/@vuepress/theme-vue/CHANGELOG.md index ea9c6ba273..07afaf3217 100644 --- a/packages/@vuepress/theme-vue/CHANGELOG.md +++ b/packages/@vuepress/theme-vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + +**Note:** Version bump only for package @vuepress/theme-vue + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/theme-vue diff --git a/packages/@vuepress/theme-vue/package.json b/packages/@vuepress/theme-vue/package.json index 3f193f328a..f28afdebf0 100644 --- a/packages/@vuepress/theme-vue/package.json +++ b/packages/@vuepress/theme-vue/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-vue", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "Vue theme of VuePress", "keywords": [ "vuepress-theme", @@ -28,7 +28,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/theme-default": "2.0.0-beta.1" + "@vuepress/theme-default": "2.0.0-beta.2" }, "publishConfig": { "access": "public" diff --git a/packages/vuepress-vite/CHANGELOG.md b/packages/vuepress-vite/CHANGELOG.md index 3dca398783..3ab0000ee7 100644 --- a/packages/vuepress-vite/CHANGELOG.md +++ b/packages/vuepress-vite/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + +**Note:** Version bump only for package vuepress-vite + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package vuepress-vite diff --git a/packages/vuepress-vite/package.json b/packages/vuepress-vite/package.json index d941171fec..271ff0d022 100644 --- a/packages/vuepress-vite/package.json +++ b/packages/vuepress-vite/package.json @@ -1,6 +1,6 @@ { "name": "vuepress-vite", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,9 +32,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-vite": "2.0.0-beta.1", - "@vuepress/cli": "2.0.0-beta.1", + "@vuepress/bundler-vite": "2.0.0-beta.2", + "@vuepress/cli": "2.0.0-beta.2", "@vuepress/core": "2.0.0-beta.1", - "@vuepress/theme-default": "2.0.0-beta.1" + "@vuepress/theme-default": "2.0.0-beta.2" } } diff --git a/packages/vuepress/CHANGELOG.md b/packages/vuepress/CHANGELOG.md index 4852093bf2..4f7b9c58f6 100644 --- a/packages/vuepress/CHANGELOG.md +++ b/packages/vuepress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) + +**Note:** Version bump only for package vuepress + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package vuepress diff --git a/packages/vuepress/package.json b/packages/vuepress/package.json index 7e98835e53..4bdb346660 100644 --- a/packages/vuepress/package.json +++ b/packages/vuepress/package.json @@ -1,6 +1,6 @@ { "name": "vuepress", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -33,8 +33,8 @@ }, "dependencies": { "@vuepress/bundler-webpack": "2.0.0-beta.1", - "@vuepress/cli": "2.0.0-beta.1", + "@vuepress/cli": "2.0.0-beta.2", "@vuepress/core": "2.0.0-beta.1", - "@vuepress/theme-default": "2.0.0-beta.1" + "@vuepress/theme-default": "2.0.0-beta.2" } } From e8703b08f6c81bd812ff8464f3e4a2688d8b2b9d Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 14:22:31 +0800 Subject: [PATCH 0720/1014] chore: tweak issue link --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1d4a89578..6a39be61f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes * **bundler-vite:** avoid optimizing client package ([5708934](https://github.com/vuepress/vuepress-next/commit/57089344f87bf381f8e6f2711eb6df9364c72432)) -* **bundler-vite:** workaround for vitejs/vite[#2503](https://github.com/vuepress/vuepress-next/issues/2503) ([055b280](https://github.com/vuepress/vuepress-next/commit/055b280a8488c42614702533cc9eb8fb2852c71b)) +* **bundler-vite:** workaround for [vitejs/vite#2503](https://github.com/vitejs/vite/issues/2503) ([055b280](https://github.com/vuepress/vuepress-next/commit/055b280a8488c42614702533cc9eb8fb2852c71b)) * **plugin-nprogress:** always optimize nprogress with vite ([2aeb2bf](https://github.com/vuepress/vuepress-next/commit/2aeb2bf9b70b149bf2e56d2fd1b593e6628d72dd)) From 7ccab6ea68de5b58e01d3031aae3abec39f31bb7 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 20:50:50 +0800 Subject: [PATCH 0721/1014] docs: add bundler-vite package --- docs/contributing.md | 2 ++ docs/zh/contributing.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/contributing.md b/docs/contributing.md index 6cdbe91871..3b1382e8f3 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -12,6 +12,8 @@ This repository employs a [monorepo](https://en.wikipedia.org/wiki/Monorepo) set - `@vuepress/client`: The VuePress client package. Provides the client entry, and exports types and composable utils that can be used in client side development. +- `@vuepress/bundler-vite`: The VuePress bundler package with vite. Use vite to `dev` and `build` VuePress app that generated by `@vuepress/core`. + - `@vuepress/bundler-webpack`: The VuePress bundler package with webpack. Use webpack to `dev` and `build` VuePress app that generated by `@vuepress/core`. - `@vuepress/cli`: The VuePress command line interface (CLI) package. It will resolve user config file, and create VuePress app with `@vuepress/core`, then use `@vuepress/bundler-${name}` to execute corresponding command. diff --git a/docs/zh/contributing.md b/docs/zh/contributing.md index 89b367a94d..c930a37190 100644 --- a/docs/zh/contributing.md +++ b/docs/zh/contributing.md @@ -12,6 +12,8 @@ sidebar: auto - `@vuepress/client`: Client 模块。包含客户端页面入口,并提供了客户端开发时可以用到的类型和工具函数。 +- `@vuepress/bundler-vite`: 基于 Vite 的 Bundler 模块。使用 Vite 对 VuePress App 执行 `dev` 和 `build` 操作。 + - `@vuepress/bundler-webpack`: 基于 Webpack 的 Bundler 模块。使用 Webpack 对 VuePress App 执行 `dev` 和 `build` 操作。 - `@vuepress/cli`: 命令行接口 (CLI) 模块。包含解析用户配置文件、调用 `@vuepress/core` 创建 VuePress App 、调用 `@vuepress/bundler-${name}` 来执行对应命令等功能。 From 73a66df2c19b4b292e5f7b48cb967490a0a5dd69 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 14 Mar 2021 20:53:00 +0800 Subject: [PATCH 0722/1014] feat(cli): show info of vite related packages --- packages/@vuepress/cli/src/commands/info.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/@vuepress/cli/src/commands/info.ts b/packages/@vuepress/cli/src/commands/info.ts index d12fe299d6..b71ca061df 100644 --- a/packages/@vuepress/cli/src/commands/info.ts +++ b/packages/@vuepress/cli/src/commands/info.ts @@ -12,6 +12,7 @@ export const info = async (): Promise => { Utilities: ['Git'], Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'], npmPackages: [ + '@vuepress/bundler-vite', '@vuepress/bundler-webpack', '@vuepress/cli', '@vuepress/client', @@ -35,6 +36,7 @@ export const info = async (): Promise => { '@vuepress/theme-vue', '@vuepress/utils', 'vuepress', + 'vuepress-vite', 'vue', 'vue-router', 'vue-loader', From dca770df45844b8644812f2c9fa01c55385c2560 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Wed, 17 Mar 2021 21:40:45 +0800 Subject: [PATCH 0723/1014] build: dedupe yarn lock file --- yarn.lock | 98 ++++++++++--------------------------------------------- 1 file changed, 18 insertions(+), 80 deletions(-) diff --git a/yarn.lock b/yarn.lock index d6595ca189..cf596cfd8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2154,11 +2154,6 @@ "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-3.3.0.tgz#8797af01feb524e3f4978e1c9bf7bc7c18ef9d25" - integrity sha512-s3dd32gagPmKaSLNJ9aPNok7U+tl69YLESf6DgQz5Ml/iipPZtif3GLvWpNXoA6qspFm1LFUZX+C3SqWX/Y/TQ== - "@octokit/openapi-types@^5.2.2": version "5.2.2" resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.2.2.tgz#1590c118a131031610faffd4222ae54915e2b82d" @@ -2222,15 +2217,7 @@ "@octokit/plugin-request-log" "^1.0.2" "@octokit/plugin-rest-endpoint-methods" "4.13.1" -"@octokit/types@^6.0.3": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.6.0.tgz#165d0e7940d5f910b3373f02336c161dcdf097fe" - integrity sha512-nmFoU3HCbw1AmnZU/eto2VvzV06+N7oAqXwMmAHGlNDF+KFykksh/VlAl85xc1P5T7Mw8fKYvXNaImNHCCH/rg== - dependencies: - "@octokit/openapi-types" "^3.3.0" - "@types/node" ">= 8" - -"@octokit/types@^6.11.0", "@octokit/types@^6.11.1", "@octokit/types@^6.7.1": +"@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.11.1", "@octokit/types@^6.7.1": version "6.11.2" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.11.2.tgz#43973dc29cdf59bf9d5f3ab0d16275c4b4a6eb8d" integrity sha512-EKQRFZU/oOfUlqk9ntLIE5UO/bcOx8exFpdXGBciJP90f05me3mza0sacIpqVqmiIQP3nJsBjnZHMmtijE5XwQ== @@ -2514,7 +2501,7 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== -"@types/node@*", "@types/node@>= 8": +"@types/node@*": version "14.14.22" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== @@ -4132,20 +4119,7 @@ conventional-commits-filter@^2.0.7: lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" - integrity sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^2.0.0" - through2 "^4.0.0" - trim-off-newlines "^1.0.0" - -conventional-commits-parser@^3.2.0: +conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== @@ -4882,12 +4856,7 @@ esbuild-loader@^2.9.2: type-fest "^0.20.2" webpack-sources "^2.2.0" -esbuild@^0.8.42: - version "0.8.43" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.43.tgz#19d79f8c6d1cc6dadd50942057a5aff906a1ecf2" - integrity sha512-ZVE2CpootS4jtnfV0bbtJdgRsHEXcMP0P7ZXGfTmNzzhBr2e5ag7Vp3ry0jmw8zduJz4iHzxg4m5jtPxWERz1w== - -esbuild@^0.8.52, esbuild@^0.8.54: +esbuild@^0.8.42, esbuild@^0.8.52, esbuild@^0.8.54: version "0.8.54" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.54.tgz#2f32ff80e95c69a0f25b799d76a27c05e2857cdf" integrity sha512-DJH38OiTgXJxFb/EhHrCrY8eGmtdkTtWymHpN9IYN9AF+4jykT0dQArr7wzFejpVbaB0TMIq2+vfNRWr3LXpvw== @@ -5873,12 +5842,7 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -7284,10 +7248,10 @@ json3@^3.3.3: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== +json5@2.x, json5@^2.1.2, json5@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: minimist "^1.2.5" @@ -7298,13 +7262,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -7603,16 +7560,11 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash@4.x, lodash@^4.17.21: +lodash@4.x, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - log-symbols@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" @@ -9790,20 +9742,13 @@ run-parallel@^1.1.9: resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== -rxjs@^6.6.0: +rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== dependencies: tslib "^1.9.0" -rxjs@^6.6.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -10324,13 +10269,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== - dependencies: - through2 "^2.0.2" - split2@^3.0.0: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" @@ -10746,7 +10684,7 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -through2@^2.0.0, through2@^2.0.2: +through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -11857,11 +11795,16 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@20.2.4, yargs-parser@20.x, yargs-parser@^20.2.3: +yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.6" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" + integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== + yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -11870,11 +11813,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2: - version "20.2.6" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" - integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== - yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" From c9893140f3421d75ba067135e53abce932eaaef5 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Wed, 17 Mar 2021 21:51:04 +0800 Subject: [PATCH 0724/1014] build: bump vite and esbuild --- packages/@vuepress/bundler-vite/package.json | 2 +- .../@vuepress/bundler-webpack/package.json | 2 +- packages/@vuepress/cli/package.json | 2 +- yarn.lock | 35 +++++++++++-------- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index 19aa01d00b..13a0f65a3a 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -36,7 +36,7 @@ "@vuepress/shared": "2.0.0-beta.1", "@vuepress/utils": "2.0.0-beta.1", "rollup": "^2.41.2", - "vite": "2.0.5", + "vite": "^2.1.1", "vue": "^3.0.7", "vue-router": "^4.0.4" }, diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index df3a2a5aae..4294973c23 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -39,7 +39,7 @@ "autoprefixer": "^10.2.4", "copy-webpack-plugin": "^7.0.0", "css-loader": "^5.1.1", - "esbuild-loader": "^2.9.2", + "esbuild-loader": "^2.10.0", "express": "^4.17.1", "file-loader": "^6.2.0", "html-webpack-plugin": "^5.2.0", diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index 9cd9837c1c..0a54caa22a 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -35,7 +35,7 @@ "cac": "^6.7.2", "chokidar": "^3.5.1", "envinfo": "^7.7.4", - "esbuild": "^0.8.54" + "esbuild": "^0.9.3" }, "publishConfig": { "access": "public" diff --git a/yarn.lock b/yarn.lock index cf596cfd8c..c045786e01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4844,22 +4844,22 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild-loader@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.9.2.tgz#ae16721aeb05018396395a95f528c778ba7361d0" - integrity sha512-HpF+r/ES2aC40VDOIFsP8OIOM2y2vj8LyLwJ4G8DCMOi8Kov68TwCtxiMMTuSuxR/xKDu/ykgVyCEgps6BXpYw== +esbuild-loader@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.10.0.tgz#35b570187aee0036b2f4b37db66870f7407f3d40" + integrity sha512-BRWmc/7gU6/FmI+MP+E+9Zb/CE0BA1XMOQkdvJ7B/T2gad1Mlim8aMhvvRdS9on5S8JzkC+uNHGQmt/WmbbXbQ== dependencies: - esbuild "^0.8.42" + esbuild "^0.9.2" joycon "^2.2.5" json5 "^2.2.0" loader-utils "^2.0.0" - type-fest "^0.20.2" + type-fest "^0.21.3" webpack-sources "^2.2.0" -esbuild@^0.8.42, esbuild@^0.8.52, esbuild@^0.8.54: - version "0.8.54" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.54.tgz#2f32ff80e95c69a0f25b799d76a27c05e2857cdf" - integrity sha512-DJH38OiTgXJxFb/EhHrCrY8eGmtdkTtWymHpN9IYN9AF+4jykT0dQArr7wzFejpVbaB0TMIq2+vfNRWr3LXpvw== +esbuild@^0.9.2, esbuild@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.3.tgz#09293a0b824159c6aa2488d1c6c22f57d8448f74" + integrity sha512-G8k0olucZp3LJ7I/p8y388t+IEyb2Y78nHrLeIxuqZqh6TYqDYP/B/7drAvYKfh83CGwKal9txVP+FTypsPJug== escalade@^3.1.1: version "3.1.1" @@ -10918,6 +10918,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" @@ -11199,12 +11204,12 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vite@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.0.5.tgz#ac46857a3fa8686d077921e61bd48a986931df1d" - integrity sha512-QTgEDbq1WsTtr6j+++ewjhBFEk6c8v0xz4fb/OWJQKNYU8ZZtphOshwOqAlnarSstPBtWCBR0tsugXx6ajfoUg== +vite@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.1.1.tgz#13c7a7a5665b435f28fe8549caab181e0ad9af7b" + integrity sha512-nlTQrfYIkahcElD8O/oogbLbuKgAZRbvoFOth3GmRSglfPdY4RgfBjj0Fu7HeCU/2u3Jxc6jW4UuV22LGw1Yaw== dependencies: - esbuild "^0.8.52" + esbuild "^0.9.2" postcss "^8.2.1" resolve "^1.19.0" rollup "^2.38.5" From db3c3e8639d040aa8b408006d48b160a0b234e12 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Wed, 17 Mar 2021 22:04:34 +0800 Subject: [PATCH 0725/1014] fix(bundler-vite): fix fs path on windows (close #74) --- packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts index 9eaac96162..1d825b7623 100644 --- a/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts +++ b/packages/@vuepress/bundler-vite/src/plugin/createPlugin.ts @@ -1,6 +1,7 @@ import type { Plugin } from 'vite' import createVuePlugin from '@vitejs/plugin-vue' import type { App } from '@vuepress/core' +import { removeLeadingSlash } from '@vuepress/shared' import { fs } from '@vuepress/utils' import type { ViteBundlerOptions } from '../types' import { createWorkaroundPlugin } from './createWorkaroundPlugin' @@ -45,13 +46,15 @@ export const createPlugin = ({ if (req.url!.endsWith('.html')) { res.statusCode = 200 const template = fs.readFileSync(app.options.templateDev).toString() - const clientEntry = app.dir.client('lib/client.js') + const clientEntrySrc = `/@fs/${removeLeadingSlash( + app.dir.client('lib/client.js') + )}` res.end( template.replace( /<\/body>/, `${[ ``, - ``, + ``, ].join('')}` ) ) From bb1db4d277e3ddac63650aa8161ea84828181171 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Wed, 17 Mar 2021 22:23:22 +0800 Subject: [PATCH 0726/1014] build: publish v2.0.0-beta.3 --- CHANGELOG.md | 16 ++++++++++++++++ lerna.json | 2 +- packages/@vuepress/bundler-vite/CHANGELOG.md | 11 +++++++++++ packages/@vuepress/bundler-vite/package.json | 2 +- packages/@vuepress/bundler-webpack/CHANGELOG.md | 8 ++++++++ packages/@vuepress/bundler-webpack/package.json | 2 +- packages/@vuepress/cli/CHANGELOG.md | 11 +++++++++++ packages/@vuepress/cli/package.json | 2 +- packages/vuepress-vite/CHANGELOG.md | 8 ++++++++ packages/vuepress-vite/package.json | 6 +++--- packages/vuepress/CHANGELOG.md | 8 ++++++++ packages/vuepress/package.json | 6 +++--- 12 files changed, 72 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a39be61f0..69bf246654 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) + + +### Bug Fixes + +* **bundler-vite:** fix fs path on windows (close [#74](https://github.com/vuepress/vuepress-next/issues/74)) ([db3c3e8](https://github.com/vuepress/vuepress-next/commit/db3c3e8639d040aa8b408006d48b160a0b234e12)) + + +### Features + +* **cli:** show info of vite related packages ([73a66df](https://github.com/vuepress/vuepress-next/commit/73a66df2c19b4b292e5f7b48cb967490a0a5dd69)) + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) diff --git a/lerna.json b/lerna.json index fb6a2da037..56ed829081 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,7 @@ { "npmClient": "yarn", "useWorkspaces": true, - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "command": { "version": { "allowBranch": "main", diff --git a/packages/@vuepress/bundler-vite/CHANGELOG.md b/packages/@vuepress/bundler-vite/CHANGELOG.md index 2840aeabc6..a8bcb94d80 100644 --- a/packages/@vuepress/bundler-vite/CHANGELOG.md +++ b/packages/@vuepress/bundler-vite/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) + + +### Bug Fixes + +* **bundler-vite:** fix fs path on windows (close [#74](https://github.com/vuepress/vuepress-next/issues/74)) ([db3c3e8](https://github.com/vuepress/vuepress-next/commit/db3c3e8639d040aa8b408006d48b160a0b234e12)) + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index 13a0f65a3a..fc2c442b53 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-vite", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "description": "Bundler vite package of VuePress", "keywords": [ "vuepress-bundler", diff --git a/packages/@vuepress/bundler-webpack/CHANGELOG.md b/packages/@vuepress/bundler-webpack/CHANGELOG.md index 5425eb56e3..e5f0cb2163 100644 --- a/packages/@vuepress/bundler-webpack/CHANGELOG.md +++ b/packages/@vuepress/bundler-webpack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) + +**Note:** Version bump only for package @vuepress/bundler-webpack + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/bundler-webpack diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index 4294973c23..d04c28597b 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-webpack", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.3", "description": "Bundler webpack package of VuePress", "keywords": [ "vuepress-bundler", diff --git a/packages/@vuepress/cli/CHANGELOG.md b/packages/@vuepress/cli/CHANGELOG.md index ec53f1d196..f0c2a5a7f0 100644 --- a/packages/@vuepress/cli/CHANGELOG.md +++ b/packages/@vuepress/cli/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) + + +### Features + +* **cli:** show info of vite related packages ([73a66df](https://github.com/vuepress/vuepress-next/commit/73a66df2c19b4b292e5f7b48cb967490a0a5dd69)) + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) **Note:** Version bump only for package @vuepress/cli diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index 0a54caa22a..a122902e92 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/cli", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "description": "CLI package of VuePress", "keywords": [ "vuepress", diff --git a/packages/vuepress-vite/CHANGELOG.md b/packages/vuepress-vite/CHANGELOG.md index 3ab0000ee7..c71ea167a7 100644 --- a/packages/vuepress-vite/CHANGELOG.md +++ b/packages/vuepress-vite/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) + +**Note:** Version bump only for package vuepress-vite + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) **Note:** Version bump only for package vuepress-vite diff --git a/packages/vuepress-vite/package.json b/packages/vuepress-vite/package.json index 271ff0d022..3c4e1c5a0e 100644 --- a/packages/vuepress-vite/package.json +++ b/packages/vuepress-vite/package.json @@ -1,6 +1,6 @@ { "name": "vuepress-vite", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,8 +32,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-vite": "2.0.0-beta.2", - "@vuepress/cli": "2.0.0-beta.2", + "@vuepress/bundler-vite": "2.0.0-beta.3", + "@vuepress/cli": "2.0.0-beta.3", "@vuepress/core": "2.0.0-beta.1", "@vuepress/theme-default": "2.0.0-beta.2" } diff --git a/packages/vuepress/CHANGELOG.md b/packages/vuepress/CHANGELOG.md index 4f7b9c58f6..52fd65a69d 100644 --- a/packages/vuepress/CHANGELOG.md +++ b/packages/vuepress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) + +**Note:** Version bump only for package vuepress + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) **Note:** Version bump only for package vuepress diff --git a/packages/vuepress/package.json b/packages/vuepress/package.json index 4bdb346660..f44fdf1607 100644 --- a/packages/vuepress/package.json +++ b/packages/vuepress/package.json @@ -1,6 +1,6 @@ { "name": "vuepress", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,8 +32,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-webpack": "2.0.0-beta.1", - "@vuepress/cli": "2.0.0-beta.2", + "@vuepress/bundler-webpack": "2.0.0-beta.3", + "@vuepress/cli": "2.0.0-beta.3", "@vuepress/core": "2.0.0-beta.1", "@vuepress/theme-default": "2.0.0-beta.2" } From 5d3925b0137177a6440bb8150a8f1285dceaa72f Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Fri, 19 Mar 2021 00:54:59 +0800 Subject: [PATCH 0727/1014] docs: fix typo --- docs/guide/page.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/page.md b/docs/guide/page.md index b67d9918bd..c4ceccb0e6 100644 --- a/docs/guide/page.md +++ b/docs/guide/page.md @@ -38,7 +38,7 @@ description: Description of this page --- ``` -You must have noticed that those fields are similar with the [Site Config](./configuration.md#site-config) of in the [Config File](./configuration.md#config-file). You can override `lang`, `title`, `description`, etc., of current page via frontmatter. So you can take frontmatter as page scope config. +You must have noticed that those fields are similar with the [Site Config](./configuration.md#site-config) in the [Config File](./configuration.md#config-file). You can override `lang`, `title`, `description`, etc., of current page via frontmatter. So you can take frontmatter as page scope config. Also, VuePress has built-in support for some frontmatter fields, and your theme may have its own special frontmatter, too. From 040fd25e7d9ac755c2bd871901bed932b2e2f5a8 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Fri, 19 Mar 2021 21:16:34 +0800 Subject: [PATCH 0728/1014] chore: fix typo in comments --- packages/@vuepress/core/src/types/page.ts | 2 +- packages/@vuepress/shared/src/types/page.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@vuepress/core/src/types/page.ts b/packages/@vuepress/core/src/types/page.ts index 123f3ba833..1adf1f959a 100644 --- a/packages/@vuepress/core/src/types/page.ts +++ b/packages/@vuepress/core/src/types/page.ts @@ -78,7 +78,7 @@ export interface Page extends PageData { routesFilePath: string /** - * Page data relative file path + * Page routes relative file path */ routesFilePathRelative: string diff --git a/packages/@vuepress/shared/src/types/page.ts b/packages/@vuepress/shared/src/types/page.ts index ee0a72a07d..2272729e54 100644 --- a/packages/@vuepress/shared/src/types/page.ts +++ b/packages/@vuepress/shared/src/types/page.ts @@ -56,7 +56,7 @@ export type PageData< /** * Vuepress page frontmatter * - * Notice that frontmatter is parse from yaml or other languages, + * Notice that frontmatter is parsed from yaml or other languages, * so we cannot guarantee the type safety */ export type PageFrontmatter< From 59a4c9363199ae422a0efd8d3b83f06002c6c466 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 18:19:50 +0800 Subject: [PATCH 0729/1014] refactor(bundler-webpack): remove deprecated ESBuildPlugin --- .../@vuepress/bundler-webpack/src/config/handleModuleTs.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts b/packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts index 242a2264c6..b230e36623 100644 --- a/packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts +++ b/packages/@vuepress/bundler-webpack/src/config/handleModuleTs.ts @@ -1,4 +1,3 @@ -import { ESBuildPlugin } from 'esbuild-loader' import type * as Config from 'webpack-chain' import type { App } from '@vuepress/core' import { resolveEsbuildJsxOptions } from './resolveEsbuildJsxOptions' @@ -25,7 +24,4 @@ export const handleModuleTs = ({ ...resolveEsbuildJsxOptions(), }) .end() - - // use esbuild-loader plugin - config.plugin('esbuild-loader').use(ESBuildPlugin) } From 57967f7dec27c4148edf920decead327cc8746bf Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 18:39:11 +0800 Subject: [PATCH 0730/1014] fix(bundler-vite): disable auto resolving vite config file --- .../@vuepress/bundler-vite/src/build/resolveViteConfig.ts | 5 +++-- packages/@vuepress/bundler-vite/src/dev/createDev.ts | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/@vuepress/bundler-vite/src/build/resolveViteConfig.ts b/packages/@vuepress/bundler-vite/src/build/resolveViteConfig.ts index 7bbd63e70f..a5d8e3eecf 100644 --- a/packages/@vuepress/bundler-vite/src/build/resolveViteConfig.ts +++ b/packages/@vuepress/bundler-vite/src/build/resolveViteConfig.ts @@ -1,4 +1,4 @@ -import { mergeConfig, UserConfig } from 'vite' +import { mergeConfig, InlineConfig } from 'vite' import type { App } from '@vuepress/core' import { createPlugin } from '../plugin' import type { ViteBundlerOptions } from '../types' @@ -11,9 +11,10 @@ export const resolveViteConfig = ({ app: App options: ViteBundlerOptions isServer: boolean -}): UserConfig => +}): InlineConfig => mergeConfig( { + configFile: false, logLevel: app.env.isDebug ? 'info' : 'warn', build: { ssr: isServer, diff --git a/packages/@vuepress/bundler-vite/src/dev/createDev.ts b/packages/@vuepress/bundler-vite/src/dev/createDev.ts index 511ccd0fed..35033741b5 100644 --- a/packages/@vuepress/bundler-vite/src/dev/createDev.ts +++ b/packages/@vuepress/bundler-vite/src/dev/createDev.ts @@ -9,6 +9,7 @@ export const createDev = ( const server = await createServer( mergeConfig( { + configFile: false, server: { host: app.options.host, port: app.options.port, From 4a1abe39335eaaf3ef1dca3e35a324b12981c0d2 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 22:24:37 +0800 Subject: [PATCH 0731/1014] refactor(markdown): remove default syntax highlighter BREAKING CHANGE: prismjs is no longer the default syntax highlighter --- docs/guide/markdown.md | 38 -------------- docs/reference/config.md | 22 +++------ docs/zh/guide/markdown.md | 38 -------------- docs/zh/reference/config.md | 22 +++------ packages/@vuepress/markdown/package.json | 6 +-- packages/@vuepress/markdown/src/markdown.ts | 2 +- .../src/plugins/codePlugin/codePlugin.ts | 27 +--------- .../markdown/src/plugins/codePlugin/index.ts | 1 - .../src/plugins/codePlugin/languages.ts | 18 +------ .../plugins/codePlugin/resolveHighlighter.ts | 49 ------------------- 10 files changed, 18 insertions(+), 205 deletions(-) delete mode 100644 packages/@vuepress/markdown/src/plugins/codePlugin/resolveHighlighter.ts diff --git a/docs/guide/markdown.md b/docs/guide/markdown.md index d4c021a915..c2700a460d 100644 --- a/docs/guide/markdown.md +++ b/docs/guide/markdown.md @@ -148,44 +148,6 @@ Config reference: [markdown.toc](../reference/config.md#markdown-toc) Following code blocks extensions are implemented during markdown parsing in Node side. That means, the code blocks won't be processed in client side. -If you want to implement client-side syntax highlighting via [prism.js](https://prismjs.com/#basic-usage) or [highlight.js](https://highlightjs.org/), you could disable our code blocks extensions, and introduce your library manually in client side. - -#### Syntax Highlighting - -VuePress uses [Prism](https://prismjs.com/) to highlight language syntax in Markdown code blocks, using coloured text. - -Prism supports a wide variety of programming languages. For a full list of available languages, check out [Prism supported languages](https://prismjs.com/#supported-languages). - -You can add an optional language identifier to enable syntax highlighting in your fenced code blocks: - -**Input** - -````md -```ts -import type { UserConfig } from '@vuepress/cli' - -export const config: UserConfig = { - title: 'Hello, VuePress', -} -``` -```` - -**Output** - -```ts -import type { UserConfig } from '@vuepress/cli' - -export const config: UserConfig = { - title: 'Hello, VuePress', -} -``` - -::: tip -This syntax highlighting extension is supported by our built-in plugin. - -Config reference: [markdown.code.highlight](../reference/config.md#markdown-code-highlight) -::: - #### Line Highlighting You can highlight specified lines of your code blocks by adding line ranges mark in your fenced code blocks: diff --git a/docs/reference/config.md b/docs/reference/config.md index 9d4afb972b..6272458149 100644 --- a/docs/reference/config.md +++ b/docs/reference/config.md @@ -269,7 +269,10 @@ module.exports = { Configure VuePress built-in Markdown syntax extensions. + It accepts all options of [markdown-it](https://github.com/markdown-it/markdown-it), and the following additional options. + - Also see: + - [markdown-it > Init with presets and options](https://github.com/markdown-it/markdown-it#init-with-presets-and-options) - [Guide > Markdown > Syntax Extensions](../guide/markdown.md#syntax-extensions) #### markdown.anchor @@ -312,21 +315,6 @@ You should not configure it unless you understand what it is for. - Also see: - [Guide > Markdown > Syntax Extensions > Code Blocks](../guide/markdown.md#code-blocks) -##### markdown.code.highlight - -- Type: `boolean` - -- Default: `true` - -- Details: - - Enable code syntax highlighting or not. - - You can disable it if you want to implement client side highlighting by yourself. For example, [Prismjs](https://prismjs.com/) or [highlight.js](https://highlightjs.org/). - -- Also see: - - [Guide > Markdown > Syntax Extensions > Code Blocks > Syntax Highlighting](../guide/markdown.md#syntax-highlighting) - ##### markdown.code.highlightLines - Type: `boolean` @@ -365,7 +353,9 @@ You should not configure it unless you understand what it is for. The wrapper is required by the `highlightLines` and `lineNumbers`. That means, if you disable `preWrapper`, the line highlighting and line numbers will also be disabled. - You can disable it if you want to implement them in client side. For example, [Prismjs Line Highlight](https://prismjs.com/plugins/line-highlight/) or [Prismjs Line Numbers](https://prismjs.com/plugins/line-numbers/). +::: tip +You can disable it if you want to implement them in client side. For example, [Prismjs Line Highlight](https://prismjs.com/plugins/line-highlight/) or [Prismjs Line Numbers](https://prismjs.com/plugins/line-numbers/). +::: ##### markdown.code.vPre diff --git a/docs/zh/guide/markdown.md b/docs/zh/guide/markdown.md index 101e893dae..e4773f1406 100644 --- a/docs/zh/guide/markdown.md +++ b/docs/zh/guide/markdown.md @@ -150,44 +150,6 @@ Emoji 扩展由 [markdown-it-emoji](https://github.com/markdown-it/markdown-it-e 下列代码块扩展是在 Node 端进行 Markdown 解析的时候实现的。这意味着代码块并不会在客户端被处理。 -如果你想使用 [prism.js](https://prismjs.com/#basic-usage) 或 [highlight.js](https://highlightjs.org/) 在客户端进行语法高亮,你可以禁用我们的代码块扩展,然后手动在客户端引入你想要使用的库。 - -#### 语法高亮 - -VuePress 使用 [Prism](https://prismjs.com/) 来对代码块进行语法高亮。 - -Prism 支持多种编程语言,你可以前往 [Prism supported languages](https://prismjs.com/#supported-languages) 来查看所有可用的编程语言。 - -你只需要在代码块前添加对应语言的标识符,就可以启用代码高亮: - -**输入** - -````md -```ts -import type { UserConfig } from '@vuepress/cli' - -export const config: UserConfig = { - title: '你好, VuePress', -} -``` -```` - -**输出** - -```ts -import type { UserConfig } from '@vuepress/cli' - -export const config: UserConfig = { - title: '你好, VuePress', -} -``` - -::: tip -代码高亮扩展是由我们的内置插件支持的。 - -配置参考: [markdown.code.highlight](../reference/config.md#markdown-code-highlight) -::: - #### 行高亮 你可以在代码块添加行数范围标记,来为对应代码行进行高亮: diff --git a/docs/zh/reference/config.md b/docs/zh/reference/config.md index f96588bcf1..eca8b6805d 100644 --- a/docs/zh/reference/config.md +++ b/docs/zh/reference/config.md @@ -268,7 +268,10 @@ module.exports = { 对 VuePress 内置的 Markdown 语法扩展进行配置。 + 它可以接收 [markdown-it](https://github.com/markdown-it/markdown-it) 的所有配置项,以及下列额外的配置项。 + - 参考: + - [markdown-it > Init with presets and options](https://github.com/markdown-it/markdown-it#init-with-presets-and-options) - [指南 > Markdown > 语法扩展](../guide/markdown.md#语法扩展) #### markdown.anchor @@ -311,21 +314,6 @@ module.exports = { - 参考: - [指南 > Markdown > 语法扩展 > 代码块](../guide/markdown.md#代码块) -##### markdown.code.highlight - -- 类型: `boolean` - -- 默认值: `true` - -- 详情: - - 是否启用代码块语法高亮。 - - 如果你想在客户端进行语法高翔,你可以禁用该配置项。比如使用 [Prismjs](https://prismjs.com/) 或 [highlight.js](https://highlightjs.org/) 。 - -- 参考: - - [指南 > Markdown > 语法扩展 > 代码块 > 语法高亮](../guide/markdown.md#语法高亮) - ##### markdown.code.highlightLines - 类型: `boolean` @@ -364,7 +352,9 @@ module.exports = { `highlightLines` 和 `lineNumbers` 依赖于这个额外的包裹层。这换句话说,如果你禁用了 `preWrapper` ,那么行高亮和行号也会被同时禁用。 - 如果你想要在客户端来实现这些功能时,可以禁用该配置项。比如使用 [Prismjs Line Highlight](https://prismjs.com/plugins/line-highlight/) 或者 [Prismjs Line Numbers](https://prismjs.com/plugins/line-numbers/)。 +::: tip +如果你想要在客户端来实现这些功能时,可以禁用该配置项。比如使用 [Prismjs Line Highlight](https://prismjs.com/plugins/line-highlight/) 或者 [Prismjs Line Numbers](https://prismjs.com/plugins/line-numbers/)。 +::: ##### markdown.code.vPre diff --git a/packages/@vuepress/markdown/package.json b/packages/@vuepress/markdown/package.json index a0a6592223..018f1c419c 100644 --- a/packages/@vuepress/markdown/package.json +++ b/packages/@vuepress/markdown/package.json @@ -31,11 +31,7 @@ "@vuepress/utils": "2.0.0-beta.1", "markdown-it": "^12.0.4", "markdown-it-anchor": "^7.0.2", - "markdown-it-emoji": "^2.0.0", - "prismjs": "^1.23.0" - }, - "devDependencies": { - "@types/prismjs": "^1.16.3" + "markdown-it-emoji": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/markdown/src/markdown.ts b/packages/@vuepress/markdown/src/markdown.ts index ac7b7059ad..4131fdd464 100644 --- a/packages/@vuepress/markdown/src/markdown.ts +++ b/packages/@vuepress/markdown/src/markdown.ts @@ -1,5 +1,4 @@ import * as MarkdownIt from 'markdown-it' -import { tocPlugin } from './plugins/tocPlugin/tocPlugin' import { anchorPlugin, assetsPlugin, @@ -9,6 +8,7 @@ import { extractHeadersPlugin, hoistTagsPlugin, linksPlugin, + tocPlugin, } from './plugins' import type { Markdown, MarkdownOptions } from './types' import { slugify } from './utils' diff --git a/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts b/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts index 9c4bd32bc7..e84233d751 100644 --- a/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts +++ b/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts @@ -1,5 +1,4 @@ import type { PluginWithOptions } from 'markdown-it' -import type { Highlighter } from './resolveHighlighter' import { isHighlightLine, resolveHighlightLines } from './resolveHighlightLines' import type { HighlightLinesRange } from './resolveHighlightLines' import { resolveLanguage } from './resolveLanguage' @@ -7,15 +6,6 @@ import { resolveLineNumbers } from './resolveLineNumbers' import { resolveVPre } from './resolveVPre' export interface CodePluginOptions { - /** - * Enable syntax highlight or not - * - * If it's disabled, you can use client side syntax highlight yourself - * - * For example, if you want to use pure prismjs support in client - */ - highlight?: boolean - /** * Enable highlight lines or not */ @@ -48,7 +38,6 @@ export interface CodePluginOptions { export const codePlugin: PluginWithOptions = ( md, { - highlight = true, highlightLines = true, lineNumbers = true, preWrapper = true, @@ -81,20 +70,8 @@ export const codePlugin: PluginWithOptions = ( let code = token.content // try to highlight code - if (highlight) { - // lazy-load syntax highlighter - const highlighter: Highlighter = require('./resolveHighlighter').resolveHighlighter( - language - ) - if (highlighter !== null) { - code = highlighter(code) - } - } - - // if the code is not highlighted, treat it as text and escape it - if (code === token.content) { - code = md.utils.escapeHtml(code) - } + code = + options.highlight?.(code, language.name, '') || md.utils.escapeHtml(code) const languageClass = `${options.langPrefix}${language.name}` diff --git a/packages/@vuepress/markdown/src/plugins/codePlugin/index.ts b/packages/@vuepress/markdown/src/plugins/codePlugin/index.ts index 516b914c76..89fd4ea1e8 100644 --- a/packages/@vuepress/markdown/src/plugins/codePlugin/index.ts +++ b/packages/@vuepress/markdown/src/plugins/codePlugin/index.ts @@ -1,6 +1,5 @@ export * from './codePlugin' export * from './languages' -export * from './resolveHighlighter' export * from './resolveHighlightLines' export * from './resolveLanguage' export * from './resolveLineNumbers' diff --git a/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts b/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts index f43d5faf05..e9072de5f9 100644 --- a/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts +++ b/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts @@ -1,5 +1,5 @@ /** - * Language type for prism syntax highlight + * Language type for syntax highlight */ export interface HighlightLanguage { /** @@ -7,9 +7,6 @@ export interface HighlightLanguage { * * The name to be used for the class name, * e.g. `class="language-typescript"` - * - * It's also the internal name in prismjs, which - * will be used for `Prism.loadLanguages()` */ name: string @@ -27,24 +24,18 @@ export interface HighlightLanguage { * Do not conflict with other languages */ aliases: string[] - - /** - * The documentation languages of this language - */ - docLang?: string } export const languageBash: HighlightLanguage = { name: 'bash', ext: 'sh', - aliases: ['bash', 'sh', 'shell'], + aliases: ['bash', 'sh', 'shell', 'zsh'], } export const languageCsharp: HighlightLanguage = { name: 'csharp', ext: 'cs', aliases: ['cs', 'csharp'], - docLang: 'xml-doc', } export const languageDocker: HighlightLanguage = { @@ -57,7 +48,6 @@ export const languageFsharp: HighlightLanguage = { name: 'fsharp', ext: 'fs', aliases: ['fs', 'fsharp'], - docLang: 'xml-doc', } export const languageHtml: HighlightLanguage = { @@ -70,14 +60,12 @@ export const languageJava: HighlightLanguage = { name: 'java', ext: 'java', aliases: ['java'], - docLang: 'javadoc', } export const languageJavascript: HighlightLanguage = { name: 'javascript', ext: 'js', aliases: ['javascript', 'js'], - docLang: 'jsdoc', } export const languageKotlin: HighlightLanguage = { @@ -96,7 +84,6 @@ export const languagePhp: HighlightLanguage = { name: 'php', ext: 'php', aliases: ['php'], - docLang: 'phpdoc', } export const languagePython: HighlightLanguage = { @@ -127,7 +114,6 @@ export const languageTypescript: HighlightLanguage = { name: 'typescript', ext: 'ts', aliases: ['ts', 'typescript'], - docLang: 'jsdoc', } export const languageVue: HighlightLanguage = { diff --git a/packages/@vuepress/markdown/src/plugins/codePlugin/resolveHighlighter.ts b/packages/@vuepress/markdown/src/plugins/codePlugin/resolveHighlighter.ts deleted file mode 100644 index 5f46f13efc..0000000000 --- a/packages/@vuepress/markdown/src/plugins/codePlugin/resolveHighlighter.ts +++ /dev/null @@ -1,49 +0,0 @@ -import * as Prism from 'prismjs' -import * as loadLanguages from 'prismjs/components/index' -import type { HighlightLanguage } from './languages' - -// prevent warning messages -// eslint-disable-next-line no-import-assign -loadLanguages.silent = true - -// load some commonly used languages to partially avoid the following issue -// @see https://github.com/PrismJS/prism/issues/2716 -loadLanguages(['markdown', 'jsdoc', 'yaml']) - -export type Highlighter = (code: string) => string - -/** - * Resolve syntax highlighter for corresponding language - */ -export const resolveHighlighter = ( - language: HighlightLanguage -): Highlighter | null => { - const lang = language.name - const docLang = language.docLang - - // get the languages that need to be loaded - const langsToLoad: string[] = [] - - // current language - if (!Prism.languages[lang]) { - langsToLoad.push(lang) - } - - // doc language of current language - if (docLang && !Prism.languages[docLang]) { - langsToLoad.push(docLang) - } - - // try to load languages if necessary - if (langsToLoad.length) { - loadLanguages(langsToLoad) - } - - // return null if current language could not be loaded - // the doc language is not required so we don't check it here - if (!Prism.languages[lang]) { - return null - } - - return (code) => Prism.highlight(code, Prism.languages[lang], lang) -} From 638ad8afdf9f3fe779e9eb1d02dca6c1caef0307 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 22:28:13 +0800 Subject: [PATCH 0732/1014] feat(plugin-prismjs): add prismjs plugin --- .../@vuepress/plugin-prismjs/package.json | 41 +++++++++++++++++ .../@vuepress/plugin-prismjs/src/index.ts | 36 +++++++++++++++ .../plugin-prismjs/src/loadLanguages.ts | 7 +++ .../plugin-prismjs/src/resolveHighlighter.ts | 46 +++++++++++++++++++ .../plugin-prismjs/tsconfig.build.json | 10 ++++ .../@vuepress/plugin-prismjs/tsconfig.json | 4 ++ tsconfig.json | 3 ++ 7 files changed, 147 insertions(+) create mode 100644 packages/@vuepress/plugin-prismjs/package.json create mode 100644 packages/@vuepress/plugin-prismjs/src/index.ts create mode 100644 packages/@vuepress/plugin-prismjs/src/loadLanguages.ts create mode 100644 packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts create mode 100644 packages/@vuepress/plugin-prismjs/tsconfig.build.json create mode 100644 packages/@vuepress/plugin-prismjs/tsconfig.json diff --git a/packages/@vuepress/plugin-prismjs/package.json b/packages/@vuepress/plugin-prismjs/package.json new file mode 100644 index 0000000000..9b1fb579d5 --- /dev/null +++ b/packages/@vuepress/plugin-prismjs/package.json @@ -0,0 +1,41 @@ +{ + "name": "@vuepress/plugin-prismjs", + "version": "2.0.0-beta.3", + "description": "VuePress plugin - prismjs", + "keywords": [ + "vuepress-plugin", + "vuepress", + "plugin", + "prismjs", + "highlight" + ], + "homepage": "https://github.com/vuepress", + "bugs": { + "url": "https://github.com/vuepress/vuepress-next/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/vuepress-next.git" + }, + "license": "MIT", + "author": "meteorlxy", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b tsconfig.build.json", + "clean": "rimraf lib *.tsbuildinfo" + }, + "dependencies": { + "@vuepress/core": "2.0.0-beta.1", + "prismjs": "^1.23.0" + }, + "devDependencies": { + "@types/prismjs": "^1.16.3" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/@vuepress/plugin-prismjs/src/index.ts b/packages/@vuepress/plugin-prismjs/src/index.ts new file mode 100644 index 0000000000..b20660848d --- /dev/null +++ b/packages/@vuepress/plugin-prismjs/src/index.ts @@ -0,0 +1,36 @@ +import type { Plugin } from '@vuepress/core' +import { loadLanguages } from './loadLanguages' +import { resolveHighlighter } from './resolveHighlighter' + +/** + * Options of @vuepress/plugin-prismjs + */ +export interface PrismjsPluginOptions { + /** + * Languages to preload + * + * Workaround for prismjs language reloading issue + * + * @see https://github.com/PrismJS/prism/issues/2716 + */ + preloadLanguages: string[] +} + +export const prismjsPlugin: Plugin = ({ + preloadLanguages = ['markdown', 'jsdoc', 'yaml'], +}) => ({ + name: '@vuepress/plugin-prismjs', + + extendsMarkdown(md) { + if (preloadLanguages?.length !== 0) { + loadLanguages(preloadLanguages) + } + + md.options.highlight = (code, lang) => { + const highlighter = resolveHighlighter(lang) + return highlighter?.(code) || '' + } + }, +}) + +export default prismjsPlugin diff --git a/packages/@vuepress/plugin-prismjs/src/loadLanguages.ts b/packages/@vuepress/plugin-prismjs/src/loadLanguages.ts new file mode 100644 index 0000000000..76982fc396 --- /dev/null +++ b/packages/@vuepress/plugin-prismjs/src/loadLanguages.ts @@ -0,0 +1,7 @@ +import * as loadLanguages from 'prismjs/components/index' + +// prevent warning messages +// eslint-disable-next-line no-import-assign +loadLanguages.silent = true + +export { loadLanguages } diff --git a/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts b/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts new file mode 100644 index 0000000000..51ccbeeb2c --- /dev/null +++ b/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts @@ -0,0 +1,46 @@ +import * as Prism from 'prismjs' +import { loadLanguages } from './loadLanguages' + +// documentation language of corresponding language +const docLangMap = { + csharp: 'xml-doc', + fsharp: 'xml-doc', + java: 'javadoc', + javascript: 'jsdoc', + php: 'phpdoc', + typescript: 'jsdoc', +} + +export type Highlighter = (code: string) => string + +/** + * Resolve syntax highlighter for corresponding language + */ +export const resolveHighlighter = (lang: string): Highlighter | null => { + // get the languages that need to be loaded + const langsToLoad: string[] = [] + + // current language + if (!Prism.languages[lang]) { + langsToLoad.push(lang) + } + + // doc language of current language + const docLang = docLangMap[lang] + if (docLang && !Prism.languages[docLang]) { + langsToLoad.push(docLang) + } + + // try to load languages if necessary + if (langsToLoad.length) { + loadLanguages(langsToLoad) + } + + // return null if current language could not be loaded + // the doc language is not required so we don't check it here + if (!Prism.languages[lang]) { + return null + } + + return (code) => Prism.highlight(code, Prism.languages[lang], lang) +} diff --git a/packages/@vuepress/plugin-prismjs/tsconfig.build.json b/packages/@vuepress/plugin-prismjs/tsconfig.build.json new file mode 100644 index 0000000000..c7ad0cdfe6 --- /dev/null +++ b/packages/@vuepress/plugin-prismjs/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "module": "CommonJS", + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [{ "path": "../core/tsconfig.build.json" }] +} diff --git a/packages/@vuepress/plugin-prismjs/tsconfig.json b/packages/@vuepress/plugin-prismjs/tsconfig.json new file mode 100644 index 0000000000..3114e03c34 --- /dev/null +++ b/packages/@vuepress/plugin-prismjs/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../../tsconfig.base.json", + "include": ["./src", "./__tests__"] +} diff --git a/tsconfig.json b/tsconfig.json index ae39abe45b..97d74a4689 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,6 +23,9 @@ { "path": "./packages/@vuepress/plugin-palette/tsconfig.build.json" }, + { + "path": "./packages/@vuepress/plugin-prismjs/tsconfig.build.json" + }, { "path": "./packages/@vuepress/plugin-pwa/tsconfig.build.json" }, { "path": "./packages/@vuepress/plugin-pwa-popup/tsconfig.build.json" }, { "path": "./packages/@vuepress/plugin-theme-data/tsconfig.build.json" }, From f131de4783685dbabfde4e4966182d570224a246 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 22:28:49 +0800 Subject: [PATCH 0733/1014] feat(theme-default): use prismjs plugin --- packages/@vuepress/theme-default/package.json | 1 + packages/@vuepress/theme-default/src/index.ts | 1 + packages/@vuepress/theme-default/src/types/options.ts | 5 +++++ packages/@vuepress/theme-default/tsconfig.build.json | 1 + 4 files changed, 8 insertions(+) diff --git a/packages/@vuepress/theme-default/package.json b/packages/@vuepress/theme-default/package.json index c5a3f11fce..e73bcbdd8f 100644 --- a/packages/@vuepress/theme-default/package.json +++ b/packages/@vuepress/theme-default/package.json @@ -38,6 +38,7 @@ "@vuepress/plugin-medium-zoom": "2.0.0-beta.1", "@vuepress/plugin-nprogress": "2.0.0-beta.2", "@vuepress/plugin-palette": "2.0.0-beta.1", + "@vuepress/plugin-prismjs": "2.0.0-beta.3", "@vuepress/plugin-theme-data": "2.0.0-beta.1", "@vuepress/shared": "2.0.0-beta.1", "@vuepress/utils": "2.0.0-beta.1", diff --git a/packages/@vuepress/theme-default/src/index.ts b/packages/@vuepress/theme-default/src/index.ts index 243ec2c70a..c63cc535a4 100644 --- a/packages/@vuepress/theme-default/src/index.ts +++ b/packages/@vuepress/theme-default/src/index.ts @@ -67,6 +67,7 @@ export const defaultTheme: Theme = ({ ['@vuepress/medium-zoom', resolveMediumZoomPluginOptions(themePlugins)], ['@vuepress/nprogress', themePlugins.nprogress !== false], ['@vuepress/palette', { preset: 'sass' }], + ['@vuepress/prismjs', themePlugins.prismjs !== false], ['@vuepress/theme-data', { themeData: localeOptions }], ], } diff --git a/packages/@vuepress/theme-default/src/types/options.ts b/packages/@vuepress/theme-default/src/types/options.ts index a7fea610ec..ed78c52ade 100644 --- a/packages/@vuepress/theme-default/src/types/options.ts +++ b/packages/@vuepress/theme-default/src/types/options.ts @@ -49,6 +49,11 @@ export interface DefaultThemePluginsOptions { * Enable @vuepress/plugin-nprogress or not */ nprogress?: boolean + + /** + * Enable @vuepress/plugin-prismjs or not + */ + prismjs?: boolean } export type DefaultThemeLocaleOptions = DefaultThemeData diff --git a/packages/@vuepress/theme-default/tsconfig.build.json b/packages/@vuepress/theme-default/tsconfig.build.json index 9aebc70e33..d2579c80f7 100644 --- a/packages/@vuepress/theme-default/tsconfig.build.json +++ b/packages/@vuepress/theme-default/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../plugin-medium-zoom/tsconfig.build.json" }, { "path": "../plugin-nprogress/tsconfig.build.json" }, { "path": "../plugin-palette/tsconfig.build.json" }, + { "path": "../plugin-prismjs/tsconfig.build.json" }, { "path": "../plugin-theme-data/tsconfig.build.json" }, { "path": "../shared/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, From 1e7f1f3ae065624105348f27660342e83f344b07 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 23:09:29 +0800 Subject: [PATCH 0734/1014] refactor(markdown): remove redundant language defs --- .../src/plugins/codePlugin/languages.ts | 24 ------------------- .../src/plugins/codePlugin/resolveLanguage.ts | 3 +-- .../plugin-prismjs/src/resolveHighlighter.ts | 9 ++++++- 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts b/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts index e9072de5f9..bbf607596d 100644 --- a/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts +++ b/packages/@vuepress/markdown/src/plugins/codePlugin/languages.ts @@ -50,18 +50,6 @@ export const languageFsharp: HighlightLanguage = { aliases: ['fs', 'fsharp'], } -export const languageHtml: HighlightLanguage = { - name: 'markup', - ext: 'html', - aliases: ['html'], -} - -export const languageJava: HighlightLanguage = { - name: 'java', - ext: 'java', - aliases: ['java'], -} - export const languageJavascript: HighlightLanguage = { name: 'javascript', ext: 'js', @@ -80,12 +68,6 @@ export const languageMarkdown: HighlightLanguage = { aliases: ['markdown', 'md'], } -export const languagePhp: HighlightLanguage = { - name: 'php', - ext: 'php', - aliases: ['php'], -} - export const languagePython: HighlightLanguage = { name: 'python', ext: 'py', @@ -116,12 +98,6 @@ export const languageTypescript: HighlightLanguage = { aliases: ['ts', 'typescript'], } -export const languageVue: HighlightLanguage = { - name: 'markup', - ext: 'vue', - aliases: ['vue'], -} - export const languageYaml: HighlightLanguage = { name: 'yaml', ext: 'yml', diff --git a/packages/@vuepress/markdown/src/plugins/codePlugin/resolveLanguage.ts b/packages/@vuepress/markdown/src/plugins/codePlugin/resolveLanguage.ts index 575246326d..fede13f958 100644 --- a/packages/@vuepress/markdown/src/plugins/codePlugin/resolveLanguage.ts +++ b/packages/@vuepress/markdown/src/plugins/codePlugin/resolveLanguage.ts @@ -40,8 +40,7 @@ export const resolveLanguage = (info: string): HighlightLanguage => { getLanguagesMap()[alias] ?? { name: alias, ext: alias, - aliases: [], - deps: [], + aliases: [alias], } ) } diff --git a/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts b/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts index 51ccbeeb2c..95b4593c16 100644 --- a/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts +++ b/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts @@ -1,6 +1,11 @@ import * as Prism from 'prismjs' import { loadLanguages } from './loadLanguages' +const languageNameMap = { + html: 'markup', + vue: 'markup', +} + // documentation language of corresponding language const docLangMap = { csharp: 'xml-doc', @@ -16,7 +21,9 @@ export type Highlighter = (code: string) => string /** * Resolve syntax highlighter for corresponding language */ -export const resolveHighlighter = (lang: string): Highlighter | null => { +export const resolveHighlighter = (language: string): Highlighter | null => { + const lang = languageNameMap[language] || language + // get the languages that need to be loaded const langsToLoad: string[] = [] From 43ec4da3e0031e858d7c2455416fee481f46ba8f Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 23:10:32 +0800 Subject: [PATCH 0735/1014] docs: add template wrapper for vue code --- docs/guide/markdown.md | 14 ++++++++------ docs/zh/guide/markdown.md | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/docs/guide/markdown.md b/docs/guide/markdown.md index c2700a460d..999f17505b 100644 --- a/docs/guide/markdown.md +++ b/docs/guide/markdown.md @@ -61,12 +61,14 @@ Take our documentation source files as an example: **Converted to** ```vue -Home -Config Reference -Getting Started -Guide -Config Reference > markdown.links -GitHub + ``` **Rendered as** diff --git a/docs/zh/guide/markdown.md b/docs/zh/guide/markdown.md index e4773f1406..be6244dd66 100644 --- a/docs/zh/guide/markdown.md +++ b/docs/zh/guide/markdown.md @@ -62,12 +62,14 @@ VuePress 会使用 [markdown-it](https://github.com/markdown-it/markdown-it) 来 **转换为** ```vue -首页 -配置參考 -快速上手 -指南 -配置參考 > markdown.links -GitHub + ``` **渲染为** From 287556bc47a5d2bded4464b65547dcd4aefa9d47 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 23:32:54 +0800 Subject: [PATCH 0736/1014] docs(plugin-prismjs): add plugin reference --- docs/.vuepress/configs/sidebar/en.ts | 1 + docs/.vuepress/configs/sidebar/zh.ts | 1 + docs/reference/plugin/prismjs.md | 21 +++++++++++++++++++++ docs/zh/reference/plugin/prismjs.md | 21 +++++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 docs/reference/plugin/prismjs.md create mode 100644 docs/zh/reference/plugin/prismjs.md diff --git a/docs/.vuepress/configs/sidebar/en.ts b/docs/.vuepress/configs/sidebar/en.ts index 2805a19240..8f983b45ad 100644 --- a/docs/.vuepress/configs/sidebar/en.ts +++ b/docs/.vuepress/configs/sidebar/en.ts @@ -82,6 +82,7 @@ export const en: SidebarConfig = { '/reference/plugin/medium-zoom.md', '/reference/plugin/nprogress.md', '/reference/plugin/palette.md', + '/reference/plugin/prismjs.md', '/reference/plugin/pwa.md', '/reference/plugin/pwa-popup.md', '/reference/plugin/theme-data.md', diff --git a/docs/.vuepress/configs/sidebar/zh.ts b/docs/.vuepress/configs/sidebar/zh.ts index 41057886af..a3257356f1 100644 --- a/docs/.vuepress/configs/sidebar/zh.ts +++ b/docs/.vuepress/configs/sidebar/zh.ts @@ -85,6 +85,7 @@ export const zh: SidebarConfig = { '/zh/reference/plugin/medium-zoom.md', '/zh/reference/plugin/nprogress.md', '/zh/reference/plugin/palette.md', + '/zh/reference/plugin/prismjs.md', '/zh/reference/plugin/pwa.md', '/zh/reference/plugin/pwa-popup.md', '/zh/reference/plugin/theme-data.md', diff --git a/docs/reference/plugin/prismjs.md b/docs/reference/plugin/prismjs.md new file mode 100644 index 0000000000..a125eac4f7 --- /dev/null +++ b/docs/reference/plugin/prismjs.md @@ -0,0 +1,21 @@ +# prismjs + +> @vuepress/plugin-prismjs + +This plugin will enable syntax highlighting for markdown code fence with [Prism.js](https://prismjs.com/). + +## Options + +### preloadLanguages + +- Type: `string[]` + +- Default: `['markdown', 'jsdoc', 'yaml']` + +- Details: + + Languages to preload. + + By default, languages will be loaded on demand when parsing markdown files. + + However, Prism.js has [some potential issues](https://github.com/PrismJS/prism/issues/2716) about loading languages dynamically. To avoid them, you can preload languages via this option. diff --git a/docs/zh/reference/plugin/prismjs.md b/docs/zh/reference/plugin/prismjs.md new file mode 100644 index 0000000000..72860b851d --- /dev/null +++ b/docs/zh/reference/plugin/prismjs.md @@ -0,0 +1,21 @@ +# prismjs + +> @vuepress/plugin-prismjs + +该插件使用 [Prism.js](https://prismjs.com/) 来为 Markdown 代码块启用代码高亮。 + +## 配置项 + +### preloadLanguages + +- 类型: `string[]` + +- 默认值: `['markdown', 'jsdoc', 'yaml']` + +- 详情: + + 需要预加载的语言。 + + 默认情况下,语言会在解析 Markdown 文件时按需加载。 + + 然而, Prism.js 在动态加载语言时可能会遇到 [一些潜在的问题](https://github.com/PrismJS/prism/issues/2716) 。为了避免这些问题,你可以使用该配置项来预加载一些语言。 From 4079557b3ee268d154491dc23958dbd1e191034b Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 23:46:49 +0800 Subject: [PATCH 0737/1014] test(markdown): sync unit tests --- .../__snapshots__/codePlugin.spec.ts.snap | 93 +++++++------------ .../__tests__/plugins/codePlugin.spec.ts | 8 -- 2 files changed, 33 insertions(+), 68 deletions(-) diff --git a/packages/@vuepress/markdown/__tests__/plugins/__snapshots__/codePlugin.spec.ts.snap b/packages/@vuepress/markdown/__tests__/plugins/__snapshots__/codePlugin.spec.ts.snap index 5a8a8adaf2..4ca619559a 100644 --- a/packages/@vuepress/markdown/__tests__/plugins/__snapshots__/codePlugin.spec.ts.snap +++ b/packages/@vuepress/markdown/__tests__/plugins/__snapshots__/codePlugin.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`@vuepress/markdown > plugins > codePlugin should disable \`highlight\` 1`] = ` +exports[`@vuepress/markdown > plugins > codePlugin should disable \`highlightLines\` 1`] = `

Raw text
 
1
@@ -18,33 +18,6 @@ function bar () { function bar () { return 1024 } - -
-
 
-
 



-
-
1
2
3
4
5
-
-`; - -exports[`@vuepress/markdown > plugins > codePlugin should disable \`highlightLines\` 1`] = ` -
Raw text
-
-
1
-
-
const foo = 'foo'
-
-function bar () {
-  return 1024
-}
-
-
1
2
3
4
5
-
-
const foo = 'foo'
-
-function bar () {
-  return 1024
-}
 
1
2
3
4
5
@@ -54,18 +27,18 @@ exports[`@vuepress/markdown > plugins > codePlugin should disable \`lineNumbers\
Raw text
 
-
const foo = 'foo'
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
+function bar () {
+  return 1024
+}
 
-
const foo = 'foo'
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
+function bar () {
+  return 1024
+}
 
 
@@ -76,16 +49,16 @@ exports[`@vuepress/markdown > plugins > codePlugin should disable \`lineNumbers\ exports[`@vuepress/markdown > plugins > codePlugin should disable \`preWrapper\` 1`] = `
Raw text
-
const foo = 'foo'
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
-
const foo = 'foo'
+function bar () {
+  return 1024
+}
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
+function bar () {
+  return 1024
+}
 
`; @@ -94,19 +67,19 @@ exports[`@vuepress/markdown > plugins > codePlugin should disable \`vPre\` 1`] =
1
-
const foo = 'foo'
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
+function bar () {
+  return 1024
+}
 
1
2
3
4
5
-
const foo = 'foo'
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
+function bar () {
+  return 1024
+}
 
 
@@ -121,19 +94,19 @@ exports[`@vuepress/markdown > plugins > codePlugin should process code fences wi
1
-
const foo = 'foo'
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
+function bar () {
+  return 1024
+}
 
1
2
3
4
5
-
const foo = 'foo'
+
const foo = 'foo'
 
-function bar () {
-  return 1024
-}
+function bar () {
+  return 1024
+}
 
 
diff --git a/packages/@vuepress/markdown/__tests__/plugins/codePlugin.spec.ts b/packages/@vuepress/markdown/__tests__/plugins/codePlugin.spec.ts index b8bea98306..cc91a2e36f 100644 --- a/packages/@vuepress/markdown/__tests__/plugins/codePlugin.spec.ts +++ b/packages/@vuepress/markdown/__tests__/plugins/codePlugin.spec.ts @@ -32,14 +32,6 @@ describe('@vuepress/markdown > plugins > codePlugin', () => { expect(md.render(source)).toMatchSnapshot() }) - it('should disable `highlight`', () => { - const md = MarkdownIt().use(codePlugin, { - highlight: false, - }) - - expect(md.render(source)).toMatchSnapshot() - }) - it('should disable `highlightLines`', () => { const md = MarkdownIt().use(codePlugin, { highlightLines: false, From d42716e1b5b682ffb5d7cf124d0a24344493c467 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sat, 20 Mar 2021 23:55:28 +0800 Subject: [PATCH 0738/1014] build: publish v2.0.0-beta.4 --- CHANGELOG.md | 27 ++++++++++++++++++ lerna.json | 2 +- packages/@vuepress/bundler-vite/CHANGELOG.md | 11 ++++++++ packages/@vuepress/bundler-vite/package.json | 10 +++---- .../@vuepress/bundler-webpack/CHANGELOG.md | 8 ++++++ .../@vuepress/bundler-webpack/package.json | 10 +++---- packages/@vuepress/cli/CHANGELOG.md | 8 ++++++ packages/@vuepress/cli/package.json | 6 ++-- packages/@vuepress/client/CHANGELOG.md | 8 ++++++ packages/@vuepress/client/package.json | 4 +-- packages/@vuepress/core/CHANGELOG.md | 8 ++++++ packages/@vuepress/core/package.json | 10 +++---- packages/@vuepress/markdown/CHANGELOG.md | 16 +++++++++++ packages/@vuepress/markdown/package.json | 6 ++-- .../plugin-active-header-links/CHANGELOG.md | 8 ++++++ .../plugin-active-header-links/package.json | 8 +++--- .../@vuepress/plugin-back-to-top/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-back-to-top/package.json | 6 ++-- .../@vuepress/plugin-container/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-container/package.json | 10 +++---- packages/@vuepress/plugin-debug/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-debug/package.json | 8 +++--- .../@vuepress/plugin-docsearch/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-docsearch/package.json | 10 +++---- packages/@vuepress/plugin-git/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-git/package.json | 4 +-- .../plugin-google-analytics/CHANGELOG.md | 8 ++++++ .../plugin-google-analytics/package.json | 8 +++--- .../@vuepress/plugin-medium-zoom/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-medium-zoom/package.json | 8 +++--- .../@vuepress/plugin-nprogress/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-nprogress/package.json | 8 +++--- .../@vuepress/plugin-palette/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-palette/package.json | 6 ++-- .../@vuepress/plugin-prismjs/CHANGELOG.md | 11 ++++++++ .../@vuepress/plugin-prismjs/package.json | 4 +-- .../@vuepress/plugin-pwa-popup/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-pwa-popup/package.json | 12 ++++---- packages/@vuepress/plugin-pwa/CHANGELOG.md | 8 ++++++ packages/@vuepress/plugin-pwa/package.json | 8 +++--- .../@vuepress/plugin-theme-data/CHANGELOG.md | 8 ++++++ .../@vuepress/plugin-theme-data/package.json | 10 +++---- packages/@vuepress/shared/CHANGELOG.md | 8 ++++++ packages/@vuepress/shared/package.json | 2 +- packages/@vuepress/theme-default/CHANGELOG.md | 11 ++++++++ packages/@vuepress/theme-default/package.json | 28 +++++++++---------- packages/@vuepress/theme-vue/CHANGELOG.md | 8 ++++++ packages/@vuepress/theme-vue/package.json | 4 +-- packages/@vuepress/utils/CHANGELOG.md | 8 ++++++ packages/@vuepress/utils/package.json | 4 +-- packages/vuepress-vite/CHANGELOG.md | 8 ++++++ packages/vuepress-vite/package.json | 10 +++---- packages/vuepress/CHANGELOG.md | 8 ++++++ packages/vuepress/package.json | 10 +++---- 54 files changed, 360 insertions(+), 108 deletions(-) create mode 100644 packages/@vuepress/plugin-prismjs/CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 69bf246654..85f5a93cfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + + +### Bug Fixes + +* **bundler-vite:** disable auto resolving vite config file ([57967f7](https://github.com/vuepress/vuepress-next/commit/57967f7dec27c4148edf920decead327cc8746bf)) + + +### Code Refactoring + +* **markdown:** remove default syntax highlighter ([4a1abe3](https://github.com/vuepress/vuepress-next/commit/4a1abe39335eaaf3ef1dca3e35a324b12981c0d2)) + + +### Features + +* **plugin-prismjs:** add prismjs plugin ([638ad8a](https://github.com/vuepress/vuepress-next/commit/638ad8afdf9f3fe779e9eb1d02dca6c1caef0307)) +* **theme-default:** use prismjs plugin ([f131de4](https://github.com/vuepress/vuepress-next/commit/f131de4783685dbabfde4e4966182d570224a246)) + + +### BREAKING CHANGES + +* **markdown:** prismjs is no longer the default syntax highlighter + + + + + # [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) diff --git a/lerna.json b/lerna.json index 56ed829081..90669834d8 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,7 @@ { "npmClient": "yarn", "useWorkspaces": true, - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "command": { "version": { "allowBranch": "main", diff --git a/packages/@vuepress/bundler-vite/CHANGELOG.md b/packages/@vuepress/bundler-vite/CHANGELOG.md index a8bcb94d80..8e651f65fa 100644 --- a/packages/@vuepress/bundler-vite/CHANGELOG.md +++ b/packages/@vuepress/bundler-vite/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + + +### Bug Fixes + +* **bundler-vite:** disable auto resolving vite config file ([57967f7](https://github.com/vuepress/vuepress-next/commit/57967f7dec27c4148edf920decead327cc8746bf)) + + + + + # [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index fc2c442b53..a762eb149b 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-vite", - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "description": "Bundler vite package of VuePress", "keywords": [ "vuepress-bundler", @@ -31,10 +31,10 @@ "@vitejs/plugin-vue": "^1.1.5", "@vue/compiler-sfc": "^3.0.7", "@vue/server-renderer": "^3.0.7", - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "rollup": "^2.41.2", "vite": "^2.1.1", "vue": "^3.0.7", diff --git a/packages/@vuepress/bundler-webpack/CHANGELOG.md b/packages/@vuepress/bundler-webpack/CHANGELOG.md index e5f0cb2163..cab362dfce 100644 --- a/packages/@vuepress/bundler-webpack/CHANGELOG.md +++ b/packages/@vuepress/bundler-webpack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/bundler-webpack + + + + + # [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) **Note:** Version bump only for package @vuepress/bundler-webpack diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index d04c28597b..0ac270d13d 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/bundler-webpack", - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "description": "Bundler webpack package of VuePress", "keywords": [ "vuepress-bundler", @@ -32,10 +32,10 @@ "@types/webpack-env": "^1.16.0", "@vue/compiler-sfc": "^3.0.7", "@vue/server-renderer": "^3.0.7", - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "autoprefixer": "^10.2.4", "copy-webpack-plugin": "^7.0.0", "css-loader": "^5.1.1", diff --git a/packages/@vuepress/cli/CHANGELOG.md b/packages/@vuepress/cli/CHANGELOG.md index f0c2a5a7f0..b7ac503f34 100644 --- a/packages/@vuepress/cli/CHANGELOG.md +++ b/packages/@vuepress/cli/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/cli + + + + + # [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index a122902e92..b8828f7086 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/cli", - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "description": "CLI package of VuePress", "keywords": [ "vuepress", @@ -30,8 +30,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "cac": "^6.7.2", "chokidar": "^3.5.1", "envinfo": "^7.7.4", diff --git a/packages/@vuepress/client/CHANGELOG.md b/packages/@vuepress/client/CHANGELOG.md index dc3c77bbf4..cd2c0438d1 100644 --- a/packages/@vuepress/client/CHANGELOG.md +++ b/packages/@vuepress/client/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/client + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/client diff --git a/packages/@vuepress/client/package.json b/packages/@vuepress/client/package.json index 3e9e49f5dd..d37c6f4284 100644 --- a/packages/@vuepress/client/package.json +++ b/packages/@vuepress/client/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/client", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "Client package of VuePress", "keywords": [ "vuepress", @@ -28,7 +28,7 @@ "copy": "cpx \"src/**/*.{d.ts,css}\" lib" }, "dependencies": { - "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.4", "vue": "^3.0.7", "vue-router": "^4.0.4" }, diff --git a/packages/@vuepress/core/CHANGELOG.md b/packages/@vuepress/core/CHANGELOG.md index 712bafe3d1..128521db0f 100644 --- a/packages/@vuepress/core/CHANGELOG.md +++ b/packages/@vuepress/core/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/core + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/core diff --git a/packages/@vuepress/core/package.json b/packages/@vuepress/core/package.json index c8c642a2ac..cfa0180513 100644 --- a/packages/@vuepress/core/package.json +++ b/packages/@vuepress/core/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/core", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "Core package of VuePress", "keywords": [ "vuepress", @@ -26,10 +26,10 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/markdown": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/markdown": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "gray-matter": "^4.0.2", "toml": "^3.0.0" }, diff --git a/packages/@vuepress/markdown/CHANGELOG.md b/packages/@vuepress/markdown/CHANGELOG.md index 1787573b94..6e1ce93547 100644 --- a/packages/@vuepress/markdown/CHANGELOG.md +++ b/packages/@vuepress/markdown/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + + +### Code Refactoring + +* **markdown:** remove default syntax highlighter ([4a1abe3](https://github.com/vuepress/vuepress-next/commit/4a1abe39335eaaf3ef1dca3e35a324b12981c0d2)) + + +### BREAKING CHANGES + +* **markdown:** prismjs is no longer the default syntax highlighter + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/markdown diff --git a/packages/@vuepress/markdown/package.json b/packages/@vuepress/markdown/package.json index 018f1c419c..0e00729aeb 100644 --- a/packages/@vuepress/markdown/package.json +++ b/packages/@vuepress/markdown/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/markdown", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "Markdown package of VuePress", "keywords": [ "vuepress", @@ -27,8 +27,8 @@ }, "dependencies": { "@types/markdown-it": "^12.0.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "markdown-it": "^12.0.4", "markdown-it-anchor": "^7.0.2", "markdown-it-emoji": "^2.0.0" diff --git a/packages/@vuepress/plugin-active-header-links/CHANGELOG.md b/packages/@vuepress/plugin-active-header-links/CHANGELOG.md index 2c9c9f8273..3a0f3352e2 100644 --- a/packages/@vuepress/plugin-active-header-links/CHANGELOG.md +++ b/packages/@vuepress/plugin-active-header-links/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-active-header-links + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-active-header-links diff --git a/packages/@vuepress/plugin-active-header-links/package.json b/packages/@vuepress/plugin-active-header-links/package.json index 051fea7237..9ae78f6b1e 100644 --- a/packages/@vuepress/plugin-active-header-links/package.json +++ b/packages/@vuepress/plugin-active-header-links/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-active-header-links", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - active header links", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "ts-debounce": "^3.0.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-back-to-top/CHANGELOG.md b/packages/@vuepress/plugin-back-to-top/CHANGELOG.md index 8f19c980cd..1fe60e1519 100644 --- a/packages/@vuepress/plugin-back-to-top/CHANGELOG.md +++ b/packages/@vuepress/plugin-back-to-top/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-back-to-top + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-back-to-top diff --git a/packages/@vuepress/plugin-back-to-top/package.json b/packages/@vuepress/plugin-back-to-top/package.json index b96c30867a..27cd143a2c 100644 --- a/packages/@vuepress/plugin-back-to-top/package.json +++ b/packages/@vuepress/plugin-back-to-top/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-back-to-top", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - back to top", "keywords": [ "vuepress-plugin", @@ -29,8 +29,8 @@ "copy": "cpx \"src/**/*.vue\" lib" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "ts-debounce": "^3.0.0", "vue": "^3.0.7" }, diff --git a/packages/@vuepress/plugin-container/CHANGELOG.md b/packages/@vuepress/plugin-container/CHANGELOG.md index 6f02b05eac..9b2cb3d3b9 100644 --- a/packages/@vuepress/plugin-container/CHANGELOG.md +++ b/packages/@vuepress/plugin-container/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-container + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-container diff --git a/packages/@vuepress/plugin-container/package.json b/packages/@vuepress/plugin-container/package.json index 6b19d35258..625191acc2 100644 --- a/packages/@vuepress/plugin-container/package.json +++ b/packages/@vuepress/plugin-container/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-container", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - markdown container", "keywords": [ "vuepress-plugin", @@ -30,10 +30,10 @@ }, "dependencies": { "@types/markdown-it": "^12.0.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/markdown": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/markdown": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "markdown-it": "^12.0.4", "markdown-it-container": "^3.0.0" }, diff --git a/packages/@vuepress/plugin-debug/CHANGELOG.md b/packages/@vuepress/plugin-debug/CHANGELOG.md index 334910a2a3..1dcfc3440d 100644 --- a/packages/@vuepress/plugin-debug/CHANGELOG.md +++ b/packages/@vuepress/plugin-debug/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-debug + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-debug diff --git a/packages/@vuepress/plugin-debug/package.json b/packages/@vuepress/plugin-debug/package.json index 9be489c758..2859ae7ff4 100644 --- a/packages/@vuepress/plugin-debug/package.json +++ b/packages/@vuepress/plugin-debug/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-debug", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - debug", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "copy": "cpx \"src/**/*.css\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "vue": "^3.0.7", "vue-router": "^4.0.4" }, diff --git a/packages/@vuepress/plugin-docsearch/CHANGELOG.md b/packages/@vuepress/plugin-docsearch/CHANGELOG.md index 4ef9fc5a80..add52d7ed8 100644 --- a/packages/@vuepress/plugin-docsearch/CHANGELOG.md +++ b/packages/@vuepress/plugin-docsearch/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-docsearch + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-docsearch diff --git a/packages/@vuepress/plugin-docsearch/package.json b/packages/@vuepress/plugin-docsearch/package.json index 3a5ff2ffe3..05817efecb 100644 --- a/packages/@vuepress/plugin-docsearch/package.json +++ b/packages/@vuepress/plugin-docsearch/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-docsearch", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - docsearch", "keywords": [ "vuepress-plugin", @@ -33,10 +33,10 @@ "@docsearch/css": "3.0.0-alpha.34", "@docsearch/js": "3.0.0-alpha.34", "@types/react": "^17.0.0", - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "preact": "^10.0.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-git/CHANGELOG.md b/packages/@vuepress/plugin-git/CHANGELOG.md index 80a491759e..6bca6796dd 100644 --- a/packages/@vuepress/plugin-git/CHANGELOG.md +++ b/packages/@vuepress/plugin-git/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-git + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-git diff --git a/packages/@vuepress/plugin-git/package.json b/packages/@vuepress/plugin-git/package.json index 5b9764c334..e61e65a703 100644 --- a/packages/@vuepress/plugin-git/package.json +++ b/packages/@vuepress/plugin-git/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-git", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - git", "keywords": [ "vuepress-plugin", @@ -28,7 +28,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.4", "execa": "^4.1.0" }, "publishConfig": { diff --git a/packages/@vuepress/plugin-google-analytics/CHANGELOG.md b/packages/@vuepress/plugin-google-analytics/CHANGELOG.md index 13094f9025..aa0ad87472 100644 --- a/packages/@vuepress/plugin-google-analytics/CHANGELOG.md +++ b/packages/@vuepress/plugin-google-analytics/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-google-analytics + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-google-analytics diff --git a/packages/@vuepress/plugin-google-analytics/package.json b/packages/@vuepress/plugin-google-analytics/package.json index 23dd369435..7128f3e103 100644 --- a/packages/@vuepress/plugin-google-analytics/package.json +++ b/packages/@vuepress/plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-google-analytics", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - google-analytics", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1" + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md b/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md index 5fc3e71cb8..3ff10fbe78 100644 --- a/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md +++ b/packages/@vuepress/plugin-medium-zoom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-medium-zoom + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-medium-zoom diff --git a/packages/@vuepress/plugin-medium-zoom/package.json b/packages/@vuepress/plugin-medium-zoom/package.json index 738eb1a06c..059db0064f 100644 --- a/packages/@vuepress/plugin-medium-zoom/package.json +++ b/packages/@vuepress/plugin-medium-zoom/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-medium-zoom", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - medium-zoom", "keywords": [ "vuepress-plugin", @@ -31,9 +31,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "medium-zoom": "^1.0.6", "vue": "^3.0.7" }, diff --git a/packages/@vuepress/plugin-nprogress/CHANGELOG.md b/packages/@vuepress/plugin-nprogress/CHANGELOG.md index 18f3c806b4..c4181bd36f 100644 --- a/packages/@vuepress/plugin-nprogress/CHANGELOG.md +++ b/packages/@vuepress/plugin-nprogress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-nprogress + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) diff --git a/packages/@vuepress/plugin-nprogress/package.json b/packages/@vuepress/plugin-nprogress/package.json index e8143ce3e7..7ff85ca3e8 100644 --- a/packages/@vuepress/plugin-nprogress/package.json +++ b/packages/@vuepress/plugin-nprogress/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-nprogress", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.4", "description": "VuePress plugin - nprogress", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "nprogress": "^0.2.0", "vue": "^3.0.7", "vue-router": "^4.0.4" diff --git a/packages/@vuepress/plugin-palette/CHANGELOG.md b/packages/@vuepress/plugin-palette/CHANGELOG.md index 68cbaec672..1c88a6eb3f 100644 --- a/packages/@vuepress/plugin-palette/CHANGELOG.md +++ b/packages/@vuepress/plugin-palette/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-palette + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-palette diff --git a/packages/@vuepress/plugin-palette/package.json b/packages/@vuepress/plugin-palette/package.json index 705b69fdd3..d6b1cedd7e 100644 --- a/packages/@vuepress/plugin-palette/package.json +++ b/packages/@vuepress/plugin-palette/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-palette", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - palette", "keywords": [ "vuepress-plugin", @@ -33,8 +33,8 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1" + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-prismjs/CHANGELOG.md b/packages/@vuepress/plugin-prismjs/CHANGELOG.md new file mode 100644 index 0000000000..3724e51b77 --- /dev/null +++ b/packages/@vuepress/plugin-prismjs/CHANGELOG.md @@ -0,0 +1,11 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + + +### Features + +* **plugin-prismjs:** add prismjs plugin ([638ad8a](https://github.com/vuepress/vuepress-next/commit/638ad8afdf9f3fe779e9eb1d02dca6c1caef0307)) diff --git a/packages/@vuepress/plugin-prismjs/package.json b/packages/@vuepress/plugin-prismjs/package.json index 9b1fb579d5..eaa8841995 100644 --- a/packages/@vuepress/plugin-prismjs/package.json +++ b/packages/@vuepress/plugin-prismjs/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-prismjs", - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "description": "VuePress plugin - prismjs", "keywords": [ "vuepress-plugin", @@ -29,7 +29,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/core": "2.0.0-beta.1", + "@vuepress/core": "2.0.0-beta.4", "prismjs": "^1.23.0" }, "devDependencies": { diff --git a/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md b/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md index 47a1c7c7c7..d2f811a1e2 100644 --- a/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md +++ b/packages/@vuepress/plugin-pwa-popup/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-pwa-popup + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-pwa-popup diff --git a/packages/@vuepress/plugin-pwa-popup/package.json b/packages/@vuepress/plugin-pwa-popup/package.json index 36e6484695..9c82bd9945 100644 --- a/packages/@vuepress/plugin-pwa-popup/package.json +++ b/packages/@vuepress/plugin-pwa-popup/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-pwa-popup", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - PWA popup", "keywords": [ "vuepress-plugin", @@ -31,11 +31,11 @@ "copy": "cpx \"src/**/*.css\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/plugin-pwa": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1" + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/plugin-pwa": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-pwa/CHANGELOG.md b/packages/@vuepress/plugin-pwa/CHANGELOG.md index febf9660d4..3bbc3bfac9 100644 --- a/packages/@vuepress/plugin-pwa/CHANGELOG.md +++ b/packages/@vuepress/plugin-pwa/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-pwa + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-pwa diff --git a/packages/@vuepress/plugin-pwa/package.json b/packages/@vuepress/plugin-pwa/package.json index 3d64ee91bd..9495885d6d 100644 --- a/packages/@vuepress/plugin-pwa/package.json +++ b/packages/@vuepress/plugin-pwa/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-pwa", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - progressive web application", "keywords": [ "vuepress-plugin", @@ -29,9 +29,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "mitt": "^2.1.0", "register-service-worker": "^1.7.2", "vue": "^3.0.7", diff --git a/packages/@vuepress/plugin-theme-data/CHANGELOG.md b/packages/@vuepress/plugin-theme-data/CHANGELOG.md index a7f271bcb7..37ff4674b8 100644 --- a/packages/@vuepress/plugin-theme-data/CHANGELOG.md +++ b/packages/@vuepress/plugin-theme-data/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/plugin-theme-data + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/plugin-theme-data diff --git a/packages/@vuepress/plugin-theme-data/package.json b/packages/@vuepress/plugin-theme-data/package.json index fda172377b..b448c837d9 100644 --- a/packages/@vuepress/plugin-theme-data/package.json +++ b/packages/@vuepress/plugin-theme-data/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/plugin-theme-data", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "VuePress plugin - theme data", "keywords": [ "vuepress-plugin", @@ -29,10 +29,10 @@ "copy": "cpx \"src/**/*.d.ts\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1" + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/shared/CHANGELOG.md b/packages/@vuepress/shared/CHANGELOG.md index faabe942aa..1ac9dc2256 100644 --- a/packages/@vuepress/shared/CHANGELOG.md +++ b/packages/@vuepress/shared/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/shared + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/shared diff --git a/packages/@vuepress/shared/package.json b/packages/@vuepress/shared/package.json index 89cb352370..db1adab239 100644 --- a/packages/@vuepress/shared/package.json +++ b/packages/@vuepress/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/shared", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "Utils that shared between VuePress node and client", "keywords": [ "vuepress", diff --git a/packages/@vuepress/theme-default/CHANGELOG.md b/packages/@vuepress/theme-default/CHANGELOG.md index 7926530041..0c1b444bf9 100644 --- a/packages/@vuepress/theme-default/CHANGELOG.md +++ b/packages/@vuepress/theme-default/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + + +### Features + +* **theme-default:** use prismjs plugin ([f131de4](https://github.com/vuepress/vuepress-next/commit/f131de4783685dbabfde4e4966182d570224a246)) + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) **Note:** Version bump only for package @vuepress/theme-default diff --git a/packages/@vuepress/theme-default/package.json b/packages/@vuepress/theme-default/package.json index e73bcbdd8f..867e9eba71 100644 --- a/packages/@vuepress/theme-default/package.json +++ b/packages/@vuepress/theme-default/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-default", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.4", "description": "Default theme of VuePress", "keywords": [ "vuepress-theme", @@ -29,19 +29,19 @@ "copy": "cpx \"src/**/*.{d.ts,vue,scss}\" lib" }, "dependencies": { - "@vuepress/client": "2.0.0-beta.1", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/plugin-active-header-links": "2.0.0-beta.1", - "@vuepress/plugin-back-to-top": "2.0.0-beta.1", - "@vuepress/plugin-container": "2.0.0-beta.1", - "@vuepress/plugin-git": "2.0.0-beta.1", - "@vuepress/plugin-medium-zoom": "2.0.0-beta.1", - "@vuepress/plugin-nprogress": "2.0.0-beta.2", - "@vuepress/plugin-palette": "2.0.0-beta.1", - "@vuepress/plugin-prismjs": "2.0.0-beta.3", - "@vuepress/plugin-theme-data": "2.0.0-beta.1", - "@vuepress/shared": "2.0.0-beta.1", - "@vuepress/utils": "2.0.0-beta.1", + "@vuepress/client": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/plugin-active-header-links": "2.0.0-beta.4", + "@vuepress/plugin-back-to-top": "2.0.0-beta.4", + "@vuepress/plugin-container": "2.0.0-beta.4", + "@vuepress/plugin-git": "2.0.0-beta.4", + "@vuepress/plugin-medium-zoom": "2.0.0-beta.4", + "@vuepress/plugin-nprogress": "2.0.0-beta.4", + "@vuepress/plugin-palette": "2.0.0-beta.4", + "@vuepress/plugin-prismjs": "2.0.0-beta.4", + "@vuepress/plugin-theme-data": "2.0.0-beta.4", + "@vuepress/shared": "2.0.0-beta.4", + "@vuepress/utils": "2.0.0-beta.4", "sass": "^1.32.8", "sass-loader": "^11.0.1", "vue": "^3.0.7", diff --git a/packages/@vuepress/theme-vue/CHANGELOG.md b/packages/@vuepress/theme-vue/CHANGELOG.md index 07afaf3217..eee1ad4628 100644 --- a/packages/@vuepress/theme-vue/CHANGELOG.md +++ b/packages/@vuepress/theme-vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/theme-vue + + + + + # [2.0.0-beta.2](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-03-14) **Note:** Version bump only for package @vuepress/theme-vue diff --git a/packages/@vuepress/theme-vue/package.json b/packages/@vuepress/theme-vue/package.json index f28afdebf0..83b6d3a842 100644 --- a/packages/@vuepress/theme-vue/package.json +++ b/packages/@vuepress/theme-vue/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/theme-vue", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.4", "description": "Vue theme of VuePress", "keywords": [ "vuepress-theme", @@ -28,7 +28,7 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/theme-default": "2.0.0-beta.2" + "@vuepress/theme-default": "2.0.0-beta.4" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/utils/CHANGELOG.md b/packages/@vuepress/utils/CHANGELOG.md index b5b405bfd1..0ccdd2aacf 100644 --- a/packages/@vuepress/utils/CHANGELOG.md +++ b/packages/@vuepress/utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package @vuepress/utils + + + + + # [2.0.0-beta.1](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.0...v2.0.0-beta.1) (2021-03-13) **Note:** Version bump only for package @vuepress/utils diff --git a/packages/@vuepress/utils/package.json b/packages/@vuepress/utils/package.json index d40d49d6c3..eaf026c9f6 100644 --- a/packages/@vuepress/utils/package.json +++ b/packages/@vuepress/utils/package.json @@ -1,6 +1,6 @@ { "name": "@vuepress/utils", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.4", "description": "Utils package of VuePress", "keywords": [ "vuepress", @@ -29,7 +29,7 @@ "@types/debug": "^4.1.5", "@types/fs-extra": "^9.0.8", "@types/hash-sum": "^1.0.0", - "@vuepress/shared": "2.0.0-beta.1", + "@vuepress/shared": "2.0.0-beta.4", "chalk": "^4.1.0", "debug": "^4.3.1", "fs-extra": "^9.1.0", diff --git a/packages/vuepress-vite/CHANGELOG.md b/packages/vuepress-vite/CHANGELOG.md index c71ea167a7..ba70f496ae 100644 --- a/packages/vuepress-vite/CHANGELOG.md +++ b/packages/vuepress-vite/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package vuepress-vite + + + + + # [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) **Note:** Version bump only for package vuepress-vite diff --git a/packages/vuepress-vite/package.json b/packages/vuepress-vite/package.json index 3c4e1c5a0e..b3b33438fd 100644 --- a/packages/vuepress-vite/package.json +++ b/packages/vuepress-vite/package.json @@ -1,6 +1,6 @@ { "name": "vuepress-vite", - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,9 +32,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-vite": "2.0.0-beta.3", - "@vuepress/cli": "2.0.0-beta.3", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/theme-default": "2.0.0-beta.2" + "@vuepress/bundler-vite": "2.0.0-beta.4", + "@vuepress/cli": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/theme-default": "2.0.0-beta.4" } } diff --git a/packages/vuepress/CHANGELOG.md b/packages/vuepress/CHANGELOG.md index 52fd65a69d..e24980a0fe 100644 --- a/packages/vuepress/CHANGELOG.md +++ b/packages/vuepress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.4](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2021-03-20) + +**Note:** Version bump only for package vuepress + + + + + # [2.0.0-beta.3](https://github.com/vuepress/vuepress-next/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2021-03-17) **Note:** Version bump only for package vuepress diff --git a/packages/vuepress/package.json b/packages/vuepress/package.json index f44fdf1607..6bce7edb4f 100644 --- a/packages/vuepress/package.json +++ b/packages/vuepress/package.json @@ -1,6 +1,6 @@ { "name": "vuepress", - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "description": "Vue-powered Static Site Generator", "keywords": [ "documentation", @@ -32,9 +32,9 @@ "clean": "rimraf lib *.tsbuildinfo" }, "dependencies": { - "@vuepress/bundler-webpack": "2.0.0-beta.3", - "@vuepress/cli": "2.0.0-beta.3", - "@vuepress/core": "2.0.0-beta.1", - "@vuepress/theme-default": "2.0.0-beta.2" + "@vuepress/bundler-webpack": "2.0.0-beta.4", + "@vuepress/cli": "2.0.0-beta.4", + "@vuepress/core": "2.0.0-beta.4", + "@vuepress/theme-default": "2.0.0-beta.4" } } From e9c9bd41dcd90f1cbb1697f0c0a77a7b0ff8491a Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Sun, 21 Mar 2021 23:42:33 +0800 Subject: [PATCH 0739/1014] build: bump dependencies --- package.json | 4 +- packages/@vuepress/bundler-vite/package.json | 6 +- .../@vuepress/bundler-webpack/package.json | 16 +- packages/@vuepress/cli/package.json | 2 +- packages/@vuepress/client/package.json | 2 +- packages/@vuepress/markdown/package.json | 2 +- .../plugin-active-header-links/package.json | 2 +- packages/@vuepress/plugin-debug/package.json | 2 +- .../@vuepress/plugin-docsearch/package.json | 2 +- packages/@vuepress/plugin-git/package.json | 2 +- .../@vuepress/plugin-nprogress/package.json | 2 +- packages/@vuepress/plugin-pwa/package.json | 2 +- packages/@vuepress/theme-default/package.json | 2 +- packages/@vuepress/utils/package.json | 2 +- yarn.lock | 481 +++++++++--------- 15 files changed, 267 insertions(+), 262 deletions(-) diff --git a/package.json b/package.json index 67a159c20a..a1f7071579 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@commitlint/cli": "^12.1.0", "@commitlint/config-conventional": "^12.1.0", - "@types/jest": "^26.0.20", + "@types/jest": "^26.0.21", "anywhere": "^1.5.0", "chokidar": "^3.5.1", "cpx2": "^3.0.0", @@ -51,7 +51,7 @@ "prettier-config-vuepress": "^1.2.0", "rimraf": "^3.0.2", "sort-package-json": "^1.49.0", - "ts-jest": "^26.5.3", + "ts-jest": "^26.5.4", "typescript": "^4.2.3" } } diff --git a/packages/@vuepress/bundler-vite/package.json b/packages/@vuepress/bundler-vite/package.json index a762eb149b..09cc602881 100644 --- a/packages/@vuepress/bundler-vite/package.json +++ b/packages/@vuepress/bundler-vite/package.json @@ -35,10 +35,10 @@ "@vuepress/core": "2.0.0-beta.4", "@vuepress/shared": "2.0.0-beta.4", "@vuepress/utils": "2.0.0-beta.4", - "rollup": "^2.41.2", - "vite": "^2.1.1", + "rollup": "^2.42.1", + "vite": "^2.1.2", "vue": "^3.0.7", - "vue-router": "^4.0.4" + "vue-router": "^4.0.5" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/bundler-webpack/package.json b/packages/@vuepress/bundler-webpack/package.json index 0ac270d13d..f7cc7d7e2c 100644 --- a/packages/@vuepress/bundler-webpack/package.json +++ b/packages/@vuepress/bundler-webpack/package.json @@ -36,24 +36,24 @@ "@vuepress/core": "2.0.0-beta.4", "@vuepress/shared": "2.0.0-beta.4", "@vuepress/utils": "2.0.0-beta.4", - "autoprefixer": "^10.2.4", - "copy-webpack-plugin": "^7.0.0", - "css-loader": "^5.1.1", + "autoprefixer": "^10.2.5", + "copy-webpack-plugin": "^8.0.0", + "css-loader": "^5.1.3", "esbuild-loader": "^2.10.0", "express": "^4.17.1", "file-loader": "^6.2.0", - "html-webpack-plugin": "^5.2.0", + "html-webpack-plugin": "^5.3.1", "mini-css-extract-plugin": "^1.3.9", "portfinder": "^1.0.28", - "postcss": "^8.2.6", + "postcss": "^8.2.8", "postcss-csso": "^5.0.0", - "postcss-loader": "^5.0.0", + "postcss-loader": "^5.2.0", "style-loader": "^2.0.0", "url-loader": "^4.1.1", "vue": "^3.0.7", "vue-loader": "^16.1.2", - "vue-router": "^4.0.4", - "webpack": "^5.24.2", + "vue-router": "^4.0.5", + "webpack": "^5.27.1", "webpack-chain": "^6.5.1", "webpack-dev-server": "4.0.0-beta.0", "webpack-merge": "^5.7.3" diff --git a/packages/@vuepress/cli/package.json b/packages/@vuepress/cli/package.json index b8828f7086..40d44705ce 100644 --- a/packages/@vuepress/cli/package.json +++ b/packages/@vuepress/cli/package.json @@ -35,7 +35,7 @@ "cac": "^6.7.2", "chokidar": "^3.5.1", "envinfo": "^7.7.4", - "esbuild": "^0.9.3" + "esbuild": "^0.9.6" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/client/package.json b/packages/@vuepress/client/package.json index d37c6f4284..08cfe89b97 100644 --- a/packages/@vuepress/client/package.json +++ b/packages/@vuepress/client/package.json @@ -30,7 +30,7 @@ "dependencies": { "@vuepress/shared": "2.0.0-beta.4", "vue": "^3.0.7", - "vue-router": "^4.0.4" + "vue-router": "^4.0.5" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/markdown/package.json b/packages/@vuepress/markdown/package.json index 0e00729aeb..9a3effd65d 100644 --- a/packages/@vuepress/markdown/package.json +++ b/packages/@vuepress/markdown/package.json @@ -30,7 +30,7 @@ "@vuepress/shared": "2.0.0-beta.4", "@vuepress/utils": "2.0.0-beta.4", "markdown-it": "^12.0.4", - "markdown-it-anchor": "^7.0.2", + "markdown-it-anchor": "^7.1.0", "markdown-it-emoji": "^2.0.0" }, "publishConfig": { diff --git a/packages/@vuepress/plugin-active-header-links/package.json b/packages/@vuepress/plugin-active-header-links/package.json index 9ae78f6b1e..3fd566cfbf 100644 --- a/packages/@vuepress/plugin-active-header-links/package.json +++ b/packages/@vuepress/plugin-active-header-links/package.json @@ -34,7 +34,7 @@ "@vuepress/utils": "2.0.0-beta.4", "ts-debounce": "^3.0.0", "vue": "^3.0.7", - "vue-router": "^4.0.4" + "vue-router": "^4.0.5" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-debug/package.json b/packages/@vuepress/plugin-debug/package.json index 2859ae7ff4..91dde2f0a8 100644 --- a/packages/@vuepress/plugin-debug/package.json +++ b/packages/@vuepress/plugin-debug/package.json @@ -33,7 +33,7 @@ "@vuepress/core": "2.0.0-beta.4", "@vuepress/utils": "2.0.0-beta.4", "vue": "^3.0.7", - "vue-router": "^4.0.4" + "vue-router": "^4.0.5" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-docsearch/package.json b/packages/@vuepress/plugin-docsearch/package.json index 05817efecb..b0e84a8af8 100644 --- a/packages/@vuepress/plugin-docsearch/package.json +++ b/packages/@vuepress/plugin-docsearch/package.json @@ -39,7 +39,7 @@ "@vuepress/utils": "2.0.0-beta.4", "preact": "^10.0.0", "vue": "^3.0.7", - "vue-router": "^4.0.4" + "vue-router": "^4.0.5" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-git/package.json b/packages/@vuepress/plugin-git/package.json index e61e65a703..97b785b4b9 100644 --- a/packages/@vuepress/plugin-git/package.json +++ b/packages/@vuepress/plugin-git/package.json @@ -29,7 +29,7 @@ }, "dependencies": { "@vuepress/core": "2.0.0-beta.4", - "execa": "^4.1.0" + "execa": "^5.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/plugin-nprogress/package.json b/packages/@vuepress/plugin-nprogress/package.json index 7ff85ca3e8..ca783db249 100644 --- a/packages/@vuepress/plugin-nprogress/package.json +++ b/packages/@vuepress/plugin-nprogress/package.json @@ -34,7 +34,7 @@ "@vuepress/utils": "2.0.0-beta.4", "nprogress": "^0.2.0", "vue": "^3.0.7", - "vue-router": "^4.0.4" + "vue-router": "^4.0.5" }, "devDependencies": { "@types/nprogress": "^0.2.0" diff --git a/packages/@vuepress/plugin-pwa/package.json b/packages/@vuepress/plugin-pwa/package.json index 9495885d6d..c4325a6061 100644 --- a/packages/@vuepress/plugin-pwa/package.json +++ b/packages/@vuepress/plugin-pwa/package.json @@ -35,7 +35,7 @@ "mitt": "^2.1.0", "register-service-worker": "^1.7.2", "vue": "^3.0.7", - "workbox-build": "^6.1.1" + "workbox-build": "^6.1.2" }, "devDependencies": { "@types/workbox-build": "^5.0.0" diff --git a/packages/@vuepress/theme-default/package.json b/packages/@vuepress/theme-default/package.json index 867e9eba71..24b2b4d9ce 100644 --- a/packages/@vuepress/theme-default/package.json +++ b/packages/@vuepress/theme-default/package.json @@ -45,7 +45,7 @@ "sass": "^1.32.8", "sass-loader": "^11.0.1", "vue": "^3.0.7", - "vue-router": "^4.0.4" + "vue-router": "^4.0.5" }, "publishConfig": { "access": "public" diff --git a/packages/@vuepress/utils/package.json b/packages/@vuepress/utils/package.json index eaf026c9f6..5ba6089ddb 100644 --- a/packages/@vuepress/utils/package.json +++ b/packages/@vuepress/utils/package.json @@ -35,7 +35,7 @@ "fs-extra": "^9.1.0", "globby": "^11.0.2", "hash-sum": "^2.0.0", - "ora": "^5.3.0", + "ora": "^5.4.0", "upath": "^2.0.1" }, "publishConfig": { diff --git a/yarn.lock b/yarn.lock index c045786e01..384822929b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2244,10 +2244,10 @@ is-module "^1.0.0" resolve "^1.17.0" -"@rollup/plugin-replace@^2.3.3": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz#7dd84c17755d62b509577f2db37eb524d7ca88ca" - integrity sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ== +"@rollup/plugin-replace@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz#c411b5ab72809fb1bfc8b487d8d02eef661460d3" + integrity sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ== dependencies: "@rollup/pluginutils" "^3.1.0" magic-string "^0.25.7" @@ -2449,10 +2449,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.20": - version "26.0.20" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" - integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== +"@types/jest@^26.0.21": + version "26.0.21" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.21.tgz#3a73c2731e7e4f0fbaea56ce7ff8c79cf812bd24" + integrity sha512-ab9TyM/69yg7eew9eOwKMUmvIZAKEGZYlq/dhe5/0IMUd/QLJv5ldRMdddSn+u22N13FP3s5jYyktxuBwY0kDA== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" @@ -3266,14 +3266,14 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.2.4: - version "10.2.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.4.tgz#c0e7cf24fcc6a1ae5d6250c623f0cb8beef2f7e1" - integrity sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw== +autoprefixer@^10.2.5: + version "10.2.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.5.tgz#096a0337dbc96c0873526d7fef5de4428d05382d" + integrity sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA== dependencies: - browserslist "^4.16.1" - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" + browserslist "^4.16.3" + caniuse-lite "^1.0.30001196" + colorette "^1.2.2" fraction.js "^4.0.13" normalize-range "^0.1.2" postcss-value-parser "^4.1.0" @@ -3413,10 +3413,10 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bl@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" - integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -3496,16 +3496,16 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.14.5, browserslist@^4.16.1: - version "4.16.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" - integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== +browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== dependencies: - caniuse-lite "^1.0.30001173" + caniuse-lite "^1.0.30001181" colorette "^1.2.1" - electron-to-chromium "^1.3.634" + electron-to-chromium "^1.3.649" escalade "^3.1.1" - node-releases "^1.1.69" + node-releases "^1.1.70" bs-logger@0.x: version "0.2.6" @@ -3665,10 +3665,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001181: - version "1.0.30001185" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" - integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== +caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001196: + version "1.0.30001203" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001203.tgz#a7a34df21a387d9deffcd56c000b8cf5ab540580" + integrity sha512-/I9tvnzU/PHMH7wBPrfDMSuecDeUKerjCPX7D0xBbaJZPxoT9m+yYxt0zCTkcijCkjTdim3H56Zm0i5Adxch4w== capture-exit@^2.0.0: version "2.0.0" @@ -3893,10 +3893,10 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== columnify@^1.5.4: version "1.5.4" @@ -4168,17 +4168,16 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-7.0.0.tgz#3506f867ca6e861ee2769d4deaf8fa0d2563ada9" - integrity sha512-SLjQNa5iE3BoCP76ESU9qYo9ZkEWtXoZxDurHoqPchAFRblJ9g96xTeC560UXBMre1Nx6ixIIUfiY3VcjpJw3g== +copy-webpack-plugin@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-8.0.0.tgz#3db5efb80d492127507303d1842e35011e2f318f" + integrity sha512-sqGe2FsB67wV/De+sz5azQklADe4thN016od6m7iK9KbjrSc1SEgg5QZ0LN+jGx5aZR52CbuXbqOhoIbqzzXlA== dependencies: - fast-glob "^3.2.4" + fast-glob "^3.2.5" glob-parent "^5.1.1" - globby "^11.0.1" - loader-utils "^2.0.0" + globby "^11.0.2" normalize-path "^3.0.0" - p-limit "^3.0.2" + p-limit "^3.1.0" schema-utils "^3.0.0" serialize-javascript "^5.0.1" @@ -4256,16 +4255,16 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-loader@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.1.1.tgz#9362d444a0f7c08c148a109596715c904e252879" - integrity sha512-5FfhpjwtuRgxqmusDidowqmLlcb+1HgnEDMsi2JhiUrZUcoc+cqw+mUtMIF/+OfeMYaaFCLYp1TaIt9H6I/fKA== +css-loader@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.1.3.tgz#87f6fc96816b20debe3cf682f85c7e56a963d0d1" + integrity sha512-CoPZvyh8sLiGARK3gqczpfdedbM74klGWurF2CsNZ2lhNaXdLIUks+3Mfax3WBeRuHoglU+m7KG/+7gY6G4aag== dependencies: camelcase "^6.2.0" cssesc "^3.0.0" icss-utils "^5.1.0" loader-utils "^2.0.0" - postcss "^8.2.6" + postcss "^8.2.8" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" @@ -4719,10 +4718,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.634: - version "1.3.647" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.647.tgz#8f1750ab7a5137f1a9a27f8f4ebdf550e08ae10b" - integrity sha512-Or2Nu8TjkmSywY9hk85K/Y6il28hchlonITz30fkC87qvSNupQl29O12BzDDDTnUFlo6kEIFL2QGSpkZDMxH8g== +electron-to-chromium@^1.3.649: + version "1.3.693" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.693.tgz#5089c506a925c31f93fcb173a003a22e341115dd" + integrity sha512-vUdsE8yyeu30RecppQtI+XTz2++LWLVEIYmzeCaCRLSdtKZ2eXqdJcrs85KwLiPOPVc6PELgWyXBsfqIvzGZag== emittery@^0.7.1: version "0.7.2" @@ -4856,10 +4855,10 @@ esbuild-loader@^2.10.0: type-fest "^0.21.3" webpack-sources "^2.2.0" -esbuild@^0.9.2, esbuild@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.3.tgz#09293a0b824159c6aa2488d1c6c22f57d8448f74" - integrity sha512-G8k0olucZp3LJ7I/p8y388t+IEyb2Y78nHrLeIxuqZqh6TYqDYP/B/7drAvYKfh83CGwKal9txVP+FTypsPJug== +esbuild@^0.9.2, esbuild@^0.9.3, esbuild@^0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.6.tgz#2cae519e7ce2328ecf57ae738090d07ce7245850" + integrity sha512-F6vASxU0wT/Davt9aj2qtDwDNSkQxh9VbyO56M7PDWD+D/Vgq/rmUDGDQo7te76W5auauVojjnQr/wTu3vpaUA== escalade@^3.1.1: version "3.1.1" @@ -5331,7 +5330,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.4: +fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.5: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== @@ -6017,14 +6016,13 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" -html-webpack-plugin@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.2.0.tgz#d675ad0027a89de6b3d9950e0b57656dcfd97fbf" - integrity sha512-0wkVlJKq7edCN793gdLgdAm5m196qI2vb5SGXy4AtGOFB/lYKyS10+3Vkhe6Bo0acddAW3QVw+0ysgWoko/IEQ== +html-webpack-plugin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" + integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== dependencies: "@types/html-minifier-terser" "^5.0.0" html-minifier-terser "^5.0.1" - loader-utils "^2.0.0" lodash "^4.17.20" pretty-error "^2.1.1" tapable "^2.0.0" @@ -6657,6 +6655,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -7565,12 +7568,13 @@ lodash@4.x, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^4.0.0" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" log-update@^4.0.0: version "4.0.0" @@ -7703,10 +7707,10 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-it-anchor@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-7.0.2.tgz#1ac28261e0ea377b8298a1a6760e422921346a03" - integrity sha512-UtYFAkce16mJlixXUMXUf14ZmOWK2YHLGKUpkZUn98w3qP8nVhb7k5sCBZmVHGMq3SpYtrxQ5XOdHQHRuLR40Q== +markdown-it-anchor@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-7.1.0.tgz#30fb21497bf59e83ff4d1ddc052d821962e2489e" + integrity sha512-loQggrwsIkkP7TOrESvmYkV2ikbQNNKhHcWyqC7/C2CmfHl1tkUizJJU8C5aGgg7J6oXVQJx17gk7i47tNn/lQ== markdown-it-container@^3.0.0: version "3.0.0" @@ -8198,10 +8202,10 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.69: - version "1.1.70" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" - integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== +node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== nopt@^4.0.1: version "4.0.3" @@ -8529,17 +8533,18 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" - integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== +ora@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4" + integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg== dependencies: - bl "^4.0.3" + bl "^4.1.0" chalk "^4.1.0" cli-cursor "^3.1.0" cli-spinners "^2.5.0" is-interactive "^1.0.0" - log-symbols "^4.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" strip-ansi "^6.0.0" wcwidth "^1.0.1" @@ -8975,10 +8980,10 @@ postcss-csso@^5.0.0: dependencies: csso "^4.0.2" -postcss-loader@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.0.0.tgz#bea95363dcb550d72ceb612ce44663356b7782d7" - integrity sha512-bOvyWP5VHCJbThbv7wrBwCBc3DsVpyCfd+k/wHOL3wTAMMHmSSfNts90EADf8bHa6I810ird1JBEKmBRgJu3cg== +postcss-loader@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.2.0.tgz#ccd6668a778902d653602289c765a8bc481986dc" + integrity sha512-uSuCkENFeUaOYsKrXm0eNNgVIxc71z8RcckLMbVw473rGojFnrUeqEz6zBgXsH2q1EIzXnO/4pEz9RhALjlITA== dependencies: cosmiconfig "^7.0.0" klona "^2.0.4" @@ -9041,12 +9046,12 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.1.10, postcss@^8.2.1, postcss@^8.2.6: - version "8.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" - integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== +postcss@^8.1.10, postcss@^8.2.1, postcss@^8.2.8: + version "8.2.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" + integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== dependencies: - colorette "^1.2.1" + colorette "^1.2.2" nanoid "^3.1.20" source-map "^0.6.1" @@ -9720,10 +9725,10 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup@^2.25.0, rollup@^2.38.5, rollup@^2.41.2: - version "2.41.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.41.2.tgz#b7db5cb7c21c2d524e8b26ef39c7e9808a290c7e" - integrity sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg== +rollup@^2.25.0, rollup@^2.38.5, rollup@^2.42.1: + version "2.42.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.42.1.tgz#6d675b7971e3bee510935326a0f7e556bb7d43de" + integrity sha512-/y7M2ULg06JOXmMpPzhTeQroJSchy8lX8q6qrjqil0jmLz6ejCWbQzVnWTsdmMQRhfU0QcwtiW8iZlmrGXWV4g== optionalDependencies: fsevents "~2.3.1" @@ -10824,10 +10829,10 @@ ts-debounce@^3.0.0: resolved "https://registry.yarnpkg.com/ts-debounce/-/ts-debounce-3.0.0.tgz#9beedf59c04de3b5bef8ff28bd6885624df357be" integrity sha512-7jiRWgN4/8IdvCxbIwnwg2W0bbYFBH6BxFqBjMKk442t7+liF2Z1H6AUCcl8e/pD93GjPru+axeiJwFmRww1WQ== -ts-jest@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.3.tgz#a6ee00ba547be3b09877550df40a1465d0295554" - integrity sha512-nBiiFGNvtujdLryU7MiMQh1iPmnZ/QvOskBbD2kURiI1MwqvxlxNnaAB/z9TbslMqCsSbu5BXvSSQPc5tvHGeA== +ts-jest@^26.5.4: + version "26.5.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.4.tgz#207f4c114812a9c6d5746dd4d1cdf899eafc9686" + integrity sha512-I5Qsddo+VTm94SukBJ4cPimOoFZsYTeElR2xy6H2TOVs+NsvgYglW8KuQgKoApOKuaU/Ix/vrF9ebFZlb5D2Pg== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -11204,12 +11209,12 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vite@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.1.1.tgz#13c7a7a5665b435f28fe8549caab181e0ad9af7b" - integrity sha512-nlTQrfYIkahcElD8O/oogbLbuKgAZRbvoFOth3GmRSglfPdY4RgfBjj0Fu7HeCU/2u3Jxc6jW4UuV22LGw1Yaw== +vite@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.1.2.tgz#0aecaf6d34112b24536df1a14cd8d74fdcab6e20" + integrity sha512-K96k5Nb1kywggFwZNGf/NQVZIrjMSvjebYWFIEQRu8AQWtzxatMF8/reExFXebmrfWAT3PTUk6l4zJBkpMtyVg== dependencies: - esbuild "^0.9.2" + esbuild "^0.9.3" postcss "^8.2.1" resolve "^1.19.0" rollup "^2.38.5" @@ -11237,10 +11242,10 @@ vue-loader@^16.1.2: hash-sum "^2.0.0" loader-utils "^2.0.0" -vue-router@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.4.tgz#ad9b4b7bbdad622407b4ff189b1646f48c1e9053" - integrity sha512-uN6PDEaYdU9aRO7mU+Dkr1uaY49hV3fucEDG/Vre/Qj8ct3RoJS16vcPrvKVzn69zDDjBV5b9Xw7fZA9r6b/Iw== +vue-router@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.5.tgz#dd0a4134bc950c37aef64b973e9ee1008428d8fa" + integrity sha512-AQq+pllb6FCc7rS6vh4PPcce3XA1jgK3hKNkQ4hXHwoVN7jOeAOMKCnX7XAX3etV9rmN7iNW8iIwgPk95ckBjw== vue@^3.0.7: version "3.0.7" @@ -11388,10 +11393,10 @@ webpack-sources@^2.1.1, webpack-sources@^2.2.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.24.2: - version "5.24.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.2.tgz#33790dad631e8b639f4246d762e257720875fe54" - integrity sha512-uxxKYEY4kMNjP+D2Y+8aw5Vd7ar4pMuKCNemxV26ysr1nk0YDiQTylg9U3VZIdkmI0YHa0uC8ABxL+uGxGWWJg== +webpack@^5.27.1: + version "5.27.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.27.1.tgz#6808fb6e45e35290cdb8ae43c7a10884839a3079" + integrity sha512-rxIDsPZ3Apl3JcqiemiLmWH+hAq04YeOXqvCxNZOnTp8ZgM9NEPtbu4CaMfMEf9KShnx/Ym8uLGmM6P4XnwCoA== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.46" @@ -11520,24 +11525,24 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -workbox-background-sync@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.1.1.tgz#db51214299b4be7a8aa274d8037f22d917241101" - integrity sha512-w1b3j7snz4pQ8xp0i5Nci40qlglqdk70pbORBtMfl9uikI1qGjYfKq6oYeResCXYxb5mUYS245HsUclb6RFVJA== +workbox-background-sync@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.1.2.tgz#76d971810063f38ef58b0c1cadb0bf2011617b54" + integrity sha512-rdXbGCI7KIxlw/rtVc3Bfp7S2ylZ7u+bSPoW8W6bxBR4RsSSagNIJOvkiS1+3zZOwvNcUxcRvVhDcwDz1cBbhQ== dependencies: - workbox-core "^6.1.1" + workbox-core "^6.1.2" -workbox-broadcast-update@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.1.1.tgz#5815749c9ad22ba4ef5184064a62fbdae3b04bf0" - integrity sha512-8fBNOQt8ojWWtz3FbkDnKo8CpN6l8UjD2HpQr8tue7HJVfk0X1gfnzZLIDg7HCXhqF7ld3iQbGQqGPf1ihTY6A== +workbox-broadcast-update@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.1.2.tgz#8a60526fb007a005c4d11381372ed6461276a0cd" + integrity sha512-pISOgOMH5pRVBlnvverxoaMgZzxdopzozuyjAt6UcctOjvuISQyTGa28C4qQ6XN20/rb3tk3n94N122wxicGXg== dependencies: - workbox-core "^6.1.1" + workbox-core "^6.1.2" -workbox-build@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.1.1.tgz#8333626fad45734d842293e6c2c1b725f4e15752" - integrity sha512-mAI3dS4VnXri6BFg02arK1403SqHy2sOlzC4NVAk6Rl2+Ddxs+PmJO4cMTyHw0KEhQFcwk6V8cJeGiXJXYzinA== +workbox-build@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.1.2.tgz#857445d4f795859203306f26d4e89dde143fdee2" + integrity sha512-Px9amQd46uJh37ZWoT2LIcXTgBEZAOB28otxqJRNS4jpUhtANHQG3yX6AhwPdcw6xTV5ufLXizBCkF8z/cox0A== dependencies: "@babel/core" "^7.11.1" "@babel/preset-env" "^7.11.0" @@ -11545,7 +11550,7 @@ workbox-build@^6.1.1: "@hapi/joi" "^16.1.8" "@rollup/plugin-babel" "^5.2.0" "@rollup/plugin-node-resolve" "^9.0.0" - "@rollup/plugin-replace" "^2.3.3" + "@rollup/plugin-replace" "^2.4.1" "@surma/rollup-plugin-off-main-thread" "^1.4.1" common-tags "^1.8.0" fast-json-stable-stringify "^2.1.0" @@ -11561,119 +11566,119 @@ workbox-build@^6.1.1: strip-comments "^2.0.1" tempy "^0.6.0" upath "^1.2.0" - workbox-background-sync "^6.1.1" - workbox-broadcast-update "^6.1.1" - workbox-cacheable-response "^6.1.1" - workbox-core "^6.1.1" - workbox-expiration "^6.1.1" - workbox-google-analytics "^6.1.1" - workbox-navigation-preload "^6.1.1" - workbox-precaching "^6.1.1" - workbox-range-requests "^6.1.1" - workbox-recipes "^6.1.1" - workbox-routing "^6.1.1" - workbox-strategies "^6.1.1" - workbox-streams "^6.1.1" - workbox-sw "^6.1.1" - workbox-window "^6.1.1" - -workbox-cacheable-response@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.1.1.tgz#1dc71393cbce83559ad05a8ccb6c6fafa4cccc70" - integrity sha512-jasNxelRrqCbzIAIMjHk7Ej9BOViBTQlvRJzv3Y0nYuWvxK0CDPQJSraGmTbu3LGiTBbrWEmxe1hVqvLyFKR9A== - dependencies: - workbox-core "^6.1.1" - -workbox-core@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.1.1.tgz#c8a9b424031b0cf7dacf9d7b8e023d126c9d0167" - integrity sha512-xsc/72AQxFtt2BHmwU8QtnVV+W5ln4nnYGuz9Q5sPWYGqW4cH0P+FpZDoGM59bmNEyNf+W9bEmidW//e5GsbwQ== - -workbox-expiration@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.1.1.tgz#4468c3cdfe76b5888f4ae7e3aad63797a7bc24b1" - integrity sha512-WbEv8NG1ZUiWI+jv3v7Jqed/PyCMoTpLcf3Nw7tKq0nGy6DFQtmSizO37uJ73oc8vttck97UBPQRiwyP1bZnAg== - dependencies: - workbox-core "^6.1.1" - -workbox-google-analytics@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.1.1.tgz#c31876954779d65e1334c2dc3232e46d6a5f925a" - integrity sha512-79PyeE4TyabGXqlDcRG2LKejs8yZ8OoU0/El0BwP8RGrZgp5GMDGuJkat4xggpRTVaOk8rb0aoSbVAYBWpa0pg== - dependencies: - workbox-background-sync "^6.1.1" - workbox-core "^6.1.1" - workbox-routing "^6.1.1" - workbox-strategies "^6.1.1" - -workbox-navigation-preload@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.1.1.tgz#3c7d39d5f102f4a76f24b48f97701b16ae56bd40" - integrity sha512-vX5qJDk1Z663nuSSSHkcBFQQJwEe4UHynd5uoX3oC0IlecPclAbyT3QetVh0wYdXv6G6XD/LBd3iNZmlSbTosw== - dependencies: - workbox-core "^6.1.1" - -workbox-precaching@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.1.1.tgz#f387ccdf60aab30228a4c7ed20a1cd8dee6aaaa4" - integrity sha512-x8OKwtjd5ewe/x3VlKcXri1P3Tm0uV+uChdMYg/QryrCR9K8x9xwhAw8PZPkwrY0bLLsJMUoX9/lBu8DmjVqTA== - dependencies: - workbox-core "^6.1.1" - workbox-routing "^6.1.1" - workbox-strategies "^6.1.1" - -workbox-range-requests@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.1.1.tgz#4e6d30e91cfc3855ff16cfa3df458e0487da2b4d" - integrity sha512-ikZ0ZwbFAVMzJ08rM/spn9zC2tohGllFVii9R1q0+xMKvoGDsyzoQnoKrXgyUvcjRPn6ByFncAJ5lUKKG4TGkA== - dependencies: - workbox-core "^6.1.1" - -workbox-recipes@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.1.1.tgz#0cd1bd3b2ba223db563428ec5d17e960081f70d4" - integrity sha512-GuzJXBQM+YaFxQwFvcRarAScUoRDoaWXKxxkLWHnCJf0H//MQ8zR9Ay1mv21N6iRoSH11S0u/4yxSeembG/fLA== - dependencies: - workbox-cacheable-response "^6.1.1" - workbox-core "^6.1.1" - workbox-expiration "^6.1.1" - workbox-precaching "^6.1.1" - workbox-routing "^6.1.1" - workbox-strategies "^6.1.1" - -workbox-routing@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.1.1.tgz#833ef6439905757241f9e4d56d8e282c20199c02" - integrity sha512-Az3Gt3cHNK+W0gTfSb4eKGfwEap9Slak16Krr5SiLhE1gXUY2C2O123HucVCedXgIoqTLOXMtNj71Cm6SwYDEg== - dependencies: - workbox-core "^6.1.1" - -workbox-strategies@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.1.1.tgz#6e0adda84bcda17d3d0c48baec2eab9b988b9ca6" - integrity sha512-7qYA9Eiq6hnP2dyenlD7ZtWI1ArBMT8yhTvHVlaOl9kYY7W+Iv3lAfRCjj/nucOKeVXATx4iVJEuFPn5J+8lzw== - dependencies: - workbox-core "^6.1.1" - -workbox-streams@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.1.1.tgz#0f204f070861eb1afccddeca4a5a8ba069596bd1" - integrity sha512-EMhY+Y2O7+XVy8MFRmiDwKezAXLzbgjQOJDbxWaGKtwNPbwOF6gGZjCvmnNAU1K+MAvvUNsAFR6AAUKMSfOyaw== - dependencies: - workbox-core "^6.1.1" - workbox-routing "^6.1.1" - -workbox-sw@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.1.1.tgz#203ce4611309df1bf9c142d1e3b3a214b1b62944" - integrity sha512-t6LLSx/rOS8d6w4+fsJOHDqGrjO89iBF0F8nBQgBleEPjvs9Be5j4B11y34Fw7s0CggeA3Kciutr4CqnQtPQUg== - -workbox-window@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.1.1.tgz#c1d60f6a56b49235e36edc73c593fa470ffffc72" - integrity sha512-ZT1enHgi6gYfm+HgRWq8nkqLFEtjOjkq3yGV/qhMmKvI39/sIdO4g2LcjqhnUjbhweedX+9KOOu3U4xasQpGcQ== - dependencies: - workbox-core "^6.1.1" + workbox-background-sync "^6.1.2" + workbox-broadcast-update "^6.1.2" + workbox-cacheable-response "^6.1.2" + workbox-core "^6.1.2" + workbox-expiration "^6.1.2" + workbox-google-analytics "^6.1.2" + workbox-navigation-preload "^6.1.2" + workbox-precaching "^6.1.2" + workbox-range-requests "^6.1.2" + workbox-recipes "^6.1.2" + workbox-routing "^6.1.2" + workbox-strategies "^6.1.2" + workbox-streams "^6.1.2" + workbox-sw "^6.1.2" + workbox-window "^6.1.2" + +workbox-cacheable-response@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.1.2.tgz#926d08ec79f99d773f1c5763ba287b17eef0c760" + integrity sha512-zSTQWJU+CBHC90N/Dccb9n0IzbTsmnl28usKOlVYbfHS5wit3izpD7djqqHzgzyS+gdemRjY4s02VV9WvyeD1w== + dependencies: + workbox-core "^6.1.2" + +workbox-core@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.1.2.tgz#b694ca77e1cdf43c330f8fb29122946aa7e6a7a1" + integrity sha512-69rch7EyPsNAx5Y5YlSoHV39/EEE1oDeb5zmLIy6+mgB4BnaG6u/tlDtvjvKqHcPM0gz2L5SzYtTEvWmk5WRTQ== + +workbox-expiration@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.1.2.tgz#0e31ff9cc12a2982430226cd7f34f7b16b3ddbae" + integrity sha512-86cXz8Ae5cAJMgJ6aD/8E1NMNON4qGnE4ir1G3VuOu1xLsx2ItbbXmz6b0BB2dZ+kX6BDwqE0wkgS5As5Sds7g== + dependencies: + workbox-core "^6.1.2" + +workbox-google-analytics@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.1.2.tgz#723bc0f03671027afbce5f10f18843907276ff59" + integrity sha512-7mO/gMms1yivnoVPnm8LXYHV2SsHBxTijYNXx032nzMX0gpBKJfRHmNvZDVRvn2L6YRxFiMg0x9JuHe2b2wSeg== + dependencies: + workbox-background-sync "^6.1.2" + workbox-core "^6.1.2" + workbox-routing "^6.1.2" + workbox-strategies "^6.1.2" + +workbox-navigation-preload@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.1.2.tgz#442d085035f9d2f57cd123e8e2a9f1fa1f0ec3b2" + integrity sha512-A41yO/mLjHMNV1EGWFTDExYAYkNvdtu2U0deRNL3HKKEMomqhLfFHJVg/b2jyarMf9Iosm7jHFbbTr8hiaMWwA== + dependencies: + workbox-core "^6.1.2" + +workbox-precaching@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.1.2.tgz#5d8d5d13793feb8119acfaa54b1a627bc766c881" + integrity sha512-jGwv6tMdIecsyBSdVCgXoD7bHxLRI972lvYOfvcosGjP3oFKe8p2DVPsn3TIzEVYTl+b3j59utC7yrOP9oEHSg== + dependencies: + workbox-core "^6.1.2" + workbox-routing "^6.1.2" + workbox-strategies "^6.1.2" + +workbox-range-requests@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.1.2.tgz#d6b75f19652db62a74c73c4b052fd46d2a462738" + integrity sha512-VNwg8DKpQtIRBQ+3GPAv7/OFjs1AdJDt06BJOnNxy4NiY3/Abhjry5P7SJ8uXMNwxiSHKpcLY8nAF+YVYlLuRQ== + dependencies: + workbox-core "^6.1.2" + +workbox-recipes@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.1.2.tgz#35586e9074f6e66033f6ceede850588a0a446dca" + integrity sha512-KT9qome7svIajmXP6/4kmZYr8UzWua6MO2GIeM0Th+mr28WzrHfw2iCeo3362hCW/yMiNMlP5uuXiqsaFxUjHg== + dependencies: + workbox-cacheable-response "^6.1.2" + workbox-core "^6.1.2" + workbox-expiration "^6.1.2" + workbox-precaching "^6.1.2" + workbox-routing "^6.1.2" + workbox-strategies "^6.1.2" + +workbox-routing@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.1.2.tgz#e0e6a745bb2fb9110eafaeed0d35fdece0f589b8" + integrity sha512-aRcqO+KX9A0J5W6hEeEpGhT6Lesqd3WfgaqlSD5LRajm0vAgYnlQzY37w6uC55Ev7M5Gh/xg0lA99qKc6ozsEA== + dependencies: + workbox-core "^6.1.2" + +workbox-strategies@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.1.2.tgz#3547eb17ebada31d095db98316913e1031b12352" + integrity sha512-IX7UNePHmmfb1dcXSxgcephYShnLc0pmP3MRT/TZGjv8f0qcZYH7Sr/lTmwaxGXQL8yCSCrQICZwJnHLw2G5Ng== + dependencies: + workbox-core "^6.1.2" + +workbox-streams@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.1.2.tgz#d7c2fd49bca6e0594e046144248730a245294c6d" + integrity sha512-iAHamHNZPSfN8k2QMrfei6/2FrReSHCkQUi4gU4B+tDXi4lY33/iU3+xlWLsMunLzoJhtPChDLG10s+EU5egvQ== + dependencies: + workbox-core "^6.1.2" + workbox-routing "^6.1.2" + +workbox-sw@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.1.2.tgz#0db44f0625ffb53c0e6e9a056a61dda57f066f45" + integrity sha512-daxYjELQlNmGLeQolz29vkiVKMcAzZrSv5MLPAghvid6sajpq9x+FfMGriWaZcpyGZVKStAf6XzUbvvm0sJ/HA== + +workbox-window@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.1.2.tgz#6db9a3b1eebf6470513d916852bfd1b1c918fe05" + integrity sha512-SXOAv56PWHzLhJcyQGPio1OXGzSza814lc2D42+go8CmeNIJDb03nzUi1FGMF4Tt1F7h5q8IYzq5bPQLTZ7IKQ== + dependencies: + workbox-core "^6.1.2" wrap-ansi@^6.2.0: version "6.2.0" From 4af50053c03408fc9e2e5426df89ae340de0e824 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Mon, 22 Mar 2021 14:25:38 +0800 Subject: [PATCH 0740/1014] fix(plugin-prismjs): avoid loading languages multiple times --- .../plugin-prismjs/src/loadLanguages.ts | 12 ++++++++--- .../plugin-prismjs/src/resolveHighlighter.ts | 21 ++++++------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/packages/@vuepress/plugin-prismjs/src/loadLanguages.ts b/packages/@vuepress/plugin-prismjs/src/loadLanguages.ts index 76982fc396..b3f8f8b602 100644 --- a/packages/@vuepress/plugin-prismjs/src/loadLanguages.ts +++ b/packages/@vuepress/plugin-prismjs/src/loadLanguages.ts @@ -1,7 +1,13 @@ -import * as loadLanguages from 'prismjs/components/index' +import * as Prism from 'prismjs' +import * as rawLoadLanguages from 'prismjs/components/index' // prevent warning messages // eslint-disable-next-line no-import-assign -loadLanguages.silent = true +rawLoadLanguages.silent = true -export { loadLanguages } +export const loadLanguages = (languages: string[]): void => { + const langsToLoad = languages.filter((item) => !Prism.languages[item]) + if (langsToLoad.length) { + rawLoadLanguages(langsToLoad) + } +} diff --git a/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts b/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts index 95b4593c16..6e12b78155 100644 --- a/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts +++ b/packages/@vuepress/plugin-prismjs/src/resolveHighlighter.ts @@ -22,26 +22,17 @@ export type Highlighter = (code: string) => string * Resolve syntax highlighter for corresponding language */ export const resolveHighlighter = (language: string): Highlighter | null => { - const lang = languageNameMap[language] || language - // get the languages that need to be loaded - const langsToLoad: string[] = [] - - // current language - if (!Prism.languages[lang]) { - langsToLoad.push(lang) - } + const lang: string = languageNameMap[language] || language + const langsToLoad = [lang] // doc language of current language - const docLang = docLangMap[lang] - if (docLang && !Prism.languages[docLang]) { - langsToLoad.push(docLang) + if (docLangMap[lang]) { + langsToLoad.push(docLangMap[lang]) } - // try to load languages if necessary - if (langsToLoad.length) { - loadLanguages(langsToLoad) - } + // try to load languages + loadLanguages(langsToLoad) // return null if current language could not be loaded // the doc language is not required so we don't check it here From f0b38722f1a06c736366a36d7c4888952d28c947 Mon Sep 17 00:00:00 2001 From: meteorlxy Date: Mon, 22 Mar 2021 15:20:24 +0800 Subject: [PATCH 0741/1014] fix(markdown): avoid wrapping highlighted code with multiple pre --- .../markdown/src/plugins/codePlugin/codePlugin.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts b/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts index e84233d751..c09212b334 100644 --- a/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts +++ b/packages/@vuepress/markdown/src/plugins/codePlugin/codePlugin.ts @@ -75,9 +75,14 @@ export const codePlugin: PluginWithOptions = ( const languageClass = `${options.langPrefix}${language.name}` - let result = `${code}
` + // wrap highlighted code with `
` and ``
+    let result = code.startsWith('${code}
` + + if (useVPre) { + result = `
Date: Mon, 22 Mar 2021 15:25:36 +0800
Subject: [PATCH 0742/1014] feat(plugin-shiki): add shiki plugin

---
 .vscode/settings.json                         |  1 +
 packages/@vuepress/plugin-shiki/package.json  | 38 +++++++++++++++++++
 packages/@vuepress/plugin-shiki/src/index.ts  | 25 ++++++++++++
 .../plugin-shiki/tsconfig.build.json          | 10 +++++
 packages/@vuepress/plugin-shiki/tsconfig.json |  4 ++
 tsconfig.json                                 |  1 +
 yarn.lock                                     | 20 ++++++++++
 7 files changed, 99 insertions(+)
 create mode 100644 packages/@vuepress/plugin-shiki/package.json
 create mode 100644 packages/@vuepress/plugin-shiki/src/index.ts
 create mode 100644 packages/@vuepress/plugin-shiki/tsconfig.build.json
 create mode 100644 packages/@vuepress/plugin-shiki/tsconfig.json

diff --git a/.vscode/settings.json b/.vscode/settings.json
index 8fcfeb86ed..327636ca77 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -28,6 +28,7 @@
     "prefetch",
     "preload",
     "prismjs",
+    "shiki",
     "slugify",
     "unmount",
     "vuepress",
diff --git a/packages/@vuepress/plugin-shiki/package.json b/packages/@vuepress/plugin-shiki/package.json
new file mode 100644
index 0000000000..8181690a84
--- /dev/null
+++ b/packages/@vuepress/plugin-shiki/package.json
@@ -0,0 +1,38 @@
+{
+  "name": "@vuepress/plugin-shiki",
+  "version": "2.0.0-beta.4",
+  "description": "VuePress plugin - shiki",
+  "keywords": [
+    "vuepress-plugin",
+    "vuepress",
+    "plugin",
+    "shiki",
+    "highlight"
+  ],
+  "homepage": "https://github.com/vuepress",
+  "bugs": {
+    "url": "https://github.com/vuepress/vuepress-next/issues"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vuepress/vuepress-next.git"
+  },
+  "license": "MIT",
+  "author": "meteorlxy",
+  "main": "lib/index.js",
+  "types": "lib/index.d.ts",
+  "files": [
+    "lib"
+  ],
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "clean": "rimraf lib *.tsbuildinfo"
+  },
+  "dependencies": {
+    "@vuepress/core": "2.0.0-beta.4",
+    "shiki": "^0.9.3"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/@vuepress/plugin-shiki/src/index.ts b/packages/@vuepress/plugin-shiki/src/index.ts
new file mode 100644
index 0000000000..3dc94e3b3d
--- /dev/null
+++ b/packages/@vuepress/plugin-shiki/src/index.ts
@@ -0,0 +1,25 @@
+import type { Plugin } from '@vuepress/core'
+import { getHighlighter } from 'shiki'
+import type { HighlighterOptions } from 'shiki'
+
+/**
+ * Options of @vuepress/plugin-shiki
+ */
+export type ShikiPluginOptions = Pick
+
+export const shikiPlugin: Plugin = ({
+  theme = 'nord',
+  langs = [],
+}) => ({
+  name: '@vuepress/plugin-shiki',
+
+  async extendsMarkdown(md) {
+    const highlighter = await getHighlighter({
+      theme,
+      langs,
+    })
+    md.options.highlight = (code, lang) => highlighter.codeToHtml(code, lang)
+  },
+})
+
+export default shikiPlugin
diff --git a/packages/@vuepress/plugin-shiki/tsconfig.build.json b/packages/@vuepress/plugin-shiki/tsconfig.build.json
new file mode 100644
index 0000000000..c7ad0cdfe6
--- /dev/null
+++ b/packages/@vuepress/plugin-shiki/tsconfig.build.json
@@ -0,0 +1,10 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "compilerOptions": {
+    "module": "CommonJS",
+    "rootDir": "./src",
+    "outDir": "./lib"
+  },
+  "include": ["./src"],
+  "references": [{ "path": "../core/tsconfig.build.json" }]
+}
diff --git a/packages/@vuepress/plugin-shiki/tsconfig.json b/packages/@vuepress/plugin-shiki/tsconfig.json
new file mode 100644
index 0000000000..3114e03c34
--- /dev/null
+++ b/packages/@vuepress/plugin-shiki/tsconfig.json
@@ -0,0 +1,4 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "include": ["./src", "./__tests__"]
+}
diff --git a/tsconfig.json b/tsconfig.json
index 97d74a4689..ae3c28fa6c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -28,6 +28,7 @@
     },
     { "path": "./packages/@vuepress/plugin-pwa/tsconfig.build.json" },
     { "path": "./packages/@vuepress/plugin-pwa-popup/tsconfig.build.json" },
+    { "path": "./packages/@vuepress/plugin-shiki/tsconfig.build.json" },
     { "path": "./packages/@vuepress/plugin-theme-data/tsconfig.build.json" },
     { "path": "./packages/@vuepress/shared/tsconfig.build.json" },
     { "path": "./packages/@vuepress/theme-default/tsconfig.build.json" },
diff --git a/yarn.lock b/yarn.lock
index 384822929b..aecc3055cd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8496,6 +8496,13 @@ onetime@^5.1.0, onetime@^5.1.2:
   dependencies:
     mimic-fn "^2.1.0"
 
+onigasm@^2.2.5:
+  version "2.2.5"
+  resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.5.tgz#cc4d2a79a0fa0b64caec1f4c7ea367585a676892"
+  integrity sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==
+  dependencies:
+    lru-cache "^5.1.1"
+
 open@^7.3.0:
   version "7.3.1"
   resolved "https://registry.yarnpkg.com/open/-/open-7.3.1.tgz#111119cb919ca1acd988f49685c4fdd0f4755356"
@@ -10010,6 +10017,14 @@ shellwords@^0.1.1:
   resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
   integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
 
+shiki@^0.9.3:
+  version "0.9.3"
+  resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.9.3.tgz#7bf7bcf3ed50ca525ec89cc09254abce4264d5ca"
+  integrity sha512-NEjg1mVbAUrzRv2eIcUt3TG7X9svX7l3n3F5/3OdFq+/BxUdmBOeKGiH4icZJBLHy354Shnj6sfBTemea2e7XA==
+  dependencies:
+    onigasm "^2.2.5"
+    vscode-textmate "^5.2.0"
+
 sigmund@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
@@ -11221,6 +11236,11 @@ vite@^2.1.2:
   optionalDependencies:
     fsevents "~2.3.1"
 
+vscode-textmate@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e"
+  integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
+
 vue-eslint-parser@^7.6.0:
   version "7.6.0"
   resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz#01ea1a2932f581ff244336565d712801f8f72561"

From 3045d50de084c7a936433aa74dca1bf2b77c460f Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Mon, 22 Mar 2021 15:31:05 +0800
Subject: [PATCH 0743/1014] refactor(theme-default): compatible with shiki

---
 packages/@vuepress/theme-default/src/styles/code.scss | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/@vuepress/theme-default/src/styles/code.scss b/packages/@vuepress/theme-default/src/styles/code.scss
index 33b23a33ff..88e6247d05 100644
--- a/packages/@vuepress/theme-default/src/styles/code.scss
+++ b/packages/@vuepress/theme-default/src/styles/code.scss
@@ -174,7 +174,8 @@ div[class*='language-'] {
 
   pre,
   pre[class*='language-'] {
-    background: transparent;
+    // force override the background color to be compatible with shiki
+    background: transparent !important;
     position: relative;
     z-index: 1;
   }

From be5a54af9f45b7a6b7285d761ac8409451dd450c Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Mon, 22 Mar 2021 16:23:48 +0800
Subject: [PATCH 0744/1014] docs(theme-default): add styles guide

---
 docs/.vuepress/configs/navbar/en.ts       |  1 +
 docs/.vuepress/configs/navbar/zh.ts       |  1 +
 docs/.vuepress/configs/sidebar/en.ts      |  1 +
 docs/.vuepress/configs/sidebar/zh.ts      |  1 +
 docs/reference/default-theme/styles.md    | 51 +++++++++++++++++++++++
 docs/zh/reference/default-theme/styles.md | 51 +++++++++++++++++++++++
 6 files changed, 106 insertions(+)
 create mode 100644 docs/reference/default-theme/styles.md
 create mode 100644 docs/zh/reference/default-theme/styles.md

diff --git a/docs/.vuepress/configs/navbar/en.ts b/docs/.vuepress/configs/navbar/en.ts
index ab552bd584..642ac37b1c 100644
--- a/docs/.vuepress/configs/navbar/en.ts
+++ b/docs/.vuepress/configs/navbar/en.ts
@@ -38,6 +38,7 @@ export const en: NavbarConfig = [
           '/reference/default-theme/frontmatter.md',
           '/reference/default-theme/components.md',
           '/reference/default-theme/markdown.md',
+          '/reference/default-theme/styles.md',
         ],
       },
       {
diff --git a/docs/.vuepress/configs/navbar/zh.ts b/docs/.vuepress/configs/navbar/zh.ts
index 88cb6998b0..6a37705826 100644
--- a/docs/.vuepress/configs/navbar/zh.ts
+++ b/docs/.vuepress/configs/navbar/zh.ts
@@ -35,6 +35,7 @@ export const zh: NavbarConfig = [
           '/zh/reference/default-theme/frontmatter.md',
           '/zh/reference/default-theme/components.md',
           '/zh/reference/default-theme/markdown.md',
+          '/zh/reference/default-theme/styles.md',
         ],
       },
       {
diff --git a/docs/.vuepress/configs/sidebar/en.ts b/docs/.vuepress/configs/sidebar/en.ts
index 8f983b45ad..449309f0cf 100644
--- a/docs/.vuepress/configs/sidebar/en.ts
+++ b/docs/.vuepress/configs/sidebar/en.ts
@@ -64,6 +64,7 @@ export const en: SidebarConfig = {
         '/reference/default-theme/frontmatter.md',
         '/reference/default-theme/components.md',
         '/reference/default-theme/markdown.md',
+        '/reference/default-theme/styles.md',
       ],
     },
   ],
diff --git a/docs/.vuepress/configs/sidebar/zh.ts b/docs/.vuepress/configs/sidebar/zh.ts
index a3257356f1..60f44500be 100644
--- a/docs/.vuepress/configs/sidebar/zh.ts
+++ b/docs/.vuepress/configs/sidebar/zh.ts
@@ -67,6 +67,7 @@ export const zh: SidebarConfig = {
         '/zh/reference/default-theme/frontmatter.md',
         '/zh/reference/default-theme/components.md',
         '/zh/reference/default-theme/markdown.md',
+        '/zh/reference/default-theme/styles.md',
       ],
     },
   ],
diff --git a/docs/reference/default-theme/styles.md b/docs/reference/default-theme/styles.md
new file mode 100644
index 0000000000..f9def05ef4
--- /dev/null
+++ b/docs/reference/default-theme/styles.md
@@ -0,0 +1,51 @@
+# Styles
+
+Default theme uses [SASS](https://sass-lang.com/) as the CSS pre-processor.
+
+Users can custom style variables via [palette file](#palette-file), and add extra styles via [style file](#style-file).
+
+## Palette File
+
+You can create a `.vuepress/palette.scss` file to override predefined variables of default theme:
+
+```scss
+// colors
+$accentColor: #3eaf7c !default;
+$textColor: #2c3e50 !default;
+$borderColor: #eaecef !default;
+$codeBgColor: #282c34 !default;
+$arrowBgColor: #ccc !default;
+$tipColor: #42b983 !default;
+$warningColor: #e7c000 !default;
+$dangerColor: #cc0000 !default;
+$badgeTipColor: $tipColor !default;
+$badgeWarningColor: $warningColor !default;
+$badgeDangerColor: $dangerColor !default;
+
+// layout
+$navbarHeight: 3.6rem !default;
+$sidebarWidth: 20rem !default;
+$contentWidth: 740px !default;
+$homePageWidth: 960px !default;
+
+// responsive breakpoints
+$MQNarrow: 959px !default;
+$MQMobile: 719px !default;
+$MQMobileNarrow: 419px !default;
+
+// code
+$lineNumbersWrapperWidth: 3.5rem !default;
+$codeLang: 'c' 'cpp' 'cs' 'css' 'dart' 'docker' 'fs' 'go' 'html' 'java' 'js'
+  'json' 'kt' 'less' 'makefile' 'md' 'php' 'py' 'rb' 'rs' 'sass' 'scss' 'sh'
+  'styl' 'ts' 'toml' 'vue' 'yml' !default;
+```
+
+## Style File
+
+You can override default styles or add extra styles in `.vuepress/index.scss` file. For example:
+
+```scss
+:root {
+  scroll-behavior: smooth;
+}
+```
diff --git a/docs/zh/reference/default-theme/styles.md b/docs/zh/reference/default-theme/styles.md
new file mode 100644
index 0000000000..bc61fa484f
--- /dev/null
+++ b/docs/zh/reference/default-theme/styles.md
@@ -0,0 +1,51 @@
+# 样式
+
+默认主题使用 [SASS](https://sass-lang.com/) 作为 CSS 预处理器。
+
+用户可以通过 [palette 文件](#palette-文件) 来自定义样式变量,还可以通过 [style 文件](#style-文件) 来添加额外的样式。
+
+## Palette 文件
+
+你可以创建一个 `.vuepress/palette.scss` 文件来覆盖默认主题的预定义变量:
+
+```scss
+// colors
+$accentColor: #3eaf7c !default;
+$textColor: #2c3e50 !default;
+$borderColor: #eaecef !default;
+$codeBgColor: #282c34 !default;
+$arrowBgColor: #ccc !default;
+$tipColor: #42b983 !default;
+$warningColor: #e7c000 !default;
+$dangerColor: #cc0000 !default;
+$badgeTipColor: $tipColor !default;
+$badgeWarningColor: $warningColor !default;
+$badgeDangerColor: $dangerColor !default;
+
+// layout
+$navbarHeight: 3.6rem !default;
+$sidebarWidth: 20rem !default;
+$contentWidth: 740px !default;
+$homePageWidth: 960px !default;
+
+// responsive breakpoints
+$MQNarrow: 959px !default;
+$MQMobile: 719px !default;
+$MQMobileNarrow: 419px !default;
+
+// code
+$lineNumbersWrapperWidth: 3.5rem !default;
+$codeLang: 'c' 'cpp' 'cs' 'css' 'dart' 'docker' 'fs' 'go' 'html' 'java' 'js'
+  'json' 'kt' 'less' 'makefile' 'md' 'php' 'py' 'rb' 'rs' 'sass' 'scss' 'sh'
+  'styl' 'ts' 'toml' 'vue' 'yml' !default;
+```
+
+## Style 文件
+
+你可以在 `.vuepress/index.scss` 文件中覆盖默认样式或者添加额外样式。例如:
+
+```scss
+:root {
+  scroll-behavior: smooth;
+}
+```

From 676aa4db259c03f5e1836907361c19b743c30695 Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Mon, 22 Mar 2021 17:18:54 +0800
Subject: [PATCH 0745/1014] chore(core): add debug log for createAppPages

---
 packages/@vuepress/core/src/app/createAppPages.ts | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/@vuepress/core/src/app/createAppPages.ts b/packages/@vuepress/core/src/app/createAppPages.ts
index 04d775c468..98015f7e97 100644
--- a/packages/@vuepress/core/src/app/createAppPages.ts
+++ b/packages/@vuepress/core/src/app/createAppPages.ts
@@ -1,11 +1,15 @@
-import { globby } from '@vuepress/utils'
+import { debug, globby } from '@vuepress/utils'
 import { createPage } from '../page'
 import type { App, Page, PageOptions } from '../types'
 
+const log = debug('vuepress:core/app')
+
 /**
  * Create pages for vuepress app
  */
 export const createAppPages = async (app: App): Promise => {
+  log('createAppPages start')
+
   // resolve page file paths according to the page patterns
   const pagePaths = await globby(app.options.pagePatterns, {
     cwd: app.dir.source(),
@@ -39,5 +43,7 @@ export const createAppPages = async (app: App): Promise => {
     )
   }
 
+  log('createAppPages finish')
+
   return pages
 }

From 73227228e42e55aef90228d20f63890edd29cf72 Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Mon, 22 Mar 2021 18:37:18 +0800
Subject: [PATCH 0746/1014] docs(plugin-shiki): add plugin reference

---
 docs/.vuepress/configs/sidebar/en.ts |  1 +
 docs/.vuepress/configs/sidebar/zh.ts |  1 +
 docs/reference/plugin/shiki.md       | 39 ++++++++++++++++++++++++++++
 docs/zh/reference/plugin/shiki.md    | 39 ++++++++++++++++++++++++++++
 4 files changed, 80 insertions(+)
 create mode 100644 docs/reference/plugin/shiki.md
 create mode 100644 docs/zh/reference/plugin/shiki.md

diff --git a/docs/.vuepress/configs/sidebar/en.ts b/docs/.vuepress/configs/sidebar/en.ts
index 449309f0cf..92dcd39b86 100644
--- a/docs/.vuepress/configs/sidebar/en.ts
+++ b/docs/.vuepress/configs/sidebar/en.ts
@@ -86,6 +86,7 @@ export const en: SidebarConfig = {
         '/reference/plugin/prismjs.md',
         '/reference/plugin/pwa.md',
         '/reference/plugin/pwa-popup.md',
+        '/reference/plugin/shiki.md',
         '/reference/plugin/theme-data.md',
       ],
     },
diff --git a/docs/.vuepress/configs/sidebar/zh.ts b/docs/.vuepress/configs/sidebar/zh.ts
index 60f44500be..34b616b23b 100644
--- a/docs/.vuepress/configs/sidebar/zh.ts
+++ b/docs/.vuepress/configs/sidebar/zh.ts
@@ -89,6 +89,7 @@ export const zh: SidebarConfig = {
         '/zh/reference/plugin/prismjs.md',
         '/zh/reference/plugin/pwa.md',
         '/zh/reference/plugin/pwa-popup.md',
+        '/zh/reference/plugin/shiki.md',
         '/zh/reference/plugin/theme-data.md',
       ],
     },
diff --git a/docs/reference/plugin/shiki.md b/docs/reference/plugin/shiki.md
new file mode 100644
index 0000000000..8b156fb142
--- /dev/null
+++ b/docs/reference/plugin/shiki.md
@@ -0,0 +1,39 @@
+# shiki
+
+> @vuepress/plugin-shiki
+
+This plugin will enable syntax highlighting for markdown code fence with [Shiki](https://shiki.matsu.io/).
+
+## Options
+
+### theme
+
+- Type: `IThemeRegistration`
+
+- Default: `'nord'`
+
+- Details:
+
+  Theme of shiki.
+
+  This option will be forwarded to `getHighlighter()` method of shiki. 
+
+- Also see:
+  - [shiki > themes](https://github.com/shikijs/shiki/blob/master/docs/themes.md)
+
+### langs
+
+- Type: `(Lang | ILanguageRegistration)[]`
+
+- Default: `[]`
+
+- Details:
+
+  Languages of shiki.
+
+  This option will be forwarded to `getHighlighter()` method of shiki. 
+
+  If no languages are provided, shiki will load all available languages automatically.
+
+- Also see:
+  - [shiki > languages](https://github.com/shikijs/shiki/blob/master/docs/languages.md)
diff --git a/docs/zh/reference/plugin/shiki.md b/docs/zh/reference/plugin/shiki.md
new file mode 100644
index 0000000000..1f7cfa34ea
--- /dev/null
+++ b/docs/zh/reference/plugin/shiki.md
@@ -0,0 +1,39 @@
+# shiki
+
+> @vuepress/plugin-shiki
+
+该插件使用 [Shiki](https://shiki.matsu.io/) 来为 Markdown 代码块启用代码高亮。
+
+## 配置项
+
+### theme
+
+- 类型: `IThemeRegistration`
+
+- 默认值: `'nord'`
+
+- 详情:
+
+  Shiki 的主题。
+
+  该配置项会被传递到 Shiki 的 `getHighlighter()` 方法中。
+
+- 参考:
+  - [shiki > themes](https://github.com/shikijs/shiki/blob/master/docs/themes.md)
+
+### langs
+
+- 类型: `(Lang | ILanguageRegistration)[]`
+
+- 默认值: `[]`
+
+- 详情:
+
+  Shiki 的语言。
+
+  该配置项会被传递到 Shiki 的 `getHighlighter()` 方法中。
+
+  如果没有传入语言, Shiki 会自动加载所有可用的语言。
+
+- 参考:
+  - [shiki > languages](https://github.com/shikijs/shiki/blob/master/docs/languages.md)

From ea5001076b86a7dc8b807811796a8ed44fbcf7b9 Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Mon, 22 Mar 2021 22:51:55 +0800
Subject: [PATCH 0747/1014] fix(theme-default): allow NavLink in sidebar
 children

---
 packages/@vuepress/theme-default/src/types/nav.ts | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/packages/@vuepress/theme-default/src/types/nav.ts b/packages/@vuepress/theme-default/src/types/nav.ts
index 3984bbd2e4..ad0727fe30 100644
--- a/packages/@vuepress/theme-default/src/types/nav.ts
+++ b/packages/@vuepress/theme-default/src/types/nav.ts
@@ -36,10 +36,12 @@ export type ResolvedNavbarItem = NavbarItem | NavGroup
  * Sidebar types
  */
 // user config
-export interface SidebarItem extends NavLink, NavGroup {
+export interface SidebarItem
+  extends NavLink,
+    NavGroup {
   isGroup?: false
 }
-export interface SidebarGroup extends NavGroup {
+export interface SidebarGroup extends NavGroup {
   isGroup: true
 }
 export type SidebarConfigArray = (SidebarGroup | SidebarItem | string)[]

From 591fcb56830c62d8b78cdd6ba5cad97ea04e0cca Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Mon, 22 Mar 2021 23:48:05 +0800
Subject: [PATCH 0748/1014] docs(theme-default): fix path of style files

---
 docs/reference/default-theme/styles.md    | 4 ++--
 docs/zh/reference/default-theme/styles.md | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/docs/reference/default-theme/styles.md b/docs/reference/default-theme/styles.md
index f9def05ef4..38cc78991b 100644
--- a/docs/reference/default-theme/styles.md
+++ b/docs/reference/default-theme/styles.md
@@ -6,7 +6,7 @@ Users can custom style variables via [palette file](#palette-file), and add extr
 
 ## Palette File
 
-You can create a `.vuepress/palette.scss` file to override predefined variables of default theme:
+You can create a `.vuepress/styles/palette.scss` file to override predefined variables of default theme:
 
 ```scss
 // colors
@@ -42,7 +42,7 @@ $codeLang: 'c' 'cpp' 'cs' 'css' 'dart' 'docker' 'fs' 'go' 'html' 'java' 'js'
 
 ## Style File
 
-You can override default styles or add extra styles in `.vuepress/index.scss` file. For example:
+You can override default styles or add extra styles in `.vuepress/styles/index.scss` file. For example:
 
 ```scss
 :root {
diff --git a/docs/zh/reference/default-theme/styles.md b/docs/zh/reference/default-theme/styles.md
index bc61fa484f..4a5fa83969 100644
--- a/docs/zh/reference/default-theme/styles.md
+++ b/docs/zh/reference/default-theme/styles.md
@@ -6,7 +6,7 @@
 
 ## Palette 文件
 
-你可以创建一个 `.vuepress/palette.scss` 文件来覆盖默认主题的预定义变量:
+你可以创建一个 `.vuepress/styles/palette.scss` 文件来覆盖默认主题的预定义变量:
 
 ```scss
 // colors
@@ -42,7 +42,7 @@ $codeLang: 'c' 'cpp' 'cs' 'css' 'dart' 'docker' 'fs' 'go' 'html' 'java' 'js'
 
 ## Style 文件
 
-你可以在 `.vuepress/index.scss` 文件中覆盖默认样式或者添加额外样式。例如:
+你可以在 `.vuepress/styles/index.scss` 文件中覆盖默认样式或者添加额外样式。例如:
 
 ```scss
 :root {

From 68ef81988f646ed2f5b39394f136d8a20c4aec78 Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Wed, 24 Mar 2021 19:03:33 +0800
Subject: [PATCH 0749/1014] docs: use path.resolve() for absolute file paths

---
 docs/guide/assets.md            |  2 +-
 docs/guide/plugin.md            |  2 +-
 docs/guide/theme.md             |  2 +-
 docs/reference/config.md        |  2 +-
 docs/reference/plugin-api.md    | 10 +++++-----
 docs/zh/guide/assets.md         |  2 +-
 docs/zh/guide/plugin.md         |  2 +-
 docs/zh/guide/theme.md          |  2 +-
 docs/zh/reference/config.md     |  2 +-
 docs/zh/reference/plugin-api.md | 10 +++++-----
 10 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/docs/guide/assets.md b/docs/guide/assets.md
index 7a67c92692..5e81a4f787 100644
--- a/docs/guide/assets.md
+++ b/docs/guide/assets.md
@@ -91,7 +91,7 @@ The path aliases that set in config file are also supported:
 ```js
 module.exports = {
   alias: {
-    '@alias': '/path/to/some/dir',
+    '@alias': path.resolve(__dirname, './path/to/some/dir'),
   },
 }
 ```
diff --git a/docs/guide/plugin.md b/docs/guide/plugin.md
index 8a04ae5378..2c9b9c1543 100644
--- a/docs/guide/plugin.md
+++ b/docs/guide/plugin.md
@@ -36,7 +36,7 @@ But if you have too many things to do in your config file, it's better to extrac
 ```js
 module.exports = {
   plugins: [
-    '/path/to/your-plugin.js',
+    path.resolve(__dirname, './path/to/your-plugin.js'),
     require('./another-plugin'),
   ],
 }
diff --git a/docs/guide/theme.md b/docs/guide/theme.md
index 9110fd4fd1..8f09db9d78 100644
--- a/docs/guide/theme.md
+++ b/docs/guide/theme.md
@@ -45,7 +45,7 @@ Then, set the absolute path of the theme directory to use it:
 
 ```js
 module.exports = {
-  theme: '/path/to/docs/.vuepress/theme',
+  theme: path.resolve(__dirname, './path/to/docs/.vuepress/theme'),
 }
 ```
 
diff --git a/docs/reference/config.md b/docs/reference/config.md
index 6272458149..83c876dd31 100644
--- a/docs/reference/config.md
+++ b/docs/reference/config.md
@@ -160,7 +160,7 @@ Rendered as:
 module.exports = {
   theme: 'vuepress-theme-foo',
   theme: 'bar',
-  theme: '/path/to/local/theme',
+  theme: path.resolve(__dirname, './path/to/local/theme'),
 }
 ```
 
diff --git a/docs/reference/plugin-api.md b/docs/reference/plugin-api.md
index ee2235f630..7a444ab41b 100644
--- a/docs/reference/plugin-api.md
+++ b/docs/reference/plugin-api.md
@@ -89,7 +89,7 @@ module.exports = {
     // two-element tuple
     ['vuepress-plugin-foo', false],
     ['bar', true],
-    ['/path/to/local/plugin', { /* options */ }],
+    [path.resolve(__dirname, './path/to/local/plugin'), { /* options */ }],
     [require('vuepress-plugin-baz'), true],
 
     // only use the first element
@@ -118,7 +118,7 @@ module.exports = {
 ```js
 module.exports = {
   alias: {
-    '@alias': '/path/to/alias',
+    '@alias': path.resolve(__dirname, './path/to/alias'),
   },
 }
 ```
@@ -249,7 +249,7 @@ export default {
 
 ```js
 module.exports = {
-  clientAppEnhanceFiles: '/path/to/clientAppEnhance.js',
+  clientAppEnhanceFiles: path.resolve(__dirname, './path/to/clientAppEnhance.js'),
 }
 ```
 
@@ -267,7 +267,7 @@ module.exports = {
 
 ```js
 module.exports = {
-  clientAppRootComponentFiles: '/path/to/RootComponent.vue',
+  clientAppRootComponentFiles: path.resolve(__dirname, './path/to/RootComponent.vue'),
 }
 ```
 
@@ -285,7 +285,7 @@ module.exports = {
 
 ```js
 module.exports = {
-  clientAppSetupFiles: '/path/to/clientAppSetup.js',
+  clientAppSetupFiles: path.resolve(__dirname, './path/to/clientAppSetup.js'),
 }
 ```
 
diff --git a/docs/zh/guide/assets.md b/docs/zh/guide/assets.md
index 3a194ae8e2..de1c138fc1 100644
--- a/docs/zh/guide/assets.md
+++ b/docs/zh/guide/assets.md
@@ -91,7 +91,7 @@ npm install -D package-name
 ```js
 module.exports = {
   alias: {
-    '@alias': '/path/to/some/dir',
+    '@alias': path.resolve(__dirname, './path/to/some/dir'),
   },
 }
 ```
diff --git a/docs/zh/guide/plugin.md b/docs/zh/guide/plugin.md
index 14dbb0cb77..05b2a80d0e 100644
--- a/docs/zh/guide/plugin.md
+++ b/docs/zh/guide/plugin.md
@@ -36,7 +36,7 @@ module.exports = {
 ```js
 module.exports = {
   plugins: [
-    '/path/to/your-plugin.js',
+    path.resolve(__dirname, './path/to/your-plugin.js'),
     require('./another-plugin'),
   ],
 }
diff --git a/docs/zh/guide/theme.md b/docs/zh/guide/theme.md
index 42dbb74d25..04a5116a8b 100644
--- a/docs/zh/guide/theme.md
+++ b/docs/zh/guide/theme.md
@@ -45,7 +45,7 @@ module.exports = {
 
 ```js
 module.exports = {
-  theme: '/path/to/docs/.vuepress/theme',
+  theme: path.resolve(__dirname, './path/to/docs/.vuepress/theme'),
 }
 ```
 
diff --git a/docs/zh/reference/config.md b/docs/zh/reference/config.md
index eca8b6805d..d68548c035 100644
--- a/docs/zh/reference/config.md
+++ b/docs/zh/reference/config.md
@@ -159,7 +159,7 @@ module.exports = {
 module.exports = {
   theme: 'vuepress-theme-foo',
   theme: 'bar',
-  theme: '/path/to/local/theme',
+  theme: path.resolve(__dirname, './path/to/local/theme'),
 }
 ```
 
diff --git a/docs/zh/reference/plugin-api.md b/docs/zh/reference/plugin-api.md
index c238ce9a25..aa2196b7c7 100644
--- a/docs/zh/reference/plugin-api.md
+++ b/docs/zh/reference/plugin-api.md
@@ -89,7 +89,7 @@ module.exports = {
     // 包含两个元素的元组
     ['vuepress-plugin-foo', false],
     ['bar', true],
-    ['/path/to/local/plugin', { /* 选项 */ }],
+    [path.resolve(__dirname, './path/to/local/plugin'), { /* 选项 */ }],
     [require('vuepress-plugin-baz'), true],
 
     // 只使用第一个元素
@@ -118,7 +118,7 @@ module.exports = {
 ```js
 module.exports = {
   alias: {
-    '@alias': '/path/to/alias',
+    '@alias': path.resolve(__dirname, './path/to/alias'),
   },
 }
 ```
@@ -249,7 +249,7 @@ export default {
 
 ```js
 module.exports = {
-  clientAppEnhanceFiles: '/path/to/clientAppEnhance.js',
+  clientAppEnhanceFiles: path.resolve(__dirname, './path/to/clientAppEnhance.js'),
 }
 ```
 
@@ -267,7 +267,7 @@ module.exports = {
 
 ```js
 module.exports = {
-  clientAppRootComponentFiles: '/path/to/RootComponent.vue',
+  clientAppRootComponentFiles: path.resolve(__dirname, './path/to/RootComponent.vue'),
 }
 ```
 
@@ -285,7 +285,7 @@ module.exports = {
 
 ```js
 module.exports = {
-  clientAppSetupFiles: '/path/to/clientAppSetup.js',
+  clientAppSetupFiles: path.resolve(__dirname, './path/to/clientAppSetup.js'),
 }
 ```
 

From 2522cb8db52f8e2f6f252c4f5ccb08dd0ee80794 Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Wed, 24 Mar 2021 20:14:33 +0800
Subject: [PATCH 0750/1014] docs: add links for client files hooks

---
 docs/reference/client-api.md    | 20 ++++++++++----------
 docs/reference/plugin-api.md    |  6 ++++++
 docs/zh/reference/client-api.md | 20 ++++++++++----------
 docs/zh/reference/plugin-api.md |  6 ++++++
 4 files changed, 32 insertions(+), 20 deletions(-)

diff --git a/docs/reference/client-api.md b/docs/reference/client-api.md
index f906704ea8..6df34a5362 100644
--- a/docs/reference/client-api.md
+++ b/docs/reference/client-api.md
@@ -66,38 +66,38 @@ Client API is provided by [@vuepress/client](https://www.npmjs.com/package/@vuep
 
 ## Utils
 
-### defineClientAppSetup
+### defineClientAppEnhance
 
 - Details:
 
-  Helper for creating [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles).
+  Helper for creating [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles).
 
 - Example:
 
-Create `clientAppSetup.ts` file:
+Create `clientAppEnhance.ts` file:
 
 ```ts
-import { defineClientAppSetup } from '@vuepress/client'
+import { defineClientAppEnhance } from '@vuepress/client'
 
-export default defineClientAppSetup(() => {
+export default defineClientAppEnhance(({ app, router, siteData }) => {
   // ...
 })
 ```
 
-### defineClientAppEnhance
+### defineClientAppSetup
 
 - Details:
 
-  Helper for creating [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles).
+  Helper for creating [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles).
 
 - Example:
 
-Create `clientAppEnhance.ts` file:
+Create `clientAppSetup.ts` file:
 
 ```ts
-import { defineClientAppEnhance } from '@vuepress/client'
+import { defineClientAppSetup } from '@vuepress/client'
 
-export default defineClientAppEnhance(({ app, router, siteData }) => {
+export default defineClientAppSetup(() => {
   // ...
 })
 ```
diff --git a/docs/reference/plugin-api.md b/docs/reference/plugin-api.md
index 7a444ab41b..0fc1e92597 100644
--- a/docs/reference/plugin-api.md
+++ b/docs/reference/plugin-api.md
@@ -253,6 +253,9 @@ module.exports = {
 }
 ```
 
+- Also see:
+  - [Client API > defineClientAppEnhance](./client-api.md#defineclientappenhance)
+
 ### clientAppRootComponentFiles
 
 - Type: `string | string[] | ((app: App) => string | string[] | Promise)`
@@ -289,6 +292,9 @@ module.exports = {
 }
 ```
 
+- Also see:
+  - [Client API > defineClientAppSetup](./client-api.md#defineclientappsetup)
+
 ## Lifecycle Hooks
 
 ### onInitialized
diff --git a/docs/zh/reference/client-api.md b/docs/zh/reference/client-api.md
index 2711c48476..3783384155 100644
--- a/docs/zh/reference/client-api.md
+++ b/docs/zh/reference/client-api.md
@@ -66,38 +66,38 @@
 
 ## 工具函数
 
-### defineClientAppSetup
+### defineClientAppEnhance
 
 - 详情:
 
-  帮助你创建 [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles) 的工具函数。
+  帮助你创建 [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles) 的工具函数。
 
 - 示例:
 
-创建 `clientAppSetup.ts` 文件:
+创建 `clientAppEnhance.ts` 文件:
 
 ```ts
-import { defineClientAppSetup } from '@vuepress/client'
+import { defineClientAppEnhance } from '@vuepress/client'
 
-export default defineClientAppSetup(() => {
+export default defineClientAppEnhance(({ app, router, siteData }) => {
   // ...
 })
 ```
 
-### defineClientAppEnhance
+### defineClientAppSetup
 
 - 详情:
 
-  帮助你创建 [clientAppEnhanceFiles](./plugin-api.md#clientappenhancefiles) 的工具函数。
+  帮助你创建 [clientAppSetupFiles](./plugin-api.md#clientappsetupfiles) 的工具函数。
 
 - 示例:
 
-创建 `clientAppEnhance.ts` 文件:
+创建 `clientAppSetup.ts` 文件:
 
 ```ts
-import { defineClientAppEnhance } from '@vuepress/client'
+import { defineClientAppSetup } from '@vuepress/client'
 
-export default defineClientAppEnhance(({ app, router, siteData }) => {
+export default defineClientAppSetup(() => {
   // ...
 })
 ```
diff --git a/docs/zh/reference/plugin-api.md b/docs/zh/reference/plugin-api.md
index aa2196b7c7..90b9afc57e 100644
--- a/docs/zh/reference/plugin-api.md
+++ b/docs/zh/reference/plugin-api.md
@@ -253,6 +253,9 @@ module.exports = {
 }
 ```
 
+- 参考:
+  - [客户端 API > defineClientAppEnhance](./client-api.md#defineclientappenhance)
+
 ### clientAppRootComponentFiles
 
 - 类型: `string | string[] | ((app: App) => string | string[] | Promise)`
@@ -289,6 +292,9 @@ module.exports = {
 }
 ```
 
+- 参考:
+  - [客户端 API > defineClientAppSetup](./client-api.md#defineclientappsetup)
+
 ## 生命周期 Hooks
 
 ### onInitialized

From 8dcb9457c532de8076f94b3b165c1347e9bd9c86 Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Thu, 25 Mar 2021 11:12:15 +0800
Subject: [PATCH 0751/1014] fix(theme-default): add active class to sidebar
 group heading

---
 .../src/components/SidebarChild.ts            | 42 ++++++++++++-------
 1 file changed, 28 insertions(+), 14 deletions(-)

diff --git a/packages/@vuepress/theme-default/src/components/SidebarChild.ts b/packages/@vuepress/theme-default/src/components/SidebarChild.ts
index 24d29d6ec4..50451a898f 100644
--- a/packages/@vuepress/theme-default/src/components/SidebarChild.ts
+++ b/packages/@vuepress/theme-default/src/components/SidebarChild.ts
@@ -10,24 +10,39 @@ const normalizePath = (path: string): string =>
     .replace(/#.*$/, '')
     .replace(/(index)?\.(md|html)$/, '')
 
-const isActive = (
+const isActiveLink = (
   route: RouteLocationNormalizedLoaded,
-  target?: string
+  link?: string
 ): boolean => {
-  if (target === undefined) {
+  if (link === undefined) {
     return false
   }
 
-  if (route.hash === target) {
+  if (route.hash === link) {
     return true
   }
 
   const currentPath = normalizePath(route.path)
-  const targetPath = normalizePath(target)
+  const targetPath = normalizePath(link)
 
   return currentPath === targetPath
 }
 
+const isActiveItem = (
+  route: RouteLocationNormalizedLoaded,
+  item: ResolvedSidebarItem
+): boolean => {
+  if (isActiveLink(route, item.link)) {
+    return true
+  }
+
+  if (item.children) {
+    return item.children.some((child) => isActiveItem(route, child))
+  }
+
+  return false
+}
+
 const renderItem = (
   item: ResolvedSidebarItem,
   props: VNode['props']
@@ -75,18 +90,22 @@ export const SidebarChild: FunctionalComponent<{
   item: ResolvedSidebarItem
   depth: number
 }> = ({ item, depth }) => {
+  const route = useRoute()
+  const active = isActiveItem(route, item)
+
   if (item.isGroup) {
     return [
       h(
         'section',
         {
-          class: {
-            'sidebar-group': true,
-          },
+          class: 'sidebar-group',
         },
         [
           renderItem(item, {
-            class: 'sidebar-heading',
+            class: {
+              'sidebar-heading': true,
+              active,
+            },
           }),
           renderChildren(item, depth),
         ]
@@ -94,11 +113,6 @@ export const SidebarChild: FunctionalComponent<{
     ]
   }
 
-  const route = useRoute()
-  const active =
-    isActive(route, item.link) ||
-    item.children?.some((child) => isActive(route, child.link))
-
   return [
     renderItem(item, {
       class: {

From 4ada701062db400787c41008942354f6947bf80b Mon Sep 17 00:00:00 2001
From: meteorlxy 
Date: Thu, 25 Mar 2021 12:06:34 +0800
Subject: [PATCH 0752/1014] fix(theme-default): make nested sidebar groups work

---
 .../theme-default/src/components/Sidebar.vue  |  2 +-
 .../src/components/SidebarChild.ts            |  4 +-
 .../src/composables/useSidebarItems.ts        | 56 +++++++++++--------
 .../theme-default/src/styles/sidebar.scss     | 19 ++++---
 .../@vuepress/theme-default/src/types/nav.ts  |  3 +-
 5 files changed, 49 insertions(+), 35 deletions(-)

diff --git a/packages/@vuepress/theme-default/src/components/Sidebar.vue b/packages/@vuepress/theme-default/src/components/Sidebar.vue
index 3eb84e7d38..92de6bfb0c 100644
--- a/packages/@vuepress/theme-default/src/components/Sidebar.vue
+++ b/packages/@vuepress/theme-default/src/components/Sidebar.vue
@@ -5,7 +5,7 @@