diff --git a/.changeset/quick-cheetahs-itch.md b/.changeset/quick-cheetahs-itch.md new file mode 100644 index 000000000..0801188ee --- /dev/null +++ b/.changeset/quick-cheetahs-itch.md @@ -0,0 +1,10 @@ +--- +'astro': patch +'@astrojs/renderer-preact': patch +'@astrojs/renderer-react': patch +'@astrojs/renderer-solid': patch +'@astrojs/renderer-svelte': patch +'@astrojs/renderer-vue': patch +--- + +Bugfix: Bundled CSS missing files on Windows diff --git a/packages/astro/src/core/ssr/css.ts b/packages/astro/src/core/ssr/css.ts index 28fcbafd8..f091a6467 100644 --- a/packages/astro/src/core/ssr/css.ts +++ b/packages/astro/src/core/ssr/css.ts @@ -1,15 +1,18 @@ import type vite from '../../../vendor/vite'; +import { fileURLToPath } from 'url'; import path from 'path'; +import slash from 'slash'; // https://vitejs.dev/guide/features.html#css-pre-processors export const STYLE_EXTENSIONS = new Set(['.css', '.pcss', '.scss', '.sass', '.styl', '.stylus', '.less']); /** find unloaded styles */ -export function getStylesForID(id: string, viteServer: vite.ViteDevServer): Set { +export function getStylesForURL(filePath: URL, viteServer: vite.ViteDevServer): Set { const css = new Set(); const { idToModuleMap } = viteServer.moduleGraph; - const moduleGraph = idToModuleMap.get(id); + const rootID = slash(fileURLToPath(filePath)); // Vite fix: Windows URLs must have forward slashes + const moduleGraph = idToModuleMap.get(rootID); if (!moduleGraph) return css; // recursively crawl module graph to get all style files imported by parent id @@ -27,7 +30,7 @@ export function getStylesForID(id: string, viteServer: vite.ViteDevServer): Set< scanned.add(importedModule.id); } } - crawlCSS(id); + crawlCSS(rootID); return css; } diff --git a/packages/astro/src/core/ssr/index.ts b/packages/astro/src/core/ssr/index.ts index 720acbad6..193aa43bc 100644 --- a/packages/astro/src/core/ssr/index.ts +++ b/packages/astro/src/core/ssr/index.ts @@ -6,9 +6,11 @@ import type { LogOptions } from '../logger'; import fs from 'fs'; import path from 'path'; +import slash from 'slash'; +import { fileURLToPath } from 'url'; import { renderPage, renderSlot } from '../../runtime/server/index.js'; import { canonicalURL as getCanonicalURL, codeFrame, resolveDependency, viteifyPath } from '../util.js'; -import { getStylesForID } from './css.js'; +import { getStylesForURL } from './css.js'; import { injectTags } from './html.js'; import { generatePaginateFunction } from './paginate.js'; import { getParams, validateGetStaticPathsModule, validateGetStaticPathsResult } from './routing.js'; @@ -215,7 +217,7 @@ export async function render(renderers: Renderer[], mod: ComponentInstance, ssrO } // inject CSS - [...getStylesForID(filePath.pathname, viteServer)].forEach((href) => { + [...getStylesForURL(filePath, viteServer)].forEach((href) => { tags.push({ tag: 'link', attrs: { @@ -232,7 +234,8 @@ export async function render(renderers: Renderer[], mod: ComponentInstance, ssrO // run transformIndexHtml() in dev to run Vite dev transformations if (mode === 'development') { - html = await viteServer.transformIndexHtml(filePath.pathname, html, pathname); + const viteFilePath = slash(fileURLToPath(filePath)); // Vite Windows fix: URLs on Windows have forward slashes (not .pathname, which has a leading '/' on Windows) + html = await viteServer.transformIndexHtml(viteFilePath, html, pathname); } return html; diff --git a/packages/astro/src/core/util.ts b/packages/astro/src/core/util.ts index 3981aad95..2e91d6229 100644 --- a/packages/astro/src/core/util.ts +++ b/packages/astro/src/core/util.ts @@ -73,5 +73,5 @@ export function resolveDependency(dep: string, astroConfig: AstroConfig) { } export function viteifyPath(pathname: string): string { - return `/@fs${pathname}`; + return `/@fs/${pathname.replace(/^\//, '')}`; } diff --git a/packages/astro/src/vite-plugin-astro/index.ts b/packages/astro/src/vite-plugin-astro/index.ts index 821dd3b36..f88dc24fb 100644 --- a/packages/astro/src/vite-plugin-astro/index.ts +++ b/packages/astro/src/vite-plugin-astro/index.ts @@ -33,11 +33,13 @@ function isSSR(options: undefined | boolean | { ssr: boolean }): boolean { /** Transform .astro files for Vite */ export default function astro({ config, devServer }: AstroPluginOptions): vite.Plugin { + let platform: NodeJS.Platform; let viteTransform: TransformHook; return { name: '@astrojs/vite-plugin-astro', enforce: 'pre', // run transforms before other plugins can configResolved(resolvedConfig) { + platform = os.platform(); // TODO: remove macOS hack viteTransform = getViteTransform(resolvedConfig); }, // note: don’t claim .astro files with resolveId() — it prevents Vite from transpiling the final JS (import.meta.globEager, etc.) @@ -82,7 +84,7 @@ export default function astro({ config, devServer }: AstroPluginOptions): vite.P }); // macOS fix: remove null chars generated by compiler - if (os.platform() === 'darwin') { + if (platform === 'darwin') { tsResult.code = tsResult.code.replace(/\x00/g, ''); } diff --git a/packages/astro/src/vite-plugin-build-html/extract-assets.ts b/packages/astro/src/vite-plugin-build-html/extract-assets.ts index 33bfbc35e..1f3f6d360 100644 --- a/packages/astro/src/vite-plugin-build-html/extract-assets.ts +++ b/packages/astro/src/vite-plugin-build-html/extract-assets.ts @@ -5,6 +5,7 @@ import adapter from 'parse5/lib/tree-adapters/default.js'; const hashedLinkRels = ['stylesheet', 'preload']; const linkRels = [...hashedLinkRels, 'icon', 'manifest', 'apple-touch-icon', 'mask-icon']; +const windowsPathRE = /^[A-Z]:\//; function getSrcSetUrls(srcset: string) { if (!srcset) { @@ -54,6 +55,10 @@ function isAsset(node: Element) { if (!path) { return false; } + // Windows fix: if path starts with C:/, avoid URL parsing + if (windowsPathRE.test(path)) { + return true; + } try { new URL(path); return false; diff --git a/packages/astro/src/vite-plugin-build-html/index.ts b/packages/astro/src/vite-plugin-build-html/index.ts index efeb1a05a..6e8181e1f 100644 --- a/packages/astro/src/vite-plugin-build-html/index.ts +++ b/packages/astro/src/vite-plugin-build-html/index.ts @@ -8,6 +8,8 @@ import srcsetParse from 'srcset-parse'; import * as npath from 'path'; import { promises as fs } from 'fs'; import { getAttribute, hasAttribute, getTagName, insertBefore, remove, createScript, createElement, setAttribute } from '@web/parse5-utils'; +import slash from 'slash'; +import { fileURLToPath } from 'url'; import { addRollupInput } from './add-rollup-input.js'; import { findAssets, findExternalScripts, findInlineScripts, findInlineStyles, getTextContent, isStylesheetLink } from './extract-assets.js'; import { render as ssrRender } from '../core/ssr/index.js'; @@ -26,7 +28,12 @@ const ASTRO_EMPTY = '@astro-empty'; const tagsWithSrcSet = new Set(['img', 'source']); const isAstroInjectedLink = (node: parse5.Element) => isStylesheetLink(node) && getAttribute(node, 'data-astro-injected') === ''; -const isBuildableLink = (node: parse5.Element, srcRoot: string) => isAstroInjectedLink(node) || getAttribute(node, 'href')?.startsWith(srcRoot); +const isBuildableLink = (node: parse5.Element, srcRoot: string) => { + if (isAstroInjectedLink(node)) return true; + const href = getAttribute(node, 'href'); + if (typeof href !== 'string' || !href.length) return false; + return href.startsWith(srcRoot) || `/${href}`.startsWith(srcRoot); // Windows fix: some paths are missing leading "/" +}; const isBuildableImage = (node: parse5.Element, srcRoot: string) => getTagName(node) === 'img' && getAttribute(node, 'src')?.startsWith(srcRoot); const hasSrcSet = (node: parse5.Element) => tagsWithSrcSet.has(getTagName(node)) && !!getAttribute(node, 'srcset'); const isHoistedScript = (node: parse5.Element) => getTagName(node) === 'script' && hasAttribute(node, 'hoist'); diff --git a/packages/astro/test/astro-styles-ssr.test.js b/packages/astro/test/astro-styles-ssr.test.js index 982d3f267..7241d4095 100644 --- a/packages/astro/test/astro-styles-ssr.test.js +++ b/packages/astro/test/astro-styles-ssr.test.js @@ -2,136 +2,141 @@ import { expect } from 'chai'; import cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; +let fixture; +let index$; +let bundledCSS; + +before(async () => { + fixture = await loadFixture({ + projectRoot: './fixtures/astro-styles-ssr/', + renderers: ['@astrojs/renderer-react', '@astrojs/renderer-svelte', '@astrojs/renderer-vue'], + }); + await fixture.build(); + + // get bundled CSS (will be hashed, hence DOM query) + const html = await fixture.readFile('/index.html'); + index$ = cheerio.load(html); + const bundledCSSHREF = index$('link[rel=stylesheet][href^=assets/]').attr('href'); + bundledCSS = await fixture.readFile(bundledCSSHREF.replace(/^\/?/, '/')); +}); + describe('Styles SSR', () => { - let fixture; + describe('Astro styles', () => { + it('HTML and CSS scoped correctly', async () => { + const $ = index$; - before(async () => { - fixture = await loadFixture({ projectRoot: './fixtures/astro-styles-ssr/' }); - await fixture.build(); - }); + const el1 = $('#dynamic-class'); + const el2 = $('#dynamic-vis'); + const classes = $('#class').attr('class').split(' '); + const scopedClass = classes.find((name) => /^astro-[A-Za-z0-9-]+/.test(name)); - it('Has tags', async () => { - const MUST_HAVE_LINK_TAGS = ['assets/index']; + // 1. check HTML + expect(el1.attr('class')).to.equal(`blue ${scopedClass}`); + expect(el2.attr('class')).to.equal(`visible ${scopedClass}`); - const html = await fixture.readFile('/index.html'); - const $ = cheerio.load(html); - - for (const href of [...$('link[rel="stylesheet"]')].map((el) => el.attribs.href)) { - const hasTag = MUST_HAVE_LINK_TAGS.some((mustHaveHref) => href.includes(mustHaveHref)); - expect(hasTag).to.equal(true); - } - }); - - it('Has correct CSS classes', async () => { - const html = await fixture.readFile('/index.html'); - const $ = cheerio.load(html); - - const MUST_HAVE_CLASSES = { - '#react-css': 'react-title', - '#react-modules': 'title', // ⚠️ this should be transformed - '#vue-css': 'vue-title', - '#vue-modules': 'title', // ⚠️ this should also be transformed - '#vue-scoped': 'vue-title', // also has data-v-* property - '#svelte-scoped': 'svelte-title', // also has additional class - }; - - for (const [selector, className] of Object.entries(MUST_HAVE_CLASSES)) { - const el = $(selector); - if (selector === '#react-modules' || selector === '#vue-modules') { - // this will generate differently on Unix vs Windows. Here we simply test that it has transformed - expect(el.attr('class')).to.match(new RegExp(`^_${className}_[A-Za-z0-9-_]+`)); // className should be transformed, surrounded by underscores and other stuff - } else { - // if this is not a CSS module, it should remain as expected - expect(el.attr('class')).to.include(className); - } - - // add’l test: Vue Scoped styles should have data-v-* attribute - if (selector === '#vue-scoped') { - const { attribs } = el.get(0); - const scopeId = Object.keys(attribs).find((k) => k.startsWith('data-v-')); - expect(scopeId).to.be.ok; - } - - // add’l test: Svelte should have another class - if (selector === '#svelte-title') { - expect(el.attr('class')).not.to.equal(className); - } - } - }); - - it('CSS scoped support in .astro', async () => { - const html = await fixture.readFile('/index.html'); - const $ = cheerio.load(html); - - const href = '/' + $('link').attr('href'); - const raw = await fixture.readFile(href); - - let scopedClass; - - // test 1: diff --git a/packages/astro/test/postcss.test.js b/packages/astro/test/postcss.test.js index ac38f6622..56959c97f 100644 --- a/packages/astro/test/postcss.test.js +++ b/packages/astro/test/postcss.test.js @@ -1,7 +1,6 @@ import { expect } from 'chai'; import cheerio from 'cheerio'; import eol from 'eol'; -import os from 'os'; import { loadFixture } from './test-utils.js'; const PREFIXED_CSS = `{-webkit-appearance:none;-moz-appearance:none;appearance:none}`; @@ -36,20 +35,14 @@ describe('PostCSS', () => { }); it('works in JSX', () => { - // TODO: fix in Windows - if (os.platform() === 'win32') return; expect(bundledCSS).to.match(new RegExp(`.solid${PREFIXED_CSS}`)); }); it('works in Vue', () => { - // TODO: fix in Windows - if (os.platform() === 'win32') return; expect(bundledCSS).to.match(new RegExp(`.vue${PREFIXED_CSS}`)); }); it('works in Svelte', () => { - // TODO: fix in Windows - if (os.platform() === 'win32') return; expect(bundledCSS).to.match(new RegExp(`.svelte.s[^{]+${PREFIXED_CSS}`)); }); diff --git a/packages/renderers/renderer-preact/package.json b/packages/renderers/renderer-preact/package.json index fbc32750c..836e700fd 100644 --- a/packages/renderers/renderer-preact/package.json +++ b/packages/renderers/renderer-preact/package.json @@ -11,7 +11,7 @@ "./package.json": "./package.json" }, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.9", + "@babel/plugin-transform-react-jsx": "^7.16.0", "preact": "^10.5.15", "preact-render-to-string": "^5.1.19" }, diff --git a/packages/renderers/renderer-react/package.json b/packages/renderers/renderer-react/package.json index 5ab761a33..d198fa717 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.9", + "@babel/plugin-transform-react-jsx": "^7.16.0", "react": "^17.0.2", "react-dom": "^17.0.2" }, diff --git a/packages/renderers/renderer-solid/package.json b/packages/renderers/renderer-solid/package.json index 49b3c5638..615823212 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.7", - "solid-js": "^1.1.7" + "babel-preset-solid": "^1.2.3", + "solid-js": "^1.2.3" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" diff --git a/packages/renderers/renderer-svelte/package.json b/packages/renderers/renderer-svelte/package.json index 9ac4e9147..c1f4cf135 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.29", - "svelte": "^3.44.0" + "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", + "svelte": "^3.44.1" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" diff --git a/packages/renderers/renderer-vue/package.json b/packages/renderers/renderer-vue/package.json index 8b3d6bbe5..82d1dc3ce 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.9.3", - "@vue/compiler-sfc": "^3.2.20", - "@vue/server-renderer": "^3.2.20", - "vue": "^3.2.20" + "@vitejs/plugin-vue": "^1.9.4", + "@vue/compiler-sfc": "^3.2.22", + "@vue/server-renderer": "^3.2.22", + "vue": "^3.2.22" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" diff --git a/yarn.lock b/yarn.lock index 9f4445c35..83e7ba69f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -230,12 +230,12 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" - integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" "@babel/helper-compilation-targets@^7.15.4": version "7.15.4" @@ -277,13 +277,20 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== dependencies: "@babel/types" "^7.15.4" +"@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-module-transforms@^7.12.1": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz#7da80c8cbc1f02655d83f8b79d25866afe50d226" @@ -407,13 +414,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.10.4", "@babel/plugin-syntax-jsx@^7.14.5": +"@babel/plugin-syntax-jsx@^7.10.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-jsx@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1" + integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" @@ -428,16 +442,16 @@ dependencies: "@babel/helper-plugin-utils" "^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== +"@babel/plugin-transform-react-jsx@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz#55b797d4960c3de04e07ad1c0476e2bc6a4889f1" + integrity sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-jsx" "^7.14.5" - "@babel/types" "^7.14.9" + "@babel/plugin-syntax-jsx" "^7.16.0" + "@babel/types" "^7.16.0" "@babel/runtime@^7.10.4", "@babel/runtime@^7.5.5": version "7.15.4" @@ -470,7 +484,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.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.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== @@ -478,6 +492,14 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@babel/types@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + "@changesets/apply-release-plan@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-5.0.1.tgz#ed3e30550f787ef1b72f0a51e29a54d244123109" @@ -1765,10 +1787,10 @@ dotenv "^8.2.0" dotenv-expand "^5.1.0" -"@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== +"@sveltejs/vite-plugin-svelte@^1.0.0-next.30": + version "1.0.0-next.30" + resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.30.tgz#a6cd181bb406d590c1fa8d480c55950d567689f9" + integrity sha512-YQqdMxjL1VgSFk4/+IY3yLwuRRapPafPiZTiaGEq1psbJYSNYUWx9F1zMm32GMsnogg3zn99mGJOqe3ld3HZSg== dependencies: "@rollup/pluginutils" "^4.1.1" debug "^4.3.2" @@ -2111,100 +2133,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.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== +"@vitejs/plugin-vue@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.9.4.tgz#4f48485432cbb986a9fb9d254dc33ce30ddccbfa" + integrity sha512-0CZqaCoChriPTTtGkERy1LGPcYjGFpi2uYRhBPIkqJqUGV5JnJFhQAgh6oH9j5XZHfrRaisX8W0xSpO4T7S78A== -"@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== +"@vue/compiler-core@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.22.tgz#5e3d3b983cc7f430ddbc6a8773c872dcf410dc89" + integrity sha512-uAkovrVeTcjzpiM4ECmVaMrv/bjdgAaLzvjcGqQPBEyUrcqsCgccT9fHJ/+hWVGhyMahmBwLqcn4guULNx7sdw== dependencies: "@babel/parser" "^7.15.0" - "@vue/shared" "3.2.20" + "@vue/shared" "3.2.22" estree-walker "^2.0.2" source-map "^0.6.1" -"@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== +"@vue/compiler-dom@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.22.tgz#221cc358a6c0651c04e1dd22a8470b21e56ee1a5" + integrity sha512-VZdsw/VuO1ODs8K7NQwnMQzKITDkIFlYYC03SVnunuf6eNRxBPEonSyqbWNoo6qNaHAEBTG6VVcZC5xC9bAx1g== dependencies: - "@vue/compiler-core" "3.2.20" - "@vue/shared" "3.2.20" + "@vue/compiler-core" "3.2.22" + "@vue/shared" "3.2.22" -"@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== +"@vue/compiler-sfc@3.2.22", "@vue/compiler-sfc@^3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.22.tgz#ffd0e5e35479b6ade18d12fefec369cbaf2f7718" + integrity sha512-tWRQ5ge1tsTDhUwHgueicKJ8rYm6WUVAPTaIpFW3GSwZKcOEJ2rXdfkHFShNVGupeRALz2ET2H84OL0GeRxY0A== dependencies: "@babel/parser" "^7.15.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" + "@vue/compiler-core" "3.2.22" + "@vue/compiler-dom" "3.2.22" + "@vue/compiler-ssr" "3.2.22" + "@vue/ref-transform" "3.2.22" + "@vue/shared" "3.2.22" estree-walker "^2.0.2" magic-string "^0.25.7" postcss "^8.1.10" source-map "^0.6.1" -"@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== +"@vue/compiler-ssr@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.22.tgz#23552c31b76b45baf5f244713c81d77ab59447d2" + integrity sha512-Cl6aoLJtXzzBkk1sKod8S0WBJLts3+ugVC91d22gGpbkw/64WnF12tOZi7Rg54PPLi1NovqyNWPsLH/SAFcu+w== dependencies: - "@vue/compiler-dom" "3.2.20" - "@vue/shared" "3.2.20" + "@vue/compiler-dom" "3.2.22" + "@vue/shared" "3.2.22" -"@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== +"@vue/reactivity@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.22.tgz#88655c0b4febc561136e6550e329039f860caa0a" + integrity sha512-xNkLAItjI0xB+lFeDgKCrSItmrHTaAzSnt8LmdSCPQnDyarmzbi/u4ESQnckWvlL7lSRKiEaOvblaNyqAa7OnQ== dependencies: - "@vue/shared" "3.2.20" + "@vue/shared" "3.2.22" -"@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== +"@vue/ref-transform@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.22.tgz#16b03994eac71528cceff4cf76178ed9b44ac90a" + integrity sha512-qalVWbq5xWWxLZ0L9OroBg/JZhzavQuCcDXblfErxyDEH6Xc5gIJ4feo1SVCICFzhAUgLgQTdSFLpgjBawbFpw== dependencies: "@babel/parser" "^7.15.0" - "@vue/compiler-core" "3.2.20" - "@vue/shared" "3.2.20" + "@vue/compiler-core" "3.2.22" + "@vue/shared" "3.2.22" estree-walker "^2.0.2" magic-string "^0.25.7" -"@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== +"@vue/runtime-core@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.22.tgz#111f1bc97f20249e05ca2189856d99c82d72de32" + integrity sha512-e7WOC55wmHPvmoVUk9VBe/Z9k5bJfWJfVIlkUkiADJn0bOgQD29oh/GS14Kb3aEJXIHLI17Em6+HxNut1sIh7Q== dependencies: - "@vue/reactivity" "3.2.20" - "@vue/shared" "3.2.20" + "@vue/reactivity" "3.2.22" + "@vue/shared" "3.2.22" -"@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== +"@vue/runtime-dom@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.22.tgz#c11d75dd51375ee4c74e339f6523ca05e37faa37" + integrity sha512-w7VHYJoliLRTLc5beN77wxuOjla4v9wr2FF22xpZFYBmH4U1V7HkYhoHc1BTuNghI15CXT1tNIMhibI1nrQgdw== dependencies: - "@vue/runtime-core" "3.2.20" - "@vue/shared" "3.2.20" + "@vue/runtime-core" "3.2.22" + "@vue/shared" "3.2.22" csstype "^2.6.8" -"@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== +"@vue/server-renderer@3.2.22", "@vue/server-renderer@^3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.22.tgz#049c91a495cb0fcdac02dec485c31cb99410885f" + integrity sha512-jCwbQgKPXiXoH9VS9F7K+gyEvEMrjutannwEZD1R8fQ9szmOTqC+RRbIY3Uf2ibQjZtZ8DV9a4FjxICvd9zZlQ== dependencies: - "@vue/compiler-ssr" "3.2.20" - "@vue/shared" "3.2.20" + "@vue/compiler-ssr" "3.2.22" + "@vue/shared" "3.2.22" -"@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== +"@vue/shared@3.2.22": + version "3.2.22" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.22.tgz#26dcbe5e530f6c1f2de5ca9aeab92ab00f523b41" + integrity sha512-qWVav014mpjEtbWbEgl0q9pEyrrIySKum8UVYjwhC6njrKzknLZPvfuYdQyVbApsqr94tf/3dP4pCuZmmjdCWQ== "@web/parse5-utils@^1.3.0": version "1.3.0" @@ -2598,10 +2620,10 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" -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== +babel-plugin-jsx-dom-expressions@^0.30.7: + version "0.30.7" + resolved "https://registry.yarnpkg.com/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.30.7.tgz#8afdd295aaec986cc1bb7a780ff907901ae0f2bb" + integrity sha512-WRBzOtsG6mGnJ1JPlycdDnHN9bO0iza20a86K3R9LN0uY12VlKjZvb47aUCPnzfwWf6H7QPXWj7WK8gQTZQEfg== dependencies: "@babel/helper-module-imports" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" @@ -2619,12 +2641,12 @@ babel-plugin-module-resolver@^4.1.0: reselect "^4.0.0" resolve "^1.13.1" -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== +babel-preset-solid@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/babel-preset-solid/-/babel-preset-solid-1.2.3.tgz#42c49ecc5bd35d465d3f0a4feb8a3ec6e71c37bf" + integrity sha512-GX9UorhcjFScZFl7MoYZbZoYnvafa+76R1vCiM38D5CduF1vNIni17ZlGXt+0PqCv7mlv2cppDFLXNTkvMQxmA== dependencies: - babel-plugin-jsx-dom-expressions "^0.29.19" + babel-plugin-jsx-dom-expressions "^0.30.7" bail@^1.0.0: version "1.0.5" @@ -9829,10 +9851,10 @@ socks@^2.3.3, socks@^2.6.1: ip "^1.1.5" smart-buffer "^4.1.0" -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== +solid-js@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/solid-js/-/solid-js-1.2.3.tgz#5f1ef6559465d453d392b3f221b2f36f80ee0154" + integrity sha512-HQv7F23wSQRIuD0gNF3L1/0MHkTEia7J9Oc4VcEeLjAenkqz89tFkztBIp0PABDqK83fxzcixhSXx0xLv4lNAQ== sort-keys@^2.0.0: version "2.0.0" @@ -10267,10 +10289,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.44.0: - version "3.44.0" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.44.0.tgz#e6176cb3ad93846ddb4140e93f43098136b23f3b" - integrity sha512-zWACSJBSncGiDvFfYOMFGNV5zDLOlyhftmO5yOZ0lEtQMptpElaRtl39MWz1+lYCpwUq4F3Q2lTzI9TrTL+eMA== +svelte@^3.44.1: + version "3.44.1" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.44.1.tgz#5cc772a8340f4519a4ecd1ac1a842325466b1a63" + integrity sha512-4DrCEJoBvdR689efHNSxIQn2pnFwB7E7j2yLEJtHE/P8hxwZWIphCtJ8are7bjl/iVMlcEf5uh5pJ68IwR09vQ== tailwindcss@^2.2.19: version "2.2.19" @@ -11201,16 +11223,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.20: - version "3.2.20" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.20.tgz#940f8aa8bf3e3be78243ca582bad41fcd45ae3e6" - integrity sha512-81JjEP4OGk9oO8+CU0h2nFPGgJBm9mNa3kdCX2k6FuRdrWrC+CNe+tOnuIeTg8EWwQuI+wwdra5Q7vSzp7p4Iw== +vue@^3.2.22: + version "3.2.22" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.22.tgz#46e4dd89e98cc4b851ae1eb35f00ced413a34bb7" + integrity sha512-KD5nZpXVZquOC6926Xnp3zOvswrUyO9Rya7ZUoxWFQEjFDW4iACtwzubRB4Um2Om9kj6CaJOqAVRDSFlqLpdgw== dependencies: - "@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" + "@vue/compiler-dom" "3.2.22" + "@vue/compiler-sfc" "3.2.22" + "@vue/runtime-dom" "3.2.22" + "@vue/server-renderer" "3.2.22" + "@vue/shared" "3.2.22" wait-on@6.0.0: version "6.0.0"