@wyw-in-js/vite 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm/index.mjs CHANGED
@@ -8,7 +8,21 @@ import { existsSync } from 'fs';
8
8
  import path from 'path';
9
9
  import { createFilter, loadEnv } from 'vite';
10
10
  import { asyncResolverFactory, logger, syncResolve } from '@wyw-in-js/shared';
11
- import { createFileReporter, getFileIdx, transform, TransformCacheCollection } from '@wyw-in-js/transform';
11
+ import * as transformPkg from '@wyw-in-js/transform';
12
+ const {
13
+ createTransformManifest,
14
+ createFileReporter,
15
+ getFileIdx,
16
+ stringifyTransformManifest,
17
+ transform,
18
+ TransformCacheCollection
19
+ } = transformPkg;
20
+ const createMetadataManifest = (metadata, context) => typeof createTransformManifest === 'function' ? createTransformManifest(metadata, context) : {
21
+ ...metadata,
22
+ ...context,
23
+ version: 1
24
+ };
25
+ const stringifyMetadataManifest = manifest => typeof stringifyTransformManifest === 'function' ? stringifyTransformManifest(manifest) : `${JSON.stringify(manifest, null, 2)}\n`;
12
26
  const isWindowsAbsolutePath = value => /^[a-zA-Z]:[\\/]/.test(value);
13
27
  const normalizeToPosix = value => value.replace(/\\/g, path.posix.sep);
