From 330620e1b3932d43b9efea6cbbbb75d48df99baa Mon Sep 17 00:00:00 2001 From: Drew Powers <1369770+drwpow@users.noreply.github.com> Date: Fri, 22 Oct 2021 09:22:55 -0600 Subject: [PATCH] Update renderer API for Vite (#1623) * Update renderer API for Vite * Fix lit-element tests * Clean up comments * Throw friendly error if renderer provides viteConfig in a bad format --- examples/blog-multiple-authors/package.json | 3 - examples/blog/package.json | 3 - examples/docs/package.json | 10 - examples/framework-lit/package.json | 3 - examples/framework-lit/src/pages/index.astro | 18 +- examples/framework-multiple/package.json | 3 - examples/framework-preact/package.json | 3 - .../framework-preact/src/pages/index.astro | 18 +- examples/framework-react/package.json | 3 - .../framework-react/src/pages/index.astro | 17 +- examples/framework-solid/package.json | 3 - .../src/components/Counter.jsx | 3 +- .../framework-solid/src/pages/index.astro | 5 +- examples/framework-svelte/package.json | 3 - .../framework-svelte/src/pages/index.astro | 17 +- examples/framework-vue/package.json | 3 - examples/framework-vue/src/pages/index.astro | 17 +- examples/minimal/package.json | 3 - examples/portfolio/package.json | 3 - examples/starter/package.json | 3 - examples/with-markdown-plugins/package.json | 3 - examples/with-markdown/package.json | 3 - examples/with-nanostores/package.json | 3 - examples/with-tailwindcss/package.json | 3 - packages/astro/src/@types/astro-core.ts | 18 +- packages/astro/src/core/create-vite.ts | 175 ++++------ packages/astro/src/core/dev/index.ts | 2 +- packages/astro/src/runtime/server/index.ts | 10 +- packages/astro/src/vite-plugin-astro/index.ts | 6 +- packages/astro/src/vite-plugin-fetch/index.ts | 6 + packages/astro/src/vite-plugin-jsx/index.ts | 7 +- packages/astro/test/custom-elements.test.js | 1 - .../my-component-lib/hydration-polyfill.js | 3 +- .../custom-elements/my-component-lib/index.js | 9 +- .../my-component-lib/package.json | 2 +- .../my-component-lib/polyfill.js | 2 +- .../my-component-lib/server.js | 2 +- .../custom-elements/my-component-lib/shim.js | 2 +- .../fixtures/custom-elements/package.json | 2 +- .../src/components/my-element.js | 2 +- .../custom-elements/src/pages/load.astro | 2 +- .../lit-element/src/components/my-element.js | 2 +- .../src/{pages => skipped-pages}/ctr.astro | 2 +- .../components/PragmaCommentTypeScript.tsx | 2 +- .../react-component/src/pages/index.astro | 2 +- .../forgot-import.astro | 0 .../src/{pages => skipped-pages}/window.astro | 0 packages/astro/test/lit-element.test.js | 15 +- packages/astro/test/preact-component.test.js | 19 +- packages/astro/test/react-component.test.js | 30 +- packages/astro/test/vue-component.test.js | 5 +- packages/renderers/renderer-lit/index.js | 30 +- packages/renderers/renderer-lit/server.js | 2 +- packages/renderers/renderer-preact/index.js | 11 +- .../renderers/renderer-preact/package.json | 4 +- packages/renderers/renderer-react/index.js | 14 +- .../renderers/renderer-react/package.json | 2 +- packages/renderers/renderer-react/server.js | 18 +- packages/renderers/renderer-solid/index.js | 31 +- .../renderers/renderer-solid/package.json | 4 +- packages/renderers/renderer-solid/server.js | 1 - packages/renderers/renderer-svelte/index.js | 19 +- .../renderers/renderer-svelte/package.json | 4 +- packages/renderers/renderer-vue/index.js | 13 +- packages/renderers/renderer-vue/package.json | 8 +- packages/renderers/renderer-vue/server.js | 2 +- yarn.lock | 326 ++++++------------ 67 files changed, 421 insertions(+), 549 deletions(-) rename packages/astro/test/fixtures/lit-element/src/{pages => skipped-pages}/ctr.astro (95%) rename packages/astro/test/fixtures/react-component/src/{pages => skipped-pages}/forgot-import.astro (100%) rename packages/astro/test/fixtures/react-component/src/{pages => skipped-pages}/window.astro (100%) diff --git a/examples/blog-multiple-authors/package.json b/examples/blog-multiple-authors/package.json index 05de3e6d1..9964ef6e4 100644 --- a/examples/blog-multiple-authors/package.json +++ b/examples/blog-multiple-authors/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/blog/package.json b/examples/blog/package.json index 2d2a048f0..3deb4aca0 100644 --- a/examples/blog/package.json +++ b/examples/blog/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/docs/package.json b/examples/docs/package.json index bd1a861c0..acba905ee 100644 --- a/examples/docs/package.json +++ b/examples/docs/package.json @@ -14,15 +14,5 @@ "devDependencies": { "astro": "^0.20.12", "@snowpack/plugin-dotenv": "^2.1.0" - }, - "snowpack": { - "alias": { - "components": "./src/components", - "~": "./src" - }, - "plugins": [ - "@snowpack/plugin-dotenv" - ], - "workspaceRoot": "../.." } } diff --git a/examples/framework-lit/package.json b/examples/framework-lit/package.json index b6552b8f4..bc0606cda 100644 --- a/examples/framework-lit/package.json +++ b/examples/framework-lit/package.json @@ -11,8 +11,5 @@ "devDependencies": { "@astrojs/renderer-lit": "^0.1.2", "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/framework-lit/src/pages/index.astro b/examples/framework-lit/src/pages/index.astro index 4c4ac5c10..ec4a7f73d 100644 --- a/examples/framework-lit/src/pages/index.astro +++ b/examples/framework-lit/src/pages/index.astro @@ -6,18 +6,14 @@ import '../components/Counter.js'; - - - - Demo - - + + + Demo + +

Test app

- - - - + - + diff --git a/examples/framework-multiple/package.json b/examples/framework-multiple/package.json index 2c228a076..60dc949ef 100644 --- a/examples/framework-multiple/package.json +++ b/examples/framework-multiple/package.json @@ -11,8 +11,5 @@ "devDependencies": { "astro": "^0.20.12", "@astrojs/renderer-solid": "^0.1.1" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/framework-preact/package.json b/examples/framework-preact/package.json index 493f037a8..fa472f48a 100644 --- a/examples/framework-preact/package.json +++ b/examples/framework-preact/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/framework-preact/src/pages/index.astro b/examples/framework-preact/src/pages/index.astro index 00ac11e14..eefc24414 100644 --- a/examples/framework-preact/src/pages/index.astro +++ b/examples/framework-preact/src/pages/index.astro @@ -2,20 +2,14 @@ // Component Imports import Counter from '../components/Counter.tsx' - // Full Astro Component Syntax: // https://docs.astro.build/core-concepts/astro-components/ --- - - - - + +
-

Hello Preact!

+

Hello, Preact!

diff --git a/examples/framework-react/package.json b/examples/framework-react/package.json index 548557cb5..d83a8526d 100644 --- a/examples/framework-react/package.json +++ b/examples/framework-react/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/framework-react/src/pages/index.astro b/examples/framework-react/src/pages/index.astro index b14489440..ba30fed6f 100644 --- a/examples/framework-react/src/pages/index.astro +++ b/examples/framework-react/src/pages/index.astro @@ -11,13 +11,8 @@ const someProps = { - - - - + +
-

Hello React!

+

Hello, React!

diff --git a/examples/framework-solid/package.json b/examples/framework-solid/package.json index 1d6b9a5b1..bfc6af996 100644 --- a/examples/framework-solid/package.json +++ b/examples/framework-solid/package.json @@ -11,8 +11,5 @@ "devDependencies": { "astro": "^0.20.12", "@astrojs/renderer-solid": "0.1.1" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/framework-solid/src/components/Counter.jsx b/examples/framework-solid/src/components/Counter.jsx index 3d0b7e757..a008a709f 100644 --- a/examples/framework-solid/src/components/Counter.jsx +++ b/examples/framework-solid/src/components/Counter.jsx @@ -1,7 +1,6 @@ import { createSignal } from 'solid-js'; -/** */ -export default function SolidCounter({ children }) { +export default function Counter({ children }) { const [count, setCount] = createSignal(0); const add = () => setCount(count() + 1); const subtract = () => setCount(count() - 1); diff --git a/examples/framework-solid/src/pages/index.astro b/examples/framework-solid/src/pages/index.astro index 747385394..57369c320 100644 --- a/examples/framework-solid/src/pages/index.astro +++ b/examples/framework-solid/src/pages/index.astro @@ -1,7 +1,6 @@ --- import Counter from '../components/Counter.jsx'; --- - @@ -13,10 +12,10 @@ import Counter from '../components/Counter.jsx'; } .counter { display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - place-items: center; font-size: 2em; + grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 3em; + place-items: center; } .counter-message { text-align: center; diff --git a/examples/framework-svelte/package.json b/examples/framework-svelte/package.json index eae4ab4ab..b74b8416b 100644 --- a/examples/framework-svelte/package.json +++ b/examples/framework-svelte/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/framework-svelte/src/pages/index.astro b/examples/framework-svelte/src/pages/index.astro index fa45d05e8..8cf84ef53 100644 --- a/examples/framework-svelte/src/pages/index.astro +++ b/examples/framework-svelte/src/pages/index.astro @@ -9,13 +9,8 @@ import Counter from '../components/Counter.svelte' - - - - + +
-

Hello Svelte!

+

Hello, Svelte!

diff --git a/examples/framework-vue/package.json b/examples/framework-vue/package.json index 0e6732635..343f0a712 100644 --- a/examples/framework-vue/package.json +++ b/examples/framework-vue/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/framework-vue/src/pages/index.astro b/examples/framework-vue/src/pages/index.astro index dbb1831b2..c7679c46e 100644 --- a/examples/framework-vue/src/pages/index.astro +++ b/examples/framework-vue/src/pages/index.astro @@ -9,13 +9,8 @@ import Counter from '../components/Counter.vue' - - - - + +
-

Hello Vue!

+

Hello, Vue!

diff --git a/examples/minimal/package.json b/examples/minimal/package.json index c3a8588b6..f6d10c8af 100644 --- a/examples/minimal/package.json +++ b/examples/minimal/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/portfolio/package.json b/examples/portfolio/package.json index 49b222b20..8e3c39940 100644 --- a/examples/portfolio/package.json +++ b/examples/portfolio/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/starter/package.json b/examples/starter/package.json index aceb6e548..95b369a27 100644 --- a/examples/starter/package.json +++ b/examples/starter/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/with-markdown-plugins/package.json b/examples/with-markdown-plugins/package.json index 21dd7ad8e..cec212962 100644 --- a/examples/with-markdown-plugins/package.json +++ b/examples/with-markdown-plugins/package.json @@ -15,8 +15,5 @@ "rehype-toc": "^3.0.2", "remark-code-titles": "^0.1.2", "remark-slug": "^6.0.0" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/with-markdown/package.json b/examples/with-markdown/package.json index 934f91436..2b83fe6e3 100644 --- a/examples/with-markdown/package.json +++ b/examples/with-markdown/package.json @@ -10,8 +10,5 @@ }, "devDependencies": { "astro": "^0.20.12" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/with-nanostores/package.json b/examples/with-nanostores/package.json index 79db2295b..daa4cba67 100644 --- a/examples/with-nanostores/package.json +++ b/examples/with-nanostores/package.json @@ -13,8 +13,5 @@ }, "dependencies": { "nanostores": "^0.3.3" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/examples/with-tailwindcss/package.json b/examples/with-tailwindcss/package.json index 51c2c470e..0af749c58 100644 --- a/examples/with-tailwindcss/package.json +++ b/examples/with-tailwindcss/package.json @@ -12,8 +12,5 @@ "astro": "^0.20.12", "autoprefixer": "^10.3.7", "tailwindcss": "^2.2.17" - }, - "snowpack": { - "workspaceRoot": "../.." } } diff --git a/packages/astro/src/@types/astro-core.ts b/packages/astro/src/@types/astro-core.ts index 889aa4688..65489b825 100644 --- a/packages/astro/src/@types/astro-core.ts +++ b/packages/astro/src/@types/astro-core.ts @@ -240,14 +240,12 @@ export interface RenderPageOptions { export interface Renderer { /** Name of the renderer (required) */ name: string; - hydrationPolyfills?: string[]; - /** Don’t try and build these dependencies for client */ - external?: string[]; - /** Clientside requirements */ - knownEntrypoints?: string[]; - polyfills?: string[]; /** Import statement for renderer */ source?: string; + /** Scripts to be injected before component */ + polyfills?: string[]; + /** Polyfills that need to run before hydration ever occurs */ + hydrationPolyfills?: string[]; /** JSX identifier (e.g. 'react' or 'solid-js') */ jsxImportSource?: string; /** Babel transform options */ @@ -259,8 +257,12 @@ export interface Renderer { html: string; }>; }; - /** Add plugins to Vite, if any */ - vitePlugins?: vite.Plugin[]; + /** Return configuration object for Vite ("options" should match https://vitejs.dev/guide/api-plugin.html#config) */ + viteConfig?: (options: { mode: 'string'; command: 'build' | 'serve' }) => Promise; + /** @deprecated Don’t try and build these dependencies for client (deprecated in 0.21) */ + external?: string[]; + /** @deprecated Clientside requirements (deprecated in 0.21) */ + knownEntrypoints?: string[]; } export interface RouteData { diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts index 82cd203e8..d34fdfa2a 100644 --- a/packages/astro/src/core/create-vite.ts +++ b/packages/astro/src/core/create-vite.ts @@ -2,7 +2,6 @@ import type { AstroConfig } from '../@types/astro-core'; import type { AstroDevServer } from './dev'; import type { LogOptions } from './logger'; -import fs from 'fs'; import slash from 'slash'; import { fileURLToPath } from 'url'; import { createRequire } from 'module'; @@ -16,7 +15,10 @@ import { getPackageJSON, parseNpmName } from './util.js'; const require = createRequire(import.meta.url); -/** +// Some packages are just external, and that’s the way it goes. +const ALWAYS_EXTERNAL = new Set(['@sveltejs/vite-plugin-svelte', 'micromark-util-events-to-acorn', 'estree-util-value-to-estree', 'shorthash', 'unified']); + +/* * Tailwind fixes * These fix Tailwind HMR in dev, and must be declared before Vite initiates. * These are Tailwind-specific, so they’re safe to add. @@ -26,100 +28,74 @@ const require = createRequire(import.meta.url); // note: ssr is still an experimental API hence the type omission type ViteConfigWithSSR = vite.InlineConfig & { ssr?: { external?: string[]; noExternal?: string[] } }; -/** Return a common starting point for all Vite actions */ -export async function createVite( - viteConfig: ViteConfigWithSSR, - { astroConfig, logging, devServer }: { astroConfig: AstroConfig; logging: LogOptions; devServer?: AstroDevServer } -): Promise { - const optimizedDeps = new Set(); // dependencies that must be bundled for the client (Vite may not detect all of these) - const dedupe = new Set(); // dependencies that can’t be duplicated (e.g. React & SolidJS) - const plugins: Plugin[] = []; // Vite plugins +interface CreateViteOptions { + astroConfig: AstroConfig; + devServer?: AstroDevServer; + logging: LogOptions; +} - // load project deps +/** Return a common starting point for all Vite actions */ +export async function createVite(inlineConfig: ViteConfigWithSSR, { astroConfig, logging, devServer }: CreateViteOptions): Promise { const packageJSON = (await getPackageJSON(astroConfig.projectRoot)) || {}; const userDeps = Object.keys(packageJSON?.dependencies || {}); - userDeps.forEach((dep) => { - optimizedDeps.add(dep); // prepare all user deps for client ahead of time - }); const userDevDeps = Object.keys(packageJSON?.devDependencies || {}); - const { external, noExternal } = await viteSSRDeps([...userDeps, ...userDevDeps]); - // console.log(external.has('tiny-glob'), noExternal.has('tiny-glob')); + const { external, noExternal } = await viteSSRDeps([...userDeps, ...userDevDeps]); // TODO: improve this? - // load Astro renderers - await Promise.all( - astroConfig.renderers.map(async (name) => { - const { default: renderer } = await import(name); - // prepare client-side hydration code for browser - if (renderer.client) { - optimizedDeps.add(name + renderer.client.substr(1)); - } - // knownEntrypoints and polyfills need to be added to the client - for (let dep of [...(renderer.knownEntrypoints || []), ...(renderer.polyfills || [])]) { - if (dep[0] === '.') dep = name + dep.substr(1); // if local polyfill, use full path - optimizedDeps.add(dep); - dedupe.add(dep); // we can try and dedupe renderers by default - } - // let renderer inject Vite plugins - if (renderer.vitePlugins) { - plugins.push(...renderer.vitePlugins); - } - // mark external packages as external to Vite - if (renderer.external) { - for (const dep of renderer.external) { - external.add(dep); - noExternal.delete(dep); - } - } - }) - ); - - // load client-side hydrations - fs.readdirSync(new URL('../runtime/client', import.meta.url)).forEach((hydrator) => { - optimizedDeps.add(`astro/client/${hydrator}`); // always prepare these for client - }); - - return vite.mergeConfig( - { - cacheDir: fileURLToPath(new URL('./node_modules/.vite/', astroConfig.projectRoot)), // using local caches allows Astro to be used in monorepos, etc. - clearScreen: false, - logLevel: 'error', - optimizeDeps: { - /** Try and scan a user’s project (won’t catch everything) */ - entries: ['src/**/*'], - /** Always include these dependencies for optimization */ - include: [...optimizedDeps], - }, - plugins: [ - astroVitePlugin({ config: astroConfig, devServer }), - markdownVitePlugin({ config: astroConfig, devServer }), - jsxVitePlugin({ config: astroConfig, logging }), - astroPostprocessVitePlugin({ config: astroConfig, devServer }), - fetchVitePlugin(), - ...plugins, - ], - publicDir: fileURLToPath(astroConfig.public), - resolve: { - dedupe: [...dedupe], - }, - root: fileURLToPath(astroConfig.projectRoot), - server: { - /** prevent serving outside of project root (will become new default soon) */ - fs: { strict: true }, - /** disable HMR for test */ - hmr: process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'production' ? false : undefined, - /** handle Vite URLs */ - proxy: { - // add proxies here - }, - }, - /** Note: SSR API is in beta (https://vitejs.dev/guide/ssr.html) */ - ssr: { - external: [...external], - noExternal: [...noExternal], + // First, start with the Vite configuration that Astro core needs + let viteConfig: ViteConfigWithSSR = { + cacheDir: fileURLToPath(new URL('./node_modules/.vite/', astroConfig.projectRoot)), // using local caches allows Astro to be used in monorepos, etc. + clearScreen: false, // we want to control the output, not Vite + logLevel: 'error', // log errors only + optimizeDeps: { + entries: ['src/**/*'], // Try and scan a user’s project (won’t catch everything), + include: [...userDeps], // tell Vite to prebuild everything in a user’s package.json dependencies + }, + plugins: [ + astroVitePlugin({ config: astroConfig, devServer }), + markdownVitePlugin({ config: astroConfig, devServer }), + jsxVitePlugin({ config: astroConfig, logging }), + astroPostprocessVitePlugin({ config: astroConfig, devServer }), + fetchVitePlugin(), + ], + publicDir: fileURLToPath(astroConfig.public), + root: fileURLToPath(astroConfig.projectRoot), + server: { + /** disable HMR for test */ + hmr: process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'production' ? false : undefined, + /** handle Vite URLs */ + proxy: { + // add proxies here }, }, - vite.mergeConfig(viteConfig, astroConfig.vite || {}) // merge in user vite settings - ); + /** Note: SSR API is in beta (https://vitejs.dev/guide/ssr.html) */ + ssr: { + external: [...external, ...ALWAYS_EXTERNAL], + noExternal: [...noExternal], + }, + }; + + // Add in Astro renderers, which will extend the base config + for (const name of astroConfig.renderers) { + try { + const { default: renderer } = await import(name); + if (!renderer) continue; + // if a renderer provides viteConfig(), call it and pass in results + if (renderer.viteConfig) { + if (typeof renderer.viteConfig !== 'function') { + throw new Error(`${name}: viteConfig(options) must be a function! Got ${typeof renderer.viteConfig}.`); + } + const rendererConfig = await renderer.viteConfig({ mode: inlineConfig.mode, command: inlineConfig.mode === 'production' ? 'build' : 'serve' }); // is this command true? + viteConfig = vite.mergeConfig(viteConfig, rendererConfig) as vite.InlineConfig; + } + } catch (err) { + throw new Error(`${name}: ${err}`); + } + } + + // Add in user settings last, followed by any Vite configuration passed in from the parent function (overrides) + viteConfig = vite.mergeConfig(viteConfig, astroConfig.vite || {}); // merge in Vite config from astro.config.mjs + viteConfig = vite.mergeConfig(viteConfig, inlineConfig); // merge in inline Vite config + return viteConfig; } /** Try and automatically figure out Vite external & noExternal */ @@ -165,23 +141,14 @@ async function viteSSRDeps(deps: string[]): Promise<{ external: Set; noE return; } - // sort this package - let isExternal = true; // external by default - - // ESM gets noExternal - if (packageJSON.type === 'module') isExternal = false; - // TODO: manual bugfixes for Vite - if (pkg.name === '@sveltejs/vite-plugin-svelte') isExternal = true; - if (pkg.name === 'micromark-util-events-to-acorn') isExternal = true; - if (pkg.name === 'unified') isExternal = true; - // TODO: add more checks here if needed - - // add to list - if (isExternal === true) { - external.add(spec); - } else { + // if ESM, try noExternal + if (packageJSON.type === 'module') { noExternal.add(spec); } + // otherwise, assume external by default + else { + external.add(spec); + } // recursively load dependencies for package (but not devDeps) await Promise.all(Object.keys(packageJSON.dependencies || {}).map(sortPkg)); diff --git a/packages/astro/src/core/dev/index.ts b/packages/astro/src/core/dev/index.ts index 71c14cbd8..1346823c1 100644 --- a/packages/astro/src/core/dev/index.ts +++ b/packages/astro/src/core/dev/index.ts @@ -5,7 +5,7 @@ import type { LogOptions } from '../logger'; import type { HmrContext, ModuleNode } from '../vite'; import { fileURLToPath } from 'url'; -import {promisify} from 'util'; +import { promisify } from 'util'; import connect from 'connect'; import mime from 'mime'; import { performance } from 'perf_hooks'; diff --git a/packages/astro/src/runtime/server/index.ts b/packages/astro/src/runtime/server/index.ts index c5654587c..aa3433a20 100644 --- a/packages/astro/src/runtime/server/index.ts +++ b/packages/astro/src/runtime/server/index.ts @@ -1,8 +1,7 @@ -import type { AstroComponentMetadata } from '../../@types/astro-core'; +import type { AstroComponentMetadata, Renderer } from '../../@types/astro-core'; import type { SSRResult } from '../../@types/astro-runtime'; import type { TopLevelAstro } from '../../@types/astro-runtime'; -import { pathToFileURL } from 'url'; import { valueToEstree } from 'estree-util-value-to-estree'; import * as astring from 'astring'; import shorthash from 'shorthash'; @@ -210,14 +209,15 @@ export async function renderComponent(result: SSRResult, displayName: string, Co metadata.componentUrl = hydration.componentUrl; } - let renderer = null; + let renderer: Renderer | undefined; for (const r of renderers) { if (await r.ssr.check(Component, props, children)) { renderer = r; + break; } } - if (renderer === null) { + if (!renderer) { if (typeof Component === 'string') { html = await renderAstroComponent(await render`<${Component}${spreadAttributes(props)}>${children}`); } else { @@ -261,7 +261,7 @@ function createFetchContentFn(url: URL) { ...mod.frontmatter, content: mod.metadata, file: new URL(spec, url), - url: urlSpec.includes('/pages/') && urlSpec.replace(/^.*\/pages\//, '/').replace(/\.md$/, '') + url: urlSpec.includes('/pages/') && urlSpec.replace(/^.*\/pages\//, '/').replace(/\.md$/, ''), }; }) .filter(Boolean); diff --git a/packages/astro/src/vite-plugin-astro/index.ts b/packages/astro/src/vite-plugin-astro/index.ts index 4bcb26eae..597f61fa7 100644 --- a/packages/astro/src/vite-plugin-astro/index.ts +++ b/packages/astro/src/vite-plugin-astro/index.ts @@ -40,7 +40,7 @@ export default function astro({ config, devServer }: AstroPluginOptions): vite.P // use `sourcemap: "both"` so that sourcemap is included in the code // result passed to esbuild, but also available in the catch handler. tsResult = await transform(source, { - as: isPage ? "document" : "fragment", + as: isPage ? 'document' : 'fragment', site: config.buildOptions.site, sourcefile: id, sourcemap: 'both', @@ -50,9 +50,9 @@ export default function astro({ config, devServer }: AstroPluginOptions): vite.P const result = await transformWithVite(value, attrs, id, viteTransform); if (!result) { // TODO: compiler supports `null`, but types don't yet - return (result as any); + return result as any; } - return { code: result.code, map: result.map?.toString() } + return { code: result.code, map: result.map?.toString() }; }, }); // Compile `.ts` to `.js` diff --git a/packages/astro/src/vite-plugin-fetch/index.ts b/packages/astro/src/vite-plugin-fetch/index.ts index 58936e79d..7530ae0d7 100644 --- a/packages/astro/src/vite-plugin-fetch/index.ts +++ b/packages/astro/src/vite-plugin-fetch/index.ts @@ -18,6 +18,7 @@ function isSSR(options: undefined | boolean | { ssr: boolean }): boolean { // This matches any JS-like file (that we know of) // See https://regex101.com/r/Cgofir/1 const SUPPORTED_FILES = /\.(astro|svelte|vue|[cm]?js|jsx|[cm]?ts|tsx)$/; +const IGNORED_FILES = new Set(['astro/dist/runtime/server/index.js']); const DEFINE_FETCH = `import fetch from 'node-fetch';\n`; export default function pluginFetch(): Plugin { @@ -25,6 +26,11 @@ export default function pluginFetch(): Plugin { name: '@astrojs/vite-plugin-fetch', enforce: 'post', async transform(code, id, opts) { + // Ignore internal files, etc. + for (const ignored of IGNORED_FILES) { + if (id.endsWith(ignored)) return null; + } + const ssr = isSSR(opts); // If this isn't an SSR pass, `fetch` will already be available! if (!ssr) { diff --git a/packages/astro/src/vite-plugin-jsx/index.ts b/packages/astro/src/vite-plugin-jsx/index.ts index 059e1edb6..dfba64f7e 100644 --- a/packages/astro/src/vite-plugin-jsx/index.ts +++ b/packages/astro/src/vite-plugin-jsx/index.ts @@ -41,7 +41,6 @@ function isSSR(options: undefined | boolean | { ssr: boolean }): boolean { return false; } - /** Use Astro config to allow for alternate or multiple JSX renderers (by default Vite will assume React) */ export default function jsx({ config, logging }: AstroPluginJSXOptions): Plugin { return { @@ -69,13 +68,13 @@ export default function jsx({ config, logging }: AstroPluginJSXOptions): Plugin } } - // Attempt: Single JSX renderer + // Attempt: Single JSX renderer // If we only have one renderer, we can skip a bunch of work! if (JSX_RENDERERS.size === 1) { // downlevel any non-standard syntax, but preserve JSX const { code: jsxCode } = await esbuild.transform(code, { loader: getLoader(path.extname(id)), - jsx: 'preserve' + jsx: 'preserve', }); return transformJSX({ code: jsxCode, id, renderer: [...JSX_RENDERERS.values()][0], ssr }); } @@ -129,7 +128,7 @@ export default function jsx({ config, logging }: AstroPluginJSXOptions): Plugin // downlevel any non-standard syntax, but preserve JSX const { code: jsxCode } = await esbuild.transform(code, { loader: getLoader(path.extname(id)), - jsx: 'preserve' + jsx: 'preserve', }); return transformJSX({ code: jsxCode, id, renderer: JSX_RENDERERS.get(importSource) as Renderer, ssr }); } diff --git a/packages/astro/test/custom-elements.test.js b/packages/astro/test/custom-elements.test.js index 255592070..4f442883b 100644 --- a/packages/astro/test/custom-elements.test.js +++ b/packages/astro/test/custom-elements.test.js @@ -1,7 +1,6 @@ import { expect } from 'chai'; import cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; -import path from 'path'; describe('Custom Elements', () => { let fixture; diff --git a/packages/astro/test/fixtures/custom-elements/my-component-lib/hydration-polyfill.js b/packages/astro/test/fixtures/custom-elements/my-component-lib/hydration-polyfill.js index f3ae60285..665844481 100644 --- a/packages/astro/test/fixtures/custom-elements/my-component-lib/hydration-polyfill.js +++ b/packages/astro/test/fixtures/custom-elements/my-component-lib/hydration-polyfill.js @@ -1,2 +1 @@ - -globalThis.somePolyfillHere = ''; \ No newline at end of file +globalThis.somePolyfillHere = ''; diff --git a/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js b/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js index e0c1442f2..7054d0219 100644 --- a/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js +++ b/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js @@ -6,5 +6,12 @@ export default { ], hydrationPolyfills: [ './hydration-polyfill.js' - ] + ], + viteConfig() { + return { + optimizeDeps: { + include: ['@astrojs/test-custom-element-renderer/polyfill.js', '@astrojs/test-custom-element-renderer/hydration-polyfill.js'] + } + } + } }; diff --git a/packages/astro/test/fixtures/custom-elements/my-component-lib/package.json b/packages/astro/test/fixtures/custom-elements/my-component-lib/package.json index bfa0bf3dc..61f761210 100644 --- a/packages/astro/test/fixtures/custom-elements/my-component-lib/package.json +++ b/packages/astro/test/fixtures/custom-elements/my-component-lib/package.json @@ -10,4 +10,4 @@ "./polyfill.js": "./polyfill.js", "./hydration-polyfill.js": "./hydration-polyfill.js" } -} \ No newline at end of file +} diff --git a/packages/astro/test/fixtures/custom-elements/my-component-lib/polyfill.js b/packages/astro/test/fixtures/custom-elements/my-component-lib/polyfill.js index 27fdef8d3..92788352b 100644 --- a/packages/astro/test/fixtures/custom-elements/my-component-lib/polyfill.js +++ b/packages/astro/test/fixtures/custom-elements/my-component-lib/polyfill.js @@ -1,2 +1,2 @@ console.log('this is a polyfill'); -export default {}; \ No newline at end of file +export default {}; diff --git a/packages/astro/test/fixtures/custom-elements/my-component-lib/server.js b/packages/astro/test/fixtures/custom-elements/my-component-lib/server.js index cf62023c7..9970c2fbf 100644 --- a/packages/astro/test/fixtures/custom-elements/my-component-lib/server.js +++ b/packages/astro/test/fixtures/custom-elements/my-component-lib/server.js @@ -29,4 +29,4 @@ function renderToStaticMarkup(component) { export default { check, renderToStaticMarkup -}; \ No newline at end of file +}; diff --git a/packages/astro/test/fixtures/custom-elements/my-component-lib/shim.js b/packages/astro/test/fixtures/custom-elements/my-component-lib/shim.js index cc2517147..eb969e528 100644 --- a/packages/astro/test/fixtures/custom-elements/my-component-lib/shim.js +++ b/packages/astro/test/fixtures/custom-elements/my-component-lib/shim.js @@ -25,4 +25,4 @@ globalThis.HTMLElement = class { set innerHTML(val) { this._innerHTML = val; } -}; \ No newline at end of file +}; diff --git a/packages/astro/test/fixtures/custom-elements/package.json b/packages/astro/test/fixtures/custom-elements/package.json index f7bfe012a..c04a465bf 100644 --- a/packages/astro/test/fixtures/custom-elements/package.json +++ b/packages/astro/test/fixtures/custom-elements/package.json @@ -5,4 +5,4 @@ "dependencies": { "@astrojs/test-custom-element-renderer": "0.0.1" } -} \ No newline at end of file +} diff --git a/packages/astro/test/fixtures/custom-elements/src/components/my-element.js b/packages/astro/test/fixtures/custom-elements/src/components/my-element.js index 652478086..ffc5e6ffb 100644 --- a/packages/astro/test/fixtures/custom-elements/src/components/my-element.js +++ b/packages/astro/test/fixtures/custom-elements/src/components/my-element.js @@ -10,4 +10,4 @@ class MyElement extends HTMLElement { customElements.define(tagName, MyElement); -export default MyElement; \ No newline at end of file +export default MyElement; diff --git a/packages/astro/test/fixtures/custom-elements/src/pages/load.astro b/packages/astro/test/fixtures/custom-elements/src/pages/load.astro index 0f55e246e..c67750bc5 100644 --- a/packages/astro/test/fixtures/custom-elements/src/pages/load.astro +++ b/packages/astro/test/fixtures/custom-elements/src/pages/load.astro @@ -12,4 +12,4 @@ const title = 'My App'; - \ No newline at end of file + diff --git a/packages/astro/test/fixtures/lit-element/src/components/my-element.js b/packages/astro/test/fixtures/lit-element/src/components/my-element.js index e390bb1ec..7b7eed71c 100644 --- a/packages/astro/test/fixtures/lit-element/src/components/my-element.js +++ b/packages/astro/test/fixtures/lit-element/src/components/my-element.js @@ -10,4 +10,4 @@ export class MyElement extends LitElement { } } -customElements.define('my-element', MyElement); \ No newline at end of file +customElements.define('my-element', MyElement); diff --git a/packages/astro/test/fixtures/lit-element/src/pages/ctr.astro b/packages/astro/test/fixtures/lit-element/src/skipped-pages/ctr.astro similarity index 95% rename from packages/astro/test/fixtures/lit-element/src/pages/ctr.astro rename to packages/astro/test/fixtures/lit-element/src/skipped-pages/ctr.astro index e03e5d73a..d41e9645f 100644 --- a/packages/astro/test/fixtures/lit-element/src/pages/ctr.astro +++ b/packages/astro/test/fixtures/lit-element/src/skipped-pages/ctr.astro @@ -9,4 +9,4 @@ import { MyElement } from '../components/my-element.js'; - \ No newline at end of file + diff --git a/packages/astro/test/fixtures/preact-component/src/components/PragmaCommentTypeScript.tsx b/packages/astro/test/fixtures/preact-component/src/components/PragmaCommentTypeScript.tsx index 7bfe65ada..050acd4a6 100644 --- a/packages/astro/test/fixtures/preact-component/src/components/PragmaCommentTypeScript.tsx +++ b/packages/astro/test/fixtures/preact-component/src/components/PragmaCommentTypeScript.tsx @@ -1,5 +1,5 @@ /** @jsxImportSource preact */ export default function({}: object) { - return
Hello world
; + return
Hello world
; } diff --git a/packages/astro/test/fixtures/react-component/src/pages/index.astro b/packages/astro/test/fixtures/react-component/src/pages/index.astro index 5ebbd6e60..597a4a546 100644 --- a/packages/astro/test/fixtures/react-component/src/pages/index.astro +++ b/packages/astro/test/fixtures/react-component/src/pages/index.astro @@ -1,6 +1,6 @@ --- import Hello from '../components/Hello.jsx'; -import Later from '../components/Goodbye.vue'; // use different specifier +import Later from '../components/Goodbye.vue'; import ArrowFunction from '../components/ArrowFunction.jsx'; import PropsSpread from '../components/PropsSpread.jsx'; import {Research2} from '../components/Research.jsx'; diff --git a/packages/astro/test/fixtures/react-component/src/pages/forgot-import.astro b/packages/astro/test/fixtures/react-component/src/skipped-pages/forgot-import.astro similarity index 100% rename from packages/astro/test/fixtures/react-component/src/pages/forgot-import.astro rename to packages/astro/test/fixtures/react-component/src/skipped-pages/forgot-import.astro diff --git a/packages/astro/test/fixtures/react-component/src/pages/window.astro b/packages/astro/test/fixtures/react-component/src/skipped-pages/window.astro similarity index 100% rename from packages/astro/test/fixtures/react-component/src/pages/window.astro rename to packages/astro/test/fixtures/react-component/src/skipped-pages/window.astro diff --git a/packages/astro/test/lit-element.test.js b/packages/astro/test/lit-element.test.js index 178f94f95..f87f1f924 100644 --- a/packages/astro/test/lit-element.test.js +++ b/packages/astro/test/lit-element.test.js @@ -1,12 +1,16 @@ -/** - * UNCOMMENT: fix Vite SSR import of lit-element (TODO: update render API) import { expect } from 'chai'; import cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; let fixture; +const NODE_VERSION = parseFloat(process.versions.node); + before(async () => { + // @lit-labs/ssr/ requires Node 13.9 or higher + if (NODE_VERSION < 13.9) { + return; + } fixture = await loadFixture({ projectRoot: './fixtures/lit-element/', renderers: ['@astrojs/renderer-lit'], @@ -16,8 +20,8 @@ before(async () => { describe('LitElement test', () => { it('Renders a custom element by tag name', async () => { - // lit SSR is not currently supported on Node.js < 13 - if (process.versions.node <= '13') { + // @lit-labs/ssr/ requires Node 13.9 or higher + if (NODE_VERSION < 13.9) { return; } const html = await fixture.readFile('/index.html'); @@ -51,6 +55,3 @@ describe('LitElement test', () => { } }); }); -*/ - -it.skip('is skipped', () => {}); diff --git a/packages/astro/test/preact-component.test.js b/packages/astro/test/preact-component.test.js index 700956909..ea12054e6 100644 --- a/packages/astro/test/preact-component.test.js +++ b/packages/astro/test/preact-component.test.js @@ -1,5 +1,3 @@ -/** - * UNCOMMENT: ???? (this is a really weird transform bug) import { expect } from 'chai'; import cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -7,7 +5,10 @@ import { loadFixture } from './test-utils.js'; let fixture; before(async () => { - fixture = await loadFixture({ projectRoot: './fixtures/preact-component/' }); + fixture = await loadFixture({ + projectRoot: './fixtures/preact-component/', + renderers: ['@astrojs/renderer-preact'], + }); await fixture.build(); }); @@ -20,7 +21,8 @@ describe('Preact component', () => { expect($('#class-component')).to.have.lengthOf(1); }); - it('Can load function component', async () => { + // TODO: fix compiler bug (not interpreting as a component) + it.skip('Can load function component', async () => { const html = await fixture.readFile('/fn/index.html'); const $ = cheerio.load(html); @@ -57,10 +59,12 @@ describe('Preact component', () => { const $ = cheerio.load(html); // test 1: rendered the PragmaComment component - expect($('.pragma-comment')).to.have.lengthOf(2); + expect($('.pragma-comment')).to.have.lengthOf(1); + expect($('.pragma-comment-tsx')).to.have.lengthOf(1); }); - it('Uses the new JSX transform', async () => { + // In moving over to Vite, the jsx-runtime import is now obscured. TODO: update the method of finding this. + it.skip('Uses the new JSX transform', async () => { const html = await fixture.readFile('/pragma-comment/index.html'); // Grab the imports @@ -79,6 +83,3 @@ describe('Preact component', () => { expect(jsxRuntime).to.be.ok; }); }); -*/ - -it.skip('is skipped', () => {}); diff --git a/packages/astro/test/react-component.test.js b/packages/astro/test/react-component.test.js index 5017d1bd6..f7908e0d4 100644 --- a/packages/astro/test/react-component.test.js +++ b/packages/astro/test/react-component.test.js @@ -1,5 +1,3 @@ -/** - * UNCOMMENT: improve Vite automatic React support import { expect } from 'chai'; import cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -7,7 +5,10 @@ import { loadFixture } from './test-utils.js'; let fixture; before(async () => { - fixture = await loadFixture({ projectRoot: './fixtures/react-component/' }); + fixture = await loadFixture({ + projectRoot: './fixtures/react-component/', + renderers: ['@astrojs/renderer-react', '@astrojs/renderer-vue'], + }); await fixture.build(); }); @@ -22,8 +23,9 @@ describe('React Components', () => { // test 2: no reactroot expect($('#react-h2').attr('data-reactroot')).to.equal(undefined); + // TODO: fix compiler bug with arrow components // test 3: Can use function components - expect($('#arrow-fn-component')).to.have.lengthOf(1); + // expect($('#arrow-fn-component')).to.have.lengthOf(1); // test 4: Can use spread for components expect($('#component-spread-props')).to.have.lengthOf(1); @@ -32,13 +34,14 @@ describe('React Components', () => { expect($('#component-spread-props').text(), 'Hello world!'); // test 6: Can use TS components - expect($('.ts-component')).toHaveLength(1); + expect($('.ts-component')).to.have.lengthOf(1); // test 7: Can use Pure components - expect($('#pure')).toHaveLength(1); + expect($('#pure')).to.have.lengthOf(1); }); - it('Includes reactroot on hydrating components', async () => { + // TODO: fix ocmpiler bug + it.skip('Includes reactroot on hydrating components', async () => { const html = await fixture.readFile('/index.html'); const $ = cheerio.load(html); @@ -51,10 +54,11 @@ describe('React Components', () => { expect(div.html()).to.equal('foo bar 1'); }); - it('Throws helpful error message on window SSR', async () => { + // TODO: Vite does not throw a helpful error message on window SSR + it.skip('Throws helpful error message on window SSR', async () => { const html = await fixture.readFile('/window/index.html'); expect(html).to.include( - `[/window] + `[/window] The window object is not available during server-side rendering (SSR). Try using \`import.meta.env.SSR\` to write SSR-friendly code. https://docs.astro.build/reference/api-reference/#importmeta` @@ -67,15 +71,16 @@ describe('React Components', () => { expect($('#vue-h2').text()).to.equal('Hasta la vista, baby'); }); + // TODO: fix it('Can use a pragma comment', async () => { - const html = await fixture.fetch('/pragma-comment/index.html'); + const html = await fixture.readFile('/pragma-comment/index.html'); const $ = cheerio.load(html); // test 1: rendered the PragmaComment component expect($('.pragma-comment')).to.have.lengthOf(2); }); - // note(drew): unsure how to update this test? + // In moving over to Vite, the jsx-runtime import is now obscured. TODO: update the method of finding this. it.skip('uses the new JSX transform', async () => { const html = await fixture.fetch('/index.html'); @@ -95,6 +100,3 @@ describe('React Components', () => { expect(jsxRuntime).to.be.ok; }); }); -*/ - -it.skip('is skipped', () => {}); diff --git a/packages/astro/test/vue-component.test.js b/packages/astro/test/vue-component.test.js index d76b08bd0..8899782af 100644 --- a/packages/astro/test/vue-component.test.js +++ b/packages/astro/test/vue-component.test.js @@ -6,7 +6,10 @@ describe('Vue component', () => { let fixture; before(async () => { - fixture = await loadFixture({ projectRoot: './fixtures/vue-component/' }); + fixture = await loadFixture({ + projectRoot: './fixtures/vue-component/', + renderers: ['@astrojs/renderer-vue'], + }); await fixture.build(); }); diff --git a/packages/renderers/renderer-lit/index.js b/packages/renderers/renderer-lit/index.js index e6092305c..28ccac1a9 100644 --- a/packages/renderers/renderer-lit/index.js +++ b/packages/renderers/renderer-lit/index.js @@ -1,8 +1,34 @@ +// NOTE: @lit-labs/ssr uses syntax incompatible with anything < Node v13.9.0. +// Throw an error if using that Node version. + +const NODE_VERSION = parseFloat(process.versions.node); +if (NODE_VERSION < 13.9) { + throw new Error(`Package @lit-labs/ssr requires Node version v13.9 or higher. Please update Node to use @astrojs/renderer-lit`); +} + export default { name: '@astrojs/renderer-lit', server: './server.js', - external: ['lit', '@lit-labs/ssr/lib/install-global-dom-shim.js', '@lit-labs/ssr/lib/render-lit-html.js', '@lit-labs/ssr/lib/lit-element-renderer.js'], polyfills: ['./client-shim.js'], hydrationPolyfills: ['./hydration-support.js'], - knownEntrypoints: ['@astrojs/renderer-lit/client-shim.js', '@astrojs/renderer-lit/hydration-support.js', '@webcomponents/template-shadowroot/template-shadowroot.js'], + viteConfig() { + return { + optimizeDeps: { + include: [ + '@astrojs/renderer-lit/client-shim.js', + '@astrojs/renderer-lit/hydration-support.js', + '@webcomponents/template-shadowroot/template-shadowroot.js', + 'lit/experimental-hydrate-support.js', + ], + }, + ssr: { + external: [ + 'lit-element/lit-element.js', + '@lit-labs/ssr/lib/install-global-dom-shim.js', + '@lit-labs/ssr/lib/render-lit-html.js', + '@lit-labs/ssr/lib/lit-element-renderer.js', + ], + }, + }; + }, }; diff --git a/packages/renderers/renderer-lit/server.js b/packages/renderers/renderer-lit/server.js index 6ccb2da9b..c827f1ad1 100644 --- a/packages/renderers/renderer-lit/server.js +++ b/packages/renderers/renderer-lit/server.js @@ -41,7 +41,7 @@ function* render(tagName, attrs, children) { yield* shadowContents; yield ''; } - yield children; + yield children || ''; // don’t print “undefined” as string yield ``; } diff --git a/packages/renderers/renderer-preact/index.js b/packages/renderers/renderer-preact/index.js index 8158660be..afd34210c 100644 --- a/packages/renderers/renderer-preact/index.js +++ b/packages/renderers/renderer-preact/index.js @@ -2,7 +2,6 @@ export default { name: '@astrojs/renderer-preact', client: './client.js', server: './server.js', - knownEntrypoints: ['preact', 'preact/jsx-runtime', 'preact-render-to-string'], jsxImportSource: 'preact', jsxTransformOptions: async () => { const { @@ -12,4 +11,14 @@ export default { plugins: [jsx({}, { runtime: 'automatic', importSource: 'preact' })], }; }, + viteConfig() { + return { + optimizeDeps: { + include: ['@astrojs/renderer-preact/client.js', 'preact', 'preact/jsx-runtime', 'preact-render-to-string'], + }, + ssr: { + external: ['preact-render-to-string'], + }, + }; + }, }; diff --git a/packages/renderers/renderer-preact/package.json b/packages/renderers/renderer-preact/package.json index f8aa55aa6..898b77359 100644 --- a/packages/renderers/renderer-preact/package.json +++ b/packages/renderers/renderer-preact/package.json @@ -10,8 +10,8 @@ "./package.json": "./package.json" }, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.5", - "preact": "^10.5.14", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "preact": "^10.5.15", "preact-render-to-string": "^5.1.19" }, "engines": { diff --git a/packages/renderers/renderer-react/index.js b/packages/renderers/renderer-react/index.js index cc624f2be..2fa830f79 100644 --- a/packages/renderers/renderer-react/index.js +++ b/packages/renderers/renderer-react/index.js @@ -2,7 +2,6 @@ export default { name: '@astrojs/renderer-react', client: './client.js', server: './server.js', - knownEntrypoints: ['react', 'react/jsx-runtime', 'react-dom', 'react-dom/server.js'], jsxImportSource: 'react', jsxTransformOptions: async () => { const { @@ -12,4 +11,17 @@ export default { plugins: [jsx({}, { runtime: 'automatic', importSource: 'react' })], }; }, + viteConfig() { + return { + optimizeDeps: { + include: ['@astrojs/renderer-react/client.js', 'react', 'react/jsx-runtime', 'react/jsx-dev-runtime', 'react-dom'], + }, + resolve: { + dedupe: ['react', 'react-dom'], + }, + ssr: { + external: ['react-dom/server.js'], + }, + }; + }, }; diff --git a/packages/renderers/renderer-react/package.json b/packages/renderers/renderer-react/package.json index 377bc9aa8..de7a41892 100644 --- a/packages/renderers/renderer-react/package.json +++ b/packages/renderers/renderer-react/package.json @@ -10,7 +10,7 @@ "./package.json": "./package.json" }, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", "react": "^17.0.2", "react-dom": "^17.0.2" }, diff --git a/packages/renderers/renderer-react/server.js b/packages/renderers/renderer-react/server.js index f97569616..aed324368 100644 --- a/packages/renderers/renderer-react/server.js +++ b/packages/renderers/renderer-react/server.js @@ -1,5 +1,5 @@ -import { Component as BaseComponent, createElement as h, PureComponent } from 'react'; -import { renderToStaticMarkup as reactRenderToStaticMarkup, renderToString } from 'react-dom/server.js'; +import React from 'react'; +import ReactDOM from 'react-dom/server.js'; import StaticHtml from './static-html.js'; const reactTypeof = Symbol.for('react.element'); @@ -8,7 +8,7 @@ function check(Component, props, children) { if (typeof Component !== 'function') return false; if (Component.prototype != null && typeof Component.prototype.render === 'function') { - return BaseComponent.isPrototypeOf(Component) || PureComponent.isPrototypeOf(Component); + return React.Component.isPrototypeOf(Component) || React.PureComponent.isPrototypeOf(Component); } let error = null; @@ -23,7 +23,7 @@ function check(Component, props, children) { error = err; } - return h('div'); + return React.createElement('div'); } renderToStaticMarkup(Tester, props, children, {}); @@ -35,12 +35,16 @@ function check(Component, props, children) { } function renderToStaticMarkup(Component, props, children, metadata) { - const vnode = h(Component, { ...props, children: h(StaticHtml, { value: children }), innerHTML: children }); + const vnode = React.createElement(Component, { + ...props, + children: React.createElement(StaticHtml, { value: children }), + innerHTML: children, + }); let html; if (metadata && metadata.hydrate) { - html = renderToString(vnode); + html = ReactDOM.renderToString(vnode); } else { - html = reactRenderToStaticMarkup(vnode); + html = ReactDOM.renderToStaticMarkup(vnode); } return { html }; } diff --git a/packages/renderers/renderer-solid/index.js b/packages/renderers/renderer-solid/index.js index caaeb995b..c6471a75d 100644 --- a/packages/renderers/renderer-solid/index.js +++ b/packages/renderers/renderer-solid/index.js @@ -2,8 +2,6 @@ export default { name: '@astrojs/renderer-solid', client: './client.js', server: './server.js', - external: ['solid-js/web/dist/server.js', 'solid-js/store/dist/server.js', 'solid-js/dist/server.js', 'babel-preset-solid'], - knownEntrypoints: ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h'], jsxImportSource: 'solid-js', jsxTransformOptions: async ({ isSSR }) => { const [{ default: solid }] = await Promise.all([import('babel-preset-solid')]); @@ -18,9 +16,9 @@ export default { { cwd: process.cwd(), alias: { - 'solid-js': 'solid-js/dist/server.js', 'solid-js/store': 'solid-js/store/dist/server.js', 'solid-js/web': 'solid-js/web/dist/server.js', + 'solid-js': 'solid-js/dist/server.js', }, }, ]); @@ -28,4 +26,31 @@ export default { return options; }, + viteConfig(options) { + // https://github.com/solidjs/vite-plugin-solid + + // We inject the dev mode only if the user explicitely wants it or if we are in dev (serve) mode + const replaceDev = options.mode === 'development' || options.command === 'serve'; + + const nestedDeps = ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h']; + + return { + /** + * We only need esbuild on .ts or .js files. + * .tsx & .jsx files are handled by us + */ + esbuild: { include: /\.ts$/ }, + resolve: { + conditions: ['solid', ...(replaceDev ? ['development'] : [])], + dedupe: nestedDeps, + alias: [{ find: /^solid-refresh$/, replacement: '/@solid-refresh' }], + }, + optimizeDeps: { + include: nestedDeps, + }, + ssr: { + external: ['solid-js/web/dist/server.js', 'solid-js/store/dist/server.js', 'solid-js/dist/server.js', 'babel-preset-solid'], + }, + }; + }, }; diff --git a/packages/renderers/renderer-solid/package.json b/packages/renderers/renderer-solid/package.json index a8c7a0d33..c24b24bc6 100644 --- a/packages/renderers/renderer-solid/package.json +++ b/packages/renderers/renderer-solid/package.json @@ -11,8 +11,8 @@ }, "dependencies": { "babel-plugin-module-resolver": "^4.1.0", - "babel-preset-solid": "^1.1.1", - "solid-js": "^1.1.1" + "babel-preset-solid": "^1.1.7", + "solid-js": "^1.1.7" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" diff --git a/packages/renderers/renderer-solid/server.js b/packages/renderers/renderer-solid/server.js index 65a4e8d22..5730ff89e 100644 --- a/packages/renderers/renderer-solid/server.js +++ b/packages/renderers/renderer-solid/server.js @@ -1,4 +1,3 @@ -import { createComponent } from 'solid-js'; import { renderToString, ssr, createComponent } from 'solid-js/web/dist/server.js'; function check(Component, props, children) { diff --git a/packages/renderers/renderer-svelte/index.js b/packages/renderers/renderer-svelte/index.js index deeb9119e..ce7290d9b 100644 --- a/packages/renderers/renderer-svelte/index.js +++ b/packages/renderers/renderer-svelte/index.js @@ -4,10 +4,17 @@ export default { name: '@astrojs/renderer-svelte', client: './client.js', server: './server.js', - vitePlugins: [ - svelte({ - emitCss: true, - compilerOptions: { hydratable: true }, - }), - ], + viteConfig() { + return { + optimizeDeps: { + include: ['@astrojs/renderer-svelte/client.js', 'svelte', 'svelte/internal'], + }, + plugins: [ + svelte({ + emitCss: true, + compilerOptions: { hydratable: true }, + }), + ], + }; + }, }; diff --git a/packages/renderers/renderer-svelte/package.json b/packages/renderers/renderer-svelte/package.json index 50d849ef1..c573cb911 100644 --- a/packages/renderers/renderer-svelte/package.json +++ b/packages/renderers/renderer-svelte/package.json @@ -10,8 +10,8 @@ "./package.json": "./package.json" }, "dependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.0-next.19", - "svelte": "^3.42.3" + "@sveltejs/vite-plugin-svelte": "^1.0.0-next.29", + "svelte": "^3.44.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" diff --git a/packages/renderers/renderer-vue/index.js b/packages/renderers/renderer-vue/index.js index 733154103..5e39c5a00 100644 --- a/packages/renderers/renderer-vue/index.js +++ b/packages/renderers/renderer-vue/index.js @@ -4,6 +4,15 @@ export default { name: '@astrojs/renderer-vue', client: './client.js', server: './server.js', - knownEntrypoints: ['vue', '@vue/server-renderer'], - vitePlugins: [vue()], + viteConfig() { + return { + optimizeDeps: { + include: ['@astrojs/renderer-vue/client.js', 'vue'], + }, + plugins: [vue()], + ssr: { + external: ['@vue/server-renderer'], + }, + }; + }, }; diff --git a/packages/renderers/renderer-vue/package.json b/packages/renderers/renderer-vue/package.json index 7cdab4428..68c99b39d 100644 --- a/packages/renderers/renderer-vue/package.json +++ b/packages/renderers/renderer-vue/package.json @@ -10,10 +10,10 @@ "./package.json": "./package.json" }, "dependencies": { - "@vitejs/plugin-vue": "^1.6.0", - "@vue/compiler-sfc": "^3.2.6", - "@vue/server-renderer": "^3.2.6", - "vue": "^3.2.6" + "@vitejs/plugin-vue": "^1.9.3", + "@vue/compiler-sfc": "^3.2.20", + "@vue/server-renderer": "^3.2.20", + "vue": "^3.2.20" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" diff --git a/packages/renderers/renderer-vue/server.js b/packages/renderers/renderer-vue/server.js index 3d3159634..fb48e6299 100644 --- a/packages/renderers/renderer-vue/server.js +++ b/packages/renderers/renderer-vue/server.js @@ -3,7 +3,7 @@ import { h, createSSRApp } from 'vue'; import StaticHtml from './static-html.js'; function check(Component) { - return Component['ssrRender']; + return !!Component['ssrRender']; } async function renderToStaticMarkup(Component, props, children) { diff --git a/yarn.lock b/yarn.lock index dc5a8cd3f..a5971aa2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -428,7 +428,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-react-jsx@^7.14.5": +"@babel/plugin-transform-react-jsx@^7.14.9": version "7.14.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz#3314b2163033abac5200a869c4de242cd50a914c" integrity sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw== @@ -470,7 +470,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.11.5", "@babel/types@^7.12.7", "@babel/types@^7.14.9", "@babel/types@^7.15.0", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0": +"@babel/types@^7.0.0", "@babel/types@^7.11.5", "@babel/types@^7.12.7", "@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0": version "7.15.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== @@ -1750,10 +1750,10 @@ dotenv "^8.2.0" dotenv-expand "^5.1.0" -"@sveltejs/vite-plugin-svelte@^1.0.0-next.19": - version "1.0.0-next.24" - resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.24.tgz#55033c27b5f428e804ff64f410a640baacff0333" - integrity sha512-b+n3jcLpk2j/25APQbk5ejCyd0faYTB2bOxR3gY0LX3MFGgdiL8zdf3/aawcPSxLdbL73YVlxNBIATGuvq03uQ== +"@sveltejs/vite-plugin-svelte@^1.0.0-next.29": + version "1.0.0-next.29" + resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.29.tgz#862fadcac164d8e90a45f3248289fbc65382c7df" + integrity sha512-awbeIB34ma/ytoVsG0lxKfFaJ4rjPaAsiepJ5I+dKe9jVjWmGoIMJ9sKD77/xvNdwgO+3v/vkwvIbEG4XRdmtg== dependencies: "@rollup/pluginutils" "^4.1.1" debug "^4.3.2" @@ -2086,109 +2086,100 @@ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== -"@vitejs/plugin-vue@^1.6.0": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.6.2.tgz#40dfe314cff610d4dd027a0b4ea2a93a257f3fc9" - integrity sha512-Pf+dqkT4pWPfziPm51VtDXsPwE74CEGRiK6Vgm5EDBewHw1EgcxG7V2ZI/Yqj5gcDy5nVtjgx0AbsTL+F3gddg== +"@vitejs/plugin-vue@^1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.9.3.tgz#93d61893ce6c723d0209af0483ec8b91a2cd811f" + integrity sha512-yW6H/q+4Mc2PcVjSOelcsMrg/k15DnMUz8jyCFsI04emc3aLwo4AoofUfGnjHUkgirrDxSJLVqQVGhonQ3yykA== -"@vue/compiler-core@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.12.tgz#23998d6986a45e1ab0424130cc0ad00e33da1101" - integrity sha512-IGJ0JmrAaAl5KBBegPAKkoXvsfDFgN/h7K1t/+0MxqpZF1fTDVUOp3tG7q9gWa7fwzGEaIsPhjtT5C3qztdLKg== +"@vue/compiler-core@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.20.tgz#af5a3c5237818835b0d0be837eb5885a8d21c160" + integrity sha512-vcEXlKXoPwBXFP5aUTHN9GTZaDfwCofa9Yu9bbW2C5O/QSa9Esdt7OG4+0RRd3EHEMxUvEdj4RZrd/KpQeiJbA== dependencies: "@babel/parser" "^7.15.0" - "@babel/types" "^7.15.0" - "@vue/shared" "3.2.12" + "@vue/shared" "3.2.20" estree-walker "^2.0.2" source-map "^0.6.1" -"@vue/compiler-dom@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.12.tgz#d6ba00114e73adb8b18940c3ff18797cc2b0514f" - integrity sha512-MulvKilA2USm8ubPfvXvNY55HVTn+zHERsXeNg437TXrmM4FRCis6zjWW47QZ3ZyxEkCdqOmuiFCtXbpnuthyw== +"@vue/compiler-dom@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.20.tgz#8e0ef354449c0faf41519b00bfc2045eae01dcb5" + integrity sha512-QnI77ec/JtV7R0YBbcVayYTDCRcI9OCbxiUQK6izVyqQO0658n0zQuoNwe+bYgtqnvGAIqTR3FShTd5y4oOjdg== dependencies: - "@vue/compiler-core" "3.2.12" - "@vue/shared" "3.2.12" + "@vue/compiler-core" "3.2.20" + "@vue/shared" "3.2.20" -"@vue/compiler-sfc@^3.2.6": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.12.tgz#39555550d96051508753ba934f7260dc5ee5211e" - integrity sha512-EjzeMQ7H2ICj+JRw2buSFXTocdCg8e5yWQTlNM/6h/u68sTwMbIfiOJBFEwBhG/wCG7Nb6Nnz888AfHTU3hdrA== +"@vue/compiler-sfc@3.2.20", "@vue/compiler-sfc@^3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.20.tgz#2d7668e76f066c566dd7c09c15c9acce4e876e0a" + integrity sha512-03aZo+6tQKiFLfunHKSPZvdK4Jsn/ftRCyaro8AQIWkuxJbvSosbKK6HTTn+D2c3nPScG155akJoxKENw7rftQ== dependencies: "@babel/parser" "^7.15.0" - "@babel/types" "^7.15.0" - "@types/estree" "^0.0.48" - "@vue/compiler-core" "3.2.12" - "@vue/compiler-dom" "3.2.12" - "@vue/compiler-ssr" "3.2.12" - "@vue/ref-transform" "3.2.12" - "@vue/shared" "3.2.12" - consolidate "^0.16.0" + "@vue/compiler-core" "3.2.20" + "@vue/compiler-dom" "3.2.20" + "@vue/compiler-ssr" "3.2.20" + "@vue/ref-transform" "3.2.20" + "@vue/shared" "3.2.20" estree-walker "^2.0.2" - hash-sum "^2.0.0" - lru-cache "^5.1.1" magic-string "^0.25.7" - merge-source-map "^1.1.0" postcss "^8.1.10" - postcss-modules "^4.0.0" - postcss-selector-parser "^6.0.4" source-map "^0.6.1" -"@vue/compiler-ssr@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.12.tgz#32e5d4bc31c371c125b43e9d07b8a8f70442b080" - integrity sha512-sY+VbLQ17FPr1CgirnqEgY+jbC7wI5c2Ma6u8le0+b4UKMYF9urI2pybAZc1nKz6O78FWA3OSnQFxTTLppe+9Q== +"@vue/compiler-ssr@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.20.tgz#9cceb6261d9932cb5568202610c1c28f86c5e521" + integrity sha512-rzzVVYivm+EjbfiGQvNeyiYZWzr6Hkej97RZLZvcumacQlnKv9176Xo9rRyeWwFbBlxmtNdrVMslRXtipMXk2w== dependencies: - "@vue/compiler-dom" "3.2.12" - "@vue/shared" "3.2.12" + "@vue/compiler-dom" "3.2.20" + "@vue/shared" "3.2.20" -"@vue/reactivity@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.12.tgz#b482a737cbdc891f9b1ec3100f3c1804b56d080b" - integrity sha512-Lr5CTQjFm5mT/6DGnVNhptmba/Qg1DbD6eNWWmiHLMlpPt4q2ww9A2orEjVw0qNcdTJ04JLPEVAz5jhTZTCfIg== +"@vue/reactivity@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.20.tgz#81fe1c368e7f20bc0ec1dec1045bbee253582de8" + integrity sha512-nSmoLojUTk+H8HNTAkrUduB4+yIUBK2HPihJo2uXVSH4Spry6oqN6lFzE5zpLK+F27Sja+UqR9R1+/kIOsHV5w== dependencies: - "@vue/shared" "3.2.12" + "@vue/shared" "3.2.20" -"@vue/ref-transform@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.12.tgz#6f7fa46dd84447ddcf54adfb1b689b1cf4243de0" - integrity sha512-lS7TDda61iSf3ljokXVfN0VbOsQdmpST6MZLjxzBydFCECCJaEAr6o+K8VZ7NhUCSrl+gKXHpdXxmcvwdk66aQ== +"@vue/ref-transform@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.20.tgz#2a59ec90caf8e5c7336776a0900bff0a8b81c090" + integrity sha512-Y42d3PGlYZ1lXcF3dbd3+qU/C/a3wYEZ949fyOI5ptzkjDWlkfU6vn74fmOjsLjEcjs10BXK2qO99FqQIK2r1Q== dependencies: "@babel/parser" "^7.15.0" - "@vue/compiler-core" "3.2.12" - "@vue/shared" "3.2.12" + "@vue/compiler-core" "3.2.20" + "@vue/shared" "3.2.20" estree-walker "^2.0.2" magic-string "^0.25.7" -"@vue/runtime-core@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.12.tgz#422662fd5b85f787222d2aea840264ba97e84a13" - integrity sha512-LO+ztgcmsomavYUaSq7BTteh8pmnUmvUnXUFVYdlcg3VCdYRS0ImlclpYsNHqjAk2gU+H09dr2PP0kL961xUfQ== +"@vue/runtime-core@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.20.tgz#8f63e956a3f88fb772541443c45a7701211012cb" + integrity sha512-d1xfUGhZPfiZzAN7SatStD4vRtT8deJSXib2+Cz3x0brjMWKxe32asQc154FF1E2fFgMCHtnfd4A90bQEzV4GQ== dependencies: - "@vue/reactivity" "3.2.12" - "@vue/shared" "3.2.12" + "@vue/reactivity" "3.2.20" + "@vue/shared" "3.2.20" -"@vue/runtime-dom@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.12.tgz#d9fe865dca36f9ca33ba327afdeb89ae2aa03f4c" - integrity sha512-+NSDqivgihvoPYbKFDmzFu1tW7SOzwc7r0b7T8vsJtooVPGxwtfAFZ6wyLtteOXXrCpyTR3kpyTCIp31uY7aJg== +"@vue/runtime-dom@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.20.tgz#8aa56ae6c30f9cd4a71ca0e9ec3c4bdc67148d15" + integrity sha512-4TCvZMLhESWCFHFYgqN4QmMA/onnINAlUovhopjlS8ST27G1A8Z0tyxPzLoXLa+b5JrOpbMPheEMPvdKExTJig== dependencies: - "@vue/runtime-core" "3.2.12" - "@vue/shared" "3.2.12" + "@vue/runtime-core" "3.2.20" + "@vue/shared" "3.2.20" csstype "^2.6.8" -"@vue/server-renderer@^3.2.6": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.12.tgz#633160c02a1176687ee4a56d3d1d0dae0b613bb1" - integrity sha512-UaCFshV/NfE0Z73+DuDMaHVBCipvitRo0myA3yO/nm4tyT7L6yz66qIwthR4m4HnBQh/vnEK/3c1v6sS3Q2auA== +"@vue/server-renderer@3.2.20", "@vue/server-renderer@^3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.20.tgz#705e07ae9425132b2b6227d308a51a13f4d4ec81" + integrity sha512-viIbZGep9XabnrRcaxWIi00cOh1x21QYm2upIL5W0zqzTJ54VdTzpI+zi1osNp+VfRQDTHpV2U7H3Kn4ljYJvg== dependencies: - "@vue/compiler-ssr" "3.2.12" - "@vue/shared" "3.2.12" + "@vue/compiler-ssr" "3.2.20" + "@vue/shared" "3.2.20" -"@vue/shared@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.12.tgz#304064a4b56fc6c7b9169d80e9ee62ecb4bf0a1c" - integrity sha512-5CkaifUCJwcTuru7FDwKFacPJuEoGUTw0LKSa5bw40B23s0TS+MGlYR1285nbV/ju3QUGlA6d6PD+GJkWy7uFg== +"@vue/shared@3.2.20": + version "3.2.20" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.20.tgz#53746961f731a8ea666e3316271e944238dc31db" + integrity sha512-FbpX+hD5BvXCQerEYO7jtAGHlhAkhTQ4KIV73kmLWNlawWhTiVuQxizgVb0BOkX5oG9cIRZ42EG++d/k/Efp0w== "@web/parse5-utils@^1.3.0": version "1.3.0" @@ -2592,14 +2583,15 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" -babel-plugin-jsx-dom-expressions@^0.29.16: - version "0.29.16" - resolved "https://registry.yarnpkg.com/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.29.16.tgz#12715a418c593a409b1d21b19d1cc9a1bb490081" - integrity sha512-09bLfsWh+J0U0z8QNwmlxvow0yGAACKcuxN6VvAESmVJNn0V4AS3mQA4II795rhCKK0yW7KfYDkUv9fQxUd3OQ== +babel-plugin-jsx-dom-expressions@^0.29.19: + version "0.29.19" + resolved "https://registry.yarnpkg.com/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.29.19.tgz#95a46f2aac0d4c297006b854519edcb7fcc6f813" + integrity sha512-qg1N4S6E3S7I6rgqQE1xWH6p3eZpeDxrr+Al1Ptov0NjM69fKQQfeeAtyq1Q9DjdUOIhe9MGoCVA1X+TzXZzMA== dependencies: "@babel/helper-module-imports" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" "@babel/types" "^7.11.5" + html-entities "2.3.2" babel-plugin-module-resolver@^4.1.0: version "4.1.0" @@ -2612,12 +2604,12 @@ babel-plugin-module-resolver@^4.1.0: reselect "^4.0.0" resolve "^1.13.1" -babel-preset-solid@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/babel-preset-solid/-/babel-preset-solid-1.1.3.tgz#0d4a4d6855c93ab2775bf929f86f2ed1e97d79ae" - integrity sha512-I27j40FJQ6T1Y4Is3E2XXXgW6uyl6EhOavon75eRuN8J0j5koSi7VhoslSjZffYCUixZLTIuM44/Bg2BJsT9hg== +babel-preset-solid@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/babel-preset-solid/-/babel-preset-solid-1.1.7.tgz#61a699ebcea34a19adfdd9f637f03861f0c3f90e" + integrity sha512-OzteGVVg/3m3DC7Mo589m8KyyBZ6qO7JFhLHRusC0G/Xi6VukfKJZOpUkXGI4P7RDyLIANG3jqGVvzsjoLnihw== dependencies: - babel-plugin-jsx-dom-expressions "^0.29.16" + babel-plugin-jsx-dom-expressions "^0.29.19" bail@^1.0.0: version "1.0.5" @@ -2682,17 +2674,12 @@ bhttp@^1.2.1: through2-spy "^1.2.0" tough-cookie "^2.3.1" -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@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bluebird@3.7.2, bluebird@^3.7.2: +bluebird@3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3399,13 +3386,6 @@ console-control-strings@^1.0.0, console-control-strings@~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.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16" - integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ== - dependencies: - bluebird "^3.7.2" - content-disposition@~0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -3990,11 +3970,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -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, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -5067,13 +5042,6 @@ gauge@~2.7.3: 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" - gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -5397,11 +5365,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -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== - hast-to-hyperscript@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz#3decd7cb4654bca8883f6fcbd4fb3695628c4296" @@ -5586,7 +5549,7 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -html-entities@^2.3.2: +html-entities@2.3.2, html-entities@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== @@ -5749,16 +5712,6 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.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= - -icss-utils@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - ignore-walk@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" @@ -6357,13 +6310,6 @@ json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= -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" - json5@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -6657,15 +6603,6 @@ load-yaml-file@^0.2.0: pify "^4.0.1" strip-bom "^3.0.0" -loader-utils@^1.1.0: - 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" - locate-character@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-2.0.5.tgz#f2d2614d49820ecb3c92d80d193b8db755f74c0f" @@ -6706,11 +6643,6 @@ lodash._reinterpolate@^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" @@ -7096,13 +7028,6 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" -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" @@ -8691,48 +8616,6 @@ postcss-load-config@^3.1.0: lilconfig "^2.0.3" yaml "^1.10.2" -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-modules@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.2.2.tgz#5e7777c5a8964ea176919d90b2e54ef891321ce5" - integrity sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg== - dependencies: - generic-names "^2.0.1" - icss-replace-symbols "^1.1.0" - lodash.camelcase "^4.3.0" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - string-hash "^1.1.1" - postcss-nested@5.0.6: version "5.0.6" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" @@ -8740,7 +8623,7 @@ postcss-nested@5.0.6: dependencies: postcss-selector-parser "^6.0.6" -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6: +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.6: version "6.0.6" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== @@ -8783,10 +8666,10 @@ preact-render-to-string@^5.1.19: dependencies: pretty-format "^3.8.0" -preact@^10.5.14: - version "10.5.14" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.5.14.tgz#0b14a2eefba3c10a57116b90d1a65f5f00cd2701" - integrity sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ== +preact@^10.5.15: + version "10.5.15" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.5.15.tgz#6df94d8afecf3f9e10a742fd8c362ddab464225f" + integrity sha512-5chK29n6QcJc3m1lVrKQSQ+V7K1Gb8HeQY6FViQ5AxCAEGu3DaHffWNDkC9+miZgsLvbvU9rxbV1qinGHMHzqA== preferred-pm@^3.0.0: version "3.0.3" @@ -9868,10 +9751,10 @@ socks@^2.3.3, socks@^2.6.1: ip "^1.1.5" smart-buffer "^4.1.0" -solid-js@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/solid-js/-/solid-js-1.1.4.tgz#ceba54d6b60f66692f8a072fb7419e94cfbcdd65" - integrity sha512-u3rvemWTQQ1ab9YrrRR+bUi7Daq5ZRVlR6gEDsHrRYC5uYFkFGGRt/ibjo+OsBxjbPRxGzy7jel3mfTZiiuNzA== +solid-js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/solid-js/-/solid-js-1.1.7.tgz#e9518be0447678344e92e902cbca5311299b66b8" + integrity sha512-+zZOdR++hFJ/dEmAaHjyI5/tPqRdItOVKsnLuBOKajCqG0n/Bs3uc8xWf8CiYTI7OIwSt5A6ASM8KDoKehfs6w== sort-keys@^2.0.0: version "2.0.0" @@ -10079,11 +9962,6 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= -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-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -10314,10 +10192,10 @@ svelte-hmr@^0.14.7: resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.7.tgz#7fa8261c7b225d9409f0a86f3b9ea5c3ca6f6607" integrity sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog== -svelte@^3.42.3: - version "3.42.6" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.42.6.tgz#45a534d76fcdb551a2f23abf2cfee648fa248d03" - integrity sha512-lAcryr9Do2PeGtbodspX5I4kWj4yWYAa2WGpDCwzNkP3y8WZTxigMd4/TMO1rBZEOkMYGn4ZXrbAlSEGhK6q3w== +svelte@^3.44.0: + version "3.44.0" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.44.0.tgz#e6176cb3ad93846ddb4140e93f43098136b23f3b" + integrity sha512-zWACSJBSncGiDvFfYOMFGNV5zDLOlyhftmO5yOZ0lEtQMptpElaRtl39MWz1+lYCpwUq4F3Q2lTzI9TrTL+eMA== tailwindcss@^2.2.17: version "2.2.17" @@ -11238,14 +11116,16 @@ vscode-uri@^3.0.2: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== -vue@^3.2.6: - version "3.2.12" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.12.tgz#b44f55506fb6a7c4b65635e609deb5f9368aa2ce" - integrity sha512-VV14HtubmB56uuQaSvLkJZgoocPiN8CJI3zZA9y8h7q/Z5hcknDIFkbq5d8ku0ukZ6AJPQqMsZWcq0qryF0jgg== +vue@^3.2.20: + version "3.2.20" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.20.tgz#940f8aa8bf3e3be78243ca582bad41fcd45ae3e6" + integrity sha512-81JjEP4OGk9oO8+CU0h2nFPGgJBm9mNa3kdCX2k6FuRdrWrC+CNe+tOnuIeTg8EWwQuI+wwdra5Q7vSzp7p4Iw== dependencies: - "@vue/compiler-dom" "3.2.12" - "@vue/runtime-dom" "3.2.12" - "@vue/shared" "3.2.12" + "@vue/compiler-dom" "3.2.20" + "@vue/compiler-sfc" "3.2.20" + "@vue/runtime-dom" "3.2.20" + "@vue/server-renderer" "3.2.20" + "@vue/shared" "3.2.20" wait-on@6.0.0: version "6.0.0"