Skip to content

Commit 674e15c

Browse files
authored
fix: handle satisfies keyword for vite.addPlugin (#653)
* fix: handle `satisfies` keyword for `vite.addPlugin` * format * better naming (internal) * typo
1 parent 14122e7 commit 674e15c

File tree

5 files changed

+103
-1
lines changed

5 files changed

+103
-1
lines changed

.changeset/loose-crabs-sink.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'sv': patch
3+
---
4+
5+
fix: handle `satisfies` keyword for `vite.addPlugin`
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { sveltekit } from '@sveltejs/kit/vite';
2+
import examples from 'mdsvexamples/vite';
3+
import path from 'node:path';
4+
import { kitRoutes } from 'vite-plugin-kit-routes';
5+
import tailwindcss from '@tailwindcss/vite';
6+
import { browserslistToTargets } from 'lightningcss';
7+
import browserslist from 'browserslist';
8+
import { defineConfig, type UserConfig } from 'vite';
9+
10+
const $root = path.resolve(__dirname, './src');
11+
const $lib = path.resolve($root, './lib');
12+
const $routes = path.resolve($root, './routes');
13+
const $scripts = path.resolve($lib, './scripts');
14+
const $actions = path.resolve($lib, './actions');
15+
16+
const config = defineConfig({
17+
plugins: [
18+
// all plugins
19+
examples,
20+
tailwindcss(),
21+
sveltekit(),
22+
kitRoutes()
23+
],
24+
resolve: {
25+
alias: {
26+
$lib,
27+
$routes,
28+
$scripts,
29+
$actions
30+
}
31+
},
32+
build: {
33+
sourcemap: true,
34+
target: 'esnext',
35+
cssMinify: 'lightningcss'
36+
},
37+
css: {
38+
transformer: 'lightningcss',
39+
lightningcss: {
40+
targets: browserslistToTargets(browserslist('defaults, not ie 11'))
41+
}
42+
},
43+
experimental: { enableNativePlugin: true }
44+
}) satisfies UserConfig;
45+
46+
export default config;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import myPlugin from 'my-plugin';
2+
import { sveltekit } from '@sveltejs/kit/vite';
3+
import examples from 'mdsvexamples/vite';
4+
import path from 'node:path';
5+
import { kitRoutes } from 'vite-plugin-kit-routes';
6+
import tailwindcss from '@tailwindcss/vite';
7+
import { browserslistToTargets } from 'lightningcss';
8+
import browserslist from 'browserslist';
9+
import { defineConfig, type UserConfig } from 'vite';
10+
11+
const $root = path.resolve(__dirname, './src');
12+
const $lib = path.resolve($root, './lib');
13+
const $routes = path.resolve($root, './routes');
14+
const $scripts = path.resolve($lib, './scripts');
15+
const $actions = path.resolve($lib, './actions');
16+
17+
const config = defineConfig({
18+
plugins: [
19+
// all plugins
20+
examples,
21+
tailwindcss(),
22+
sveltekit(),
23+
kitRoutes(),
24+
myPlugin()
25+
],
26+
resolve: { alias: { $lib, $routes, $scripts, $actions } },
27+
build: {
28+
sourcemap: true,
29+
target: 'esnext',
30+
cssMinify: 'lightningcss'
31+
},
32+
css: {
33+
transformer: 'lightningcss',
34+
lightningcss: {
35+
targets: browserslistToTargets(browserslist('defaults, not ie 11'))
36+
}
37+
},
38+
experimental: { enableNativePlugin: true }
39+
}) satisfies UserConfig;
40+
41+
export default config;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { imports, vite, type AstTypes } from '@sveltejs/cli-core/js';
2+
3+
export function run(ast: AstTypes.Program): void {
4+
const vitePluginName = 'myPlugin';
5+
imports.addDefault(ast, { as: vitePluginName, from: 'my-plugin' });
6+
vite.addPlugin(ast, { code: `${vitePluginName}()` });
7+
}

packages/core/tooling/js/vite.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ function exportDefaultConfig(
1717
fallbackExpression = object.create({});
1818
}
1919

20-
const { value: rootObject } = exports.createDefault(ast, { fallback: fallbackExpression });
20+
const { value } = exports.createDefault(ast, { fallback: fallbackExpression });
21+
22+
// Handle TypeScript `satisfies` expressions
23+
const rootObject = value.type === 'TSSatisfiesExpression' ? value.expression : value;
2124

2225
// Handle wrapper functions (e.g., defineConfig({})) if ignoreWrapper is specified
2326
let configObject: AstTypes.ObjectExpression;

0 commit comments

Comments
 (0)