From 8f418d13c5d5c9c40f05020205f24380b718654b Mon Sep 17 00:00:00 2001 From: Happydev <81974850+MoustaphaDev@users.noreply.github.com> Date: Mon, 22 May 2023 12:58:03 +0000 Subject: [PATCH] fix(hybrid-output): no matched route when using `getStaticPaths` (#7150) * `isPrenderDefault` ---> `isPrerenderDefault` * test: add test fixture * test: add hybrid getStaticPaths tests * try fix in ci * bring back edit lost on merge conflict fix * back static paths guard * move function to new file to avoid bundling issues * remove unsued import * debugging cleanup * chore: update fixture's package.json * cleanup test * small test refactoring * `status.ts` --> `metadata.ts` * smol refactor * chore: changeset * just return the prerender metadata * refactor tests * chore: update lock file --- .changeset/strange-ties-cry.md | 5 + .../core/build/plugins/plugin-prerender.ts | 3 +- packages/astro/src/core/endpoint/index.ts | 2 +- packages/astro/src/core/render/core.ts | 2 +- packages/astro/src/core/render/dev/index.ts | 1 + packages/astro/src/core/render/route-cache.ts | 2 +- .../astro/src/core/routing/manifest/create.ts | 6 +- packages/astro/src/core/routing/validation.ts | 4 +- packages/astro/src/prerender/metadata.ts | 22 ++ .../src/vite-plugin-astro-server/route.ts | 12 + .../ssr-prerender-get-static-paths.test.js | 358 +++++++++++++----- pnpm-lock.yaml | 21 +- 12 files changed, 318 insertions(+), 120 deletions(-) create mode 100644 .changeset/strange-ties-cry.md create mode 100644 packages/astro/src/prerender/metadata.ts diff --git a/.changeset/strange-ties-cry.md b/.changeset/strange-ties-cry.md new file mode 100644 index 000000000000..0c6139cfcba7 --- /dev/null +++ b/.changeset/strange-ties-cry.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +fix no matched path when using `getStaticPaths` without `prerender` export. diff --git a/packages/astro/src/core/build/plugins/plugin-prerender.ts b/packages/astro/src/core/build/plugins/plugin-prerender.ts index e787b17d6691..b950a83ea5ac 100644 --- a/packages/astro/src/core/build/plugins/plugin-prerender.ts +++ b/packages/astro/src/core/build/plugins/plugin-prerender.ts @@ -4,6 +4,7 @@ import type { BuildInternals } from '../internal.js'; import type { AstroBuildPlugin } from '../plugin.js'; import type { StaticBuildOptions } from '../types'; import { extendManualChunks } from './util.js'; +import { getPrerenderMetadata } from '../../../prerender/metadata.js'; function vitePluginPrerender(opts: StaticBuildOptions, internals: BuildInternals): VitePlugin { return { @@ -20,7 +21,7 @@ function vitePluginPrerender(opts: StaticBuildOptions, internals: BuildInternals if (pageInfo) { // prerendered pages should be split into their own chunk // Important: this can't be in the `pages/` directory! - if (meta.getModuleInfo(id)?.meta.astro?.pageOptions?.prerender) { + if (getPrerenderMetadata(meta.getModuleInfo(id))) { pageInfo.route.prerender = true; return 'prerender'; } diff --git a/packages/astro/src/core/endpoint/index.ts b/packages/astro/src/core/endpoint/index.ts index c005efb1f4e9..7d298a80226d 100644 --- a/packages/astro/src/core/endpoint/index.ts +++ b/packages/astro/src/core/endpoint/index.ts @@ -138,7 +138,7 @@ export async function callEndpoint }; } - if (env.ssr && !mod.prerender) { + if (env.ssr && !ctx.route?.prerender) { if (response.hasOwnProperty('headers')) { warn( logging, diff --git a/packages/astro/src/core/render/core.ts b/packages/astro/src/core/render/core.ts index 1c12a1a8d6e5..2d6fb088ee27 100644 --- a/packages/astro/src/core/render/core.ts +++ b/packages/astro/src/core/render/core.ts @@ -89,7 +89,7 @@ export async function getParamsAndProps( routeCache.set(route, routeCacheEntry); } const matchedStaticPath = findPathItemByKey(routeCacheEntry.staticPaths, params, route); - if (!matchedStaticPath && (ssr ? mod.prerender : true)) { + if (!matchedStaticPath && (ssr ? route.prerender : true)) { return GetParamsAndPropsError.NoMatchingStaticPath; } // Note: considered using Object.create(...) for performance diff --git a/packages/astro/src/core/render/dev/index.ts b/packages/astro/src/core/render/dev/index.ts index 267c6515d31c..26e7c85d53b5 100644 --- a/packages/astro/src/core/render/dev/index.ts +++ b/packages/astro/src/core/render/dev/index.ts @@ -66,6 +66,7 @@ export async function preload({ try { // Load the module from the Vite SSR Runtime. const mod = (await env.loader.import(fileURLToPath(filePath))) as ComponentInstance; + return [renderers, mod]; } catch (error) { // If the error came from Markdown or CSS, we already handled it and there's no need to enhance it diff --git a/packages/astro/src/core/render/route-cache.ts b/packages/astro/src/core/render/route-cache.ts index 7f5678669c1d..227928267dae 100644 --- a/packages/astro/src/core/render/route-cache.ts +++ b/packages/astro/src/core/render/route-cache.ts @@ -31,7 +31,7 @@ export async function callGetStaticPaths({ }: CallGetStaticPathsOptions): Promise { validateDynamicRouteModule(mod, { ssr, logging, route }); // No static paths in SSR mode. Return an empty RouteCacheEntry. - if (ssr && !mod.prerender) { + if (ssr && !route.prerender) { return { staticPaths: Object.assign([], { keyed: new Map() }) }; } // Add a check here to make TypeScript happy. diff --git a/packages/astro/src/core/routing/manifest/create.ts b/packages/astro/src/core/routing/manifest/create.ts index 51f495e8b468..a673e199ba2f 100644 --- a/packages/astro/src/core/routing/manifest/create.ts +++ b/packages/astro/src/core/routing/manifest/create.ts @@ -227,7 +227,7 @@ export function createRouteManifest( ]); const validEndpointExtensions: Set = new Set(['.js', '.ts']); const localFs = fsMod ?? nodeFs; - const isPrenderDefault = isHybridOutput(settings.config); + const isPrerenderDefault = isHybridOutput(settings.config); const foundInvalidFileExtensions: Set = new Set(); @@ -340,7 +340,7 @@ export function createRouteManifest( component, generate, pathname: pathname || undefined, - prerender: isPrenderDefault, + prerender: isPrerenderDefault, }); } }); @@ -416,7 +416,7 @@ export function createRouteManifest( component, generate, pathname: pathname || void 0, - prerender: isPrenderDefault, + prerender: isPrerenderDefault, }); }); diff --git a/packages/astro/src/core/routing/validation.ts b/packages/astro/src/core/routing/validation.ts index 911a97a9e4a9..1a3bab82a2ee 100644 --- a/packages/astro/src/core/routing/validation.ts +++ b/packages/astro/src/core/routing/validation.ts @@ -32,14 +32,14 @@ export function validateDynamicRouteModule( route: RouteData; } ) { - if (ssr && mod.getStaticPaths && !mod.prerender) { + if (ssr && mod.getStaticPaths && !route.prerender) { warn( logging, 'getStaticPaths', `getStaticPaths() in ${bold(route.component)} is ignored when "output: server" is set.` ); } - if ((!ssr || mod.prerender) && !mod.getStaticPaths) { + if ((!ssr || route.prerender) && !mod.getStaticPaths) { throw new AstroError({ ...AstroErrorData.GetStaticPathsRequired, location: { file: route.component }, diff --git a/packages/astro/src/prerender/metadata.ts b/packages/astro/src/prerender/metadata.ts new file mode 100644 index 000000000000..15527af37aaa --- /dev/null +++ b/packages/astro/src/prerender/metadata.ts @@ -0,0 +1,22 @@ +import type { ModuleInfo, ModuleLoader } from '../core/module-loader'; +import { viteID } from '../core/util.js'; + +type GetPrerenderStatusParams = { + filePath: URL; + loader: ModuleLoader; +}; + +export function getPrerenderStatus({ + filePath, + loader, +}: GetPrerenderStatusParams): boolean | undefined { + const fileID = viteID(filePath); + const moduleInfo = loader.getModuleInfo(fileID); + if (!moduleInfo) return; + const prerenderStatus = getPrerenderMetadata(moduleInfo); + return prerenderStatus; +} + +export function getPrerenderMetadata(moduleInfo: ModuleInfo) { + return moduleInfo?.meta?.astro?.pageOptions?.prerender; +} diff --git a/packages/astro/src/vite-plugin-astro-server/route.ts b/packages/astro/src/vite-plugin-astro-server/route.ts index 259acd2eb95e..2f6e3259e9b6 100644 --- a/packages/astro/src/vite-plugin-astro-server/route.ts +++ b/packages/astro/src/vite-plugin-astro-server/route.ts @@ -19,6 +19,7 @@ import { matchAllRoutes } from '../core/routing/index.js'; import { isHybridOutput } from '../prerender/utils.js'; import { log404 } from './common.js'; import { handle404Response, writeSSRResult, writeWebResponse } from './response.js'; +import { getPrerenderStatus } from '../prerender/metadata.js'; type AsyncReturnType Promise> = T extends ( ...args: any @@ -50,6 +51,17 @@ export async function matchRoute( for await (const maybeRoute of matches) { const filePath = new URL(`./${maybeRoute.component}`, settings.config.root); const preloadedComponent = await preload({ env, filePath }); + + // gets the prerender metadata set by the `astro:scanner` vite plugin + const prerenderStatus = getPrerenderStatus({ + filePath, + loader: env.loader, + }); + + if (prerenderStatus !== undefined) { + maybeRoute.prerender = prerenderStatus; + } + const [, mod] = preloadedComponent; // attempt to get static paths // if this fails, we have a bad URL match! diff --git a/packages/astro/test/ssr-prerender-get-static-paths.test.js b/packages/astro/test/ssr-prerender-get-static-paths.test.js index f7100372b6fa..1a1712304168 100644 --- a/packages/astro/test/ssr-prerender-get-static-paths.test.js +++ b/packages/astro/test/ssr-prerender-get-static-paths.test.js @@ -1,131 +1,291 @@ import { expect } from 'chai'; import { loadFixture } from './test-utils.js'; import * as cheerio from 'cheerio'; +import testAdapter from './test-adapter.js'; -describe('prerender getStaticPaths - build calls', () => { +describe('Prerender', () => { /** @type {import('./test-utils').Fixture} */ let fixture; + describe('output: "server"', () => { + describe('getStaticPaths - build calls', () => { + before(async () => { + fixture = await loadFixture({ + root: './fixtures/ssr-prerender-get-static-paths/', + site: 'https://mysite.dev/', + adapter: testAdapter(), + base: '/blog', + output: 'server', + }); + await fixture.build(); + }); - before(async () => { - fixture = await loadFixture({ - root: './fixtures/ssr-prerender-get-static-paths/', - site: 'https://mysite.dev/', - base: '/blog', + after(async () => { + await fixture.clean(); + }); + + afterEach(() => { + // reset the flag used by [...calledTwiceTest].astro between each test + globalThis.isCalledOnce = false; + }); + + it('is only called once during build', () => { + // useless expect; if build() throws in setup then this test fails + expect(true).to.equal(true); + }); + + it('Astro.url sets the current pathname', async () => { + const html = await fixture.readFile('/client/food/tacos/index.html'); + const $ = cheerio.load(html); + + expect($('#props').text()).to.equal('10'); + expect($('#url').text()).to.equal('/blog/food/tacos/'); + }); }); - await fixture.build(); - }); - afterEach(() => { - // reset the flag used by [...calledTwiceTest].astro between each test - globalThis.isCalledOnce = false; - }); + describe('getStaticPaths - dev calls', () => { + let devServer; - it('is only called once during build', () => { - // useless expect; if build() throws in setup then this test fails - expect(true).to.equal(true); - }); + before(async () => { + globalThis.isCalledOnce = false; + devServer = await fixture.startDevServer(); + }); - it('Astro.url sets the current pathname', async () => { - const html = await fixture.readFile('/food/tacos/index.html'); - const $ = cheerio.load(html); + afterEach(() => { + // reset the flag used by [...calledTwiceTest].astro between each test + globalThis.isCalledOnce = false; + }); - expect($('#props').text()).to.equal('10'); - expect($('#url').text()).to.equal('/blog/food/tacos/'); - }); -}); + after(async () => { + devServer.stop(); + }); -describe('prerender getStaticPaths - dev calls', () => { - let fixture; - let devServer; + it('only calls prerender getStaticPaths once', async () => { + let res = await fixture.fetch('/blog/a'); + expect(res.status).to.equal(200); - before(async () => { - globalThis.isCalledOnce = false; - fixture = await loadFixture({ - root: './fixtures/ssr-prerender-get-static-paths/', - site: 'https://mysite.dev/', - }); - devServer = await fixture.startDevServer(); - }); + res = await fixture.fetch('/blog/b'); + expect(res.status).to.equal(200); - afterEach(() => { - // reset the flag used by [...calledTwiceTest].astro between each test - globalThis.isCalledOnce = false; - }); + res = await fixture.fetch('/blog/c'); + expect(res.status).to.equal(200); + }); - after(async () => { - devServer.stop(); - }); + describe('404 behavior', () => { + it('resolves 200 on matching static path - named params', async () => { + const res = await fixture.fetch('/blog/pizza/provolone-sausage'); + expect(res.status).to.equal(200); + }); - it('only calls prerender getStaticPaths once', async () => { - let res = await fixture.fetch('/a'); - expect(res.status).to.equal(200); + it('resolves 404 on pattern match without static path - named params', async () => { + const res = await fixture.fetch('/blog/pizza/provolone-pineapple'); + const html = await res.text(); + expect(res.status).to.equal(404); + expect(html).to.match(/404/); + }); - res = await fixture.fetch('/b'); - expect(res.status).to.equal(200); + it('resolves 200 on matching static path - rest params', async () => { + const res = await fixture.fetch('/blog/pizza/grimaldis/new-york'); + expect(res.status).to.equal(200); + }); - res = await fixture.fetch('/c'); - expect(res.status).to.equal(200); - }); + it('resolves 404 on pattern match without static path - rest params', async () => { + const res = await fixture.fetch('/blog/pizza/pizza-hut'); + const html = await res.text(); - describe('404 behavior', () => { - it('resolves 200 on matching static path - named params', async () => { - const res = await fixture.fetch('/pizza/provolone-sausage'); - expect(res.status).to.equal(200); - }); + expect(res.status).to.equal(404); + expect(html).to.match(/404/); + }); + }); - it('resolves 404 on pattern match without static path - named params', async () => { - const res = await fixture.fetch('/pizza/provolone-pineapple'); - const html = await res.text(); - expect(res.status).to.equal(404); - expect(html).to.match(/404/); - }); + describe('route params type validation', () => { + it('resolves 200 on nested array parameters', async () => { + const res = await fixture.fetch('/blog/nested-arrays/slug1'); + expect(res.status).to.equal(200); + }); - it('resolves 200 on matching static path - rest params', async () => { - const res = await fixture.fetch('/pizza/grimaldis/new-york'); - expect(res.status).to.equal(200); - }); + it('resolves 200 on matching static path - string params', async () => { + // route provided with { params: { year: "2022", slug: "post-2" }} + const res = await fixture.fetch('/blog/blog/2022/post-1'); + expect(res.status).to.equal(200); + }); - it('resolves 404 on pattern match without static path - rest params', async () => { - const res = await fixture.fetch('/pizza/pizza-hut'); - const html = await res.text(); - expect(res.status).to.equal(404); - expect(html).to.match(/404/); + it('resolves 200 on matching static path - numeric params', async () => { + // route provided with { params: { year: 2022, slug: "post-2" }} + const res = await fixture.fetch('/blog/blog/2022/post-2'); + expect(res.status).to.equal(200); + }); + }); + + it('resolves 200 on matching static paths', async () => { + // routes params provided for pages /posts/1, /posts/2, and /posts/3 + for (const page of [1, 2, 3]) { + let res = await fixture.fetch(`/blog/posts/${page}`); + expect(res.status).to.equal(200); + + const html = await res.text(); + const $ = cheerio.load(html); + + const canonical = $('link[rel=canonical]'); + expect(canonical.attr('href')).to.equal( + `https://mysite.dev/blog/posts/${page}`, + `doesn't trim the /${page} route param` + ); + } + }); }); }); - describe('route params type validation', () => { - it('resolves 200 on nested array parameters', async () => { - const res = await fixture.fetch('/nested-arrays/slug1'); - expect(res.status).to.equal(200); - }); + describe('output: "hybrid"', () => { + describe('getStaticPaths - build calls', () => { + before(async () => { + fixture = await loadFixture({ + root: './fixtures/ssr-prerender-get-static-paths/', + site: 'https://mysite.dev/', + adapter: testAdapter(), + base: '/blog', + output: 'hybrid', + experimental: { + hybridOutput: true, + }, + vite: { + plugins: [vitePluginRemovePrerenderExport()], + }, + }); + await fixture.build(); + }); - it('resolves 200 on matching static path - string params', async () => { - // route provided with { params: { year: "2022", slug: "post-2" }} - const res = await fixture.fetch('/blog/2022/post-1'); - expect(res.status).to.equal(200); - }); + after(async () => { + await fixture.clean(); + }); - it('resolves 200 on matching static path - numeric params', async () => { - // route provided with { params: { year: 2022, slug: "post-2" }} - const res = await fixture.fetch('/blog/2022/post-2'); - expect(res.status).to.equal(200); + afterEach(() => { + // reset the flag used by [...calledTwiceTest].astro between each test + globalThis.isCalledOnce = false; + }); + + it('is only called once during build', () => { + // useless expect; if build() throws in setup then this test fails + expect(true).to.equal(true); + }); + + it('Astro.url sets the current pathname', async () => { + const html = await fixture.readFile('/client/food/tacos/index.html'); + const $ = cheerio.load(html); + + expect($('#props').text()).to.equal('10'); + expect($('#url').text()).to.equal('/blog/food/tacos/'); + }); }); - }); - it('resolves 200 on matching static paths', async () => { - // routes params provided for pages /posts/1, /posts/2, and /posts/3 - for (const page of [1, 2, 3]) { - let res = await fixture.fetch(`/posts/${page}`); - expect(res.status).to.equal(200); - - const html = await res.text(); - const $ = cheerio.load(html); - - const canonical = $('link[rel=canonical]'); - expect(canonical.attr('href')).to.equal( - `https://mysite.dev/posts/${page}`, - `doesn't trim the /${page} route param` - ); - } + describe('getStaticPaths - dev calls', () => { + let devServer; + + before(async () => { + globalThis.isCalledOnce = false; + devServer = await fixture.startDevServer(); + }); + + afterEach(() => { + // reset the flag used by [...calledTwiceTest].astro between each test + globalThis.isCalledOnce = false; + }); + + after(async () => { + devServer.stop(); + }); + + it('only calls hybrid getStaticPaths once', async () => { + let res = await fixture.fetch('/blog/a'); + expect(res.status).to.equal(200); + + res = await fixture.fetch('/blog/b'); + expect(res.status).to.equal(200); + + res = await fixture.fetch('/blog/c'); + expect(res.status).to.equal(200); + }); + + describe('404 behavior', () => { + it('resolves 200 on matching static path - named params', async () => { + const res = await fixture.fetch('/blog/pizza/provolone-sausage'); + expect(res.status).to.equal(200); + }); + + it('resolves 404 on pattern match without static path - named params', async () => { + const res = await fixture.fetch('/blog/pizza/provolone-pineapple'); + const html = await res.text(); + expect(res.status).to.equal(404); + expect(html).to.match(/404/); + }); + + it('resolves 200 on matching static path - rest params', async () => { + const res = await fixture.fetch('/blog/pizza/grimaldis/new-york'); + expect(res.status).to.equal(200); + }); + + it('resolves 404 on pattern match without static path - rest params', async () => { + const res = await fixture.fetch('/blog/pizza/pizza-hut'); + const html = await res.text(); + + expect(res.status).to.equal(404); + expect(html).to.match(/404/); + }); + }); + + describe('route params type validation', () => { + it('resolves 200 on nested array parameters', async () => { + const res = await fixture.fetch('/blog/nested-arrays/slug1'); + expect(res.status).to.equal(200); + }); + + it('resolves 200 on matching static path - string params', async () => { + // route provided with { params: { year: "2022", slug: "post-2" }} + const res = await fixture.fetch('/blog/blog/2022/post-1'); + expect(res.status).to.equal(200); + }); + + it('resolves 200 on matching static path - numeric params', async () => { + // route provided with { params: { year: 2022, slug: "post-2" }} + const res = await fixture.fetch('/blog/blog/2022/post-2'); + expect(res.status).to.equal(200); + }); + }); + + it('resolves 200 on matching static paths', async () => { + // routes params provided for pages /posts/1, /posts/2, and /posts/3 + for (const page of [1, 2, 3]) { + let res = await fixture.fetch(`/blog/posts/${page}`); + expect(res.status).to.equal(200); + + const html = await res.text(); + const $ = cheerio.load(html); + + const canonical = $('link[rel=canonical]'); + expect(canonical.attr('href')).to.equal( + `https://mysite.dev/blog/posts/${page}`, + `doesn't trim the /${page} route param` + ); + } + }); + }); }); }); + +/** @returns {import('vite').Plugin} */ +function vitePluginRemovePrerenderExport() { + const EXTENSIONS = ['.astro', '.ts']; + /** @type {import('vite').Plugin} */ + const plugin = { + name: 'remove-prerender-export', + transform(code, id) { + if (!EXTENSIONS.some((ext) => id.endsWith(ext))) return; + return code.replace(/export\s+const\s+prerender\s+=\s+true;/g, ''); + }, + }; + return { + name: 'remove-prerender-export-injector', + configResolved(resolved) { + resolved.plugins.unshift(plugin); + }, + }; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d75e43cba08b..20ca7bcb57b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5756,7 +5756,7 @@ packages: resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.4 + '@babel/types': 7.21.5 dev: false /@babel/helper-module-imports@7.21.4: @@ -5850,7 +5850,6 @@ packages: /@babel/helper-string-parser@7.21.5: resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} engines: {node: '>=6.9.0'} - dev: false /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} @@ -5904,8 +5903,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.18.4 - dev: false + '@babel/types': 7.21.5 /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.18.2): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} @@ -6993,7 +6991,7 @@ packages: '@babel/helper-plugin-utils': 7.21.5 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.18.2) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.18.2) - '@babel/types': 7.18.4 + '@babel/types': 7.21.5 esutils: 2.0.3 dev: false @@ -7066,7 +7064,6 @@ packages: '@babel/helper-string-parser': 7.21.5 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - dev: false /@builder.io/partytown@0.7.4: resolution: {integrity: sha512-dcZBPNQiHbMhvDGmdWRFNe75Z/XYmeZ2bubYmC5BeQpF09ObbPcbSqIP2NaNOFonKlWLfsE6u1790o9ZmlfpIw==} @@ -8717,7 +8714,7 @@ packages: /@ts-morph/common@0.16.0: resolution: {integrity: sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==} dependencies: - fast-glob: 3.2.11 + fast-glob: 3.2.12 minimatch: 5.1.6 mkdirp: 1.0.4 path-browserify: 1.0.1 @@ -9419,7 +9416,7 @@ packages: /@vue/compiler-core@3.2.47: resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} dependencies: - '@babel/parser': 7.18.4 + '@babel/parser': 7.21.8 '@vue/shared': 3.2.47 estree-walker: 2.0.2 source-map: 0.6.1 @@ -9492,7 +9489,7 @@ packages: /@vue/reactivity-transform@3.2.47: resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==} dependencies: - '@babel/parser': 7.18.4 + '@babel/parser': 7.21.8 '@vue/compiler-core': 3.2.47 '@vue/shared': 3.2.47 estree-walker: 2.0.2 @@ -10124,7 +10121,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.3.8 + semver: 7.5.1 dev: true /bundle-name@3.0.0: @@ -14531,7 +14528,7 @@ packages: resolution: {integrity: sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==} engines: {node: '>=10'} dependencies: - semver: 7.3.8 + semver: 7.5.1 /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} @@ -14665,7 +14662,7 @@ packages: dependencies: execa: 6.1.0 parse-package-name: 1.0.0 - semver: 7.3.8 + semver: 7.5.1 validate-npm-package-name: 4.0.0 dev: true