From 6e62289b7e788af2c4302cef5f9386c5ebe98b8d Mon Sep 17 00:00:00 2001 From: baseballyama Date: Sat, 29 Jun 2024 17:29:24 +0900 Subject: [PATCH] feat: PoC of component level tree-shaking --- .eslintrc.cjs | 3 +- packages/playground/treeshaking/.gitignore | 24 + packages/playground/treeshaking/README.md | 3 + .../playground/treeshaking/compare/diff.md | 126 ++++ .../compare/index_with_tree_shaking.js | 56 ++ .../compare/index_without_tree_shaking.js | 144 +++++ packages/playground/treeshaking/index.html | 13 + packages/playground/treeshaking/jsconfig.json | 32 + packages/playground/treeshaking/package.json | 17 + .../playground/treeshaking/public/vite.svg | 1 + .../playground/treeshaking/src/App.svelte | 5 + .../treeshaking/src/assets/svelte.svg | 1 + .../treeshaking/src/lib/Counter.svelte | 24 + packages/playground/treeshaking/src/main.js | 7 + .../playground/treeshaking/src/vite-env.d.ts | 2 + .../playground/treeshaking/svelte.config.js | 12 + .../playground/treeshaking/vite.config.js | 19 + packages/vite-plugin-svelte/package.json | 5 +- packages/vite-plugin-svelte/src/constants.js | 3 + packages/vite-plugin-svelte/src/index.js | 83 ++- packages/vite-plugin-svelte/src/public.d.ts | 7 + .../vite-plugin-svelte/src/types/compile.d.ts | 5 +- .../src/types/tree-shaking.d.ts | 22 + .../vite-plugin-svelte/src/utils/compile.js | 12 +- .../src/utils/tree-shaking/phase1.js | 158 +++++ .../src/utils/tree-shaking/phase2.js | 257 ++++++++ .../src/utils/tree-shaking/shared.js | 1 + pnpm-lock.yaml | 569 +++++++++--------- 28 files changed, 1333 insertions(+), 278 deletions(-) create mode 100644 packages/playground/treeshaking/.gitignore create mode 100644 packages/playground/treeshaking/README.md create mode 100644 packages/playground/treeshaking/compare/diff.md create mode 100644 packages/playground/treeshaking/compare/index_with_tree_shaking.js create mode 100644 packages/playground/treeshaking/compare/index_without_tree_shaking.js create mode 100644 packages/playground/treeshaking/index.html create mode 100644 packages/playground/treeshaking/jsconfig.json create mode 100644 packages/playground/treeshaking/package.json create mode 100644 packages/playground/treeshaking/public/vite.svg create mode 100644 packages/playground/treeshaking/src/App.svelte create mode 100644 packages/playground/treeshaking/src/assets/svelte.svg create mode 100644 packages/playground/treeshaking/src/lib/Counter.svelte create mode 100644 packages/playground/treeshaking/src/main.js create mode 100644 packages/playground/treeshaking/src/vite-env.d.ts create mode 100644 packages/playground/treeshaking/svelte.config.js create mode 100644 packages/playground/treeshaking/vite.config.js create mode 100644 packages/vite-plugin-svelte/src/constants.js create mode 100644 packages/vite-plugin-svelte/src/types/tree-shaking.d.ts create mode 100644 packages/vite-plugin-svelte/src/utils/tree-shaking/phase1.js create mode 100644 packages/vite-plugin-svelte/src/utils/tree-shaking/phase2.js create mode 100644 packages/vite-plugin-svelte/src/utils/tree-shaking/shared.js diff --git a/.eslintrc.cjs b/.eslintrc.cjs index c77deda75..6a12cad56 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -201,6 +201,7 @@ module.exports = { ignorePatterns: [ 'packages/*/types/index.d.ts', 'packages/*/types/index.d.ts.map', - 'packages/*/CHANGELOG.md' + 'packages/*/CHANGELOG.md', + 'packages/playground/treeshaking/compare/*' ] }; diff --git a/packages/playground/treeshaking/.gitignore b/packages/playground/treeshaking/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/packages/playground/treeshaking/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/playground/treeshaking/README.md b/packages/playground/treeshaking/README.md new file mode 100644 index 000000000..47379abff --- /dev/null +++ b/packages/playground/treeshaking/README.md @@ -0,0 +1,3 @@ +# Svelte + Vite + +and a little something 5 diff --git a/packages/playground/treeshaking/compare/diff.md b/packages/playground/treeshaking/compare/diff.md new file mode 100644 index 000000000..d189b2a39 --- /dev/null +++ b/packages/playground/treeshaking/compare/diff.md @@ -0,0 +1,126 @@ +```diff +diff --git a/packages/playground/treeshaking/compare/index_without_tree_shaking.js b/packages/playground/treeshaking/compare/index_with_tree_shaking.js +index d873257d..a0bc9c7c 100644 +--- a/packages/playground/treeshaking/compare/index_without_tree_shaking.js ++++ b/packages/playground/treeshaking/compare/index_with_tree_shaking.js +@@ -1,11 +1,10 @@ + import { +- c as comment, +- i as if_block, + a as append, + t as template, ++ c as comment, + f as first_child, + m as mount +-} from './vendor-CjCr5kEU.js'; ++} from './vendor-CWxgFfOZ.js'; + (function polyfill() { + const relList = document.createElement('link').relList; + if (relList && relList.supports && relList.supports('modulepreload')) { +@@ -40,102 +39,15 @@ import { + fetch(link.href, fetchOpts); + } + })(); +-var root_2 = template(`Inner1-1`, 1); +-var root_4 = template(`Inner1-2`, 1); +-var root_5 = template(`Inner1-3`, 1); +-var root_8 = template(`Inner2-1`, 1); +-var root_10 = template(`Inner2-2`, 1); +-var root_11 = template(`Inner2-3`, 1); +-var root_12 = template(`

Hello!

