@wyw-in-js/vite 0.5.0 → 0.5.2

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
@@ -6,10 +6,9 @@
6
6
 
7
7
  import { existsSync } from 'fs';
8
8
  import path from 'path';
9
- import { createFilter } from '@rollup/pluginutils';
10
- import { optimizeDeps } from 'vite';
9
+ import { optimizeDeps, createFilter } from 'vite';
11
10
  import { logger, syncResolve } from '@wyw-in-js/shared';
12
- import { createFileReporter, getFileIdx, slugify, transform, TransformCacheCollection } from '@wyw-in-js/transform';
11
+ import { createFileReporter, getFileIdx, transform, TransformCacheCollection } from '@wyw-in-js/transform';
13
12
  export default function wywInJS({
14
13
  debug,
15
14
  include,
@@ -136,8 +135,7 @@ export default function wywInJS({
136
135
  };
137
136
  }
138
137
  dependencies ??= [];
139
- const slug = slugify(cssText);
140
- const cssFilename = path.normalize(`${id.replace(/\.[jt]sx?$/, '')}_${slug}.css`).replace(/\\/g, path.posix.sep);
138
+ const cssFilename = path.normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`).replace(/\\/g, path.posix.sep);
141
139
  const cssRelativePath = path.relative(config.root, cssFilename).replace(/\\/g, path.posix.sep);
142
140
  const cssId = `/${cssRelativePath}`;
143
141
  if (sourceMap && result.cssSourceMapText) {
@@ -147,13 +145,6 @@ export default function wywInJS({
147
145
  cssLookup[cssFilename] = cssText;
148
146
  cssFileLookup[cssId] = cssFilename;
149
147
  result.code += `\nimport ${JSON.stringify(cssFilename)};\n`;
150
- if (devServer?.moduleGraph) {
151
- const module = devServer.moduleGraph.getModuleById(cssId);
152
- if (module) {
153
- devServer.moduleGraph.invalidateModule(module);
154
- module.lastHMRTimestamp = module.lastInvalidationTimestamp || Date.now();
155
- }
156
- }
157
148
  for (let i = 0, end = dependencies.length; i < end; i++) {
158
149
  // eslint-disable-next-line no-await-in-loop
159
150
  const depModule = await this.resolve(dependencies[i], url, {
@@ -166,6 +157,12 @@ export default function wywInJS({
166
157
  id,
167
158
  dependencies
168
159
  });else target.dependencies = dependencies;
160
+ if (devServer?.moduleGraph) {
161
+ const module = devServer.moduleGraph.getModuleById(cssFilename);
162
+ if (module) {
163
+ devServer.reloadModule(module);
164
+ }
165
+ }
169
166
  /* eslint-disable-next-line consistent-return */
170
167
  return {
171
168
  code: result.code,
package/esm/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["existsSync","path","createFilter","optimizeDeps","logger","syncResolve","createFileReporter","getFileIdx","slugify","transform","TransformCacheCollection","wywInJS","debug","include","exclude","sourceMap","preprocessor","rest","filter","cssLookup","cssFileLookup","config","devServer","emitter","onDone","targets","cache","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","code","includes","log","extend","asyncResolve","what","importer","stack","resolved","resolve","external","resolvedId","startsWith","Error","transformServices","options","filename","root","pluginOptions","eventEmitter","result","cssText","slug","cssFilename","normalize","replace","posix","sep","cssRelativePath","relative","cssId","cssSourceMapText","Buffer","from","toString","JSON","stringify","module","invalidateModule","lastHMRTimestamp","lastInvalidationTimestamp","Date","now","i","end","depModule","isEntry","find","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 path from 'path';\n\nimport type { FilterPattern } from '@rollup/pluginutils';\nimport { createFilter } from '@rollup/pluginutils';\nimport { optimizeDeps } from 'vite';\nimport type { ModuleNode, Plugin, ResolvedConfig, ViteDevServer } 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 slugify,\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 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 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 (!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 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 slug = slugify(cssText);\n\n const cssFilename = path\n .normalize(`${id.replace(/\\.[jt]sx?$/, '')}_${slug}.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 if (devServer?.moduleGraph) {\n const module = devServer.moduleGraph.getModuleById(cssId);\n\n if (module) {\n devServer.moduleGraph.invalidateModule(module);\n module.lastHMRTimestamp =\n module.lastInvalidationTimestamp || Date.now();\n }\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 /* eslint-disable-next-line consistent-return */\n return { code: result.code, map: result.sourceMap };\n },\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,UAAU,QAAQ,IAAI;AAC/B,OAAOC,IAAI,MAAM,MAAM;AAGvB,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,YAAY,QAAQ,MAAM;AAGnC,SAASC,MAAM,EAAEC,WAAW,QAAQ,mBAAmB;AAMvD,SACEC,kBAAkB,EAClBC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,wBAAwB,QACnB,sBAAsB;AAY7B,eAAe,SAASC,OAAOA,CAAC;EAC9BC,KAAK;EACLC,OAAO;EACPC,OAAO;EACPC,SAAS;EACTC,YAAY;EACZ,GAAGC;AACc,CAAC,GAAG,CAAC,CAAC,EAAU;EACjC,MAAMC,MAAM,GAAGhB,YAAY,CAACW,OAAO,EAAEC,OAAO,CAAC;EAC7C,MAAMK,SAAoC,GAAG,CAAC,CAAC;EAC/C,MAAMC,aAAwC,GAAG,CAAC,CAAC;EACnD,IAAIC,MAAsB;EAC1B,IAAIC,SAAwB;EAE5B,MAAM;IAAEC,OAAO;IAAEC;EAAO,CAAC,GAAGlB,kBAAkB,CAACM,KAAK,IAAI,KAAK,CAAC;;EAE9D;EACA,MAAMa,OAAiD,GAAG,EAAE;EAC5D,MAAMC,KAAK,GAAG,IAAIhB,wBAAwB,CAAC,CAAC;EAC5C,OAAO;IACLiB,IAAI,EAAE,WAAW;IACjBC,OAAO,EAAE,MAAM;IACfC,QAAQA,CAAA,EAAG;MACTL,MAAM,CAACM,OAAO,CAACC,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IACDC,cAAcA,CAACC,cAA8B,EAAE;MAC7CZ,MAAM,GAAGY,cAAc;IACzB,CAAC;IACDC,eAAeA,CAACC,OAAO,EAAE;MACvBb,SAAS,GAAGa,OAAO;IACrB,CAAC;IACDC,IAAIA,CAACC,GAAW,EAAE;MAChB,MAAM,CAACC,EAAE,CAAC,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;MAC9B,OAAOpB,SAAS,CAACmB,EAAE,CAAC;IACtB,CAAC;IACD;IACAE,SAASA,CAACC,WAAmB,EAAE;MAC7B,MAAM,CAACH,EAAE,CAAC,GAAGG,WAAW,CAACF,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;MACtC,IAAIpB,SAAS,CAACmB,EAAE,CAAC,EAAE,OAAOA,EAAE;MAC5B,OAAOlB,aAAa,CAACkB,EAAE,CAAC;IAC1B,CAAC;IACDI,eAAeA,CAACC,GAAG,EAAE;MACnB;MACA,IAAIA,GAAG,CAACC,OAAO,CAACC,MAAM,EAAE,OAAOF,GAAG,CAACC,OAAO;;MAE1C;MACA,MAAME,QAAQ,GAAGrB,OAAO,CAACP,MAAM,CAC5B6B,CAAC;MACA;MACAA,CAAC,CAACC,YAAY,CAACC,IAAI,CAAEC,GAAG,IAAKA,GAAG,KAAKP,GAAG,CAACQ,IAAI,CAAC;MAC9C;MACAJ,CAAC,CAACC,YAAY,CAACC,IAAI,CAAEC,GAAG,IAAKP,GAAG,CAACC,OAAO,CAACK,IAAI,CAAEG,CAAC,IAAKA,CAAC,CAACD,IAAI,KAAKD,GAAG,CAAC,CACxE,CAAC;MACD,MAAMG,IAAI,GAAGP,QAAQ,CAACQ,OAAO,CAAEC,MAAM,IAAKA,MAAM,CAACP,YAAY,CAAC;;MAE9D;MACA,KAAK,MAAMQ,KAAK,IAAIH,IAAI,EAAE;QACxB3B,KAAK,CAAC+B,iBAAiB,CAACD,KAAK,CAAC;MAChC;MAEA,OAAOV,QAAQ,CACZY,GAAG,CAAEH,MAAM,IAAKjC,SAAS,CAACqC,WAAW,CAACC,aAAa,CAACL,MAAM,CAACjB,EAAE,CAAC,CAAC,CAC/DuB,MAAM,CAAClB,GAAG,CAACC,OAAO,CAAC,CACnB1B,MAAM,CAAEkC,CAAC,IAAsB,CAAC,CAACA,CAAC,CAAC;IACxC,CAAC;IACD,MAAM3C,SAASA,CAACqD,IAAY,EAAEzB,GAAW,EAAE;MACzC,MAAM,CAACC,EAAE,CAAC,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;;MAE9B;MACA,IAAIF,GAAG,CAAC0B,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC7C,MAAM,CAACmB,GAAG,CAAC,IAAIC,EAAE,IAAInB,SAAS,EACjE;MAEF,MAAM6C,GAAG,GAAG5D,MAAM,CAAC6D,MAAM,CAAC,MAAM,CAAC,CAACA,MAAM,CAAC1D,UAAU,CAAC+B,EAAE,CAAC,CAAC;MAExD0B,GAAG,CAAC,cAAc,EAAE1B,EAAE,CAAC;MAEvB,MAAM4B,YAAY,GAAG,MAAAA,CACnBC,IAAY,EACZC,QAAgB,EAChBC,KAAe,KACZ;QACH,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACC,OAAO,CAACJ,IAAI,EAAEC,QAAQ,CAAC;QACnD,IAAIE,QAAQ,EAAE;UACZ,IAAIA,QAAQ,CAACE,QAAQ,EAAE;YACrB;YACA;YACA,MAAMC,UAAU,GAAGpE,WAAW,CAAC8D,IAAI,EAAEC,QAAQ,EAAEC,KAAK,CAAC;YACrDL,GAAG,CAAC,8BAA8B,EAAEG,IAAI,EAAEC,QAAQ,EAAEE,QAAQ,CAAC;YAC7D,OAAOG,UAAU;UACnB;UAEAT,GAAG,CAAC,8BAA8B,EAAEG,IAAI,EAAEC,QAAQ,EAAEE,QAAQ,CAAC;UAC7D;UACA,MAAMG,UAAU,GAAGH,QAAQ,CAAChC,EAAE,CAACC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;UAE/C,IAAIkC,UAAU,CAACC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC/B;YACA;YACA,OAAO,IAAI;UACb;UAEA,IAAI,CAAC1E,UAAU,CAACyE,UAAU,CAAC,EAAE;YAC3B,MAAMtE,YAAY,CAACkB,MAAM,CAAC;UAC5B;UAEA,OAAOoD,UAAU;QACnB;QAEAT,GAAG,CAAC,oBAAoB,EAAEG,IAAI,EAAEC,QAAQ,CAAC;QACzC,MAAM,IAAIO,KAAK,CAAE,qBAAoBR,IAAK,EAAC,CAAC;MAC9C,CAAC;MAED,MAAMS,iBAAiB,GAAG;QACxBC,OAAO,EAAE;UACPC,QAAQ,EAAExC,EAAE;UACZyC,IAAI,EAAEjD,OAAO,CAACC,GAAG,CAAC,CAAC;UACnBf,YAAY;UACZgE,aAAa,EAAE/D;QACjB,CAAC;QACDS,KAAK;QACLuD,YAAY,EAAE1D;MAChB,CAAC;MAED,MAAM2D,MAAM,GAAG,MAAMzE,SAAS,CAACmE,iBAAiB,EAAEd,IAAI,EAAEI,YAAY,CAAC;MAErE,IAAI;QAAEiB,OAAO;QAAEnC;MAAa,CAAC,GAAGkC,MAAM;;MAEtC;MACA;MACA;MACA;;MAEA,IAAI,OAAOC,OAAO,KAAK,WAAW,EAAE;QAClC;MACF;MAEA,IAAIA,OAAO,KAAK,EAAE,EAAE;QAClB;QACA,OAAO;UACLrB,IAAI,EAAEoB,MAAM,CAACpB,IAAI;UACjBJ,GAAG,EAAEwB,MAAM,CAACnE;QACd,CAAC;MACH;MAEAiC,YAAY,KAAK,EAAE;MAEnB,MAAMoC,IAAI,GAAG5E,OAAO,CAAC2E,OAAO,CAAC;MAE7B,MAAME,WAAW,GAAGpF,IAAI,CACrBqF,SAAS,CAAE,GAAEhD,EAAE,CAACiD,OAAO,CAAC,YAAY,EAAE,EAAE,CAAE,IAAGH,IAAK,MAAK,CAAC,CACxDG,OAAO,CAAC,KAAK,EAAEtF,IAAI,CAACuF,KAAK,CAACC,GAAG,CAAC;MAEjC,MAAMC,eAAe,GAAGzF,IAAI,CACzB0F,QAAQ,CAACtE,MAAM,CAAC0D,IAAI,EAAEM,WAAW,CAAC,CAClCE,OAAO,CAAC,KAAK,EAAEtF,IAAI,CAACuF,KAAK,CAACC,GAAG,CAAC;MAEjC,MAAMG,KAAK,GAAI,IAAGF,eAAgB,EAAC;MAEnC,IAAI3E,SAAS,IAAImE,MAAM,CAACW,gBAAgB,EAAE;QACxC,MAAMnC,GAAG,GAAGoC,MAAM,CAACC,IAAI,CAACb,MAAM,CAACW,gBAAgB,CAAC,CAACG,QAAQ,CAAC,QAAQ,CAAC;QACnEb,OAAO,IAAK,qDAAoDzB,GAAI,IAAG;MACzE;MAEAvC,SAAS,CAACkE,WAAW,CAAC,GAAGF,OAAO;MAChC/D,aAAa,CAACwE,KAAK,CAAC,GAAGP,WAAW;MAElCH,MAAM,CAACpB,IAAI,IAAK,YAAWmC,IAAI,CAACC,SAAS,CAACb,WAAW,CAAE,KAAI;MAC3D,IAAI/D,SAAS,EAAEqC,WAAW,EAAE;QAC1B,MAAMwC,MAAM,GAAG7E,SAAS,CAACqC,WAAW,CAACC,aAAa,CAACgC,KAAK,CAAC;QAEzD,IAAIO,MAAM,EAAE;UACV7E,SAAS,CAACqC,WAAW,CAACyC,gBAAgB,CAACD,MAAM,CAAC;UAC9CA,MAAM,CAACE,gBAAgB,GACrBF,MAAM,CAACG,yBAAyB,IAAIC,IAAI,CAACC,GAAG,CAAC,CAAC;QAClD;MACF;MAEA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG1D,YAAY,CAACH,MAAM,EAAE4D,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;QACvD;QACA,MAAME,SAAS,GAAG,MAAM,IAAI,CAACpC,OAAO,CAACvB,YAAY,CAACyD,CAAC,CAAC,EAAEpE,GAAG,EAAE;UACzDuE,OAAO,EAAE;QACX,CAAC,CAAC;QACF,IAAID,SAAS,EAAE3D,YAAY,CAACyD,CAAC,CAAC,GAAGE,SAAS,CAACrE,EAAE;MAC/C;MACA,MAAMiB,MAAM,GAAG9B,OAAO,CAACoF,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACxE,EAAE,KAAKA,EAAE,CAAC;MAC/C,IAAI,CAACiB,MAAM,EAAE9B,OAAO,CAACsF,IAAI,CAAC;QAAEzE,EAAE;QAAEU;MAAa,CAAC,CAAC,CAAC,KAC3CO,MAAM,CAACP,YAAY,GAAGA,YAAY;MACvC;MACA,OAAO;QAAEc,IAAI,EAAEoB,MAAM,CAACpB,IAAI;QAAEJ,GAAG,EAAEwB,MAAM,CAACnE;MAAU,CAAC;IACrD;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"index.mjs","names":["existsSync","path","optimizeDeps","createFilter","logger","syncResolve","createFileReporter","getFileIdx","transform","TransformCacheCollection","wywInJS","debug","include","exclude","sourceMap","preprocessor","rest","filter","cssLookup","cssFileLookup","config","devServer","emitter","onDone","targets","cache","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","code","includes","log","extend","asyncResolve","what","importer","stack","resolved","resolve","external","resolvedId","startsWith","Error","transformServices","options","filename","root","pluginOptions","eventEmitter","result","cssText","cssFilename","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 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 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 (!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 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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"}
package/lib/index.js CHANGED
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = wywInJS;
7
7
  var _fs = require("fs");
8
8
  var _path = _interopRequireDefault(require("path"));
9
- var _pluginutils = require("@rollup/pluginutils");
10
9
  var _vite = require("vite");
11
10
  var _shared = require("@wyw-in-js/shared");
12
11
  var _transform = require("@wyw-in-js/transform");
@@ -25,7 +24,7 @@ function wywInJS({
25
24
  preprocessor,
26
25
  ...rest
27
26
  } = {}) {
28
- const filter = (0, _pluginutils.createFilter)(include, exclude);
27
+ const filter = (0, _vite.createFilter)(include, exclude);
29
28
  const cssLookup = {};
30
29
  const cssFileLookup = {};
31
30
  let config;
@@ -144,8 +143,7 @@ function wywInJS({
144
143
  };
145
144
  }
146
145
  (_dependencies = dependencies) !== null && _dependencies !== void 0 ? _dependencies : dependencies = [];
147
- const slug = (0, _transform.slugify)(cssText);
148
- const cssFilename = _path.default.normalize(`${id.replace(/\.[jt]sx?$/, '')}_${slug}.css`).replace(/\\/g, _path.default.posix.sep);
146
+ const cssFilename = _path.default.normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`).replace(/\\/g, _path.default.posix.sep);
149
147
  const cssRelativePath = _path.default.relative(config.root, cssFilename).replace(/\\/g, _path.default.posix.sep);
150
148
  const cssId = `/${cssRelativePath}`;
151
149
  if (sourceMap && result.cssSourceMapText) {
@@ -155,13 +153,6 @@ function wywInJS({
155
153
  cssLookup[cssFilename] = cssText;
156
154
  cssFileLookup[cssId] = cssFilename;
157
155
  result.code += `\nimport ${JSON.stringify(cssFilename)};\n`;
158
- if ((_devServer = devServer) !== null && _devServer !== void 0 && _devServer.moduleGraph) {
159
- const module = devServer.moduleGraph.getModuleById(cssId);
160
- if (module) {
161
- devServer.moduleGraph.invalidateModule(module);
162
- module.lastHMRTimestamp = module.lastInvalidationTimestamp || Date.now();
163
- }
164
- }
165
156
  for (let i = 0, end = dependencies.length; i < end; i++) {
166
157
  // eslint-disable-next-line no-await-in-loop
167
158
  const depModule = await this.resolve(dependencies[i], url, {
@@ -174,6 +165,12 @@ function wywInJS({
174
165
  id,
175
166
  dependencies
176
167
  });else target.dependencies = dependencies;
168
+ if ((_devServer = devServer) !== null && _devServer !== void 0 && _devServer.moduleGraph) {
169
+ const module = devServer.moduleGraph.getModuleById(cssFilename);
170
+ if (module) {
171
+ devServer.reloadModule(module);
172
+ }
173
+ }
177
174
  /* eslint-disable-next-line consistent-return */
178
175
  return {
179
176
  code: result.code,
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_fs","require","_path","_interopRequireDefault","_pluginutils","_vite","_shared","_transform","obj","__esModule","default","wywInJS","debug","include","exclude","sourceMap","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","slug","slugify","cssFilename","path","normalize","replace","posix","sep","cssRelativePath","relative","cssId","cssSourceMapText","Buffer","from","toString","JSON","stringify","module","invalidateModule","lastHMRTimestamp","lastInvalidationTimestamp","Date","now","i","end","depModule","isEntry","find","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 path from 'path';\n\nimport type { FilterPattern } from '@rollup/pluginutils';\nimport { createFilter } from '@rollup/pluginutils';\nimport { optimizeDeps } from 'vite';\nimport type { ModuleNode, Plugin, ResolvedConfig, ViteDevServer } 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 slugify,\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 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 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 (!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 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 slug = slugify(cssText);\n\n const cssFilename = path\n .normalize(`${id.replace(/\\.[jt]sx?$/, '')}_${slug}.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 if (devServer?.moduleGraph) {\n const module = devServer.moduleGraph.getModuleById(cssId);\n\n if (module) {\n devServer.moduleGraph.invalidateModule(module);\n module.lastHMRTimestamp =\n module.lastInvalidationTimestamp || Date.now();\n }\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 /* 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","obj","__esModule","default","wywInJS","debug","include","exclude","sourceMap","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 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 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 (!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 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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"}
package/package.json CHANGED
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "name": "@wyw-in-js/vite",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "dependencies": {
5
- "@rollup/pluginutils": "^5.0.4",
6
- "@wyw-in-js/shared": "0.5.0",
7
- "@wyw-in-js/transform": "0.5.0"
5
+ "@wyw-in-js/shared": "0.5.2",
6
+ "@wyw-in-js/transform": "0.5.2"
8
7
  },
9
8
  "devDependencies": {
10
9
  "@types/node": "^16.18.55",
11
10
  "source-map": "^0.7.4",
12
11
  "vite": ">=3.2.7",
13
- "@wyw-in-js/babel-config": "0.5.0",
14
- "@wyw-in-js/eslint-config": "0.5.0",
15
- "@wyw-in-js/jest-preset": "0.5.0",
16
- "@wyw-in-js/ts-config": "0.5.0"
12
+ "@wyw-in-js/babel-config": "0.5.2",
13
+ "@wyw-in-js/eslint-config": "0.5.2",
14
+ "@wyw-in-js/jest-preset": "0.5.2",
15
+ "@wyw-in-js/ts-config": "0.5.2"
17
16
  },
18
17
  "engines": {
19
18
  "node": ">=16.0.0"
package/types/index.d.ts CHANGED
@@ -3,8 +3,7 @@
3
3
  * It uses the transform.ts function to generate class names from source code,
4
4
  * returns transformed code without template literals and attaches generated source maps
5
5
  */
6
- import type { FilterPattern } from '@rollup/pluginutils';
7
- import type { Plugin } from 'vite';
6
+ import type { Plugin, FilterPattern } from 'vite';
8
7
  import type { IFileReporterOptions, PluginOptions, Preprocessor } from '@wyw-in-js/transform';
9
8
  type VitePluginOptions = {
10
9
  debug?: IFileReporterOptions | false | null | undefined;
package/types/index.js CHANGED
@@ -10,12 +10,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  const fs_1 = require("fs");
12
12
  const path_1 = __importDefault(require("path"));
13
- const pluginutils_1 = require("@rollup/pluginutils");
14
13
  const vite_1 = require("vite");
15
14
  const shared_1 = require("@wyw-in-js/shared");
16
15
  const transform_1 = require("@wyw-in-js/transform");
17
16
  function wywInJS({ debug, include, exclude, sourceMap, preprocessor, ...rest } = {}) {
18
- const filter = (0, pluginutils_1.createFilter)(include, exclude);
17
+ const filter = (0, vite_1.createFilter)(include, exclude);
19
18
  const cssLookup = {};
20
19
  const cssFileLookup = {};
21
20
  let config;
@@ -127,9 +126,8 @@ function wywInJS({ debug, include, exclude, sourceMap, preprocessor, ...rest } =
127
126
  };
128
127
  }
129
128
  dependencies ??= [];
130
- const slug = (0, transform_1.slugify)(cssText);
131
129
  const cssFilename = path_1.default
132
- .normalize(`${id.replace(/\.[jt]sx?$/, '')}_${slug}.css`)
130
+ .normalize(`${id.replace(/\.[jt]sx?$/, '')}.wyw-in-js.css`)
133
131
  .replace(/\\/g, path_1.default.posix.sep);
134
132
  const cssRelativePath = path_1.default
135
133
  .relative(config.root, cssFilename)
@@ -142,14 +140,6 @@ function wywInJS({ debug, include, exclude, sourceMap, preprocessor, ...rest } =
142
140
  cssLookup[cssFilename] = cssText;
143
141
  cssFileLookup[cssId] = cssFilename;
144
142
  result.code += `\nimport ${JSON.stringify(cssFilename)};\n`;
145
- if (devServer?.moduleGraph) {
146
- const module = devServer.moduleGraph.getModuleById(cssId);
147
- if (module) {
148
- devServer.moduleGraph.invalidateModule(module);
149
- module.lastHMRTimestamp =
150
- module.lastInvalidationTimestamp || Date.now();
151
- }
152
- }
153
143
  for (let i = 0, end = dependencies.length; i < end; i++) {
154
144
  // eslint-disable-next-line no-await-in-loop
155
145
  const depModule = await this.resolve(dependencies[i], url, {
@@ -163,6 +153,12 @@ function wywInJS({ debug, include, exclude, sourceMap, preprocessor, ...rest } =
163
153
  targets.push({ id, dependencies });
164
154
  else
165
155
  target.dependencies = dependencies;
156
+ if (devServer?.moduleGraph) {
157
+ const module = devServer.moduleGraph.getModuleById(cssFilename);
158
+ if (module) {
159
+ devServer.reloadModule(module);
160
+ }
161
+ }
166
162
  /* eslint-disable-next-line consistent-return */
167
163
  return { code: result.code, map: result.sourceMap };
168
164
  },