From 691f21c6832323902d899b56566dd97d63683528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Chopin?= Date: Wed, 25 Nov 2020 15:19:29 +0100 Subject: [PATCH] fix(vue-app): handle missing payloads on full static (#8314) * fix(vue-app): handle missing payloads on full static Fixes #7717 * chore: rename routesManifest to manifest * chore: remove console.log * chore(vue-app): don't have staticAssetsBase if undefined * chore: add manifest option * test: update snapshot * chore: use foundRoute to avoid multiple vars name Co-authored-by: Pooya Parsa Co-authored-by: Daniel Roe --- distributions/nuxt-start/package.json | 2 +- distributions/nuxt/package.json | 4 +- package.json | 18 +- packages/babel-preset-app/package.json | 6 +- packages/config/package.json | 6 +- packages/config/src/config/generate.js | 1 + .../test/__snapshots__/options.test.js.snap | 1 + .../config/__snapshots__/index.test.js.snap | 2 + packages/core/package.json | 2 +- packages/generator/package.json | 1 + packages/generator/src/generator.js | 31 ++- packages/types/package.json | 6 +- packages/vue-app/package.json | 2 +- packages/vue-app/template/App.js | 34 ++- packages/vue-renderer/src/renderers/spa.js | 11 +- packages/vue-renderer/src/renderers/ssr.js | 22 +- packages/webpack/package.json | 10 +- renovate.json | 3 +- yarn.lock | 208 +++++++----------- 19 files changed, 191 insertions(+), 179 deletions(-) diff --git a/distributions/nuxt-start/package.json b/distributions/nuxt-start/package.json index d3aad57625..7dc0c73fbf 100644 --- a/distributions/nuxt-start/package.json +++ b/distributions/nuxt-start/package.json @@ -63,7 +63,7 @@ "vue-client-only": "^2.0.0", "vue-meta": "^2.4.0", "vue-no-ssr": "^1.1.1", - "vue-router": "3.4.9", + "vue-router": "3.4.8", "vuex": "^3.5.1" }, "engines": { diff --git a/distributions/nuxt/package.json b/distributions/nuxt/package.json index 5f042e2aee..b3ad994ef9 100644 --- a/distributions/nuxt/package.json +++ b/distributions/nuxt/package.json @@ -60,10 +60,10 @@ "dependencies": { "@nuxt/builder": "2.14.7", "@nuxt/cli": "2.14.7", - "@nuxt/components": "^1.2.0", + "@nuxt/components": "^1.1.1", "@nuxt/core": "2.14.7", "@nuxt/generator": "2.14.7", - "@nuxt/loading-screen": "^2.0.3", + "@nuxt/loading-screen": "^2.0.2", "@nuxt/opencollective": "^0.3.2", "@nuxt/static": "^1.0.0", "@nuxt/telemetry": "^1.2.3", diff --git a/package.json b/package.json index b19e5dacbe..36a20f804a 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,8 @@ "test:unit": "jest packages --forceExit" }, "devDependencies": { - "@babel/core": "^7.12.9", - "@babel/preset-env": "^7.12.7", + "@babel/core": "^7.12.3", + "@babel/preset-env": "^7.12.1", "@ls-lint/ls-lint": "^1.9.2", "@nuxtjs/eslint-config": "^5.0.0", "@rollup/plugin-alias": "^3.1.1", @@ -47,9 +47,9 @@ "babel-eslint": "^10.1.0", "babel-jest": "^26.6.3", "consola": "^2.15.0", - "create-require": "^1.1.0", + "create-require": "^1.0.2", "cross-spawn": "^7.0.3", - "eslint": "^7.14.0", + "eslint": "^7.13.0", "eslint-multiplexer": "^2.0.0", "esm": "^3.2.25", "execa": "^3.4.0", @@ -62,21 +62,21 @@ "improved-yarn-audit": "^2.3.1", "is-wsl": "^2.2.0", "jest": "^26.6.3", - "jiti": "^0.1.16", + "jiti": "^0.1.12", "jsdom": "^16.4.0", "klaw-sync": "^6.0.0", "lerna": "^3.22.1", "lodash": "^4.17.20", "node-fetch": "^2.6.1", "node-sass": "^4.14.1", - "puppeteer-core": "^5.5.0", + "puppeteer-core": "^5.4.1", "request": "^2.88.2", "rimraf": "^3.0.2", - "rollup": "2.33.3", + "rollup": "2.33.1", "rollup-plugin-license": "^2.2.0", "sass-loader": "^8.0.2", - "sort-package-json": "^1.48.0", - "typescript": "~4.1", + "sort-package-json": "^1.46.1", + "typescript": "~4.0", "vue-jest": "^4.0.0-rc.0" } } diff --git a/packages/babel-preset-app/package.json b/packages/babel-preset-app/package.json index cdf12ef7e8..052014df9f 100644 --- a/packages/babel-preset-app/package.json +++ b/packages/babel-preset-app/package.json @@ -10,14 +10,14 @@ ], "main": "src/index.js", "dependencies": { - "@babel/core": "^7.12.9", + "@babel/core": "^7.12.3", "@babel/helper-compilation-targets": "^7.12.5", "@babel/plugin-proposal-class-properties": "^7.12.1", "@babel/plugin-proposal-decorators": "^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", "@babel/plugin-transform-runtime": "^7.12.1", - "@babel/preset-env": "^7.12.7", + "@babel/preset-env": "^7.12.1", "@babel/runtime": "^7.12.5", "@vue/babel-preset-jsx": "^1.2.4", "core-js": "^2.6.5" diff --git a/packages/config/package.json b/packages/config/package.json index e74074f9c6..64e8725662 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -12,13 +12,13 @@ "dependencies": { "@nuxt/utils": "2.14.7", "consola": "^2.15.0", - "create-require": "^1.1.0", + "create-require": "^1.0.2", "defu": "^2.0.4", "destr": "^1.0.1", "dotenv": "^8.2.0", "esm": "^3.2.25", - "jiti": "^0.1.16", - "rc9": "^1.2.0", + "jiti": "^0.1.12", + "rc9": "^1.1.0", "std-env": "^2.2.1" }, "publishConfig": { diff --git a/packages/config/src/config/generate.js b/packages/config/src/config/generate.js index 8177238e3d..4aa33eb1cf 100644 --- a/packages/config/src/config/generate.js +++ b/packages/config/src/config/generate.js @@ -7,6 +7,7 @@ export default () => ({ subFolders: true, fallback: '200.html', crawler: true, + manifest: true, cache: { ignore: [], globbyOptions: { diff --git a/packages/config/test/__snapshots__/options.test.js.snap b/packages/config/test/__snapshots__/options.test.js.snap index d3861ba253..d4c9458fe4 100644 --- a/packages/config/test/__snapshots__/options.test.js.snap +++ b/packages/config/test/__snapshots__/options.test.js.snap @@ -205,6 +205,7 @@ Object { "exclude": Array [], "fallback": "200.html", "interval": 0, + "manifest": true, "routes": Array [], "staticAssets": Object { "base": "/_nuxt/static", diff --git a/packages/config/test/config/__snapshots__/index.test.js.snap b/packages/config/test/config/__snapshots__/index.test.js.snap index 75adf15323..b02787f58f 100644 --- a/packages/config/test/config/__snapshots__/index.test.js.snap +++ b/packages/config/test/config/__snapshots__/index.test.js.snap @@ -184,6 +184,7 @@ Object { "exclude": Array [], "fallback": "200.html", "interval": 0, + "manifest": true, "routes": Array [], "staticAssets": Object { "base": undefined, @@ -560,6 +561,7 @@ Object { "exclude": Array [], "fallback": "200.html", "interval": 0, + "manifest": true, "routes": Array [], "staticAssets": Object { "base": undefined, diff --git a/packages/core/package.json b/packages/core/package.json index f6527301bc..0cc61615e0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -14,7 +14,7 @@ "@nuxt/utils": "2.14.7", "@nuxt/vue-renderer": "2.14.7", "consola": "^2.15.0", - "debug": "^4.3.1", + "debug": "^4.2.0", "esm": "^3.2.25", "fs-extra": "^8.1.0", "hable": "^3.0.0", diff --git a/packages/generator/package.json b/packages/generator/package.json index 9f0b14cf69..a3c8a0725c 100644 --- a/packages/generator/package.json +++ b/packages/generator/package.json @@ -11,6 +11,7 @@ "@nuxt/utils": "2.14.7", "chalk": "^3.0.0", "consola": "^2.15.0", + "devalue": "^2.0.1", "fs-extra": "^8.1.0", "html-minifier": "^4.0.0", "node-html-parser": "^2.0.0" diff --git a/packages/generator/src/generator.js b/packages/generator/src/generator.js index 2738330f61..7e247928a9 100644 --- a/packages/generator/src/generator.js +++ b/packages/generator/src/generator.js @@ -1,6 +1,7 @@ import path from 'path' import chalk from 'chalk' import consola from 'consola' +import devalue from 'devalue' import fsExtra from 'fs-extra' import defu from 'defu' import htmlMinifier from 'html-minifier' @@ -30,9 +31,14 @@ export default class Generator { if (this.isFullStatic) { const { build: { publicPath: _publicPath }, router: { base } } = this.options const publicPath = isUrl(_publicPath) ? _publicPath : base - const { staticAssets } = this.options.generate + const { staticAssets, manifest } = this.options.generate this.staticAssetsDir = path.resolve(this.distNuxtPath, staticAssets.dir, staticAssets.version) this.staticAssetsBase = urlJoin(publicPath, this.options.generate.staticAssets.versionBase) + if (manifest) { + this.manifest = defu(manifest, { + routes: [] + }) + } } // Shared payload @@ -54,6 +60,14 @@ export default class Generator { await this.afterGenerate() + // Save routes manifest for full static + if (this.manifest) { + await this.nuxt.callHook('generate:manifest', this.manifest, this) + const manifestPath = path.join(this.staticAssetsDir, 'manifest.js') + await fsExtra.writeFile(manifestPath, `__NUXT_JSONP__("manifest.js", ${devalue(this.manifest)})`, 'utf-8') + consola.success('Static manifest generated') + } + // Done hook await this.nuxt.callHook('generate:done', this, errors) await this.nuxt.callHook('export:done', this, { errors }) @@ -254,7 +268,7 @@ export default class Generator { // Add .nojekyll file to let GitHub Pages add the _nuxt/ folder // https://help.github.com/articles/files-that-start-with-an-underscore-are-missing/ const nojekyllPath = path.resolve(this.distPath, '.nojekyll') - fsExtra.writeFile(nojekyllPath, '') + await fsExtra.writeFile(nojekyllPath, '') await this.nuxt.callHook('generate:distCopied', this) await this.nuxt.callHook('export:distCopied', this) @@ -313,11 +327,11 @@ export default class Generator { .replace(/\/+$/, '') .trim() - const route = decodeURI(sanitizedHref + possibleTrailingSlash) + const foundRoute = decodeURI(sanitizedHref + possibleTrailingSlash) - if (route.startsWith('/') && !route.startsWith('//') && !path.extname(route) && this.shouldGenerateRoute(route) && !this.generatedRoutes.has(route)) { - this.generatedRoutes.add(route) - this.routes.push({ route }) + if (foundRoute.startsWith('/') && !foundRoute.startsWith('//') && !path.extname(foundRoute) && this.shouldGenerateRoute(foundRoute) && !this.generatedRoutes.has(foundRoute)) { + this.generatedRoutes.add(foundRoute) + this.routes.push({ route: foundRoute }) } return null }) @@ -330,8 +344,13 @@ export default class Generator { await fsExtra.ensureDir(path.dirname(assetPath)) await fsExtra.writeFile(assetPath, asset.src, 'utf-8') } + // Add route to manifest (only if no error and redirect) + if (this.manifest && (!res.error && !res.redirected)) { + this.manifest.routes.push(route) + } } + // SPA fallback if (res.error) { pageErrors.push({ type: 'handled', route, error: res.error }) } diff --git a/packages/types/package.json b/packages/types/package.json index 3cddd9b708..932f2900e3 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -17,13 +17,13 @@ "@types/file-loader": "^4.2.0", "@types/html-minifier": "^4.0.0", "@types/less": "^3.0.1", - "@types/node": "^12.19.7", + "@types/node": "^12.19.3", "@types/node-sass": "^4.11.1", "@types/optimize-css-assets-webpack-plugin": "^5.0.1", "@types/pug": "^2.0.4", - "@types/serve-static": "^1.13.8", + "@types/serve-static": "^1.13.6", "@types/terser-webpack-plugin": "^2.2.0", - "@types/webpack": "^4.41.25", + "@types/webpack": "^4.41.24", "@types/webpack-bundle-analyzer": "^3.9.0", "@types/webpack-dev-middleware": "^3.7.2", "@types/webpack-hot-middleware": "^2.25.3" diff --git a/packages/vue-app/package.json b/packages/vue-app/package.json index 0203391849..8c0efc98e1 100644 --- a/packages/vue-app/package.json +++ b/packages/vue-app/package.json @@ -19,7 +19,7 @@ "vue-client-only": "^2.0.0", "vue-meta": "^2.4.0", "vue-no-ssr": "^1.1.1", - "vue-router": "3.4.9", + "vue-router": "3.4.8", "vue-template-compiler": "^2.6.12", "vuex": "^3.5.1" }, diff --git a/packages/vue-app/template/App.js b/packages/vue-app/template/App.js index abbb6b3cc7..c8f7c95b02 100644 --- a/packages/vue-app/template/App.js +++ b/packages/vue-app/template/App.js @@ -295,18 +295,40 @@ export default { <% } /* splitChunks.layouts */ %> <% } /* features.layouts */ %> <% if (isFullStatic) { %> + getRouterBase() { + return (this.$router.options.base || '').replace(/\/+$/, '') + }, + getRoutePath(route = '/') { + const base = this.getRouterBase() + if (base && route.startsWith(base)) { + route = route.substr(base.length) + } + return (route.replace(/\/+$/, '') || '/').split('?')[0].split('#')[0] + }, + getStaticAssetsPath(route = '/') { + const { staticAssetsBase } = window.<%= globals.context %> + + return urlJoin(staticAssetsBase, this.getRoutePath(route)) + }, + <% if (nuxtOptions.generate.manifest) { %> + async fetchStaticManifest() { + return window.__NUXT_IMPORT__('manifest.js', encodeURI(urlJoin(this.getStaticAssetsPath(), 'manifest.js'))) + }, + <% } %> setPagePayload(payload) { this._pagePayload = payload this._payloadFetchIndex = 0 }, async fetchPayload(route) { - const { staticAssetsBase } = window.<%= globals.context %> - const base = (this.$router.options.base || '').replace(/\/+$/, '') - if (base && route.startsWith(base)) { - route = route.substr(base.length) + <% if (nuxtOptions.generate.manifest) { %> + const manifest = await this.fetchStaticManifest() + const path = this.getRoutePath(route) + if (!manifest.routes.includes(path)) { + this.setPagePayload(false) + throw new Error(`Route ${path} is not pre-rendered`) } - route = (route.replace(/\/+$/, '') || '/').split('?')[0].split('#')[0] - const src = urlJoin(staticAssetsBase, route, 'payload.js') + <% } %> + const src = urlJoin(this.getStaticAssetsPath(route), 'payload.js') try { const payload = await window.__NUXT_IMPORT__(decodeURI(route), encodeURI(src)) this.setPagePayload(payload) diff --git a/packages/vue-renderer/src/renderers/spa.js b/packages/vue-renderer/src/renderers/spa.js index 4101dd5dff..5b689642b9 100644 --- a/packages/vue-renderer/src/renderers/spa.js +++ b/packages/vue-renderer/src/renderers/spa.js @@ -154,10 +154,13 @@ export default class SPARenderer extends BaseRenderer { // Serialize state (runtime config) let APP = `${meta.BODY_SCRIPTS_PREPEND}
${this.serverContext.resources.loadingHTML}
${meta.BODY_SCRIPTS}` - APP += `` + const payload = { + config: renderContext.runtimeConfig.public + } + if (renderContext.staticAssetsBase) { + payload.staticAssetsBase = renderContext.staticAssetsBase + } + APP += `` // Prepare template params const templateParams = { diff --git a/packages/vue-renderer/src/renderers/ssr.js b/packages/vue-renderer/src/renderers/ssr.js index ac7e83f37c..a8b29cd6d6 100644 --- a/packages/vue-renderer/src/renderers/ssr.js +++ b/packages/vue-renderer/src/renderers/ssr.js @@ -196,13 +196,21 @@ export default class SSRRenderer extends BaseRenderer { APP += `` } - // Page level payload.js (async loaded for CSR) - const payloadPath = urlJoin(url, 'payload.js') - const payloadUrl = urlJoin(staticAssetsBase, payloadPath) - const routePath = (url.replace(/\/+$/, '') || '/').split('?')[0] // remove trailing slah and query params - const payloadScript = `__NUXT_JSONP__("${routePath}", ${devalue({ data, fetch, mutations })});` - staticAssets.push({ path: payloadPath, src: payloadScript }) - preloadScripts.push(payloadUrl) + // Save payload only if no error or redirection were made + if (!renderContext.nuxt.error && !renderContext.redirected) { + // Page level payload.js (async loaded for CSR) + const payloadPath = urlJoin(url, 'payload.js') + const payloadUrl = urlJoin(staticAssetsBase, payloadPath) + const routePath = (url.replace(/\/+$/, '') || '/').split('?')[0] // remove trailing slah and query params + const payloadScript = `__NUXT_JSONP__("${routePath}", ${devalue({ data, fetch, mutations })});` + staticAssets.push({ path: payloadPath, src: payloadScript }) + preloadScripts.push(payloadUrl) + // Add manifest preload + if (this.options.generate.manifest) { + const manifestUrl = urlJoin(staticAssetsBase, 'manifest.js') + preloadScripts.push(manifestUrl) + } + } // Preload links for (const href of preloadScripts) { diff --git a/packages/webpack/package.json b/packages/webpack/package.json index bd32102ff3..e2188dae4e 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -8,16 +8,16 @@ "dist" ], "dependencies": { - "@babel/core": "^7.12.9", + "@babel/core": "^7.12.3", "@nuxt/babel-preset-app": "2.14.7", "@nuxt/friendly-errors-webpack-plugin": "^2.5.0", "@nuxt/utils": "2.14.7", - "babel-loader": "^8.2.1", + "babel-loader": "^8.1.0", "cache-loader": "^4.1.0", - "caniuse-lite": "^1.0.30001161", + "caniuse-lite": "^1.0.30001157", "chalk": "^3.0.0", "consola": "^2.15.0", - "create-require": "^1.1.0", + "create-require": "^1.0.2", "css-loader": "^3.6.0", "cssnano": "^4.1.10", "eventsource-polyfill": "^0.9.6", @@ -38,7 +38,7 @@ "postcss-url": "^8.0.0", "semver": "^7.3.2", "std-env": "^2.2.1", - "style-resources-loader": "^1.4.1", + "style-resources-loader": "^1.3.3", "terser-webpack-plugin": "^2.3.5", "thread-loader": "^2.1.3", "time-fix-plugin": "^2.0.7", diff --git a/renovate.json b/renovate.json index 43cc295267..fa3841786b 100644 --- a/renovate.json +++ b/renovate.json @@ -25,8 +25,7 @@ "wrap-ansi", "terser-webpack-plugin", "@types/terser-webpack-plugin", - "defu", - "vue-loader" + "defu" ], "lockFileMaintenance": { "enabled": true diff --git a/yarn.lock b/yarn.lock index 0220188a2d..eccdc6bf80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,29 +14,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== -"@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.12.7" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.7.tgz#bf55363c08c8352a37691f7216ec30090bf7e3bf" - integrity sha512-tRKx9B53kJe8NCGGIxEQb2Bkr0riUIEuN7Sc1fxhs5H8lKlCWUvQCSNMVIB0Meva7hcbCRJ76de15KoLltdoqw== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.7" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.12.9": +"@babel/core@^7.1.0", "@babel/core@^7.12.9", "@babel/core@^7.7.5": version "7.12.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== @@ -860,22 +838,7 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.7", "@babel/traverse@^7.7.0": - version "7.12.7" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.7.tgz#572a722408681cef17d6b0bef69ef2e728ca69f1" - integrity sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.7" - "@babel/types" "^7.12.7" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/traverse@^7.12.9": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.7.0": version "7.12.9" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== @@ -1979,27 +1942,27 @@ globby "^11.0.1" "@nuxt/telemetry@^1.2.3": - version "1.2.5" - resolved "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-1.2.5.tgz#ee9169ac20f50dea69477e2dc20736ba0076a5ab" - integrity sha512-t8TYH363RKEguUPaIKNao+434dKhbixEDt1qFCuyyGgxhJjromCZ9BZm4HMlQJt+F7QS/Y9PzTyTDcomUSstxg== + version "1.3.0" + resolved "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-1.3.0.tgz#0c6595c786c4fcb060ea8508aaf6285dce8201e0" + integrity sha512-anAhyccoVyy/RetkqVsIxpJKdAu/GHyLl79ZtH0oOCbYcC85k8d+LC1S10WcqXyeqyUKifLxGR6yPqSPmQCCtg== dependencies: - arg "^4.1.3" + arg "^5.0.0" chalk "^4.1.0" ci-info "^2.0.0" - consola "^2.14.0" - create-require "^1.0.2" - defu "^2.0.4" - destr "^1.0.0" + consola "^2.15.0" + create-require "^1.1.0" + defu "^3.2.2" + destr "^1.0.1" dotenv "^8.2.0" fs-extra "^8.1.0" - git-url-parse "^11.1.2" - inquirer "^7.3.0" - is-docker "^2.0.0" - jiti "^0.1.11" - nanoid "^3.1.10" - node-fetch "^2.6.0" + git-url-parse "^11.4.0" + inquirer "^7.3.3" + is-docker "^2.1.1" + jiti "^0.1.16" + nanoid "^3.1.18" + node-fetch "^2.6.1" parse-git-config "^3.0.0" - rc9 "^1.0.0" + rc9 "^1.2.0" std-env "^2.2.1" "@nuxtjs/eslint-config@^5.0.0": @@ -2331,9 +2294,9 @@ "@types/node" "*" "@types/express-serve-static-core@*": - version "4.17.13" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz#d9af025e925fc8b089be37423b8d1eac781be084" - integrity sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA== + version "4.17.14" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz#cabf91debeeb3cb04b798e2cff908864e89b6106" + integrity sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2469,9 +2432,9 @@ "@types/node" "*" "@types/node@*", "@types/node@>= 8": - version "14.14.9" - resolved "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz#04afc9a25c6ff93da14deabd65dc44485b53c8d6" - integrity sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw== + version "14.14.10" + resolved "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785" + integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ== "@types/node@^12.19.7": version "12.19.7" @@ -2638,37 +2601,37 @@ "@types/node" "*" "@typescript-eslint/experimental-utils@^4.0.1": - version "4.8.1" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz#27275c20fa4336df99ebcf6195f7d7aa7aa9f22d" - integrity sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg== + version "4.8.2" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.2.tgz#8909a5732f19329cf5ef0c39766170476bff5e50" + integrity sha512-hpTw6o6IhBZEsQsjuw/4RWmceRyESfAiEzAEnXHKG1X7S5DXFaZ4IO1JO7CW1aQ604leQBzjZmuMI9QBCAJX8Q== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.8.1" - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/typescript-estree" "4.8.1" + "@typescript-eslint/scope-manager" "4.8.2" + "@typescript-eslint/types" "4.8.2" + "@typescript-eslint/typescript-estree" "4.8.2" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/scope-manager@4.8.1": - version "4.8.1" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz#e343c475f8f1d15801b546cb17d7f309b768fdce" - integrity sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ== +"@typescript-eslint/scope-manager@4.8.2": + version "4.8.2" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.2.tgz#a18388c63ae9c17adde519384f539392f2c4f0d9" + integrity sha512-qHQ8ODi7mMin4Sq2eh/6eu03uVzsf5TX+J43xRmiq8ujng7ViQSHNPLOHGw/Wr5dFEoxq/ubKhzClIIdQy5q3g== dependencies: - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/visitor-keys" "4.8.1" + "@typescript-eslint/types" "4.8.2" + "@typescript-eslint/visitor-keys" "4.8.2" -"@typescript-eslint/types@4.8.1": - version "4.8.1" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz#23829c73c5fc6f4fcd5346a7780b274f72fee222" - integrity sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA== +"@typescript-eslint/types@4.8.2": + version "4.8.2" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.2.tgz#c862dd0e569d9478eb82d6aee662ea53f5661a36" + integrity sha512-z1/AVcVF8ju5ObaHe2fOpZYEQrwHyZ7PTOlmjd3EoFeX9sv7UekQhfrCmgUO7PruLNfSHrJGQvrW3Q7xQ8EoAw== -"@typescript-eslint/typescript-estree@4.8.1": - version "4.8.1" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz#7307e3f2c9e95df7daa8dc0a34b8c43b7ec0dd32" - integrity sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ== +"@typescript-eslint/typescript-estree@4.8.2": + version "4.8.2" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.2.tgz#eeec34707d8577600fb21661b5287226cc8b3bed" + integrity sha512-HToGNwI6fekH0dOw3XEVESUm71Onfam0AKin6f26S2FtUmO7o3cLlWgrIaT1q3vjB3wCTdww3Dx2iGq5wtUOCg== dependencies: - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/visitor-keys" "4.8.1" + "@typescript-eslint/types" "4.8.2" + "@typescript-eslint/visitor-keys" "4.8.2" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" @@ -2676,12 +2639,12 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.8.1": - version "4.8.1" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz#794f68ee292d1b2e3aa9690ebedfcb3a8c90e3c3" - integrity sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ== +"@typescript-eslint/visitor-keys@4.8.2": + version "4.8.2" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.2.tgz#62cd3fbbbf65f8eccfbe6f159eb1b84a243a3f77" + integrity sha512-Vg+/SJTMZJEKKGHW7YC21QxgKJrSbxoYYd3MEUGtW7zuytHuEcksewq0DUmo4eh/CTNrVJGSdIY9AtRb6riWFw== dependencies: - "@typescript-eslint/types" "4.8.1" + "@typescript-eslint/types" "4.8.2" eslint-visitor-keys "^2.0.0" "@vue/babel-helper-vue-jsx-merge-props@^1.2.1": @@ -3191,10 +3154,10 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -arg@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +arg@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz#a20e2bb5710e82950a516b3f933fee5ed478be90" + integrity sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ== argparse@^1.0.7: version "1.0.10" @@ -3244,12 +3207,14 @@ array-ify@^1.0.0: integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + version "3.1.2" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" is-string "^1.0.5" array-union@^1.0.2: @@ -4030,12 +3995,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157: - version "1.0.30001159" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20" - integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA== - -caniuse-lite@^1.0.30001161: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157, caniuse-lite@^1.0.30001161: version "1.0.30001161" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz#64f7ffe79ee780b8c92843ff34feb36cea4651e0" integrity sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g== @@ -4710,7 +4670,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-require@^1.0.2, create-require@^1.1.0: +create-require@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.0.tgz#8fe85b319928953deef6f0e5c44bfea13e3c81ef" integrity sha512-yEFVS7dQjDXp5iOEtWisN4uFmL+pUTyIaEizKda9Eb77XX58p6pgFOLAPaBCP+IR6ZPZ1jgJLAuf+ABk0zXYBQ== @@ -5161,6 +5121,11 @@ defu@^2.0.4: resolved "https://registry.npmjs.org/defu/-/defu-2.0.4.tgz#09659a6e87a8fd7178be13bd43e9357ebf6d1c46" integrity sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg== +defu@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/defu/-/defu-3.2.2.tgz#be20f4cc49b9805d54ee6b610658d53894942e97" + integrity sha512-8UWj5lNv7HD+kB0e9w77Z7TdQlbUYDVWqITLHNqFIn6khrNHv5WQo38Dcm1f6HeNyZf0U7UbPf6WeZDSdCzGDQ== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -5214,6 +5179,11 @@ detect-newline@3.1.0, detect-newline@^3.0.0: resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +devalue@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz#5d368f9adc0928e47b77eea53ca60d2f346f9762" + integrity sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q== + devtools-protocol@0.0.818844: version "0.0.818844" resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e" @@ -5421,9 +5391,9 @@ ejs@^2.6.1: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.591: - version "1.3.603" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz#1b71bec27fb940eccd79245f6824c63d5f7e8abf" - integrity sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ== + version "1.3.607" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.607.tgz#1bff13f1cf89f2fee0d244b8c64a7138f80f3a3b" + integrity sha512-h2SYNaBnlplGS0YyXl8oJWokfcNxVjJANQfMCsQefG6OSuAuNIeW+A8yGT/ci+xRoBb3k2zq1FrOvkgoKBol8g== elliptic@^6.5.3: version "6.5.3" @@ -5539,7 +5509,7 @@ error-stack-parser@^2.0.0: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: version "1.17.7" resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== @@ -6518,7 +6488,7 @@ get-caller-file@^2.0.1: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.0: +get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== @@ -6636,7 +6606,7 @@ git-up@^4.0.0: is-ssh "^1.3.0" parse-url "^5.0.0" -git-url-parse@^11.1.2: +git-url-parse@^11.1.2, git-url-parse@^11.4.0: version "11.4.0" resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.0.tgz#f2bb1f2b00f05552540e95a62e31399a639a6aa6" integrity sha512-KlIa5jvMYLjXMQXkqpFzobsyD/V2K5DRHl5OAf+6oDFPlPLxrGDVQlIdI63c4/Kt6kai4kALENSALlzTGST3GQ== @@ -7342,7 +7312,7 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.3.0: +inquirer@^7.3.3: version "7.3.3" resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== @@ -7502,7 +7472,7 @@ is-directory@^0.3.1: resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== @@ -8189,11 +8159,6 @@ jest@^26.6.3: import-local "^3.0.2" jest-cli "^26.6.3" -jiti@^0.1.11: - version "0.1.15" - resolved "https://registry.npmjs.org/jiti/-/jiti-0.1.15.tgz#4ab80092b5e14e6b4d41e645940e6b818de549df" - integrity sha512-H2xOyAnmrHcl1KaJ5fDvcKgXbps852FSTMp9v0F5nBpX0NET1xgkLFUFHNHs4i83u4ZSBXLB0qDwvrV8/lOAdw== - jiti@^0.1.16: version "0.1.16" resolved "https://registry.npmjs.org/jiti/-/jiti-0.1.16.tgz#f8c7d73b51153edfb43d3e5a4984537198771650" @@ -9205,7 +9170,7 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@^3.1.10: +nanoid@^3.1.18: version "3.1.18" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.18.tgz#0680db22ab01c372e89209f5d18283d98de3e96d" integrity sha512-rndlDjbbHbcV3xi+R2fpJ+PbGMdfBxz5v1fATIQFq0DP64FsicQdwnKLy47K4kZHdRpmQXtz24eGsxQqamzYTA== @@ -9271,7 +9236,7 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@^2.5.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -11157,15 +11122,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc9@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/rc9/-/rc9-1.1.0.tgz#0176e8d32c358e96fa8c8d31036c3a0de3da8e9f" - integrity sha512-YXmv+7QWbRDCMroz0YYGcFbo2hslal7KHZO6JUIuOlmyV0YPjqzqPTWnonO44iyvJhoz5sQrmyA9PdOlih6QpA== - dependencies: - defu "^2.0.4" - destr "^1.0.0" - flat "^5.0.0" - rc9@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/rc9/-/rc9-1.2.0.tgz#ef098181fdde714efc4c426383d6e46c14b1254a"