`); ++var root = template(`Inner2-2`, 1); + function Counter($$anchor, $$props) { +- var fragment = comment(); +- var node = first_child(fragment); +- if_block( +- node, +- () => $$props.initialCount < 0, +- ($$anchor2) => { +- var fragment_1 = comment(); +- var node_1 = first_child(fragment_1); +- if_block( +- node_1, +- () => $$props.initialCount < 0, +- ($$anchor3) => { +- var fragment_2 = root_2(); +- append($$anchor3, fragment_2); +- }, +- ($$anchor3) => { +- var fragment_3 = comment(); +- var node_2 = first_child(fragment_3); +- if_block( +- node_2, +- () => $$props.initialCount > 0, +- ($$anchor4) => { +- var fragment_4 = root_4(); +- append($$anchor4, fragment_4); +- }, +- ($$anchor4) => { +- var fragment_5 = root_5(); +- append($$anchor4, fragment_5); +- }, +- true +- ); +- append($$anchor3, fragment_3); +- } +- ); +- append($$anchor2, fragment_1); +- }, +- ($$anchor2) => { +- var fragment_6 = comment(); +- var node_3 = first_child(fragment_6); +- if_block( +- node_3, +- () => $$props.initialCount > 0, +- ($$anchor3) => { +- var fragment_7 = comment(); +- var node_4 = first_child(fragment_7); +- if_block( +- node_4, +- () => $$props.initialCount < 0, +- ($$anchor4) => { +- var fragment_8 = root_8(); +- append($$anchor4, fragment_8); +- }, +- ($$anchor4) => { +- var fragment_9 = comment(); +- var node_5 = first_child(fragment_9); +- if_block( +- node_5, +- () => $$props.initialCount > 0, +- ($$anchor5) => { +- var fragment_10 = root_10(); +- append($$anchor5, fragment_10); +- }, +- ($$anchor5) => { +- var fragment_11 = root_11(); +- append($$anchor5, fragment_11); +- }, +- true +- ); +- append($$anchor4, fragment_9); +- } +- ); +- append($$anchor3, fragment_7); +- }, +- ($$anchor3) => { +- var p = root_12(); +- append($$anchor3, p); +- }, +- true +- ); +- append($$anchor2, fragment_6); +- } +- ); ++ var fragment = root(); + append($$anchor, fragment); + } + function App($$anchor) { + var fragment = comment(); + var node = first_child(fragment); +- Counter(node, { initialCount: 1 }); ++ Counter(node); + append($$anchor, fragment); + } + mount(App, { +``` diff --git a/packages/playground/treeshaking/compare/index_with_tree_shaking.js b/packages/playground/treeshaking/compare/index_with_tree_shaking.js new file mode 100644 index 000000000..a0bc9c7c8 --- /dev/null +++ b/packages/playground/treeshaking/compare/index_with_tree_shaking.js @@ -0,0 +1,56 @@ +import { + a as append, + t as template, + c as comment, + f as first_child, + m as mount +} from './vendor-CWxgFfOZ.js'; +(function polyfill() { + const relList = document.createElement('link').relList; + if (relList && relList.supports && relList.supports('modulepreload')) { + return; + } + for (const link of document.querySelectorAll('link[rel="modulepreload"]')) { + processPreload(link); + } + new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.type !== 'childList') { + continue; + } + for (const node of mutation.addedNodes) { + if (node.tagName === 'LINK' && node.rel === 'modulepreload') processPreload(node); + } + } + }).observe(document, { childList: true, subtree: true }); + function getFetchOpts(link) { + const fetchOpts = {}; + if (link.integrity) fetchOpts.integrity = link.integrity; + if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy; + if (link.crossOrigin === 'use-credentials') fetchOpts.credentials = 'include'; + else if (link.crossOrigin === 'anonymous') fetchOpts.credentials = 'omit'; + else fetchOpts.credentials = 'same-origin'; + return fetchOpts; + } + function processPreload(link) { + if (link.ep) return; + link.ep = true; + const fetchOpts = getFetchOpts(link); + fetch(link.href, fetchOpts); + } +})(); +var root = template(`Inner2-2`, 1); +function Counter($$anchor, $$props) { + var fragment = root(); + append($$anchor, fragment); +} +function App($$anchor) { + var fragment = comment(); + var node = first_child(fragment); + Counter(node); + append($$anchor, fragment); +} +mount(App, { + props: {}, + target: document.getElementById('app') +}); diff --git a/packages/playground/treeshaking/compare/index_without_tree_shaking.js b/packages/playground/treeshaking/compare/index_without_tree_shaking.js new file mode 100644 index 000000000..d873257d0 --- /dev/null +++ b/packages/playground/treeshaking/compare/index_without_tree_shaking.js @@ -0,0 +1,144 @@ +import { + c as comment, + i as if_block, + a as append, + t as template, + f as first_child, + m as mount +} from './vendor-CjCr5kEU.js'; +(function polyfill() { + const relList = document.createElement('link').relList; + if (relList && relList.supports && relList.supports('modulepreload')) { + return; + } + for (const link of document.querySelectorAll('link[rel="modulepreload"]')) { + processPreload(link); + } + new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.type !== 'childList') { + continue; + } + for (const node of mutation.addedNodes) { + if (node.tagName === 'LINK' && node.rel === 'modulepreload') processPreload(node); + } + } + }).observe(document, { childList: true, subtree: true }); + function getFetchOpts(link) { + const fetchOpts = {}; + if (link.integrity) fetchOpts.integrity = link.integrity; + if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy; + if (link.crossOrigin === 'use-credentials') fetchOpts.credentials = 'include'; + else if (link.crossOrigin === 'anonymous') fetchOpts.credentials = 'omit'; + else fetchOpts.credentials = 'same-origin'; + return fetchOpts; + } + function processPreload(link) { + if (link.ep) return; + link.ep = true; + const fetchOpts = getFetchOpts(link); + fetch(link.href, fetchOpts); + } +})(); +var root_2 = template(`Inner1-1`, 1); +var root_4 = template(`Inner1-2`, 1); +var root_5 = template(`Inner1-3`, 1); +var root_8 = template(`Inner2-1`, 1); +var root_10 = template(`Inner2-2`, 1); +var root_11 = template(`Inner2-3`, 1); +var root_12 = template(`

Hello!

`); +function Counter($$anchor, $$props) { + var fragment = comment(); + var node = first_child(fragment); + if_block( + node, + () => $$props.initialCount < 0, + ($$anchor2) => { + var fragment_1 = comment(); + var node_1 = first_child(fragment_1); + if_block( + node_1, + () => $$props.initialCount < 0, + ($$anchor3) => { + var fragment_2 = root_2(); + append($$anchor3, fragment_2); + }, + ($$anchor3) => { + var fragment_3 = comment(); + var node_2 = first_child(fragment_3); + if_block( + node_2, + () => $$props.initialCount > 0, + ($$anchor4) => { + var fragment_4 = root_4(); + append($$anchor4, fragment_4); + }, + ($$anchor4) => { + var fragment_5 = root_5(); + append($$anchor4, fragment_5); + }, + true + ); + append($$anchor3, fragment_3); + } + ); + append($$anchor2, fragment_1); + }, + ($$anchor2) => { + var fragment_6 = comment(); + var node_3 = first_child(fragment_6); + if_block( + node_3, + () => $$props.initialCount > 0, + ($$anchor3) => { + var fragment_7 = comment(); + var node_4 = first_child(fragment_7); + if_block( + node_4, + () => $$props.initialCount < 0, + ($$anchor4) => { + var fragment_8 = root_8(); + append($$anchor4, fragment_8); + }, + ($$anchor4) => { + var fragment_9 = comment(); + var node_5 = first_child(fragment_9); + if_block( + node_5, + () => $$props.initialCount > 0, + ($$anchor5) => { + var fragment_10 = root_10(); + append($$anchor5, fragment_10); + }, + ($$anchor5) => { + var fragment_11 = root_11(); + append($$anchor5, fragment_11); + }, + true + ); + append($$anchor4, fragment_9); + } + ); + append($$anchor3, fragment_7); + }, + ($$anchor3) => { + var p = root_12(); + append($$anchor3, p); + }, + true + ); + append($$anchor2, fragment_6); + } + ); + append($$anchor, fragment); +} +function App($$anchor) { + var fragment = comment(); + var node = first_child(fragment); + Counter(node, { initialCount: 1 }); + append($$anchor, fragment); +} +mount(App, { + props: {}, + target: document.getElementById('app') +}); diff --git a/packages/playground/treeshaking/index.html b/packages/playground/treeshaking/index.html new file mode 100644 index 000000000..7d4f5f410 --- /dev/null +++ b/packages/playground/treeshaking/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + Svelte + + +
+ + + diff --git a/packages/playground/treeshaking/jsconfig.json b/packages/playground/treeshaking/jsconfig.json new file mode 100644 index 000000000..31e2eea42 --- /dev/null +++ b/packages/playground/treeshaking/jsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "moduleResolution": "bundler", + "target": "ESNext", + "module": "ESNext", + /** + * svelte-preprocess cannot figure out whether you have + * a value or a type, so tell TypeScript to enforce using + * `import type` instead of `import` for Types. + */ + "verbatimModuleSyntax": true, + "isolatedModules": true, + "resolveJsonModule": true, + /** + * To have warnings / errors of the Svelte compiler at the + * correct position, enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable this if you'd like to use dynamic types. + */ + "checkJs": true + }, + /** + * Use global.d.ts instead of compilerOptions.types + * to avoid limiting type declarations. + */ + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/packages/playground/treeshaking/package.json b/packages/playground/treeshaking/package.json new file mode 100644 index 000000000..aa814b441 --- /dev/null +++ b/packages/playground/treeshaking/package.json @@ -0,0 +1,17 @@ +{ + "name": "playground-basic", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "workspace:^", + "e2e-test-dep-svelte-module": "workspace:^", + "svelte": "^5.0.0-next.144", + "vite": "^5.2.12" + } +} diff --git a/packages/playground/treeshaking/public/vite.svg b/packages/playground/treeshaking/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/playground/treeshaking/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/playground/treeshaking/src/App.svelte b/packages/playground/treeshaking/src/App.svelte new file mode 100644 index 000000000..b7276731a --- /dev/null +++ b/packages/playground/treeshaking/src/App.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/playground/treeshaking/src/assets/svelte.svg b/packages/playground/treeshaking/src/assets/svelte.svg new file mode 100644 index 000000000..c5e08481f --- /dev/null +++ b/packages/playground/treeshaking/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/playground/treeshaking/src/lib/Counter.svelte b/packages/playground/treeshaking/src/lib/Counter.svelte new file mode 100644 index 000000000..0aed470f9 --- /dev/null +++ b/packages/playground/treeshaking/src/lib/Counter.svelte @@ -0,0 +1,24 @@ + + +{#if initialCount < 0} + {#if initialCount < 0} + Inner1-1 + {:else if initialCount > 0} + Inner1-2 + {:else} + Inner1-3 + {/if} +{:else if initialCount > 0} + {#if initialCount < 0} + Inner2-1 + {:else if initialCount > 0} + Inner2-2 + {:else} + Inner2-3 + {/if} +{:else} +

Hello!

+{/if} diff --git a/packages/playground/treeshaking/src/main.js b/packages/playground/treeshaking/src/main.js new file mode 100644 index 000000000..ffad176bf --- /dev/null +++ b/packages/playground/treeshaking/src/main.js @@ -0,0 +1,7 @@ +import App from './App.svelte'; +import * as svelte from 'svelte'; + +svelte.mount(App, { + props: {}, + target: document.getElementById('app') +}); diff --git a/packages/playground/treeshaking/src/vite-env.d.ts b/packages/playground/treeshaking/src/vite-env.d.ts new file mode 100644 index 000000000..4078e7476 --- /dev/null +++ b/packages/playground/treeshaking/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/packages/playground/treeshaking/svelte.config.js b/packages/playground/treeshaking/svelte.config.js new file mode 100644 index 000000000..251264976 --- /dev/null +++ b/packages/playground/treeshaking/svelte.config.js @@ -0,0 +1,12 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), + vitePlugin: { + experimental: { + componentLevelTreeShaking: true + } + } +}; diff --git a/packages/playground/treeshaking/vite.config.js b/packages/playground/treeshaking/vite.config.js new file mode 100644 index 000000000..683610a8d --- /dev/null +++ b/packages/playground/treeshaking/vite.config.js @@ -0,0 +1,19 @@ +import { defineConfig } from 'vite'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [svelte()], + build: { + minify: false, + rollupOptions: { + output: { + manualChunks(id) { + if (id.includes('node_modules')) { + return 'vendor'; + } + } + } + } + } +}); diff --git a/packages/vite-plugin-svelte/package.json b/packages/vite-plugin-svelte/package.json index 153ab4b68..d1613f2d9 100644 --- a/packages/vite-plugin-svelte/package.json +++ b/packages/vite-plugin-svelte/package.json @@ -46,7 +46,8 @@ "deepmerge": "^4.3.1", "kleur": "^4.1.5", "magic-string": "^0.30.10", - "vitefu": "^0.2.5" + "vitefu": "^0.2.5", + "zimmerframe": "^1.1.2" }, "peerDependencies": { "svelte": "^5.0.0-next.96 || ^5.0.0", @@ -54,7 +55,9 @@ }, "devDependencies": { "@types/debug": "^4.1.12", + "@types/estree": "^1.0.5", "esbuild": "^0.21.4", + "rollup": "^4.18.0", "sass": "^1.77.2", "svelte": "^5.0.0-next.144", "vite": "^5.2.12" diff --git a/packages/vite-plugin-svelte/src/constants.js b/packages/vite-plugin-svelte/src/constants.js new file mode 100644 index 000000000..15905d33c --- /dev/null +++ b/packages/vite-plugin-svelte/src/constants.js @@ -0,0 +1,3 @@ +export const PLUGIN_NAME_VPS = 'vite-plugin-svelte'; +export const PLUGIN_NAME_VPS_MODULE = 'vite-plugin-svelte-module'; +export const PLUGIN_NAME_VPS_TRAVERSER = 'vite-plugin-svelte-traverser'; diff --git a/packages/vite-plugin-svelte/src/index.js b/packages/vite-plugin-svelte/src/index.js index e458689f9..1d860a8a3 100644 --- a/packages/vite-plugin-svelte/src/index.js +++ b/packages/vite-plugin-svelte/src/index.js @@ -17,6 +17,10 @@ import { saveSvelteMetadata } from './utils/optimizer.js'; import { VitePluginSvelteCache } from './utils/vite-plugin-svelte-cache.js'; import { loadRaw } from './utils/load-raw.js'; import * as svelteCompiler from 'svelte/compiler'; +import * as constants from './constants.js'; +import { rollup } from 'rollup'; +import { createTreeShakePreprocess } from './utils/tree-shaking/phase1.js'; +import { DYNAMIC } from './utils/tree-shaking/shared.js'; /** * @param {Partial} [inlineOptions] @@ -37,15 +41,23 @@ export function svelte(inlineOptions) { let options; /** @type {import('vite').ResolvedConfig} */ let viteConfig; + /** @type {import('./types/tree-shaking.js').TreeShakePreprocess} */ + let treeShakePreprocess; /** @type {import('./types/compile.d.ts').CompileSvelte} */ let compileSvelte; /* eslint-enable no-unused-vars */ /** @type {import('./types/plugin-api.d.ts').PluginAPI} */ const api = {}; + /** @type {Record} */ + const propsByComponentId = {}; + /** @type {'tree-shake-traverser' | 'main' | undefined} */ + let buildPhase; + /** @type {string[]} */ + const svelteFileIds = []; /** @type {import('vite').Plugin[]} */ const plugins = [ { - name: 'vite-plugin-svelte', + name: constants.PLUGIN_NAME_VPS, // make sure our resolver runs before vite internal resolver to resolve svelte field correctly enforce: 'pre', api, @@ -69,13 +81,28 @@ export function svelte(inlineOptions) { patchResolvedViteConfig(config, options); requestParser = buildIdParser(options); compileSvelte = createCompileSvelte(); + treeShakePreprocess = createTreeShakePreprocess(); viteConfig = config; // TODO deep clone to avoid mutability from outside? api.options = options; log.debug('resolved options', options, 'config'); }, - async buildStart() { + async buildStart(rollupOptions) { + if (viteConfig.isProduction && options.experimental?.componentLevelTreeShaking) { + if (!buildPhase) { + buildPhase = 'tree-shake-traverser'; + const bundle = await rollup({ + ...rollupOptions, + cache: false, + output: [] + }); + await bundle.close(); + } + } else { + buildPhase = 'main'; + } + if (!options.prebundleSvelteLibraries) return; const isSvelteMetadataChanged = await saveSvelteMetadata(viteConfig.cacheDir, options); if (isSvelteMetadataChanged) { @@ -94,6 +121,9 @@ export function svelte(inlineOptions) { const ssr = !!opts?.ssr; const svelteRequest = requestParser(id, !!ssr); if (svelteRequest) { + if (buildPhase === 'tree-shake-traverser') { + svelteFileIds.push(id); + } const { filename, query, raw } = svelteRequest; if (raw) { const code = await loadRaw(svelteRequest, compileSvelte, options); @@ -140,12 +170,35 @@ export function svelte(inlineOptions) { async transform(code, id, opts) { const ssr = !!opts?.ssr; const svelteRequest = requestParser(id, ssr); + if (!svelteRequest || svelteRequest.query.type === 'style' || svelteRequest.raw) { return; } + let compileData; try { - compileData = await compileSvelte(svelteRequest, code, options); + if (buildPhase === 'tree-shake-traverser') { + const { componentUsage } = await treeShakePreprocess( + svelteRequest, + code, + id, + options, + this.resolve + ); + + for (const [componentId, props] of Object.entries(componentUsage)) { + propsByComponentId[componentId] ??= []; + propsByComponentId[componentId].push(...props); + } + } + + compileData = await compileSvelte( + svelteRequest, + code, + options, + id, + propsByComponentId[id] ?? [] + ); } catch (e) { cache.setError(svelteRequest, e); throw toRollupError(e, options); @@ -184,10 +237,13 @@ export function svelte(inlineOptions) { }, async buildEnd() { await options.stats?.finishAll(); + if (buildPhase === 'tree-shake-traverser') { + buildPhase = 'main'; + } } }, { - name: 'vite-plugin-svelte-module', + name: constants.PLUGIN_NAME_VPS_MODULE, enforce: 'post', async configResolved() { moduleRequestParser = buildModuleIdParser(options); @@ -211,6 +267,25 @@ export function svelte(inlineOptions) { } } }, + { + name: constants.PLUGIN_NAME_VPS_TRAVERSER, + enforce: 'post', + async moduleParsed(moduleInfo) { + if (buildPhase !== 'tree-shake-traverser') return; + + // If a Svelte file is imported from a JS file, we recognize the props as dynamic. + // This is because importing a Svelte file from a JS file usually indicates the user wants to perform a complex operation. + // TODO: Handle main.js + if (!svelteFileIds.includes(moduleInfo.id)) { + for (const importId of moduleInfo.importedIds) { + if (svelteFileIds.includes(importId)) { + propsByComponentId[moduleInfo.id] ??= []; + propsByComponentId[moduleInfo.id].push(DYNAMIC); + } + } + } + } + }, svelteInspector() ]; return plugins; diff --git a/packages/vite-plugin-svelte/src/public.d.ts b/packages/vite-plugin-svelte/src/public.d.ts index 63c053378..7821f9743 100644 --- a/packages/vite-plugin-svelte/src/public.d.ts +++ b/packages/vite-plugin-svelte/src/public.d.ts @@ -172,6 +172,13 @@ interface ExperimentalOptions { disableSvelteResolveWarnings?: boolean; compileModule?: CompileModuleOptions; + + /** + * Enable component-level tree shaking. + * If true, the plugin performs dead code elimination (DCE) on Svelte components. + * WARNING: This process traverses entire files, significantly increasing build time. + */ + componentLevelTreeShaking?: boolean; } interface CompileModuleOptions { diff --git a/packages/vite-plugin-svelte/src/types/compile.d.ts b/packages/vite-plugin-svelte/src/types/compile.d.ts index d6ba48e0f..bdab477b3 100644 --- a/packages/vite-plugin-svelte/src/types/compile.d.ts +++ b/packages/vite-plugin-svelte/src/types/compile.d.ts @@ -1,11 +1,14 @@ import type { Processed, CompileResult } from 'svelte/compiler'; import type { SvelteRequest } from './id.d.ts'; import type { ResolvedOptions } from './options.d.ts'; +import type { Props } from './tree-shaking.d.ts'; export type CompileSvelte = ( svelteRequest: SvelteRequest, code: string, - options: Partial + options: Partial, + id: string, + propsUsage: Props[] ) => Promise; export interface Code { diff --git a/packages/vite-plugin-svelte/src/types/tree-shaking.d.ts b/packages/vite-plugin-svelte/src/types/tree-shaking.d.ts new file mode 100644 index 000000000..de9b02b56 --- /dev/null +++ b/packages/vite-plugin-svelte/src/types/tree-shaking.d.ts @@ -0,0 +1,22 @@ +import type { SvelteRequest } from './id.d.ts'; +import type { ResolvedOptions } from './options.d.ts'; +import type { PluginContext } from 'rollup'; +import type { SourceMap } from 'magic-string'; + +export type TreeShakePreprocess = ( + svelteRequest: SvelteRequest, + code: string, + id: string, + options: Partial, + resolve: PluginContext['resolve'] +) => Promise<{ + dependencies: string[]; + map: string | object | undefined; + componentUsage: Record; +}>; + +type DYNAMIC = symbol; +export type ComponentId = string; +export type Props = Record | DYNAMIC; +type PropName = string; +type PropValue = any; diff --git a/packages/vite-plugin-svelte/src/utils/compile.js b/packages/vite-plugin-svelte/src/utils/compile.js index 12e240f0c..a9c6159b4 100644 --- a/packages/vite-plugin-svelte/src/utils/compile.js +++ b/packages/vite-plugin-svelte/src/utils/compile.js @@ -9,6 +9,7 @@ import { } from './preprocess.js'; import { mapToRelative } from './sourcemaps.js'; import { enhanceCompileError } from './error.js'; +import { treeShakeSvelteComponent } from './tree-shaking/phase2.js'; // TODO this is a patched version of https://github.com/sveltejs/vite-plugin-svelte/pull/796/files#diff-3bce0b33034aad4b35ca094893671f7e7ddf4d27254ae7b9b0f912027a001b15R10 // which is closer to the other regexes in at least not falling into commented script @@ -24,7 +25,7 @@ export function createCompileSvelte() { let stats; const devStylePreprocessor = createInjectScopeEverythingRulePreprocessorGroup(); /** @type {import('../types/compile.d.ts').CompileSvelte} */ - return async function compileSvelte(svelteRequest, code, options) { + return async function compileSvelte(svelteRequest, code, options, id, propsUsage) { const { filename, normalizedFilename, cssId, ssr, raw } = svelteRequest; const { emitCss = true } = options; /** @type {string[]} */ @@ -103,13 +104,20 @@ export function createCompileSvelte() { if (typeof preprocessed?.map === 'object') { mapToRelative(preprocessed?.map, filename); } + + let finalCode = preprocessed ? preprocessed.code : code; + + if (options.experimental?.componentLevelTreeShaking) { + finalCode = treeShakeSvelteComponent(finalCode, propsUsage); + } + if (raw && svelteRequest.query.type === 'preprocessed') { // @ts-expect-error shortcut return /** @type {import('../types/compile.d.ts').CompileData} */ { preprocessed: preprocessed ?? { code } }; } - const finalCode = preprocessed ? preprocessed.code : code; + const dynamicCompileOptions = await options?.dynamicCompileOptions?.({ filename, code: finalCode, diff --git a/packages/vite-plugin-svelte/src/utils/tree-shaking/phase1.js b/packages/vite-plugin-svelte/src/utils/tree-shaking/phase1.js new file mode 100644 index 000000000..ef9377c37 --- /dev/null +++ b/packages/vite-plugin-svelte/src/utils/tree-shaking/phase1.js @@ -0,0 +1,158 @@ +/** + * Traverse Svelte component files to collect Svelte component usage information for tree shaking. + */ + +import * as svelte from 'svelte/compiler'; +import { checkPreprocessDependencies } from '../preprocess.js'; +import { mapToRelative } from '../sourcemaps.js'; +import { walk } from 'zimmerframe'; +import { DYNAMIC } from './shared.js'; + +/** + * @param {string} id + * @param {import ('estree').ImportDeclaration} node + * @param {import('rollup').PluginContext["resolve"]} resolve + * @returns {Promise<{ id: import('rollup').ResolvedId | null, symbol: string} | undefined>} + */ +async function resolveImport(id, node, resolve) { + const { source, specifiers } = node; + const { value } = source; + if (typeof value !== 'string' || !value.endsWith('.svelte')) { + return; + } + + const resolved = await resolve(value, id); + const defaultSpecifier = specifiers.find( + (specifier) => specifier.type === 'ImportDefaultSpecifier' + ); + if (defaultSpecifier) { + return { id: resolved, symbol: defaultSpecifier.local.name }; + } + return undefined; +} + +/** + * @param {string} id + * @param {string} svelteCode + * @param {import('rollup').PluginContext["resolve"]} resolve + * @returns {Promise>} + */ +async function traverse(id, svelteCode, resolve) { + const ast = svelte.parse(svelteCode, { modern: true }); + + /** @type {ReturnType[]} */ + const resolvedImportPromises = []; + + /** + * @param {any} script + */ + async function walkScript(script) { + walk(script, /** @type {{imports: string[]}} */ ({ imports: [] }), { + ImportDeclaration(/** @type {import('estree').ImportDeclaration} */ node, { next }) { + resolvedImportPromises.push(resolveImport(id, node, resolve)); + next(); + } + }); + } + + ast.instance && walkScript(ast.instance); + ast.module && walkScript(ast.module); + + /** @type {Record} */ + const symbolToId = {}; + for (const result of await Promise.all(resolvedImportPromises)) { + if (result && result.id) { + symbolToId[result.symbol] = result.id; + } + } + + /** @type {Record} */ + const result = {}; + + walk( + /** @type {any} */ (ast.fragment), + {}, + { + Component(node, { next }) { + const componentSymbol = node.name; + /** @type {import('../../types/tree-shaking.js').Props} */ + const props = {}; + for (const attribute of node.attributes) { + if (attribute.type === 'Attribute') { + const { name } = attribute; + for (const value of attribute.value) { + if (value.type === 'Text') { + props[name] = value.raw; + } else if (value.type === 'ExpressionTag') { + const { expression } = value; + if (expression.type === 'Literal') { + props[name] = expression.value; + } else { + props[name] = DYNAMIC; + } + } + } + } + } + + const componentId = symbolToId[componentSymbol]; + if (componentId) { + result[componentId.id] ??= []; + result[componentId.id].push(props); + } + next(); + } + } + ); + + return result; +} + +/** + * @returns {import('../../types/tree-shaking.js').TreeShakePreprocess} + */ +export function createTreeShakePreprocess() { + /** @type {import('../../types/tree-shaking.js').TreeShakePreprocess} */ + return async function treeShakePreprocess(svelteRequest, code, id, options, resolve) { + /** @type {string[]} */ + const dependencies = []; + /** @type {import('svelte/compiler').Warning[]} */ + const warnings = []; + + let preprocessed; + if (svelteRequest) { + const { filename } = svelteRequest; + const preprocessors = options.preprocess; + if (preprocessors) { + try { + preprocessed = await svelte.preprocess(code, preprocessors, { filename }); // full filename here so postcss works + } catch (e) { + e.message = `Error while preprocessing ${filename}${e.message ? ` - ${e.message}` : ''}`; + throw e; + } + + if (preprocessed.dependencies?.length) { + const checked = checkPreprocessDependencies(filename, preprocessed.dependencies); + if (checked.warnings.length) { + warnings.push(...checked.warnings); + } + if (checked.dependencies.length) { + dependencies.push(...checked.dependencies); + } + } + } + if (typeof preprocessed?.map === 'object') { + mapToRelative(preprocessed?.map, filename); + } + } + + const finalCode = preprocessed ? preprocessed.code : code; + const componentUsage = await traverse(id, finalCode, resolve); + + return { + dependencies, + map: preprocessed?.map, + componentUsage + }; + }; +} diff --git a/packages/vite-plugin-svelte/src/utils/tree-shaking/phase2.js b/packages/vite-plugin-svelte/src/utils/tree-shaking/phase2.js new file mode 100644 index 000000000..99ebd1bd1 --- /dev/null +++ b/packages/vite-plugin-svelte/src/utils/tree-shaking/phase2.js @@ -0,0 +1,257 @@ +/** + * Perform dead code elimination for Svelte components using props value information. + * To avoid creating a sourcemap, this process replaces dead code with spaces. + */ + +import { parse } from 'svelte/compiler'; +import { walk } from 'zimmerframe'; +import MagicString from 'magic-string'; +import { DYNAMIC } from './shared.js'; + +/** + * @param {string} svelteCode + * @param {import('../../types/tree-shaking.js').Props[]} propsUsage + * @returns {string} + */ +export function treeShakeSvelteComponent(svelteCode, propsUsage) { + const magicString = new MagicString(svelteCode); + const ast = parse(svelteCode, { modern: true }); + /** @type {{ start: number; end: number }[]} */ + const removedRanges = []; + + /** + * @param {number} start + * @param {number} end + * @returns {string} + */ + function asSpace(start, end) { + return svelteCode.substring(start, end).replace(/\S/g, ' '); + } + + /** + * @param {number} start + * @param {number} end + */ + function remove(start, end) { + for (const removedRange of removedRanges) { + if (start >= removedRange.start && end <= removedRange.end) { + return; + } + } + removedRanges.push({ start, end }); + magicString.update(start, end, asSpace(start, end)); + } + + walk( + /** @type {any} */ (ast.fragment), + {}, + { + IfBlock(node, { next }) { + const { test } = node; + const evaluated = propsUsage.map((props) => { + return evaluateExpression(test, props); + }); + + let hasTrue = false; + let hasFalse = false; + let hasDynamic = false; + for (const v of evaluated) { + if (v === true) hasTrue = true; + if (v === false) hasFalse = true; + if (v === DYNAMIC) hasDynamic = true; + } + + if (!hasDynamic) { + const { consequent, alternate } = node; + const ifBodyStart = consequent.nodes[0].start; + const ifBodyEnd = consequent.nodes[consequent.nodes.length - 1].end; + if (hasTrue && !hasFalse) { + // Remove {#if xxx} + remove(node.start, ifBodyStart); + // Remove after elseif, else blocks and {/if} + remove(ifBodyEnd, node.end); + + node.alternate = undefined; + } else if (!hasTrue && hasFalse) { + // Remove {#if xxx} + remove(node.start, ifBodyStart); + + // Remove consequent block + remove(ifBodyStart, ifBodyEnd); + const alternateFirstChild = alternate.nodes[0]; + + if (alternateFirstChild.type === 'IfBlock') { + const elseIfTestStart = alternateFirstChild.test.start; + // Replace `{:else if` to `{#if` + magicString.update( + ifBodyEnd, + elseIfTestStart, + svelteCode.substring(ifBodyEnd, elseIfTestStart).replace('{:else if', ' {#if') + ); + } + + node.consequent = undefined; + } + } + + next(); + } + } + ); + + return magicString.toString(); +} + +/** + * @param {import('estree').Expression} node + * @param {import('../../types/tree-shaking.js').Props} props + * @returns {boolean | typeof DYNAMIC} + */ +function evaluateExpression(node, props) { + if (node.type === 'LogicalExpression') { + return evaluateLogicalExpression(node, props); + } + if (node.type === 'BinaryExpression') { + return evaluateBinaryExpression(node, props); + } + return DYNAMIC; +} + +/** + * @param {import('estree').LogicalExpression} node + * @param {import('../../types/tree-shaking.js').Props} props + * @returns {boolean | typeof DYNAMIC} + */ +function evaluateLogicalExpression(node, props) { + const { left, operator, right } = node; + const leftValue = getValue(left, props); + if (leftValue === DYNAMIC) { + return DYNAMIC; + } + const rightValue = getValue(right, props); + if (rightValue === DYNAMIC) { + return DYNAMIC; + } + return evaluateOperator( + evaluateExpression(leftValue, props), + operator, + evaluateExpression(rightValue, props) + ); +} + +/** + * @param {import('estree').BinaryExpression} node + * @param {import('../../types/tree-shaking.js').Props} props + * @returns {boolean | typeof DYNAMIC} + */ +function evaluateBinaryExpression(node, props) { + const { left, operator, right } = node; + const leftValue = getValue(left, props); + if (leftValue === DYNAMIC) { + return DYNAMIC; + } + const rightValue = getValue(right, props); + if (rightValue === DYNAMIC) { + return DYNAMIC; + } + + return evaluate(leftValue, operator, rightValue); +} + +/** + * @param {import('estree').Expression} node + * @param {import('../../types/tree-shaking.js').Props} props + * @returns {any | typeof DYNAMIC} + */ +function getValue(node, props) { + if (node.type === 'Literal') { + return node.value; + } + if (node.type === 'Identifier') { + if (props === DYNAMIC) { + return DYNAMIC; + } + if (typeof props !== 'symbol') { + return props[node.name] ?? DYNAMIC; + } + return DYNAMIC; + } +} + +/** + * @param {any} left + * @param {import ('estree').LogicalOperator} operator + * @param {any} right + * @returns {boolean | typeof DYNAMIC} + */ +function evaluateOperator(left, operator, right) { + switch (operator) { + case '&&': + return left && right; + case '||': + return left || right; + default: + return DYNAMIC; + } +} + +/** + * @param {any} left + * @param {import ('estree').BinaryOperator} operator + * @param {any} right + * @returns {boolean | typeof DYNAMIC} + */ +function evaluate(left, operator, right) { + try { + switch (operator) { + case '==': + return left == right; + case '!=': + return left != right; + case '===': + return left === right; + case '!==': + return left !== right; + case '<': + return left < right; + case '<=': + return left <= right; + case '>': + return left > right; + case '>=': + return left >= right; + case '<<': + return Boolean(left << right); + case '>>': + return Boolean(left >> right); + case '>>>': + return Boolean(left >>> right); + case '+': + return left + right; + case '-': + return Boolean(left - right); + case '*': + return Boolean(left * right); + case '/': + return Boolean(left / right); + case '%': + return Boolean(left % right); + case '**': + return Boolean(left ** right); + case '|': + return Boolean(left | right); + case '^': + return Boolean(left ^ right); + case '&': + return Boolean(left & right); + case 'in': + return left in right; + case 'instanceof': + return left instanceof right; + default: + return DYNAMIC; + } + } catch (e) { + return DYNAMIC; + } +} diff --git a/packages/vite-plugin-svelte/src/utils/tree-shaking/shared.js b/packages/vite-plugin-svelte/src/utils/tree-shaking/shared.js new file mode 100644 index 000000000..5368d5cfc --- /dev/null +++ b/packages/vite-plugin-svelte/src/utils/tree-shaking/shared.js @@ -0,0 +1 @@ +export const DYNAMIC = Symbol('DYNAMIC'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2840d0bb3..d0014b11f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,7 +30,7 @@ importers: version: 20.12.13 '@typescript-eslint/eslint-plugin': specifier: ^7.11.0 - version: 7.11.0(@typescript-eslint/parser@7.11.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.11.0 version: 7.11.0(eslint@8.57.0)(typescript@5.4.5) @@ -57,7 +57,7 @@ importers: version: 17.7.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) eslint-plugin-svelte: specifier: ^2.39.0 version: 2.39.0(eslint@8.57.0)(svelte@5.0.0-next.144) @@ -105,7 +105,7 @@ importers: version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.12.13) + version: 1.6.0(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests: devDependencies: @@ -117,7 +117,7 @@ importers: version: 1.2.2 vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.12.13) + version: 1.6.0(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/_test_dependencies/cjs-and-esm: {} @@ -139,7 +139,7 @@ importers: dependencies: e2e-test-dep-cjs-only: specifier: file:../cjs-only - version: file:packages/e2e-tests/_test_dependencies/cjs-only + version: link:../cjs-only packages/e2e-tests/_test_dependencies/svelte-hybrid: dependencies: @@ -148,7 +148,7 @@ importers: version: 20.12.13 e2e-test-dep-cjs-only: specifier: file:../cjs-only - version: file:packages/e2e-tests/_test_dependencies/cjs-only + version: link:../cjs-only packages/e2e-tests/_test_dependencies/svelte-module: {} @@ -156,19 +156,19 @@ importers: dependencies: e2e-test-dep-cjs-and-esm: specifier: file:../cjs-and-esm - version: file:packages/e2e-tests/_test_dependencies/cjs-and-esm + version: link:../cjs-and-esm e2e-test-dep-scss-only: specifier: file:../scss-only - version: file:packages/e2e-tests/_test_dependencies/scss-only + version: link:../scss-only e2e-test-dep-svelte-simple: specifier: file:../svelte-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-simple + version: link:../svelte-simple packages/e2e-tests/_test_dependencies/svelte-simple: dependencies: e2e-test-dep-cjs-only: specifier: file:../cjs-only - version: file:packages/e2e-tests/_test_dependencies/cjs-only + version: link:../cjs-only packages/e2e-tests/_test_dependencies/types-only: {} @@ -178,7 +178,7 @@ importers: dependencies: e2e-test-dep-svelte-simple: specifier: file:../_test_dependencies/svelte-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-simple + version: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': specifier: workspace:^ @@ -197,16 +197,16 @@ importers: version: 5.0.0-next.144 svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss-load-config@5.1.0)(postcss@8.4.38)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/configfile-custom: dependencies: e2e-test-dep-svelte-simple: specifier: file:../_test_dependencies/svelte-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-simple + version: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': specifier: workspace:^ @@ -216,13 +216,13 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/configfile-esm: dependencies: e2e-test-dep-svelte-simple: specifier: file:../_test_dependencies/svelte-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-simple + version: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': specifier: workspace:^ @@ -232,10 +232,10 @@ importers: version: 5.0.0-next.144 svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/css-dev-sourcemap: devDependencies: @@ -250,7 +250,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/custom-extensions: devDependencies: @@ -262,25 +262,25 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/dependencies: dependencies: e2e-test-dep-cjs-and-esm: specifier: file:../_test_dependencies/cjs-and-esm - version: file:packages/e2e-tests/_test_dependencies/cjs-and-esm + version: link:../_test_dependencies/cjs-and-esm e2e-test-dep-cjs-only: specifier: file:../_test_dependencies/cjs-only - version: file:packages/e2e-tests/_test_dependencies/cjs-only + version: link:../_test_dependencies/cjs-only e2e-test-dep-esm-only: specifier: file:../_test_dependencies/esm-only - version: file:packages/e2e-tests/_test_dependencies/esm-only + version: link:../_test_dependencies/esm-only e2e-test-dep-index-only: specifier: file:../_test_dependencies/index-only - version: file:packages/e2e-tests/_test_dependencies/index-only + version: link:../_test_dependencies/index-only e2e-test-dep-scss-only: specifier: file:../_test_dependencies/scss-only - version: file:packages/e2e-tests/_test_dependencies/scss-only + version: link:../_test_dependencies/scss-only packages/e2e-tests/dynamic-compile-options: devDependencies: @@ -292,7 +292,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/env: devDependencies: @@ -304,20 +304,20 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/hmr: dependencies: e2e-test-dep-svelte-simple: specifier: file:../_test_dependencies/svelte-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-simple + version: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': specifier: workspace:^ version: link:../../vite-plugin-svelte e2e-test-dep-vite-plugins: specifier: file:../_test_dependencies/vite-plugins - version: file:packages/e2e-tests/_test_dependencies/vite-plugins + version: link:../_test_dependencies/vite-plugins node-fetch: specifier: ^3.3.2 version: 3.3.2 @@ -326,7 +326,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/import-queries: devDependencies: @@ -341,13 +341,13 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/inspector-kit: devDependencies: '@sveltejs/kit': specifier: ^2.5.10 - version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12) + version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)) '@sveltejs/vite-plugin-svelte': specifier: workspace:^ version: link:../../vite-plugin-svelte @@ -356,7 +356,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/inspector-vite: devDependencies: @@ -368,16 +368,16 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/kit-node: devDependencies: '@sveltejs/adapter-node': specifier: ^5.0.1 - version: 5.0.1(@sveltejs/kit@2.5.10) + version: 5.0.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0))) '@sveltejs/kit': specifier: ^2.5.10 - version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12) + version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)) '@sveltejs/package': specifier: ^2.3.1 version: 2.3.1(svelte@5.0.0-next.144)(typescript@5.4.5) @@ -386,16 +386,16 @@ importers: version: link:../../vite-plugin-svelte e2e-test-dep-svelte-api-only: specifier: file:../_test_dependencies/svelte-api-only - version: file:packages/e2e-tests/_test_dependencies/svelte-api-only + version: link:../_test_dependencies/svelte-api-only e2e-test-dep-vite-plugins: specifier: file:../_test_dependencies/vite-plugins - version: file:packages/e2e-tests/_test_dependencies/vite-plugins + version: link:../_test_dependencies/vite-plugins svelte: specifier: ^5.0.0-next.144 version: 5.0.0-next.144 svelte-check: specifier: ^3.8.0 - version: 3.8.0(postcss@8.4.38)(svelte@5.0.0-next.144) + version: 3.8.0(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144) svelte-i18n: specifier: ^4.0.0 version: 4.0.0(svelte@5.0.0-next.144) @@ -407,16 +407,16 @@ importers: version: 5.4.5 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/package-json-svelte-field: dependencies: e2e-test-dep-svelte-hybrid: specifier: file:../_test_dependencies/svelte-hybrid - version: file:packages/e2e-tests/_test_dependencies/svelte-hybrid + version: link:../_test_dependencies/svelte-hybrid e2e-test-dep-svelte-nested: specifier: file:../_test_dependencies/svelte-nested - version: file:packages/e2e-tests/_test_dependencies/svelte-nested + version: link:../_test_dependencies/svelte-nested devDependencies: '@sveltejs/vite-plugin-svelte': specifier: workspace:^ @@ -429,28 +429,28 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/prebundle-svelte-deps: dependencies: e2e-test-dep-svelte-api-only: specifier: file:../_test_dependencies/svelte-api-only - version: file:packages/e2e-tests/_test_dependencies/svelte-api-only + version: link:../_test_dependencies/svelte-api-only e2e-test-dep-svelte-exports-simple: specifier: file:../_test_dependencies/svelte-exports-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-exports-simple + version: link:../_test_dependencies/svelte-exports-simple e2e-test-dep-svelte-hybrid: specifier: file:../_test_dependencies/svelte-hybrid - version: file:packages/e2e-tests/_test_dependencies/svelte-hybrid + version: link:../_test_dependencies/svelte-hybrid e2e-test-dep-svelte-module: specifier: file:../_test_dependencies/svelte-module - version: file:packages/e2e-tests/_test_dependencies/svelte-module + version: link:../_test_dependencies/svelte-module e2e-test-dep-svelte-nested: specifier: file:../_test_dependencies/svelte-nested - version: file:packages/e2e-tests/_test_dependencies/svelte-nested + version: link:../_test_dependencies/svelte-nested e2e-test-dep-svelte-simple: specifier: file:../_test_dependencies/svelte-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-simple + version: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': specifier: workspace:^ @@ -463,10 +463,10 @@ importers: version: 5.0.0-next.144 svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/preprocess-with-vite: devDependencies: @@ -484,13 +484,13 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/resolve-exports-svelte: dependencies: e2e-test-dep-svelte-exports-simple: specifier: file:../_test_dependencies/svelte-exports-simple - version: file:packages/e2e-tests/_test_dependencies/svelte-exports-simple + version: link:../_test_dependencies/svelte-exports-simple devDependencies: '@sveltejs/vite-plugin-svelte': specifier: workspace:^ @@ -500,7 +500,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/svelte-preprocess: devDependencies: @@ -515,13 +515,13 @@ importers: version: 5.0.0-next.144 svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) typescript: specifier: ^5.4.5 version: 5.4.5 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/e2e-tests/ts-type-import: devDependencies: @@ -539,7 +539,7 @@ importers: version: 5.0.0-next.144 svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) vite: specifier: ^5.2.12 version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) @@ -575,7 +575,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/playground: {} @@ -592,7 +592,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/playground/big: devDependencies: @@ -604,7 +604,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/playground/big-component-library: dependencies: @@ -629,19 +629,19 @@ importers: version: 5.0.0-next.144 svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/playground/big-component-library-kit: devDependencies: '@sveltejs/adapter-auto': specifier: 3.2.1 - version: 3.2.1(@sveltejs/kit@2.5.10) + version: 3.2.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0))) '@sveltejs/kit': specifier: ^2.5.10 - version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12) + version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)) '@sveltejs/vite-plugin-svelte': specifier: workspace:^ version: link:../../vite-plugin-svelte @@ -662,16 +662,16 @@ importers: version: 5.0.0-next.144 svelte-check: specifier: ^3.8.0 - version: 3.8.0(postcss@8.4.38)(svelte@5.0.0-next.144) + version: 3.8.0(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144) svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) typescript: specifier: ^5.4.5 version: 5.4.5 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/playground/big-component-library-vite-ssr: dependencies: @@ -708,10 +708,10 @@ importers: version: 5.0.0-next.144 svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + version: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/playground/kit-demo-app: devDependencies: @@ -723,10 +723,10 @@ importers: version: 2.2.1 '@sveltejs/adapter-auto': specifier: ^3.2.1 - version: 3.2.1(@sveltejs/kit@2.5.10) + version: 3.2.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0))) '@sveltejs/kit': specifier: ^2.5.10 - version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12) + version: 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)) '@sveltejs/vite-plugin-svelte': specifier: workspace:^ version: link:../../vite-plugin-svelte @@ -735,13 +735,13 @@ importers: version: 5.0.0-next.144 svelte-check: specifier: ^3.8.0 - version: 3.8.0(postcss@8.4.38)(svelte@5.0.0-next.144) + version: 3.8.0(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144) typescript: specifier: ^5.4.5 version: 5.4.5 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/playground/optimizedeps-include: devDependencies: @@ -756,7 +756,22 @@ importers: version: 0.6.12 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) + + packages/playground/treeshaking: + devDependencies: + '@sveltejs/vite-plugin-svelte': + specifier: workspace:^ + version: link:../../vite-plugin-svelte + e2e-test-dep-svelte-module: + specifier: workspace:^ + version: link:../../e2e-tests/_test_dependencies/svelte-module + svelte: + specifier: ^5.0.0-next.144 + version: 5.0.0-next.144 + vite: + specifier: ^5.2.12 + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/vite-plugin-svelte: dependencies: @@ -777,14 +792,23 @@ importers: version: 0.30.10 vitefu: specifier: ^0.2.5 - version: 0.2.5(vite@5.2.12) + version: 0.2.5(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)) + zimmerframe: + specifier: ^1.1.2 + version: 1.1.2 devDependencies: '@types/debug': specifier: ^4.1.12 version: 4.1.12 + '@types/estree': + specifier: ^1.0.5 + version: 1.0.5 esbuild: specifier: ^0.21.4 version: 0.21.4 + rollup: + specifier: ^4.18.0 + version: 4.18.0 sass: specifier: ^1.77.2 version: 1.77.2 @@ -793,7 +817,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages/vite-plugin-svelte-inspector: dependencies: @@ -812,7 +836,7 @@ importers: version: 5.0.0-next.144 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + version: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) packages: @@ -1465,8 +1489,8 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.9.6': - resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} + '@rollup/rollup-android-arm-eabi@4.18.0': + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} cpu: [arm] os: [android] @@ -1475,8 +1499,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.9.6': - resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} + '@rollup/rollup-android-arm64@4.18.0': + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} cpu: [arm64] os: [android] @@ -1485,8 +1509,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.9.6': - resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} + '@rollup/rollup-darwin-arm64@4.18.0': + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} cpu: [arm64] os: [darwin] @@ -1495,8 +1519,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.9.6': - resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} + '@rollup/rollup-darwin-x64@4.18.0': + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} cpu: [x64] os: [darwin] @@ -1505,8 +1529,13 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.9.6': - resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} cpu: [arm] os: [linux] @@ -1515,8 +1544,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.9.6': - resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} + '@rollup/rollup-linux-arm64-gnu@4.18.0': + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} cpu: [arm64] os: [linux] @@ -1525,18 +1554,23 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.9.6': - resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} + '@rollup/rollup-linux-arm64-musl@4.18.0': + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.13.1': resolution: {integrity: sha512-Jv1DkIvwEPAb+v25/Unrnnq9BO3F5cbFPT821n3S5litkz+O5NuXuNhqtPx5KtcwOTtaqkTsO+IVzJOsxd11aQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.9.6': - resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} cpu: [riscv64] os: [linux] @@ -1545,13 +1579,18 @@ packages: cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.18.0': + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.13.1': resolution: {integrity: sha512-zGRDulLTeDemR8DFYyFIQ8kMP02xpUsX4IBikc7lwL9PrwR3gWmX2NopqiGlI2ZVWMl15qZeUjumTwpv18N7sQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.9.6': - resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} + '@rollup/rollup-linux-x64-gnu@4.18.0': + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} cpu: [x64] os: [linux] @@ -1560,8 +1599,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.9.6': - resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} + '@rollup/rollup-linux-x64-musl@4.18.0': + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} cpu: [x64] os: [linux] @@ -1570,8 +1609,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.9.6': - resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} + '@rollup/rollup-win32-arm64-msvc@4.18.0': + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} cpu: [arm64] os: [win32] @@ -1580,8 +1619,8 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.9.6': - resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} + '@rollup/rollup-win32-ia32-msvc@4.18.0': + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} cpu: [ia32] os: [win32] @@ -1590,8 +1629,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.9.6': - resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} + '@rollup/rollup-win32-x64-msvc@4.18.0': + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} cpu: [x64] os: [win32] @@ -2242,55 +2281,6 @@ packages: peerDependencies: typescript: '>=5.0.4 <5.5' - e2e-test-dep-cjs-and-esm@file:packages/e2e-tests/_test_dependencies/cjs-and-esm: - resolution: {directory: packages/e2e-tests/_test_dependencies/cjs-and-esm, type: directory} - name: e2e-test-dep-cjs-and-esm - - e2e-test-dep-cjs-only@file:packages/e2e-tests/_test_dependencies/cjs-only: - resolution: {directory: packages/e2e-tests/_test_dependencies/cjs-only, type: directory} - name: e2e-test-dep-cjs-only - - e2e-test-dep-esm-only@file:packages/e2e-tests/_test_dependencies/esm-only: - resolution: {directory: packages/e2e-tests/_test_dependencies/esm-only, type: directory} - name: e2e-test-dep-esm-only - - e2e-test-dep-index-only@file:packages/e2e-tests/_test_dependencies/index-only: - resolution: {directory: packages/e2e-tests/_test_dependencies/index-only, type: directory} - name: e2e-test-dep-index-only - - e2e-test-dep-scss-only@file:packages/e2e-tests/_test_dependencies/scss-only: - resolution: {directory: packages/e2e-tests/_test_dependencies/scss-only, type: directory} - name: e2e-test-dep-scss-only - - e2e-test-dep-svelte-api-only@file:packages/e2e-tests/_test_dependencies/svelte-api-only: - resolution: {directory: packages/e2e-tests/_test_dependencies/svelte-api-only, type: directory} - name: e2e-test-dep-svelte-api-only - - e2e-test-dep-svelte-exports-simple@file:packages/e2e-tests/_test_dependencies/svelte-exports-simple: - resolution: {directory: packages/e2e-tests/_test_dependencies/svelte-exports-simple, type: directory} - name: e2e-test-dep-svelte-exports-simple - - e2e-test-dep-svelte-hybrid@file:packages/e2e-tests/_test_dependencies/svelte-hybrid: - resolution: {directory: packages/e2e-tests/_test_dependencies/svelte-hybrid, type: directory} - name: e2e-test-dep-svelte-hybrid - hasBin: true - - e2e-test-dep-svelte-module@file:packages/e2e-tests/_test_dependencies/svelte-module: - resolution: {directory: packages/e2e-tests/_test_dependencies/svelte-module, type: directory} - name: e2e-test-dep-svelte-module - - e2e-test-dep-svelte-nested@file:packages/e2e-tests/_test_dependencies/svelte-nested: - resolution: {directory: packages/e2e-tests/_test_dependencies/svelte-nested, type: directory} - name: e2e-test-dep-svelte-nested - - e2e-test-dep-svelte-simple@file:packages/e2e-tests/_test_dependencies/svelte-simple: - resolution: {directory: packages/e2e-tests/_test_dependencies/svelte-simple, type: directory} - name: e2e-test-dep-svelte-simple - - e2e-test-dep-vite-plugins@file:packages/e2e-tests/_test_dependencies/vite-plugins: - resolution: {directory: packages/e2e-tests/_test_dependencies/vite-plugins, type: directory} - name: e2e-test-dep-vite-plugins - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -3727,8 +3717,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.9.6: - resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} + rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4952,135 +4942,148 @@ snapshots: '@polka/url@1.0.0-next.24': {} - '@rollup/plugin-commonjs@25.0.7(rollup@4.9.6)': + '@rollup/plugin-commonjs@25.0.7(rollup@4.13.1)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.6) + '@rollup/pluginutils': 5.1.0(rollup@4.13.1) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.10 - rollup: 4.9.6 + optionalDependencies: + rollup: 4.13.1 - '@rollup/plugin-json@6.1.0(rollup@4.9.6)': + '@rollup/plugin-json@6.1.0(rollup@4.13.1)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.6) - rollup: 4.9.6 + '@rollup/pluginutils': 5.1.0(rollup@4.13.1) + optionalDependencies: + rollup: 4.13.1 - '@rollup/plugin-node-resolve@15.2.3(rollup@4.9.6)': + '@rollup/plugin-node-resolve@15.2.3(rollup@4.13.1)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.6) + '@rollup/pluginutils': 5.1.0(rollup@4.13.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.9.6 + optionalDependencies: + rollup: 4.13.1 - '@rollup/pluginutils@5.1.0(rollup@4.9.6)': + '@rollup/pluginutils@5.1.0(rollup@4.13.1)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.9.6 + optionalDependencies: + rollup: 4.13.1 '@rollup/rollup-android-arm-eabi@4.13.1': optional: true - '@rollup/rollup-android-arm-eabi@4.9.6': + '@rollup/rollup-android-arm-eabi@4.18.0': optional: true '@rollup/rollup-android-arm64@4.13.1': optional: true - '@rollup/rollup-android-arm64@4.9.6': + '@rollup/rollup-android-arm64@4.18.0': optional: true '@rollup/rollup-darwin-arm64@4.13.1': optional: true - '@rollup/rollup-darwin-arm64@4.9.6': + '@rollup/rollup-darwin-arm64@4.18.0': optional: true '@rollup/rollup-darwin-x64@4.13.1': optional: true - '@rollup/rollup-darwin-x64@4.9.6': + '@rollup/rollup-darwin-x64@4.18.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.13.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.9.6': + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.13.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.9.6': + '@rollup/rollup-linux-arm64-gnu@4.18.0': optional: true '@rollup/rollup-linux-arm64-musl@4.13.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.9.6': + '@rollup/rollup-linux-arm64-musl@4.18.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': optional: true '@rollup/rollup-linux-riscv64-gnu@4.13.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.9.6': + '@rollup/rollup-linux-riscv64-gnu@4.18.0': optional: true '@rollup/rollup-linux-s390x-gnu@4.13.1': optional: true + '@rollup/rollup-linux-s390x-gnu@4.18.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.13.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.9.6': + '@rollup/rollup-linux-x64-gnu@4.18.0': optional: true '@rollup/rollup-linux-x64-musl@4.13.1': optional: true - '@rollup/rollup-linux-x64-musl@4.9.6': + '@rollup/rollup-linux-x64-musl@4.18.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.13.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.9.6': + '@rollup/rollup-win32-arm64-msvc@4.18.0': optional: true '@rollup/rollup-win32-ia32-msvc@4.13.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.9.6': + '@rollup/rollup-win32-ia32-msvc@4.18.0': optional: true '@rollup/rollup-win32-x64-msvc@4.13.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.9.6': + '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true '@sinclair/typebox@0.27.8': {} - '@sveltejs/adapter-auto@3.2.1(@sveltejs/kit@2.5.10)': + '@sveltejs/adapter-auto@3.2.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)))': dependencies: - '@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12) + '@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)) import-meta-resolve: 4.1.0 - '@sveltejs/adapter-node@5.0.1(@sveltejs/kit@2.5.10)': + '@sveltejs/adapter-node@5.0.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)))': dependencies: - '@rollup/plugin-commonjs': 25.0.7(rollup@4.9.6) - '@rollup/plugin-json': 6.1.0(rollup@4.9.6) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.9.6) - '@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12) - rollup: 4.9.6 + '@rollup/plugin-commonjs': 25.0.7(rollup@4.13.1) + '@rollup/plugin-json': 6.1.0(rollup@4.13.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.13.1) + '@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)) + rollup: 4.13.1 - '@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12)': + '@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@packages+vite-plugin-svelte)(svelte@5.0.0-next.144)(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0))': dependencies: '@sveltejs/vite-plugin-svelte': link:packages/vite-plugin-svelte '@types/cookie': 0.6.0 @@ -5096,7 +5099,7 @@ snapshots: sirv: 2.0.4 svelte: 5.0.0-next.144 tiny-glob: 0.2.9 - vite: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + vite: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) '@sveltejs/package@2.3.1(svelte@5.0.0-next.144)(typescript@5.4.5)': dependencies: @@ -5161,7 +5164,7 @@ snapshots: '@types/unist@2.0.10': {} - '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0)(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) @@ -5174,6 +5177,7 @@ snapshots: ignore: 5.3.1 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -5186,6 +5190,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.11.0 debug: 4.3.4 eslint: 8.57.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -5202,6 +5207,7 @@ snapshots: debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -5218,6 +5224,7 @@ snapshots: minimatch: 9.0.4 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -5769,43 +5776,6 @@ snapshots: ts-api-utils: 1.0.3(typescript@5.4.5) typescript: 5.4.5 - e2e-test-dep-cjs-and-esm@file:packages/e2e-tests/_test_dependencies/cjs-and-esm: {} - - e2e-test-dep-cjs-only@file:packages/e2e-tests/_test_dependencies/cjs-only: {} - - e2e-test-dep-esm-only@file:packages/e2e-tests/_test_dependencies/esm-only: {} - - e2e-test-dep-index-only@file:packages/e2e-tests/_test_dependencies/index-only: {} - - e2e-test-dep-scss-only@file:packages/e2e-tests/_test_dependencies/scss-only: {} - - e2e-test-dep-svelte-api-only@file:packages/e2e-tests/_test_dependencies/svelte-api-only: - dependencies: - svelte: 5.0.0-next.144 - - e2e-test-dep-svelte-exports-simple@file:packages/e2e-tests/_test_dependencies/svelte-exports-simple: - dependencies: - e2e-test-dep-cjs-only: file:packages/e2e-tests/_test_dependencies/cjs-only - - e2e-test-dep-svelte-hybrid@file:packages/e2e-tests/_test_dependencies/svelte-hybrid: - dependencies: - '@types/node': 20.12.13 - e2e-test-dep-cjs-only: file:packages/e2e-tests/_test_dependencies/cjs-only - - e2e-test-dep-svelte-module@file:packages/e2e-tests/_test_dependencies/svelte-module: {} - - e2e-test-dep-svelte-nested@file:packages/e2e-tests/_test_dependencies/svelte-nested: - dependencies: - e2e-test-dep-cjs-and-esm: file:packages/e2e-tests/_test_dependencies/cjs-and-esm - e2e-test-dep-scss-only: file:packages/e2e-tests/_test_dependencies/scss-only - e2e-test-dep-svelte-simple: file:packages/e2e-tests/_test_dependencies/svelte-simple - - e2e-test-dep-svelte-simple@file:packages/e2e-tests/_test_dependencies/svelte-simple: - dependencies: - e2e-test-dep-cjs-only: file:packages/e2e-tests/_test_dependencies/cjs-only - - e2e-test-dep-vite-plugins@file:packages/e2e-tests/_test_dependencies/vite-plugins: {} - ee-first@1.1.1: {} electron-to-chromium@1.4.690: {} @@ -6045,13 +6015,14 @@ snapshots: minimatch: 9.0.4 semver: 7.6.2 - eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5): dependencies: eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.2.5 prettier-linter-helpers: 1.0.0 synckit: 0.8.6 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-plugin-svelte@2.39.0(eslint@8.57.0)(svelte@5.0.0-next.144): dependencies: @@ -6067,8 +6038,9 @@ snapshots: postcss-safe-parser: 6.0.0(postcss@8.4.38) postcss-selector-parser: 6.0.16 semver: 7.6.2 - svelte: 5.0.0-next.144 svelte-eslint-parser: 0.36.0(svelte@5.0.0-next.144) + optionalDependencies: + svelte: 5.0.0-next.144 transitivePeerDependencies: - supports-color - ts-node @@ -7214,14 +7186,16 @@ snapshots: postcss-load-config@3.1.4(postcss@8.4.38): dependencies: lilconfig: 2.1.0 - postcss: 8.4.38 yaml: 1.10.2 + optionalDependencies: + postcss: 8.4.38 postcss-load-config@5.1.0(postcss@8.4.38): dependencies: lilconfig: 3.1.1 - postcss: 8.4.38 yaml: 2.4.2 + optionalDependencies: + postcss: 8.4.38 postcss-safe-parser@6.0.0(postcss@8.4.38): dependencies: @@ -7407,23 +7381,26 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.13.1 fsevents: 2.3.3 - rollup@4.9.6: + rollup@4.18.0: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.6 - '@rollup/rollup-android-arm64': 4.9.6 - '@rollup/rollup-darwin-arm64': 4.9.6 - '@rollup/rollup-darwin-x64': 4.9.6 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 - '@rollup/rollup-linux-arm64-gnu': 4.9.6 - '@rollup/rollup-linux-arm64-musl': 4.9.6 - '@rollup/rollup-linux-riscv64-gnu': 4.9.6 - '@rollup/rollup-linux-x64-gnu': 4.9.6 - '@rollup/rollup-linux-x64-musl': 4.9.6 - '@rollup/rollup-win32-arm64-msvc': 4.9.6 - '@rollup/rollup-win32-ia32-msvc': 4.9.6 - '@rollup/rollup-win32-x64-msvc': 4.9.6 + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 run-applescript@5.0.0: @@ -7697,7 +7674,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@3.8.0(postcss@8.4.38)(svelte@5.0.0-next.144): + svelte-check@3.8.0(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144): dependencies: '@jridgewell/trace-mapping': 0.3.20 chokidar: 3.6.0 @@ -7706,7 +7683,7 @@ snapshots: picocolors: 1.0.1 sade: 1.8.1 svelte: 5.0.0-next.144 - svelte-preprocess: 5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5) + svelte-preprocess: 5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - '@babel/core' @@ -7726,6 +7703,7 @@ snapshots: espree: 9.6.1 postcss: 8.4.38 postcss-scss: 4.0.9(postcss@8.4.38) + optionalDependencies: svelte: 5.0.0-next.144 svelte-i18n@4.0.0(svelte@5.0.0-next.144): @@ -7739,28 +7717,19 @@ snapshots: svelte: 5.0.0-next.144 tiny-glob: 0.2.9 - svelte-preprocess@5.1.4(postcss-load-config@5.1.0)(postcss@8.4.38)(svelte@5.0.0-next.144)(typescript@5.4.5): + svelte-preprocess@5.1.4(postcss-load-config@5.1.0(postcss@8.4.38))(postcss@8.4.38)(sass@1.77.2)(stylus@0.63.0)(svelte@5.0.0-next.144)(typescript@5.4.5): dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 magic-string: 0.30.10 - postcss: 8.4.38 - postcss-load-config: 5.1.0(postcss@8.4.38) sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 5.0.0-next.144 - typescript: 5.4.5 - - svelte-preprocess@5.1.4(postcss@8.4.38)(sass@1.77.2)(svelte@5.0.0-next.144)(typescript@5.4.5): - dependencies: - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.30.10 + optionalDependencies: postcss: 8.4.38 + postcss-load-config: 5.1.0(postcss@8.4.38) sass: 1.77.2 - sorcery: 0.11.0 - strip-indent: 3.0.0 - svelte: 5.0.0-next.144 + stylus: 0.63.0 typescript: 5.4.5 svelte2tsx@0.7.0(svelte@5.0.0-next.144)(typescript@5.4.5): @@ -7953,7 +7922,24 @@ snapshots: vary@1.1.2: {} - vite-node@1.6.0(@types/node@20.12.13): + vite-node@1.6.0(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0): + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.1 + picocolors: 1.0.1 + vite: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vite-node@1.6.0(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0): dependencies: cac: 6.7.14 debug: 4.3.4 @@ -7970,24 +7956,67 @@ snapshots: - supports-color - terser - vite@5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0): + vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0): dependencies: - '@types/node': 20.12.13 esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.13.1 + rollup: 4.18.0 + optionalDependencies: + '@types/node': 20.11.5 + fsevents: 2.3.3 sass: 1.77.2 stylus: 0.63.0 + + vite@5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0): + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.18.0 optionalDependencies: + '@types/node': 20.12.13 fsevents: 2.3.3 + sass: 1.77.2 + stylus: 0.63.0 + + vitefu@0.2.5(vite@5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0)): + optionalDependencies: + vite: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) - vitefu@0.2.5(vite@5.2.12): + vitest@1.6.0(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0): dependencies: - vite: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + acorn-walk: 8.3.2 + chai: 4.3.10 + debug: 4.3.4 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.10 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.0.0 + tinybench: 2.5.1 + tinypool: 0.8.4 + vite: 5.2.12(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) + vite-node: 1.6.0(@types/node@20.11.5)(sass@1.77.2)(stylus@0.63.0) + why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.11.5 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser - vitest@1.6.0(@types/node@20.12.13): + vitest@1.6.0(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0): dependencies: - '@types/node': 20.12.13 '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 '@vitest/snapshot': 1.6.0 @@ -8006,8 +8035,10 @@ snapshots: tinybench: 2.5.1 tinypool: 0.8.4 vite: 5.2.12(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) - vite-node: 1.6.0(@types/node@20.12.13) + vite-node: 1.6.0(@types/node@20.12.13)(sass@1.77.2)(stylus@0.63.0) why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.12.13 transitivePeerDependencies: - less - lightningcss