@wyw-in-js/cli 1.1.0 → 2.0.0-alpha.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/bin/wyw-in-js.js +2 -2
- package/esm/diagnostics.js +12 -12
- package/esm/diagnostics.js.map +1 -1
- package/esm/metadata.js +15 -22
- package/esm/metadata.js.map +1 -1
- package/esm/wyw-in-js.js +192 -201
- package/esm/wyw-in-js.js.map +1 -1
- package/package.json +14 -10
- package/types/diagnostics.js +3 -8
- package/types/metadata.js +9 -16
- package/types/wyw-in-js.js +35 -40
- package/lib/diagnostics.js +0 -22
- package/lib/diagnostics.js.map +0 -1
- package/lib/metadata.js +0 -33
- package/lib/metadata.js.map +0 -1
- package/lib/wyw-in-js.js +0 -215
- package/lib/wyw-in-js.js.map +0 -1
package/bin/wyw-in-js.js
CHANGED
package/esm/diagnostics.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
const formatLocation = diagnostic => {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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(
|
|
8
|
-
export const reportTransformDiagnostics = diagnostics => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
package/esm/diagnostics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
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
|
|
2
|
-
import normalize from
|
|
3
|
-
import { createTransformManifest, stringifyTransformManifest } from
|
|
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
|
-
|
|
6
|
-
|
|
5
|
+
const extension = path.extname(outputFilename);
|
|
6
|
+
return `${outputFilename.slice(0, -extension.length)}.wyw-in-js.json`;
|
|
7
7
|
}
|
|
8
|
-
export function createMetadataFile({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
package/esm/metadata.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}).option(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}).option(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}).option(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}).
|
|
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
|
-
|
|
83
|
+
return filename.replace(/\.tsx?/, ".js");
|
|
79
84
|
}
|
|
80
85
|
function resolveOutputFilename(filename, outDir, sourceRoot) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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
|
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","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": "
|
|
3
|
+
"version": "2.0.0-alpha.0",
|
|
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": "
|
|
9
|
-
"@wyw-in-js/transform": "
|
|
9
|
+
"@wyw-in-js/shared": "2.0.0-alpha.0",
|
|
10
|
+
"@wyw-in-js/transform": "2.0.0-alpha.0",
|
|
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": ">=
|
|
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": "
|
|
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": "
|
|
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"
|
package/types/diagnostics.js
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
14
|
+
console.warn(formatTransformDiagnostic(diagnostic));
|
|
19
15
|
});
|
|
20
16
|
};
|
|
21
|
-
exports.reportTransformDiagnostics = reportTransformDiagnostics;
|
package/types/metadata.js
CHANGED
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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:
|
|
11
|
+
content: stringifyTransformManifest(createTransformManifest(metadata, {
|
|
19
12
|
cssFile: cssFile
|
|
20
|
-
? (
|
|
13
|
+
? normalize(path.relative(outputRoot, cssFile))
|
|
21
14
|
: undefined,
|
|
22
|
-
source: (
|
|
15
|
+
source: normalize(path.relative(sourceRoot, sourceFilename)),
|
|
23
16
|
})),
|
|
24
17
|
filename,
|
|
25
18
|
};
|
package/types/wyw-in-js.js
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
109
|
-
const outputBasename =
|
|
103
|
+
const outputFolder = path.relative(sourceRoot, path.dirname(filename));
|
|
104
|
+
const outputBasename = path
|
|
110
105
|
.basename(filename)
|
|
111
|
-
.replace(
|
|
112
|
-
return
|
|
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 } =
|
|
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
|
-
...
|
|
113
|
+
...globSync(pattern.toString(), {
|
|
119
114
|
absolute: true,
|
|
120
115
|
ignore: options.ignore,
|
|
121
116
|
}),
|
|
122
117
|
], []);
|
|
123
|
-
const cache = new
|
|
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 (
|
|
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(() =>
|
|
140
|
+
tasks.push(() => transform(transformServices, fs.readFileSync(filename).toString(), asyncResolveFallback).then(({ code, cssText, diagnostics, metadata, sourceMap, cssSourceMapText, }) => {
|
|
146
141
|
if (diagnostics?.length) {
|
|
147
|
-
|
|
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
|
-
|
|
148
|
+
mkdirp.sync(path.dirname(outputFilename));
|
|
154
149
|
if (metadata) {
|
|
155
|
-
const metadataFile =
|
|
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
|
-
|
|
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
|
-
|
|
166
|
+
fs.writeFileSync(outputFilename, cssContent);
|
|
172
167
|
if (options.sourceMaps &&
|
|
173
168
|
sourceMap &&
|
|
174
169
|
typeof cssSourceMapText !== 'undefined') {
|
|
175
|
-
|
|
170
|
+
fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);
|
|
176
171
|
}
|
|
177
172
|
if (options.sourceRoot && options.insertCssRequires) {
|
|
178
|
-
const inputFilename =
|
|
179
|
-
const relativePath = (
|
|
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
|
-
:
|
|
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
|
-
|
|
211
|
+
fs.writeFileSync(name, content);
|
|
217
212
|
});
|
|
218
213
|
cache.clear('all');
|
|
219
214
|
modifiedFiles.length = 0;
|
package/lib/diagnostics.js
DELETED
|
@@ -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
|
package/lib/diagnostics.js.map
DELETED
|
@@ -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
|
package/lib/metadata.js.map
DELETED
|
@@ -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
|
package/lib/wyw-in-js.js.map
DELETED
|
@@ -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":[]}
|