@wyw-in-js/cli 1.0.8 → 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.
- package/esm/diagnostics.js +14 -0
- package/esm/diagnostics.js.map +1 -0
- package/esm/metadata.js +25 -0
- package/esm/metadata.js.map +1 -0
- package/esm/wyw-in-js.js +29 -2
- package/esm/wyw-in-js.js.map +1 -1
- package/lib/diagnostics.js +22 -0
- package/lib/diagnostics.js.map +1 -0
- package/lib/metadata.js +33 -0
- package/lib/metadata.js.map +1 -0
- package/lib/wyw-in-js.js +29 -2
- package/lib/wyw-in-js.js.map +1 -1
- package/package.json +5 -4
- package/types/diagnostics.d.ts +3 -0
- package/types/diagnostics.js +21 -0
- package/types/metadata.d.ts +15 -0
- package/types/metadata.js +26 -0
- package/types/wyw-in-js.js +28 -2
|
@@ -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":[]}
|
package/esm/metadata.js
ADDED
|
@@ -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 (
|
|
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
|
package/esm/wyw-in-js.js.map
CHANGED
|
@@ -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":"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","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":[]}
|
package/lib/metadata.js
ADDED
|
@@ -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 (
|
|
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
|
package/lib/wyw-in-js.js.map
CHANGED
|
@@ -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
|
|
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
|
|
9
|
-
"@wyw-in-js/transform": "1.0
|
|
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,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
|
+
}
|
package/types/wyw-in-js.js
CHANGED
|
@@ -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 (
|
|
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,
|