@wyw-in-js/vite 1.0.7 → 1.0.9

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
@@ -27,6 +27,86 @@ const stripExtension = value => {
27
27
  const ext = path.posix.extname(value);
28
28
  return ext ? value.slice(0, -ext.length) : value;
29
29
  };
30
+ const getComparableAssetPaths = (value, rootDir) => {
31
+ const variants = new Set();
32
+ const normalized = normalizeToPosix(value);
33
+ variants.add(normalized);
34
+ if (path.isAbsolute(value) || isWindowsAbsolutePath(normalized)) {
35
+ if (isInside(value, rootDir)) {
36
+ const relativeToRoot = normalizeAssetRelativePath(path.relative(rootDir, value));
37
+ if (relativeToRoot) {
38
+ variants.add(relativeToRoot);
39
+ }
40
+ }
41
+ return variants;
42
+ }
43
+ const relativePath = normalizeAssetRelativePath(value);
44
+ if (relativePath) {
45
+ variants.add(relativePath);
46
+ }
47
+ return variants;
48
+ };
49
+ const getStringValues = value => {
50
+ if (!Array.isArray(value)) return [];
51
+ return value.filter(item => typeof item === 'string');
52
+ };
53
+ const getOutputAssetNames = asset => [...(typeof asset.name === 'string' ? [asset.name] : []), ...getStringValues(asset.names), ...(typeof asset.originalFileName === 'string' ? [asset.originalFileName] : []), ...getStringValues(asset.originalFileNames)];
54
+ const isOutputAssetLike = value => !!value && typeof value === 'object' && value.type === 'asset' && typeof value.fileName === 'string';
55
+ const isOutputChunkLike = value => !!value && typeof value === 'object' && value.type === 'chunk' && typeof value.fileName === 'string' && typeof value.code === 'string';
56
+ const getTrackedModuleIdForChunk = (chunk, cssFilesByModuleId) => {
57
+ if (typeof chunk.facadeModuleId === 'string' && cssFilesByModuleId.has(chunk.facadeModuleId)) {
58
+ return chunk.facadeModuleId;
59
+ }
60
+ if (!Array.isArray(chunk.moduleIds)) {
61
+ return null;
62
+ }
63
+ const moduleId = chunk.moduleIds.find(id => typeof id === 'string' && cssFilesByModuleId.has(id));
64
+ return moduleId ?? null;
65
+ };
66
+ const findWywCssAssetFileName = (bundle, cssFilename, rootDir) => {
67
+ const expectedNames = getComparableAssetPaths(cssFilename, rootDir);
68
+ for (const item of Object.values(bundle)) {
69
+ if (isOutputAssetLike(item) && item.fileName.endsWith('.css')) {
70
+ const isMatch = getOutputAssetNames(item).some(assetName => {
71
+ const variants = getComparableAssetPaths(assetName, rootDir);
72
+ return Array.from(variants).some(variant => expectedNames.has(variant));
73
+ });
74
+ if (isMatch) {
75
+ return normalizeToPosix(item.fileName);
76
+ }
77
+ }
78
+ }
79
+ return null;
80
+ };
81
+ const getRelativeImportPath = (fromFileName, toFileName) => {
82
+ const fromDir = path.posix.dirname(normalizeToPosix(fromFileName));
83
+ const relativePath = path.posix.relative(fromDir, normalizeToPosix(toFileName));
84
+ return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
85
+ };
86
+ const escapeForRegExp = value => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
87
+ const hasStaticImport = (code, specifier) => new RegExp(`(^|\\n)\\s*import\\s*(?:["']${escapeForRegExp(specifier)}["']|[^\\n;]+\\s+from\\s+["']${escapeForRegExp(specifier)}["'])`, 'm').test(code);
88
+ const hasRequireCall = (code, specifier) => new RegExp(`(^|[;\\n])\\s*require\\(\\s*["']${escapeForRegExp(specifier)}["']\\s*\\)`, 'm').test(code);
89
+ const getCssLoadStatement = (format, specifier) => format === 'cjs' ? `require(${JSON.stringify(specifier)});\n` : `import ${JSON.stringify(specifier)};\n`;
90
+ const hasCssLoadStatement = (code, specifier, format) => format === 'cjs' ? hasRequireCall(code, specifier) : hasStaticImport(code, specifier);
91
+ const prependCssLoadStatement = (code, specifier, format) => {
92
+ const statement = getCssLoadStatement(format, specifier);
93
+ let insertAt = 0;
94
+ if (code.startsWith('#!')) {
95
+ const lineBreakIndex = code.indexOf('\n');
96
+ if (lineBreakIndex >= 0) {
97
+ insertAt = lineBreakIndex + 1;
98
+ } else {
99
+ return `${code}\n${statement}`;
100
+ }
101
+ }
102
+ if (format === 'cjs') {
103
+ const directiveMatch = /^(?:\s*(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*');)+/.exec(code.slice(insertAt));
104
+ if (directiveMatch) {
105
+ insertAt += directiveMatch[0].length;
106
+ }
107
+ }
108
+ return `${code.slice(0, insertAt)}${statement}${code.slice(insertAt)}`;
109
+ };
30
110
  const VITE_FS_PREFIX = '/@fs/';
31
111
  const safeDecodeURIComponent = value => {
32
112
  try {
@@ -39,6 +119,23 @@ const normalizeViteFsPath = value => {
39
119
  const fsPath = value.slice(VITE_FS_PREFIX.length);
40
120
  return path.normalize(safeDecodeURIComponent(fsPath));
41
121
  };
122
+ const isCssReloadTarget = value => {
123
+ if (!value || typeof value !== 'object') return false;
124
+ const reloadTarget = value;
125
+ return !!reloadTarget.moduleGraph && typeof reloadTarget.moduleGraph.getModuleById === 'function' && typeof reloadTarget.reloadModule === 'function';
126
+ };
127
+ const getCssReloadTarget = (environment, server) => {
128
+ if (isCssReloadTarget(environment)) {
129
+ return environment;
130
+ }
131
+ if (server?.moduleGraph) {
132
+ return {
133
+ moduleGraph: server.moduleGraph,
134
+ reloadModule: module => server.reloadModule(module)
135
+ };
136
+ }
137
+ return null;
138
+ };
42
139
  const getWywCssAssetFileNames = (resolvedConfig, output, originalAssetFileNames) => {
43
140
  if (!output.preserveModules) return null;
44
141
  const rootDir = resolvedConfig.root;
@@ -115,8 +212,8 @@ export default function wywInJS({
115
212
  const filter = createFilter(include, exclude);
116
213
  const cssLookup = {};
117
214
  const cssFileLookup = {};
118
- const pendingCssReloads = new Set();
119
- let pendingCssReloadTimer;
215
+ const cssFilesByModuleId = new Map();
216
+ const pendingCssReloads = new WeakMap();
120
217
  let ssrDevCssVersion = 0;
121
218
  let config;
122
219
  let devServer;
@@ -139,17 +236,26 @@ export default function wywInJS({
139
236
  emitter,
140
237
  onDone
141
238
  } = createFileReporter(debug ?? false);
142
- const scheduleCssReload = cssFilename => {
143
- if (!devServer?.moduleGraph) return;
144
- pendingCssReloads.add(cssFilename);
145
- if (pendingCssReloadTimer) return;
146
- pendingCssReloadTimer = setTimeout(() => {
147
- pendingCssReloadTimer = undefined;
148
- const ids = Array.from(pendingCssReloads);
149
- pendingCssReloads.clear();
239
+ const scheduleCssReload = (reloadTarget, cssFilename) => {
240
+ let state = pendingCssReloads.get(reloadTarget);
241
+ if (!state) {
242
+ state = {
243
+ files: new Set()
244
+ };
245
+ pendingCssReloads.set(reloadTarget, state);
246
+ }
247
+ state.files.add(cssFilename);
248
+ if (state.timer) return;
249
+ state.timer = setTimeout(() => {
250
+ state.timer = undefined;
251
+ const ids = Array.from(state.files);
252
+ state.files.clear();
253
+ const {
254
+ moduleGraph
255
+ } = reloadTarget;
150
256
  for (const id of ids) {
151
- const module = devServer.moduleGraph.getModuleById(id);
152
- if (module) devServer.reloadModule(module);
257
+ const module = moduleGraph.getModuleById(id);
258
+ if (module) reloadTarget.reloadModule(module);
153
259
  }
154
260
  }, 0);
155
261
  };
@@ -380,6 +486,34 @@ export default function wywInJS({
380
486
  }
381
487
  return affected.map(target => devServer.moduleGraph.getModuleById(target.id)).concat(ctx.modules).filter(m => !!m);
382
488
  },
489
+ generateBundle(outputOptions, bundle) {
490
+ if (config.command !== 'build') return;
491
+ if (!outputOptions.preserveModules) return;
492
+ if (config.build.cssCodeSplit === false) return;
493
+ Object.values(bundle).forEach(item => {
494
+ if (!isOutputChunkLike(item)) {
495
+ return;
496
+ }
497
+ const chunk = item;
498
+ const moduleId = getTrackedModuleIdForChunk(chunk, cssFilesByModuleId);
499
+ if (!moduleId) {
500
+ return;
501
+ }
502
+ const cssFilename = cssFilesByModuleId.get(moduleId);
503
+ if (!cssFilename) {
504
+ return;
505
+ }
506
+ const emittedCssFileName = findWywCssAssetFileName(bundle, cssFilename, config.root);
507
+ if (!emittedCssFileName) {
508
+ return;
509
+ }
510
+ const relativeCssImport = getRelativeImportPath(chunk.fileName, emittedCssFileName);
511
+ if (hasCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format)) {
512
+ return;
513
+ }
514
+ chunk.code = prependCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format);
515
+ });
516
+ },
383
517
  async transform(code, url, transformOptions) {
384
518
  const [id] = url.split('?', 1);
385
519
 
@@ -425,9 +559,11 @@ export default function wywInJS({
425
559
  // 3. cssText is not empty, it means that file was transformed and it contains styles
426
560
 
427
561
  if (typeof cssText === 'undefined') {
562
+ cssFilesByModuleId.delete(id);
428
563
  return;
429
564
  }
430
565
  if (cssText === '') {
566
+ cssFilesByModuleId.delete(id);
431
567
  /* eslint-disable-next-line consistent-return */
432
568
  return {
433
569
  code: result.code,
@@ -436,6 +572,7 @@ export default function wywInJS({
436
572
  }
437
573
  dependencies ??= [];
438
574
  const cssFilename = path.normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`).replace(/\\/g, path.posix.sep);
575
+ cssFilesByModuleId.set(id, cssFilename);
439
576
  const cssRelativePath = path.relative(config.root, cssFilename).replace(/\\/g, path.posix.sep);
440
577
  const cssId = `/${cssRelativePath}`;
441
578
  if (sourceMap && result.cssSourceMapText) {
@@ -459,7 +596,10 @@ export default function wywInJS({
459
596
  dependencies
460
597
  });else target.dependencies = dependencies;
461
598
  if (didCssChange) {
462
- scheduleCssReload(cssFilename);
599
+ const reloadTarget = getCssReloadTarget(this.environment, devServer);
600
+ if (reloadTarget) {
601
+ scheduleCssReload(reloadTarget, cssFilename);
602
+ }
463
603
  if (ssrDevCssEnabled && config.command === 'serve') {
464
604
  ssrDevCssVersion += 1;
465
605
  }
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","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","Set","pendingCssReloadTimer","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","moduleGraph","add","setTimeout","undefined","ids","Array","from","clear","id","module","getModuleById","reloadModule","targets","clientCache","ssrCache","caches","getCache","isSsr","isInsideCacheDir","filename","cacheDir","getDepsOptimizer","server","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\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 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 Set<string>();\n let pendingCssReloadTimer: ReturnType<typeof setTimeout> | undefined;\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 = (cssFilename: string) => {\n if (!devServer?.moduleGraph) return;\n\n pendingCssReloads.add(cssFilename);\n\n if (pendingCssReloadTimer) return;\n pendingCssReloadTimer = setTimeout(() => {\n pendingCssReloadTimer = undefined;\n\n const ids = Array.from(pendingCssReloads);\n pendingCssReloads.clear();\n\n for (const id of ids) {\n const module = devServer.moduleGraph.getModuleById(id);\n if (module) devServer.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 scheduleCssReload(cssFilename);\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","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","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","JSON","stringify","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","cssLookup","cssFileLookup","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","scheduleCssReload","state","get","files","set","timer","setTimeout","undefined","ids","clear","targets","clientCache","ssrCache","caches","getCache","isSsr","isInsideCacheDir","filename","cacheDir","getDepsOptimizer","environments","client","depsOptimizer","_depsOptimizer","waitForOptimizedDep","isOptimizedDepFile","init","scanProcessing","info","metadata","depInfoList","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","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","dep","m","deps","flatMap","target","depId","cache","invalidateForFile","concat","generateBundle","outputOptions","cssCodeSplit","emittedCssFileName","relativeCssImport","transformOptions","overrideContext","context","env","withEnv","__wyw_import_meta_env","transformServices","options","pluginOptions","emitWarning","message","warn","eventEmitter","asyncResolve","result","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} 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 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 filter = createFilter(include, exclude);\n const cssLookup: { [key: string]: string } = {};\n const cssFileLookup: { [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 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 generateBundle(outputOptions, bundle) {\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 = 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 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 = path\n .normalize(`${id.replace(/\\.[jt]sx?$/, '')}.wyw-in-js.css`)\n .replace(/\\\\/g, path.posix.sep);\n cssFilesByModuleId.set(id, cssFilename);\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":[]}
package/lib/index.js CHANGED
@@ -34,6 +34,86 @@ const stripExtension = value => {
34
34
  const ext = _path.default.posix.extname(value);
35
35
  return ext ? value.slice(0, -ext.length) : value;
36
36
  };
37
+ const getComparableAssetPaths = (value, rootDir) => {
38
+ const variants = new Set();
39
+ const normalized = normalizeToPosix(value);
40
+ variants.add(normalized);
41
+ if (_path.default.isAbsolute(value) || isWindowsAbsolutePath(normalized)) {
42
+ if (isInside(value, rootDir)) {
43
+ const relativeToRoot = normalizeAssetRelativePath(_path.default.relative(rootDir, value));
44
+ if (relativeToRoot) {
45
+ variants.add(relativeToRoot);
46
+ }
47
+ }
48
+ return variants;
49
+ }
50
+ const relativePath = normalizeAssetRelativePath(value);
51
+ if (relativePath) {
52
+ variants.add(relativePath);
53
+ }
54
+ return variants;
55
+ };
56
+ const getStringValues = value => {
57
+ if (!Array.isArray(value)) return [];
58
+ return value.filter(item => typeof item === 'string');
59
+ };
60
+ const getOutputAssetNames = asset => [...(typeof asset.name === 'string' ? [asset.name] : []), ...getStringValues(asset.names), ...(typeof asset.originalFileName === 'string' ? [asset.originalFileName] : []), ...getStringValues(asset.originalFileNames)];
61
+ const isOutputAssetLike = value => !!value && typeof value === 'object' && value.type === 'asset' && typeof value.fileName === 'string';
62
+ const isOutputChunkLike = value => !!value && typeof value === 'object' && value.type === 'chunk' && typeof value.fileName === 'string' && typeof value.code === 'string';
63
+ const getTrackedModuleIdForChunk = (chunk, cssFilesByModuleId) => {
64
+ if (typeof chunk.facadeModuleId === 'string' && cssFilesByModuleId.has(chunk.facadeModuleId)) {
65
+ return chunk.facadeModuleId;
66
+ }
67
+ if (!Array.isArray(chunk.moduleIds)) {
68
+ return null;
69
+ }
70
+ const moduleId = chunk.moduleIds.find(id => typeof id === 'string' && cssFilesByModuleId.has(id));
71
+ return moduleId !== null && moduleId !== void 0 ? moduleId : null;
72
+ };
73
+ const findWywCssAssetFileName = (bundle, cssFilename, rootDir) => {
74
+ const expectedNames = getComparableAssetPaths(cssFilename, rootDir);
75
+ for (const item of Object.values(bundle)) {
76
+ if (isOutputAssetLike(item) && item.fileName.endsWith('.css')) {
77
+ const isMatch = getOutputAssetNames(item).some(assetName => {
78
+ const variants = getComparableAssetPaths(assetName, rootDir);
79
+ return Array.from(variants).some(variant => expectedNames.has(variant));
80
+ });
81
+ if (isMatch) {
82
+ return normalizeToPosix(item.fileName);
83
+ }
84
+ }
85
+ }
86
+ return null;
87
+ };
88
+ const getRelativeImportPath = (fromFileName, toFileName) => {
89
+ const fromDir = _path.default.posix.dirname(normalizeToPosix(fromFileName));
90
+ const relativePath = _path.default.posix.relative(fromDir, normalizeToPosix(toFileName));
91
+ return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
92
+ };
93
+ const escapeForRegExp = value => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
94
+ const hasStaticImport = (code, specifier) => new RegExp(`(^|\\n)\\s*import\\s*(?:["']${escapeForRegExp(specifier)}["']|[^\\n;]+\\s+from\\s+["']${escapeForRegExp(specifier)}["'])`, 'm').test(code);
95
+ const hasRequireCall = (code, specifier) => new RegExp(`(^|[;\\n])\\s*require\\(\\s*["']${escapeForRegExp(specifier)}["']\\s*\\)`, 'm').test(code);
96
+ const getCssLoadStatement = (format, specifier) => format === 'cjs' ? `require(${JSON.stringify(specifier)});\n` : `import ${JSON.stringify(specifier)};\n`;
97
+ const hasCssLoadStatement = (code, specifier, format) => format === 'cjs' ? hasRequireCall(code, specifier) : hasStaticImport(code, specifier);
98
+ const prependCssLoadStatement = (code, specifier, format) => {
99
+ const statement = getCssLoadStatement(format, specifier);
100
+ let insertAt = 0;
101
+ if (code.startsWith('#!')) {
102
+ const lineBreakIndex = code.indexOf('\n');
103
+ if (lineBreakIndex >= 0) {
104
+ insertAt = lineBreakIndex + 1;
105
+ } else {
106
+ return `${code}\n${statement}`;
107
+ }
108
+ }
109
+ if (format === 'cjs') {
110
+ const directiveMatch = /^(?:\s*(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*');)+/.exec(code.slice(insertAt));
111
+ if (directiveMatch) {
112
+ insertAt += directiveMatch[0].length;
113
+ }
114
+ }
115
+ return `${code.slice(0, insertAt)}${statement}${code.slice(insertAt)}`;
116
+ };
37
117
  const VITE_FS_PREFIX = '/@fs/';
38
118
  const safeDecodeURIComponent = value => {
39
119
  try {
@@ -46,6 +126,23 @@ const normalizeViteFsPath = value => {
46
126
  const fsPath = value.slice(VITE_FS_PREFIX.length);
47
127
  return _path.default.normalize(safeDecodeURIComponent(fsPath));
48
128
  };
129
+ const isCssReloadTarget = value => {
130
+ if (!value || typeof value !== 'object') return false;
131
+ const reloadTarget = value;
132
+ return !!reloadTarget.moduleGraph && typeof reloadTarget.moduleGraph.getModuleById === 'function' && typeof reloadTarget.reloadModule === 'function';
133
+ };
134
+ const getCssReloadTarget = (environment, server) => {
135
+ if (isCssReloadTarget(environment)) {
136
+ return environment;
137
+ }
138
+ if (server !== null && server !== void 0 && server.moduleGraph) {
139
+ return {
140
+ moduleGraph: server.moduleGraph,
141
+ reloadModule: module => server.reloadModule(module)
142
+ };
143
+ }
144
+ return null;
145
+ };
49
146
  const getWywCssAssetFileNames = (resolvedConfig, output, originalAssetFileNames) => {
50
147
  if (!output.preserveModules) return null;
51
148
  const rootDir = resolvedConfig.root;
@@ -122,8 +219,8 @@ function wywInJS({
122
219
  const filter = (0, _vite.createFilter)(include, exclude);
123
220
  const cssLookup = {};
124
221
  const cssFileLookup = {};
125
- const pendingCssReloads = new Set();
126
- let pendingCssReloadTimer;
222
+ const cssFilesByModuleId = new Map();
223
+ const pendingCssReloads = new WeakMap();
127
224
  let ssrDevCssVersion = 0;
128
225
  let config;
129
226
  let devServer;
@@ -146,18 +243,26 @@ function wywInJS({
146
243
  emitter,
147
244
  onDone
148
245
  } = (0, _transform.createFileReporter)(debug !== null && debug !== void 0 ? debug : false);
149
- const scheduleCssReload = cssFilename => {
150
- var _devServer;
151
- if (!((_devServer = devServer) !== null && _devServer !== void 0 && _devServer.moduleGraph)) return;
152
- pendingCssReloads.add(cssFilename);
153
- if (pendingCssReloadTimer) return;
154
- pendingCssReloadTimer = setTimeout(() => {
155
- pendingCssReloadTimer = undefined;
156
- const ids = Array.from(pendingCssReloads);
157
- pendingCssReloads.clear();
246
+ const scheduleCssReload = (reloadTarget, cssFilename) => {
247
+ let state = pendingCssReloads.get(reloadTarget);
248
+ if (!state) {
249
+ state = {
250
+ files: new Set()
251
+ };
252
+ pendingCssReloads.set(reloadTarget, state);
253
+ }
254
+ state.files.add(cssFilename);
255
+ if (state.timer) return;
256
+ state.timer = setTimeout(() => {
257
+ state.timer = undefined;
258
+ const ids = Array.from(state.files);
259
+ state.files.clear();
260
+ const {
261
+ moduleGraph
262
+ } = reloadTarget;
158
263
  for (const id of ids) {
159
- const module = devServer.moduleGraph.getModuleById(id);
160
- if (module) devServer.reloadModule(module);
264
+ const module = moduleGraph.getModuleById(id);
265
+ if (module) reloadTarget.reloadModule(module);
161
266
  }
162
267
  }, 0);
163
268
  };
@@ -392,6 +497,34 @@ function wywInJS({
392
497
  }
393
498
  return affected.map(target => devServer.moduleGraph.getModuleById(target.id)).concat(ctx.modules).filter(m => !!m);
394
499
  },
500
+ generateBundle(outputOptions, bundle) {
501
+ if (config.command !== 'build') return;
502
+ if (!outputOptions.preserveModules) return;
503
+ if (config.build.cssCodeSplit === false) return;
504
+ Object.values(bundle).forEach(item => {
505
+ if (!isOutputChunkLike(item)) {
506
+ return;
507
+ }
508
+ const chunk = item;
509
+ const moduleId = getTrackedModuleIdForChunk(chunk, cssFilesByModuleId);
510
+ if (!moduleId) {
511
+ return;
512
+ }
513
+ const cssFilename = cssFilesByModuleId.get(moduleId);
514
+ if (!cssFilename) {
515
+ return;
516
+ }
517
+ const emittedCssFileName = findWywCssAssetFileName(bundle, cssFilename, config.root);
518
+ if (!emittedCssFileName) {
519
+ return;
520
+ }
521
+ const relativeCssImport = getRelativeImportPath(chunk.fileName, emittedCssFileName);
522
+ if (hasCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format)) {
523
+ return;
524
+ }
525
+ chunk.code = prependCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format);
526
+ });
527
+ },
395
528
  async transform(code, url, transformOptions) {
396
529
  const [id] = url.split('?', 1);
397
530
 
@@ -438,9 +571,11 @@ function wywInJS({
438
571
  // 3. cssText is not empty, it means that file was transformed and it contains styles
439
572
 
440
573
  if (typeof cssText === 'undefined') {
574
+ cssFilesByModuleId.delete(id);
441
575
  return;
442
576
  }
443
577
  if (cssText === '') {
578
+ cssFilesByModuleId.delete(id);
444
579
  /* eslint-disable-next-line consistent-return */
445
580
  return {
446
581
  code: result.code,
@@ -449,6 +584,7 @@ function wywInJS({
449
584
  }
450
585
  dependencies !== null && dependencies !== void 0 ? dependencies : dependencies = [];
451
586
  const cssFilename = _path.default.normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`).replace(/\\/g, _path.default.posix.sep);
587
+ cssFilesByModuleId.set(id, cssFilename);
452
588
  const cssRelativePath = _path.default.relative(config.root, cssFilename).replace(/\\/g, _path.default.posix.sep);
453
589
  const cssId = `/${cssRelativePath}`;
454
590
  if (sourceMap && result.cssSourceMapText) {
@@ -472,7 +608,10 @@ function wywInJS({
472
608
  dependencies
473
609
  });else target.dependencies = dependencies;
474
610
  if (didCssChange) {
475
- scheduleCssReload(cssFilename);
611
+ const reloadTarget = getCssReloadTarget(this.environment, devServer);
612
+ if (reloadTarget) {
613
+ scheduleCssReload(reloadTarget, cssFilename);
614
+ }
476
615
  if (ssrDevCssEnabled && config.command === 'serve') {
477
616
  ssrDevCssVersion += 1;
478
617
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_fs","require","_path","_interopRequireDefault","_vite","_shared","_transform","e","__esModule","default","isWindowsAbsolutePath","value","test","normalizeToPosix","replace","path","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","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","createFilter","cssLookup","cssFileLookup","pendingCssReloads","Set","pendingCssReloadTimer","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","createFileReporter","scheduleCssReload","cssFilename","_devServer","moduleGraph","add","setTimeout","undefined","ids","Array","from","clear","id","module","getModuleById","reloadModule","targets","clientCache","TransformCacheCollection","ssrCache","caches","getCache","isSsr","isInsideCacheDir","filename","cacheDir","getDepsOptimizer","_ref","_ref2","_server$environments$","_server$environments","server","environments","client","depsOptimizer","_depsOptimizer","waitForOptimizedDep","_depsOptimizer$isOpti","_depsOptimizer$init","_depsOptimizer$metada","isOptimizedDepFile","call","init","scanProcessing","info","metadata","depInfoList","find","item","file","processing","viteResolver","resolveClient","what","importer","Error","resolveSsr","createAsyncResolver","asyncResolverFactory","resolved","stack","log","logger","extend","getFileIdx","resolvedId","existsSync","syncResolve","asyncResolveClient","asyncResolveSsr","enforce","buildEnd","process","cwd","configResolved","_config$envPrefix","createResolver","command","outputs","build","rollupOptions","outputEntries","isArray","forEach","entry","_output$assetFileName","_config$build$assetsD","assetFileNames","assetsDir","envPrefix","envDir","loaded","loadEnv","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","transform","code","transformOptions","overrideContext","context","_importMetaEnvForEval","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\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 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 Set<string>();\n let pendingCssReloadTimer: ReturnType<typeof setTimeout> | undefined;\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 = (cssFilename: string) => {\n if (!devServer?.moduleGraph) return;\n\n pendingCssReloads.add(cssFilename);\n\n if (pendingCssReloadTimer) return;\n pendingCssReloadTimer = setTimeout(() => {\n pendingCssReloadTimer = undefined;\n\n const ids = Array.from(pendingCssReloads);\n pendingCssReloads.clear();\n\n for (const id of ids) {\n const module = devServer.moduleGraph.getModuleById(id);\n if (module) devServer.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 scheduleCssReload(cssFilename);\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.js","names":["_fs","require","_path","_interopRequireDefault","_vite","_shared","_transform","e","__esModule","default","isWindowsAbsolutePath","value","test","normalizeToPosix","replace","path","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","JSON","stringify","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","createFilter","cssLookup","cssFileLookup","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","createFileReporter","scheduleCssReload","state","get","files","set","timer","setTimeout","undefined","ids","clear","targets","clientCache","TransformCacheCollection","ssrCache","caches","getCache","isSsr","isInsideCacheDir","filename","cacheDir","getDepsOptimizer","_ref","_ref2","_server$environments$","_server$environments","environments","client","depsOptimizer","_depsOptimizer","waitForOptimizedDep","_depsOptimizer$isOpti","_depsOptimizer$init","_depsOptimizer$metada","isOptimizedDepFile","call","init","scanProcessing","info","metadata","depInfoList","file","processing","viteResolver","resolveClient","what","importer","Error","resolveSsr","createAsyncResolver","asyncResolverFactory","resolved","stack","log","logger","extend","getFileIdx","resolvedId","existsSync","syncResolve","asyncResolveClient","asyncResolveSsr","enforce","buildEnd","process","cwd","configResolved","_config$envPrefix","createResolver","command","outputs","build","rollupOptions","outputEntries","forEach","entry","_output$assetFileName","_config$build$assetsD","assetFileNames","assetsDir","envPrefix","envDir","loaded","loadEnv","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","cssCodeSplit","emittedCssFileName","relativeCssImport","transform","transformOptions","overrideContext","context","_importMetaEnvForEval","env","withEnv","__wyw_import_meta_env","transformServices","options","pluginOptions","emitWarning","message","warn","eventEmitter","asyncResolve","result","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} 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 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 filter = createFilter(include, exclude);\n const cssLookup: { [key: string]: string } = {};\n const cssFileLookup: { [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 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 generateBundle(outputOptions, bundle) {\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 = 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 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 = path\n .normalize(`${id.replace(/\\.[jt]sx?$/, '')}.wyw-in-js.css`)\n .replace(/\\\\/g, path.posix.sep);\n cssFilesByModuleId.set(id, cssFilename);\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":[]}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@wyw-in-js/vite",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "dependencies": {
5
5
  "@wyw-in-js/shared": "1.0.5",
6
- "@wyw-in-js/transform": "1.0.7"
6
+ "@wyw-in-js/transform": "1.0.8"
7
7
  },
8
8
  "devDependencies": {
9
9
  "@types/node": "^16.18.55",
package/types/index.js CHANGED
@@ -32,6 +32,107 @@ const stripExtension = (value) => {
32
32
  const ext = path_1.default.posix.extname(value);
33
33
  return ext ? value.slice(0, -ext.length) : value;
34
34
  };
35
+ const getComparableAssetPaths = (value, rootDir) => {
36
+ const variants = new Set();
37
+ const normalized = normalizeToPosix(value);
38
+ variants.add(normalized);
39
+ if (path_1.default.isAbsolute(value) || isWindowsAbsolutePath(normalized)) {
40
+ if (isInside(value, rootDir)) {
41
+ const relativeToRoot = normalizeAssetRelativePath(path_1.default.relative(rootDir, value));
42
+ if (relativeToRoot) {
43
+ variants.add(relativeToRoot);
44
+ }
45
+ }
46
+ return variants;
47
+ }
48
+ const relativePath = normalizeAssetRelativePath(value);
49
+ if (relativePath) {
50
+ variants.add(relativePath);
51
+ }
52
+ return variants;
53
+ };
54
+ const getStringValues = (value) => {
55
+ if (!Array.isArray(value))
56
+ return [];
57
+ return value.filter((item) => typeof item === 'string');
58
+ };
59
+ const getOutputAssetNames = (asset) => [
60
+ ...(typeof asset.name === 'string' ? [asset.name] : []),
61
+ ...getStringValues(asset.names),
62
+ ...(typeof asset.originalFileName === 'string'
63
+ ? [asset.originalFileName]
64
+ : []),
65
+ ...getStringValues(asset.originalFileNames),
66
+ ];
67
+ const isOutputAssetLike = (value) => !!value &&
68
+ typeof value === 'object' &&
69
+ value.type === 'asset' &&
70
+ typeof value.fileName === 'string';
71
+ const isOutputChunkLike = (value) => !!value &&
72
+ typeof value === 'object' &&
73
+ value.type === 'chunk' &&
74
+ typeof value.fileName === 'string' &&
75
+ typeof value.code === 'string';
76
+ const getTrackedModuleIdForChunk = (chunk, cssFilesByModuleId) => {
77
+ if (typeof chunk.facadeModuleId === 'string' &&
78
+ cssFilesByModuleId.has(chunk.facadeModuleId)) {
79
+ return chunk.facadeModuleId;
80
+ }
81
+ if (!Array.isArray(chunk.moduleIds)) {
82
+ return null;
83
+ }
84
+ const moduleId = chunk.moduleIds.find((id) => typeof id === 'string' && cssFilesByModuleId.has(id));
85
+ return moduleId ?? null;
86
+ };
87
+ const findWywCssAssetFileName = (bundle, cssFilename, rootDir) => {
88
+ const expectedNames = getComparableAssetPaths(cssFilename, rootDir);
89
+ for (const item of Object.values(bundle)) {
90
+ if (isOutputAssetLike(item) && item.fileName.endsWith('.css')) {
91
+ const isMatch = getOutputAssetNames(item).some((assetName) => {
92
+ const variants = getComparableAssetPaths(assetName, rootDir);
93
+ return Array.from(variants).some((variant) => expectedNames.has(variant));
94
+ });
95
+ if (isMatch) {
96
+ return normalizeToPosix(item.fileName);
97
+ }
98
+ }
99
+ }
100
+ return null;
101
+ };
102
+ const getRelativeImportPath = (fromFileName, toFileName) => {
103
+ const fromDir = path_1.default.posix.dirname(normalizeToPosix(fromFileName));
104
+ const relativePath = path_1.default.posix.relative(fromDir, normalizeToPosix(toFileName));
105
+ return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
106
+ };
107
+ const escapeForRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
108
+ const hasStaticImport = (code, specifier) => new RegExp(`(^|\\n)\\s*import\\s*(?:["']${escapeForRegExp(specifier)}["']|[^\\n;]+\\s+from\\s+["']${escapeForRegExp(specifier)}["'])`, 'm').test(code);
109
+ const hasRequireCall = (code, specifier) => new RegExp(`(^|[;\\n])\\s*require\\(\\s*["']${escapeForRegExp(specifier)}["']\\s*\\)`, 'm').test(code);
110
+ const getCssLoadStatement = (format, specifier) => format === 'cjs'
111
+ ? `require(${JSON.stringify(specifier)});\n`
112
+ : `import ${JSON.stringify(specifier)};\n`;
113
+ const hasCssLoadStatement = (code, specifier, format) => format === 'cjs'
114
+ ? hasRequireCall(code, specifier)
115
+ : hasStaticImport(code, specifier);
116
+ const prependCssLoadStatement = (code, specifier, format) => {
117
+ const statement = getCssLoadStatement(format, specifier);
118
+ let insertAt = 0;
119
+ if (code.startsWith('#!')) {
120
+ const lineBreakIndex = code.indexOf('\n');
121
+ if (lineBreakIndex >= 0) {
122
+ insertAt = lineBreakIndex + 1;
123
+ }
124
+ else {
125
+ return `${code}\n${statement}`;
126
+ }
127
+ }
128
+ if (format === 'cjs') {
129
+ const directiveMatch = /^(?:\s*(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*');)+/.exec(code.slice(insertAt));
130
+ if (directiveMatch) {
131
+ insertAt += directiveMatch[0].length;
132
+ }
133
+ }
134
+ return `${code.slice(0, insertAt)}${statement}${code.slice(insertAt)}`;
135
+ };
35
136
  const VITE_FS_PREFIX = '/@fs/';
36
137
  const safeDecodeURIComponent = (value) => {
37
138
  try {
@@ -45,6 +146,26 @@ const normalizeViteFsPath = (value) => {
45
146
  const fsPath = value.slice(VITE_FS_PREFIX.length);
46
147
  return path_1.default.normalize(safeDecodeURIComponent(fsPath));
47
148
  };
149
+ const isCssReloadTarget = (value) => {
150
+ if (!value || typeof value !== 'object')
151
+ return false;
152
+ const reloadTarget = value;
153
+ return (!!reloadTarget.moduleGraph &&
154
+ typeof reloadTarget.moduleGraph.getModuleById === 'function' &&
155
+ typeof reloadTarget.reloadModule === 'function');
156
+ };
157
+ const getCssReloadTarget = (environment, server) => {
158
+ if (isCssReloadTarget(environment)) {
159
+ return environment;
160
+ }
161
+ if (server?.moduleGraph) {
162
+ return {
163
+ moduleGraph: server.moduleGraph,
164
+ reloadModule: (module) => server.reloadModule(module),
165
+ };
166
+ }
167
+ return null;
168
+ };
48
169
  const getWywCssAssetFileNames = (resolvedConfig, output, originalAssetFileNames) => {
49
170
  if (!output.preserveModules)
50
171
  return null;
@@ -126,8 +247,8 @@ function wywInJS({ debug, include, exclude, sourceMap, preserveCssPaths, keepCom
126
247
  const filter = (0, vite_1.createFilter)(include, exclude);
127
248
  const cssLookup = {};
128
249
  const cssFileLookup = {};
129
- const pendingCssReloads = new Set();
130
- let pendingCssReloadTimer;
250
+ const cssFilesByModuleId = new Map();
251
+ const pendingCssReloads = new WeakMap();
131
252
  let ssrDevCssVersion = 0;
132
253
  let config;
133
254
  let devServer;
@@ -155,20 +276,24 @@ function wywInJS({ debug, include, exclude, sourceMap, preserveCssPaths, keepCom
155
276
  return `${merged}\n`;
156
277
  };
157
278
  const { emitter, onDone } = (0, transform_1.createFileReporter)(debug ?? false);
158
- const scheduleCssReload = (cssFilename) => {
159
- if (!devServer?.moduleGraph)
160
- return;
161
- pendingCssReloads.add(cssFilename);
162
- if (pendingCssReloadTimer)
279
+ const scheduleCssReload = (reloadTarget, cssFilename) => {
280
+ let state = pendingCssReloads.get(reloadTarget);
281
+ if (!state) {
282
+ state = { files: new Set() };
283
+ pendingCssReloads.set(reloadTarget, state);
284
+ }
285
+ state.files.add(cssFilename);
286
+ if (state.timer)
163
287
  return;
164
- pendingCssReloadTimer = setTimeout(() => {
165
- pendingCssReloadTimer = undefined;
166
- const ids = Array.from(pendingCssReloads);
167
- pendingCssReloads.clear();
288
+ state.timer = setTimeout(() => {
289
+ state.timer = undefined;
290
+ const ids = Array.from(state.files);
291
+ state.files.clear();
292
+ const { moduleGraph } = reloadTarget;
168
293
  for (const id of ids) {
169
- const module = devServer.moduleGraph.getModuleById(id);
294
+ const module = moduleGraph.getModuleById(id);
170
295
  if (module)
171
- devServer.reloadModule(module);
296
+ reloadTarget.reloadModule(module);
172
297
  }
173
298
  }, 0);
174
299
  };
@@ -408,6 +533,37 @@ function wywInJS({ debug, include, exclude, sourceMap, preserveCssPaths, keepCom
408
533
  .concat(ctx.modules)
409
534
  .filter((m) => !!m);
410
535
  },
536
+ generateBundle(outputOptions, bundle) {
537
+ if (config.command !== 'build')
538
+ return;
539
+ if (!outputOptions.preserveModules)
540
+ return;
541
+ if (config.build.cssCodeSplit === false)
542
+ return;
543
+ Object.values(bundle).forEach((item) => {
544
+ if (!isOutputChunkLike(item)) {
545
+ return;
546
+ }
547
+ const chunk = item;
548
+ const moduleId = getTrackedModuleIdForChunk(chunk, cssFilesByModuleId);
549
+ if (!moduleId) {
550
+ return;
551
+ }
552
+ const cssFilename = cssFilesByModuleId.get(moduleId);
553
+ if (!cssFilename) {
554
+ return;
555
+ }
556
+ const emittedCssFileName = findWywCssAssetFileName(bundle, cssFilename, config.root);
557
+ if (!emittedCssFileName) {
558
+ return;
559
+ }
560
+ const relativeCssImport = getRelativeImportPath(chunk.fileName, emittedCssFileName);
561
+ if (hasCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format)) {
562
+ return;
563
+ }
564
+ chunk.code = prependCssLoadStatement(chunk.code, relativeCssImport, outputOptions.format);
565
+ });
566
+ },
411
567
  async transform(code, url, transformOptions) {
412
568
  const [id] = url.split('?', 1);
413
569
  // Do not transform ignored and generated files
@@ -453,9 +609,11 @@ function wywInJS({ debug, include, exclude, sourceMap, preserveCssPaths, keepCom
453
609
  // 2. cssText is empty, it means that file was transformed, but it does not contain any styles
454
610
  // 3. cssText is not empty, it means that file was transformed and it contains styles
455
611
  if (typeof cssText === 'undefined') {
612
+ cssFilesByModuleId.delete(id);
456
613
  return;
457
614
  }
458
615
  if (cssText === '') {
616
+ cssFilesByModuleId.delete(id);
459
617
  /* eslint-disable-next-line consistent-return */
460
618
  return {
461
619
  code: result.code,
@@ -466,6 +624,7 @@ function wywInJS({ debug, include, exclude, sourceMap, preserveCssPaths, keepCom
466
624
  const cssFilename = path_1.default
467
625
  .normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`)
468
626
  .replace(/\\/g, path_1.default.posix.sep);
627
+ cssFilesByModuleId.set(id, cssFilename);
469
628
  const cssRelativePath = path_1.default
470
629
  .relative(config.root, cssFilename)
471
630
  .replace(/\\/g, path_1.default.posix.sep);
@@ -492,7 +651,10 @@ function wywInJS({ debug, include, exclude, sourceMap, preserveCssPaths, keepCom
492
651
  else
493
652
  target.dependencies = dependencies;
494
653
  if (didCssChange) {
495
- scheduleCssReload(cssFilename);
654
+ const reloadTarget = getCssReloadTarget(this.environment, devServer);
655
+ if (reloadTarget) {
656
+ scheduleCssReload(reloadTarget, cssFilename);
657
+ }
496
658
  if (ssrDevCssEnabled && config.command === 'serve') {
497
659
  ssrDevCssVersion += 1;
498
660
  }