@wyw-in-js/transform 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/cache.js +100 -7
- package/esm/cache.js.map +1 -1
- package/esm/debug/fileReporter.js.map +1 -1
- package/esm/module.js +51 -2
- package/esm/module.js.map +1 -1
- package/esm/plugins/shaker.js +152 -13
- package/esm/plugins/shaker.js.map +1 -1
- package/esm/shaker.js +51 -23
- package/esm/shaker.js.map +1 -1
- package/esm/transform/BaseEntrypoint.js +3 -1
- package/esm/transform/BaseEntrypoint.js.map +1 -1
- package/esm/transform/Entrypoint.js +60 -17
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
- package/esm/transform/barrelManifest.js +291 -0
- package/esm/transform/barrelManifest.js.map +1 -0
- package/esm/transform/generators/getExports.js +5 -0
- package/esm/transform/generators/getExports.js.map +1 -1
- package/esm/transform/generators/processEntrypoint.js +27 -1
- package/esm/transform/generators/processEntrypoint.js.map +1 -1
- package/esm/transform/generators/resolveImports.js +29 -5
- package/esm/transform/generators/resolveImports.js.map +1 -1
- package/esm/transform/generators/rewriteBarrelImports.js +733 -0
- package/esm/transform/generators/rewriteBarrelImports.js.map +1 -0
- package/esm/transform/generators/transform.js +154 -21
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/types.js.map +1 -1
- package/lib/cache.js +103 -7
- package/lib/cache.js.map +1 -1
- package/lib/debug/fileReporter.js.map +1 -1
- package/lib/module.js +51 -2
- package/lib/module.js.map +1 -1
- package/lib/plugins/shaker.js +152 -13
- package/lib/plugins/shaker.js.map +1 -1
- package/lib/shaker.js +58 -26
- package/lib/shaker.js.map +1 -1
- package/lib/transform/BaseEntrypoint.js +3 -1
- package/lib/transform/BaseEntrypoint.js.map +1 -1
- package/lib/transform/Entrypoint.js +61 -17
- package/lib/transform/Entrypoint.js.map +1 -1
- package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
- package/lib/transform/barrelManifest.js +300 -0
- package/lib/transform/barrelManifest.js.map +1 -0
- package/lib/transform/generators/getExports.js +5 -0
- package/lib/transform/generators/getExports.js.map +1 -1
- package/lib/transform/generators/processEntrypoint.js +27 -1
- package/lib/transform/generators/processEntrypoint.js.map +1 -1
- package/lib/transform/generators/resolveImports.js +29 -5
- package/lib/transform/generators/resolveImports.js.map +1 -1
- package/lib/transform/generators/rewriteBarrelImports.js +743 -0
- package/lib/transform/generators/rewriteBarrelImports.js.map +1 -0
- package/lib/transform/generators/transform.js +158 -22
- package/lib/transform/generators/transform.js.map +1 -1
- package/lib/transform/types.js.map +1 -1
- package/package.json +8 -4
- package/types/cache.d.ts +16 -2
- package/types/cache.js +111 -7
- package/types/debug/fileReporter.d.ts +1 -0
- package/types/module.d.ts +3 -0
- package/types/module.js +57 -2
- package/types/plugins/shaker.js +161 -16
- package/types/shaker.d.ts +10 -1
- package/types/shaker.js +56 -28
- package/types/transform/BaseEntrypoint.d.ts +3 -1
- package/types/transform/BaseEntrypoint.js +5 -1
- package/types/transform/Entrypoint.d.ts +9 -0
- package/types/transform/Entrypoint.js +73 -20
- package/types/transform/EvaluatedEntrypoint.d.ts +2 -0
- package/types/transform/barrelManifest.d.ts +42 -0
- package/types/transform/barrelManifest.js +300 -0
- package/types/transform/generators/getExports.js +5 -0
- package/types/transform/generators/processEntrypoint.js +26 -1
- package/types/transform/generators/resolveImports.js +29 -5
- package/types/transform/generators/rewriteBarrelImports.d.ts +15 -0
- package/types/transform/generators/rewriteBarrelImports.js +815 -0
- package/types/transform/generators/transform.js +148 -19
- package/types/transform/types.d.ts +2 -0
|
@@ -9,8 +9,10 @@ exports.transform = transform;
|
|
|
9
9
|
const buildOptions_1 = require("../../options/buildOptions");
|
|
10
10
|
const dynamic_import_1 = __importDefault(require("../../plugins/dynamic-import"));
|
|
11
11
|
const preeval_1 = __importDefault(require("../../plugins/preeval"));
|
|
12
|
+
const shaker_1 = require("../../shaker");
|
|
12
13
|
const TransformMetadata_1 = require("../../utils/TransformMetadata");
|
|
13
14
|
const getPluginKey_1 = require("../../utils/getPluginKey");
|
|
15
|
+
const rewriteBarrelImports_1 = require("./rewriteBarrelImports");
|
|
14
16
|
const EMPTY_FILE = '=== empty file ===';
|
|
15
17
|
const hasKeyInList = (plugin, list) => {
|
|
16
18
|
const pluginKey = (0, getPluginKey_1.getPluginKey)(plugin);
|
|
@@ -41,34 +43,57 @@ function runPreevalStage(babel, evalConfig, pluginOptions, code, originalAst, ev
|
|
|
41
43
|
}
|
|
42
44
|
return result;
|
|
43
45
|
}
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
+
const isPrevalOnly = (only) => only.length === 1 && only[0] === '__wywPreval';
|
|
47
|
+
const prepareEvaluatorInput = (services, item, originalAst) => {
|
|
48
|
+
const { only, loadedAndParsed, log } = item;
|
|
46
49
|
if (loadedAndParsed.evaluator === 'ignored') {
|
|
47
|
-
|
|
48
|
-
return [loadedAndParsed.code ?? '', null, null];
|
|
50
|
+
throw new Error(`Cannot prepare ignored entrypoint ${item.name}`);
|
|
49
51
|
}
|
|
50
|
-
const { code, evalConfig
|
|
52
|
+
const { code, evalConfig } = loadedAndParsed;
|
|
51
53
|
const { options, babel, eventEmitter } = services;
|
|
52
54
|
const { pluginOptions } = options;
|
|
53
55
|
const preevalStageResult = eventEmitter.perf('transform:preeval', () => runPreevalStage(babel, evalConfig, pluginOptions, code, originalAst, eventEmitter));
|
|
54
56
|
const transformMetadata = (0, TransformMetadata_1.getTransformMetadata)(preevalStageResult.metadata);
|
|
55
|
-
if (only
|
|
57
|
+
if (isPrevalOnly(only) && !transformMetadata) {
|
|
56
58
|
log('[evaluator:end] no metadata');
|
|
57
|
-
return
|
|
59
|
+
return {
|
|
60
|
+
kind: 'short-circuit',
|
|
61
|
+
code: preevalStageResult.code,
|
|
62
|
+
};
|
|
58
63
|
}
|
|
59
64
|
log('[preeval] metadata %O', transformMetadata);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
return {
|
|
66
|
+
kind: 'continue',
|
|
67
|
+
ast: preevalStageResult.ast,
|
|
68
|
+
code: preevalStageResult.code,
|
|
69
|
+
evalConfig,
|
|
70
|
+
evaluatorConfig: {
|
|
71
|
+
onlyExports: only,
|
|
72
|
+
highPriorityPlugins: pluginOptions.highPriorityPlugins,
|
|
73
|
+
features: pluginOptions.features,
|
|
74
|
+
importOverrides: pluginOptions.importOverrides,
|
|
75
|
+
root: options.root,
|
|
76
|
+
},
|
|
77
|
+
metadata: transformMetadata ?? null,
|
|
68
78
|
};
|
|
69
|
-
|
|
79
|
+
};
|
|
80
|
+
const prepareCode = (services, item, originalAst) => {
|
|
81
|
+
const { log, loadedAndParsed } = item;
|
|
82
|
+
if (loadedAndParsed.evaluator === 'ignored') {
|
|
83
|
+
log('is ignored');
|
|
84
|
+
return [loadedAndParsed.code ?? '', null, null];
|
|
85
|
+
}
|
|
86
|
+
const { evaluator } = loadedAndParsed;
|
|
87
|
+
const { babel, eventEmitter } = services;
|
|
88
|
+
const prepared = prepareEvaluatorInput(services, item, originalAst);
|
|
89
|
+
if (prepared.kind === 'short-circuit') {
|
|
90
|
+
return [prepared.code, null, null];
|
|
91
|
+
}
|
|
92
|
+
log('[evaluator:start] using %s', evaluator.name);
|
|
93
|
+
log.extend('source')('%s', prepared.code);
|
|
94
|
+
const [, transformedCode, imports] = eventEmitter.perf('transform:evaluator', () => evaluator(prepared.evalConfig, prepared.ast, prepared.code, prepared.evaluatorConfig, babel));
|
|
70
95
|
log('[evaluator:end]');
|
|
71
|
-
return [transformedCode, imports,
|
|
96
|
+
return [transformedCode, imports, prepared.metadata];
|
|
72
97
|
};
|
|
73
98
|
exports.prepareCode = prepareCode;
|
|
74
99
|
function* internalTransform(prepareFn) {
|
|
@@ -119,6 +144,110 @@ function* internalTransform(prepareFn) {
|
|
|
119
144
|
* Prepares the code for evaluation. This includes removing dead and potentially unsafe code.
|
|
120
145
|
* Emits resolveImports and processImports events.
|
|
121
146
|
*/
|
|
122
|
-
function transform() {
|
|
123
|
-
|
|
147
|
+
function* transform() {
|
|
148
|
+
const { only, loadedAndParsed, log } = this.entrypoint;
|
|
149
|
+
if (loadedAndParsed.evaluator === 'ignored') {
|
|
150
|
+
log('is ignored');
|
|
151
|
+
return {
|
|
152
|
+
code: loadedAndParsed.code ?? '',
|
|
153
|
+
metadata: null,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (loadedAndParsed.evaluator !== shaker_1.shaker) {
|
|
157
|
+
return yield* internalTransform.call(this, exports.prepareCode);
|
|
158
|
+
}
|
|
159
|
+
log('>> (%o)', only);
|
|
160
|
+
const prepared = prepareEvaluatorInput(this.services, this.entrypoint, loadedAndParsed.ast);
|
|
161
|
+
if (prepared.kind === 'short-circuit') {
|
|
162
|
+
if (loadedAndParsed.code === prepared.code) {
|
|
163
|
+
log('<< (%o)\n === no changes ===', only);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
log('<< (%o)', only);
|
|
167
|
+
log.extend('source')('%s', prepared.code || EMPTY_FILE);
|
|
168
|
+
}
|
|
169
|
+
if (prepared.code === '') {
|
|
170
|
+
log('is skipped');
|
|
171
|
+
return {
|
|
172
|
+
code: loadedAndParsed.code ?? '',
|
|
173
|
+
metadata: null,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
code: prepared.code,
|
|
178
|
+
metadata: null,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
log('[evaluator:start] using %s', loadedAndParsed.evaluator.name);
|
|
182
|
+
log.extend('source')('%s', prepared.code);
|
|
183
|
+
const { babel, eventEmitter } = this.services;
|
|
184
|
+
const [shakenAst, shakenCode, shakenImports] = eventEmitter.perf('transform:evaluator', () => (0, shaker_1.shakeToESM)(prepared.evalConfig, prepared.ast, prepared.code, prepared.evaluatorConfig, babel));
|
|
185
|
+
let nextAst = shakenAst;
|
|
186
|
+
let nextCode = shakenCode;
|
|
187
|
+
let nextResolvedImports = [];
|
|
188
|
+
if (shakenImports !== null && shakenImports.size > 0) {
|
|
189
|
+
const resolvedImports = yield* this.getNext('resolveImports', this.entrypoint, {
|
|
190
|
+
imports: shakenImports,
|
|
191
|
+
phase: 'initial',
|
|
192
|
+
});
|
|
193
|
+
if (resolvedImports.length > 0) {
|
|
194
|
+
const rewritten = yield* rewriteBarrelImports_1.rewriteOptimizedBarrelImports.call(this, shakenAst, shakenCode, resolvedImports);
|
|
195
|
+
nextAst = rewritten.ast;
|
|
196
|
+
nextCode = rewritten.code;
|
|
197
|
+
if (rewritten.optimizedCount > 0) {
|
|
198
|
+
const fullyRewrittenSources = new Set(rewritten.fullyRewrittenSources);
|
|
199
|
+
const partialFallbackSources = new Set(rewritten.partialFallbackSources);
|
|
200
|
+
for (const dependency of resolvedImports) {
|
|
201
|
+
if (dependency.resolved &&
|
|
202
|
+
(fullyRewrittenSources.has(dependency.source) ||
|
|
203
|
+
partialFallbackSources.has(dependency.source))) {
|
|
204
|
+
if (partialFallbackSources.has(dependency.source)) {
|
|
205
|
+
this.entrypoint.addDependency(dependency);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
this.entrypoint.addInvalidationDependency(dependency);
|
|
209
|
+
}
|
|
210
|
+
this.entrypoint.markInvalidateOnDependencyChange(dependency.resolved);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
nextResolvedImports = yield* this.getNext('resolveImports', this.entrypoint, {
|
|
214
|
+
imports: rewritten.imports,
|
|
215
|
+
phase: 'rewritten',
|
|
216
|
+
preResolved: rewritten.preResolvedImports,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
nextResolvedImports = resolvedImports;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (nextResolvedImports.length !== 0) {
|
|
225
|
+
yield [
|
|
226
|
+
'processImports',
|
|
227
|
+
this.entrypoint,
|
|
228
|
+
{
|
|
229
|
+
resolved: nextResolvedImports,
|
|
230
|
+
},
|
|
231
|
+
];
|
|
232
|
+
}
|
|
233
|
+
const [, preparedCode] = eventEmitter.perf('transform:emitCommonJS', () => (0, shaker_1.emitCommonJS)(prepared.evalConfig, nextAst, nextCode, babel));
|
|
234
|
+
log('[evaluator:end]');
|
|
235
|
+
if (loadedAndParsed.code === preparedCode) {
|
|
236
|
+
log('<< (%o)\n === no changes ===', only);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
log('<< (%o)', only);
|
|
240
|
+
log.extend('source')('%s', preparedCode || EMPTY_FILE);
|
|
241
|
+
}
|
|
242
|
+
if (preparedCode === '') {
|
|
243
|
+
log('is skipped');
|
|
244
|
+
return {
|
|
245
|
+
code: loadedAndParsed.code ?? '',
|
|
246
|
+
metadata: null,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
code: preparedCode,
|
|
251
|
+
metadata: prepared.metadata,
|
|
252
|
+
};
|
|
124
253
|
}
|
|
@@ -123,6 +123,8 @@ export interface IProcessImportsAction extends IBaseAction<IProcessImportsAction
|
|
|
123
123
|
}
|
|
124
124
|
export interface IResolveImportsAction extends IBaseAction<IResolveImportsAction, IEntrypointDependency[], {
|
|
125
125
|
imports: Map<string, string[]> | null;
|
|
126
|
+
phase?: 'initial' | 'rewritten';
|
|
127
|
+
preResolved?: IEntrypointDependency[];
|
|
126
128
|
}> {
|
|
127
129
|
type: 'resolveImports';
|
|
128
130
|
}
|