diff --git a/packages/qwik-router/src/buildtime/vite/plugin.ts b/packages/qwik-router/src/buildtime/vite/plugin.ts index 50de22c9edc..8b2e8d13a2d 100644 --- a/packages/qwik-router/src/buildtime/vite/plugin.ts +++ b/packages/qwik-router/src/buildtime/vite/plugin.ts @@ -215,7 +215,9 @@ function qwikRouterPlugin(userOpts?: QwikRouterVitePluginOptions): any { }, async transform(code, id) { - if (id.startsWith('\0')) { + const isVirtualId = id.startsWith('\0'); + + if (isVirtualId) { return; } const ext = extname(id).toLowerCase(); diff --git a/packages/qwik/src/optimizer/src/plugins/plugin.ts b/packages/qwik/src/optimizer/src/plugins/plugin.ts index ce7a3b0958b..df6dd47e407 100644 --- a/packages/qwik/src/optimizer/src/plugins/plugin.ts +++ b/packages/qwik/src/optimizer/src/plugins/plugin.ts @@ -22,7 +22,7 @@ import type { } from '../types'; import { convertManifestToBundleGraph } from './bundle-graph'; import { createLinter, type QwikLinter } from './eslint-plugin'; -import { isWin, parseId } from './vite-utils'; +import { isVirtualId, isWin, parseId } from './vite-utils'; const REG_CTX_NAME = ['server']; @@ -470,7 +470,7 @@ export function createQwikPlugin(optimizerOptions: OptimizerOptions = {}) { importerId: string | undefined, resolveOpts?: Parameters>[2] ) => { - if (id.startsWith('\0')) { + if (isVirtualId(id)) { return; } const count = resolveIdCount++; @@ -627,7 +627,7 @@ export function createQwikPlugin(optimizerOptions: OptimizerOptions = {}) { id: string, loadOpts?: Parameters>[1] ): Promise => { - if (id.startsWith('\0') || id.startsWith('/@fs/')) { + if (isVirtualId(id) || id.startsWith('/@fs/')) { return; } const count = loadCount++; @@ -705,7 +705,7 @@ export function createQwikPlugin(optimizerOptions: OptimizerOptions = {}) { id: string, transformOpts: Parameters>[2] = {} ): Promise { - if (id.startsWith('\0')) { + if (isVirtualId(id)) { return; } const count = transformCount++; diff --git a/packages/qwik/src/optimizer/src/plugins/rollup.ts b/packages/qwik/src/optimizer/src/plugins/rollup.ts index 0fc572c16c7..d1f676b760b 100644 --- a/packages/qwik/src/optimizer/src/plugins/rollup.ts +++ b/packages/qwik/src/optimizer/src/plugins/rollup.ts @@ -18,6 +18,7 @@ import { type QwikPlugin, type QwikPluginOptions, } from './plugin'; +import { isVirtualId } from './vite-utils'; type QwikRollupPluginApi = { getOptimizer: () => Optimizer; @@ -94,21 +95,21 @@ export function qwikRollup(qwikRollupOpts: QwikRollupPluginOptions = {}): any { }, resolveId(id, importer) { - if (id.startsWith('\0')) { + if (isVirtualId(id)) { return null; } return qwikPlugin.resolveId(this, id, importer); }, load(id) { - if (id.startsWith('\0')) { + if (isVirtualId(id)) { return null; } return qwikPlugin.load(this, id); }, transform(code, id) { - if (id.startsWith('\0')) { + if (isVirtualId(id)) { return null; } return qwikPlugin.transform(this, code, id); diff --git a/packages/qwik/src/optimizer/src/plugins/vite-utils.ts b/packages/qwik/src/optimizer/src/plugins/vite-utils.ts index 6c1c8c3de58..a0d452cecee 100644 --- a/packages/qwik/src/optimizer/src/plugins/vite-utils.ts +++ b/packages/qwik/src/optimizer/src/plugins/vite-utils.ts @@ -77,6 +77,8 @@ export const findLocation = (e: Error): Loc | undefined => { return undefined; }; +export const isVirtualId = (id: string) => id.startsWith('\0'); + const safeParseInt = (nu: string) => { try { return parseInt(nu, 10); diff --git a/packages/qwik/src/optimizer/src/plugins/vite.ts b/packages/qwik/src/optimizer/src/plugins/vite.ts index 50e04f3130a..14e75693b8e 100644 --- a/packages/qwik/src/optimizer/src/plugins/vite.ts +++ b/packages/qwik/src/optimizer/src/plugins/vite.ts @@ -30,7 +30,7 @@ import { } from './plugin'; import { createRollupError, normalizeRollupOutputOptions } from './rollup'; import { VITE_DEV_CLIENT_QS, configureDevServer, configurePreviewServer } from './vite-dev-server'; -import { parseId } from './vite-utils'; +import { isVirtualId, parseId } from './vite-utils'; const DEDUPE = [QWIK_CORE_ID, QWIK_JSX_RUNTIME_ID, QWIK_JSX_DEV_RUNTIME_ID]; @@ -409,24 +409,30 @@ export function qwikVite(qwikViteOpts: QwikVitePluginOptions = {}): any { }, resolveId(id, importer, resolveIdOpts) { - if (id.startsWith('\0') || !fileFilter(id, 'resolveId')) { + const shouldResolveFile = fileFilter(id, 'resolveId'); + const isDevClientModule = isClientDevOnly && id === VITE_CLIENT_MODULE; + + if (isVirtualId(id) || !shouldResolveFile) { return null; } - if (isClientDevOnly && id === VITE_CLIENT_MODULE) { + if (isDevClientModule) { return id; } return qwikPlugin.resolveId(this, id, importer, resolveIdOpts); }, load(id, loadOpts) { - if (id.startsWith('\0') || !fileFilter(id, 'load')) { + const shouldLoadFile = fileFilter(id, 'load'); + const isDevClientModule = isClientDevOnly && id === VITE_CLIENT_MODULE; + + if (isVirtualId(id) || !shouldLoadFile) { return null; } id = qwikPlugin.normalizePath(id); - const opts = qwikPlugin.getOptions(); - if (isClientDevOnly && id === VITE_CLIENT_MODULE) { + if (isDevClientModule) { + const opts = qwikPlugin.getOptions(); return getViteDevModule(opts); } if (viteCommand === 'serve' && id.endsWith(QWIK_CLIENT_MANIFEST_ID)) { @@ -438,7 +444,10 @@ export function qwikVite(qwikViteOpts: QwikVitePluginOptions = {}): any { }, transform(code, id, transformOpts) { - if (id.startsWith('\0') || !fileFilter(id, 'transform') || id.includes('?raw')) { + const shouldTransformFile = fileFilter(id, 'transform'); + const isStringImportId = id.includes('?raw'); + + if (isVirtualId(id) || !shouldTransformFile || isStringImportId) { return null; } @@ -880,7 +889,7 @@ interface QwikVitePluginCommonOptions { * Predicate function to filter out files from the optimizer. hook for resolveId, load, and * transform */ - fileFilter?: (id: string, hook: string) => boolean; + fileFilter?: (id: string, hook: keyof VitePlugin) => boolean; /** * Run eslint on the source files for the ssr build or dev server. This can slow down startup on * large projects. Defaults to `true`