@wyw-in-js/esbuild 1.0.2 → 1.0.3

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
@@ -191,13 +191,25 @@ export default function wywInJS({
191
191
  };
192
192
  const result = await transform(transformServices, code, asyncResolve);
193
193
  const resolveDir = dirname(args.path);
194
- if (!result.cssText) {
194
+ if (typeof result.cssText === 'undefined') {
195
195
  return {
196
196
  contents: code,
197
197
  loader,
198
198
  resolveDir
199
199
  };
200
200
  }
201
+ if (result.cssText === '') {
202
+ let contents = result.code;
203
+ if (sourceMap && result.sourceMap) {
204
+ const wywMap = Buffer.from(JSON.stringify(result.sourceMap)).toString('base64');
205
+ contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;
206
+ }
207
+ return {
208
+ contents,
209
+ loader,
210
+ resolveDir
211
+ };
212
+ }
201
213
  let {
202
214
  cssText
203
215
  } = result;
package/esm/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["readFileSync","dirname","isAbsolute","join","parse","posix","transformSync","esbuildTransformSync","slugify","transform","TransformCacheCollection","createFileReporter","loadWywOptions","withDefaultServices","asyncResolverFactory","supportedFilterFlags","Set","nodeModulesRegex","wywInJS","babelTransform","debug","sourceMap","keepComments","prefixer","preprocessor","esbuildOptions","filter","transformLibraries","rest","options","cache","resolvedWywOptions","babel","filename","pluginOptions","root","process","cwd","createAsyncResolver","resolved","token","errors","length","Error","path","replace","sep","what","importer","resolveDir","kind","name","setup","build","cssLookup","Map","cssResolveDirs","warnedFilters","warnedEmptyBabelOptions","emitter","onDone","warnOnUnsupportedFlags","filterRegexp","removedFlags","sanitizedFlags","key","source","flags","has","add","nextFlags","console","warn","sanitizeFilter","split","flag","RegExp","asyncResolve","resolve","onEnd","onResolve","args","namespace","onLoad","contents","get","loader","rawCode","ext","test","initialOptions","jsxFactory","jsxFragment","codeForEsbuild","babelOptions","Object","keys","babelResult","ast","sourceFileName","sourceMaps","e","message","String","code","map","babelMap","Buffer","from","JSON","stringify","toString","transformed","sourcefile","sourcemap","esbuildMap","transformServices","eventEmitter","result","cssText","slug","cssFilename","cssSourceMapText","wywMap","set"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains an esbuild 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 { readFileSync } from 'fs';\nimport { dirname, isAbsolute, join, parse, posix } from 'path';\n\nimport type { Plugin, TransformOptions, Loader } from 'esbuild';\nimport { transformSync as esbuildTransformSync } from 'esbuild';\n\nimport type {\n PluginOptions,\n Preprocessor,\n IFileReporterOptions,\n} from '@wyw-in-js/transform';\nimport {\n slugify,\n transform,\n TransformCacheCollection,\n createFileReporter,\n loadWywOptions,\n withDefaultServices,\n} from '@wyw-in-js/transform';\nimport { asyncResolverFactory } from '@wyw-in-js/shared';\n\ntype EsbuildPluginOptions = {\n babelTransform?: boolean;\n debug?: IFileReporterOptions | false | null | undefined;\n esbuildOptions?: TransformOptions;\n filter?: RegExp | string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n transformLibraries?: boolean;\n} & Partial<PluginOptions>;\n\nconst supportedFilterFlags = new Set(['i', 'm', 's']);\n\nconst nodeModulesRegex = /^(?:.*[\\\\/])?node_modules(?:[\\\\/].*)?$/;\n\nexport default function wywInJS({\n babelTransform,\n debug,\n sourceMap,\n keepComments,\n prefixer,\n preprocessor,\n esbuildOptions,\n filter = /\\.(js|jsx|ts|tsx)$/,\n transformLibraries,\n ...rest\n}: EsbuildPluginOptions = {}): Plugin {\n let options = esbuildOptions;\n const cache = new TransformCacheCollection();\n let resolvedWywOptions: ReturnType<typeof loadWywOptions> | null = null;\n let babel: ReturnType<typeof withDefaultServices>['babel'] | null = null;\n if (babelTransform) {\n resolvedWywOptions = loadWywOptions(rest);\n babel = withDefaultServices({\n options: {\n filename: '<wyw-in-js/esbuild>',\n pluginOptions: resolvedWywOptions,\n root: process.cwd(),\n },\n }).babel;\n }\n const createAsyncResolver = asyncResolverFactory(\n async (\n resolved: {\n errors: unknown[];\n path: string;\n },\n token: string\n ): Promise<string> => {\n if (resolved.errors.length > 0) {\n throw new Error(`Cannot resolve ${token}`);\n }\n\n return resolved.path.replace(/\\\\/g, posix.sep);\n },\n (what, importer) => [\n what,\n {\n resolveDir: isAbsolute(importer)\n ? dirname(importer)\n : join(process.cwd(), dirname(importer)),\n kind: 'import-statement',\n },\n ]\n );\n return {\n name: 'wyw-in-js',\n setup(build) {\n const cssLookup = new Map<string, string>();\n const cssResolveDirs = new Map<string, string>();\n const warnedFilters = new Set<string>();\n let warnedEmptyBabelOptions = false;\n\n const { emitter, onDone } = createFileReporter(debug ?? false);\n\n const warnOnUnsupportedFlags = (\n filterRegexp: RegExp,\n removedFlags: string,\n sanitizedFlags: string\n ) => {\n const key = `${filterRegexp.source}/${filterRegexp.flags}`;\n if (warnedFilters.has(key)) {\n return;\n }\n warnedFilters.add(key);\n const nextFlags = sanitizedFlags || 'none';\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] Ignoring unsupported RegExp flags \"${removedFlags}\" ` +\n `in esbuild filter /${filterRegexp.source}/${filterRegexp.flags}. ` +\n `Using flags \"${nextFlags}\".`\n );\n };\n\n const sanitizeFilter = (filterRegexp: RegExp): RegExp => {\n const { flags } = filterRegexp;\n const sanitizedFlags = flags\n .split('')\n .filter((flag) => supportedFilterFlags.has(flag))\n .join('');\n if (sanitizedFlags === flags) {\n return filterRegexp;\n }\n const removedFlags = flags\n .split('')\n .filter((flag) => !supportedFilterFlags.has(flag))\n .join('');\n warnOnUnsupportedFlags(filterRegexp, removedFlags, sanitizedFlags);\n return new RegExp(filterRegexp.source, sanitizedFlags);\n };\n\n const asyncResolve = createAsyncResolver(build.resolve);\n\n build.onEnd(() => {\n onDone(process.cwd());\n });\n\n build.onResolve({ filter: /\\.wyw\\.css$/ }, (args) => {\n return {\n namespace: 'wyw-in-js',\n path: args.path,\n };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'wyw-in-js' }, (args) => {\n return {\n contents: cssLookup.get(args.path),\n loader: 'css',\n resolveDir: cssResolveDirs.get(args.path),\n };\n });\n\n const filterRegexp =\n typeof filter === 'string'\n ? new RegExp(filter)\n : sanitizeFilter(filter);\n\n build.onLoad({ filter: filterRegexp }, async (args) => {\n const rawCode = readFileSync(args.path, 'utf8');\n const { ext, name: filename } = parse(args.path);\n const loader = ext.replace(/^\\./, '') as Loader;\n\n if (!transformLibraries && nodeModulesRegex.test(args.path)) {\n return {\n loader,\n contents: rawCode,\n };\n }\n\n if (!options) {\n options = {};\n if ('jsxFactory' in build.initialOptions) {\n options.jsxFactory = build.initialOptions.jsxFactory;\n }\n if ('jsxFragment' in build.initialOptions) {\n options.jsxFragment = build.initialOptions.jsxFragment;\n }\n }\n\n let codeForEsbuild = rawCode;\n if (babelTransform) {\n if (!babel || !resolvedWywOptions) {\n throw new Error(\n '[wyw-in-js] Internal error: babelTransform is enabled but Babel services are not initialized'\n );\n }\n\n const { babelOptions } = resolvedWywOptions;\n if (!Object.keys(babelOptions).length) {\n if (!warnedEmptyBabelOptions) {\n warnedEmptyBabelOptions = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[wyw-in-js] babelTransform is enabled but babelOptions is empty; skipping Babel transform.'\n );\n }\n } else {\n let babelResult;\n try {\n babelResult = babel.transformSync(codeForEsbuild, {\n ...babelOptions,\n ast: false,\n filename: args.path,\n sourceFileName: args.path,\n sourceMaps: sourceMap,\n });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}: ${message}`\n );\n }\n\n if (!babelResult?.code) {\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}`\n );\n }\n\n codeForEsbuild = babelResult.code;\n\n if (sourceMap && babelResult.map) {\n const babelMap = Buffer.from(\n JSON.stringify(babelResult.map)\n ).toString('base64');\n codeForEsbuild += `/*# sourceMappingURL=data:application/json;base64,${babelMap}*/`;\n }\n }\n }\n\n const transformed = esbuildTransformSync(codeForEsbuild, {\n ...options,\n sourcefile: args.path,\n sourcemap: sourceMap,\n loader,\n });\n let { code } = transformed;\n\n if (sourceMap) {\n const esbuildMap = Buffer.from(transformed.map).toString('base64');\n code += `/*# sourceMappingURL=data:application/json;base64,${esbuildMap}*/`;\n }\n\n const transformServices = {\n options: {\n filename: args.path,\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n eventEmitter: emitter,\n };\n\n const result = await transform(transformServices, code, asyncResolve);\n const resolveDir = dirname(args.path);\n\n if (!result.cssText) {\n return {\n contents: code,\n loader,\n resolveDir,\n };\n }\n\n let { cssText } = result;\n\n const slug = slugify(cssText);\n const cssFilename = `${filename}_${slug}.wyw.css`;\n\n let contents = `import ${JSON.stringify(cssFilename)}; ${result.code}`;\n\n if (sourceMap && result.cssSourceMapText) {\n const map = Buffer.from(result.cssSourceMapText).toString('base64');\n cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;\n const wywMap = Buffer.from(JSON.stringify(result.sourceMap)).toString(\n 'base64'\n );\n contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;\n }\n\n cssLookup.set(cssFilename, cssText);\n cssResolveDirs.set(cssFilename, resolveDir);\n\n return {\n contents,\n loader,\n resolveDir,\n };\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.mjs","names":["readFileSync","dirname","isAbsolute","join","parse","posix","transformSync","esbuildTransformSync","slugify","transform","TransformCacheCollection","createFileReporter","loadWywOptions","withDefaultServices","asyncResolverFactory","supportedFilterFlags","Set","nodeModulesRegex","wywInJS","babelTransform","debug","sourceMap","keepComments","prefixer","preprocessor","esbuildOptions","filter","transformLibraries","rest","options","cache","resolvedWywOptions","babel","filename","pluginOptions","root","process","cwd","createAsyncResolver","resolved","token","errors","length","Error","path","replace","sep","what","importer","resolveDir","kind","name","setup","build","cssLookup","Map","cssResolveDirs","warnedFilters","warnedEmptyBabelOptions","emitter","onDone","warnOnUnsupportedFlags","filterRegexp","removedFlags","sanitizedFlags","key","source","flags","has","add","nextFlags","console","warn","sanitizeFilter","split","flag","RegExp","asyncResolve","resolve","onEnd","onResolve","args","namespace","onLoad","contents","get","loader","rawCode","ext","test","initialOptions","jsxFactory","jsxFragment","codeForEsbuild","babelOptions","Object","keys","babelResult","ast","sourceFileName","sourceMaps","e","message","String","code","map","babelMap","Buffer","from","JSON","stringify","toString","transformed","sourcefile","sourcemap","esbuildMap","transformServices","eventEmitter","result","cssText","wywMap","slug","cssFilename","cssSourceMapText","set"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains an esbuild 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 { readFileSync } from 'fs';\nimport { dirname, isAbsolute, join, parse, posix } from 'path';\n\nimport type { Plugin, TransformOptions, Loader } from 'esbuild';\nimport { transformSync as esbuildTransformSync } from 'esbuild';\n\nimport type {\n PluginOptions,\n Preprocessor,\n IFileReporterOptions,\n} from '@wyw-in-js/transform';\nimport {\n slugify,\n transform,\n TransformCacheCollection,\n createFileReporter,\n loadWywOptions,\n withDefaultServices,\n} from '@wyw-in-js/transform';\nimport { asyncResolverFactory } from '@wyw-in-js/shared';\n\ntype EsbuildPluginOptions = {\n babelTransform?: boolean;\n debug?: IFileReporterOptions | false | null | undefined;\n esbuildOptions?: TransformOptions;\n filter?: RegExp | string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n transformLibraries?: boolean;\n} & Partial<PluginOptions>;\n\nconst supportedFilterFlags = new Set(['i', 'm', 's']);\n\nconst nodeModulesRegex = /^(?:.*[\\\\/])?node_modules(?:[\\\\/].*)?$/;\n\nexport default function wywInJS({\n babelTransform,\n debug,\n sourceMap,\n keepComments,\n prefixer,\n preprocessor,\n esbuildOptions,\n filter = /\\.(js|jsx|ts|tsx)$/,\n transformLibraries,\n ...rest\n}: EsbuildPluginOptions = {}): Plugin {\n let options = esbuildOptions;\n const cache = new TransformCacheCollection();\n let resolvedWywOptions: ReturnType<typeof loadWywOptions> | null = null;\n let babel: ReturnType<typeof withDefaultServices>['babel'] | null = null;\n if (babelTransform) {\n resolvedWywOptions = loadWywOptions(rest);\n babel = withDefaultServices({\n options: {\n filename: '<wyw-in-js/esbuild>',\n pluginOptions: resolvedWywOptions,\n root: process.cwd(),\n },\n }).babel;\n }\n const createAsyncResolver = asyncResolverFactory(\n async (\n resolved: {\n errors: unknown[];\n path: string;\n },\n token: string\n ): Promise<string> => {\n if (resolved.errors.length > 0) {\n throw new Error(`Cannot resolve ${token}`);\n }\n\n return resolved.path.replace(/\\\\/g, posix.sep);\n },\n (what, importer) => [\n what,\n {\n resolveDir: isAbsolute(importer)\n ? dirname(importer)\n : join(process.cwd(), dirname(importer)),\n kind: 'import-statement',\n },\n ]\n );\n return {\n name: 'wyw-in-js',\n setup(build) {\n const cssLookup = new Map<string, string>();\n const cssResolveDirs = new Map<string, string>();\n const warnedFilters = new Set<string>();\n let warnedEmptyBabelOptions = false;\n\n const { emitter, onDone } = createFileReporter(debug ?? false);\n\n const warnOnUnsupportedFlags = (\n filterRegexp: RegExp,\n removedFlags: string,\n sanitizedFlags: string\n ) => {\n const key = `${filterRegexp.source}/${filterRegexp.flags}`;\n if (warnedFilters.has(key)) {\n return;\n }\n warnedFilters.add(key);\n const nextFlags = sanitizedFlags || 'none';\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] Ignoring unsupported RegExp flags \"${removedFlags}\" ` +\n `in esbuild filter /${filterRegexp.source}/${filterRegexp.flags}. ` +\n `Using flags \"${nextFlags}\".`\n );\n };\n\n const sanitizeFilter = (filterRegexp: RegExp): RegExp => {\n const { flags } = filterRegexp;\n const sanitizedFlags = flags\n .split('')\n .filter((flag) => supportedFilterFlags.has(flag))\n .join('');\n if (sanitizedFlags === flags) {\n return filterRegexp;\n }\n const removedFlags = flags\n .split('')\n .filter((flag) => !supportedFilterFlags.has(flag))\n .join('');\n warnOnUnsupportedFlags(filterRegexp, removedFlags, sanitizedFlags);\n return new RegExp(filterRegexp.source, sanitizedFlags);\n };\n\n const asyncResolve = createAsyncResolver(build.resolve);\n\n build.onEnd(() => {\n onDone(process.cwd());\n });\n\n build.onResolve({ filter: /\\.wyw\\.css$/ }, (args) => {\n return {\n namespace: 'wyw-in-js',\n path: args.path,\n };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'wyw-in-js' }, (args) => {\n return {\n contents: cssLookup.get(args.path),\n loader: 'css',\n resolveDir: cssResolveDirs.get(args.path),\n };\n });\n\n const filterRegexp =\n typeof filter === 'string'\n ? new RegExp(filter)\n : sanitizeFilter(filter);\n\n build.onLoad({ filter: filterRegexp }, async (args) => {\n const rawCode = readFileSync(args.path, 'utf8');\n const { ext, name: filename } = parse(args.path);\n const loader = ext.replace(/^\\./, '') as Loader;\n\n if (!transformLibraries && nodeModulesRegex.test(args.path)) {\n return {\n loader,\n contents: rawCode,\n };\n }\n\n if (!options) {\n options = {};\n if ('jsxFactory' in build.initialOptions) {\n options.jsxFactory = build.initialOptions.jsxFactory;\n }\n if ('jsxFragment' in build.initialOptions) {\n options.jsxFragment = build.initialOptions.jsxFragment;\n }\n }\n\n let codeForEsbuild = rawCode;\n if (babelTransform) {\n if (!babel || !resolvedWywOptions) {\n throw new Error(\n '[wyw-in-js] Internal error: babelTransform is enabled but Babel services are not initialized'\n );\n }\n\n const { babelOptions } = resolvedWywOptions;\n if (!Object.keys(babelOptions).length) {\n if (!warnedEmptyBabelOptions) {\n warnedEmptyBabelOptions = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[wyw-in-js] babelTransform is enabled but babelOptions is empty; skipping Babel transform.'\n );\n }\n } else {\n let babelResult;\n try {\n babelResult = babel.transformSync(codeForEsbuild, {\n ...babelOptions,\n ast: false,\n filename: args.path,\n sourceFileName: args.path,\n sourceMaps: sourceMap,\n });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}: ${message}`\n );\n }\n\n if (!babelResult?.code) {\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}`\n );\n }\n\n codeForEsbuild = babelResult.code;\n\n if (sourceMap && babelResult.map) {\n const babelMap = Buffer.from(\n JSON.stringify(babelResult.map)\n ).toString('base64');\n codeForEsbuild += `/*# sourceMappingURL=data:application/json;base64,${babelMap}*/`;\n }\n }\n }\n\n const transformed = esbuildTransformSync(codeForEsbuild, {\n ...options,\n sourcefile: args.path,\n sourcemap: sourceMap,\n loader,\n });\n let { code } = transformed;\n\n if (sourceMap) {\n const esbuildMap = Buffer.from(transformed.map).toString('base64');\n code += `/*# sourceMappingURL=data:application/json;base64,${esbuildMap}*/`;\n }\n\n const transformServices = {\n options: {\n filename: args.path,\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n eventEmitter: emitter,\n };\n\n const result = await transform(transformServices, code, asyncResolve);\n const resolveDir = dirname(args.path);\n\n if (typeof result.cssText === 'undefined') {\n return {\n contents: code,\n loader,\n resolveDir,\n };\n }\n\n if (result.cssText === '') {\n let contents = result.code;\n\n if (sourceMap && result.sourceMap) {\n const wywMap = Buffer.from(\n JSON.stringify(result.sourceMap)\n ).toString('base64');\n contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;\n }\n\n return {\n contents,\n loader,\n resolveDir,\n };\n }\n\n let { cssText } = result;\n\n const slug = slugify(cssText);\n const cssFilename = `${filename}_${slug}.wyw.css`;\n\n let contents = `import ${JSON.stringify(cssFilename)}; ${result.code}`;\n\n if (sourceMap && result.cssSourceMapText) {\n const map = Buffer.from(result.cssSourceMapText).toString('base64');\n cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;\n const wywMap = Buffer.from(JSON.stringify(result.sourceMap)).toString(\n 'base64'\n );\n contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;\n }\n\n cssLookup.set(cssFilename, cssText);\n cssResolveDirs.set(cssFilename, resolveDir);\n\n return {\n contents,\n loader,\n resolveDir,\n };\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/index.js CHANGED
@@ -198,13 +198,25 @@ function wywInJS({
198
198
  };
199
199
  const result = await (0, _transform.transform)(transformServices, code, asyncResolve);
200
200
  const resolveDir = (0, _path.dirname)(args.path);
201
- if (!result.cssText) {
201
+ if (typeof result.cssText === 'undefined') {
202
202
  return {
203
203
  contents: code,
204
204
  loader,
205
205
  resolveDir
206
206
  };
207
207
  }
208
+ if (result.cssText === '') {
209
+ let contents = result.code;
210
+ if (sourceMap && result.sourceMap) {
211
+ const wywMap = Buffer.from(JSON.stringify(result.sourceMap)).toString('base64');
212
+ contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;
213
+ }
214
+ return {
215
+ contents,
216
+ loader,
217
+ resolveDir
218
+ };
219
+ }
208
220
  let {
209
221
  cssText
210
222
  } = result;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_fs","require","_path","_esbuild","_transform","_shared","supportedFilterFlags","Set","nodeModulesRegex","wywInJS","babelTransform","debug","sourceMap","keepComments","prefixer","preprocessor","esbuildOptions","filter","transformLibraries","rest","options","cache","TransformCacheCollection","resolvedWywOptions","babel","loadWywOptions","withDefaultServices","filename","pluginOptions","root","process","cwd","createAsyncResolver","asyncResolverFactory","resolved","token","errors","length","Error","path","replace","posix","sep","what","importer","resolveDir","isAbsolute","dirname","join","kind","name","setup","build","cssLookup","Map","cssResolveDirs","warnedFilters","warnedEmptyBabelOptions","emitter","onDone","createFileReporter","warnOnUnsupportedFlags","filterRegexp","removedFlags","sanitizedFlags","key","source","flags","has","add","nextFlags","console","warn","sanitizeFilter","split","flag","RegExp","asyncResolve","resolve","onEnd","onResolve","args","namespace","onLoad","contents","get","loader","rawCode","readFileSync","ext","parse","test","initialOptions","jsxFactory","jsxFragment","codeForEsbuild","babelOptions","Object","keys","_babelResult","babelResult","transformSync","ast","sourceFileName","sourceMaps","e","message","String","code","map","babelMap","Buffer","from","JSON","stringify","toString","transformed","esbuildTransformSync","sourcefile","sourcemap","esbuildMap","transformServices","eventEmitter","result","transform","cssText","slug","slugify","cssFilename","cssSourceMapText","wywMap","set"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains an esbuild 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 { readFileSync } from 'fs';\nimport { dirname, isAbsolute, join, parse, posix } from 'path';\n\nimport type { Plugin, TransformOptions, Loader } from 'esbuild';\nimport { transformSync as esbuildTransformSync } from 'esbuild';\n\nimport type {\n PluginOptions,\n Preprocessor,\n IFileReporterOptions,\n} from '@wyw-in-js/transform';\nimport {\n slugify,\n transform,\n TransformCacheCollection,\n createFileReporter,\n loadWywOptions,\n withDefaultServices,\n} from '@wyw-in-js/transform';\nimport { asyncResolverFactory } from '@wyw-in-js/shared';\n\ntype EsbuildPluginOptions = {\n babelTransform?: boolean;\n debug?: IFileReporterOptions | false | null | undefined;\n esbuildOptions?: TransformOptions;\n filter?: RegExp | string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n transformLibraries?: boolean;\n} & Partial<PluginOptions>;\n\nconst supportedFilterFlags = new Set(['i', 'm', 's']);\n\nconst nodeModulesRegex = /^(?:.*[\\\\/])?node_modules(?:[\\\\/].*)?$/;\n\nexport default function wywInJS({\n babelTransform,\n debug,\n sourceMap,\n keepComments,\n prefixer,\n preprocessor,\n esbuildOptions,\n filter = /\\.(js|jsx|ts|tsx)$/,\n transformLibraries,\n ...rest\n}: EsbuildPluginOptions = {}): Plugin {\n let options = esbuildOptions;\n const cache = new TransformCacheCollection();\n let resolvedWywOptions: ReturnType<typeof loadWywOptions> | null = null;\n let babel: ReturnType<typeof withDefaultServices>['babel'] | null = null;\n if (babelTransform) {\n resolvedWywOptions = loadWywOptions(rest);\n babel = withDefaultServices({\n options: {\n filename: '<wyw-in-js/esbuild>',\n pluginOptions: resolvedWywOptions,\n root: process.cwd(),\n },\n }).babel;\n }\n const createAsyncResolver = asyncResolverFactory(\n async (\n resolved: {\n errors: unknown[];\n path: string;\n },\n token: string\n ): Promise<string> => {\n if (resolved.errors.length > 0) {\n throw new Error(`Cannot resolve ${token}`);\n }\n\n return resolved.path.replace(/\\\\/g, posix.sep);\n },\n (what, importer) => [\n what,\n {\n resolveDir: isAbsolute(importer)\n ? dirname(importer)\n : join(process.cwd(), dirname(importer)),\n kind: 'import-statement',\n },\n ]\n );\n return {\n name: 'wyw-in-js',\n setup(build) {\n const cssLookup = new Map<string, string>();\n const cssResolveDirs = new Map<string, string>();\n const warnedFilters = new Set<string>();\n let warnedEmptyBabelOptions = false;\n\n const { emitter, onDone } = createFileReporter(debug ?? false);\n\n const warnOnUnsupportedFlags = (\n filterRegexp: RegExp,\n removedFlags: string,\n sanitizedFlags: string\n ) => {\n const key = `${filterRegexp.source}/${filterRegexp.flags}`;\n if (warnedFilters.has(key)) {\n return;\n }\n warnedFilters.add(key);\n const nextFlags = sanitizedFlags || 'none';\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] Ignoring unsupported RegExp flags \"${removedFlags}\" ` +\n `in esbuild filter /${filterRegexp.source}/${filterRegexp.flags}. ` +\n `Using flags \"${nextFlags}\".`\n );\n };\n\n const sanitizeFilter = (filterRegexp: RegExp): RegExp => {\n const { flags } = filterRegexp;\n const sanitizedFlags = flags\n .split('')\n .filter((flag) => supportedFilterFlags.has(flag))\n .join('');\n if (sanitizedFlags === flags) {\n return filterRegexp;\n }\n const removedFlags = flags\n .split('')\n .filter((flag) => !supportedFilterFlags.has(flag))\n .join('');\n warnOnUnsupportedFlags(filterRegexp, removedFlags, sanitizedFlags);\n return new RegExp(filterRegexp.source, sanitizedFlags);\n };\n\n const asyncResolve = createAsyncResolver(build.resolve);\n\n build.onEnd(() => {\n onDone(process.cwd());\n });\n\n build.onResolve({ filter: /\\.wyw\\.css$/ }, (args) => {\n return {\n namespace: 'wyw-in-js',\n path: args.path,\n };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'wyw-in-js' }, (args) => {\n return {\n contents: cssLookup.get(args.path),\n loader: 'css',\n resolveDir: cssResolveDirs.get(args.path),\n };\n });\n\n const filterRegexp =\n typeof filter === 'string'\n ? new RegExp(filter)\n : sanitizeFilter(filter);\n\n build.onLoad({ filter: filterRegexp }, async (args) => {\n const rawCode = readFileSync(args.path, 'utf8');\n const { ext, name: filename } = parse(args.path);\n const loader = ext.replace(/^\\./, '') as Loader;\n\n if (!transformLibraries && nodeModulesRegex.test(args.path)) {\n return {\n loader,\n contents: rawCode,\n };\n }\n\n if (!options) {\n options = {};\n if ('jsxFactory' in build.initialOptions) {\n options.jsxFactory = build.initialOptions.jsxFactory;\n }\n if ('jsxFragment' in build.initialOptions) {\n options.jsxFragment = build.initialOptions.jsxFragment;\n }\n }\n\n let codeForEsbuild = rawCode;\n if (babelTransform) {\n if (!babel || !resolvedWywOptions) {\n throw new Error(\n '[wyw-in-js] Internal error: babelTransform is enabled but Babel services are not initialized'\n );\n }\n\n const { babelOptions } = resolvedWywOptions;\n if (!Object.keys(babelOptions).length) {\n if (!warnedEmptyBabelOptions) {\n warnedEmptyBabelOptions = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[wyw-in-js] babelTransform is enabled but babelOptions is empty; skipping Babel transform.'\n );\n }\n } else {\n let babelResult;\n try {\n babelResult = babel.transformSync(codeForEsbuild, {\n ...babelOptions,\n ast: false,\n filename: args.path,\n sourceFileName: args.path,\n sourceMaps: sourceMap,\n });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}: ${message}`\n );\n }\n\n if (!babelResult?.code) {\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}`\n );\n }\n\n codeForEsbuild = babelResult.code;\n\n if (sourceMap && babelResult.map) {\n const babelMap = Buffer.from(\n JSON.stringify(babelResult.map)\n ).toString('base64');\n codeForEsbuild += `/*# sourceMappingURL=data:application/json;base64,${babelMap}*/`;\n }\n }\n }\n\n const transformed = esbuildTransformSync(codeForEsbuild, {\n ...options,\n sourcefile: args.path,\n sourcemap: sourceMap,\n loader,\n });\n let { code } = transformed;\n\n if (sourceMap) {\n const esbuildMap = Buffer.from(transformed.map).toString('base64');\n code += `/*# sourceMappingURL=data:application/json;base64,${esbuildMap}*/`;\n }\n\n const transformServices = {\n options: {\n filename: args.path,\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n eventEmitter: emitter,\n };\n\n const result = await transform(transformServices, code, asyncResolve);\n const resolveDir = dirname(args.path);\n\n if (!result.cssText) {\n return {\n contents: code,\n loader,\n resolveDir,\n };\n }\n\n let { cssText } = result;\n\n const slug = slugify(cssText);\n const cssFilename = `${filename}_${slug}.wyw.css`;\n\n let contents = `import ${JSON.stringify(cssFilename)}; ${result.code}`;\n\n if (sourceMap && result.cssSourceMapText) {\n const map = Buffer.from(result.cssSourceMapText).toString('base64');\n cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;\n const wywMap = Buffer.from(JSON.stringify(result.sourceMap)).toString(\n 'base64'\n );\n contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;\n }\n\n cssLookup.set(cssFilename, cssText);\n cssResolveDirs.set(cssFilename, resolveDir);\n\n return {\n contents,\n loader,\n resolveDir,\n };\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_fs","require","_path","_esbuild","_transform","_shared","supportedFilterFlags","Set","nodeModulesRegex","wywInJS","babelTransform","debug","sourceMap","keepComments","prefixer","preprocessor","esbuildOptions","filter","transformLibraries","rest","options","cache","TransformCacheCollection","resolvedWywOptions","babel","loadWywOptions","withDefaultServices","filename","pluginOptions","root","process","cwd","createAsyncResolver","asyncResolverFactory","resolved","token","errors","length","Error","path","replace","posix","sep","what","importer","resolveDir","isAbsolute","dirname","join","kind","name","setup","build","cssLookup","Map","cssResolveDirs","warnedFilters","warnedEmptyBabelOptions","emitter","onDone","createFileReporter","warnOnUnsupportedFlags","filterRegexp","removedFlags","sanitizedFlags","key","source","flags","has","add","nextFlags","console","warn","sanitizeFilter","split","flag","RegExp","asyncResolve","resolve","onEnd","onResolve","args","namespace","onLoad","contents","get","loader","rawCode","readFileSync","ext","parse","test","initialOptions","jsxFactory","jsxFragment","codeForEsbuild","babelOptions","Object","keys","_babelResult","babelResult","transformSync","ast","sourceFileName","sourceMaps","e","message","String","code","map","babelMap","Buffer","from","JSON","stringify","toString","transformed","esbuildTransformSync","sourcefile","sourcemap","esbuildMap","transformServices","eventEmitter","result","transform","cssText","wywMap","slug","slugify","cssFilename","cssSourceMapText","set"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * This file contains an esbuild 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 { readFileSync } from 'fs';\nimport { dirname, isAbsolute, join, parse, posix } from 'path';\n\nimport type { Plugin, TransformOptions, Loader } from 'esbuild';\nimport { transformSync as esbuildTransformSync } from 'esbuild';\n\nimport type {\n PluginOptions,\n Preprocessor,\n IFileReporterOptions,\n} from '@wyw-in-js/transform';\nimport {\n slugify,\n transform,\n TransformCacheCollection,\n createFileReporter,\n loadWywOptions,\n withDefaultServices,\n} from '@wyw-in-js/transform';\nimport { asyncResolverFactory } from '@wyw-in-js/shared';\n\ntype EsbuildPluginOptions = {\n babelTransform?: boolean;\n debug?: IFileReporterOptions | false | null | undefined;\n esbuildOptions?: TransformOptions;\n filter?: RegExp | string;\n keepComments?: boolean | RegExp;\n prefixer?: boolean;\n preprocessor?: Preprocessor;\n sourceMap?: boolean;\n transformLibraries?: boolean;\n} & Partial<PluginOptions>;\n\nconst supportedFilterFlags = new Set(['i', 'm', 's']);\n\nconst nodeModulesRegex = /^(?:.*[\\\\/])?node_modules(?:[\\\\/].*)?$/;\n\nexport default function wywInJS({\n babelTransform,\n debug,\n sourceMap,\n keepComments,\n prefixer,\n preprocessor,\n esbuildOptions,\n filter = /\\.(js|jsx|ts|tsx)$/,\n transformLibraries,\n ...rest\n}: EsbuildPluginOptions = {}): Plugin {\n let options = esbuildOptions;\n const cache = new TransformCacheCollection();\n let resolvedWywOptions: ReturnType<typeof loadWywOptions> | null = null;\n let babel: ReturnType<typeof withDefaultServices>['babel'] | null = null;\n if (babelTransform) {\n resolvedWywOptions = loadWywOptions(rest);\n babel = withDefaultServices({\n options: {\n filename: '<wyw-in-js/esbuild>',\n pluginOptions: resolvedWywOptions,\n root: process.cwd(),\n },\n }).babel;\n }\n const createAsyncResolver = asyncResolverFactory(\n async (\n resolved: {\n errors: unknown[];\n path: string;\n },\n token: string\n ): Promise<string> => {\n if (resolved.errors.length > 0) {\n throw new Error(`Cannot resolve ${token}`);\n }\n\n return resolved.path.replace(/\\\\/g, posix.sep);\n },\n (what, importer) => [\n what,\n {\n resolveDir: isAbsolute(importer)\n ? dirname(importer)\n : join(process.cwd(), dirname(importer)),\n kind: 'import-statement',\n },\n ]\n );\n return {\n name: 'wyw-in-js',\n setup(build) {\n const cssLookup = new Map<string, string>();\n const cssResolveDirs = new Map<string, string>();\n const warnedFilters = new Set<string>();\n let warnedEmptyBabelOptions = false;\n\n const { emitter, onDone } = createFileReporter(debug ?? false);\n\n const warnOnUnsupportedFlags = (\n filterRegexp: RegExp,\n removedFlags: string,\n sanitizedFlags: string\n ) => {\n const key = `${filterRegexp.source}/${filterRegexp.flags}`;\n if (warnedFilters.has(key)) {\n return;\n }\n warnedFilters.add(key);\n const nextFlags = sanitizedFlags || 'none';\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] Ignoring unsupported RegExp flags \"${removedFlags}\" ` +\n `in esbuild filter /${filterRegexp.source}/${filterRegexp.flags}. ` +\n `Using flags \"${nextFlags}\".`\n );\n };\n\n const sanitizeFilter = (filterRegexp: RegExp): RegExp => {\n const { flags } = filterRegexp;\n const sanitizedFlags = flags\n .split('')\n .filter((flag) => supportedFilterFlags.has(flag))\n .join('');\n if (sanitizedFlags === flags) {\n return filterRegexp;\n }\n const removedFlags = flags\n .split('')\n .filter((flag) => !supportedFilterFlags.has(flag))\n .join('');\n warnOnUnsupportedFlags(filterRegexp, removedFlags, sanitizedFlags);\n return new RegExp(filterRegexp.source, sanitizedFlags);\n };\n\n const asyncResolve = createAsyncResolver(build.resolve);\n\n build.onEnd(() => {\n onDone(process.cwd());\n });\n\n build.onResolve({ filter: /\\.wyw\\.css$/ }, (args) => {\n return {\n namespace: 'wyw-in-js',\n path: args.path,\n };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'wyw-in-js' }, (args) => {\n return {\n contents: cssLookup.get(args.path),\n loader: 'css',\n resolveDir: cssResolveDirs.get(args.path),\n };\n });\n\n const filterRegexp =\n typeof filter === 'string'\n ? new RegExp(filter)\n : sanitizeFilter(filter);\n\n build.onLoad({ filter: filterRegexp }, async (args) => {\n const rawCode = readFileSync(args.path, 'utf8');\n const { ext, name: filename } = parse(args.path);\n const loader = ext.replace(/^\\./, '') as Loader;\n\n if (!transformLibraries && nodeModulesRegex.test(args.path)) {\n return {\n loader,\n contents: rawCode,\n };\n }\n\n if (!options) {\n options = {};\n if ('jsxFactory' in build.initialOptions) {\n options.jsxFactory = build.initialOptions.jsxFactory;\n }\n if ('jsxFragment' in build.initialOptions) {\n options.jsxFragment = build.initialOptions.jsxFragment;\n }\n }\n\n let codeForEsbuild = rawCode;\n if (babelTransform) {\n if (!babel || !resolvedWywOptions) {\n throw new Error(\n '[wyw-in-js] Internal error: babelTransform is enabled but Babel services are not initialized'\n );\n }\n\n const { babelOptions } = resolvedWywOptions;\n if (!Object.keys(babelOptions).length) {\n if (!warnedEmptyBabelOptions) {\n warnedEmptyBabelOptions = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[wyw-in-js] babelTransform is enabled but babelOptions is empty; skipping Babel transform.'\n );\n }\n } else {\n let babelResult;\n try {\n babelResult = babel.transformSync(codeForEsbuild, {\n ...babelOptions,\n ast: false,\n filename: args.path,\n sourceFileName: args.path,\n sourceMaps: sourceMap,\n });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}: ${message}`\n );\n }\n\n if (!babelResult?.code) {\n throw new Error(\n `[wyw-in-js] Babel transform failed for ${args.path}`\n );\n }\n\n codeForEsbuild = babelResult.code;\n\n if (sourceMap && babelResult.map) {\n const babelMap = Buffer.from(\n JSON.stringify(babelResult.map)\n ).toString('base64');\n codeForEsbuild += `/*# sourceMappingURL=data:application/json;base64,${babelMap}*/`;\n }\n }\n }\n\n const transformed = esbuildTransformSync(codeForEsbuild, {\n ...options,\n sourcefile: args.path,\n sourcemap: sourceMap,\n loader,\n });\n let { code } = transformed;\n\n if (sourceMap) {\n const esbuildMap = Buffer.from(transformed.map).toString('base64');\n code += `/*# sourceMappingURL=data:application/json;base64,${esbuildMap}*/`;\n }\n\n const transformServices = {\n options: {\n filename: args.path,\n pluginOptions: rest,\n prefixer,\n keepComments,\n preprocessor,\n root: process.cwd(),\n },\n cache,\n eventEmitter: emitter,\n };\n\n const result = await transform(transformServices, code, asyncResolve);\n const resolveDir = dirname(args.path);\n\n if (typeof result.cssText === 'undefined') {\n return {\n contents: code,\n loader,\n resolveDir,\n };\n }\n\n if (result.cssText === '') {\n let contents = result.code;\n\n if (sourceMap && result.sourceMap) {\n const wywMap = Buffer.from(\n JSON.stringify(result.sourceMap)\n ).toString('base64');\n contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;\n }\n\n return {\n contents,\n loader,\n resolveDir,\n };\n }\n\n let { cssText } = result;\n\n const slug = slugify(cssText);\n const cssFilename = `${filename}_${slug}.wyw.css`;\n\n let contents = `import ${JSON.stringify(cssFilename)}; ${result.code}`;\n\n if (sourceMap && result.cssSourceMapText) {\n const map = Buffer.from(result.cssSourceMapText).toString('base64');\n cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;\n const wywMap = Buffer.from(JSON.stringify(result.sourceMap)).toString(\n 'base64'\n );\n contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;\n }\n\n cssLookup.set(cssFilename, cssText);\n cssResolveDirs.set(cssFilename, resolveDir);\n\n return {\n contents,\n loader,\n resolveDir,\n };\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@wyw-in-js/esbuild",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "dependencies": {
5
5
  "@wyw-in-js/shared": "1.0.2",
6
- "@wyw-in-js/transform": "1.0.2"
6
+ "@wyw-in-js/transform": "1.0.3"
7
7
  },
8
8
  "devDependencies": {
9
9
  "@types/node": "^16.18.55",
package/types/index.js CHANGED
@@ -180,13 +180,25 @@ function wywInJS({ babelTransform, debug, sourceMap, keepComments, prefixer, pre
180
180
  };
181
181
  const result = await (0, transform_1.transform)(transformServices, code, asyncResolve);
182
182
  const resolveDir = (0, path_1.dirname)(args.path);
183
- if (!result.cssText) {
183
+ if (typeof result.cssText === 'undefined') {
184
184
  return {
185
185
  contents: code,
186
186
  loader,
187
187
  resolveDir,
188
188
  };
189
189
  }
190
+ if (result.cssText === '') {
191
+ let contents = result.code;
192
+ if (sourceMap && result.sourceMap) {
193
+ const wywMap = Buffer.from(JSON.stringify(result.sourceMap)).toString('base64');
194
+ contents += `/*# sourceMappingURL=data:application/json;base64,${wywMap}*/`;
195
+ }
196
+ return {
197
+ contents,
198
+ loader,
199
+ resolveDir,
200
+ };
201
+ }
190
202
  let { cssText } = result;
191
203
  const slug = (0, transform_1.slugify)(cssText);
192
204
  const cssFilename = `${filename}_${slug}.wyw.css`;