@wyw-in-js/cli 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ const formatLocation = diagnostic => {
2
+ if (!diagnostic.start) {
3
+ return diagnostic.filename;
4
+ }
5
+ return `${diagnostic.filename}:${diagnostic.start.line}:${diagnostic.start.column + 1}`;
6
+ };
7
+ export const formatTransformDiagnostic = diagnostic => [`[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`, ` at ${formatLocation(diagnostic)} (${diagnostic.displayName})`].join('\n');
8
+ export const reportTransformDiagnostics = diagnostics => {
9
+ diagnostics.forEach(diagnostic => {
10
+ // eslint-disable-next-line no-console
11
+ console.warn(formatTransformDiagnostic(diagnostic));
12
+ });
13
+ };
14
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","names":["formatLocation","diagnostic","start","filename","line","column","formatTransformDiagnostic","severity","category","message","displayName","join","reportTransformDiagnostics","diagnostics","forEach","console","warn"],"sources":["../src/diagnostics.ts"],"sourcesContent":["import type { WYWTransformDiagnostic } from '@wyw-in-js/transform';\n\nconst formatLocation = (diagnostic: WYWTransformDiagnostic) => {\n if (!diagnostic.start) {\n return diagnostic.filename;\n }\n\n return `${diagnostic.filename}:${diagnostic.start.line}:${\n diagnostic.start.column + 1\n }`;\n};\n\nexport const formatTransformDiagnostic = (diagnostic: WYWTransformDiagnostic) =>\n [\n `[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`,\n ` at ${formatLocation(diagnostic)} (${diagnostic.displayName})`,\n ].join('\\n');\n\nexport const reportTransformDiagnostics = (\n diagnostics: WYWTransformDiagnostic[]\n) => {\n diagnostics.forEach((diagnostic) => {\n // eslint-disable-next-line no-console\n console.warn(formatTransformDiagnostic(diagnostic));\n });\n};\n"],"mappings":"AAEA,MAAMA,cAAc,GAAIC,UAAkC,IAAK;EAC7D,IAAI,CAACA,UAAU,CAACC,KAAK,EAAE;IACrB,OAAOD,UAAU,CAACE,QAAQ;EAC5B;EAEA,OAAO,GAAGF,UAAU,CAACE,QAAQ,IAAIF,UAAU,CAACC,KAAK,CAACE,IAAI,IACpDH,UAAU,CAACC,KAAK,CAACG,MAAM,GAAG,CAAC,EAC3B;AACJ,CAAC;AAED,OAAO,MAAMC,yBAAyB,GAAIL,UAAkC,IAC1E,CACE,eAAeA,UAAU,CAACM,QAAQ,KAAKN,UAAU,CAACO,QAAQ,KAAKP,UAAU,CAACQ,OAAO,EAAE,EACnF,QAAQT,cAAc,CAACC,UAAU,CAAC,KAAKA,UAAU,CAACS,WAAW,GAAG,CACjE,CAACC,IAAI,CAAC,IAAI,CAAC;AAEd,OAAO,MAAMC,0BAA0B,GACrCC,WAAqC,IAClC;EACHA,WAAW,CAACC,OAAO,CAAEb,UAAU,IAAK;IAClC;IACAc,OAAO,CAACC,IAAI,CAACV,yBAAyB,CAACL,UAAU,CAAC,CAAC;EACrD,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ import path from 'path';
2
+ import normalize from 'normalize-path';
3
+ import { createTransformManifest, stringifyTransformManifest } from '@wyw-in-js/transform';
4
+ export function resolveMetadataFilename(outputFilename) {
5
+ const extension = path.extname(outputFilename);
6
+ return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;
7
+ }
8
+ export function createMetadataFile({
9
+ metadata,
10
+ outputRoot,
11
+ outputFilename,
12
+ sourceRoot,
13
+ sourceFilename,
14
+ cssFile
15
+ }) {
16
+ const filename = resolveMetadataFilename(outputFilename);
17
+ return {
18
+ content: stringifyTransformManifest(createTransformManifest(metadata, {
19
+ cssFile: cssFile ? normalize(path.relative(outputRoot, cssFile)) : undefined,
20
+ source: normalize(path.relative(sourceRoot, sourceFilename))
21
+ })),
22
+ filename
23
+ };
24
+ }
25
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","names":["path","normalize","createTransformManifest","stringifyTransformManifest","resolveMetadataFilename","outputFilename","extension","extname","slice","length","createMetadataFile","metadata","outputRoot","sourceRoot","sourceFilename","cssFile","filename","content","relative","undefined","source"],"sources":["../src/metadata.ts"],"sourcesContent":["import path from 'path';\n\nimport normalize from 'normalize-path';\n\nimport type { WYWTransformResultMetadata } from '@wyw-in-js/transform';\nimport {\n createTransformManifest,\n stringifyTransformManifest,\n} from '@wyw-in-js/transform';\n\ntype CreateMetadataFileOptions = {\n cssFile?: string;\n metadata: WYWTransformResultMetadata;\n outputRoot: string;\n outputFilename: string;\n sourceRoot: string;\n sourceFilename: string;\n};\n\nexport function resolveMetadataFilename(outputFilename: string) {\n const extension = path.extname(outputFilename);\n return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;\n}\n\nexport function createMetadataFile({\n metadata,\n outputRoot,\n outputFilename,\n sourceRoot,\n sourceFilename,\n cssFile,\n}: CreateMetadataFileOptions) {\n const filename = resolveMetadataFilename(outputFilename);\n\n return {\n content: stringifyTransformManifest(\n createTransformManifest(metadata, {\n cssFile: cssFile\n ? normalize(path.relative(outputRoot, cssFile))\n : undefined,\n source: normalize(path.relative(sourceRoot, sourceFilename)),\n })\n ),\n filename,\n };\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AAEvB,OAAOC,SAAS,MAAM,gBAAgB;AAGtC,SACEC,uBAAuB,EACvBC,0BAA0B,QACrB,sBAAsB;AAW7B,OAAO,SAASC,uBAAuBA,CAACC,cAAsB,EAAE;EAC9D,MAAMC,SAAS,GAAGN,IAAI,CAACO,OAAO,CAACF,cAAc,CAAC;EAC9C,OAAO,GAAGA,cAAc,CAACG,KAAK,CAAC,CAAC,EAAE,CAACF,SAAS,CAACG,MAAM,CAAC,iBAAiB;AACvE;AAEA,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,QAAQ;EACRC,UAAU;EACVP,cAAc;EACdQ,UAAU;EACVC,cAAc;EACdC;AACyB,CAAC,EAAE;EAC5B,MAAMC,QAAQ,GAAGZ,uBAAuB,CAACC,cAAc,CAAC;EAExD,OAAO;IACLY,OAAO,EAAEd,0BAA0B,CACjCD,uBAAuB,CAACS,QAAQ,EAAE;MAChCI,OAAO,EAAEA,OAAO,GACZd,SAAS,CAACD,IAAI,CAACkB,QAAQ,CAACN,UAAU,EAAEG,OAAO,CAAC,CAAC,GAC7CI,SAAS;MACbC,MAAM,EAAEnB,SAAS,CAACD,IAAI,CAACkB,QAAQ,CAACL,UAAU,EAAEC,cAAc,CAAC;IAC7D,CAAC,CACH,CAAC;IACDE;EACF,CAAC;AACH","ignoreList":[]}
package/esm/wyw-in-js.js CHANGED
@@ -11,6 +11,8 @@ import { globSync } from 'glob';
11
11
  import mkdirp from 'mkdirp';
12
12
  import normalize from 'normalize-path';
13
13
  import yargs from 'yargs';
14
+ import { reportTransformDiagnostics } from './diagnostics';
15
+ import { createMetadataFile } from './metadata';
14
16
  const modulesOptions = ['commonjs', 'es2015', 'es6', 'esnext', 'native'];
15
17
  const argv = yargs.usage('Usage: $0 [options] <files ...>').option('config', {
16
18
  alias: 'c',
@@ -40,6 +42,9 @@ const argv = yargs.usage('Usage: $0 [options] <files ...>').option('config', {
40
42
  type: 'boolean',
41
43
  description: 'Run extraction in parallel',
42
44
  default: false
45
+ }).option('output-metadata', {
46
+ type: 'boolean',
47
+ description: 'Emit sidecar .wyw-in-js.json metadata manifests for transformed files'
43
48
  }).option('source-root', {
44
49
  alias: 'r',
45
50
  type: 'string',
@@ -104,7 +109,8 @@ async function processFiles(files, options) {
104
109
  filename,
105
110
  outputFilename,
106
111
  pluginOptions: {
107
- configFile: options.configFile
112
+ configFile: options.configFile,
113
+ outputMetadata: options.outputMetadata
108
114
  },
109
115
  root: options.sourceRoot
110
116
  },
@@ -114,13 +120,33 @@ async function processFiles(files, options) {
114
120
  tasks.push(() => transform(transformServices, fs.readFileSync(filename).toString(), asyncResolveFallback).then(({
115
121
  code,
116
122
  cssText,
123
+ diagnostics,
124
+ metadata,
117
125
  sourceMap,
118
126
  cssSourceMapText
119
127
  }) => {
120
- if (!cssText) {
128
+ if (diagnostics?.length) {
129
+ reportTransformDiagnostics(diagnostics);
130
+ }
131
+ const shouldWriteCss = typeof cssText === 'string' && cssText.length > 0;
132
+ if (!shouldWriteCss && !metadata) {
121
133
  return false;
122
134
  }
123
135
  mkdirp.sync(path.dirname(outputFilename));
136
+ if (metadata) {
137
+ const metadataFile = createMetadataFile({
138
+ cssFile: shouldWriteCss ? outputFilename : undefined,
139
+ metadata,
140
+ outputRoot: options.outDir,
141
+ outputFilename,
142
+ sourceRoot: options.sourceRoot,
143
+ sourceFilename: filename
144
+ });
145
+ fs.writeFileSync(metadataFile.filename, metadataFile.content);
146
+ }
147
+ if (!shouldWriteCss) {
148
+ return false;
149
+ }
124
150
  const cssContent = options.sourceMaps && sourceMap ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */` : cssText;
125
151
  fs.writeFileSync(outputFilename, cssContent);
126
152
  if (options.sourceMaps && sourceMap && typeof cssSourceMapText !== 'undefined') {
@@ -177,6 +203,7 @@ processFiles(argv._, {
177
203
  modules: argv.modules,
178
204
  parallel: argv.parallel,
179
205
  outDir: argv['out-dir'],
206
+ outputMetadata: argv['output-metadata'],
180
207
  sourceMaps: argv['source-maps'],
181
208
  sourceRoot: argv['source-root'],
182
209
  transform: argv.transform
@@ -1 +1 @@
1
- {"version":3,"file":"wyw-in-js.js","names":["fs","path","asyncResolveFallback","createFileReporter","TransformCacheCollection","transform","globSync","mkdirp","normalize","yargs","modulesOptions","argv","usage","option","alias","type","description","requiresArg","coerce","resolve","demandOption","default","choices","s","toLowerCase","implies","parseSync","resolveRequireInsertionFilename","filename","replace","resolveOutputFilename","outDir","sourceRoot","outputFolder","relative","dirname","outputBasename","basename","extname","join","processFiles","files","options","emitter","onDone","debug","dir","print","resolvedFiles","reduce","acc","pattern","toString","absolute","ignore","cache","modifiedFiles","tasks","lstatSync","isDirectory","outputFilename","transformServices","pluginOptions","configFile","root","eventEmitter","push","readFileSync","then","code","cssText","sourceMap","cssSourceMapText","sync","cssContent","sourceMaps","writeFileSync","insertCssRequires","inputFilename","relativePath","pathForImport","startsWith","statement","modules","normalizedInputFilename","inputContent","trim","endsWith","name","content","parallel","res","Promise","all","map","task","console","log","filter","i","length","count","forEach","clear","process","cwd","_","config"],"sources":["../src/wyw-in-js.ts"],"sourcesContent":["/* eslint-disable no-console */\n/**\n * This file contains a CLI for wyw-in-js.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { asyncResolveFallback } from '@wyw-in-js/shared';\nimport {\n createFileReporter,\n TransformCacheCollection,\n transform,\n} from '@wyw-in-js/transform';\nimport { globSync } from 'glob';\nimport mkdirp from 'mkdirp';\nimport normalize from 'normalize-path';\nimport yargs from 'yargs';\n\nconst modulesOptions = [\n 'commonjs',\n 'es2015',\n 'es6',\n 'esnext',\n 'native',\n] as const;\n\nconst argv = yargs\n .usage('Usage: $0 [options] <files ...>')\n .option('config', {\n alias: 'c',\n type: 'string',\n description: 'Path to a config file',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('debug', {\n alias: 'd',\n type: 'string',\n description: 'Path for debug output',\n coerce: path.resolve,\n })\n .option('out-dir', {\n alias: 'o',\n type: 'string',\n description: 'Output directory for the extracted CSS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('source-maps', {\n alias: 's',\n type: 'boolean',\n description: 'Generate source maps for the CSS files',\n default: false,\n })\n .option('parallel', {\n alias: 'p',\n type: 'boolean',\n description: 'Run extraction in parallel',\n default: false,\n })\n .option('source-root', {\n alias: 'r',\n type: 'string',\n description: 'Directory containing the source JS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('insert-css-requires', {\n alias: 'i',\n type: 'string',\n description:\n 'Directory containing JS files to insert require statements for the CSS files',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('transform', {\n alias: 't',\n type: 'boolean',\n description: 'Replace template tags with evaluated values',\n })\n .option('modules', {\n alias: 'm',\n choices: modulesOptions,\n description: 'Specifies a type of used imports',\n default: 'commonjs' as const,\n coerce: (s) => s.toLowerCase(),\n })\n .implies('insert-css-requires', 'source-root')\n .implies('transform', 'insert-css-requires')\n .option('ignore', {\n alias: 'x',\n type: 'string',\n description: 'Pattern of files to ignore. Be sure to provide a string',\n requiresArg: true,\n })\n .alias('help', 'h')\n .alias('version', 'v')\n .parseSync();\n\ntype Options = {\n configFile?: string;\n debug?: string;\n ignore?: string;\n insertCssRequires?: string;\n modules: (typeof modulesOptions)[number];\n outDir: string;\n parallel?: boolean;\n sourceMaps?: boolean;\n sourceRoot: string;\n transform?: boolean;\n};\n\nfunction resolveRequireInsertionFilename(filename: string) {\n return filename.replace(/\\.tsx?/, '.js');\n}\n\nfunction resolveOutputFilename(\n filename: string,\n outDir: string,\n sourceRoot: string\n) {\n const outputFolder = path.relative(sourceRoot, path.dirname(filename));\n const outputBasename = path\n .basename(filename)\n .replace(path.extname(filename), '.css');\n\n return path.join(outDir, outputFolder, outputBasename);\n}\n\nasync function processFiles(files: (number | string)[], options: Options) {\n const { emitter, onDone } = createFileReporter(\n options.debug ? { dir: options.debug, print: true } : false\n );\n\n const resolvedFiles = files.reduce(\n (acc, pattern) => [\n ...acc,\n ...globSync(pattern.toString(), {\n absolute: true,\n ignore: options.ignore,\n }),\n ],\n [] as string[]\n );\n const cache = new TransformCacheCollection();\n\n const modifiedFiles: { content: string; name: string }[] = [];\n\n const tasks: (() => Promise<boolean>)[] = [];\n\n // eslint-disable-next-line no-restricted-syntax\n for (const filename of resolvedFiles) {\n if (fs.lstatSync(filename).isDirectory()) {\n return;\n }\n\n const outputFilename = resolveOutputFilename(\n filename,\n options.outDir,\n options.sourceRoot\n );\n\n const transformServices = {\n options: {\n filename,\n outputFilename,\n pluginOptions: {\n configFile: options.configFile,\n },\n root: options.sourceRoot,\n },\n cache,\n eventEmitter: emitter,\n };\n\n tasks.push(() =>\n transform(\n transformServices,\n fs.readFileSync(filename).toString(),\n asyncResolveFallback\n ).then(({ code, cssText, sourceMap, cssSourceMapText }): boolean => {\n if (!cssText) {\n return false;\n }\n mkdirp.sync(path.dirname(outputFilename));\n\n const cssContent =\n options.sourceMaps && sourceMap\n ? `${cssText}\\n/*# sourceMappingURL=${outputFilename}.map */`\n : cssText;\n\n fs.writeFileSync(outputFilename, cssContent);\n\n if (\n options.sourceMaps &&\n sourceMap &&\n typeof cssSourceMapText !== 'undefined'\n ) {\n fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);\n }\n\n if (options.sourceRoot && options.insertCssRequires) {\n const inputFilename = path.resolve(\n options.insertCssRequires,\n path.relative(options.sourceRoot, filename)\n );\n\n const relativePath = normalize(\n path.relative(path.dirname(inputFilename), outputFilename)\n );\n\n const pathForImport = relativePath.startsWith('.')\n ? relativePath\n : `./${relativePath}`;\n\n const statement =\n options.modules === 'commonjs'\n ? `\\nrequire('${pathForImport}');`\n : `\\nimport \"${pathForImport}\";`;\n\n const normalizedInputFilename =\n resolveRequireInsertionFilename(inputFilename);\n\n const inputContent = options.transform\n ? code\n : fs.readFileSync(normalizedInputFilename, 'utf-8');\n\n if (!inputContent.trim().endsWith(statement)) {\n modifiedFiles.push({\n name: normalizedInputFilename,\n content: `${inputContent}\\n${statement}\\n`,\n });\n }\n }\n\n return true;\n })\n );\n }\n\n if (options.parallel) {\n const res = await Promise.all(tasks.map((task) => task()));\n console.log(\n `Successfully extracted ${res.filter((i) => i).length} CSS files.`\n );\n } else {\n let count = 0;\n for (const task of tasks) {\n // eslint-disable-next-line no-await-in-loop\n const res = await task();\n if (res) {\n count += 1;\n }\n }\n\n console.log(`Successfully extracted ${count} CSS files.`);\n }\n\n modifiedFiles.forEach(({ name, content }) => {\n fs.writeFileSync(name, content);\n });\n\n cache.clear('all');\n modifiedFiles.length = 0;\n resolvedFiles.length = 0;\n tasks.length = 0;\n\n onDone(options.sourceRoot ?? process.cwd());\n}\n\nprocessFiles(argv._, {\n configFile: argv.config,\n debug: argv.debug,\n ignore: argv.ignore,\n insertCssRequires: argv['insert-css-requires'],\n modules: argv.modules,\n parallel: argv.parallel,\n outDir: argv['out-dir'],\n sourceMaps: argv['source-maps'],\n sourceRoot: argv['source-root'],\n transform: argv.transform,\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"wyw-in-js.js","names":["fs","path","asyncResolveFallback","createFileReporter","TransformCacheCollection","transform","globSync","mkdirp","normalize","yargs","reportTransformDiagnostics","createMetadataFile","modulesOptions","argv","usage","option","alias","type","description","requiresArg","coerce","resolve","demandOption","default","choices","s","toLowerCase","implies","parseSync","resolveRequireInsertionFilename","filename","replace","resolveOutputFilename","outDir","sourceRoot","outputFolder","relative","dirname","outputBasename","basename","extname","join","processFiles","files","options","emitter","onDone","debug","dir","print","resolvedFiles","reduce","acc","pattern","toString","absolute","ignore","cache","modifiedFiles","tasks","lstatSync","isDirectory","outputFilename","transformServices","pluginOptions","configFile","outputMetadata","root","eventEmitter","push","readFileSync","then","code","cssText","diagnostics","metadata","sourceMap","cssSourceMapText","length","shouldWriteCss","sync","metadataFile","cssFile","undefined","outputRoot","sourceFilename","writeFileSync","content","cssContent","sourceMaps","insertCssRequires","inputFilename","relativePath","pathForImport","startsWith","statement","modules","normalizedInputFilename","inputContent","trim","endsWith","name","parallel","res","Promise","all","map","task","console","log","filter","i","count","forEach","clear","process","cwd","_","config"],"sources":["../src/wyw-in-js.ts"],"sourcesContent":["/* eslint-disable no-console */\n/**\n * This file contains a CLI for wyw-in-js.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { asyncResolveFallback } from '@wyw-in-js/shared';\nimport {\n createFileReporter,\n TransformCacheCollection,\n transform,\n} from '@wyw-in-js/transform';\nimport { globSync } from 'glob';\nimport mkdirp from 'mkdirp';\nimport normalize from 'normalize-path';\nimport yargs from 'yargs';\n\nimport { reportTransformDiagnostics } from './diagnostics';\nimport { createMetadataFile } from './metadata';\n\nconst modulesOptions = [\n 'commonjs',\n 'es2015',\n 'es6',\n 'esnext',\n 'native',\n] as const;\n\nconst argv = yargs\n .usage('Usage: $0 [options] <files ...>')\n .option('config', {\n alias: 'c',\n type: 'string',\n description: 'Path to a config file',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('debug', {\n alias: 'd',\n type: 'string',\n description: 'Path for debug output',\n coerce: path.resolve,\n })\n .option('out-dir', {\n alias: 'o',\n type: 'string',\n description: 'Output directory for the extracted CSS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('source-maps', {\n alias: 's',\n type: 'boolean',\n description: 'Generate source maps for the CSS files',\n default: false,\n })\n .option('parallel', {\n alias: 'p',\n type: 'boolean',\n description: 'Run extraction in parallel',\n default: false,\n })\n .option('output-metadata', {\n type: 'boolean',\n description:\n 'Emit sidecar .wyw-in-js.json metadata manifests for transformed files',\n })\n .option('source-root', {\n alias: 'r',\n type: 'string',\n description: 'Directory containing the source JS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('insert-css-requires', {\n alias: 'i',\n type: 'string',\n description:\n 'Directory containing JS files to insert require statements for the CSS files',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('transform', {\n alias: 't',\n type: 'boolean',\n description: 'Replace template tags with evaluated values',\n })\n .option('modules', {\n alias: 'm',\n choices: modulesOptions,\n description: 'Specifies a type of used imports',\n default: 'commonjs' as const,\n coerce: (s) => s.toLowerCase(),\n })\n .implies('insert-css-requires', 'source-root')\n .implies('transform', 'insert-css-requires')\n .option('ignore', {\n alias: 'x',\n type: 'string',\n description: 'Pattern of files to ignore. Be sure to provide a string',\n requiresArg: true,\n })\n .alias('help', 'h')\n .alias('version', 'v')\n .parseSync();\n\ntype Options = {\n configFile?: string;\n debug?: string;\n ignore?: string;\n insertCssRequires?: string;\n modules: (typeof modulesOptions)[number];\n outDir: string;\n outputMetadata?: boolean;\n parallel?: boolean;\n sourceMaps?: boolean;\n sourceRoot: string;\n transform?: boolean;\n};\n\nfunction resolveRequireInsertionFilename(filename: string) {\n return filename.replace(/\\.tsx?/, '.js');\n}\n\nfunction resolveOutputFilename(\n filename: string,\n outDir: string,\n sourceRoot: string\n) {\n const outputFolder = path.relative(sourceRoot, path.dirname(filename));\n const outputBasename = path\n .basename(filename)\n .replace(path.extname(filename), '.css');\n\n return path.join(outDir, outputFolder, outputBasename);\n}\n\nasync function processFiles(files: (number | string)[], options: Options) {\n const { emitter, onDone } = createFileReporter(\n options.debug ? { dir: options.debug, print: true } : false\n );\n\n const resolvedFiles = files.reduce(\n (acc, pattern) => [\n ...acc,\n ...globSync(pattern.toString(), {\n absolute: true,\n ignore: options.ignore,\n }),\n ],\n [] as string[]\n );\n const cache = new TransformCacheCollection();\n\n const modifiedFiles: { content: string; name: string }[] = [];\n\n const tasks: (() => Promise<boolean>)[] = [];\n\n // eslint-disable-next-line no-restricted-syntax\n for (const filename of resolvedFiles) {\n if (fs.lstatSync(filename).isDirectory()) {\n return;\n }\n\n const outputFilename = resolveOutputFilename(\n filename,\n options.outDir,\n options.sourceRoot\n );\n\n const transformServices = {\n options: {\n filename,\n outputFilename,\n pluginOptions: {\n configFile: options.configFile,\n outputMetadata: options.outputMetadata,\n },\n root: options.sourceRoot,\n },\n cache,\n eventEmitter: emitter,\n };\n\n tasks.push(() =>\n transform(\n transformServices,\n fs.readFileSync(filename).toString(),\n asyncResolveFallback\n ).then(\n ({\n code,\n cssText,\n diagnostics,\n metadata,\n sourceMap,\n cssSourceMapText,\n }): boolean => {\n if (diagnostics?.length) {\n reportTransformDiagnostics(diagnostics);\n }\n\n const shouldWriteCss =\n typeof cssText === 'string' && cssText.length > 0;\n\n if (!shouldWriteCss && !metadata) {\n return false;\n }\n\n mkdirp.sync(path.dirname(outputFilename));\n\n if (metadata) {\n const metadataFile = createMetadataFile({\n cssFile: shouldWriteCss ? outputFilename : undefined,\n metadata,\n outputRoot: options.outDir,\n outputFilename,\n sourceRoot: options.sourceRoot,\n sourceFilename: filename,\n });\n\n fs.writeFileSync(metadataFile.filename, metadataFile.content);\n }\n\n if (!shouldWriteCss) {\n return false;\n }\n\n const cssContent =\n options.sourceMaps && sourceMap\n ? `${cssText}\\n/*# sourceMappingURL=${outputFilename}.map */`\n : cssText;\n\n fs.writeFileSync(outputFilename, cssContent);\n\n if (\n options.sourceMaps &&\n sourceMap &&\n typeof cssSourceMapText !== 'undefined'\n ) {\n fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);\n }\n\n if (options.sourceRoot && options.insertCssRequires) {\n const inputFilename = path.resolve(\n options.insertCssRequires,\n path.relative(options.sourceRoot, filename)\n );\n\n const relativePath = normalize(\n path.relative(path.dirname(inputFilename), outputFilename)\n );\n\n const pathForImport = relativePath.startsWith('.')\n ? relativePath\n : `./${relativePath}`;\n\n const statement =\n options.modules === 'commonjs'\n ? `\\nrequire('${pathForImport}');`\n : `\\nimport \"${pathForImport}\";`;\n\n const normalizedInputFilename =\n resolveRequireInsertionFilename(inputFilename);\n\n const inputContent = options.transform\n ? code\n : fs.readFileSync(normalizedInputFilename, 'utf-8');\n\n if (!inputContent.trim().endsWith(statement)) {\n modifiedFiles.push({\n name: normalizedInputFilename,\n content: `${inputContent}\\n${statement}\\n`,\n });\n }\n }\n\n return true;\n }\n )\n );\n }\n\n if (options.parallel) {\n const res = await Promise.all(tasks.map((task) => task()));\n console.log(\n `Successfully extracted ${res.filter((i) => i).length} CSS files.`\n );\n } else {\n let count = 0;\n for (const task of tasks) {\n // eslint-disable-next-line no-await-in-loop\n const res = await task();\n if (res) {\n count += 1;\n }\n }\n\n console.log(`Successfully extracted ${count} CSS files.`);\n }\n\n modifiedFiles.forEach(({ name, content }) => {\n fs.writeFileSync(name, content);\n });\n\n cache.clear('all');\n modifiedFiles.length = 0;\n resolvedFiles.length = 0;\n tasks.length = 0;\n\n onDone(options.sourceRoot ?? process.cwd());\n}\n\nprocessFiles(argv._, {\n configFile: argv.config,\n debug: argv.debug,\n ignore: argv.ignore,\n insertCssRequires: argv['insert-css-requires'],\n modules: argv.modules,\n parallel: argv.parallel,\n outDir: argv['out-dir'],\n outputMetadata: argv['output-metadata'],\n sourceMaps: argv['source-maps'],\n sourceRoot: argv['source-root'],\n transform: argv.transform,\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AAEvB,SAASC,oBAAoB,QAAQ,mBAAmB;AACxD,SACEC,kBAAkB,EAClBC,wBAAwB,EACxBC,SAAS,QACJ,sBAAsB;AAC7B,SAASC,QAAQ,QAAQ,MAAM;AAC/B,OAAOC,MAAM,MAAM,QAAQ;AAC3B,OAAOC,SAAS,MAAM,gBAAgB;AACtC,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,0BAA0B,QAAQ,eAAe;AAC1D,SAASC,kBAAkB,QAAQ,YAAY;AAE/C,MAAMC,cAAc,GAAG,CACrB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,QAAQ,CACA;AAEV,MAAMC,IAAI,GAAGJ,KAAK,CACfK,KAAK,CAAC,iCAAiC,CAAC,CACxCC,MAAM,CAAC,QAAQ,EAAE;EAChBC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,QAAQ;EACdC,WAAW,EAAE,uBAAuB;EACpCC,WAAW,EAAE,IAAI;EACjBC,MAAM,EAAEnB,IAAI,CAACoB;AACf,CAAC,CAAC,CACDN,MAAM,CAAC,OAAO,EAAE;EACfC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,QAAQ;EACdC,WAAW,EAAE,uBAAuB;EACpCE,MAAM,EAAEnB,IAAI,CAACoB;AACf,CAAC,CAAC,CACDN,MAAM,CAAC,SAAS,EAAE;EACjBC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,QAAQ;EACdC,WAAW,EAAE,8CAA8C;EAC3DI,YAAY,EAAE,IAAI;EAClBH,WAAW,EAAE,IAAI;EACjBC,MAAM,EAAEnB,IAAI,CAACoB;AACf,CAAC,CAAC,CACDN,MAAM,CAAC,aAAa,EAAE;EACrBC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE,wCAAwC;EACrDK,OAAO,EAAE;AACX,CAAC,CAAC,CACDR,MAAM,CAAC,UAAU,EAAE;EAClBC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE,4BAA4B;EACzCK,OAAO,EAAE;AACX,CAAC,CAAC,CACDR,MAAM,CAAC,iBAAiB,EAAE;EACzBE,IAAI,EAAE,SAAS;EACfC,WAAW,EACT;AACJ,CAAC,CAAC,CACDH,MAAM,CAAC,aAAa,EAAE;EACrBC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,QAAQ;EACdC,WAAW,EAAE,0CAA0C;EACvDI,YAAY,EAAE,IAAI;EAClBH,WAAW,EAAE,IAAI;EACjBC,MAAM,EAAEnB,IAAI,CAACoB;AACf,CAAC,CAAC,CACDN,MAAM,CAAC,qBAAqB,EAAE;EAC7BC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,QAAQ;EACdC,WAAW,EACT,8EAA8E;EAChFC,WAAW,EAAE,IAAI;EACjBC,MAAM,EAAEnB,IAAI,CAACoB;AACf,CAAC,CAAC,CACDN,MAAM,CAAC,WAAW,EAAE;EACnBC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE;AACf,CAAC,CAAC,CACDH,MAAM,CAAC,SAAS,EAAE;EACjBC,KAAK,EAAE,GAAG;EACVQ,OAAO,EAAEZ,cAAc;EACvBM,WAAW,EAAE,kCAAkC;EAC/CK,OAAO,EAAE,UAAmB;EAC5BH,MAAM,EAAGK,CAAC,IAAKA,CAAC,CAACC,WAAW,CAAC;AAC/B,CAAC,CAAC,CACDC,OAAO,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAC7CA,OAAO,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAC3CZ,MAAM,CAAC,QAAQ,EAAE;EAChBC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,QAAQ;EACdC,WAAW,EAAE,yDAAyD;EACtEC,WAAW,EAAE;AACf,CAAC,CAAC,CACDH,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAClBA,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CACrBY,SAAS,CAAC,CAAC;AAgBd,SAASC,+BAA+BA,CAACC,QAAgB,EAAE;EACzD,OAAOA,QAAQ,CAACC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC1C;AAEA,SAASC,qBAAqBA,CAC5BF,QAAgB,EAChBG,MAAc,EACdC,UAAkB,EAClB;EACA,MAAMC,YAAY,GAAGlC,IAAI,CAACmC,QAAQ,CAACF,UAAU,EAAEjC,IAAI,CAACoC,OAAO,CAACP,QAAQ,CAAC,CAAC;EACtE,MAAMQ,cAAc,GAAGrC,IAAI,CACxBsC,QAAQ,CAACT,QAAQ,CAAC,CAClBC,OAAO,CAAC9B,IAAI,CAACuC,OAAO,CAACV,QAAQ,CAAC,EAAE,MAAM,CAAC;EAE1C,OAAO7B,IAAI,CAACwC,IAAI,CAACR,MAAM,EAAEE,YAAY,EAAEG,cAAc,CAAC;AACxD;AAEA,eAAeI,YAAYA,CAACC,KAA0B,EAAEC,OAAgB,EAAE;EACxE,MAAM;IAAEC,OAAO;IAAEC;EAAO,CAAC,GAAG3C,kBAAkB,CAC5CyC,OAAO,CAACG,KAAK,GAAG;IAAEC,GAAG,EAAEJ,OAAO,CAACG,KAAK;IAAEE,KAAK,EAAE;EAAK,CAAC,GAAG,KACxD,CAAC;EAED,MAAMC,aAAa,GAAGP,KAAK,CAACQ,MAAM,CAChC,CAACC,GAAG,EAAEC,OAAO,KAAK,CAChB,GAAGD,GAAG,EACN,GAAG9C,QAAQ,CAAC+C,OAAO,CAACC,QAAQ,CAAC,CAAC,EAAE;IAC9BC,QAAQ,EAAE,IAAI;IACdC,MAAM,EAAEZ,OAAO,CAACY;EAClB,CAAC,CAAC,CACH,EACD,EACF,CAAC;EACD,MAAMC,KAAK,GAAG,IAAIrD,wBAAwB,CAAC,CAAC;EAE5C,MAAMsD,aAAkD,GAAG,EAAE;EAE7D,MAAMC,KAAiC,GAAG,EAAE;;EAE5C;EACA,KAAK,MAAM7B,QAAQ,IAAIoB,aAAa,EAAE;IACpC,IAAIlD,EAAE,CAAC4D,SAAS,CAAC9B,QAAQ,CAAC,CAAC+B,WAAW,CAAC,CAAC,EAAE;MACxC;IACF;IAEA,MAAMC,cAAc,GAAG9B,qBAAqB,CAC1CF,QAAQ,EACRc,OAAO,CAACX,MAAM,EACdW,OAAO,CAACV,UACV,CAAC;IAED,MAAM6B,iBAAiB,GAAG;MACxBnB,OAAO,EAAE;QACPd,QAAQ;QACRgC,cAAc;QACdE,aAAa,EAAE;UACbC,UAAU,EAAErB,OAAO,CAACqB,UAAU;UAC9BC,cAAc,EAAEtB,OAAO,CAACsB;QAC1B,CAAC;QACDC,IAAI,EAAEvB,OAAO,CAACV;MAChB,CAAC;MACDuB,KAAK;MACLW,YAAY,EAAEvB;IAChB,CAAC;IAEDc,KAAK,CAACU,IAAI,CAAC,MACThE,SAAS,CACP0D,iBAAiB,EACjB/D,EAAE,CAACsE,YAAY,CAACxC,QAAQ,CAAC,CAACwB,QAAQ,CAAC,CAAC,EACpCpD,oBACF,CAAC,CAACqE,IAAI,CACJ,CAAC;MACCC,IAAI;MACJC,OAAO;MACPC,WAAW;MACXC,QAAQ;MACRC,SAAS;MACTC;IACF,CAAC,KAAc;MACb,IAAIH,WAAW,EAAEI,MAAM,EAAE;QACvBpE,0BAA0B,CAACgE,WAAW,CAAC;MACzC;MAEA,MAAMK,cAAc,GAClB,OAAON,OAAO,KAAK,QAAQ,IAAIA,OAAO,CAACK,MAAM,GAAG,CAAC;MAEnD,IAAI,CAACC,cAAc,IAAI,CAACJ,QAAQ,EAAE;QAChC,OAAO,KAAK;MACd;MAEApE,MAAM,CAACyE,IAAI,CAAC/E,IAAI,CAACoC,OAAO,CAACyB,cAAc,CAAC,CAAC;MAEzC,IAAIa,QAAQ,EAAE;QACZ,MAAMM,YAAY,GAAGtE,kBAAkB,CAAC;UACtCuE,OAAO,EAAEH,cAAc,GAAGjB,cAAc,GAAGqB,SAAS;UACpDR,QAAQ;UACRS,UAAU,EAAExC,OAAO,CAACX,MAAM;UAC1B6B,cAAc;UACd5B,UAAU,EAAEU,OAAO,CAACV,UAAU;UAC9BmD,cAAc,EAAEvD;QAClB,CAAC,CAAC;QAEF9B,EAAE,CAACsF,aAAa,CAACL,YAAY,CAACnD,QAAQ,EAAEmD,YAAY,CAACM,OAAO,CAAC;MAC/D;MAEA,IAAI,CAACR,cAAc,EAAE;QACnB,OAAO,KAAK;MACd;MAEA,MAAMS,UAAU,GACd5C,OAAO,CAAC6C,UAAU,IAAIb,SAAS,GAC3B,GAAGH,OAAO,0BAA0BX,cAAc,SAAS,GAC3DW,OAAO;MAEbzE,EAAE,CAACsF,aAAa,CAACxB,cAAc,EAAE0B,UAAU,CAAC;MAE5C,IACE5C,OAAO,CAAC6C,UAAU,IAClBb,SAAS,IACT,OAAOC,gBAAgB,KAAK,WAAW,EACvC;QACA7E,EAAE,CAACsF,aAAa,CAAC,GAAGxB,cAAc,MAAM,EAAEe,gBAAgB,CAAC;MAC7D;MAEA,IAAIjC,OAAO,CAACV,UAAU,IAAIU,OAAO,CAAC8C,iBAAiB,EAAE;QACnD,MAAMC,aAAa,GAAG1F,IAAI,CAACoB,OAAO,CAChCuB,OAAO,CAAC8C,iBAAiB,EACzBzF,IAAI,CAACmC,QAAQ,CAACQ,OAAO,CAACV,UAAU,EAAEJ,QAAQ,CAC5C,CAAC;QAED,MAAM8D,YAAY,GAAGpF,SAAS,CAC5BP,IAAI,CAACmC,QAAQ,CAACnC,IAAI,CAACoC,OAAO,CAACsD,aAAa,CAAC,EAAE7B,cAAc,CAC3D,CAAC;QAED,MAAM+B,aAAa,GAAGD,YAAY,CAACE,UAAU,CAAC,GAAG,CAAC,GAC9CF,YAAY,GACZ,KAAKA,YAAY,EAAE;QAEvB,MAAMG,SAAS,GACbnD,OAAO,CAACoD,OAAO,KAAK,UAAU,GAC1B,cAAcH,aAAa,KAAK,GAChC,aAAaA,aAAa,IAAI;QAEpC,MAAMI,uBAAuB,GAC3BpE,+BAA+B,CAAC8D,aAAa,CAAC;QAEhD,MAAMO,YAAY,GAAGtD,OAAO,CAACvC,SAAS,GAClCmE,IAAI,GACJxE,EAAE,CAACsE,YAAY,CAAC2B,uBAAuB,EAAE,OAAO,CAAC;QAErD,IAAI,CAACC,YAAY,CAACC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAACL,SAAS,CAAC,EAAE;UAC5CrC,aAAa,CAACW,IAAI,CAAC;YACjBgC,IAAI,EAAEJ,uBAAuB;YAC7BV,OAAO,EAAE,GAAGW,YAAY,KAAKH,SAAS;UACxC,CAAC,CAAC;QACJ;MACF;MAEA,OAAO,IAAI;IACb,CACF,CACF,CAAC;EACH;EAEA,IAAInD,OAAO,CAAC0D,QAAQ,EAAE;IACpB,MAAMC,GAAG,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC9C,KAAK,CAAC+C,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1DC,OAAO,CAACC,GAAG,CACT,0BAA0BN,GAAG,CAACO,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAACjC,MAAM,aACvD,CAAC;EACH,CAAC,MAAM;IACL,IAAIkC,KAAK,GAAG,CAAC;IACb,KAAK,MAAML,IAAI,IAAIhD,KAAK,EAAE;MACxB;MACA,MAAM4C,GAAG,GAAG,MAAMI,IAAI,CAAC,CAAC;MACxB,IAAIJ,GAAG,EAAE;QACPS,KAAK,IAAI,CAAC;MACZ;IACF;IAEAJ,OAAO,CAACC,GAAG,CAAC,0BAA0BG,KAAK,aAAa,CAAC;EAC3D;EAEAtD,aAAa,CAACuD,OAAO,CAAC,CAAC;IAAEZ,IAAI;IAAEd;EAAQ,CAAC,KAAK;IAC3CvF,EAAE,CAACsF,aAAa,CAACe,IAAI,EAAEd,OAAO,CAAC;EACjC,CAAC,CAAC;EAEF9B,KAAK,CAACyD,KAAK,CAAC,KAAK,CAAC;EAClBxD,aAAa,CAACoB,MAAM,GAAG,CAAC;EACxB5B,aAAa,CAAC4B,MAAM,GAAG,CAAC;EACxBnB,KAAK,CAACmB,MAAM,GAAG,CAAC;EAEhBhC,MAAM,CAACF,OAAO,CAACV,UAAU,IAAIiF,OAAO,CAACC,GAAG,CAAC,CAAC,CAAC;AAC7C;AAEA1E,YAAY,CAAC7B,IAAI,CAACwG,CAAC,EAAE;EACnBpD,UAAU,EAAEpD,IAAI,CAACyG,MAAM;EACvBvE,KAAK,EAAElC,IAAI,CAACkC,KAAK;EACjBS,MAAM,EAAE3C,IAAI,CAAC2C,MAAM;EACnBkC,iBAAiB,EAAE7E,IAAI,CAAC,qBAAqB,CAAC;EAC9CmF,OAAO,EAAEnF,IAAI,CAACmF,OAAO;EACrBM,QAAQ,EAAEzF,IAAI,CAACyF,QAAQ;EACvBrE,MAAM,EAAEpB,IAAI,CAAC,SAAS,CAAC;EACvBqD,cAAc,EAAErD,IAAI,CAAC,iBAAiB,CAAC;EACvC4E,UAAU,EAAE5E,IAAI,CAAC,aAAa,CAAC;EAC/BqB,UAAU,EAAErB,IAAI,CAAC,aAAa,CAAC;EAC/BR,SAAS,EAAEQ,IAAI,CAACR;AAClB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.reportTransformDiagnostics = exports.formatTransformDiagnostic = void 0;
7
+ const formatLocation = diagnostic => {
8
+ if (!diagnostic.start) {
9
+ return diagnostic.filename;
10
+ }
11
+ return `${diagnostic.filename}:${diagnostic.start.line}:${diagnostic.start.column + 1}`;
12
+ };
13
+ const formatTransformDiagnostic = diagnostic => [`[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`, ` at ${formatLocation(diagnostic)} (${diagnostic.displayName})`].join('\n');
14
+ exports.formatTransformDiagnostic = formatTransformDiagnostic;
15
+ const reportTransformDiagnostics = diagnostics => {
16
+ diagnostics.forEach(diagnostic => {
17
+ // eslint-disable-next-line no-console
18
+ console.warn(formatTransformDiagnostic(diagnostic));
19
+ });
20
+ };
21
+ exports.reportTransformDiagnostics = reportTransformDiagnostics;
22
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","names":["formatLocation","diagnostic","start","filename","line","column","formatTransformDiagnostic","severity","category","message","displayName","join","exports","reportTransformDiagnostics","diagnostics","forEach","console","warn"],"sources":["../src/diagnostics.ts"],"sourcesContent":["import type { WYWTransformDiagnostic } from '@wyw-in-js/transform';\n\nconst formatLocation = (diagnostic: WYWTransformDiagnostic) => {\n if (!diagnostic.start) {\n return diagnostic.filename;\n }\n\n return `${diagnostic.filename}:${diagnostic.start.line}:${\n diagnostic.start.column + 1\n }`;\n};\n\nexport const formatTransformDiagnostic = (diagnostic: WYWTransformDiagnostic) =>\n [\n `[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`,\n ` at ${formatLocation(diagnostic)} (${diagnostic.displayName})`,\n ].join('\\n');\n\nexport const reportTransformDiagnostics = (\n diagnostics: WYWTransformDiagnostic[]\n) => {\n diagnostics.forEach((diagnostic) => {\n // eslint-disable-next-line no-console\n console.warn(formatTransformDiagnostic(diagnostic));\n });\n};\n"],"mappings":";;;;;;AAEA,MAAMA,cAAc,GAAIC,UAAkC,IAAK;EAC7D,IAAI,CAACA,UAAU,CAACC,KAAK,EAAE;IACrB,OAAOD,UAAU,CAACE,QAAQ;EAC5B;EAEA,OAAO,GAAGF,UAAU,CAACE,QAAQ,IAAIF,UAAU,CAACC,KAAK,CAACE,IAAI,IACpDH,UAAU,CAACC,KAAK,CAACG,MAAM,GAAG,CAAC,EAC3B;AACJ,CAAC;AAEM,MAAMC,yBAAyB,GAAIL,UAAkC,IAC1E,CACE,eAAeA,UAAU,CAACM,QAAQ,KAAKN,UAAU,CAACO,QAAQ,KAAKP,UAAU,CAACQ,OAAO,EAAE,EACnF,QAAQT,cAAc,CAACC,UAAU,CAAC,KAAKA,UAAU,CAACS,WAAW,GAAG,CACjE,CAACC,IAAI,CAAC,IAAI,CAAC;AAACC,OAAA,CAAAN,yBAAA,GAAAA,yBAAA;AAER,MAAMO,0BAA0B,GACrCC,WAAqC,IAClC;EACHA,WAAW,CAACC,OAAO,CAAEd,UAAU,IAAK;IAClC;IACAe,OAAO,CAACC,IAAI,CAACX,yBAAyB,CAACL,UAAU,CAAC,CAAC;EACrD,CAAC,CAAC;AACJ,CAAC;AAACW,OAAA,CAAAC,0BAAA,GAAAA,0BAAA","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createMetadataFile = createMetadataFile;
7
+ exports.resolveMetadataFilename = resolveMetadataFilename;
8
+ var _path = _interopRequireDefault(require("path"));
9
+ var _normalizePath = _interopRequireDefault(require("normalize-path"));
10
+ var _transform = require("@wyw-in-js/transform");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function resolveMetadataFilename(outputFilename) {
13
+ const extension = _path.default.extname(outputFilename);
14
+ return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;
15
+ }
16
+ function createMetadataFile({
17
+ metadata,
18
+ outputRoot,
19
+ outputFilename,
20
+ sourceRoot,
21
+ sourceFilename,
22
+ cssFile
23
+ }) {
24
+ const filename = resolveMetadataFilename(outputFilename);
25
+ return {
26
+ content: (0, _transform.stringifyTransformManifest)((0, _transform.createTransformManifest)(metadata, {
27
+ cssFile: cssFile ? (0, _normalizePath.default)(_path.default.relative(outputRoot, cssFile)) : undefined,
28
+ source: (0, _normalizePath.default)(_path.default.relative(sourceRoot, sourceFilename))
29
+ })),
30
+ filename
31
+ };
32
+ }
33
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","names":["_path","_interopRequireDefault","require","_normalizePath","_transform","e","__esModule","default","resolveMetadataFilename","outputFilename","extension","path","extname","slice","length","createMetadataFile","metadata","outputRoot","sourceRoot","sourceFilename","cssFile","filename","content","stringifyTransformManifest","createTransformManifest","normalize","relative","undefined","source"],"sources":["../src/metadata.ts"],"sourcesContent":["import path from 'path';\n\nimport normalize from 'normalize-path';\n\nimport type { WYWTransformResultMetadata } from '@wyw-in-js/transform';\nimport {\n createTransformManifest,\n stringifyTransformManifest,\n} from '@wyw-in-js/transform';\n\ntype CreateMetadataFileOptions = {\n cssFile?: string;\n metadata: WYWTransformResultMetadata;\n outputRoot: string;\n outputFilename: string;\n sourceRoot: string;\n sourceFilename: string;\n};\n\nexport function resolveMetadataFilename(outputFilename: string) {\n const extension = path.extname(outputFilename);\n return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;\n}\n\nexport function createMetadataFile({\n metadata,\n outputRoot,\n outputFilename,\n sourceRoot,\n sourceFilename,\n cssFile,\n}: CreateMetadataFileOptions) {\n const filename = resolveMetadataFilename(outputFilename);\n\n return {\n content: stringifyTransformManifest(\n createTransformManifest(metadata, {\n cssFile: cssFile\n ? normalize(path.relative(outputRoot, cssFile))\n : undefined,\n source: normalize(path.relative(sourceRoot, sourceFilename)),\n })\n ),\n filename,\n };\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGA,IAAAE,UAAA,GAAAF,OAAA;AAG8B,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAWvB,SAASG,uBAAuBA,CAACC,cAAsB,EAAE;EAC9D,MAAMC,SAAS,GAAGC,aAAI,CAACC,OAAO,CAACH,cAAc,CAAC;EAC9C,OAAO,GAAGA,cAAc,CAACI,KAAK,CAAC,CAAC,EAAE,CAACH,SAAS,CAACI,MAAM,CAAC,iBAAiB;AACvE;AAEO,SAASC,kBAAkBA,CAAC;EACjCC,QAAQ;EACRC,UAAU;EACVR,cAAc;EACdS,UAAU;EACVC,cAAc;EACdC;AACyB,CAAC,EAAE;EAC5B,MAAMC,QAAQ,GAAGb,uBAAuB,CAACC,cAAc,CAAC;EAExD,OAAO;IACLa,OAAO,EAAE,IAAAC,qCAA0B,EACjC,IAAAC,kCAAuB,EAACR,QAAQ,EAAE;MAChCI,OAAO,EAAEA,OAAO,GACZ,IAAAK,sBAAS,EAACd,aAAI,CAACe,QAAQ,CAACT,UAAU,EAAEG,OAAO,CAAC,CAAC,GAC7CO,SAAS;MACbC,MAAM,EAAE,IAAAH,sBAAS,EAACd,aAAI,CAACe,QAAQ,CAACR,UAAU,EAAEC,cAAc,CAAC;IAC7D,CAAC,CACH,CAAC;IACDE;EACF,CAAC;AACH","ignoreList":[]}
package/lib/wyw-in-js.js CHANGED
@@ -8,6 +8,8 @@ var _glob = require("glob");
8
8
  var _mkdirp = _interopRequireDefault(require("mkdirp"));
9
9
  var _normalizePath = _interopRequireDefault(require("normalize-path"));
10
10
  var _yargs = _interopRequireDefault(require("yargs"));
11
+ var _diagnostics = require("./diagnostics");
12
+ var _metadata = require("./metadata");
11
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
14
  /* eslint-disable no-console */
13
15
  /**
@@ -43,6 +45,9 @@ const argv = _yargs.default.usage('Usage: $0 [options] <files ...>').option('con
43
45
  type: 'boolean',
44
46
  description: 'Run extraction in parallel',
45
47
  default: false
48
+ }).option('output-metadata', {
49
+ type: 'boolean',
50
+ description: 'Emit sidecar .wyw-in-js.json metadata manifests for transformed files'
46
51
  }).option('source-root', {
47
52
  alias: 'r',
48
53
  type: 'string',
@@ -108,7 +113,8 @@ async function processFiles(files, options) {
108
113
  filename,
109
114
  outputFilename,
110
115
  pluginOptions: {
111
- configFile: options.configFile
116
+ configFile: options.configFile,
117
+ outputMetadata: options.outputMetadata
112
118
  },
113
119
  root: options.sourceRoot
114
120
  },
@@ -118,13 +124,33 @@ async function processFiles(files, options) {
118
124
  tasks.push(() => (0, _transform.transform)(transformServices, _fs.default.readFileSync(filename).toString(), _shared.asyncResolveFallback).then(({
119
125
  code,
120
126
  cssText,
127
+ diagnostics,
128
+ metadata,
121
129
  sourceMap,
122
130
  cssSourceMapText
123
131
  }) => {
124
- if (!cssText) {
132
+ if (diagnostics !== null && diagnostics !== void 0 && diagnostics.length) {
133
+ (0, _diagnostics.reportTransformDiagnostics)(diagnostics);
134
+ }
135
+ const shouldWriteCss = typeof cssText === 'string' && cssText.length > 0;
136
+ if (!shouldWriteCss && !metadata) {
125
137
  return false;
126
138
  }
127
139
  _mkdirp.default.sync(_path.default.dirname(outputFilename));
140
+ if (metadata) {
141
+ const metadataFile = (0, _metadata.createMetadataFile)({
142
+ cssFile: shouldWriteCss ? outputFilename : undefined,
143
+ metadata,
144
+ outputRoot: options.outDir,
145
+ outputFilename,
146
+ sourceRoot: options.sourceRoot,
147
+ sourceFilename: filename
148
+ });
149
+ _fs.default.writeFileSync(metadataFile.filename, metadataFile.content);
150
+ }
151
+ if (!shouldWriteCss) {
152
+ return false;
153
+ }
128
154
  const cssContent = options.sourceMaps && sourceMap ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */` : cssText;
129
155
  _fs.default.writeFileSync(outputFilename, cssContent);
130
156
  if (options.sourceMaps && sourceMap && typeof cssSourceMapText !== 'undefined') {
@@ -181,6 +207,7 @@ processFiles(argv._, {
181
207
  modules: argv.modules,
182
208
  parallel: argv.parallel,
183
209
  outDir: argv['out-dir'],
210
+ outputMetadata: argv['output-metadata'],
184
211
  sourceMaps: argv['source-maps'],
185
212
  sourceRoot: argv['source-root'],
186
213
  transform: argv.transform
@@ -1 +1 @@
1
- {"version":3,"file":"wyw-in-js.js","names":["_fs","_interopRequireDefault","require","_path","_shared","_transform","_glob","_mkdirp","_normalizePath","_yargs","e","__esModule","default","modulesOptions","argv","yargs","usage","option","alias","type","description","requiresArg","coerce","path","resolve","demandOption","choices","s","toLowerCase","implies","parseSync","resolveRequireInsertionFilename","filename","replace","resolveOutputFilename","outDir","sourceRoot","outputFolder","relative","dirname","outputBasename","basename","extname","join","processFiles","files","options","_options$sourceRoot","emitter","onDone","createFileReporter","debug","dir","print","resolvedFiles","reduce","acc","pattern","globSync","toString","absolute","ignore","cache","TransformCacheCollection","modifiedFiles","tasks","fs","lstatSync","isDirectory","outputFilename","transformServices","pluginOptions","configFile","root","eventEmitter","push","transform","readFileSync","asyncResolveFallback","then","code","cssText","sourceMap","cssSourceMapText","mkdirp","sync","cssContent","sourceMaps","writeFileSync","insertCssRequires","inputFilename","relativePath","normalize","pathForImport","startsWith","statement","modules","normalizedInputFilename","inputContent","trim","endsWith","name","content","parallel","res","Promise","all","map","task","console","log","filter","i","length","count","forEach","clear","process","cwd","_","config"],"sources":["../src/wyw-in-js.ts"],"sourcesContent":["/* eslint-disable no-console */\n/**\n * This file contains a CLI for wyw-in-js.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { asyncResolveFallback } from '@wyw-in-js/shared';\nimport {\n createFileReporter,\n TransformCacheCollection,\n transform,\n} from '@wyw-in-js/transform';\nimport { globSync } from 'glob';\nimport mkdirp from 'mkdirp';\nimport normalize from 'normalize-path';\nimport yargs from 'yargs';\n\nconst modulesOptions = [\n 'commonjs',\n 'es2015',\n 'es6',\n 'esnext',\n 'native',\n] as const;\n\nconst argv = yargs\n .usage('Usage: $0 [options] <files ...>')\n .option('config', {\n alias: 'c',\n type: 'string',\n description: 'Path to a config file',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('debug', {\n alias: 'd',\n type: 'string',\n description: 'Path for debug output',\n coerce: path.resolve,\n })\n .option('out-dir', {\n alias: 'o',\n type: 'string',\n description: 'Output directory for the extracted CSS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('source-maps', {\n alias: 's',\n type: 'boolean',\n description: 'Generate source maps for the CSS files',\n default: false,\n })\n .option('parallel', {\n alias: 'p',\n type: 'boolean',\n description: 'Run extraction in parallel',\n default: false,\n })\n .option('source-root', {\n alias: 'r',\n type: 'string',\n description: 'Directory containing the source JS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('insert-css-requires', {\n alias: 'i',\n type: 'string',\n description:\n 'Directory containing JS files to insert require statements for the CSS files',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('transform', {\n alias: 't',\n type: 'boolean',\n description: 'Replace template tags with evaluated values',\n })\n .option('modules', {\n alias: 'm',\n choices: modulesOptions,\n description: 'Specifies a type of used imports',\n default: 'commonjs' as const,\n coerce: (s) => s.toLowerCase(),\n })\n .implies('insert-css-requires', 'source-root')\n .implies('transform', 'insert-css-requires')\n .option('ignore', {\n alias: 'x',\n type: 'string',\n description: 'Pattern of files to ignore. Be sure to provide a string',\n requiresArg: true,\n })\n .alias('help', 'h')\n .alias('version', 'v')\n .parseSync();\n\ntype Options = {\n configFile?: string;\n debug?: string;\n ignore?: string;\n insertCssRequires?: string;\n modules: (typeof modulesOptions)[number];\n outDir: string;\n parallel?: boolean;\n sourceMaps?: boolean;\n sourceRoot: string;\n transform?: boolean;\n};\n\nfunction resolveRequireInsertionFilename(filename: string) {\n return filename.replace(/\\.tsx?/, '.js');\n}\n\nfunction resolveOutputFilename(\n filename: string,\n outDir: string,\n sourceRoot: string\n) {\n const outputFolder = path.relative(sourceRoot, path.dirname(filename));\n const outputBasename = path\n .basename(filename)\n .replace(path.extname(filename), '.css');\n\n return path.join(outDir, outputFolder, outputBasename);\n}\n\nasync function processFiles(files: (number | string)[], options: Options) {\n const { emitter, onDone } = createFileReporter(\n options.debug ? { dir: options.debug, print: true } : false\n );\n\n const resolvedFiles = files.reduce(\n (acc, pattern) => [\n ...acc,\n ...globSync(pattern.toString(), {\n absolute: true,\n ignore: options.ignore,\n }),\n ],\n [] as string[]\n );\n const cache = new TransformCacheCollection();\n\n const modifiedFiles: { content: string; name: string }[] = [];\n\n const tasks: (() => Promise<boolean>)[] = [];\n\n // eslint-disable-next-line no-restricted-syntax\n for (const filename of resolvedFiles) {\n if (fs.lstatSync(filename).isDirectory()) {\n return;\n }\n\n const outputFilename = resolveOutputFilename(\n filename,\n options.outDir,\n options.sourceRoot\n );\n\n const transformServices = {\n options: {\n filename,\n outputFilename,\n pluginOptions: {\n configFile: options.configFile,\n },\n root: options.sourceRoot,\n },\n cache,\n eventEmitter: emitter,\n };\n\n tasks.push(() =>\n transform(\n transformServices,\n fs.readFileSync(filename).toString(),\n asyncResolveFallback\n ).then(({ code, cssText, sourceMap, cssSourceMapText }): boolean => {\n if (!cssText) {\n return false;\n }\n mkdirp.sync(path.dirname(outputFilename));\n\n const cssContent =\n options.sourceMaps && sourceMap\n ? `${cssText}\\n/*# sourceMappingURL=${outputFilename}.map */`\n : cssText;\n\n fs.writeFileSync(outputFilename, cssContent);\n\n if (\n options.sourceMaps &&\n sourceMap &&\n typeof cssSourceMapText !== 'undefined'\n ) {\n fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);\n }\n\n if (options.sourceRoot && options.insertCssRequires) {\n const inputFilename = path.resolve(\n options.insertCssRequires,\n path.relative(options.sourceRoot, filename)\n );\n\n const relativePath = normalize(\n path.relative(path.dirname(inputFilename), outputFilename)\n );\n\n const pathForImport = relativePath.startsWith('.')\n ? relativePath\n : `./${relativePath}`;\n\n const statement =\n options.modules === 'commonjs'\n ? `\\nrequire('${pathForImport}');`\n : `\\nimport \"${pathForImport}\";`;\n\n const normalizedInputFilename =\n resolveRequireInsertionFilename(inputFilename);\n\n const inputContent = options.transform\n ? code\n : fs.readFileSync(normalizedInputFilename, 'utf-8');\n\n if (!inputContent.trim().endsWith(statement)) {\n modifiedFiles.push({\n name: normalizedInputFilename,\n content: `${inputContent}\\n${statement}\\n`,\n });\n }\n }\n\n return true;\n })\n );\n }\n\n if (options.parallel) {\n const res = await Promise.all(tasks.map((task) => task()));\n console.log(\n `Successfully extracted ${res.filter((i) => i).length} CSS files.`\n );\n } else {\n let count = 0;\n for (const task of tasks) {\n // eslint-disable-next-line no-await-in-loop\n const res = await task();\n if (res) {\n count += 1;\n }\n }\n\n console.log(`Successfully extracted ${count} CSS files.`);\n }\n\n modifiedFiles.forEach(({ name, content }) => {\n fs.writeFileSync(name, content);\n });\n\n cache.clear('all');\n modifiedFiles.length = 0;\n resolvedFiles.length = 0;\n tasks.length = 0;\n\n onDone(options.sourceRoot ?? process.cwd());\n}\n\nprocessFiles(argv._, {\n configFile: argv.config,\n debug: argv.debug,\n ignore: argv.ignore,\n insertCssRequires: argv['insert-css-requires'],\n modules: argv.modules,\n parallel: argv.parallel,\n outDir: argv['out-dir'],\n sourceMaps: argv['source-maps'],\n sourceRoot: argv['source-root'],\n transform: argv.transform,\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"wyw-in-js.js","names":["_fs","_interopRequireDefault","require","_path","_shared","_transform","_glob","_mkdirp","_normalizePath","_yargs","_diagnostics","_metadata","e","__esModule","default","modulesOptions","argv","yargs","usage","option","alias","type","description","requiresArg","coerce","path","resolve","demandOption","choices","s","toLowerCase","implies","parseSync","resolveRequireInsertionFilename","filename","replace","resolveOutputFilename","outDir","sourceRoot","outputFolder","relative","dirname","outputBasename","basename","extname","join","processFiles","files","options","_options$sourceRoot","emitter","onDone","createFileReporter","debug","dir","print","resolvedFiles","reduce","acc","pattern","globSync","toString","absolute","ignore","cache","TransformCacheCollection","modifiedFiles","tasks","fs","lstatSync","isDirectory","outputFilename","transformServices","pluginOptions","configFile","outputMetadata","root","eventEmitter","push","transform","readFileSync","asyncResolveFallback","then","code","cssText","diagnostics","metadata","sourceMap","cssSourceMapText","length","reportTransformDiagnostics","shouldWriteCss","mkdirp","sync","metadataFile","createMetadataFile","cssFile","undefined","outputRoot","sourceFilename","writeFileSync","content","cssContent","sourceMaps","insertCssRequires","inputFilename","relativePath","normalize","pathForImport","startsWith","statement","modules","normalizedInputFilename","inputContent","trim","endsWith","name","parallel","res","Promise","all","map","task","console","log","filter","i","count","forEach","clear","process","cwd","_","config"],"sources":["../src/wyw-in-js.ts"],"sourcesContent":["/* eslint-disable no-console */\n/**\n * This file contains a CLI for wyw-in-js.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { asyncResolveFallback } from '@wyw-in-js/shared';\nimport {\n createFileReporter,\n TransformCacheCollection,\n transform,\n} from '@wyw-in-js/transform';\nimport { globSync } from 'glob';\nimport mkdirp from 'mkdirp';\nimport normalize from 'normalize-path';\nimport yargs from 'yargs';\n\nimport { reportTransformDiagnostics } from './diagnostics';\nimport { createMetadataFile } from './metadata';\n\nconst modulesOptions = [\n 'commonjs',\n 'es2015',\n 'es6',\n 'esnext',\n 'native',\n] as const;\n\nconst argv = yargs\n .usage('Usage: $0 [options] <files ...>')\n .option('config', {\n alias: 'c',\n type: 'string',\n description: 'Path to a config file',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('debug', {\n alias: 'd',\n type: 'string',\n description: 'Path for debug output',\n coerce: path.resolve,\n })\n .option('out-dir', {\n alias: 'o',\n type: 'string',\n description: 'Output directory for the extracted CSS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('source-maps', {\n alias: 's',\n type: 'boolean',\n description: 'Generate source maps for the CSS files',\n default: false,\n })\n .option('parallel', {\n alias: 'p',\n type: 'boolean',\n description: 'Run extraction in parallel',\n default: false,\n })\n .option('output-metadata', {\n type: 'boolean',\n description:\n 'Emit sidecar .wyw-in-js.json metadata manifests for transformed files',\n })\n .option('source-root', {\n alias: 'r',\n type: 'string',\n description: 'Directory containing the source JS files',\n demandOption: true,\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('insert-css-requires', {\n alias: 'i',\n type: 'string',\n description:\n 'Directory containing JS files to insert require statements for the CSS files',\n requiresArg: true,\n coerce: path.resolve,\n })\n .option('transform', {\n alias: 't',\n type: 'boolean',\n description: 'Replace template tags with evaluated values',\n })\n .option('modules', {\n alias: 'm',\n choices: modulesOptions,\n description: 'Specifies a type of used imports',\n default: 'commonjs' as const,\n coerce: (s) => s.toLowerCase(),\n })\n .implies('insert-css-requires', 'source-root')\n .implies('transform', 'insert-css-requires')\n .option('ignore', {\n alias: 'x',\n type: 'string',\n description: 'Pattern of files to ignore. Be sure to provide a string',\n requiresArg: true,\n })\n .alias('help', 'h')\n .alias('version', 'v')\n .parseSync();\n\ntype Options = {\n configFile?: string;\n debug?: string;\n ignore?: string;\n insertCssRequires?: string;\n modules: (typeof modulesOptions)[number];\n outDir: string;\n outputMetadata?: boolean;\n parallel?: boolean;\n sourceMaps?: boolean;\n sourceRoot: string;\n transform?: boolean;\n};\n\nfunction resolveRequireInsertionFilename(filename: string) {\n return filename.replace(/\\.tsx?/, '.js');\n}\n\nfunction resolveOutputFilename(\n filename: string,\n outDir: string,\n sourceRoot: string\n) {\n const outputFolder = path.relative(sourceRoot, path.dirname(filename));\n const outputBasename = path\n .basename(filename)\n .replace(path.extname(filename), '.css');\n\n return path.join(outDir, outputFolder, outputBasename);\n}\n\nasync function processFiles(files: (number | string)[], options: Options) {\n const { emitter, onDone } = createFileReporter(\n options.debug ? { dir: options.debug, print: true } : false\n );\n\n const resolvedFiles = files.reduce(\n (acc, pattern) => [\n ...acc,\n ...globSync(pattern.toString(), {\n absolute: true,\n ignore: options.ignore,\n }),\n ],\n [] as string[]\n );\n const cache = new TransformCacheCollection();\n\n const modifiedFiles: { content: string; name: string }[] = [];\n\n const tasks: (() => Promise<boolean>)[] = [];\n\n // eslint-disable-next-line no-restricted-syntax\n for (const filename of resolvedFiles) {\n if (fs.lstatSync(filename).isDirectory()) {\n return;\n }\n\n const outputFilename = resolveOutputFilename(\n filename,\n options.outDir,\n options.sourceRoot\n );\n\n const transformServices = {\n options: {\n filename,\n outputFilename,\n pluginOptions: {\n configFile: options.configFile,\n outputMetadata: options.outputMetadata,\n },\n root: options.sourceRoot,\n },\n cache,\n eventEmitter: emitter,\n };\n\n tasks.push(() =>\n transform(\n transformServices,\n fs.readFileSync(filename).toString(),\n asyncResolveFallback\n ).then(\n ({\n code,\n cssText,\n diagnostics,\n metadata,\n sourceMap,\n cssSourceMapText,\n }): boolean => {\n if (diagnostics?.length) {\n reportTransformDiagnostics(diagnostics);\n }\n\n const shouldWriteCss =\n typeof cssText === 'string' && cssText.length > 0;\n\n if (!shouldWriteCss && !metadata) {\n return false;\n }\n\n mkdirp.sync(path.dirname(outputFilename));\n\n if (metadata) {\n const metadataFile = createMetadataFile({\n cssFile: shouldWriteCss ? outputFilename : undefined,\n metadata,\n outputRoot: options.outDir,\n outputFilename,\n sourceRoot: options.sourceRoot,\n sourceFilename: filename,\n });\n\n fs.writeFileSync(metadataFile.filename, metadataFile.content);\n }\n\n if (!shouldWriteCss) {\n return false;\n }\n\n const cssContent =\n options.sourceMaps && sourceMap\n ? `${cssText}\\n/*# sourceMappingURL=${outputFilename}.map */`\n : cssText;\n\n fs.writeFileSync(outputFilename, cssContent);\n\n if (\n options.sourceMaps &&\n sourceMap &&\n typeof cssSourceMapText !== 'undefined'\n ) {\n fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);\n }\n\n if (options.sourceRoot && options.insertCssRequires) {\n const inputFilename = path.resolve(\n options.insertCssRequires,\n path.relative(options.sourceRoot, filename)\n );\n\n const relativePath = normalize(\n path.relative(path.dirname(inputFilename), outputFilename)\n );\n\n const pathForImport = relativePath.startsWith('.')\n ? relativePath\n : `./${relativePath}`;\n\n const statement =\n options.modules === 'commonjs'\n ? `\\nrequire('${pathForImport}');`\n : `\\nimport \"${pathForImport}\";`;\n\n const normalizedInputFilename =\n resolveRequireInsertionFilename(inputFilename);\n\n const inputContent = options.transform\n ? code\n : fs.readFileSync(normalizedInputFilename, 'utf-8');\n\n if (!inputContent.trim().endsWith(statement)) {\n modifiedFiles.push({\n name: normalizedInputFilename,\n content: `${inputContent}\\n${statement}\\n`,\n });\n }\n }\n\n return true;\n }\n )\n );\n }\n\n if (options.parallel) {\n const res = await Promise.all(tasks.map((task) => task()));\n console.log(\n `Successfully extracted ${res.filter((i) => i).length} CSS files.`\n );\n } else {\n let count = 0;\n for (const task of tasks) {\n // eslint-disable-next-line no-await-in-loop\n const res = await task();\n if (res) {\n count += 1;\n }\n }\n\n console.log(`Successfully extracted ${count} CSS files.`);\n }\n\n modifiedFiles.forEach(({ name, content }) => {\n fs.writeFileSync(name, content);\n });\n\n cache.clear('all');\n modifiedFiles.length = 0;\n resolvedFiles.length = 0;\n tasks.length = 0;\n\n onDone(options.sourceRoot ?? process.cwd());\n}\n\nprocessFiles(argv._, {\n configFile: argv.config,\n debug: argv.debug,\n ignore: argv.ignore,\n insertCssRequires: argv['insert-css-requires'],\n modules: argv.modules,\n parallel: argv.parallel,\n outDir: argv['out-dir'],\n outputMetadata: argv['output-metadata'],\n sourceMaps: argv['source-maps'],\n sourceRoot: argv['source-root'],\n transform: argv.transform,\n});\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@wyw-in-js/cli",
3
- "version": "1.0.7",
3
+ "version": "1.1.0",
4
4
  "bin": {
5
5
  "wyw-in-js": "bin/wyw-in-js.js"
6
6
  },
7
7
  "dependencies": {
8
- "@wyw-in-js/shared": "1.0.5",
9
- "@wyw-in-js/transform": "1.0.7",
8
+ "@wyw-in-js/shared": "1.1.0",
9
+ "@wyw-in-js/transform": "1.1.0",
10
10
  "glob": "^10.3.10",
11
11
  "mkdirp": "^0.5.1",
12
12
  "normalize-path": "^3.0.0",
@@ -39,7 +39,8 @@
39
39
  "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
40
40
  "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
41
41
  "build:types": "tsc --project ./tsconfig.lib.json --baseUrl . --rootDir ./src",
42
- "lint": "eslint --ext .js,.ts ."
42
+ "lint": "eslint --ext .js,.ts .",
43
+ "test": "bun test src"
43
44
  },
44
45
  "types": "types/wyw-in-js.d.ts",
45
46
  "repository": {
@@ -0,0 +1,3 @@
1
+ import type { WYWTransformDiagnostic } from '@wyw-in-js/transform';
2
+ export declare const formatTransformDiagnostic: (diagnostic: WYWTransformDiagnostic) => string;
3
+ export declare const reportTransformDiagnostics: (diagnostics: WYWTransformDiagnostic[]) => void;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reportTransformDiagnostics = exports.formatTransformDiagnostic = void 0;
4
+ const formatLocation = (diagnostic) => {
5
+ if (!diagnostic.start) {
6
+ return diagnostic.filename;
7
+ }
8
+ return `${diagnostic.filename}:${diagnostic.start.line}:${diagnostic.start.column + 1}`;
9
+ };
10
+ const formatTransformDiagnostic = (diagnostic) => [
11
+ `[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`,
12
+ ` at ${formatLocation(diagnostic)} (${diagnostic.displayName})`,
13
+ ].join('\n');
14
+ exports.formatTransformDiagnostic = formatTransformDiagnostic;
15
+ const reportTransformDiagnostics = (diagnostics) => {
16
+ diagnostics.forEach((diagnostic) => {
17
+ // eslint-disable-next-line no-console
18
+ console.warn((0, exports.formatTransformDiagnostic)(diagnostic));
19
+ });
20
+ };
21
+ exports.reportTransformDiagnostics = reportTransformDiagnostics;
@@ -0,0 +1,15 @@
1
+ import type { WYWTransformResultMetadata } from '@wyw-in-js/transform';
2
+ type CreateMetadataFileOptions = {
3
+ cssFile?: string;
4
+ metadata: WYWTransformResultMetadata;
5
+ outputRoot: string;
6
+ outputFilename: string;
7
+ sourceRoot: string;
8
+ sourceFilename: string;
9
+ };
10
+ export declare function resolveMetadataFilename(outputFilename: string): string;
11
+ export declare function createMetadataFile({ metadata, outputRoot, outputFilename, sourceRoot, sourceFilename, cssFile, }: CreateMetadataFileOptions): {
12
+ content: string;
13
+ filename: string;
14
+ };
15
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveMetadataFilename = resolveMetadataFilename;
7
+ exports.createMetadataFile = createMetadataFile;
8
+ const path_1 = __importDefault(require("path"));
9
+ const normalize_path_1 = __importDefault(require("normalize-path"));
10
+ const transform_1 = require("@wyw-in-js/transform");
11
+ function resolveMetadataFilename(outputFilename) {
12
+ const extension = path_1.default.extname(outputFilename);
13
+ return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;
14
+ }
15
+ function createMetadataFile({ metadata, outputRoot, outputFilename, sourceRoot, sourceFilename, cssFile, }) {
16
+ const filename = resolveMetadataFilename(outputFilename);
17
+ return {
18
+ content: (0, transform_1.stringifyTransformManifest)((0, transform_1.createTransformManifest)(metadata, {
19
+ cssFile: cssFile
20
+ ? (0, normalize_path_1.default)(path_1.default.relative(outputRoot, cssFile))
21
+ : undefined,
22
+ source: (0, normalize_path_1.default)(path_1.default.relative(sourceRoot, sourceFilename)),
23
+ })),
24
+ filename,
25
+ };
26
+ }
@@ -15,6 +15,8 @@ const glob_1 = require("glob");
15
15
  const mkdirp_1 = __importDefault(require("mkdirp"));
16
16
  const normalize_path_1 = __importDefault(require("normalize-path"));
17
17
  const yargs_1 = __importDefault(require("yargs"));
18
+ const diagnostics_1 = require("./diagnostics");
19
+ const metadata_1 = require("./metadata");
18
20
  const modulesOptions = [
19
21
  'commonjs',
20
22
  'es2015',
@@ -56,6 +58,10 @@ const argv = yargs_1.default
56
58
  type: 'boolean',
57
59
  description: 'Run extraction in parallel',
58
60
  default: false,
61
+ })
62
+ .option('output-metadata', {
63
+ type: 'boolean',
64
+ description: 'Emit sidecar .wyw-in-js.json metadata manifests for transformed files',
59
65
  })
60
66
  .option('source-root', {
61
67
  alias: 'r',
@@ -129,17 +135,36 @@ async function processFiles(files, options) {
129
135
  outputFilename,
130
136
  pluginOptions: {
131
137
  configFile: options.configFile,
138
+ outputMetadata: options.outputMetadata,
132
139
  },
133
140
  root: options.sourceRoot,
134
141
  },
135
142
  cache,
136
143
  eventEmitter: emitter,
137
144
  };
138
- tasks.push(() => (0, transform_1.transform)(transformServices, fs_1.default.readFileSync(filename).toString(), shared_1.asyncResolveFallback).then(({ code, cssText, sourceMap, cssSourceMapText }) => {
139
- if (!cssText) {
145
+ tasks.push(() => (0, transform_1.transform)(transformServices, fs_1.default.readFileSync(filename).toString(), shared_1.asyncResolveFallback).then(({ code, cssText, diagnostics, metadata, sourceMap, cssSourceMapText, }) => {
146
+ if (diagnostics?.length) {
147
+ (0, diagnostics_1.reportTransformDiagnostics)(diagnostics);
148
+ }
149
+ const shouldWriteCss = typeof cssText === 'string' && cssText.length > 0;
150
+ if (!shouldWriteCss && !metadata) {
140
151
  return false;
141
152
  }
142
153
  mkdirp_1.default.sync(path_1.default.dirname(outputFilename));
154
+ if (metadata) {
155
+ const metadataFile = (0, metadata_1.createMetadataFile)({
156
+ cssFile: shouldWriteCss ? outputFilename : undefined,
157
+ metadata,
158
+ outputRoot: options.outDir,
159
+ outputFilename,
160
+ sourceRoot: options.sourceRoot,
161
+ sourceFilename: filename,
162
+ });
163
+ fs_1.default.writeFileSync(metadataFile.filename, metadataFile.content);
164
+ }
165
+ if (!shouldWriteCss) {
166
+ return false;
167
+ }
143
168
  const cssContent = options.sourceMaps && sourceMap
144
169
  ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */`
145
170
  : cssText;
@@ -204,6 +229,7 @@ processFiles(argv._, {
204
229
  modules: argv.modules,
205
230
  parallel: argv.parallel,
206
231
  outDir: argv['out-dir'],
232
+ outputMetadata: argv['output-metadata'],
207
233
  sourceMaps: argv['source-maps'],
208
234
  sourceRoot: argv['source-root'],
209
235
  transform: argv.transform,