@wyw-in-js/vite 0.8.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -9,35 +9,224 @@ var _path = _interopRequireDefault(require("path"));
9
9
  var _vite = require("vite");
10
10
  var _shared = require("@wyw-in-js/shared");
11
11
  var _transform = require("@wyw-in-js/transform");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  /**
14
14
  * This file contains a Vite loader for wyw-in-js.
15
15
  * It uses the transform.ts function to generate class names from source code,
16
16
  * returns transformed code without template literals and attaches generated source maps
17
17
  */
18
18
 
19
+ const isWindowsAbsolutePath = value => /^[a-zA-Z]:[\\/]/.test(value);
20
+ const normalizeToPosix = value => value.replace(/\\/g, _path.default.posix.sep);
21
+ const isInside = (childPath, parentPath) => {
22
+ const rel = _path.default.relative(parentPath, childPath);
23
+ return rel === '' || !rel.startsWith('..') && !_path.default.isAbsolute(rel);
24
+ };
25
+ const isWywCssAssetName = value => value.endsWith('.wyw-in-js.css');
26
+ const normalizeAssetRelativePath = value => {
27
+ const normalized = _path.default.posix.normalize(normalizeToPosix(value).replace(/^\/+/, ''));
28
+ if (normalized.startsWith('..') || _path.default.posix.isAbsolute(normalized)) {
29
+ return null;
30
+ }
31
+ return normalized;
32
+ };
33
+ const stripExtension = value => {
34
+ const ext = _path.default.posix.extname(value);
35
+ return ext ? value.slice(0, -ext.length) : value;
36
+ };
37
+ const getWywCssAssetFileNames = (resolvedConfig, output, originalAssetFileNames) => {
38
+ if (!output.preserveModules) return null;
39
+ const rootDir = resolvedConfig.root;
40
+ const preserveModulesRootValue = output.preserveModulesRoot;
41
+ let preserveModulesRootAbs = null;
42
+ if (typeof preserveModulesRootValue === 'string') {
43
+ preserveModulesRootAbs = _path.default.isAbsolute(preserveModulesRootValue) ? preserveModulesRootValue : _path.default.resolve(rootDir, preserveModulesRootValue);
44
+ }
45
+ const preserveModulesRootRel = preserveModulesRootAbs && isInside(preserveModulesRootAbs, rootDir) ? normalizeToPosix(_path.default.relative(rootDir, preserveModulesRootAbs)) : null;
46
+ return assetInfo => {
47
+ const template = typeof originalAssetFileNames === 'function' ? originalAssetFileNames(assetInfo) : originalAssetFileNames;
48
+ const assetName = assetInfo === null || assetInfo === void 0 ? void 0 : assetInfo.name;
49
+ if (typeof assetName !== 'string' || !isWywCssAssetName(assetName)) {
50
+ return template;
51
+ }
52
+ if (!template.includes('[')) {
53
+ return template;
54
+ }
55
+ let relativePath = null;
56
+ const assetNameNormalized = normalizeToPosix(assetName);
57
+ if (_path.default.isAbsolute(assetName) || isWindowsAbsolutePath(assetNameNormalized)) {
58
+ const preserveRel = preserveModulesRootAbs && isInside(assetName, preserveModulesRootAbs) ? _path.default.relative(preserveModulesRootAbs, assetName) : null;
59
+ if (preserveRel && !_path.default.isAbsolute(preserveRel) && !preserveRel.startsWith('..')) {
60
+ relativePath = preserveRel;
61
+ } else if (isInside(assetName, rootDir)) {
62
+ relativePath = _path.default.relative(rootDir, assetName);
63
+ }
64
+ } else if (preserveModulesRootRel && assetNameNormalized.startsWith(`${preserveModulesRootRel}/`)) {
65
+ relativePath = assetNameNormalized.slice(preserveModulesRootRel.length + 1);
66
+ } else {
67
+ relativePath = assetNameNormalized;
68
+ }
69
+ const normalized = relativePath ? normalizeAssetRelativePath(relativePath) : null;
70
+ if (!normalized) {
71
+ return template;
72
+ }
73
+ const withoutExt = stripExtension(normalized);
74
+ if (template.includes('[name]')) {
75
+ const dir = _path.default.posix.dirname(withoutExt);
76
+ if (dir === '.' || dir === '') {
77
+ return template;
78
+ }
79
+ return template.replace(/\[name\]/g, `${dir}/[name]`);
80
+ }
81
+ const dir = _path.default.posix.dirname(withoutExt);
82
+ if (dir === '.' || dir === '') {
83
+ return template;
84
+ }
85
+ const idx = template.indexOf('[');
86
+ if (idx < 0) {
87
+ return template;
88
+ }
89
+ const prefix = template.slice(0, idx);
90
+ if (prefix !== '' && !prefix.endsWith('/')) {
91
+ return template;
92
+ }
93
+ return `${prefix}${dir}/${template.slice(idx)}`;
94
+ };
95
+ };
19
96
  function wywInJS({
20
97
  debug,
21
98
  include,
22
99
  exclude,
23
100
  sourceMap,
101
+ preserveCssPaths,
102
+ keepComments,
24
103
  prefixer,
25
104
  preprocessor,
105
+ ssrDevCss,
106
+ ssrDevCssPath,
107
+ transformLibraries,
26
108
  ...rest
27
109
  } = {}) {
28
110
  const filter = (0, _vite.createFilter)(include, exclude);
29
111
  const cssLookup = {};
30
112
  const cssFileLookup = {};
113
+ const pendingCssReloads = new Set();
114
+ let pendingCssReloadTimer;
115
+ let ssrDevCssVersion = 0;
31
116
  let config;
32
117
  let devServer;
118
+ let importMetaEnvForEval = null;
119
+ const ssrDevCssEnabled = Boolean(ssrDevCss);
120
+ const [ssrDevCssPathname, ssrDevCssQuery] = (ssrDevCssPath !== null && ssrDevCssPath !== void 0 ? ssrDevCssPath : '/_wyw-in-js/ssr.css').split('?', 2);
121
+ const ssrDevCssRoute = ssrDevCssPathname.startsWith('/') ? ssrDevCssPathname : `/${ssrDevCssPathname}`;
122
+ const getSsrDevCssHref = () => {
123
+ const versionParam = `v=${ssrDevCssVersion}`;
124
+ const query = ssrDevCssQuery ? `${ssrDevCssQuery}&${versionParam}` : versionParam;
125
+ return `${ssrDevCssRoute}?${query}`;
126
+ };
127
+ const getSsrDevCssContents = () => {
128
+ const entries = Object.entries(cssLookup);
129
+ if (entries.length === 0) return '';
130
+ const merged = entries.sort(([a], [b]) => a.localeCompare(b)).map(([, cssText]) => cssText).join('\n');
131
+ return `${merged}\n`;
132
+ };
33
133
  const {
34
134
  emitter,
35
135
  onDone
36
136
  } = (0, _transform.createFileReporter)(debug !== null && debug !== void 0 ? debug : false);
137
+ const scheduleCssReload = cssFilename => {
138
+ var _devServer;
139
+ if (!((_devServer = devServer) !== null && _devServer !== void 0 && _devServer.moduleGraph)) return;
140
+ pendingCssReloads.add(cssFilename);
141
+ if (pendingCssReloadTimer) return;
142
+ pendingCssReloadTimer = setTimeout(() => {
143
+ pendingCssReloadTimer = undefined;
144
+ const ids = Array.from(pendingCssReloads);
145
+ pendingCssReloads.clear();
146
+ for (const id of ids) {
147
+ const module = devServer.moduleGraph.getModuleById(id);
148
+ if (module) devServer.reloadModule(module);
149
+ }
150
+ }, 0);
151
+ };
37
152
 
38
153
  // <dependency id, targets>
39
154
  const targets = [];
40
155
  const cache = new _transform.TransformCacheCollection();
156
+ const isInsideCacheDir = filename => {
157
+ if (!config.cacheDir) {
158
+ return false;
159
+ }
160
+ const relative = _path.default.relative(config.cacheDir, filename);
161
+ return relative !== '' && !relative.startsWith('..') && !_path.default.isAbsolute(relative);
162
+ };
163
+ const getDepsOptimizer = () => {
164
+ var _ref, _ref2, _server$environments$, _server$environments;
165
+ if (!devServer) return null;
166
+ const server = devServer;
167
+ return (_ref = (_ref2 = (_server$environments$ = (_server$environments = server.environments) === null || _server$environments === void 0 || (_server$environments = _server$environments.client) === null || _server$environments === void 0 ? void 0 : _server$environments.depsOptimizer) !== null && _server$environments$ !== void 0 ? _server$environments$ : server.depsOptimizer) !== null && _ref2 !== void 0 ? _ref2 : server._depsOptimizer) !== null && _ref !== void 0 ? _ref : null;
168
+ };
169
+ const waitForOptimizedDep = async filename => {
170
+ var _depsOptimizer$isOpti, _depsOptimizer$init, _depsOptimizer$metada;
171
+ const depsOptimizer = getDepsOptimizer();
172
+ if (!(depsOptimizer !== null && depsOptimizer !== void 0 && (_depsOptimizer$isOpti = depsOptimizer.isOptimizedDepFile) !== null && _depsOptimizer$isOpti !== void 0 && _depsOptimizer$isOpti.call(depsOptimizer, filename))) {
173
+ return false;
174
+ }
175
+ await ((_depsOptimizer$init = depsOptimizer.init) === null || _depsOptimizer$init === void 0 ? void 0 : _depsOptimizer$init.call(depsOptimizer));
176
+ await depsOptimizer.scanProcessing;
177
+ const info = (_depsOptimizer$metada = depsOptimizer.metadata) === null || _depsOptimizer$metada === void 0 || (_depsOptimizer$metada = _depsOptimizer$metada.depInfoList) === null || _depsOptimizer$metada === void 0 ? void 0 : _depsOptimizer$metada.find(item => item.file === filename);
178
+ if (info !== null && info !== void 0 && info.processing) {
179
+ await info.processing;
180
+ }
181
+ return true;
182
+ };
183
+ const createAsyncResolver = (0, _shared.asyncResolverFactory)(async (resolved, what, importer, stack) => {
184
+ const log = _shared.logger.extend('vite').extend((0, _transform.getFileIdx)(importer));
185
+ if (resolved) {
186
+ if (resolved.external) {
187
+ // If module is marked as external, Rollup will not resolve it,
188
+ // so we need to resolve it ourselves with default resolver
189
+ const resolvedId = (0, _shared.syncResolve)(what, importer, stack);
190
+ log("resolve ✅ '%s'@'%s -> %O\n%s", what, importer, resolved);
191
+ return resolvedId;
192
+ }
193
+ log("resolve ✅ '%s'@'%s -> %O\n%s", what, importer, resolved);
194
+
195
+ // Vite adds param like `?v=667939b3` to cached modules
196
+ const resolvedId = resolved.id.split('?', 1)[0];
197
+ if (resolvedId.startsWith('\0')) {
198
+ // \0 is a special character in Rollup that tells Rollup to not include this in the bundle
199
+ // https://rollupjs.org/guide/en/#outputexports
200
+ return null;
201
+ }
202
+ if (resolvedId.startsWith('/@')) {
203
+ return null;
204
+ }
205
+ if (!(0, _fs.existsSync)(resolvedId)) {
206
+ // When Vite resolves to an optimized deps entry (cacheDir) it may not be written yet.
207
+ // Wait for Vite's optimizer instead of calling optimizeDeps() manually (deprecated in Vite 7).
208
+ try {
209
+ await waitForOptimizedDep(resolvedId);
210
+ } catch {
211
+ // If optimizer failed, fall through to preserve previous behavior and surface the error.
212
+ }
213
+
214
+ // Vite can return an optimized deps entry (from cacheDir) before it's written to disk.
215
+ // Manually calling optimizeDeps is deprecated in Vite 7 and can also get called many times.
216
+ // Instead, fall back to resolving the original module path directly.
217
+ if (!(0, _fs.existsSync)(resolvedId) && isInsideCacheDir(resolvedId)) {
218
+ try {
219
+ return (0, _shared.syncResolve)(what, importer, stack);
220
+ } catch {
221
+ // Fall through to preserve previous behavior: return resolvedId and let WyW surface the error.
222
+ }
223
+ }
224
+ }
225
+ return resolvedId;
226
+ }
227
+ log("resolve ❌ '%s'@'%s", what, importer);
228
+ throw new Error(`Could not resolve ${what}`);
229
+ }, (what, importer) => [what, importer]);
41
230
  return {
42
231
  name: 'wyw-in-js',
43
232
  enforce: 'post',
@@ -45,10 +234,92 @@ function wywInJS({
45
234
  onDone(process.cwd());
46
235
  },
47
236
  configResolved(resolvedConfig) {
237
+ var _config$envPrefix;
48
238
  config = resolvedConfig;
239
+ if (preserveCssPaths && config.command === 'build') {
240
+ const outputs = config.build.rollupOptions.output;
241
+ let outputEntries = [];
242
+ if (Array.isArray(outputs)) {
243
+ outputEntries = outputs;
244
+ } else if (outputs) {
245
+ outputEntries = [outputs];
246
+ }
247
+ outputEntries.forEach(entry => {
248
+ var _output$assetFileName, _config$build$assetsD;
249
+ if (!entry || typeof entry !== 'object') return;
250
+ const output = entry;
251
+ if (!output.preserveModules) return;
252
+ const template = (_output$assetFileName = output.assetFileNames) !== null && _output$assetFileName !== void 0 ? _output$assetFileName : `${(_config$build$assetsD = config.build.assetsDir) !== null && _config$build$assetsD !== void 0 ? _config$build$assetsD : 'assets'}/[name].[hash].[ext]`;
253
+ const assetFileNames = getWywCssAssetFileNames(config, output, template);
254
+ if (assetFileNames) output.assetFileNames = assetFileNames;
255
+ });
256
+ }
257
+ const envPrefix = (_config$envPrefix = config.envPrefix) !== null && _config$envPrefix !== void 0 ? _config$envPrefix : 'VITE_';
258
+ const envDir =
259
+ // envDir is absolute in modern Vite, but keep a fallback for older versions
260
+ 'envDir' in config && typeof config.envDir === 'string' ? config.envDir : config.root;
261
+ const loaded = (0, _vite.loadEnv)(config.mode, envDir, envPrefix);
262
+ const base = {
263
+ ...loaded,
264
+ BASE_URL: config.base,
265
+ MODE: config.mode,
266
+ DEV: config.command === 'serve',
267
+ PROD: config.command === 'build'
268
+ };
269
+ importMetaEnvForEval = {
270
+ client: {
271
+ ...base,
272
+ SSR: false
273
+ },
274
+ ssr: {
275
+ ...base,
276
+ SSR: true
277
+ }
278
+ };
49
279
  },
50
280
  configureServer(_server) {
51
281
  devServer = _server;
282
+ if (!ssrDevCssEnabled || config.command !== 'serve') return;
283
+ devServer.middlewares.use((req, res, next) => {
284
+ const {
285
+ url
286
+ } = req;
287
+ if (!url) {
288
+ next();
289
+ return;
290
+ }
291
+ const [pathname] = url.split('?', 1);
292
+ if (pathname !== ssrDevCssRoute) {
293
+ next();
294
+ return;
295
+ }
296
+ const etag = `W/"${ssrDevCssVersion}"`;
297
+ const ifNoneMatch = req.headers['if-none-match'];
298
+ if (ifNoneMatch === etag) {
299
+ res.statusCode = 304;
300
+ res.end();
301
+ return;
302
+ }
303
+ res.statusCode = 200;
304
+ res.setHeader('Content-Type', 'text/css; charset=utf-8');
305
+ res.setHeader('Cache-Control', 'no-cache');
306
+ res.setHeader('ETag', etag);
307
+ res.end(getSsrDevCssContents());
308
+ });
309
+ },
310
+ transformIndexHtml(html) {
311
+ if (!ssrDevCssEnabled || config.command !== 'serve') return undefined;
312
+ return {
313
+ html,
314
+ tags: [{
315
+ tag: 'link',
316
+ attrs: {
317
+ rel: 'stylesheet',
318
+ href: getSsrDevCssHref()
319
+ },
320
+ injectTo: 'head-prepend'
321
+ }]
322
+ };
52
323
  },
53
324
  load(url) {
54
325
  const [id] = url.split('?', 1);
@@ -78,55 +349,40 @@ function wywInJS({
78
349
  }
79
350
  return affected.map(target => devServer.moduleGraph.getModuleById(target.id)).concat(ctx.modules).filter(m => !!m);
80
351
  },
81
- async transform(code, url) {
82
- var _dependencies, _devServer;
352
+ async transform(code, url, transformOptions) {
83
353
  const [id] = url.split('?', 1);
84
354
 
85
355
  // Do not transform ignored and generated files
86
- if (url.includes('node_modules') || !filter(url) || id in cssLookup) return;
356
+ if (!transformLibraries && url.includes('node_modules') || !filter(url) || id in cssLookup) return;
87
357
  const log = _shared.logger.extend('vite').extend((0, _transform.getFileIdx)(id));
88
358
  log('transform %s', id);
89
- const asyncResolve = async (what, importer, stack) => {
90
- const resolved = await this.resolve(what, importer);
91
- if (resolved) {
92
- if (resolved.external) {
93
- // If module is marked as external, Rollup will not resolve it,
94
- // so we need to resolve it ourselves with default resolver
95
- const resolvedId = (0, _shared.syncResolve)(what, importer, stack);
96
- log("resolve '%s'@'%s -> %O\n%s", what, importer, resolved);
97
- return resolvedId;
98
- }
99
- log("resolve ✅ '%s'@'%s -> %O\n%s", what, importer, resolved);
100
- // Vite adds param like `?v=667939b3` to cached modules
101
- const resolvedId = resolved.id.split('?', 1)[0];
102
- if (resolvedId.startsWith('\0')) {
103
- // \0 is a special character in Rollup that tells Rollup to not include this in the bundle
104
- // https://rollupjs.org/guide/en/#outputexports
105
- return null;
106
- }
107
- if (resolvedId.startsWith('/@')) {
108
- return null;
109
- }
110
- if (!(0, _fs.existsSync)(resolvedId)) {
111
- await (0, _vite.optimizeDeps)(config);
112
- }
113
- return resolvedId;
114
- }
115
- log("resolve ❌ '%s'@'%s", what, importer);
116
- throw new Error(`Could not resolve ${what}`);
359
+ const overrideContext = (context, filename) => {
360
+ var _importMetaEnvForEval;
361
+ const isSsr = typeof transformOptions === 'boolean' ? transformOptions : Boolean(transformOptions === null || transformOptions === void 0 ? void 0 : transformOptions.ssr);
362
+ const env = (_importMetaEnvForEval = importMetaEnvForEval) === null || _importMetaEnvForEval === void 0 ? void 0 : _importMetaEnvForEval[isSsr ? 'ssr' : 'client'];
363
+ const withEnv = env ? {
364
+ ...context,
365
+ __wyw_import_meta_env: env
366
+ } : context;
367
+ return rest.overrideContext ? rest.overrideContext(withEnv, filename) : withEnv;
117
368
  };
118
369
  const transformServices = {
119
370
  options: {
120
371
  filename: id,
121
372
  root: process.cwd(),
122
373
  prefixer,
374
+ keepComments,
123
375
  preprocessor,
124
- pluginOptions: rest
376
+ pluginOptions: {
377
+ ...rest,
378
+ overrideContext
379
+ }
125
380
  },
126
381
  cache,
382
+ emitWarning: message => this.warn(message),
127
383
  eventEmitter: emitter
128
384
  };
129
- const result = await (0, _transform.transform)(transformServices, code, asyncResolve);
385
+ const result = await (0, _transform.transform)(transformServices, code, createAsyncResolver(this.resolve));
130
386
  let {
131
387
  cssText,
132
388
  dependencies
@@ -147,7 +403,7 @@ function wywInJS({
147
403
  map: result.sourceMap
148
404
  };
149
405
  }
150
- (_dependencies = dependencies) !== null && _dependencies !== void 0 ? _dependencies : dependencies = [];
406
+ dependencies !== null && dependencies !== void 0 ? dependencies : dependencies = [];
151
407
  const cssFilename = _path.default.normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`).replace(/\\/g, _path.default.posix.sep);
152
408
  const cssRelativePath = _path.default.relative(config.root, cssFilename).replace(/\\/g, _path.default.posix.sep);
153
409
  const cssId = `/${cssRelativePath}`;
@@ -155,6 +411,7 @@ function wywInJS({
155
411
  const map = Buffer.from(result.cssSourceMapText).toString('base64');
156
412
  cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;
157
413
  }
414
+ const didCssChange = cssLookup[cssFilename] !== cssText;
158
415
  cssLookup[cssFilename] = cssText;
159
416
  cssFileLookup[cssId] = cssFilename;
160
417
  result.code += `\nimport ${JSON.stringify(cssFilename)};\n`;
@@ -170,10 +427,10 @@ function wywInJS({
170
427
  id,
171
428
  dependencies
172
429
  });else target.dependencies = dependencies;
173
- if ((_devServer = devServer) !== null && _devServer !== void 0 && _devServer.moduleGraph) {
174
- const module = devServer.moduleGraph.getModuleById(cssFilename);
175
- if (module) {
176
- devServer.reloadModule(module);
430
+ if (didCssChange) {
431
+ scheduleCssReload(cssFilename);
432
+ if (ssrDevCssEnabled && config.command === 'serve') {
433
+ ssrDevCssVersion += 1;
177
434
  }
178
435
  }
179
436
  /* eslint-disable-next-line consistent-return */
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_fs","require","_path","_interopRequireDefault","_vite","_shared","_transform","obj","__esModule","default","wywInJS","debug","include","exclude","sourceMap","prefixer","preprocessor","rest","filter","createFilter","cssLookup","cssFileLookup","config","devServer","emitter","onDone","createFileReporter","targets","cache","TransformCacheCollection","name","enforce","buildEnd","process","cwd","configResolved","resolvedConfig","configureServer","_server","load","url","id","split","resolveId","importeeUrl","handleHotUpdate","ctx","modules","length","affected","x","dependencies","some","dep","file","m","deps","flatMap","target","depId","invalidateForFile","map","moduleGraph","getModuleById","concat","transform","code","_dependencies","_devServer","includes","log","logger","extend","getFileIdx","asyncResolve","what","importer","stack","resolved","resolve","external","resolvedId","syncResolve","startsWith","existsSync","optimizeDeps","Error","transformServices","options","filename","root","pluginOptions","eventEmitter","result","cssText","cssFilename","path","normalize","replace","posix","sep","cssRelativePath","relative","cssId","cssSourceMapText","Buffer","from","toString","JSON","stringify","i","end","depModule","isEntry","find","t","push","module","reloadModule"],"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 path from 'path';\n\nimport { optimizeDeps, createFilter } from 'vite';\nimport type {\n ModuleNode,\n Plugin,\n ResolvedConfig,\n ViteDevServer,\n FilterPattern,\n} from 'vite';\n\nimport { 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 prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n} & Partial<PluginOptions>;\n\nexport { Plugin };\n\nexport default function wywInJS({\n debug,\n include,\n exclude,\n sourceMap,\n prefixer,\n preprocessor,\n ...rest\n}: VitePluginOptions = {}): Plugin {\n const filter = createFilter(include, exclude);\n const cssLookup: { [key: string]: string } = {};\n const cssFileLookup: { [key: string]: string } = {};\n let config: ResolvedConfig;\n let devServer: ViteDevServer;\n\n const { emitter, onDone } = createFileReporter(debug ?? false);\n\n // <dependency id, targets>\n const targets: { dependencies: string[]; id: string }[] = [];\n const cache = new TransformCacheCollection();\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 },\n configureServer(_server) {\n devServer = _server;\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 cache.invalidateForFile(depId);\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(code: string, url: string) {\n const [id] = url.split('?', 1);\n\n // Do not transform ignored and generated files\n if (url.includes('node_modules') || !filter(url) || id in cssLookup)\n return;\n\n const log = logger.extend('vite').extend(getFileIdx(id));\n\n log('transform %s', id);\n\n const asyncResolve = async (\n what: string,\n importer: string,\n stack: string[]\n ) => {\n const resolved = await this.resolve(what, importer);\n if (resolved) {\n if (resolved.external) {\n // If module is marked as external, Rollup will not resolve it,\n // so we need to resolve it ourselves with default resolver\n const resolvedId = syncResolve(what, importer, stack);\n log(\"resolve ✅ '%s'@'%s -> %O\\n%s\", what, importer, resolved);\n return resolvedId;\n }\n\n log(\"resolve ✅ '%s'@'%s -> %O\\n%s\", what, importer, resolved);\n // Vite adds param like `?v=667939b3` to cached modules\n const resolvedId = resolved.id.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('/@')) {\n return null;\n }\n\n if (!existsSync(resolvedId)) {\n await optimizeDeps(config);\n }\n\n return resolvedId;\n }\n\n log(\"resolve ❌ '%s'@'%s\", what, importer);\n throw new Error(`Could not resolve ${what}`);\n };\n\n const transformServices = {\n options: {\n filename: id,\n root: process.cwd(),\n prefixer,\n preprocessor,\n pluginOptions: rest,\n },\n cache,\n eventEmitter: emitter,\n };\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 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 (devServer?.moduleGraph) {\n const module = devServer.moduleGraph.getModuleById(cssFilename);\n\n if (module) {\n devServer.reloadModule(module);\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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"}
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","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","cache","TransformCacheCollection","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","createAsyncResolver","asyncResolverFactory","resolved","what","importer","stack","log","logger","extend","getFileIdx","external","resolvedId","syncResolve","existsSync","Error","enforce","buildEnd","process","cwd","configResolved","_config$envPrefix","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","invalidateForFile","concat","transform","code","transformOptions","overrideContext","context","_importMetaEnvForEval","isSsr","env","withEnv","__wyw_import_meta_env","transformServices","options","pluginOptions","emitWarning","message","warn","eventEmitter","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 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 cache = new TransformCacheCollection();\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 const createAsyncResolver = asyncResolverFactory(\n async (\n resolved: { external: boolean | 'absolute'; id: string } | null,\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 if (resolved.external) {\n // If module is marked as external, Rollup will not resolve it,\n // so we need to resolve it ourselves with default resolver\n const resolvedId = syncResolve(what, importer, stack);\n log(\"resolve ✅ '%s'@'%s -> %O\\n%s\", what, importer, resolved);\n return resolvedId;\n }\n\n log(\"resolve ✅ '%s'@'%s -> %O\\n%s\", what, importer, resolved);\n\n // Vite adds param like `?v=667939b3` to cached modules\n const resolvedId = resolved.id.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('/@')) {\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 return resolvedId;\n }\n\n log(\"resolve ❌ '%s'@'%s\", what, importer);\n throw new Error(`Could not resolve ${what}`);\n },\n (what, importer) => [what, importer]\n );\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\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 cache.invalidateForFile(depId);\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 overrideContext: OverrideContext = (context, filename) => {\n const isSsr =\n typeof transformOptions === 'boolean'\n ? transformOptions\n : Boolean(transformOptions?.ssr);\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,\n emitWarning: (message: string) => this.warn(message),\n eventEmitter: emitter,\n };\n\n const result = await transform(\n transformServices,\n code,\n createAsyncResolver(this.resolve)\n );\n\n let { cssText, dependencies } = result;\n\n // Heads up, there are three cases:\n // 1. cssText is undefined, it means that file was not transformed\n // 2. cssText is empty, it means that file was transformed, but it does not contain any styles\n // 3. cssText is not empty, it means that file was transformed and it contains styles\n\n if (typeof cssText === 'undefined') {\n 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":[]}
package/package.json CHANGED
@@ -1,18 +1,17 @@
1
1
  {
2
2
  "name": "@wyw-in-js/vite",
3
- "version": "0.8.1",
3
+ "version": "1.0.0",
4
4
  "dependencies": {
5
- "@wyw-in-js/shared": "0.8.1",
6
- "@wyw-in-js/transform": "0.8.1"
5
+ "@wyw-in-js/shared": "workspace:*",
6
+ "@wyw-in-js/transform": "workspace:*"
7
7
  },
8
8
  "devDependencies": {
9
9
  "@types/node": "^16.18.55",
10
+ "@wyw-in-js/babel-config": "workspace:*",
11
+ "@wyw-in-js/eslint-config": "workspace:*",
12
+ "@wyw-in-js/ts-config": "workspace:*",
10
13
  "source-map": "^0.7.4",
11
- "vite": ">=3.2.7",
12
- "@wyw-in-js/babel-config": "0.8.1",
13
- "@wyw-in-js/eslint-config": "0.8.1",
14
- "@wyw-in-js/jest-preset": "0.8.1",
15
- "@wyw-in-js/ts-config": "0.8.1"
14
+ "vite": ">=3.2.7"
16
15
  },
17
16
  "engines": {
18
17
  "node": ">=16.0.0"
@@ -36,12 +35,12 @@
36
35
  "publishConfig": {
37
36
  "access": "public"
38
37
  },
39
- "types": "types/index.d.ts",
40
38
  "scripts": {
41
39
  "build:esm": "babel src --out-dir esm --out-file-extension .mjs --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
42
40
  "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
43
41
  "build:types": "tsc --project ./tsconfig.lib.json --baseUrl . --rootDir ./src",
44
42
  "lint": "eslint --ext .js,.ts .",
45
- "test": "jest --config ./jest.config.js"
46
- }
47
- }
43
+ "test": "bun test src"
44
+ },
45
+ "types": "types/index.d.ts"
46
+ }
package/types/index.d.ts CHANGED
@@ -9,9 +9,14 @@ type VitePluginOptions = {
9
9
  debug?: IFileReporterOptions | false | null | undefined;
10
10
  exclude?: FilterPattern;
11
11
  include?: FilterPattern;
12
+ keepComments?: boolean | RegExp;
12
13
  prefixer?: boolean;
13
14
  preprocessor?: Preprocessor;
15
+ preserveCssPaths?: boolean;
14
16
  sourceMap?: boolean;
17
+ ssrDevCss?: boolean;
18
+ ssrDevCssPath?: string;
19
+ transformLibraries?: boolean;
15
20
  } & Partial<PluginOptions>;
16
21
  export { Plugin };
17
- export default function wywInJS({ debug, include, exclude, sourceMap, prefixer, preprocessor, ...rest }?: VitePluginOptions): Plugin;
22
+ export default function wywInJS({ debug, include, exclude, sourceMap, preserveCssPaths, keepComments, prefixer, preprocessor, ssrDevCss, ssrDevCssPath, transformLibraries, ...rest }?: VitePluginOptions): Plugin;