Skip to content

Commit 3a7e7f4

Browse files
committed
refactor: add object hook filter to compile module plugin
1 parent b1dd3ca commit 3a7e7f4

File tree

3 files changed

+63
-27
lines changed

3 files changed

+63
-27
lines changed

packages/vite-plugin-svelte/src/index.js

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import { svelteInspector } from '@sveltejs/vite-plugin-svelte-inspector';
44
import { handleHotUpdate } from './handle-hot-update.js';
55
import { log, logCompilerWarnings } from './utils/log.js';
66
import { createCompileSvelte } from './utils/compile.js';
7-
import { buildIdFilter, buildIdParser, buildModuleIdParser } from './utils/id.js';
7+
import {
8+
buildIdFilter,
9+
buildIdParser,
10+
buildModuleIdFilter,
11+
buildModuleIdParser
12+
} from './utils/id.js';
813
import {
914
buildExtraViteConfig,
1015
validateInlineOptions,
@@ -47,6 +52,9 @@ export function svelte(inlineOptions) {
4752
/** @type {import('./types/id.d.ts').IdFilter} */
4853
let filter = { id: { include: [], exclude: [] } }; // set with correct values in configResolved
4954

55+
/** @type {import('./types/id.d.ts').IdFilter} */
56+
let moduleFilter = { id: { include: [], exclude: [] } }; // set with correct values in configResolved
57+
5058
/** @type {import('./types/plugin-api.d.ts').PluginAPI} */
5159
const api = {};
5260

@@ -217,24 +225,28 @@ export function svelte(inlineOptions) {
217225
name: 'vite-plugin-svelte-module',
218226
enforce: 'post',
219227
async configResolved() {
228+
moduleFilter = buildModuleIdFilter(options);
220229
moduleRequestParser = buildModuleIdParser(options);
221230
},
222-
async transform(code, id, opts) {
223-
const ssr = !!opts?.ssr;
224-
const moduleRequest = moduleRequestParser(id, ssr);
225-
if (!moduleRequest) {
226-
return;
227-
}
228-
try {
229-
const compileResult = svelteCompiler.compileModule(code, {
230-
dev: !viteConfig.isProduction,
231-
generate: ssr ? 'server' : 'client',
232-
filename: moduleRequest.filename
233-
});
234-
logCompilerWarnings(moduleRequest, compileResult.warnings, options);
235-
return compileResult.js;
236-
} catch (e) {
237-
throw toRollupError(e, options);
231+
transform: {
232+
filter: moduleFilter,
233+
async handler(code, id, opts) {
234+
const ssr = !!opts?.ssr;
235+
const moduleRequest = moduleRequestParser(id, ssr);
236+
if (!moduleRequest) {
237+
return;
238+
}
239+
try {
240+
const compileResult = svelteCompiler.compileModule(code, {
241+
dev: !viteConfig.isProduction,
242+
generate: ssr ? 'server' : 'client',
243+
filename: moduleRequest.filename
244+
});
245+
logCompilerWarnings(moduleRequest, compileResult.warnings, options);
246+
return compileResult.js;
247+
} catch (e) {
248+
throw toRollupError(e, options);
249+
}
238250
}
239251
}
240252
},

packages/vite-plugin-svelte/src/utils/id.js

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import path from 'node:path';
44
import process from 'node:process';
55
import { log } from './log.js';
66
import {
7+
DEFAULT_SVELTE_EXT,
78
DEFAULT_SVELTE_MODULE_EXT,
89
DEFAULT_SVELTE_MODULE_INFIX,
910
SVELTE_VIRTUAL_STYLE_ID_REGEX
@@ -214,15 +215,13 @@ function escapeRE(s) {
214215
* @returns {import('../types/id.d.ts').IdFilter}
215216
*/
216217
export function buildIdFilter(options) {
217-
const { include, exclude, extensions } = options;
218-
const extensionsRE = extensions
219-
? new RegExp(
220-
`\\.(?:${extensions
221-
.map((e) => (e.startsWith('.') ? e.slice(1) : e))
222-
.map(escapeRE)
223-
.join('|')})$`
224-
)
225-
: /\.svelte$/;
218+
const { include = [], exclude = [], extensions = DEFAULT_SVELTE_EXT } = options;
219+
const extensionsRE = new RegExp(
220+
`\\.(?:${extensions
221+
.map((e) => (e.startsWith('.') ? e.slice(1) : e))
222+
.map(escapeRE)
223+
.join('|')})$`
224+
);
226225
return {
227226
id: {
228227
include: [
@@ -251,6 +250,31 @@ export function buildIdParser(options) {
251250
};
252251
}
253252

253+
/**
254+
* @param {import('../types/options.d.ts').ResolvedOptions} options
255+
* @returns {import('../types/id.d.ts').IdFilter}
256+
*/
257+
export function buildModuleIdFilter(options) {
258+
const {
259+
infixes = DEFAULT_SVELTE_MODULE_INFIX,
260+
include = [],
261+
exclude = [],
262+
extensions = DEFAULT_SVELTE_MODULE_EXT
263+
} = options.experimental?.compileModule ?? {};
264+
const infixWithExtRE = new RegExp(
265+
`(?:${infixes.map(escapeRE).join('|')})(?:[^.\\\\/]+\\.)*(?:${extensions
266+
.map((e) => (e.startsWith('.') ? e.slice(1) : e))
267+
.map(escapeRE)
268+
.join('|')})$`
269+
);
270+
return {
271+
id: {
272+
include: [infixWithExtRE, .../**@type {Array<string|RegExp>}*/ asArray(include)],
273+
exclude: /**@type {Array<string|RegExp>}*/ asArray(exclude)
274+
}
275+
};
276+
}
277+
254278
/**
255279
* @param {import('../types/options.d.ts').ResolvedOptions} options
256280
* @returns {import('../types/id.d.ts').ModuleIdParser}

packages/vite-plugin-svelte/types/index.d.ts.map

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@
2626
null,
2727
null
2828
],
29-
"mappings": ";;;;aAIYA,OAAOA;;WAETC,mBAAmBA;;;;;;;;;;;kBAWZC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgGbC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAiDnBC,mBAAmBA;;;;;;;;;;;;;;;;WAgBnBC,oBAAoBA;;;;;;;;;;;;;;;MAezBC,SAASA;;kBAEGC,qBAAqBA;;;;;;;;;;;;;iBCvKtBC,MAAMA;iBCZNC,cAAcA;iBCgBRC,gBAAgBA",
29+
"mappings": ";;;;aAIYA,OAAOA;;WAETC,mBAAmBA;;;;;;;;;;;kBAWZC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgGbC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAiDnBC,mBAAmBA;;;;;;;;;;;;;;;;WAgBnBC,oBAAoBA;;;;;;;;;;;;;;;MAezBC,SAASA;;kBAEGC,qBAAqBA;;;;;;;;;;;;;iBClKtBC,MAAMA;iBCjBNC,cAAcA;iBCgBRC,gBAAgBA",
3030
"ignoreList": []
3131
}

0 commit comments

Comments
 (0)