diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index d04999d32..184be3408 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -44,6 +44,7 @@ "estree-walker": "^3.0.3", "magic-string": "^0.30.19", "periscopic": "^4.0.2", + "strip-literal": "^3.1.0", "turbo-stream": "^3.1.0", "vitefu": "^1.1.1" }, diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 1dd69d51a..8dd2e56ca 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -55,6 +55,7 @@ import { scanBuildStripPlugin } from './plugins/scan' import { validateImportPlugin } from './plugins/validate-import' import { vitePluginFindSourceMapURL } from './plugins/find-source-map-url' import { parseCssVirtual, toCssVirtual, parseIdQuery } from './plugins/shared' +import { stripLiteral } from 'strip-literal' const isRolldownVite = 'rolldownVersion' in vite @@ -702,10 +703,11 @@ export default function vitePluginRsc( if (!code.includes('import.meta.viteRsc.loadModule')) return const { server } = manager const s = new MagicString(code) - for (const match of code.matchAll( + for (const match of stripLiteral(code).matchAll( /import\.meta\.viteRsc\.loadModule\(([\s\S]*?)\)/dg, )) { - const argCode = match[1]!.trim() + const [argStart, argEnd] = match.indices![1]! + const argCode = code.slice(argStart, argEnd).trim() const [environmentName, entryName] = evalValue(`[${argCode}]`) let replacement: string if ( @@ -973,10 +975,11 @@ export default assetsManifest.bootstrapScriptContent; assert(this.environment.name !== 'client') const output = new MagicString(code) - for (const match of code.matchAll( + for (const match of stripLiteral(code).matchAll( /import\s*\.\s*meta\s*\.\s*viteRsc\s*\.\s*loadBootstrapScriptContent\(([\s\S]*?)\)/dg, )) { - const argCode = match[1]!.trim() + const [argStart, argEnd] = match.indices![1]! + const argCode = code.slice(argStart, argEnd).trim() const entryName = evalValue(argCode) assert( entryName, @@ -2087,11 +2090,12 @@ function vitePluginRscCss( const output = new MagicString(code) let importAdded = false - for (const match of code.matchAll( + for (const match of stripLiteral(code).matchAll( /import\.meta\.viteRsc\.loadCss\(([\s\S]*?)\)/dg, )) { const [start, end] = match.indices![0]! - const argCode = match[1]!.trim() + const [argStart, argEnd] = match.indices![1]! + const argCode = code.slice(argStart, argEnd).trim() let importer = id if (argCode) { const argValue = evalValue(argCode) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db0a7a5c2..ea574171f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -451,6 +451,9 @@ importers: periscopic: specifier: ^4.0.2 version: 4.0.2 + strip-literal: + specifier: ^3.1.0 + version: 3.1.0 turbo-stream: specifier: ^3.1.0 version: 3.1.0