14
28
  const isInside = (childPath, parentPath) => {
@@ -27,6 +41,86 @@ const stripExtension = value => {
27
41
  const ext = path.posix.extname(value);
28
42
  return ext ? value.slice(0, -ext.length) : value;
29
43
  };
44
+ const getComparableAssetPaths = (value, rootDir) => {
45
+ const variants = new Set();
46
+ const normalized = normalizeToPosix(value);
47
+ variants.add(normalized);
48
+ if (path.isAbsolute(value) || isWindowsAbsolutePath(normalized)) {
49
+ if (isInside(value, rootDir)) {
50
+ const relativeToRoot = normalizeAssetRelativePath(path.relative(rootDir, value));
51
+ if (relativeToRoot) {
52
+ variants.add(relativeToRoot);
53
+ }
54
+ }
55
+ return variants;
56
+ }
57
+ const relativePath = normalizeAssetRelativePath(value);
58
+ if (relativePath) {
59
+ variants.add(relativePath);
60
+ }
61
+ return variants;
62
+ };
63
+ const getStringValues = value => {
64
+ if (!Array.isArray(value)) return [];
65
+ return value.filter(item => typeof item === 'string');
66
+ };
67
+ const getOutputAssetNames = asset => [...(typeof asset.name === 'string' ? [asset.name] : []), ...getStringValues(asset.names), ...(typeof asset.originalFileName === 'string' ? [asset.originalFileName] : []), ...getStringValues(asset.originalFileNames)];
68
+ const isOutputAssetLike = value => !!value && typeof value === 'object' && value.type === 'asset' && typeof value.fileName === 'string';
69
+ const isOutputChunkLike = value => !!value && typeof value === 'object' && value.type === 'chunk' && typeof value.fileName === 'string' && typeof value.code === 'string';
70
+ const getTrackedModuleIdForChunk = (chunk, cssFilesByModuleId) => {
71
+ if (typeof chunk.facadeModuleId === 'string' && cssFilesByModuleId.has(chunk.facadeModuleId)) {
72
+ return chunk.facadeModuleId;
73
+ }
74
+ if (!Array.isArray(chunk.moduleIds)) {
75
+ return null;
76
+ }
77
+ const moduleId = chunk.moduleIds.find(id => typeof id === 'string' && cssFilesByModuleId.has(id));
78
+ return moduleId ?? null;
79
+ };
80
+ const findWywCssAssetFileName = (bundle, cssFilename, rootDir) => {
81
+ const expectedNames = getComparableAssetPaths(cssFilename, rootDir);
82
+ for (const item of Object.values(bundle)) {
83
+ if (isOutputAssetLike(item) && item.fileName.endsWith('.css')) {
84
+ const isMatch = getOutputAssetNames(item).some(assetName => {
85
+ const variants = getComparableAssetPaths(assetName, rootDir);
86
+ return Array.from(variants).some(variant => expectedNames.has(variant));
87
+ });
88
+ if (isMatch) {
89
+ return normalizeToPosix(item.fileName);
90
+ }
91
+ }
92
+ }
93
+ return null;
94
+ };
95
+ const getRelativeImportPath = (fromFileName, toFileName) => {
96
+ const fromDir = path.posix.dirname(normalizeToPosix(fromFileName));
97
+ const relativePath = path.posix.relative(fromDir, normalizeToPosix(toFileName));
98
+ return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
99
+ };
100
+ const escapeForRegExp = value => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
101
+ const hasStaticImport = (code, specifier) => new RegExp(`(^|\\n)\\s*import\\s*(?:["']${escapeForRegExp(specifier)}["']|[^\\n;]+\\s+from\\s+["']${escapeForRegExp(specifier)}["'])`, 'm').test(code);
102
+ const hasRequireCall = (code, specifier) => new RegExp(`(^|[;\\n])\\s*require\\(\\s*["']${escapeForRegExp(specifier)}["']\\s*\\)`, 'm').test(code);
103
+ const getCssLoadStatement = (format, specifier) => format === 'cjs' ? `require(${JSON.stringify(specifier)});\n` : `import ${JSON.stringify(specifier)};\n`;
104
+ const hasCssLoadStatement = (code, specifier, format) => format === 'cjs' ? hasRequireCall(code, specifier) : hasStaticImport(code, specifier);
105
+ const prependCssLoadStatement = (code, specifier, format) => {
106
+ const statement = getCssLoadStatement(format, specifier);
107
+ let insertAt = 0;
108
+ if (code.startsWith('#!')) {
109
+ const lineBreakIndex = code.indexOf('\n');
110
+ if (lineBreakIndex >= 0) {
111
+ insertAt = lineBreakIndex + 1;
112
+ } else {
113
+ return `${code}\n${statement}`;
114
+ }
115
+ }
116
+ if (format === 'cjs') {
117
+ const directiveMatch = /^(?:\s*(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*');)+/.exec(code.slice(insertAt));
118
+ if (directiveMatch) {
119
+ insertAt += directiveMatch[0].length;
120
+ }
121
+ }
122
+ return `${code.slice(0, insertAt)}${statement}${code.slice(insertAt)}`;
123
+ };
30
124
  const VITE_FS_PREFIX = '/@fs/';
31
125
  const safeDecodeURIComponent = value => {
32
126
  try {
@@ -129,9 +223,12 @@ export default function wywInJS({
129
223
  transformLibraries,
130
224
  ...rest
131
225
  } = {}) {
226
+ const supportedModuleExtensions = new Set(['.cjs', '.cts', '.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx']);
132
227
  const filter = createFilter(include, exclude);
133
228
  const cssLookup = {};
134
229
  const cssFileLookup = {};
230
+ const metadataLookup = {};
231
+ const cssFilesByModuleId = new Map();
135
232
  const pendingCssReloads = new WeakMap();
136
233
  let ssrDevCssVersion = 0;
137
234
  let config;
@@ -155,6 +252,21 @@ export default function wywInJS({
155
252
  emitter,
156
253
  onDone
157
254
  } = createFileReporter(debug ?? false);
255
+ const isSafeAssetPath = fileName => fileName !== '' && fileName !== '..' && !fileName.startsWith(`..${path.posix.sep}`) && !path.posix.isAbsolute(fileName) && !isWindowsAbsolutePath(fileName);
256
+ const replaceModuleExtension = (filename, nextExtension) => {
257
+ const extension = path.extname(filename);
258
+ return supportedModuleExtensions.has(extension) ? `${filename.slice(0, -extension.length)}${nextExtension}` : `${filename}${nextExtension}`;
259
+ };
260
+ const toBundleRelativePath = filename => {
261
+ const relativePath = normalizeToPosix(path.relative(config.root, filename));
262
+ if (isSafeAssetPath(relativePath)) {
263
+ return relativePath;
264
+ }
265
+ if (!path.isAbsolute(relativePath) && !isWindowsAbsolutePath(relativePath)) {
266
+ return path.posix.join('_wyw-in-js', 'external', ...relativePath.split(path.posix.sep).filter(Boolean).map(segment => segment === '..' ? '__up__' : segment));
267
+ }
268
+ return path.posix.join('_wyw-in-js', 'external', ...normalizeToPosix(path.resolve(filename)).split(path.posix.sep).filter(Boolean).map(segment => segment.replace(/:$/, '')));
269
+ };
158
270
  const scheduleCssReload = (reloadTarget, cssFilename) => {
159
271
  let state = pendingCssReloads.get(reloadTarget);
160
272
  if (!state) {
@@ -285,6 +397,11 @@ export default function wywInJS({
285
397
  return {
286
398
  name: 'wyw-in-js',
287
399
  enforce: 'post',
400
+ buildStart() {
401
+ Object.keys(metadataLookup).forEach(key => {
402
+ delete metadataLookup[key];
403
+ });
404
+ },
288
405
  buildEnd() {
289
406
  onDone(process.cwd());
290
407
  },
@@ -405,6 +522,41 @@ export default function wywInJS({
405
522
  }
406
523
  return affected.map(target => devServer.moduleGraph.getModuleById(target.id)).concat(ctx.modules).filter(m => !!m);
407
524
  },
525
+ generateBundle(outputOptions, bundle) {
526
+ Object.entries(metadataLookup).forEach(([fileName, source]) => {
527
+ this.emitFile({
528
+ fileName,
529
+ source,
530
+ type: 'asset'
531
+ });
532
+ });
533
+ if (config.command !== 'build') return;
534
+ if (!outputOptions.preserveModules) return;
535
+ if (config.build.cssCodeSplit === false) return;
536
+ Object.values(bundle).forEach(item => {
537
+ if (!isOutputChunkLike(item)) {
538
+ return;
539
+ }
540
+ const chunk = item;
541
+ const moduleId = getTrackedModuleIdForChunk(chunk, cssFilesByModuleId);
542
+ if (!moduleId) {
543
+ return;
544
+ }
545
+ const cssFilename = cssFilesByModuleId.get(moduleId);
546
+ if (!cssFilename) {
547
+ return;
548
+ }
549
+ const emittedCssFileName = findWywCssAssetFileName(bundle, cssFilename, config.root);
550
+ if (!emittedCssFileName) {
551
+ return;
552
+ }
553
+ const relativeCssImport = getRelativeImportPath(chunk.fileName, emittedCssFileName);
554
+ if (hasCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format)) {
555
+ return;
556
+ }
557
+ chunk.code = prependCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format);
558
+ });
559
+ },
408
560
  async transform(code, url, transformOptions) {
409
561
  const [id] = url.split('?', 1);
410
562
 
@@ -439,6 +591,29 @@ export default function wywInJS({
439
591
  };
440
592
  const asyncResolve = isSsr ? asyncResolveSsr : asyncResolveClient;
441
593
  const result = await transform(transformServices, code, asyncResolve);
594
+ result.diagnostics?.forEach(diagnostic => {
595
+ this.warn({
596
+ id: diagnostic.filename,
597
+ loc: diagnostic.start ? {
598
+ column: diagnostic.start.column,
599
+ file: diagnostic.filename,
600
+ line: diagnostic.start.line
601
+ } : undefined,
602
+ message: `[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`,
603
+ pluginCode: diagnostic.category
604
+ });
605
+ });
606
+ const relativeId = normalizeToPosix(path.relative(config.root, id));
607
+ const metadataFilename = replaceModuleExtension(id, '.wyw-in-js.json');
608
+ const metadataRelativePath = toBundleRelativePath(metadataFilename);
609
+ delete metadataLookup[metadataRelativePath];
610
+ if (result.metadata) {
611
+ const cssFile = typeof result.cssText === 'string' && result.cssText !== '' ? replaceModuleExtension(relativeId, '.wyw-in-js.css') : undefined;
612
+ metadataLookup[metadataRelativePath] = stringifyMetadataManifest(createMetadataManifest(result.metadata, {
613
+ cssFile,
614
+ source: relativeId
615
+ }));
616
+ }
442
617
  let {
443
618
  cssText,
444
619
  dependencies
@@ -450,9 +625,11 @@ export default function wywInJS({
450
625
  // 3. cssText is not empty, it means that file was transformed and it contains styles
451
626
 
452
627
  if (typeof cssText === 'undefined') {
628
+ cssFilesByModuleId.delete(id);
453
629
  return;
454
630
  }
455
631
  if (cssText === '') {
632
+ cssFilesByModuleId.delete(id);
456
633
  /* eslint-disable-next-line consistent-return */
457
634
  return {
458
635
  code: result.code,
@@ -460,8 +637,9 @@ export default function wywInJS({
460
637
  };
461
638
  }
462
639
  dependencies ??= [];
463
- const cssFilename = path.normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`).replace(/\\/g, path.posix.sep);
464
- const cssRelativePath = path.relative(config.root, cssFilename).replace(/\\/g, path.posix.sep);
640
+ const cssFilename = normalizeToPosix(replaceModuleExtension(id, '.wyw-in-js.css'));
641
+ cssFilesByModuleId.set(id, cssFilename);
642
+ const cssRelativePath = normalizeToPosix(path.relative(config.root, cssFilename));
465
643
  const cssId = `/${cssRelativePath}`;
466
644
  if (sourceMap && result.cssSourceMapText) {
467
645
  const map = Buffer.from(result.cssSourceMapText).toString('base64');
package/esm/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["existsSync","path","createFilter","loadEnv","asyncResolverFactory","logger","syncResolve","createFileReporter","getFileIdx","transform","TransformCacheCollection","isWindowsAbsolutePath","value","test","normalizeToPosix","replace","posix","sep","isInside","childPath","parentPath","rel","relative","startsWith","isAbsolute","isWywCssAssetName","endsWith","normalizeAssetRelativePath","normalized","normalize","stripExtension","ext","extname","slice","length","VITE_FS_PREFIX","safeDecodeURIComponent","decodeURIComponent","normalizeViteFsPath","fsPath","isCssReloadTarget","reloadTarget","moduleGraph","getModuleById","reloadModule","getCssReloadTarget","environment","server","module","getWywCssAssetFileNames","resolvedConfig","output","originalAssetFileNames","preserveModules","rootDir","root","preserveModulesRootValue","preserveModulesRoot","preserveModulesRootAbs","resolve","preserveModulesRootRel","assetInfo","template","assetName","name","includes","relativePath","assetNameNormalized","preserveRel","withoutExt","dir","dirname","idx","indexOf","prefix","wywInJS","debug","include","exclude","sourceMap","preserveCssPaths","keepComments","prefixer","preprocessor","ssrDevCss","ssrDevCssPath","transformLibraries","rest","filter","cssLookup","cssFileLookup","pendingCssReloads","WeakMap","ssrDevCssVersion","config","devServer","importMetaEnvForEval","ssrDevCssEnabled","Boolean","ssrDevCssPathname","ssrDevCssQuery","split","ssrDevCssRoute","getSsrDevCssHref","versionParam","query","getSsrDevCssContents","entries","Object","merged","sort","a","b","localeCompare","map","cssText","join","emitter","onDone","scheduleCssReload","cssFilename","state","get","files","Set","set","add","timer","setTimeout","undefined","ids","Array","from","clear","id","targets","clientCache","ssrCache","caches","getCache","isSsr","isInsideCacheDir","filename","cacheDir","getDepsOptimizer","environments","client","depsOptimizer","_depsOptimizer","waitForOptimizedDep","isOptimizedDepFile","init","scanProcessing","info","metadata","depInfoList","find","item","file","processing","viteResolver","resolveClient","what","importer","Error","resolveSsr","createAsyncResolver","resolved","stack","log","extend","resolvedId","asyncResolveClient","asyncResolveSsr","enforce","buildEnd","process","cwd","configResolved","createResolver","command","outputs","build","rollupOptions","outputEntries","isArray","forEach","entry","assetFileNames","assetsDir","envPrefix","envDir","loaded","mode","base","BASE_URL","MODE","DEV","PROD","SSR","ssr","configureServer","_server","middlewares","use","req","res","next","url","pathname","etag","ifNoneMatch","headers","statusCode","end","setHeader","transformIndexHtml","html","tags","tag","attrs","href","injectTo","load","resolveId","importeeUrl","handleHotUpdate","ctx","modules","affected","x","dependencies","some","dep","m","deps","flatMap","target","depId","cache","invalidateForFile","concat","code","transformOptions","overrideContext","context","env","withEnv","__wyw_import_meta_env","transformServices","options","pluginOptions","emitWarning","message","warn","eventEmitter","asyncResolve","result","cssRelativePath","cssId","cssSourceMapText","Buffer","toString","didCssChange","JSON","stringify","i","depModule","isEntry","t","push"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains a Vite loader for wyw-in-js.\n * It uses the transform.ts function to generate class names from source code,\n * returns transformed code without template literals and attaches generated source maps\n */\n\nimport { existsSync } from 'fs';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport path from 'path';\n\nimport { createFilter, loadEnv } from 'vite';\nimport type {\n ModuleNode,\n Plugin,\n ResolvedConfig,\n ViteDevServer,\n FilterPattern,\n} from 'vite';\n\nimport { asyncResolverFactory, logger, syncResolve } from '@wyw-in-js/shared';\nimport type {\n IFileReporterOptions,\n PluginOptions,\n Preprocessor,\n} from '@wyw-in-js/transform';\nimport {\n createFileReporter,\n getFileIdx,\n transform,\n TransformCacheCollection,\n} from '@wyw-in-js/transform';\n\ntype VitePluginOptions = {\n debug?: IFileReporterOptions | false | null | undefined;\n exclude?: FilterPattern;\n include?: FilterPattern;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n preserveCssPaths?: boolean;\n sourceMap?: boolean;\n ssrDevCss?: boolean;\n ssrDevCssPath?: string;\n transformLibraries?: boolean;\n} & Partial<PluginOptions>;\n\ntype OverrideContext = NonNullable<PluginOptions['overrideContext']>;\n\nexport { Plugin };\n\ntype AssetInfoLike = { name?: unknown };\ntype AssetFileNames = string | ((assetInfo: AssetInfoLike) => string);\ntype RollupOutputLike = {\n assetFileNames?: AssetFileNames;\n preserveModules?: boolean;\n preserveModulesRoot?: unknown;\n} & Record<string, unknown>;\n\ntype CssReloadTarget = {\n moduleGraph: {\n getModuleById(id: string): ModuleNode | null | undefined;\n };\n reloadModule(module: ModuleNode): void;\n};\n\nconst isWindowsAbsolutePath = (value: string): boolean =>\n /^[a-zA-Z]:[\\\\/]/.test(value);\n\nconst normalizeToPosix = (value: string): string =>\n value.replace(/\\\\/g, path.posix.sep);\n\nconst isInside = (childPath: string, parentPath: string): boolean => {\n const rel = path.relative(parentPath, childPath);\n return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));\n};\n\nconst isWywCssAssetName = (value: string): boolean =>\n value.endsWith('.wyw-in-js.css');\n\nconst normalizeAssetRelativePath = (value: string): string | null => {\n const normalized = path.posix.normalize(\n normalizeToPosix(value).replace(/^\\/+/, '')\n );\n if (normalized.startsWith('..') || path.posix.isAbsolute(normalized)) {\n return null;\n }\n\n return normalized;\n};\n\nconst stripExtension = (value: string): string => {\n const ext = path.posix.extname(value);\n return ext ? value.slice(0, -ext.length) : value;\n};\n\nconst VITE_FS_PREFIX = '/@fs/';\n\nconst safeDecodeURIComponent = (value: string): string => {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n};\n\nconst normalizeViteFsPath = (value: string): string => {\n const fsPath = value.slice(VITE_FS_PREFIX.length);\n return path.normalize(safeDecodeURIComponent(fsPath));\n};\n\nconst isCssReloadTarget = (value: unknown): value is CssReloadTarget => {\n if (!value || typeof value !== 'object') return false;\n\n const reloadTarget = value as Partial<CssReloadTarget>;\n return (\n !!reloadTarget.moduleGraph &&\n typeof reloadTarget.moduleGraph.getModuleById === 'function' &&\n typeof reloadTarget.reloadModule === 'function'\n );\n};\n\nconst getCssReloadTarget = (\n environment: unknown,\n server: ViteDevServer | undefined\n): CssReloadTarget | null => {\n if (isCssReloadTarget(environment)) {\n return environment;\n }\n\n if (server?.moduleGraph) {\n return {\n moduleGraph: server.moduleGraph,\n reloadModule: (module) => server.reloadModule(module),\n };\n }\n\n return null;\n};\n\nconst getWywCssAssetFileNames = (\n resolvedConfig: ResolvedConfig,\n output: RollupOutputLike,\n originalAssetFileNames: AssetFileNames\n): ((assetInfo: AssetInfoLike) => string) | null => {\n if (!output.preserveModules) return null;\n\n const rootDir = resolvedConfig.root;\n\n const preserveModulesRootValue = output.preserveModulesRoot;\n let preserveModulesRootAbs: string | null = null;\n if (typeof preserveModulesRootValue === 'string') {\n preserveModulesRootAbs = path.isAbsolute(preserveModulesRootValue)\n ? preserveModulesRootValue\n : path.resolve(rootDir, preserveModulesRootValue);\n }\n\n const preserveModulesRootRel =\n preserveModulesRootAbs && isInside(preserveModulesRootAbs, rootDir)\n ? normalizeToPosix(path.relative(rootDir, preserveModulesRootAbs))\n : null;\n\n return (assetInfo) => {\n const template =\n typeof originalAssetFileNames === 'function'\n ? originalAssetFileNames(assetInfo)\n : originalAssetFileNames;\n\n const assetName = assetInfo?.name;\n if (typeof assetName !== 'string' || !isWywCssAssetName(assetName)) {\n return template;\n }\n\n if (!template.includes('[')) {\n return template;\n }\n\n let relativePath: string | null = null;\n\n const assetNameNormalized = normalizeToPosix(assetName);\n\n if (\n path.isAbsolute(assetName) ||\n isWindowsAbsolutePath(assetNameNormalized)\n ) {\n const preserveRel =\n preserveModulesRootAbs && isInside(assetName, preserveModulesRootAbs)\n ? path.relative(preserveModulesRootAbs, assetName)\n : null;\n\n if (\n preserveRel &&\n !path.isAbsolute(preserveRel) &&\n !preserveRel.startsWith('..')\n ) {\n relativePath = preserveRel;\n } else if (isInside(assetName, rootDir)) {\n relativePath = path.relative(rootDir, assetName);\n }\n } else if (\n preserveModulesRootRel &&\n assetNameNormalized.startsWith(`${preserveModulesRootRel}/`)\n ) {\n relativePath = assetNameNormalized.slice(\n preserveModulesRootRel.length + 1\n );\n } else {\n relativePath = assetNameNormalized;\n }\n\n const normalized = relativePath\n ? normalizeAssetRelativePath(relativePath)\n : null;\n if (!normalized) {\n return template;\n }\n\n const withoutExt = stripExtension(normalized);\n\n if (template.includes('[name]')) {\n const dir = path.posix.dirname(withoutExt);\n if (dir === '.' || dir === '') {\n return template;\n }\n\n return template.replace(/\\[name\\]/g, `${dir}/[name]`);\n }\n\n const dir = path.posix.dirname(withoutExt);\n if (dir === '.' || dir === '') {\n return template;\n }\n\n const idx = template.indexOf('[');\n if (idx < 0) {\n return template;\n }\n\n const prefix = template.slice(0, idx);\n if (prefix !== '' && !prefix.endsWith('/')) {\n return template;\n }\n\n return `${prefix}${dir}/${template.slice(idx)}`;\n };\n};\n\nexport default function wywInJS({\n debug,\n include,\n exclude,\n sourceMap,\n preserveCssPaths,\n keepComments,\n prefixer,\n preprocessor,\n ssrDevCss,\n ssrDevCssPath,\n transformLibraries,\n ...rest\n}: VitePluginOptions = {}): Plugin {\n const filter = createFilter(include, exclude);\n const cssLookup: { [key: string]: string } = {};\n const cssFileLookup: { [key: string]: string } = {};\n const pendingCssReloads = new WeakMap<\n CssReloadTarget,\n { files: Set<string>; timer?: ReturnType<typeof setTimeout> }\n >();\n let ssrDevCssVersion = 0;\n let config: ResolvedConfig;\n let devServer: ViteDevServer;\n let importMetaEnvForEval: {\n client: Record<string, unknown>;\n ssr: Record<string, unknown>;\n } | null = null;\n\n const ssrDevCssEnabled = Boolean(ssrDevCss);\n const [ssrDevCssPathname, ssrDevCssQuery] = (\n ssrDevCssPath ?? '/_wyw-in-js/ssr.css'\n ).split('?', 2);\n const ssrDevCssRoute = ssrDevCssPathname.startsWith('/')\n ? ssrDevCssPathname\n : `/${ssrDevCssPathname}`;\n\n const getSsrDevCssHref = () => {\n const versionParam = `v=${ssrDevCssVersion}`;\n const query = ssrDevCssQuery\n ? `${ssrDevCssQuery}&${versionParam}`\n : versionParam;\n return `${ssrDevCssRoute}?${query}`;\n };\n\n const getSsrDevCssContents = () => {\n const entries = Object.entries(cssLookup);\n if (entries.length === 0) return '';\n\n const merged = entries\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, cssText]) => cssText)\n .join('\\n');\n return `${merged}\\n`;\n };\n\n const { emitter, onDone } = createFileReporter(debug ?? false);\n\n const scheduleCssReload = (\n reloadTarget: CssReloadTarget,\n cssFilename: string\n ) => {\n let state = pendingCssReloads.get(reloadTarget);\n if (!state) {\n state = { files: new Set() };\n pendingCssReloads.set(reloadTarget, state);\n }\n state.files.add(cssFilename);\n\n if (state.timer) return;\n state.timer = setTimeout(() => {\n state.timer = undefined;\n\n const ids = Array.from(state.files);\n state.files.clear();\n\n const { moduleGraph } = reloadTarget;\n for (const id of ids) {\n const module = moduleGraph.getModuleById(id);\n if (module) reloadTarget.reloadModule(module);\n }\n }, 0);\n };\n\n // <dependency id, targets>\n const targets: { dependencies: string[]; id: string }[] = [];\n const clientCache = new TransformCacheCollection();\n const ssrCache = new TransformCacheCollection();\n const caches = new Set<TransformCacheCollection>([clientCache, ssrCache]);\n\n const getCache = (isSsr: boolean): TransformCacheCollection =>\n isSsr ? ssrCache : clientCache;\n\n type DepInfoLike = { file: string; processing?: Promise<void> };\n type DepsOptimizerLike = {\n init?: () => Promise<void>;\n isOptimizedDepFile?: (id: string) => boolean;\n metadata?: { depInfoList?: DepInfoLike[] };\n scanProcessing?: Promise<void>;\n };\n\n type ViteServerWithDepsOptimizer = ViteDevServer & {\n _depsOptimizer?: DepsOptimizerLike;\n depsOptimizer?: DepsOptimizerLike;\n environments?: Record<string, { depsOptimizer?: DepsOptimizerLike }>;\n };\n\n const isInsideCacheDir = (filename: string): boolean => {\n if (!config.cacheDir) {\n return false;\n }\n\n const relative = path.relative(config.cacheDir, filename);\n return (\n relative !== '' &&\n !relative.startsWith('..') &&\n !path.isAbsolute(relative)\n );\n };\n\n const getDepsOptimizer = (): DepsOptimizerLike | null => {\n if (!devServer) return null;\n\n const server = devServer as unknown as ViteServerWithDepsOptimizer;\n return (\n server.environments?.client?.depsOptimizer ??\n server.depsOptimizer ??\n server._depsOptimizer ??\n null\n );\n };\n\n const waitForOptimizedDep = async (filename: string): Promise<boolean> => {\n const depsOptimizer = getDepsOptimizer();\n if (!depsOptimizer?.isOptimizedDepFile?.(filename)) {\n return false;\n }\n\n await depsOptimizer.init?.();\n await depsOptimizer.scanProcessing;\n\n const info = depsOptimizer.metadata?.depInfoList?.find(\n (item) => item.file === filename\n );\n if (info?.processing) {\n await info.processing;\n }\n\n return true;\n };\n\n type ViteResolver = ReturnType<ResolvedConfig['createResolver']>;\n type ViteResolverResult = Awaited<ReturnType<ViteResolver>>;\n type ResolveFn = (\n what: string,\n importer: string\n ) => Promise<ViteResolverResult>;\n\n let viteResolver: ViteResolver | null = null;\n\n const resolveClient: ResolveFn = (what, importer) => {\n if (!viteResolver) {\n throw new Error('Vite resolver is not initialized yet');\n }\n\n return viteResolver(what, importer, false, false);\n };\n\n const resolveSsr: ResolveFn = (what, importer) => {\n if (!viteResolver) {\n throw new Error('Vite resolver is not initialized yet');\n }\n\n return viteResolver(what, importer, false, true);\n };\n\n const createAsyncResolver = asyncResolverFactory(\n async (\n resolved: ViteResolverResult,\n what: string,\n importer: string,\n stack: string[]\n ): Promise<string | null> => {\n const log = logger.extend('vite').extend(getFileIdx(importer));\n\n if (resolved) {\n log(\"resolve ✅ '%s'@'%s -> %O\\n%s\", what, importer, resolved);\n\n // Vite adds param like `?v=667939b3` to cached modules\n let resolvedId = resolved.split('?', 1)[0];\n\n if (resolvedId.startsWith('\\0')) {\n // \\0 is a special character in Rollup that tells Rollup to not include this in the bundle\n // https://rollupjs.org/guide/en/#outputexports\n return null;\n }\n\n if (resolvedId.startsWith(VITE_FS_PREFIX)) {\n resolvedId = normalizeViteFsPath(resolvedId);\n }\n\n if (resolvedId.startsWith('/@')) {\n return null;\n }\n\n if (!existsSync(resolvedId)) {\n // When Vite resolves to an optimized deps entry (cacheDir) it may not be written yet.\n // Wait for Vite's optimizer instead of calling optimizeDeps() manually (deprecated in Vite 7).\n try {\n await waitForOptimizedDep(resolvedId);\n } catch {\n // If optimizer failed, fall through to preserve previous behavior and surface the error.\n }\n\n // Vite can return an optimized deps entry (from cacheDir) before it's written to disk.\n // Manually calling optimizeDeps is deprecated in Vite 7 and can also get called many times.\n // Instead, fall back to resolving the original module path directly.\n if (!existsSync(resolvedId) && isInsideCacheDir(resolvedId)) {\n try {\n return syncResolve(what, importer, stack);\n } catch {\n // Fall through to preserve previous behavior: return resolvedId and let WyW surface the error.\n }\n }\n }\n\n if (!existsSync(resolvedId) && !path.isAbsolute(resolvedId)) {\n // Vite can resolve an import to a bare specifier when bundling for SSR and marking it as external.\n // In that case we still need a real file path for WyW evaluation.\n return syncResolve(what, importer, stack);\n }\n\n return resolvedId;\n }\n\n log(\"resolve ❌ '%s'@'%s\", what, importer);\n\n // Vite can inject virtual ids like /@react-refresh in dev.\n if (what.startsWith('/@') || what.startsWith('\\0')) {\n return null;\n }\n\n if (\n !what.startsWith('.') &&\n !what.startsWith('/') &&\n !path.isAbsolute(what)\n ) {\n // Keep compatibility with SSR externalization: fall back to Node resolution for bare specifiers.\n return syncResolve(what, importer, stack);\n }\n\n throw new Error(`Could not resolve ${what}`);\n },\n (what, importer) => [what, importer]\n );\n\n const asyncResolveClient = createAsyncResolver(resolveClient);\n const asyncResolveSsr = createAsyncResolver(resolveSsr);\n\n return {\n name: 'wyw-in-js',\n enforce: 'post',\n buildEnd() {\n onDone(process.cwd());\n },\n configResolved(resolvedConfig: ResolvedConfig) {\n config = resolvedConfig;\n viteResolver = config.createResolver();\n\n if (preserveCssPaths && config.command === 'build') {\n const outputs = config.build.rollupOptions.output;\n let outputEntries: unknown[] = [];\n if (Array.isArray(outputs)) {\n outputEntries = outputs;\n } else if (outputs) {\n outputEntries = [outputs];\n }\n\n outputEntries.forEach((entry) => {\n if (!entry || typeof entry !== 'object') return;\n\n const output = entry as RollupOutputLike;\n if (!output.preserveModules) return;\n\n const template: AssetFileNames =\n output.assetFileNames ??\n `${config.build.assetsDir ?? 'assets'}/[name].[hash].[ext]`;\n\n const assetFileNames = getWywCssAssetFileNames(\n config,\n output,\n template\n );\n if (assetFileNames) output.assetFileNames = assetFileNames;\n });\n }\n\n const envPrefix = config.envPrefix ?? 'VITE_';\n const envDir =\n // envDir is absolute in modern Vite, but keep a fallback for older versions\n 'envDir' in config && typeof config.envDir === 'string'\n ? config.envDir\n : config.root;\n\n const loaded = loadEnv(config.mode, envDir, envPrefix);\n const base = {\n ...loaded,\n BASE_URL: config.base,\n MODE: config.mode,\n DEV: config.command === 'serve',\n PROD: config.command === 'build',\n };\n\n importMetaEnvForEval = {\n client: { ...base, SSR: false },\n ssr: { ...base, SSR: true },\n };\n },\n configureServer(_server) {\n devServer = _server;\n\n if (!ssrDevCssEnabled || config.command !== 'serve') return;\n\n devServer.middlewares.use(\n (req: IncomingMessage, res: ServerResponse, next: () => void) => {\n const { url } = req;\n if (!url) {\n next();\n return;\n }\n\n const [pathname] = url.split('?', 1);\n if (pathname !== ssrDevCssRoute) {\n next();\n return;\n }\n\n const etag = `W/\"${ssrDevCssVersion}\"`;\n const ifNoneMatch = req.headers['if-none-match'];\n if (ifNoneMatch === etag) {\n res.statusCode = 304;\n res.end();\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/css; charset=utf-8');\n res.setHeader('Cache-Control', 'no-cache');\n res.setHeader('ETag', etag);\n res.end(getSsrDevCssContents());\n }\n );\n },\n transformIndexHtml(html) {\n if (!ssrDevCssEnabled || config.command !== 'serve') return undefined;\n\n return {\n html,\n tags: [\n {\n tag: 'link',\n attrs: { rel: 'stylesheet', href: getSsrDevCssHref() },\n injectTo: 'head-prepend',\n },\n ],\n };\n },\n load(url: string) {\n const [id] = url.split('?', 1);\n return cssLookup[id];\n },\n /* eslint-disable-next-line consistent-return */\n resolveId(importeeUrl: string) {\n const [id] = importeeUrl.split('?', 1);\n if (cssLookup[id]) return id;\n return cssFileLookup[id];\n },\n handleHotUpdate(ctx) {\n // it's module, so just transform it\n if (ctx.modules.length) return ctx.modules;\n\n // Select affected modules of changed dependency\n const affected = targets.filter(\n (x) =>\n // file is dependency of any target\n x.dependencies.some((dep) => dep === ctx.file) ||\n // or changed module is a dependency of any target\n x.dependencies.some((dep) => ctx.modules.some((m) => m.file === dep))\n );\n const deps = affected.flatMap((target) => target.dependencies);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const depId of deps) {\n for (const cache of caches) {\n cache.invalidateForFile(depId);\n }\n }\n\n return affected\n .map((target) => devServer.moduleGraph.getModuleById(target.id))\n .concat(ctx.modules)\n .filter((m): m is ModuleNode => !!m);\n },\n async transform(\n code: string,\n url: string,\n transformOptions?: boolean | { ssr?: boolean }\n ) {\n const [id] = url.split('?', 1);\n\n // Do not transform ignored and generated files\n if (\n (!transformLibraries && url.includes('node_modules')) ||\n !filter(url) ||\n id in cssLookup\n )\n return;\n\n const log = logger.extend('vite').extend(getFileIdx(id));\n\n log('transform %s', id);\n\n const isSsr =\n typeof transformOptions === 'boolean'\n ? transformOptions\n : Boolean(transformOptions?.ssr);\n\n const overrideContext: OverrideContext = (context, filename) => {\n const env = importMetaEnvForEval?.[isSsr ? 'ssr' : 'client'];\n const withEnv = env\n ? { ...context, __wyw_import_meta_env: env }\n : context;\n\n return rest.overrideContext\n ? rest.overrideContext(withEnv, filename)\n : withEnv;\n };\n\n const transformServices = {\n options: {\n filename: id,\n root: process.cwd(),\n prefixer,\n keepComments,\n preprocessor,\n pluginOptions: {\n ...rest,\n overrideContext,\n },\n },\n cache: getCache(isSsr),\n emitWarning: (message: string) => this.warn(message),\n eventEmitter: emitter,\n };\n\n const asyncResolve = isSsr ? asyncResolveSsr : asyncResolveClient;\n\n const result = await transform(transformServices, code, asyncResolve);\n\n let { cssText, dependencies } = result;\n\n // Heads up, there are three cases:\n // 1. cssText is undefined, it means that file was not transformed\n // 2. cssText is empty, it means that file was transformed, but it does not contain any styles\n // 3. cssText is not empty, it means that file was transformed and it contains styles\n\n if (typeof cssText === 'undefined') {\n return;\n }\n\n if (cssText === '') {\n /* eslint-disable-next-line consistent-return */\n return {\n code: result.code,\n map: result.sourceMap,\n };\n }\n\n dependencies ??= [];\n\n const cssFilename = path\n .normalize(`${id.replace(/\\.[jt]sx?$/, '')}.wyw-in-js.css`)\n .replace(/\\\\/g, path.posix.sep);\n\n const cssRelativePath = path\n .relative(config.root, cssFilename)\n .replace(/\\\\/g, path.posix.sep);\n\n const cssId = `/${cssRelativePath}`;\n\n if (sourceMap && result.cssSourceMapText) {\n const map = Buffer.from(result.cssSourceMapText).toString('base64');\n cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;\n }\n\n const didCssChange = cssLookup[cssFilename] !== cssText;\n cssLookup[cssFilename] = cssText;\n cssFileLookup[cssId] = cssFilename;\n\n result.code += `\\nimport ${JSON.stringify(cssFilename)};\\n`;\n\n for (let i = 0, end = dependencies.length; i < end; i++) {\n // eslint-disable-next-line no-await-in-loop\n const depModule = await this.resolve(dependencies[i], url, {\n isEntry: false,\n });\n if (depModule) dependencies[i] = depModule.id;\n }\n const target = targets.find((t) => t.id === id);\n if (!target) targets.push({ id, dependencies });\n else target.dependencies = dependencies;\n\n if (didCssChange) {\n const reloadTarget = getCssReloadTarget(\n (this as typeof this & { environment?: unknown }).environment,\n devServer\n );\n if (reloadTarget) {\n scheduleCssReload(reloadTarget, cssFilename);\n }\n if (ssrDevCssEnabled && config.command === 'serve') {\n ssrDevCssVersion += 1;\n }\n }\n /* eslint-disable-next-line consistent-return */\n return { code: result.code, map: result.sourceMap };\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.mjs","names":["existsSync","path","createFilter","loadEnv","asyncResolverFactory","logger","syncResolve","transformPkg","createTransformManifest","createFileReporter","getFileIdx","stringifyTransformManifest","transform","TransformCacheCollection","createMetadataManifest","metadata","context","version","stringifyMetadataManifest","manifest","JSON","stringify","isWindowsAbsolutePath","value","test","normalizeToPosix","replace","posix","sep","isInside","childPath","parentPath","rel","relative","startsWith","isAbsolute","isWywCssAssetName","endsWith","normalizeAssetRelativePath","normalized","normalize","stripExtension","ext","extname","slice","length","getComparableAssetPaths","rootDir","variants","Set","add","relativeToRoot","relativePath","getStringValues","Array","isArray","filter","item","getOutputAssetNames","asset","name","names","originalFileName","originalFileNames","isOutputAssetLike","type","fileName","isOutputChunkLike","code","getTrackedModuleIdForChunk","chunk","cssFilesByModuleId","facadeModuleId","has","moduleIds","moduleId","find","id","findWywCssAssetFileName","bundle","cssFilename","expectedNames","Object","values","isMatch","some","assetName","from","variant","getRelativeImportPath","fromFileName","toFileName","fromDir","dirname","escapeForRegExp","hasStaticImport","specifier","RegExp","hasRequireCall","getCssLoadStatement","format","hasCssLoadStatement","prependCssLoadStatement","statement","insertAt","lineBreakIndex","indexOf","directiveMatch","exec","VITE_FS_PREFIX","safeDecodeURIComponent","decodeURIComponent","normalizeViteFsPath","fsPath","isCssReloadTarget","reloadTarget","moduleGraph","getModuleById","reloadModule","getCssReloadTarget","environment","server","module","getWywCssAssetFileNames","resolvedConfig","output","originalAssetFileNames","preserveModules","root","preserveModulesRootValue","preserveModulesRoot","preserveModulesRootAbs","resolve","preserveModulesRootRel","assetInfo","template","includes","assetNameNormalized","preserveRel","withoutExt","dir","idx","prefix","wywInJS","debug","include","exclude","sourceMap","preserveCssPaths","keepComments","prefixer","preprocessor","ssrDevCss","ssrDevCssPath","transformLibraries","rest","supportedModuleExtensions","cssLookup","cssFileLookup","metadataLookup","Map","pendingCssReloads","WeakMap","ssrDevCssVersion","config","devServer","importMetaEnvForEval","ssrDevCssEnabled","Boolean","ssrDevCssPathname","ssrDevCssQuery","split","ssrDevCssRoute","getSsrDevCssHref","versionParam","query","getSsrDevCssContents","entries","merged","sort","a","b","localeCompare","map","cssText","join","emitter","onDone","isSafeAssetPath","replaceModuleExtension","filename","nextExtension","extension","toBundleRelativePath","segment","scheduleCssReload","state","get","files","set","timer","setTimeout","undefined","ids","clear","targets","clientCache","ssrCache","caches","getCache","isSsr","isInsideCacheDir","cacheDir","getDepsOptimizer","environments","client","depsOptimizer","_depsOptimizer","waitForOptimizedDep","isOptimizedDepFile","init","scanProcessing","info","depInfoList","file","processing","viteResolver","resolveClient","what","importer","Error","resolveSsr","createAsyncResolver","resolved","stack","log","extend","resolvedId","asyncResolveClient","asyncResolveSsr","enforce","buildStart","keys","forEach","key","buildEnd","process","cwd","configResolved","createResolver","command","outputs","build","rollupOptions","outputEntries","entry","assetFileNames","assetsDir","envPrefix","envDir","loaded","mode","base","BASE_URL","MODE","DEV","PROD","SSR","ssr","configureServer","_server","middlewares","use","req","res","next","url","pathname","etag","ifNoneMatch","headers","statusCode","end","setHeader","transformIndexHtml","html","tags","tag","attrs","href","injectTo","load","resolveId","importeeUrl","handleHotUpdate","ctx","modules","affected","x","dependencies","dep","m","deps","flatMap","target","depId","cache","invalidateForFile","concat","generateBundle","outputOptions","source","emitFile","cssCodeSplit","emittedCssFileName","relativeCssImport","transformOptions","overrideContext","env","withEnv","__wyw_import_meta_env","transformServices","options","pluginOptions","emitWarning","message","warn","eventEmitter","asyncResolve","result","diagnostics","diagnostic","loc","start","column","line","severity","category","pluginCode","relativeId","metadataFilename","metadataRelativePath","cssFile","delete","cssRelativePath","cssId","cssSourceMapText","Buffer","toString","didCssChange","i","depModule","isEntry","t","push"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains a Vite loader for wyw-in-js.\n * It uses the transform.ts function to generate class names from source code,\n * returns transformed code without template literals and attaches generated source maps\n */\n\nimport { existsSync } from 'fs';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport path from 'path';\n\nimport { createFilter, loadEnv } from 'vite';\nimport type {\n ModuleNode,\n Plugin,\n ResolvedConfig,\n ViteDevServer,\n FilterPattern,\n} from 'vite';\n\nimport { asyncResolverFactory, logger, syncResolve } from '@wyw-in-js/shared';\nimport type {\n IFileReporterOptions,\n PluginOptions,\n Preprocessor,\n Result as TransformResult,\n TransformCacheCollection as TransformCacheCollectionType,\n} from '@wyw-in-js/transform';\nimport * as transformPkg from '@wyw-in-js/transform';\n\nconst {\n createTransformManifest,\n createFileReporter,\n getFileIdx,\n stringifyTransformManifest,\n transform,\n TransformCacheCollection,\n} = transformPkg;\n\ntype MetadataManifest = NonNullable<TransformResult['metadata']> & {\n cssFile?: string;\n source: string;\n version: 1;\n};\n\nconst createMetadataManifest = (\n metadata: NonNullable<TransformResult['metadata']>,\n context: Pick<MetadataManifest, 'cssFile' | 'source'>\n): MetadataManifest =>\n typeof createTransformManifest === 'function'\n ? createTransformManifest(metadata, context)\n : {\n ...metadata,\n ...context,\n version: 1,\n };\n\nconst stringifyMetadataManifest = (manifest: MetadataManifest): string =>\n typeof stringifyTransformManifest === 'function'\n ? stringifyTransformManifest(manifest)\n : `${JSON.stringify(manifest, null, 2)}\\n`;\n\ntype VitePluginOptions = {\n debug?: IFileReporterOptions | false | null | undefined;\n exclude?: FilterPattern;\n include?: FilterPattern;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n preserveCssPaths?: boolean;\n sourceMap?: boolean;\n ssrDevCss?: boolean;\n ssrDevCssPath?: string;\n transformLibraries?: boolean;\n} & Partial<PluginOptions>;\n\ntype OverrideContext = NonNullable<PluginOptions['overrideContext']>;\n\nexport { Plugin };\n\ntype AssetInfoLike = { name?: unknown };\ntype AssetFileNames = string | ((assetInfo: AssetInfoLike) => string);\ntype RollupOutputLike = {\n assetFileNames?: AssetFileNames;\n format?: unknown;\n preserveModules?: boolean;\n preserveModulesRoot?: unknown;\n} & Record<string, unknown>;\n\ntype OutputAssetLike = {\n fileName: string;\n name?: unknown;\n names?: unknown;\n originalFileName?: unknown;\n originalFileNames?: unknown;\n type: 'asset';\n};\n\ntype OutputChunkLike = {\n code: string;\n facadeModuleId?: unknown;\n fileName: string;\n moduleIds?: unknown;\n type: 'chunk';\n};\n\ntype OutputBundleLike = Record<string, OutputAssetLike | OutputChunkLike>;\n\ntype CssReloadTarget = {\n moduleGraph: {\n getModuleById(id: string): ModuleNode | null | undefined;\n };\n reloadModule(module: ModuleNode): void;\n};\n\nconst isWindowsAbsolutePath = (value: string): boolean =>\n /^[a-zA-Z]:[\\\\/]/.test(value);\n\nconst normalizeToPosix = (value: string): string =>\n value.replace(/\\\\/g, path.posix.sep);\n\nconst isInside = (childPath: string, parentPath: string): boolean => {\n const rel = path.relative(parentPath, childPath);\n return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));\n};\n\nconst isWywCssAssetName = (value: string): boolean =>\n value.endsWith('.wyw-in-js.css');\n\nconst normalizeAssetRelativePath = (value: string): string | null => {\n const normalized = path.posix.normalize(\n normalizeToPosix(value).replace(/^\\/+/, '')\n );\n if (normalized.startsWith('..') || path.posix.isAbsolute(normalized)) {\n return null;\n }\n\n return normalized;\n};\n\nconst stripExtension = (value: string): string => {\n const ext = path.posix.extname(value);\n return ext ? value.slice(0, -ext.length) : value;\n};\n\nconst getComparableAssetPaths = (\n value: string,\n rootDir: string\n): Set<string> => {\n const variants = new Set<string>();\n const normalized = normalizeToPosix(value);\n\n variants.add(normalized);\n\n if (path.isAbsolute(value) || isWindowsAbsolutePath(normalized)) {\n if (isInside(value, rootDir)) {\n const relativeToRoot = normalizeAssetRelativePath(\n path.relative(rootDir, value)\n );\n if (relativeToRoot) {\n variants.add(relativeToRoot);\n }\n }\n\n return variants;\n }\n\n const relativePath = normalizeAssetRelativePath(value);\n if (relativePath) {\n variants.add(relativePath);\n }\n\n return variants;\n};\n\nconst getStringValues = (value: unknown): string[] => {\n if (!Array.isArray(value)) return [];\n\n return value.filter((item): item is string => typeof item === 'string');\n};\n\nconst getOutputAssetNames = (asset: OutputAssetLike): string[] => [\n ...(typeof asset.name === 'string' ? [asset.name] : []),\n ...getStringValues(asset.names),\n ...(typeof asset.originalFileName === 'string'\n ? [asset.originalFileName]\n : []),\n ...getStringValues(asset.originalFileNames),\n];\n\nconst isOutputAssetLike = (value: unknown): value is OutputAssetLike =>\n !!value &&\n typeof value === 'object' &&\n (value as { type?: unknown }).type === 'asset' &&\n typeof (value as { fileName?: unknown }).fileName === 'string';\n\nconst isOutputChunkLike = (value: unknown): value is OutputChunkLike =>\n !!value &&\n typeof value === 'object' &&\n (value as { type?: unknown }).type === 'chunk' &&\n typeof (value as { fileName?: unknown }).fileName === 'string' &&\n typeof (value as { code?: unknown }).code === 'string';\n\nconst getTrackedModuleIdForChunk = (\n chunk: OutputChunkLike,\n cssFilesByModuleId: Map<string, string>\n): string | null => {\n if (\n typeof chunk.facadeModuleId === 'string' &&\n cssFilesByModuleId.has(chunk.facadeModuleId)\n ) {\n return chunk.facadeModuleId;\n }\n\n if (!Array.isArray(chunk.moduleIds)) {\n return null;\n }\n\n const moduleId = chunk.moduleIds.find(\n (id): id is string => typeof id === 'string' && cssFilesByModuleId.has(id)\n );\n\n return moduleId ?? null;\n};\n\nconst findWywCssAssetFileName = (\n bundle: OutputBundleLike,\n cssFilename: string,\n rootDir: string\n): string | null => {\n const expectedNames = getComparableAssetPaths(cssFilename, rootDir);\n\n for (const item of Object.values(bundle)) {\n if (isOutputAssetLike(item) && item.fileName.endsWith('.css')) {\n const isMatch = getOutputAssetNames(item).some((assetName) => {\n const variants = getComparableAssetPaths(assetName, rootDir);\n return Array.from(variants).some((variant) =>\n expectedNames.has(variant)\n );\n });\n\n if (isMatch) {\n return normalizeToPosix(item.fileName);\n }\n }\n }\n\n return null;\n};\n\nconst getRelativeImportPath = (\n fromFileName: string,\n toFileName: string\n): string => {\n const fromDir = path.posix.dirname(normalizeToPosix(fromFileName));\n const relativePath = path.posix.relative(\n fromDir,\n normalizeToPosix(toFileName)\n );\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;\n};\n\nconst escapeForRegExp = (value: string): string =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst hasStaticImport = (code: string, specifier: string): boolean =>\n new RegExp(\n `(^|\\\\n)\\\\s*import\\\\s*(?:[\"']${escapeForRegExp(\n specifier\n )}[\"']|[^\\\\n;]+\\\\s+from\\\\s+[\"']${escapeForRegExp(specifier)}[\"'])`,\n 'm'\n ).test(code);\n\nconst hasRequireCall = (code: string, specifier: string): boolean =>\n new RegExp(\n `(^|[;\\\\n])\\\\s*require\\\\(\\\\s*[\"']${escapeForRegExp(specifier)}[\"']\\\\s*\\\\)`,\n 'm'\n ).test(code);\n\nconst getCssLoadStatement = (format: unknown, specifier: string): string =>\n format === 'cjs'\n ? `require(${JSON.stringify(specifier)});\\n`\n : `import ${JSON.stringify(specifier)};\\n`;\n\nconst hasCssLoadStatement = (\n code: string,\n specifier: string,\n format: unknown\n): boolean =>\n format === 'cjs'\n ? hasRequireCall(code, specifier)\n : hasStaticImport(code, specifier);\n\nconst prependCssLoadStatement = (\n code: string,\n specifier: string,\n format: unknown\n): string => {\n const statement = getCssLoadStatement(format, specifier);\n let insertAt = 0;\n\n if (code.startsWith('#!')) {\n const lineBreakIndex = code.indexOf('\\n');\n if (lineBreakIndex >= 0) {\n insertAt = lineBreakIndex + 1;\n } else {\n return `${code}\\n${statement}`;\n }\n }\n\n if (format === 'cjs') {\n const directiveMatch =\n /^(?:\\s*(?:\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*');)+/.exec(\n code.slice(insertAt)\n );\n\n if (directiveMatch) {\n insertAt += directiveMatch[0].length;\n }\n }\n\n return `${code.slice(0, insertAt)}${statement}${code.slice(insertAt)}`;\n};\n\nconst VITE_FS_PREFIX = '/@fs/';\n\nconst safeDecodeURIComponent = (value: string): string => {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n};\n\nconst normalizeViteFsPath = (value: string): string => {\n const fsPath = value.slice(VITE_FS_PREFIX.length);\n return path.normalize(safeDecodeURIComponent(fsPath));\n};\n\nconst isCssReloadTarget = (value: unknown): value is CssReloadTarget => {\n if (!value || typeof value !== 'object') return false;\n\n const reloadTarget = value as Partial<CssReloadTarget>;\n return (\n !!reloadTarget.moduleGraph &&\n typeof reloadTarget.moduleGraph.getModuleById === 'function' &&\n typeof reloadTarget.reloadModule === 'function'\n );\n};\n\nconst getCssReloadTarget = (\n environment: unknown,\n server: ViteDevServer | undefined\n): CssReloadTarget | null => {\n if (isCssReloadTarget(environment)) {\n return environment;\n }\n\n if (server?.moduleGraph) {\n return {\n moduleGraph: server.moduleGraph,\n reloadModule: (module) => server.reloadModule(module),\n };\n }\n\n return null;\n};\n\nconst getWywCssAssetFileNames = (\n resolvedConfig: ResolvedConfig,\n output: RollupOutputLike,\n originalAssetFileNames: AssetFileNames\n): ((assetInfo: AssetInfoLike) => string) | null => {\n if (!output.preserveModules) return null;\n\n const rootDir = resolvedConfig.root;\n\n const preserveModulesRootValue = output.preserveModulesRoot;\n let preserveModulesRootAbs: string | null = null;\n if (typeof preserveModulesRootValue === 'string') {\n preserveModulesRootAbs = path.isAbsolute(preserveModulesRootValue)\n ? preserveModulesRootValue\n : path.resolve(rootDir, preserveModulesRootValue);\n }\n\n const preserveModulesRootRel =\n preserveModulesRootAbs && isInside(preserveModulesRootAbs, rootDir)\n ? normalizeToPosix(path.relative(rootDir, preserveModulesRootAbs))\n : null;\n\n return (assetInfo) => {\n const template =\n typeof originalAssetFileNames === 'function'\n ? originalAssetFileNames(assetInfo)\n : originalAssetFileNames;\n\n const assetName = assetInfo?.name;\n if (typeof assetName !== 'string' || !isWywCssAssetName(assetName)) {\n return template;\n }\n\n if (!template.includes('[')) {\n return template;\n }\n\n let relativePath: string | null = null;\n\n const assetNameNormalized = normalizeToPosix(assetName);\n\n if (\n path.isAbsolute(assetName) ||\n isWindowsAbsolutePath(assetNameNormalized)\n ) {\n const preserveRel =\n preserveModulesRootAbs && isInside(assetName, preserveModulesRootAbs)\n ? path.relative(preserveModulesRootAbs, assetName)\n : null;\n\n if (\n preserveRel &&\n !path.isAbsolute(preserveRel) &&\n !preserveRel.startsWith('..')\n ) {\n relativePath = preserveRel;\n } else if (isInside(assetName, rootDir)) {\n relativePath = path.relative(rootDir, assetName);\n }\n } else if (\n preserveModulesRootRel &&\n assetNameNormalized.startsWith(`${preserveModulesRootRel}/`)\n ) {\n relativePath = assetNameNormalized.slice(\n preserveModulesRootRel.length + 1\n );\n } else {\n relativePath = assetNameNormalized;\n }\n\n const normalized = relativePath\n ? normalizeAssetRelativePath(relativePath)\n : null;\n if (!normalized) {\n return template;\n }\n\n const withoutExt = stripExtension(normalized);\n\n if (template.includes('[name]')) {\n const dir = path.posix.dirname(withoutExt);\n if (dir === '.' || dir === '') {\n return template;\n }\n\n return template.replace(/\\[name\\]/g, `${dir}/[name]`);\n }\n\n const dir = path.posix.dirname(withoutExt);\n if (dir === '.' || dir === '') {\n return template;\n }\n\n const idx = template.indexOf('[');\n if (idx < 0) {\n return template;\n }\n\n const prefix = template.slice(0, idx);\n if (prefix !== '' && !prefix.endsWith('/')) {\n return template;\n }\n\n return `${prefix}${dir}/${template.slice(idx)}`;\n };\n};\n\nexport default function wywInJS({\n debug,\n include,\n exclude,\n sourceMap,\n preserveCssPaths,\n keepComments,\n prefixer,\n preprocessor,\n ssrDevCss,\n ssrDevCssPath,\n transformLibraries,\n ...rest\n}: VitePluginOptions = {}): Plugin {\n const supportedModuleExtensions = new Set([\n '.cjs',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.mts',\n '.ts',\n '.tsx',\n ]);\n const filter = createFilter(include, exclude);\n const cssLookup: { [key: string]: string } = {};\n const cssFileLookup: { [key: string]: string } = {};\n const metadataLookup: { [key: string]: string } = {};\n const cssFilesByModuleId = new Map<string, string>();\n const pendingCssReloads = new WeakMap<\n CssReloadTarget,\n { files: Set<string>; timer?: ReturnType<typeof setTimeout> }\n >();\n let ssrDevCssVersion = 0;\n let config: ResolvedConfig;\n let devServer: ViteDevServer;\n let importMetaEnvForEval: {\n client: Record<string, unknown>;\n ssr: Record<string, unknown>;\n } | null = null;\n\n const ssrDevCssEnabled = Boolean(ssrDevCss);\n const [ssrDevCssPathname, ssrDevCssQuery] = (\n ssrDevCssPath ?? '/_wyw-in-js/ssr.css'\n ).split('?', 2);\n const ssrDevCssRoute = ssrDevCssPathname.startsWith('/')\n ? ssrDevCssPathname\n : `/${ssrDevCssPathname}`;\n\n const getSsrDevCssHref = () => {\n const versionParam = `v=${ssrDevCssVersion}`;\n const query = ssrDevCssQuery\n ? `${ssrDevCssQuery}&${versionParam}`\n : versionParam;\n return `${ssrDevCssRoute}?${query}`;\n };\n\n const getSsrDevCssContents = () => {\n const entries = Object.entries(cssLookup);\n if (entries.length === 0) return '';\n\n const merged = entries\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, cssText]) => cssText)\n .join('\\n');\n return `${merged}\\n`;\n };\n\n const { emitter, onDone } = createFileReporter(debug ?? false);\n\n const isSafeAssetPath = (fileName: string) =>\n fileName !== '' &&\n fileName !== '..' &&\n !fileName.startsWith(`..${path.posix.sep}`) &&\n !path.posix.isAbsolute(fileName) &&\n !isWindowsAbsolutePath(fileName);\n\n const replaceModuleExtension = (filename: string, nextExtension: string) => {\n const extension = path.extname(filename);\n return supportedModuleExtensions.has(extension)\n ? `${filename.slice(0, -extension.length)}${nextExtension}`\n : `${filename}${nextExtension}`;\n };\n\n const toBundleRelativePath = (filename: string) => {\n const relativePath = normalizeToPosix(path.relative(config.root, filename));\n\n if (isSafeAssetPath(relativePath)) {\n return relativePath;\n }\n\n if (\n !path.isAbsolute(relativePath) &&\n !isWindowsAbsolutePath(relativePath)\n ) {\n return path.posix.join(\n '_wyw-in-js',\n 'external',\n ...relativePath\n .split(path.posix.sep)\n .filter(Boolean)\n .map((segment) => (segment === '..' ? '__up__' : segment))\n );\n }\n\n return path.posix.join(\n '_wyw-in-js',\n 'external',\n ...normalizeToPosix(path.resolve(filename))\n .split(path.posix.sep)\n .filter(Boolean)\n .map((segment) => segment.replace(/:$/, ''))\n );\n };\n const scheduleCssReload = (\n reloadTarget: CssReloadTarget,\n cssFilename: string\n ) => {\n let state = pendingCssReloads.get(reloadTarget);\n if (!state) {\n state = { files: new Set() };\n pendingCssReloads.set(reloadTarget, state);\n }\n state.files.add(cssFilename);\n\n if (state.timer) return;\n state.timer = setTimeout(() => {\n state.timer = undefined;\n\n const ids = Array.from(state.files);\n state.files.clear();\n\n const { moduleGraph } = reloadTarget;\n for (const id of ids) {\n const module = moduleGraph.getModuleById(id);\n if (module) reloadTarget.reloadModule(module);\n }\n }, 0);\n };\n\n // <dependency id, targets>\n const targets: { dependencies: string[]; id: string }[] = [];\n const clientCache = new TransformCacheCollection();\n const ssrCache = new TransformCacheCollection();\n const caches = new Set<TransformCacheCollectionType>([clientCache, ssrCache]);\n\n const getCache = (isSsr: boolean): TransformCacheCollectionType =>\n isSsr ? ssrCache : clientCache;\n\n type DepInfoLike = { file: string; processing?: Promise<void> };\n type DepsOptimizerLike = {\n init?: () => Promise<void>;\n isOptimizedDepFile?: (id: string) => boolean;\n metadata?: { depInfoList?: DepInfoLike[] };\n scanProcessing?: Promise<void>;\n };\n\n type ViteServerWithDepsOptimizer = ViteDevServer & {\n _depsOptimizer?: DepsOptimizerLike;\n depsOptimizer?: DepsOptimizerLike;\n environments?: Record<string, { depsOptimizer?: DepsOptimizerLike }>;\n };\n\n const isInsideCacheDir = (filename: string): boolean => {\n if (!config.cacheDir) {\n return false;\n }\n\n const relative = path.relative(config.cacheDir, filename);\n return (\n relative !== '' &&\n !relative.startsWith('..') &&\n !path.isAbsolute(relative)\n );\n };\n\n const getDepsOptimizer = (): DepsOptimizerLike | null => {\n if (!devServer) return null;\n\n const server = devServer as unknown as ViteServerWithDepsOptimizer;\n return (\n server.environments?.client?.depsOptimizer ??\n server.depsOptimizer ??\n server._depsOptimizer ??\n null\n );\n };\n\n const waitForOptimizedDep = async (filename: string): Promise<boolean> => {\n const depsOptimizer = getDepsOptimizer();\n if (!depsOptimizer?.isOptimizedDepFile?.(filename)) {\n return false;\n }\n\n await depsOptimizer.init?.();\n await depsOptimizer.scanProcessing;\n\n const info = depsOptimizer.metadata?.depInfoList?.find(\n (item) => item.file === filename\n );\n if (info?.processing) {\n await info.processing;\n }\n\n return true;\n };\n\n type ViteResolver = ReturnType<ResolvedConfig['createResolver']>;\n type ViteResolverResult = Awaited<ReturnType<ViteResolver>>;\n type ResolveFn = (\n what: string,\n importer: string\n ) => Promise<ViteResolverResult>;\n\n let viteResolver: ViteResolver | null = null;\n\n const resolveClient: ResolveFn = (what, importer) => {\n if (!viteResolver) {\n throw new Error('Vite resolver is not initialized yet');\n }\n\n return viteResolver(what, importer, false, false);\n };\n\n const resolveSsr: ResolveFn = (what, importer) => {\n if (!viteResolver) {\n throw new Error('Vite resolver is not initialized yet');\n }\n\n return viteResolver(what, importer, false, true);\n };\n\n const createAsyncResolver = asyncResolverFactory(\n async (\n resolved: ViteResolverResult,\n what: string,\n importer: string,\n stack: string[]\n ): Promise<string | null> => {\n const log = logger.extend('vite').extend(getFileIdx(importer));\n\n if (resolved) {\n log(\"resolve ✅ '%s'@'%s -> %O\\n%s\", what, importer, resolved);\n\n // Vite adds param like `?v=667939b3` to cached modules\n let resolvedId = resolved.split('?', 1)[0];\n\n if (resolvedId.startsWith('\\0')) {\n // \\0 is a special character in Rollup that tells Rollup to not include this in the bundle\n // https://rollupjs.org/guide/en/#outputexports\n return null;\n }\n\n if (resolvedId.startsWith(VITE_FS_PREFIX)) {\n resolvedId = normalizeViteFsPath(resolvedId);\n }\n\n if (resolvedId.startsWith('/@')) {\n return null;\n }\n\n if (!existsSync(resolvedId)) {\n // When Vite resolves to an optimized deps entry (cacheDir) it may not be written yet.\n // Wait for Vite's optimizer instead of calling optimizeDeps() manually (deprecated in Vite 7).\n try {\n await waitForOptimizedDep(resolvedId);\n } catch {\n // If optimizer failed, fall through to preserve previous behavior and surface the error.\n }\n\n // Vite can return an optimized deps entry (from cacheDir) before it's written to disk.\n // Manually calling optimizeDeps is deprecated in Vite 7 and can also get called many times.\n // Instead, fall back to resolving the original module path directly.\n if (!existsSync(resolvedId) && isInsideCacheDir(resolvedId)) {\n try {\n return syncResolve(what, importer, stack);\n } catch {\n // Fall through to preserve previous behavior: return resolvedId and let WyW surface the error.\n }\n }\n }\n\n if (!existsSync(resolvedId) && !path.isAbsolute(resolvedId)) {\n // Vite can resolve an import to a bare specifier when bundling for SSR and marking it as external.\n // In that case we still need a real file path for WyW evaluation.\n return syncResolve(what, importer, stack);\n }\n\n return resolvedId;\n }\n\n log(\"resolve ❌ '%s'@'%s\", what, importer);\n\n // Vite can inject virtual ids like /@react-refresh in dev.\n if (what.startsWith('/@') || what.startsWith('\\0')) {\n return null;\n }\n\n if (\n !what.startsWith('.') &&\n !what.startsWith('/') &&\n !path.isAbsolute(what)\n ) {\n // Keep compatibility with SSR externalization: fall back to Node resolution for bare specifiers.\n return syncResolve(what, importer, stack);\n }\n\n throw new Error(`Could not resolve ${what}`);\n },\n (what, importer) => [what, importer]\n );\n\n const asyncResolveClient = createAsyncResolver(resolveClient);\n const asyncResolveSsr = createAsyncResolver(resolveSsr);\n\n return {\n name: 'wyw-in-js',\n enforce: 'post',\n buildStart() {\n Object.keys(metadataLookup).forEach((key) => {\n delete metadataLookup[key];\n });\n },\n buildEnd() {\n onDone(process.cwd());\n },\n configResolved(resolvedConfig: ResolvedConfig) {\n config = resolvedConfig;\n viteResolver = config.createResolver();\n\n if (preserveCssPaths && config.command === 'build') {\n const outputs = config.build.rollupOptions.output;\n let outputEntries: unknown[] = [];\n if (Array.isArray(outputs)) {\n outputEntries = outputs;\n } else if (outputs) {\n outputEntries = [outputs];\n }\n\n outputEntries.forEach((entry) => {\n if (!entry || typeof entry !== 'object') return;\n\n const output = entry as RollupOutputLike;\n if (!output.preserveModules) return;\n\n const template: AssetFileNames =\n output.assetFileNames ??\n `${config.build.assetsDir ?? 'assets'}/[name].[hash].[ext]`;\n\n const assetFileNames = getWywCssAssetFileNames(\n config,\n output,\n template\n );\n if (assetFileNames) output.assetFileNames = assetFileNames;\n });\n }\n\n const envPrefix = config.envPrefix ?? 'VITE_';\n const envDir =\n // envDir is absolute in modern Vite, but keep a fallback for older versions\n 'envDir' in config && typeof config.envDir === 'string'\n ? config.envDir\n : config.root;\n\n const loaded = loadEnv(config.mode, envDir, envPrefix);\n const base = {\n ...loaded,\n BASE_URL: config.base,\n MODE: config.mode,\n DEV: config.command === 'serve',\n PROD: config.command === 'build',\n };\n\n importMetaEnvForEval = {\n client: { ...base, SSR: false },\n ssr: { ...base, SSR: true },\n };\n },\n configureServer(_server) {\n devServer = _server;\n\n if (!ssrDevCssEnabled || config.command !== 'serve') return;\n\n devServer.middlewares.use(\n (req: IncomingMessage, res: ServerResponse, next: () => void) => {\n const { url } = req;\n if (!url) {\n next();\n return;\n }\n\n const [pathname] = url.split('?', 1);\n if (pathname !== ssrDevCssRoute) {\n next();\n return;\n }\n\n const etag = `W/\"${ssrDevCssVersion}\"`;\n const ifNoneMatch = req.headers['if-none-match'];\n if (ifNoneMatch === etag) {\n res.statusCode = 304;\n res.end();\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/css; charset=utf-8');\n res.setHeader('Cache-Control', 'no-cache');\n res.setHeader('ETag', etag);\n res.end(getSsrDevCssContents());\n }\n );\n },\n transformIndexHtml(html) {\n if (!ssrDevCssEnabled || config.command !== 'serve') return undefined;\n\n return {\n html,\n tags: [\n {\n tag: 'link',\n attrs: { rel: 'stylesheet', href: getSsrDevCssHref() },\n injectTo: 'head-prepend',\n },\n ],\n };\n },\n load(url: string) {\n const [id] = url.split('?', 1);\n return cssLookup[id];\n },\n /* eslint-disable-next-line consistent-return */\n resolveId(importeeUrl: string) {\n const [id] = importeeUrl.split('?', 1);\n if (cssLookup[id]) return id;\n return cssFileLookup[id];\n },\n handleHotUpdate(ctx) {\n // it's module, so just transform it\n if (ctx.modules.length) return ctx.modules;\n\n // Select affected modules of changed dependency\n const affected = targets.filter(\n (x) =>\n // file is dependency of any target\n x.dependencies.some((dep) => dep === ctx.file) ||\n // or changed module is a dependency of any target\n x.dependencies.some((dep) => ctx.modules.some((m) => m.file === dep))\n );\n const deps = affected.flatMap((target) => target.dependencies);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const depId of deps) {\n for (const cache of caches) {\n cache.invalidateForFile(depId);\n }\n }\n\n return affected\n .map((target) => devServer.moduleGraph.getModuleById(target.id))\n .concat(ctx.modules)\n .filter((m): m is ModuleNode => !!m);\n },\n generateBundle(outputOptions, bundle) {\n Object.entries(metadataLookup).forEach(([fileName, source]) => {\n this.emitFile({\n fileName,\n source,\n type: 'asset',\n });\n });\n\n if (config.command !== 'build') return;\n if (!outputOptions.preserveModules) return;\n if (config.build.cssCodeSplit === false) return;\n\n Object.values(bundle as OutputBundleLike).forEach((item) => {\n if (!isOutputChunkLike(item)) {\n return;\n }\n\n const chunk = item;\n\n const moduleId = getTrackedModuleIdForChunk(chunk, cssFilesByModuleId);\n if (!moduleId) {\n return;\n }\n\n const cssFilename = cssFilesByModuleId.get(moduleId);\n if (!cssFilename) {\n return;\n }\n\n const emittedCssFileName = findWywCssAssetFileName(\n bundle as OutputBundleLike,\n cssFilename,\n config.root\n );\n if (!emittedCssFileName) {\n return;\n }\n\n const relativeCssImport = getRelativeImportPath(\n chunk.fileName,\n emittedCssFileName\n );\n if (\n hasCssLoadStatement(\n chunk.code,\n relativeCssImport,\n outputOptions.format\n )\n ) {\n return;\n }\n\n chunk.code = prependCssLoadStatement(\n chunk.code,\n relativeCssImport,\n outputOptions.format\n );\n });\n },\n async transform(\n code: string,\n url: string,\n transformOptions?: boolean | { ssr?: boolean }\n ) {\n const [id] = url.split('?', 1);\n\n // Do not transform ignored and generated files\n if (\n (!transformLibraries && url.includes('node_modules')) ||\n !filter(url) ||\n id in cssLookup\n )\n return;\n\n const log = logger.extend('vite').extend(getFileIdx(id));\n\n log('transform %s', id);\n\n const isSsr =\n typeof transformOptions === 'boolean'\n ? transformOptions\n : Boolean(transformOptions?.ssr);\n\n const overrideContext: OverrideContext = (context, filename) => {\n const env = importMetaEnvForEval?.[isSsr ? 'ssr' : 'client'];\n const withEnv = env\n ? { ...context, __wyw_import_meta_env: env }\n : context;\n\n return rest.overrideContext\n ? rest.overrideContext(withEnv, filename)\n : withEnv;\n };\n\n const transformServices = {\n options: {\n filename: id,\n root: process.cwd(),\n prefixer,\n keepComments,\n preprocessor,\n pluginOptions: {\n ...rest,\n overrideContext,\n },\n },\n cache: getCache(isSsr),\n emitWarning: (message: string) => this.warn(message),\n eventEmitter: emitter,\n };\n\n const asyncResolve = isSsr ? asyncResolveSsr : asyncResolveClient;\n\n const result: TransformResult = await transform(\n transformServices,\n code,\n asyncResolve\n );\n\n result.diagnostics?.forEach((diagnostic) => {\n this.warn({\n id: diagnostic.filename,\n loc: diagnostic.start\n ? {\n column: diagnostic.start.column,\n file: diagnostic.filename,\n line: diagnostic.start.line,\n }\n : undefined,\n message: `[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`,\n pluginCode: diagnostic.category,\n });\n });\n\n const relativeId = normalizeToPosix(path.relative(config.root, id));\n const metadataFilename = replaceModuleExtension(id, '.wyw-in-js.json');\n const metadataRelativePath = toBundleRelativePath(metadataFilename);\n\n delete metadataLookup[metadataRelativePath];\n\n if (result.metadata) {\n const cssFile =\n typeof result.cssText === 'string' && result.cssText !== ''\n ? replaceModuleExtension(relativeId, '.wyw-in-js.css')\n : undefined;\n\n metadataLookup[metadataRelativePath] = stringifyMetadataManifest(\n createMetadataManifest(result.metadata, {\n cssFile,\n source: relativeId,\n })\n );\n }\n\n let { cssText, dependencies } = result;\n\n // Heads up, there are three cases:\n // 1. cssText is undefined, it means that file was not transformed\n // 2. cssText is empty, it means that file was transformed, but it does not contain any styles\n // 3. cssText is not empty, it means that file was transformed and it contains styles\n\n if (typeof cssText === 'undefined') {\n cssFilesByModuleId.delete(id);\n return;\n }\n\n if (cssText === '') {\n cssFilesByModuleId.delete(id);\n /* eslint-disable-next-line consistent-return */\n return {\n code: result.code,\n map: result.sourceMap,\n };\n }\n\n dependencies ??= [];\n\n const cssFilename = normalizeToPosix(\n replaceModuleExtension(id, '.wyw-in-js.css')\n );\n cssFilesByModuleId.set(id, cssFilename);\n\n const cssRelativePath = normalizeToPosix(\n path.relative(config.root, cssFilename)\n );\n\n const cssId = `/${cssRelativePath}`;\n\n if (sourceMap && result.cssSourceMapText) {\n const map = Buffer.from(result.cssSourceMapText).toString('base64');\n cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;\n }\n\n const didCssChange = cssLookup[cssFilename] !== cssText;\n cssLookup[cssFilename] = cssText;\n cssFileLookup[cssId] = cssFilename;\n\n result.code += `\\nimport ${JSON.stringify(cssFilename)};\\n`;\n\n for (let i = 0, end = dependencies.length; i < end; i++) {\n // eslint-disable-next-line no-await-in-loop\n const depModule = await this.resolve(dependencies[i], url, {\n isEntry: false,\n });\n if (depModule) dependencies[i] = depModule.id;\n }\n const target = targets.find((t) => t.id === id);\n if (!target) targets.push({ id, dependencies });\n else target.dependencies = dependencies;\n\n if (didCssChange) {\n const reloadTarget = getCssReloadTarget(\n (this as typeof this & { environment?: unknown }).environment,\n devServer\n );\n if (reloadTarget) {\n scheduleCssReload(reloadTarget, cssFilename);\n }\n if (ssrDevCssEnabled && config.command === 'serve') {\n ssrDevCssVersion += 1;\n }\n }\n /* eslint-disable-next-line consistent-return */\n return { code: result.code, map: result.sourceMap };\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}