Skip to content

Commit

Permalink
feat(config): dynamically generate list of svelte exports (#941)
Browse files Browse the repository at this point in the history
* feat(config): dynamically generate list of svelte exports

* fix(optimizeDeps): don't optimize server-only exports of svelte
  • Loading branch information
dominikg committed Jul 11, 2024
1 parent e9f048c commit ab2dd12
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 16 deletions.
5 changes: 5 additions & 0 deletions .changeset/lemon-trains-hear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/vite-plugin-svelte': minor
---

feat(config): dynamically extract list of svelte exports from peer dependency so that new exports work automatically"
5 changes: 5 additions & 0 deletions .changeset/old-ants-remain.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/vite-plugin-svelte': patch
---

fix(optimizeDeps): avoid to optimise server only entrypoints of svelte that are never used on the client
8 changes: 6 additions & 2 deletions packages/e2e-tests/kit-node/__tests__/kit.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -300,14 +300,15 @@ describe('kit-node', () => {
'e2e-test-dep-svelte-api-only',
'svelte/animate',
'svelte/easing',
'svelte/events',
'svelte/internal',
'svelte/internal/client',
'svelte/motion',
'svelte/reactivity',
'svelte/store',
'svelte/transition',
'svelte',
'svelte/internal/disclose-version',
'svelte/internal/server',
'svelte/server',
'svelte/legacy',
'svelte-i18n > deepmerge',
'svelte-i18n > cli-color',
Expand All @@ -326,8 +327,11 @@ describe('kit-node', () => {
const expectedDedupe = [
'svelte/animate',
'svelte/easing',
'svelte/events',
'svelte/internal',
'svelte/internal/client',
'svelte/motion',
'svelte/reactivity',
'svelte/store',
'svelte/transition',
'svelte',
Expand Down
30 changes: 17 additions & 13 deletions packages/vite-plugin-svelte/src/utils/constants.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
import { createRequire } from 'node:module';

export const VITE_RESOLVE_MAIN_FIELDS = ['browser', 'module', 'jsnext:main', 'jsnext'];

export const SVELTE_RESOLVE_MAIN_FIELDS = ['svelte'];

export const SVELTE_IMPORTS = [
'svelte/animate',
'svelte/easing',
'svelte/internal',
'svelte/internal/disclose-version',
'svelte/motion',
'svelte/store',
'svelte/transition',
'svelte/server',
'svelte/internal/server',
'svelte/legacy',
'svelte'
];
export const SVELTE_IMPORTS = Object.entries(
createRequire(import.meta.url)('svelte/package.json').exports
)
.map(([name, config]) => {
// ignore type only
if (typeof config === 'object' && Object.keys(config).length === 1 && config.types) {
return '';
}
// ignore names
if (name === './package.json' || name === './compiler') {
return '';
}
return name.replace(/^\./, 'svelte');
})
.filter((s) => s.length > 0);

export const SVELTE_EXPORT_CONDITIONS = ['svelte'];

Expand Down
4 changes: 3 additions & 1 deletion packages/vite-plugin-svelte/src/utils/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,9 @@ function buildExtraConfigForSvelte(config) {
/** @type {string[]} */
const exclude = [];
if (!isDepExcluded('svelte', config.optimizeDeps?.exclude ?? [])) {
const svelteImportsToInclude = SVELTE_IMPORTS;
const svelteImportsToInclude = SVELTE_IMPORTS.filter(
(si) => !(si.endsWith('/server') || si.includes('/server/'))
);
log.debug(
`adding bare svelte packages to optimizeDeps.include: ${svelteImportsToInclude.join(', ')} `,
undefined,
Expand Down

0 comments on commit ab2dd12

Please sign in to comment.