@wyw-in-js/cli 1.1.0 → 2.0.0-alpha.1

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/bin/wyw-in-js.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- /* eslint-disable import/no-unresolved */
3
+ /* eslint-disable import/no-unresolved, import/extensions */
4
4
 
5
- module.exports = require('../lib/wyw-in-js');
5
+ import '../esm/wyw-in-js.js';
@@ -1,14 +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}`;
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
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
- });
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
13
  };
14
- //# sourceMappingURL=diagnostics.js.map
14
+ //# sourceMappingURL=diagnostics.js.map
@@ -1 +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":[]}
1
+ {"mappings":"AAEA,MAAM,kBAAkB,eAAuC;AAC7D,KAAI,CAAC,WAAW,OAAO;AACrB,SAAO,WAAW;;AAGpB,QAAO,GAAG,WAAW,SAAS,GAAG,WAAW,MAAM,KAAK,GACrD,WAAW,MAAM,SAAS;;AAI9B,OAAO,MAAM,6BAA6B,eACxC,CACE,eAAe,WAAW,SAAS,IAAI,WAAW,SAAS,IAAI,WAAW,WAC1E,QAAQ,eAAe,WAAW,CAAC,IAAI,WAAW,YAAY,GAC/D,CAAC,KAAK,KAAK;AAEd,OAAO,MAAM,8BACX,gBACG;AACH,aAAY,SAAS,eAAe;;AAElC,UAAQ,KAAK,0BAA0B,WAAW,CAAC;GACnD","names":[],"sources":["../src/diagnostics.ts"],"version":3,"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"],"file":"diagnostics.js"}
package/esm/metadata.js CHANGED
@@ -1,25 +1,18 @@
1
- import path from 'path';
2
- import normalize from 'normalize-path';
3
- import { createTransformManifest, stringifyTransformManifest } from '@wyw-in-js/transform';
1
+ import path from "path";
2
+ import normalize from "normalize-path";
3
+ import { createTransformManifest, stringifyTransformManifest } from "@wyw-in-js/transform";
4
4
  export function resolveMetadataFilename(outputFilename) {
5
- const extension = path.extname(outputFilename);
6
- return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;
5
+ const extension = path.extname(outputFilename);
6
+ return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;
7
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
- };
8
+ export function createMetadataFile({ metadata, outputRoot, outputFilename, sourceRoot, sourceFilename, cssFile }) {
9
+ const filename = resolveMetadataFilename(outputFilename);
10
+ return {
11
+ content: stringifyTransformManifest(createTransformManifest(metadata, {
12
+ cssFile: cssFile ? normalize(path.relative(outputRoot, cssFile)) : undefined,
13
+ source: normalize(path.relative(sourceRoot, sourceFilename))
14
+ })),
15
+ filename
16
+ };
24
17
  }
25
- //# sourceMappingURL=metadata.js.map
18
+ //# sourceMappingURL=metadata.js.map
@@ -1 +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":[]}
1
+ {"mappings":"AAAA,OAAO,UAAU;AAEjB,OAAO,eAAe;AAGtB,SACE,yBACA,kCACK;AAWP,OAAO,SAAS,wBAAwB,gBAAwB;CAC9D,MAAM,YAAY,KAAK,QAAQ,eAAe;AAC9C,QAAO,GAAG,eAAe,MAAM,GAAG,CAAC,UAAU,OAAO,CAAC;;AAGvD,OAAO,SAAS,mBAAmB,EACjC,UACA,YACA,gBACA,YACA,gBACA,WAC4B;CAC5B,MAAM,WAAW,wBAAwB,eAAe;AAExD,QAAO;EACL,SAAS,2BACP,wBAAwB,UAAU;GAChC,SAAS,UACL,UAAU,KAAK,SAAS,YAAY,QAAQ,CAAC,GAC7C;GACJ,QAAQ,UAAU,KAAK,SAAS,YAAY,eAAe,CAAC;GAC7D,CAAC,CACH;EACD;EACD","names":[],"sources":["../src/metadata.ts"],"version":3,"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"],"file":"metadata.js"}
package/esm/wyw-in-js.js CHANGED
@@ -1,211 +1,202 @@
1
1
  /* eslint-disable no-console */
2
2
  /**
3
- * This file contains a CLI for wyw-in-js.
4
- */
5
-
6
- import fs from 'fs';
7
- import path from 'path';
8
- import { asyncResolveFallback } from '@wyw-in-js/shared';
9
- import { createFileReporter, TransformCacheCollection, transform } from '@wyw-in-js/transform';
10
- import { globSync } from 'glob';
11
- import mkdirp from 'mkdirp';
12
- import normalize from 'normalize-path';
13
- import yargs from 'yargs';
14
- import { reportTransformDiagnostics } from './diagnostics';
15
- import { createMetadataFile } from './metadata';
16
- const modulesOptions = ['commonjs', 'es2015', 'es6', 'esnext', 'native'];
17
- const argv = yargs.usage('Usage: $0 [options] <files ...>').option('config', {
18
- alias: 'c',
19
- type: 'string',
20
- description: 'Path to a config file',
21
- requiresArg: true,
22
- coerce: path.resolve
23
- }).option('debug', {
24
- alias: 'd',
25
- type: 'string',
26
- description: 'Path for debug output',
27
- coerce: path.resolve
28
- }).option('out-dir', {
29
- alias: 'o',
30
- type: 'string',
31
- description: 'Output directory for the extracted CSS files',
32
- demandOption: true,
33
- requiresArg: true,
34
- coerce: path.resolve
35
- }).option('source-maps', {
36
- alias: 's',
37
- type: 'boolean',
38
- description: 'Generate source maps for the CSS files',
39
- default: false
40
- }).option('parallel', {
41
- alias: 'p',
42
- type: 'boolean',
43
- description: 'Run extraction in parallel',
44
- default: false
45
- }).option('output-metadata', {
46
- type: 'boolean',
47
- description: 'Emit sidecar .wyw-in-js.json metadata manifests for transformed files'
48
- }).option('source-root', {
49
- alias: 'r',
50
- type: 'string',
51
- description: 'Directory containing the source JS files',
52
- demandOption: true,
53
- requiresArg: true,
54
- coerce: path.resolve
55
- }).option('insert-css-requires', {
56
- alias: 'i',
57
- type: 'string',
58
- description: 'Directory containing JS files to insert require statements for the CSS files',
59
- requiresArg: true,
60
- coerce: path.resolve
61
- }).option('transform', {
62
- alias: 't',
63
- type: 'boolean',
64
- description: 'Replace template tags with evaluated values'
65
- }).option('modules', {
66
- alias: 'm',
67
- choices: modulesOptions,
68
- description: 'Specifies a type of used imports',
69
- default: 'commonjs',
70
- coerce: s => s.toLowerCase()
71
- }).implies('insert-css-requires', 'source-root').implies('transform', 'insert-css-requires').option('ignore', {
72
- alias: 'x',
73
- type: 'string',
74
- description: 'Pattern of files to ignore. Be sure to provide a string',
75
- requiresArg: true
76
- }).alias('help', 'h').alias('version', 'v').parseSync();
3
+ * This file contains a CLI for wyw-in-js.
4
+ */
5
+ import fs from "fs";
6
+ import path from "path";
7
+ import { asyncResolveFallback } from "@wyw-in-js/shared";
8
+ import { createFileReporter, TransformCacheCollection, transform } from "@wyw-in-js/transform";
9
+ import { globSync } from "glob";
10
+ import mkdirp from "mkdirp";
11
+ import normalize from "normalize-path";
12
+ import yargs from "yargs";
13
+ import { reportTransformDiagnostics } from "./diagnostics.js";
14
+ import { createMetadataFile } from "./metadata.js";
15
+ const modulesOptions = [
16
+ "commonjs",
17
+ "es2015",
18
+ "es6",
19
+ "esnext",
20
+ "native"
21
+ ];
22
+ const argv = yargs.usage("Usage: $0 [options] <files ...>").option("config", {
23
+ alias: "c",
24
+ type: "string",
25
+ description: "Path to a config file",
26
+ requiresArg: true,
27
+ coerce: path.resolve
28
+ }).option("debug", {
29
+ alias: "d",
30
+ type: "string",
31
+ description: "Path for debug output",
32
+ coerce: path.resolve
33
+ }).option("out-dir", {
34
+ alias: "o",
35
+ type: "string",
36
+ description: "Output directory for the extracted CSS files",
37
+ demandOption: true,
38
+ requiresArg: true,
39
+ coerce: path.resolve
40
+ }).option("source-maps", {
41
+ alias: "s",
42
+ type: "boolean",
43
+ description: "Generate source maps for the CSS files",
44
+ default: false
45
+ }).option("parallel", {
46
+ alias: "p",
47
+ type: "boolean",
48
+ description: "Run extraction in parallel",
49
+ default: false
50
+ }).option("output-metadata", {
51
+ type: "boolean",
52
+ description: "Emit sidecar .wyw-in-js.json metadata manifests for transformed files"
53
+ }).option("source-root", {
54
+ alias: "r",
55
+ type: "string",
56
+ description: "Directory containing the source JS files",
57
+ demandOption: true,
58
+ requiresArg: true,
59
+ coerce: path.resolve
60
+ }).option("insert-css-requires", {
61
+ alias: "i",
62
+ type: "string",
63
+ description: "Directory containing JS files to insert require statements for the CSS files",
64
+ requiresArg: true,
65
+ coerce: path.resolve
66
+ }).option("transform", {
67
+ alias: "t",
68
+ type: "boolean",
69
+ description: "Replace template tags with evaluated values"
70
+ }).option("modules", {
71
+ alias: "m",
72
+ choices: modulesOptions,
73
+ description: "Specifies a type of used imports",
74
+ default: "commonjs",
75
+ coerce: (s) => s.toLowerCase()
76
+ }).implies("insert-css-requires", "source-root").implies("transform", "insert-css-requires").option("ignore", {
77
+ alias: "x",
78
+ type: "string",
79
+ description: "Pattern of files to ignore. Be sure to provide a string",
80
+ requiresArg: true
81
+ }).alias("help", "h").alias("version", "v").parseSync();
77
82
  function resolveRequireInsertionFilename(filename) {
78
- return filename.replace(/\.tsx?/, '.js');
83
+ return filename.replace(/\.tsx?/, ".js");
79
84
  }
80
85
  function resolveOutputFilename(filename, outDir, sourceRoot) {
81
- const outputFolder = path.relative(sourceRoot, path.dirname(filename));
82
- const outputBasename = path.basename(filename).replace(path.extname(filename), '.css');
83
- return path.join(outDir, outputFolder, outputBasename);
86
+ const outputFolder = path.relative(sourceRoot, path.dirname(filename));
87
+ const outputBasename = path.basename(filename).replace(path.extname(filename), ".css");
88
+ return path.join(outDir, outputFolder, outputBasename);
84
89
  }
85
90
  async function processFiles(files, options) {
86
- const {
87
- emitter,
88
- onDone
89
- } = createFileReporter(options.debug ? {
90
- dir: options.debug,
91
- print: true
92
- } : false);
93
- const resolvedFiles = files.reduce((acc, pattern) => [...acc, ...globSync(pattern.toString(), {
94
- absolute: true,
95
- ignore: options.ignore
96
- })], []);
97
- const cache = new TransformCacheCollection();
98
- const modifiedFiles = [];
99
- const tasks = [];
100
-
101
- // eslint-disable-next-line no-restricted-syntax
102
- for (const filename of resolvedFiles) {
103
- if (fs.lstatSync(filename).isDirectory()) {
104
- return;
105
- }
106
- const outputFilename = resolveOutputFilename(filename, options.outDir, options.sourceRoot);
107
- const transformServices = {
108
- options: {
109
- filename,
110
- outputFilename,
111
- pluginOptions: {
112
- configFile: options.configFile,
113
- outputMetadata: options.outputMetadata
114
- },
115
- root: options.sourceRoot
116
- },
117
- cache,
118
- eventEmitter: emitter
119
- };
120
- tasks.push(() => transform(transformServices, fs.readFileSync(filename).toString(), asyncResolveFallback).then(({
121
- code,
122
- cssText,
123
- diagnostics,
124
- metadata,
125
- sourceMap,
126
- cssSourceMapText
127
- }) => {
128
- if (diagnostics?.length) {
129
- reportTransformDiagnostics(diagnostics);
130
- }
131
- const shouldWriteCss = typeof cssText === 'string' && cssText.length > 0;
132
- if (!shouldWriteCss && !metadata) {
133
- return false;
134
- }
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
- }
150
- const cssContent = options.sourceMaps && sourceMap ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */` : cssText;
151
- fs.writeFileSync(outputFilename, cssContent);
152
- if (options.sourceMaps && sourceMap && typeof cssSourceMapText !== 'undefined') {
153
- fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);
154
- }
155
- if (options.sourceRoot && options.insertCssRequires) {
156
- const inputFilename = path.resolve(options.insertCssRequires, path.relative(options.sourceRoot, filename));
157
- const relativePath = normalize(path.relative(path.dirname(inputFilename), outputFilename));
158
- const pathForImport = relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
159
- const statement = options.modules === 'commonjs' ? `\nrequire('${pathForImport}');` : `\nimport "${pathForImport}";`;
160
- const normalizedInputFilename = resolveRequireInsertionFilename(inputFilename);
161
- const inputContent = options.transform ? code : fs.readFileSync(normalizedInputFilename, 'utf-8');
162
- if (!inputContent.trim().endsWith(statement)) {
163
- modifiedFiles.push({
164
- name: normalizedInputFilename,
165
- content: `${inputContent}\n${statement}\n`
166
- });
167
- }
168
- }
169
- return true;
170
- }));
171
- }
172
- if (options.parallel) {
173
- const res = await Promise.all(tasks.map(task => task()));
174
- console.log(`Successfully extracted ${res.filter(i => i).length} CSS files.`);
175
- } else {
176
- let count = 0;
177
- for (const task of tasks) {
178
- // eslint-disable-next-line no-await-in-loop
179
- const res = await task();
180
- if (res) {
181
- count += 1;
182
- }
183
- }
184
- console.log(`Successfully extracted ${count} CSS files.`);
185
- }
186
- modifiedFiles.forEach(({
187
- name,
188
- content
189
- }) => {
190
- fs.writeFileSync(name, content);
191
- });
192
- cache.clear('all');
193
- modifiedFiles.length = 0;
194
- resolvedFiles.length = 0;
195
- tasks.length = 0;
196
- onDone(options.sourceRoot ?? process.cwd());
91
+ const { emitter, onDone } = createFileReporter(options.debug ? {
92
+ dir: options.debug,
93
+ print: true
94
+ } : false);
95
+ const resolvedFiles = files.reduce((acc, pattern) => [...acc, ...globSync(pattern.toString(), {
96
+ absolute: true,
97
+ ignore: options.ignore
98
+ })], []);
99
+ const cache = new TransformCacheCollection();
100
+ const modifiedFiles = [];
101
+ const tasks = [];
102
+ // eslint-disable-next-line no-restricted-syntax
103
+ for (const filename of resolvedFiles) {
104
+ if (fs.lstatSync(filename).isDirectory()) {
105
+ return;
106
+ }
107
+ const outputFilename = resolveOutputFilename(filename, options.outDir, options.sourceRoot);
108
+ const transformServices = {
109
+ options: {
110
+ filename,
111
+ outputFilename,
112
+ pluginOptions: {
113
+ configFile: options.configFile,
114
+ outputMetadata: options.outputMetadata
115
+ },
116
+ root: options.sourceRoot
117
+ },
118
+ cache,
119
+ eventEmitter: emitter
120
+ };
121
+ tasks.push(() => transform(transformServices, fs.readFileSync(filename).toString(), asyncResolveFallback).then(({ code, cssText, diagnostics, metadata, sourceMap, cssSourceMapText }) => {
122
+ if (diagnostics?.length) {
123
+ reportTransformDiagnostics(diagnostics);
124
+ }
125
+ const shouldWriteCss = typeof cssText === "string" && cssText.length > 0;
126
+ if (!shouldWriteCss && !metadata) {
127
+ return false;
128
+ }
129
+ mkdirp.sync(path.dirname(outputFilename));
130
+ if (metadata) {
131
+ const metadataFile = createMetadataFile({
132
+ cssFile: shouldWriteCss ? outputFilename : undefined,
133
+ metadata,
134
+ outputRoot: options.outDir,
135
+ outputFilename,
136
+ sourceRoot: options.sourceRoot,
137
+ sourceFilename: filename
138
+ });
139
+ fs.writeFileSync(metadataFile.filename, metadataFile.content);
140
+ }
141
+ if (!shouldWriteCss) {
142
+ return false;
143
+ }
144
+ const cssContent = options.sourceMaps && sourceMap ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */` : cssText;
145
+ fs.writeFileSync(outputFilename, cssContent);
146
+ if (options.sourceMaps && sourceMap && typeof cssSourceMapText !== "undefined") {
147
+ fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);
148
+ }
149
+ if (options.sourceRoot && options.insertCssRequires) {
150
+ const inputFilename = path.resolve(options.insertCssRequires, path.relative(options.sourceRoot, filename));
151
+ const relativePath = normalize(path.relative(path.dirname(inputFilename), outputFilename));
152
+ const pathForImport = relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
153
+ const statement = options.modules === "commonjs" ? `\nrequire('${pathForImport}');` : `\nimport "${pathForImport}";`;
154
+ const normalizedInputFilename = resolveRequireInsertionFilename(inputFilename);
155
+ const inputContent = options.transform ? code : fs.readFileSync(normalizedInputFilename, "utf-8");
156
+ if (!inputContent.trim().endsWith(statement)) {
157
+ modifiedFiles.push({
158
+ name: normalizedInputFilename,
159
+ content: `${inputContent}\n${statement}\n`
160
+ });
161
+ }
162
+ }
163
+ return true;
164
+ }));
165
+ }
166
+ if (options.parallel) {
167
+ const res = await Promise.all(tasks.map((task) => task()));
168
+ console.log(`Successfully extracted ${res.filter((i) => i).length} CSS files.`);
169
+ } else {
170
+ let count = 0;
171
+ for (const task of tasks) {
172
+ // eslint-disable-next-line no-await-in-loop
173
+ const res = await task();
174
+ if (res) {
175
+ count += 1;
176
+ }
177
+ }
178
+ console.log(`Successfully extracted ${count} CSS files.`);
179
+ }
180
+ modifiedFiles.forEach(({ name, content }) => {
181
+ fs.writeFileSync(name, content);
182
+ });
183
+ cache.clear("all");
184
+ modifiedFiles.length = 0;
185
+ resolvedFiles.length = 0;
186
+ tasks.length = 0;
187
+ onDone(options.sourceRoot ?? process.cwd());
197
188
  }
198
189
  processFiles(argv._, {
199
- configFile: argv.config,
200
- debug: argv.debug,
201
- ignore: argv.ignore,
202
- insertCssRequires: argv['insert-css-requires'],
203
- modules: argv.modules,
204
- parallel: argv.parallel,
205
- outDir: argv['out-dir'],
206
- outputMetadata: argv['output-metadata'],
207
- sourceMaps: argv['source-maps'],
208
- sourceRoot: argv['source-root'],
209
- transform: argv.transform
190
+ configFile: argv.config,
191
+ debug: argv.debug,
192
+ ignore: argv.ignore,
193
+ insertCssRequires: argv["insert-css-requires"],
194
+ modules: argv.modules,
195
+ parallel: argv.parallel,
196
+ outDir: argv["out-dir"],
197
+ outputMetadata: argv["output-metadata"],
198
+ sourceMaps: argv["source-maps"],
199
+ sourceRoot: argv["source-root"],
200
+ transform: argv.transform
210
201
  });
211
- //# sourceMappingURL=wyw-in-js.js.map
202
+ //# sourceMappingURL=wyw-in-js.js.map
@@ -1 +1 @@
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":[]}
1
+ {"mappings":"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","names":[],"sources":["../src/wyw-in-js.ts"],"version":3,"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"],"file":"wyw-in-js.js"}
package/package.json CHANGED
@@ -1,43 +1,47 @@
1
1
  {
2
2
  "name": "@wyw-in-js/cli",
3
- "version": "1.1.0",
3
+ "version": "2.0.0-alpha.1",
4
+ "type": "module",
4
5
  "bin": {
5
6
  "wyw-in-js": "bin/wyw-in-js.js"
6
7
  },
7
8
  "dependencies": {
8
- "@wyw-in-js/shared": "1.1.0",
9
- "@wyw-in-js/transform": "1.1.0",
9
+ "@wyw-in-js/shared": "2.0.0-alpha.1",
10
+ "@wyw-in-js/transform": "2.0.0-alpha.1",
10
11
  "glob": "^10.3.10",
11
12
  "mkdirp": "^0.5.1",
12
13
  "normalize-path": "^3.0.0",
13
14
  "yargs": "^17.5.0"
14
15
  },
15
16
  "devDependencies": {
16
- "@babel/core": "^7.23.5",
17
17
  "@types/mkdirp": "^0.5.2",
18
18
  "@types/normalize-path": "^3.0.0",
19
19
  "@types/yargs": "^17.0.10",
20
- "@wyw-in-js/babel-config": "workspace:*",
21
20
  "@wyw-in-js/eslint-config": "workspace:*",
22
21
  "@wyw-in-js/ts-config": "workspace:*"
23
22
  },
24
23
  "engines": {
25
- "node": ">=20.0.0"
24
+ "node": ">=22.0.0"
25
+ },
26
+ "exports": {
27
+ ".": {
28
+ "types": "./types/wyw-in-js.d.ts",
29
+ "default": "./esm/wyw-in-js.js"
30
+ }
26
31
  },
27
32
  "files": [
33
+ "bin/",
28
34
  "esm/",
29
- "lib/",
30
35
  "types/"
31
36
  ],
32
37
  "license": "MIT",
33
- "main": "lib/wyw-in-js.js",
38
+ "main": "esm/wyw-in-js.js",
34
39
  "module": "esm/wyw-in-js.js",
35
40
  "publishConfig": {
36
41
  "access": "public"
37
42
  },
38
43
  "scripts": {
39
- "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
40
- "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
44
+ "build:esm": "node ../../scripts/build-esm-oxc.mjs",
41
45
  "build:types": "tsc --project ./tsconfig.lib.json --baseUrl . --rootDir ./src",
42
46
  "lint": "eslint --ext .js,.ts .",
43
47
  "test": "bun test src"
@@ -1,21 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reportTransformDiagnostics = exports.formatTransformDiagnostic = void 0;
4
1
  const formatLocation = (diagnostic) => {
5
2
  if (!diagnostic.start) {
6
3
  return diagnostic.filename;
7
4
  }
8
5
  return `${diagnostic.filename}:${diagnostic.start.line}:${diagnostic.start.column + 1}`;
9
6
  };
10
- const formatTransformDiagnostic = (diagnostic) => [
7
+ export const formatTransformDiagnostic = (diagnostic) => [
11
8
  `[wyw-in-js] ${diagnostic.severity} [${diagnostic.category}] ${diagnostic.message}`,
12
9
  ` at ${formatLocation(diagnostic)} (${diagnostic.displayName})`,
13
10
  ].join('\n');
14
- exports.formatTransformDiagnostic = formatTransformDiagnostic;
15
- const reportTransformDiagnostics = (diagnostics) => {
11
+ export const reportTransformDiagnostics = (diagnostics) => {
16
12
  diagnostics.forEach((diagnostic) => {
17
13
  // eslint-disable-next-line no-console
18
- console.warn((0, exports.formatTransformDiagnostic)(diagnostic));
14
+ console.warn(formatTransformDiagnostic(diagnostic));
19
15
  });
20
16
  };
21
- exports.reportTransformDiagnostics = reportTransformDiagnostics;
package/types/metadata.js CHANGED
@@ -1,25 +1,18 @@
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);
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);
13
6
  return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;
14
7
  }
15
- function createMetadataFile({ metadata, outputRoot, outputFilename, sourceRoot, sourceFilename, cssFile, }) {
8
+ export function createMetadataFile({ metadata, outputRoot, outputFilename, sourceRoot, sourceFilename, cssFile, }) {
16
9
  const filename = resolveMetadataFilename(outputFilename);
17
10
  return {
18
- content: (0, transform_1.stringifyTransformManifest)((0, transform_1.createTransformManifest)(metadata, {
11
+ content: stringifyTransformManifest(createTransformManifest(metadata, {
19
12
  cssFile: cssFile
20
- ? (0, normalize_path_1.default)(path_1.default.relative(outputRoot, cssFile))
13
+ ? normalize(path.relative(outputRoot, cssFile))
21
14
  : undefined,
22
- source: (0, normalize_path_1.default)(path_1.default.relative(sourceRoot, sourceFilename)),
15
+ source: normalize(path.relative(sourceRoot, sourceFilename)),
23
16
  })),
24
17
  filename,
25
18
  };
@@ -1,22 +1,17 @@
1
- "use strict";
2
1
  /* eslint-disable no-console */
3
2
  /**
4
3
  * This file contains a CLI for wyw-in-js.
5
4
  */
6
- var __importDefault = (this && this.__importDefault) || function (mod) {
7
- return (mod && mod.__esModule) ? mod : { "default": mod };
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- const fs_1 = __importDefault(require("fs"));
11
- const path_1 = __importDefault(require("path"));
12
- const shared_1 = require("@wyw-in-js/shared");
13
- const transform_1 = require("@wyw-in-js/transform");
14
- const glob_1 = require("glob");
15
- const mkdirp_1 = __importDefault(require("mkdirp"));
16
- const normalize_path_1 = __importDefault(require("normalize-path"));
17
- const yargs_1 = __importDefault(require("yargs"));
18
- const diagnostics_1 = require("./diagnostics");
19
- const metadata_1 = require("./metadata");
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+ import { asyncResolveFallback } from '@wyw-in-js/shared';
8
+ import { createFileReporter, TransformCacheCollection, transform, } from '@wyw-in-js/transform';
9
+ import { globSync } from 'glob';
10
+ import mkdirp from 'mkdirp';
11
+ import normalize from 'normalize-path';
12
+ import yargs from 'yargs';
13
+ import { reportTransformDiagnostics } from './diagnostics';
14
+ import { createMetadataFile } from './metadata';
20
15
  const modulesOptions = [
21
16
  'commonjs',
22
17
  'es2015',
@@ -24,20 +19,20 @@ const modulesOptions = [
24
19
  'esnext',
25
20
  'native',
26
21
  ];
27
- const argv = yargs_1.default
22
+ const argv = yargs
28
23
  .usage('Usage: $0 [options] <files ...>')
29
24
  .option('config', {
30
25
  alias: 'c',
31
26
  type: 'string',
32
27
  description: 'Path to a config file',
33
28
  requiresArg: true,
34
- coerce: path_1.default.resolve,
29
+ coerce: path.resolve,
35
30
  })
36
31
  .option('debug', {
37
32
  alias: 'd',
38
33
  type: 'string',
39
34
  description: 'Path for debug output',
40
- coerce: path_1.default.resolve,
35
+ coerce: path.resolve,
41
36
  })
42
37
  .option('out-dir', {
43
38
  alias: 'o',
@@ -45,7 +40,7 @@ const argv = yargs_1.default
45
40
  description: 'Output directory for the extracted CSS files',
46
41
  demandOption: true,
47
42
  requiresArg: true,
48
- coerce: path_1.default.resolve,
43
+ coerce: path.resolve,
49
44
  })
50
45
  .option('source-maps', {
51
46
  alias: 's',
@@ -69,14 +64,14 @@ const argv = yargs_1.default
69
64
  description: 'Directory containing the source JS files',
70
65
  demandOption: true,
71
66
  requiresArg: true,
72
- coerce: path_1.default.resolve,
67
+ coerce: path.resolve,
73
68
  })
74
69
  .option('insert-css-requires', {
75
70
  alias: 'i',
76
71
  type: 'string',
77
72
  description: 'Directory containing JS files to insert require statements for the CSS files',
78
73
  requiresArg: true,
79
- coerce: path_1.default.resolve,
74
+ coerce: path.resolve,
80
75
  })
81
76
  .option('transform', {
82
77
  alias: 't',
@@ -105,27 +100,27 @@ function resolveRequireInsertionFilename(filename) {
105
100
  return filename.replace(/\.tsx?/, '.js');
106
101
  }
107
102
  function resolveOutputFilename(filename, outDir, sourceRoot) {
108
- const outputFolder = path_1.default.relative(sourceRoot, path_1.default.dirname(filename));
109
- const outputBasename = path_1.default
103
+ const outputFolder = path.relative(sourceRoot, path.dirname(filename));
104
+ const outputBasename = path
110
105
  .basename(filename)
111
- .replace(path_1.default.extname(filename), '.css');
112
- return path_1.default.join(outDir, outputFolder, outputBasename);
106
+ .replace(path.extname(filename), '.css');
107
+ return path.join(outDir, outputFolder, outputBasename);
113
108
  }
114
109
  async function processFiles(files, options) {
115
- const { emitter, onDone } = (0, transform_1.createFileReporter)(options.debug ? { dir: options.debug, print: true } : false);
110
+ const { emitter, onDone } = createFileReporter(options.debug ? { dir: options.debug, print: true } : false);
116
111
  const resolvedFiles = files.reduce((acc, pattern) => [
117
112
  ...acc,
118
- ...(0, glob_1.globSync)(pattern.toString(), {
113
+ ...globSync(pattern.toString(), {
119
114
  absolute: true,
120
115
  ignore: options.ignore,
121
116
  }),
122
117
  ], []);
123
- const cache = new transform_1.TransformCacheCollection();
118
+ const cache = new TransformCacheCollection();
124
119
  const modifiedFiles = [];
125
120
  const tasks = [];
126
121
  // eslint-disable-next-line no-restricted-syntax
127
122
  for (const filename of resolvedFiles) {
128
- if (fs_1.default.lstatSync(filename).isDirectory()) {
123
+ if (fs.lstatSync(filename).isDirectory()) {
129
124
  return;
130
125
  }
131
126
  const outputFilename = resolveOutputFilename(filename, options.outDir, options.sourceRoot);
@@ -142,17 +137,17 @@ async function processFiles(files, options) {
142
137
  cache,
143
138
  eventEmitter: emitter,
144
139
  };
145
- tasks.push(() => (0, transform_1.transform)(transformServices, fs_1.default.readFileSync(filename).toString(), shared_1.asyncResolveFallback).then(({ code, cssText, diagnostics, metadata, sourceMap, cssSourceMapText, }) => {
140
+ tasks.push(() => transform(transformServices, fs.readFileSync(filename).toString(), asyncResolveFallback).then(({ code, cssText, diagnostics, metadata, sourceMap, cssSourceMapText, }) => {
146
141
  if (diagnostics?.length) {
147
- (0, diagnostics_1.reportTransformDiagnostics)(diagnostics);
142
+ reportTransformDiagnostics(diagnostics);
148
143
  }
149
144
  const shouldWriteCss = typeof cssText === 'string' && cssText.length > 0;
150
145
  if (!shouldWriteCss && !metadata) {
151
146
  return false;
152
147
  }
153
- mkdirp_1.default.sync(path_1.default.dirname(outputFilename));
148
+ mkdirp.sync(path.dirname(outputFilename));
154
149
  if (metadata) {
155
- const metadataFile = (0, metadata_1.createMetadataFile)({
150
+ const metadataFile = createMetadataFile({
156
151
  cssFile: shouldWriteCss ? outputFilename : undefined,
157
152
  metadata,
158
153
  outputRoot: options.outDir,
@@ -160,7 +155,7 @@ async function processFiles(files, options) {
160
155
  sourceRoot: options.sourceRoot,
161
156
  sourceFilename: filename,
162
157
  });
163
- fs_1.default.writeFileSync(metadataFile.filename, metadataFile.content);
158
+ fs.writeFileSync(metadataFile.filename, metadataFile.content);
164
159
  }
165
160
  if (!shouldWriteCss) {
166
161
  return false;
@@ -168,15 +163,15 @@ async function processFiles(files, options) {
168
163
  const cssContent = options.sourceMaps && sourceMap
169
164
  ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */`
170
165
  : cssText;
171
- fs_1.default.writeFileSync(outputFilename, cssContent);
166
+ fs.writeFileSync(outputFilename, cssContent);
172
167
  if (options.sourceMaps &&
173
168
  sourceMap &&
174
169
  typeof cssSourceMapText !== 'undefined') {
175
- fs_1.default.writeFileSync(`${outputFilename}.map`, cssSourceMapText);
170
+ fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);
176
171
  }
177
172
  if (options.sourceRoot && options.insertCssRequires) {
178
- const inputFilename = path_1.default.resolve(options.insertCssRequires, path_1.default.relative(options.sourceRoot, filename));
179
- const relativePath = (0, normalize_path_1.default)(path_1.default.relative(path_1.default.dirname(inputFilename), outputFilename));
173
+ const inputFilename = path.resolve(options.insertCssRequires, path.relative(options.sourceRoot, filename));
174
+ const relativePath = normalize(path.relative(path.dirname(inputFilename), outputFilename));
180
175
  const pathForImport = relativePath.startsWith('.')
181
176
  ? relativePath
182
177
  : `./${relativePath}`;
@@ -186,7 +181,7 @@ async function processFiles(files, options) {
186
181
  const normalizedInputFilename = resolveRequireInsertionFilename(inputFilename);
187
182
  const inputContent = options.transform
188
183
  ? code
189
- : fs_1.default.readFileSync(normalizedInputFilename, 'utf-8');
184
+ : fs.readFileSync(normalizedInputFilename, 'utf-8');
190
185
  if (!inputContent.trim().endsWith(statement)) {
191
186
  modifiedFiles.push({
192
187
  name: normalizedInputFilename,
@@ -213,7 +208,7 @@ async function processFiles(files, options) {
213
208
  console.log(`Successfully extracted ${count} CSS files.`);
214
209
  }
215
210
  modifiedFiles.forEach(({ name, content }) => {
216
- fs_1.default.writeFileSync(name, content);
211
+ fs.writeFileSync(name, content);
217
212
  });
218
213
  cache.clear('all');
219
214
  modifiedFiles.length = 0;
@@ -1,22 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,33 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,215 +0,0 @@
1
- "use strict";
2
-
3
- var _fs = _interopRequireDefault(require("fs"));
4
- var _path = _interopRequireDefault(require("path"));
5
- var _shared = require("@wyw-in-js/shared");
6
- var _transform = require("@wyw-in-js/transform");
7
- var _glob = require("glob");
8
- var _mkdirp = _interopRequireDefault(require("mkdirp"));
9
- var _normalizePath = _interopRequireDefault(require("normalize-path"));
10
- var _yargs = _interopRequireDefault(require("yargs"));
11
- var _diagnostics = require("./diagnostics");
12
- var _metadata = require("./metadata");
13
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
- /* eslint-disable no-console */
15
- /**
16
- * This file contains a CLI for wyw-in-js.
17
- */
18
-
19
- const modulesOptions = ['commonjs', 'es2015', 'es6', 'esnext', 'native'];
20
- const argv = _yargs.default.usage('Usage: $0 [options] <files ...>').option('config', {
21
- alias: 'c',
22
- type: 'string',
23
- description: 'Path to a config file',
24
- requiresArg: true,
25
- coerce: _path.default.resolve
26
- }).option('debug', {
27
- alias: 'd',
28
- type: 'string',
29
- description: 'Path for debug output',
30
- coerce: _path.default.resolve
31
- }).option('out-dir', {
32
- alias: 'o',
33
- type: 'string',
34
- description: 'Output directory for the extracted CSS files',
35
- demandOption: true,
36
- requiresArg: true,
37
- coerce: _path.default.resolve
38
- }).option('source-maps', {
39
- alias: 's',
40
- type: 'boolean',
41
- description: 'Generate source maps for the CSS files',
42
- default: false
43
- }).option('parallel', {
44
- alias: 'p',
45
- type: 'boolean',
46
- description: 'Run extraction in parallel',
47
- default: false
48
- }).option('output-metadata', {
49
- type: 'boolean',
50
- description: 'Emit sidecar .wyw-in-js.json metadata manifests for transformed files'
51
- }).option('source-root', {
52
- alias: 'r',
53
- type: 'string',
54
- description: 'Directory containing the source JS files',
55
- demandOption: true,
56
- requiresArg: true,
57
- coerce: _path.default.resolve
58
- }).option('insert-css-requires', {
59
- alias: 'i',
60
- type: 'string',
61
- description: 'Directory containing JS files to insert require statements for the CSS files',
62
- requiresArg: true,
63
- coerce: _path.default.resolve
64
- }).option('transform', {
65
- alias: 't',
66
- type: 'boolean',
67
- description: 'Replace template tags with evaluated values'
68
- }).option('modules', {
69
- alias: 'm',
70
- choices: modulesOptions,
71
- description: 'Specifies a type of used imports',
72
- default: 'commonjs',
73
- coerce: s => s.toLowerCase()
74
- }).implies('insert-css-requires', 'source-root').implies('transform', 'insert-css-requires').option('ignore', {
75
- alias: 'x',
76
- type: 'string',
77
- description: 'Pattern of files to ignore. Be sure to provide a string',
78
- requiresArg: true
79
- }).alias('help', 'h').alias('version', 'v').parseSync();
80
- function resolveRequireInsertionFilename(filename) {
81
- return filename.replace(/\.tsx?/, '.js');
82
- }
83
- function resolveOutputFilename(filename, outDir, sourceRoot) {
84
- const outputFolder = _path.default.relative(sourceRoot, _path.default.dirname(filename));
85
- const outputBasename = _path.default.basename(filename).replace(_path.default.extname(filename), '.css');
86
- return _path.default.join(outDir, outputFolder, outputBasename);
87
- }
88
- async function processFiles(files, options) {
89
- var _options$sourceRoot;
90
- const {
91
- emitter,
92
- onDone
93
- } = (0, _transform.createFileReporter)(options.debug ? {
94
- dir: options.debug,
95
- print: true
96
- } : false);
97
- const resolvedFiles = files.reduce((acc, pattern) => [...acc, ...(0, _glob.globSync)(pattern.toString(), {
98
- absolute: true,
99
- ignore: options.ignore
100
- })], []);
101
- const cache = new _transform.TransformCacheCollection();
102
- const modifiedFiles = [];
103
- const tasks = [];
104
-
105
- // eslint-disable-next-line no-restricted-syntax
106
- for (const filename of resolvedFiles) {
107
- if (_fs.default.lstatSync(filename).isDirectory()) {
108
- return;
109
- }
110
- const outputFilename = resolveOutputFilename(filename, options.outDir, options.sourceRoot);
111
- const transformServices = {
112
- options: {
113
- filename,
114
- outputFilename,
115
- pluginOptions: {
116
- configFile: options.configFile,
117
- outputMetadata: options.outputMetadata
118
- },
119
- root: options.sourceRoot
120
- },
121
- cache,
122
- eventEmitter: emitter
123
- };
124
- tasks.push(() => (0, _transform.transform)(transformServices, _fs.default.readFileSync(filename).toString(), _shared.asyncResolveFallback).then(({
125
- code,
126
- cssText,
127
- diagnostics,
128
- metadata,
129
- sourceMap,
130
- cssSourceMapText
131
- }) => {
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) {
137
- return false;
138
- }
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
- }
154
- const cssContent = options.sourceMaps && sourceMap ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */` : cssText;
155
- _fs.default.writeFileSync(outputFilename, cssContent);
156
- if (options.sourceMaps && sourceMap && typeof cssSourceMapText !== 'undefined') {
157
- _fs.default.writeFileSync(`${outputFilename}.map`, cssSourceMapText);
158
- }
159
- if (options.sourceRoot && options.insertCssRequires) {
160
- const inputFilename = _path.default.resolve(options.insertCssRequires, _path.default.relative(options.sourceRoot, filename));
161
- const relativePath = (0, _normalizePath.default)(_path.default.relative(_path.default.dirname(inputFilename), outputFilename));
162
- const pathForImport = relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
163
- const statement = options.modules === 'commonjs' ? `\nrequire('${pathForImport}');` : `\nimport "${pathForImport}";`;
164
- const normalizedInputFilename = resolveRequireInsertionFilename(inputFilename);
165
- const inputContent = options.transform ? code : _fs.default.readFileSync(normalizedInputFilename, 'utf-8');
166
- if (!inputContent.trim().endsWith(statement)) {
167
- modifiedFiles.push({
168
- name: normalizedInputFilename,
169
- content: `${inputContent}\n${statement}\n`
170
- });
171
- }
172
- }
173
- return true;
174
- }));
175
- }
176
- if (options.parallel) {
177
- const res = await Promise.all(tasks.map(task => task()));
178
- console.log(`Successfully extracted ${res.filter(i => i).length} CSS files.`);
179
- } else {
180
- let count = 0;
181
- for (const task of tasks) {
182
- // eslint-disable-next-line no-await-in-loop
183
- const res = await task();
184
- if (res) {
185
- count += 1;
186
- }
187
- }
188
- console.log(`Successfully extracted ${count} CSS files.`);
189
- }
190
- modifiedFiles.forEach(({
191
- name,
192
- content
193
- }) => {
194
- _fs.default.writeFileSync(name, content);
195
- });
196
- cache.clear('all');
197
- modifiedFiles.length = 0;
198
- resolvedFiles.length = 0;
199
- tasks.length = 0;
200
- onDone((_options$sourceRoot = options.sourceRoot) !== null && _options$sourceRoot !== void 0 ? _options$sourceRoot : process.cwd());
201
- }
202
- processFiles(argv._, {
203
- configFile: argv.config,
204
- debug: argv.debug,
205
- ignore: argv.ignore,
206
- insertCssRequires: argv['insert-css-requires'],
207
- modules: argv.modules,
208
- parallel: argv.parallel,
209
- outDir: argv['out-dir'],
210
- outputMetadata: argv['output-metadata'],
211
- sourceMaps: argv['source-maps'],
212
- sourceRoot: argv['source-root'],
213
- transform: argv.transform
214
- });
215
- //# sourceMappingURL=wyw-in-js.js.map
@@ -1 +0,0 @@
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":[]}