@wyw-in-js/transform 1.0.3 → 1.0.5
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 +47 -6
- package/esm/cache.js.map +1 -1
- package/esm/module.js +2 -2
- package/esm/module.js.map +1 -1
- package/esm/options/buildOptions.js +23 -2
- package/esm/options/buildOptions.js.map +1 -1
- package/esm/options/buildOptions.test.js +97 -0
- package/esm/options/buildOptions.test.js.map +1 -1
- package/esm/plugins/shaker.js +87 -9
- package/esm/plugins/shaker.js.map +1 -1
- package/esm/transform/Entrypoint.helpers.js +8 -1
- package/esm/transform/Entrypoint.helpers.js.map +1 -1
- package/esm/transform/Entrypoint.js +5 -3
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
- package/esm/transform/actions/BaseAction.js +1 -1
- package/esm/transform/actions/BaseAction.js.map +1 -1
- package/esm/transform/generators/processImports.js +53 -0
- package/esm/transform/generators/processImports.js.map +1 -1
- package/esm/transform/generators/resolveImports.js +2 -2
- package/esm/transform/generators/resolveImports.js.map +1 -1
- package/esm/utils/importOverrides.js +60 -0
- package/esm/utils/importOverrides.js.map +1 -1
- package/esm/vm/createVmContext.js +48 -16
- package/esm/vm/createVmContext.js.map +1 -1
- package/lib/cache.js +47 -7
- package/lib/cache.js.map +1 -1
- package/lib/module.js +2 -2
- package/lib/module.js.map +1 -1
- package/lib/options/buildOptions.js +23 -3
- package/lib/options/buildOptions.js.map +1 -1
- package/lib/options/buildOptions.test.js +97 -0
- package/lib/options/buildOptions.test.js.map +1 -1
- package/lib/plugins/shaker.js +88 -9
- package/lib/plugins/shaker.js.map +1 -1
- package/lib/transform/Entrypoint.helpers.js +8 -1
- package/lib/transform/Entrypoint.helpers.js.map +1 -1
- package/lib/transform/Entrypoint.js +5 -3
- package/lib/transform/Entrypoint.js.map +1 -1
- package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
- package/lib/transform/actions/BaseAction.js +1 -1
- package/lib/transform/actions/BaseAction.js.map +1 -1
- package/lib/transform/generators/processImports.js +53 -0
- package/lib/transform/generators/processImports.js.map +1 -1
- package/lib/transform/generators/resolveImports.js +1 -1
- package/lib/transform/generators/resolveImports.js.map +1 -1
- package/lib/utils/importOverrides.js +62 -0
- package/lib/utils/importOverrides.js.map +1 -1
- package/lib/vm/createVmContext.js +48 -16
- package/lib/vm/createVmContext.js.map +1 -1
- package/package.json +5 -4
- package/types/cache.d.ts +2 -1
- package/types/cache.js +48 -6
- package/types/module.js +1 -1
- package/types/options/buildOptions.js +29 -2
- package/types/plugins/shaker.js +104 -9
- package/types/transform/Entrypoint.helpers.js +10 -1
- package/types/transform/Entrypoint.js +5 -3
- package/types/transform/EvaluatedEntrypoint.d.ts +2 -0
- package/types/transform/EvaluatedEntrypoint.js +1 -0
- package/types/transform/actions/BaseAction.js +1 -1
- package/types/transform/generators/processImports.js +70 -0
- package/types/transform/generators/resolveImports.js +1 -1
- package/types/utils/importOverrides.d.ts +2 -1
- package/types/utils/importOverrides.js +63 -0
- package/types/vm/createVmContext.js +61 -13
package/esm/plugins/shaker.js
CHANGED
|
@@ -6,7 +6,8 @@ import { isRemoved } from '../utils/isRemoved';
|
|
|
6
6
|
import { applyAction, dereference, findActionForNode, reference, removeWithRelated } from '../utils/scopeHelpers';
|
|
7
7
|
import { invalidateTraversalCache } from '../utils/traversalCache';
|
|
8
8
|
import { stripQueryAndHash } from '../utils/parseRequest';
|
|
9
|
-
import { toImportKey } from '../utils/importOverrides';
|
|
9
|
+
import { getImportOverride, toImportKey } from '../utils/importOverrides';
|
|
10
|
+
const warnedDynamicImportFiles = new Set();
|
|
10
11
|
function getNonParamBinding(exportPath, name) {
|
|
11
12
|
const binding = exportPath.scope.getBinding(name);
|
|
12
13
|
if (binding && binding.kind !== 'param') {
|
|
@@ -158,7 +159,7 @@ export default function shakerPlugin(babel, {
|
|
|
158
159
|
return cached;
|
|
159
160
|
}
|
|
160
161
|
const strippedSource = stripQueryAndHash(source);
|
|
161
|
-
const direct = importOverrides
|
|
162
|
+
const direct = getImportOverride(importOverrides, source) ?? (strippedSource !== source ? getImportOverride(importOverrides, strippedSource) : null);
|
|
162
163
|
if (direct) {
|
|
163
164
|
const result = shouldKeepOverride(direct);
|
|
164
165
|
cache.set(source, result);
|
|
@@ -178,7 +179,7 @@ export default function shakerPlugin(babel, {
|
|
|
178
179
|
resolved,
|
|
179
180
|
root
|
|
180
181
|
});
|
|
181
|
-
const override = importOverrides
|
|
182
|
+
const override = getImportOverride(importOverrides, key);
|
|
182
183
|
const result = shouldKeepOverride(override);
|
|
183
184
|
cache.set(source, result);
|
|
184
185
|
return result;
|
|
@@ -189,8 +190,11 @@ export default function shakerPlugin(babel, {
|
|
|
189
190
|
};
|
|
190
191
|
})();
|
|
191
192
|
const collected = collectExportsAndImports(file.path);
|
|
192
|
-
const
|
|
193
|
-
|
|
193
|
+
const {
|
|
194
|
+
imports
|
|
195
|
+
} = collected;
|
|
196
|
+
const sideEffectImports = imports.filter(sideEffectImport);
|
|
197
|
+
log('import-and-exports', [`imports: ${imports.length} (side-effects: ${sideEffectImports.length})`, `exports: ${Object.values(collected.exports).length}`, `reexports: ${collected.reexports.length}`].join(', '));
|
|
194
198
|
|
|
195
199
|
// We cannot just throw out exports if they are referred in the code
|
|
196
200
|
// Let's dome some replacements
|
|
@@ -231,7 +235,7 @@ export default function shakerPlugin(babel, {
|
|
|
231
235
|
// See example in shaker-plugin.test.ts
|
|
232
236
|
// Real-world example was found in preact/compat npm package
|
|
233
237
|
if (onlyExportsSet.has('default') && hasDefault && !collected.isEsModule) {
|
|
234
|
-
this.imports =
|
|
238
|
+
this.imports = imports;
|
|
235
239
|
this.exports = exports;
|
|
236
240
|
this.reexports = collected.reexports;
|
|
237
241
|
this.deadExports = [];
|
|
@@ -241,7 +245,7 @@ export default function shakerPlugin(babel, {
|
|
|
241
245
|
// __esModule should be kept alive
|
|
242
246
|
onlyExportsSet.add('__esModule');
|
|
243
247
|
const aliveExports = new Set();
|
|
244
|
-
const importNames =
|
|
248
|
+
const importNames = imports.map(({
|
|
245
249
|
imported
|
|
246
250
|
}) => imported);
|
|
247
251
|
Object.entries(exports).forEach(([exported, local]) => {
|
|
@@ -293,7 +297,7 @@ export default function shakerPlugin(babel, {
|
|
|
293
297
|
});
|
|
294
298
|
}
|
|
295
299
|
if (ifUnknownExport === 'skip-shaking') {
|
|
296
|
-
this.imports =
|
|
300
|
+
this.imports = imports;
|
|
297
301
|
this.exports = exports;
|
|
298
302
|
this.reexports = collected.reexports;
|
|
299
303
|
this.deadExports = [];
|
|
@@ -416,7 +420,7 @@ export default function shakerPlugin(babel, {
|
|
|
416
420
|
}
|
|
417
421
|
}
|
|
418
422
|
}
|
|
419
|
-
this.imports = withoutRemoved(
|
|
423
|
+
this.imports = withoutRemoved(imports);
|
|
420
424
|
this.exports = {};
|
|
421
425
|
this.deadExports = [];
|
|
422
426
|
Object.entries(exports).forEach(([exported, local]) => {
|
|
@@ -431,6 +435,80 @@ export default function shakerPlugin(babel, {
|
|
|
431
435
|
visitor: {},
|
|
432
436
|
post(file) {
|
|
433
437
|
const log = shakerLogger.extend(getFileIdx(file.opts.filename));
|
|
438
|
+
const dynamicImportWarningsEnabled = Boolean(process.env.WYW_WARN_DYNAMIC_IMPORTS) && process.env.WYW_WARN_DYNAMIC_IMPORTS !== '0' && process.env.WYW_WARN_DYNAMIC_IMPORTS !== 'false';
|
|
439
|
+
const filename = file.opts.filename;
|
|
440
|
+
if (dynamicImportWarningsEnabled && !warnedDynamicImportFiles.has(filename)) {
|
|
441
|
+
const dynamicImports = this.imports.filter(imp => !sideEffectImport(imp) && imp.type === 'dynamic');
|
|
442
|
+
if (dynamicImports.length > 0) {
|
|
443
|
+
const sources = Array.from(new Set(dynamicImports.map(imp => imp.source))).sort();
|
|
444
|
+
const sourcesToWarn = (() => {
|
|
445
|
+
if (!importOverrides || Object.keys(importOverrides).length === 0) {
|
|
446
|
+
return sources;
|
|
447
|
+
}
|
|
448
|
+
const shouldWarn = source => {
|
|
449
|
+
const strippedSource = stripQueryAndHash(source);
|
|
450
|
+
const direct = getImportOverride(importOverrides, source) ?? (strippedSource !== source ? getImportOverride(importOverrides, strippedSource) : undefined);
|
|
451
|
+
if (direct !== undefined) {
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
const isFileImport = strippedSource.startsWith('.') || pathLib.isAbsolute(strippedSource);
|
|
455
|
+
if (!isFileImport) {
|
|
456
|
+
return true;
|
|
457
|
+
}
|
|
458
|
+
try {
|
|
459
|
+
const resolved = syncResolve(strippedSource, filename, []);
|
|
460
|
+
const importKey = toImportKey({
|
|
461
|
+
source: strippedSource,
|
|
462
|
+
resolved,
|
|
463
|
+
root
|
|
464
|
+
}).key;
|
|
465
|
+
return getImportOverride(importOverrides, importKey) === undefined;
|
|
466
|
+
} catch {
|
|
467
|
+
return true;
|
|
468
|
+
}
|
|
469
|
+
};
|
|
470
|
+
return sources.filter(shouldWarn);
|
|
471
|
+
})();
|
|
472
|
+
if (sourcesToWarn.length > 0) {
|
|
473
|
+
warnedDynamicImportFiles.add(filename);
|
|
474
|
+
const overrideKeys = sourcesToWarn.map(source => {
|
|
475
|
+
const strippedSource = stripQueryAndHash(source);
|
|
476
|
+
const isFileImport = strippedSource.startsWith('.') || pathLib.isAbsolute(strippedSource);
|
|
477
|
+
if (!isFileImport) {
|
|
478
|
+
return {
|
|
479
|
+
source,
|
|
480
|
+
key: source
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
try {
|
|
484
|
+
const resolved = syncResolve(strippedSource, filename, []);
|
|
485
|
+
return {
|
|
486
|
+
source,
|
|
487
|
+
key: toImportKey({
|
|
488
|
+
source: strippedSource,
|
|
489
|
+
resolved,
|
|
490
|
+
root
|
|
491
|
+
}).key
|
|
492
|
+
};
|
|
493
|
+
} catch {
|
|
494
|
+
return {
|
|
495
|
+
source,
|
|
496
|
+
key: strippedSource
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
}).filter((item, index, array) => {
|
|
500
|
+
const firstIndexForKey = array.findIndex(i => i.key === item.key);
|
|
501
|
+
return firstIndexForKey === index;
|
|
502
|
+
});
|
|
503
|
+
const warning = [`[wyw-in-js] Dynamic imports reached prepare stage`, ``, `file: ${filename}`, `count: ${sourcesToWarn.length}`, `sources:`, ...sourcesToWarn.map(source => ` - ${source}`), ``, `note: these imports will be resolved/processed even if they are lazy (e.g. React.lazy(() => import(...)))`, ``, `tip: if the imported module is runtime-only or heavy, mock it during evaluation via importOverrides:`, ` importOverrides: {`, ...overrideKeys.map(({
|
|
504
|
+
key,
|
|
505
|
+
source
|
|
506
|
+
}) => ` '${key}': { mock: './path/to/mock' }, // from ${source}`), ` }`, ``, `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`].join('\n');
|
|
507
|
+
// eslint-disable-next-line no-console
|
|
508
|
+
console.warn(warning);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
434
512
|
const processedImports = new Set();
|
|
435
513
|
const imports = new Map();
|
|
436
514
|
const addImport = ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaker.js","names":["pathLib","logger","syncResolve","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","stripQueryAndHash","toImportKey","getNonParamBinding","exportPath","name","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","registerConstantViolation","assigmentToExport","expressionStatement","assignmentExpression","memberExpression","body","lastViolation","pathInRoot","find","n","isDescendant","pushed","insertAfter","getPropertyAssignmentStatement","bindingName","assignment","isMemberExpression","object","statement","parentPath","isExpressionStatement","isWithinAliveExport","aliveExports","some","alive","isAncestor","stripExportKeepDeclaration","path","exportDeclaration","isExportNamedDeclaration","isTSEnumDeclaration","isVariableDeclaration","declarators","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","Set","shouldKeepOverride","override","hasImportOverride","Object","keys","cache","Map","source","cached","strippedSource","direct","result","set","isFileImport","startsWith","isAbsolute","resolved","key","collected","sideEffectImports","imports","values","reexports","hasWywPreval","__wywPreval","hasDefault","default","has","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","map","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","includes","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","unreferenced","getAllBindings","referenced","violation","visitor","post","processedImports","addImport","metadata","wywEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import pathLib from 'path';\n\nimport type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n ExportNamedDeclaration,\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\nimport type { ImportOverride, ImportOverrides } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\nimport { stripQueryAndHash } from '../utils/parseRequest';\nimport { toImportKey } from '../utils/importOverrides';\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getNonParamBinding(\n exportPath: NodePath,\n name: string\n): Binding | undefined {\n const binding = exportPath.scope.getBinding(name);\n if (binding && (binding.kind as string) !== 'param') {\n return binding;\n }\n\n // When `exportPath` is inside a function scope, a parameter can shadow\n // the actual export binding (e.g. `export function fallback(fallback) {}`).\n // In such cases we need the binding from the declaration scope.\n return exportPath.scope.parent?.getBinding(name) ?? binding;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return getNonParamBinding(exportPath, exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return getNonParamBinding(exportPath, left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n const { id } = exportPath.node;\n if (!id) {\n // `export default function() {}` / `export default class {}` (anonymous)\n return undefined;\n }\n return getNonParamBinding(exportPath, id.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n const constantViolations: NodePath<Identifier>[] = [];\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n constantViolations.push(replaced);\n } else {\n reference(replaced);\n }\n });\n\n constantViolations.forEach((id) => {\n rootScope.registerConstantViolation(id);\n });\n\n const assigmentToExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n );\n\n // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file\n const body = root.get('body');\n const lastViolation =\n constantViolations[constantViolations.length - 1] ??\n body[body.length - 1];\n const pathInRoot = root\n .get('body')\n .find((n) => lastViolation.isDescendant(n))!;\n\n const [pushed] = pathInRoot.insertAfter(assigmentToExport);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nconst getPropertyAssignmentStatement = (\n ref: NodePath,\n bindingName: string\n): NodePath | null => {\n const assignment = ref.findParent((parent) =>\n parent.isAssignmentExpression()\n );\n if (!assignment?.isAssignmentExpression()) return null;\n\n const left = assignment.get('left');\n if (!left.isMemberExpression()) return null;\n\n const object = left.get('object');\n if (!object.isIdentifier({ name: bindingName })) return null;\n\n const statement = assignment.parentPath;\n return statement?.isExpressionStatement() ? statement : null;\n};\n\nconst isWithinAliveExport = (\n ref: NodePath,\n aliveExports: Set<NodePath>\n): boolean =>\n [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));\n\nfunction stripExportKeepDeclaration(path: NodePath): boolean {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return false;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return false;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n if (declarators.length !== 1) {\n return false;\n }\n\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n return false;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n importOverrides,\n onlyExports,\n root,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const shouldKeepOverride = (\n override: ImportOverride | undefined\n ): boolean => !!override && ('mock' in override || 'noShake' in override);\n\n const hasImportOverride = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return () => false;\n }\n\n const cache = new Map<string, boolean>();\n\n return (source: string): boolean => {\n const cached = cache.get(source);\n if (cached !== undefined) {\n return cached;\n }\n\n const strippedSource = stripQueryAndHash(source);\n\n const direct =\n importOverrides[source] ??\n (strippedSource !== source\n ? importOverrides[strippedSource]\n : null);\n if (direct) {\n const result = shouldKeepOverride(direct);\n cache.set(source, result);\n return result;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n cache.set(source, false);\n return false;\n }\n\n try {\n const resolved = syncResolve(strippedSource, this.filename, []);\n const { key } = toImportKey({\n source: strippedSource,\n resolved,\n root,\n });\n const override = importOverrides[key];\n const result = shouldKeepOverride(override);\n cache.set(source, result);\n return result;\n } catch {\n cache.set(source, false);\n return false;\n }\n };\n })();\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n return;\n }\n\n const binding =\n local.isIdentifier() && local.scope.getBinding(local.node.name);\n\n if (\n binding &&\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n return;\n }\n\n if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n const forDeletingSet = new Set<NodePath>(forDeleting);\n const queueForDeleting = (path: NodePath): boolean => {\n if (isRemoved(path) || forDeletingSet.has(path)) {\n return false;\n }\n\n forDeletingSet.add(path);\n forDeleting.push(path);\n return true;\n };\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Drop side-effect imports for eval-only builds unless they were explicitly requested.\n // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.\n sideEffectImports.forEach((i) => {\n if (hasImportOverride(i.source)) {\n return;\n }\n\n queueForDeleting(i.local);\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => {\n if (ref === parent || parent?.isAncestor(ref)) {\n return false;\n }\n\n return !forDeleting.some(\n (candidate) =>\n candidate !== path &&\n !isRemoved(candidate) &&\n (candidate === ref || candidate.isAncestor(ref))\n );\n }\n );\n const bindingName = binding?.identifier.name;\n const removableAssignmentStatements = new Set<NodePath>();\n const removableOuterReferences = outerReferences.filter((ref) => {\n if (!bindingName) return false;\n const statement = getPropertyAssignmentStatement(\n ref,\n bindingName\n );\n if (!statement || isWithinAliveExport(statement, aliveExports)) {\n return false;\n }\n\n removableAssignmentStatements.add(statement);\n return true;\n });\n\n const blockingReferences = outerReferences.filter(\n (ref) => !removableOuterReferences.includes(ref)\n );\n\n if (blockingReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n binding &&\n blockingReferences.length > 0 &&\n stripExportKeepDeclaration(path)\n ) {\n deleted.add(path);\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n !deleted.has(path) &&\n (!binding || blockingReferences.length === 0)\n ) {\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n\n // Find and mark for deleting all unreferenced variables\n const unreferenced = Object.values(\n file.scope.getAllBindings()\n ).filter((i) => !i.referenced);\n\n for (const binding of unreferenced) {\n if (binding.path.isVariableDeclarator()) {\n const id = binding.path.get('id');\n if (!isRemoved(id) && !forDeletingSet.has(id)) {\n // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.\n for (const violation of binding.constantViolations) {\n if (queueForDeleting(violation)) {\n changed = true;\n }\n }\n\n if (queueForDeleting(id)) {\n changed = true;\n }\n }\n }\n\n // Drop import specifiers whose bindings lost all references during shaking\n // (e.g. when we keep only __wywPreval and the rest of the module is removed).\n if (\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n !isRemoved(binding.path) &&\n !forDeletingSet.has(binding.path)\n ) {\n if (queueForDeleting(binding.path)) {\n changed = true;\n }\n }\n }\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"shaker.js","names":["pathLib","logger","syncResolve","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","stripQueryAndHash","getImportOverride","toImportKey","warnedDynamicImportFiles","Set","getNonParamBinding","exportPath","name","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","registerConstantViolation","assigmentToExport","expressionStatement","assignmentExpression","memberExpression","body","lastViolation","pathInRoot","find","n","isDescendant","pushed","insertAfter","getPropertyAssignmentStatement","bindingName","assignment","isMemberExpression","object","statement","parentPath","isExpressionStatement","isWithinAliveExport","aliveExports","some","alive","isAncestor","stripExportKeepDeclaration","path","exportDeclaration","isExportNamedDeclaration","isTSEnumDeclaration","isVariableDeclaration","declarators","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","shouldKeepOverride","override","hasImportOverride","Object","keys","cache","Map","source","cached","strippedSource","direct","result","set","isFileImport","startsWith","isAbsolute","resolved","key","collected","imports","sideEffectImports","values","reexports","hasWywPreval","__wywPreval","hasDefault","default","has","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","map","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","includes","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","unreferenced","getAllBindings","referenced","violation","visitor","post","dynamicImportWarningsEnabled","Boolean","process","env","WYW_WARN_DYNAMIC_IMPORTS","dynamicImports","imp","type","sources","Array","from","sort","sourcesToWarn","shouldWarn","importKey","overrideKeys","item","index","array","firstIndexForKey","findIndex","warning","console","warn","processedImports","addImport","metadata","wywEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import pathLib from 'path';\n\nimport type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n ExportNamedDeclaration,\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\nimport type { ImportOverride, ImportOverrides } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\nimport { stripQueryAndHash } from '../utils/parseRequest';\nimport { getImportOverride, toImportKey } from '../utils/importOverrides';\n\nconst warnedDynamicImportFiles = new Set<string>();\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getNonParamBinding(\n exportPath: NodePath,\n name: string\n): Binding | undefined {\n const binding = exportPath.scope.getBinding(name);\n if (binding && (binding.kind as string) !== 'param') {\n return binding;\n }\n\n // When `exportPath` is inside a function scope, a parameter can shadow\n // the actual export binding (e.g. `export function fallback(fallback) {}`).\n // In such cases we need the binding from the declaration scope.\n return exportPath.scope.parent?.getBinding(name) ?? binding;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return getNonParamBinding(exportPath, exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return getNonParamBinding(exportPath, left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n const { id } = exportPath.node;\n if (!id) {\n // `export default function() {}` / `export default class {}` (anonymous)\n return undefined;\n }\n return getNonParamBinding(exportPath, id.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n const constantViolations: NodePath<Identifier>[] = [];\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n constantViolations.push(replaced);\n } else {\n reference(replaced);\n }\n });\n\n constantViolations.forEach((id) => {\n rootScope.registerConstantViolation(id);\n });\n\n const assigmentToExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n );\n\n // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file\n const body = root.get('body');\n const lastViolation =\n constantViolations[constantViolations.length - 1] ??\n body[body.length - 1];\n const pathInRoot = root\n .get('body')\n .find((n) => lastViolation.isDescendant(n))!;\n\n const [pushed] = pathInRoot.insertAfter(assigmentToExport);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nconst getPropertyAssignmentStatement = (\n ref: NodePath,\n bindingName: string\n): NodePath | null => {\n const assignment = ref.findParent((parent) =>\n parent.isAssignmentExpression()\n );\n if (!assignment?.isAssignmentExpression()) return null;\n\n const left = assignment.get('left');\n if (!left.isMemberExpression()) return null;\n\n const object = left.get('object');\n if (!object.isIdentifier({ name: bindingName })) return null;\n\n const statement = assignment.parentPath;\n return statement?.isExpressionStatement() ? statement : null;\n};\n\nconst isWithinAliveExport = (\n ref: NodePath,\n aliveExports: Set<NodePath>\n): boolean =>\n [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));\n\nfunction stripExportKeepDeclaration(path: NodePath): boolean {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return false;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return false;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n if (declarators.length !== 1) {\n return false;\n }\n\n exportDeclaration.replaceWith(declaration.node);\n return true;\n }\n\n return false;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n importOverrides,\n onlyExports,\n root,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const shouldKeepOverride = (\n override: ImportOverride | undefined\n ): boolean => !!override && ('mock' in override || 'noShake' in override);\n\n const hasImportOverride = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return () => false;\n }\n\n const cache = new Map<string, boolean>();\n\n return (source: string): boolean => {\n const cached = cache.get(source);\n if (cached !== undefined) {\n return cached;\n }\n\n const strippedSource = stripQueryAndHash(source);\n\n const direct =\n getImportOverride(importOverrides, source) ??\n (strippedSource !== source\n ? getImportOverride(importOverrides, strippedSource)\n : null);\n if (direct) {\n const result = shouldKeepOverride(direct);\n cache.set(source, result);\n return result;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n cache.set(source, false);\n return false;\n }\n\n try {\n const resolved = syncResolve(strippedSource, this.filename, []);\n const { key } = toImportKey({\n source: strippedSource,\n resolved,\n root,\n });\n const override = getImportOverride(importOverrides, key);\n const result = shouldKeepOverride(override);\n cache.set(source, result);\n return result;\n } catch {\n cache.set(source, false);\n return false;\n }\n };\n })();\n\n const collected = collectExportsAndImports(file.path);\n const { imports } = collected;\n const sideEffectImports = imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n return;\n }\n\n const binding =\n local.isIdentifier() && local.scope.getBinding(local.node.name);\n\n if (\n binding &&\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n return;\n }\n\n if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n const forDeletingSet = new Set<NodePath>(forDeleting);\n const queueForDeleting = (path: NodePath): boolean => {\n if (isRemoved(path) || forDeletingSet.has(path)) {\n return false;\n }\n\n forDeletingSet.add(path);\n forDeleting.push(path);\n return true;\n };\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Drop side-effect imports for eval-only builds unless they were explicitly requested.\n // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.\n sideEffectImports.forEach((i) => {\n if (hasImportOverride(i.source)) {\n return;\n }\n\n queueForDeleting(i.local);\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => {\n if (ref === parent || parent?.isAncestor(ref)) {\n return false;\n }\n\n return !forDeleting.some(\n (candidate) =>\n candidate !== path &&\n !isRemoved(candidate) &&\n (candidate === ref || candidate.isAncestor(ref))\n );\n }\n );\n const bindingName = binding?.identifier.name;\n const removableAssignmentStatements = new Set<NodePath>();\n const removableOuterReferences = outerReferences.filter((ref) => {\n if (!bindingName) return false;\n const statement = getPropertyAssignmentStatement(\n ref,\n bindingName\n );\n if (!statement || isWithinAliveExport(statement, aliveExports)) {\n return false;\n }\n\n removableAssignmentStatements.add(statement);\n return true;\n });\n\n const blockingReferences = outerReferences.filter(\n (ref) => !removableOuterReferences.includes(ref)\n );\n\n if (blockingReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n binding &&\n blockingReferences.length > 0 &&\n stripExportKeepDeclaration(path)\n ) {\n deleted.add(path);\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n !deleted.has(path) &&\n (!binding || blockingReferences.length === 0)\n ) {\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n\n // Find and mark for deleting all unreferenced variables\n const unreferenced = Object.values(\n file.scope.getAllBindings()\n ).filter((i) => !i.referenced);\n\n for (const binding of unreferenced) {\n if (binding.path.isVariableDeclarator()) {\n const id = binding.path.get('id');\n if (!isRemoved(id) && !forDeletingSet.has(id)) {\n // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.\n for (const violation of binding.constantViolations) {\n if (queueForDeleting(violation)) {\n changed = true;\n }\n }\n\n if (queueForDeleting(id)) {\n changed = true;\n }\n }\n }\n\n // Drop import specifiers whose bindings lost all references during shaking\n // (e.g. when we keep only __wywPreval and the rest of the module is removed).\n if (\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n !isRemoved(binding.path) &&\n !forDeletingSet.has(binding.path)\n ) {\n if (queueForDeleting(binding.path)) {\n changed = true;\n }\n }\n }\n }\n }\n\n this.imports = withoutRemoved(imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const dynamicImportWarningsEnabled =\n Boolean(process.env.WYW_WARN_DYNAMIC_IMPORTS) &&\n process.env.WYW_WARN_DYNAMIC_IMPORTS !== '0' &&\n process.env.WYW_WARN_DYNAMIC_IMPORTS !== 'false';\n\n const filename = file.opts.filename!;\n\n if (\n dynamicImportWarningsEnabled &&\n !warnedDynamicImportFiles.has(filename)\n ) {\n const dynamicImports = this.imports.filter(\n (imp) => !sideEffectImport(imp) && imp.type === 'dynamic'\n );\n if (dynamicImports.length > 0) {\n const sources = Array.from(\n new Set(dynamicImports.map((imp) => imp.source))\n ).sort();\n const sourcesToWarn = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return sources;\n }\n\n const shouldWarn = (source: string): boolean => {\n const strippedSource = stripQueryAndHash(source);\n const direct =\n getImportOverride(importOverrides, source) ??\n (strippedSource !== source\n ? getImportOverride(importOverrides, strippedSource)\n : undefined);\n if (direct !== undefined) {\n return false;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n return true;\n }\n\n try {\n const resolved = syncResolve(strippedSource, filename, []);\n const importKey = toImportKey({\n source: strippedSource,\n resolved,\n root,\n }).key;\n return (\n getImportOverride(importOverrides, importKey) === undefined\n );\n } catch {\n return true;\n }\n };\n\n return sources.filter(shouldWarn);\n })();\n\n if (sourcesToWarn.length > 0) {\n warnedDynamicImportFiles.add(filename);\n const overrideKeys = sourcesToWarn\n .map((source) => {\n const strippedSource = stripQueryAndHash(source);\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n\n if (!isFileImport) {\n return { source, key: source };\n }\n\n try {\n const resolved = syncResolve(strippedSource, filename, []);\n return {\n source,\n key: toImportKey({\n source: strippedSource,\n resolved,\n root,\n }).key,\n };\n } catch {\n return { source, key: strippedSource };\n }\n })\n .filter((item, index, array) => {\n const firstIndexForKey = array.findIndex(\n (i) => i.key === item.key\n );\n return firstIndexForKey === index;\n });\n const warning = [\n `[wyw-in-js] Dynamic imports reached prepare stage`,\n ``,\n `file: ${filename}`,\n `count: ${sourcesToWarn.length}`,\n `sources:`,\n ...sourcesToWarn.map((source) => ` - ${source}`),\n ``,\n `note: these imports will be resolved/processed even if they are lazy (e.g. React.lazy(() => import(...)))`,\n ``,\n `tip: if the imported module is runtime-only or heavy, mock it during evaluation via importOverrides:`,\n ` importOverrides: {`,\n ...overrideKeys.map(\n ({ key, source }) =>\n ` '${key}': { mock: './path/to/mock' }, // from ${source}`\n ),\n ` }`,\n ``,\n `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`,\n ].join('\\n');\n // eslint-disable-next-line no-console\n console.warn(warning);\n }\n }\n }\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -193,7 +193,14 @@ export function loadAndParse(services, name, loadedCode, log) {
|
|
|
193
193
|
reason: 'extension'
|
|
194
194
|
};
|
|
195
195
|
}
|
|
196
|
-
|
|
196
|
+
let code = loadedCode;
|
|
197
|
+
if (code === undefined) {
|
|
198
|
+
const cachedEntrypoint = services.cache.get('entrypoints', name);
|
|
199
|
+
if (cachedEntrypoint && 'initialCode' in cachedEntrypoint && typeof cachedEntrypoint.initialCode === 'string') {
|
|
200
|
+
code = cachedEntrypoint.initialCode;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
code ??= readFileSync(filename, 'utf-8');
|
|
197
204
|
const {
|
|
198
205
|
action,
|
|
199
206
|
babelOptions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entrypoint.helpers.js","names":["readFileSync","dirname","extname","isAbsolute","logger","isFeatureEnabled","buildOptions","loadBabelOptions","getFileIdx","getPluginKey","stripQueryAndHash","getMatchedRule","rules","filename","code","i","length","rule","test","RegExp","action","parseFile","babel","originalCode","parseConfig","log","extend","parseResult","parseSync","Error","isModuleResolver","plugin","key","includes","moduleResolverWarned","normalizeBabelKey","replace","isBabelPresetTypescript","normalized","isBabelTransformTypescriptPlugin","withAllowDeclareFields","item","Array","isArray","allowDeclareFields","target","rawOptions","rest","options","ensureAllowDeclareFieldsInBabelOptions","babelOptions","scope","presetsChanged","pluginsChanged","overridesChanged","envChanged","presets","map","plugins","overrides","baseOverrides","patchedOverrides","override","some","patchedOverride","idx","env","baseEnv","entries","Object","patchedEntries","envName","envOptions","patched","fromEntries","next","buildConfigs","services","name","pluginOptions","commonOptions","ast","inputSourceMap","root","sourceFileName","sourceMaps","isTypescriptFile","endsWith","rawConfig","useBabelConfigs","features","configFile","babelrc","parseHasModuleResolver","rawHasModuleResolver","console","warn","filter","evalConfig","loadAndParse","loadedCode","eventEmitter","extension","extensions","evaluator","reason","getOrParse","perf","require","resolve","paths","default","getStack","entrypoint","stack","parents","push","mergeOnly","a","b","result","Set","forEach","add","sort","isSuperSet","aSet","every","has"],"sources":["../../src/transform/Entrypoint.helpers.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { dirname, extname, isAbsolute } from 'path';\n\nimport type { TransformOptions, PluginItem } from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type {\n Debugger,\n EvalRule,\n Evaluator,\n StrictOptions,\n} from '@wyw-in-js/shared';\nimport { logger, isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport { buildOptions } from '../options/buildOptions';\nimport { loadBabelOptions } from '../options/loadBabelOptions';\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { getPluginKey } from '../utils/getPluginKey';\n\nimport type { IEntrypointCode, IIgnoredEntrypoint } from './Entrypoint.types';\nimport type { Services } from './types';\nimport { stripQueryAndHash } from '../utils/parseRequest';\n\nexport function getMatchedRule(\n rules: EvalRule[],\n filename: string,\n code: string\n): EvalRule {\n for (let i = rules.length - 1; i >= 0; i--) {\n const rule = rules[i];\n if (!rule.test) {\n return rule;\n }\n\n if (typeof rule.test === 'function' && rule.test(filename, code)) {\n return rule;\n }\n\n if (rule.test instanceof RegExp && rule.test.test(filename)) {\n return rule;\n }\n }\n\n return { action: 'ignore' };\n}\n\nexport function parseFile(\n babel: Core,\n filename: string,\n originalCode: string,\n parseConfig: TransformOptions\n): File {\n const log = logger.extend('transform:parse').extend(getFileIdx(filename));\n\n const parseResult = babel.parseSync(originalCode, parseConfig);\n if (!parseResult) {\n throw new Error(`Failed to parse ${filename}`);\n }\n\n log('stage-1', `${filename} has been parsed`);\n\n return parseResult;\n}\n\nconst isModuleResolver = (plugin: PluginItem) => {\n const key = getPluginKey(plugin);\n if (!key) return false;\n\n if (['module-resolver', 'babel-plugin-module-resolver'].includes(key)) {\n return true;\n }\n\n return /([\\\\/])babel-plugin-module-resolver\\1/.test(key);\n};\n\nlet moduleResolverWarned = false;\n\nconst normalizeBabelKey = (key: string) => key.replace(/\\\\/g, '/');\n\nconst isBabelPresetTypescript = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'typescript') return true;\n return normalized.includes('preset-typescript');\n};\n\nconst isBabelTransformTypescriptPlugin = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'transform-typescript') return true;\n return normalized.includes('plugin-transform-typescript');\n};\n\nconst withAllowDeclareFields = (item: PluginItem): PluginItem => {\n if (!Array.isArray(item)) {\n return [item, { allowDeclareFields: true }];\n }\n\n const [target, rawOptions, ...rest] = item;\n const options =\n typeof rawOptions === 'object' &&\n rawOptions !== null &&\n !Array.isArray(rawOptions)\n ? rawOptions\n : {};\n\n if ('allowDeclareFields' in options) {\n return item;\n }\n\n return [target, { ...options, allowDeclareFields: true }, ...rest];\n};\n\ntype AllowDeclareFieldsPatchScope = 'top' | 'env' | 'override';\n\nconst ensureAllowDeclareFieldsInBabelOptions = (\n babelOptions: TransformOptions,\n scope: AllowDeclareFieldsPatchScope = 'top'\n): TransformOptions => {\n let presetsChanged = false;\n let pluginsChanged = false;\n let overridesChanged = false;\n let envChanged = false;\n\n const presets = babelOptions.presets?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelPresetTypescript(key)) {\n return item;\n }\n\n presetsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const plugins = babelOptions.plugins?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelTransformTypescriptPlugin(key)) {\n return item;\n }\n\n pluginsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const { overrides: baseOverrides } = babelOptions;\n let overrides = baseOverrides;\n if (scope === 'top' && baseOverrides) {\n const patchedOverrides = baseOverrides.map((override) =>\n ensureAllowDeclareFieldsInBabelOptions(\n override as TransformOptions,\n 'override'\n )\n );\n\n if (\n patchedOverrides.some(\n (patchedOverride, idx) => patchedOverride !== baseOverrides[idx]\n )\n ) {\n overridesChanged = true;\n overrides = patchedOverrides;\n }\n }\n\n const { env: baseEnv } = babelOptions;\n let env = baseEnv;\n if (scope === 'top' && baseEnv) {\n const entries = Object.entries(baseEnv);\n const patchedEntries = entries.map(([envName, envOptions]) => [\n envName,\n envOptions\n ? ensureAllowDeclareFieldsInBabelOptions(envOptions, 'env')\n : envOptions,\n ]) as Array<[string, TransformOptions | null | undefined]>;\n\n if (\n patchedEntries.some(([, patched], idx) => patched !== entries[idx][1])\n ) {\n envChanged = true;\n env = Object.fromEntries(patchedEntries);\n }\n }\n\n if (!presetsChanged && !pluginsChanged && !overridesChanged && !envChanged) {\n return babelOptions;\n }\n\n const next: TransformOptions = { ...babelOptions };\n if (presetsChanged) next.presets = presets;\n if (pluginsChanged) next.plugins = plugins;\n if (overridesChanged) next.overrides = overrides;\n if (envChanged) next.env = env;\n\n return next;\n};\n\nfunction buildConfigs(\n services: Services,\n name: string,\n pluginOptions: StrictOptions,\n babelOptions: TransformOptions | undefined\n): {\n evalConfig: TransformOptions;\n parseConfig: TransformOptions;\n} {\n const { babel, options } = services;\n\n const commonOptions = {\n ast: true,\n filename: name,\n inputSourceMap: options.inputSourceMap,\n root: options.root,\n sourceFileName: name,\n sourceMaps: true,\n };\n\n const isTypescriptFile =\n name.endsWith('.ts') ||\n name.endsWith('.tsx') ||\n name.endsWith('.mts') ||\n name.endsWith('.cts');\n\n let rawConfig = buildOptions(\n pluginOptions?.babelOptions,\n babelOptions,\n commonOptions\n );\n\n if (isTypescriptFile) {\n rawConfig = ensureAllowDeclareFieldsInBabelOptions(rawConfig);\n }\n\n const useBabelConfigs = isFeatureEnabled(\n pluginOptions.features,\n 'useBabelConfigs',\n name\n );\n\n if (!useBabelConfigs) {\n rawConfig = {\n ...rawConfig,\n configFile: false,\n };\n }\n\n const parseConfig = loadBabelOptions(babel, name, {\n babelrc: useBabelConfigs,\n ...rawConfig,\n });\n\n const parseHasModuleResolver = parseConfig.plugins?.some(isModuleResolver);\n const rawHasModuleResolver = rawConfig.plugins?.some(isModuleResolver);\n\n if (parseHasModuleResolver && !rawHasModuleResolver) {\n if (!moduleResolverWarned) {\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] ${name} has a module-resolver plugin in its babelrc, but it is not present ` +\n `in the babelOptions for the wyw-in-js plugin. This works for now but will be an error in the future. ` +\n `Please add the module-resolver plugin to the babelOptions for the wyw-in-js plugin.`\n );\n\n moduleResolverWarned = true;\n }\n\n rawConfig = {\n ...rawConfig,\n plugins: [\n ...(parseConfig.plugins?.filter((plugin) => isModuleResolver(plugin)) ??\n []),\n ...(rawConfig.plugins ?? []),\n ],\n };\n }\n\n const evalConfig = loadBabelOptions(babel, name, {\n babelrc: false,\n ...rawConfig,\n });\n\n return {\n evalConfig,\n parseConfig,\n };\n}\n\nexport function loadAndParse(\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n): IEntrypointCode | IIgnoredEntrypoint {\n const {\n babel,\n eventEmitter,\n options: { pluginOptions },\n } = services;\n\n const filename = stripQueryAndHash(name);\n const extension = extname(filename);\n\n if (!pluginOptions.extensions.includes(extension)) {\n log(\n '[createEntrypoint] %s is ignored. If you want it to be processed, you should add \\'%s\\' to the \"extensions\" option.',\n filename,\n extension\n );\n\n return {\n code: isAbsolute(filename) ? loadedCode : '',\n evaluator: 'ignored',\n reason: 'extension',\n };\n }\n\n const code = loadedCode ?? readFileSync(filename, 'utf-8');\n\n const { action, babelOptions } = getMatchedRule(\n pluginOptions.rules,\n filename,\n code\n );\n\n let ast: File | undefined;\n\n const { evalConfig, parseConfig } = buildConfigs(\n services,\n filename,\n pluginOptions,\n babelOptions\n );\n\n const getOrParse = () => {\n if (ast) return ast;\n ast = eventEmitter.perf('parseFile', () =>\n parseFile(babel, name, code, parseConfig)\n );\n\n return ast;\n };\n\n if (action === 'ignore') {\n log('[createEntrypoint] %s is ignored by rule', name);\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator: 'ignored',\n reason: 'rule',\n };\n }\n\n const evaluator: Evaluator =\n typeof action === 'function'\n ? action\n : require(\n require.resolve(action, {\n paths: [dirname(filename)],\n })\n ).default;\n\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator,\n evalConfig,\n };\n}\n\nexport function getStack(entrypoint: ParentEntrypoint) {\n if (!entrypoint) return [];\n\n const stack = [entrypoint.name];\n\n let { parents } = entrypoint;\n while (parents.length) {\n stack.push(parents[0].name);\n parents = parents[0].parents;\n }\n\n return stack;\n}\n\nexport function mergeOnly(a: string[], b: string[]) {\n const result = new Set(a);\n b.forEach((item) => result.add(item));\n return [...result].filter((i) => i).sort();\n}\n\nexport const isSuperSet = <T>(a: (T | '*')[], b: (T | '*')[]) => {\n if (a.includes('*')) return true;\n if (b.length === 0) return true;\n const aSet = new Set(a);\n return b.every((item) => aSet.has(item));\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Entrypoint.helpers.js","names":["readFileSync","dirname","extname","isAbsolute","logger","isFeatureEnabled","buildOptions","loadBabelOptions","getFileIdx","getPluginKey","stripQueryAndHash","getMatchedRule","rules","filename","code","i","length","rule","test","RegExp","action","parseFile","babel","originalCode","parseConfig","log","extend","parseResult","parseSync","Error","isModuleResolver","plugin","key","includes","moduleResolverWarned","normalizeBabelKey","replace","isBabelPresetTypescript","normalized","isBabelTransformTypescriptPlugin","withAllowDeclareFields","item","Array","isArray","allowDeclareFields","target","rawOptions","rest","options","ensureAllowDeclareFieldsInBabelOptions","babelOptions","scope","presetsChanged","pluginsChanged","overridesChanged","envChanged","presets","map","plugins","overrides","baseOverrides","patchedOverrides","override","some","patchedOverride","idx","env","baseEnv","entries","Object","patchedEntries","envName","envOptions","patched","fromEntries","next","buildConfigs","services","name","pluginOptions","commonOptions","ast","inputSourceMap","root","sourceFileName","sourceMaps","isTypescriptFile","endsWith","rawConfig","useBabelConfigs","features","configFile","babelrc","parseHasModuleResolver","rawHasModuleResolver","console","warn","filter","evalConfig","loadAndParse","loadedCode","eventEmitter","extension","extensions","evaluator","reason","undefined","cachedEntrypoint","cache","get","initialCode","getOrParse","perf","require","resolve","paths","default","getStack","entrypoint","stack","parents","push","mergeOnly","a","b","result","Set","forEach","add","sort","isSuperSet","aSet","every","has"],"sources":["../../src/transform/Entrypoint.helpers.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { dirname, extname, isAbsolute } from 'path';\n\nimport type { TransformOptions, PluginItem } from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type {\n Debugger,\n EvalRule,\n Evaluator,\n StrictOptions,\n} from '@wyw-in-js/shared';\nimport { logger, isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport { buildOptions } from '../options/buildOptions';\nimport { loadBabelOptions } from '../options/loadBabelOptions';\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { getPluginKey } from '../utils/getPluginKey';\n\nimport type { IEntrypointCode, IIgnoredEntrypoint } from './Entrypoint.types';\nimport type { Services } from './types';\nimport { stripQueryAndHash } from '../utils/parseRequest';\n\nexport function getMatchedRule(\n rules: EvalRule[],\n filename: string,\n code: string\n): EvalRule {\n for (let i = rules.length - 1; i >= 0; i--) {\n const rule = rules[i];\n if (!rule.test) {\n return rule;\n }\n\n if (typeof rule.test === 'function' && rule.test(filename, code)) {\n return rule;\n }\n\n if (rule.test instanceof RegExp && rule.test.test(filename)) {\n return rule;\n }\n }\n\n return { action: 'ignore' };\n}\n\nexport function parseFile(\n babel: Core,\n filename: string,\n originalCode: string,\n parseConfig: TransformOptions\n): File {\n const log = logger.extend('transform:parse').extend(getFileIdx(filename));\n\n const parseResult = babel.parseSync(originalCode, parseConfig);\n if (!parseResult) {\n throw new Error(`Failed to parse ${filename}`);\n }\n\n log('stage-1', `${filename} has been parsed`);\n\n return parseResult;\n}\n\nconst isModuleResolver = (plugin: PluginItem) => {\n const key = getPluginKey(plugin);\n if (!key) return false;\n\n if (['module-resolver', 'babel-plugin-module-resolver'].includes(key)) {\n return true;\n }\n\n return /([\\\\/])babel-plugin-module-resolver\\1/.test(key);\n};\n\nlet moduleResolverWarned = false;\n\nconst normalizeBabelKey = (key: string) => key.replace(/\\\\/g, '/');\n\nconst isBabelPresetTypescript = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'typescript') return true;\n return normalized.includes('preset-typescript');\n};\n\nconst isBabelTransformTypescriptPlugin = (key: string) => {\n const normalized = normalizeBabelKey(key);\n\n if (normalized === 'transform-typescript') return true;\n return normalized.includes('plugin-transform-typescript');\n};\n\nconst withAllowDeclareFields = (item: PluginItem): PluginItem => {\n if (!Array.isArray(item)) {\n return [item, { allowDeclareFields: true }];\n }\n\n const [target, rawOptions, ...rest] = item;\n const options =\n typeof rawOptions === 'object' &&\n rawOptions !== null &&\n !Array.isArray(rawOptions)\n ? rawOptions\n : {};\n\n if ('allowDeclareFields' in options) {\n return item;\n }\n\n return [target, { ...options, allowDeclareFields: true }, ...rest];\n};\n\ntype AllowDeclareFieldsPatchScope = 'top' | 'env' | 'override';\n\nconst ensureAllowDeclareFieldsInBabelOptions = (\n babelOptions: TransformOptions,\n scope: AllowDeclareFieldsPatchScope = 'top'\n): TransformOptions => {\n let presetsChanged = false;\n let pluginsChanged = false;\n let overridesChanged = false;\n let envChanged = false;\n\n const presets = babelOptions.presets?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelPresetTypescript(key)) {\n return item;\n }\n\n presetsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const plugins = babelOptions.plugins?.map((item) => {\n const key = getPluginKey(item);\n if (!key || !isBabelTransformTypescriptPlugin(key)) {\n return item;\n }\n\n pluginsChanged = true;\n return withAllowDeclareFields(item);\n });\n\n const { overrides: baseOverrides } = babelOptions;\n let overrides = baseOverrides;\n if (scope === 'top' && baseOverrides) {\n const patchedOverrides = baseOverrides.map((override) =>\n ensureAllowDeclareFieldsInBabelOptions(\n override as TransformOptions,\n 'override'\n )\n );\n\n if (\n patchedOverrides.some(\n (patchedOverride, idx) => patchedOverride !== baseOverrides[idx]\n )\n ) {\n overridesChanged = true;\n overrides = patchedOverrides;\n }\n }\n\n const { env: baseEnv } = babelOptions;\n let env = baseEnv;\n if (scope === 'top' && baseEnv) {\n const entries = Object.entries(baseEnv);\n const patchedEntries = entries.map(([envName, envOptions]) => [\n envName,\n envOptions\n ? ensureAllowDeclareFieldsInBabelOptions(envOptions, 'env')\n : envOptions,\n ]) as Array<[string, TransformOptions | null | undefined]>;\n\n if (\n patchedEntries.some(([, patched], idx) => patched !== entries[idx][1])\n ) {\n envChanged = true;\n env = Object.fromEntries(patchedEntries);\n }\n }\n\n if (!presetsChanged && !pluginsChanged && !overridesChanged && !envChanged) {\n return babelOptions;\n }\n\n const next: TransformOptions = { ...babelOptions };\n if (presetsChanged) next.presets = presets;\n if (pluginsChanged) next.plugins = plugins;\n if (overridesChanged) next.overrides = overrides;\n if (envChanged) next.env = env;\n\n return next;\n};\n\nfunction buildConfigs(\n services: Services,\n name: string,\n pluginOptions: StrictOptions,\n babelOptions: TransformOptions | undefined\n): {\n evalConfig: TransformOptions;\n parseConfig: TransformOptions;\n} {\n const { babel, options } = services;\n\n const commonOptions = {\n ast: true,\n filename: name,\n inputSourceMap: options.inputSourceMap,\n root: options.root,\n sourceFileName: name,\n sourceMaps: true,\n };\n\n const isTypescriptFile =\n name.endsWith('.ts') ||\n name.endsWith('.tsx') ||\n name.endsWith('.mts') ||\n name.endsWith('.cts');\n\n let rawConfig = buildOptions(\n pluginOptions?.babelOptions,\n babelOptions,\n commonOptions\n );\n\n if (isTypescriptFile) {\n rawConfig = ensureAllowDeclareFieldsInBabelOptions(rawConfig);\n }\n\n const useBabelConfigs = isFeatureEnabled(\n pluginOptions.features,\n 'useBabelConfigs',\n name\n );\n\n if (!useBabelConfigs) {\n rawConfig = {\n ...rawConfig,\n configFile: false,\n };\n }\n\n const parseConfig = loadBabelOptions(babel, name, {\n babelrc: useBabelConfigs,\n ...rawConfig,\n });\n\n const parseHasModuleResolver = parseConfig.plugins?.some(isModuleResolver);\n const rawHasModuleResolver = rawConfig.plugins?.some(isModuleResolver);\n\n if (parseHasModuleResolver && !rawHasModuleResolver) {\n if (!moduleResolverWarned) {\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] ${name} has a module-resolver plugin in its babelrc, but it is not present ` +\n `in the babelOptions for the wyw-in-js plugin. This works for now but will be an error in the future. ` +\n `Please add the module-resolver plugin to the babelOptions for the wyw-in-js plugin.`\n );\n\n moduleResolverWarned = true;\n }\n\n rawConfig = {\n ...rawConfig,\n plugins: [\n ...(parseConfig.plugins?.filter((plugin) => isModuleResolver(plugin)) ??\n []),\n ...(rawConfig.plugins ?? []),\n ],\n };\n }\n\n const evalConfig = loadBabelOptions(babel, name, {\n babelrc: false,\n ...rawConfig,\n });\n\n return {\n evalConfig,\n parseConfig,\n };\n}\n\nexport function loadAndParse(\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n): IEntrypointCode | IIgnoredEntrypoint {\n const {\n babel,\n eventEmitter,\n options: { pluginOptions },\n } = services;\n\n const filename = stripQueryAndHash(name);\n const extension = extname(filename);\n\n if (!pluginOptions.extensions.includes(extension)) {\n log(\n '[createEntrypoint] %s is ignored. If you want it to be processed, you should add \\'%s\\' to the \"extensions\" option.',\n filename,\n extension\n );\n\n return {\n code: isAbsolute(filename) ? loadedCode : '',\n evaluator: 'ignored',\n reason: 'extension',\n };\n }\n\n let code = loadedCode;\n\n if (code === undefined) {\n const cachedEntrypoint = services.cache.get('entrypoints', name);\n if (\n cachedEntrypoint &&\n 'initialCode' in cachedEntrypoint &&\n typeof cachedEntrypoint.initialCode === 'string'\n ) {\n code = cachedEntrypoint.initialCode;\n }\n }\n\n code ??= readFileSync(filename, 'utf-8');\n\n const { action, babelOptions } = getMatchedRule(\n pluginOptions.rules,\n filename,\n code\n );\n\n let ast: File | undefined;\n\n const { evalConfig, parseConfig } = buildConfigs(\n services,\n filename,\n pluginOptions,\n babelOptions\n );\n\n const getOrParse = () => {\n if (ast) return ast;\n ast = eventEmitter.perf('parseFile', () =>\n parseFile(babel, name, code, parseConfig)\n );\n\n return ast;\n };\n\n if (action === 'ignore') {\n log('[createEntrypoint] %s is ignored by rule', name);\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator: 'ignored',\n reason: 'rule',\n };\n }\n\n const evaluator: Evaluator =\n typeof action === 'function'\n ? action\n : require(\n require.resolve(action, {\n paths: [dirname(filename)],\n })\n ).default;\n\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator,\n evalConfig,\n };\n}\n\nexport function getStack(entrypoint: ParentEntrypoint) {\n if (!entrypoint) return [];\n\n const stack = [entrypoint.name];\n\n let { parents } = entrypoint;\n while (parents.length) {\n stack.push(parents[0].name);\n parents = parents[0].parents;\n }\n\n return stack;\n}\n\nexport function mergeOnly(a: string[], b: string[]) {\n const result = new Set(a);\n b.forEach((item) => result.add(item));\n return [...result].filter((i) => i).sort();\n}\n\nexport const isSuperSet = <T>(a: (T | '*')[], b: (T | '*')[]) => {\n if (a.includes('*')) return true;\n if (b.length === 0) return true;\n const aSet = new Set(a);\n return b.every((item) => aSet.has(item));\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -33,7 +33,7 @@ export class Entrypoint extends BaseEntrypoint {
|
|
|
33
33
|
this.dependencies = dependencies;
|
|
34
34
|
this.loadedAndParsed = loadedAndParsed ?? services.loadAndParseFn(services, name, initialCode, parents[0]?.log ?? services.log);
|
|
35
35
|
if (this.loadedAndParsed.code !== undefined) {
|
|
36
|
-
services.cache.invalidateIfChanged(name, this.loadedAndParsed.code);
|
|
36
|
+
services.cache.invalidateIfChanged(name, this.loadedAndParsed.code, undefined, this.initialCode === undefined ? 'fs' : 'loaded');
|
|
37
37
|
}
|
|
38
38
|
const code = this.loadedAndParsed.evaluator === 'ignored' ? '[IGNORED]' : this.originalCode || EMPTY_FILE;
|
|
39
39
|
this.log.extend('source')('created %s (%o)\n%s', name, only, code);
|
|
@@ -92,7 +92,7 @@ export class Entrypoint extends BaseEntrypoint {
|
|
|
92
92
|
cache
|
|
93
93
|
} = services;
|
|
94
94
|
const cached = cache.get('entrypoints', name);
|
|
95
|
-
const changed = loadedCode !== undefined ? cache.invalidateIfChanged(name, loadedCode) : false;
|
|
95
|
+
const changed = loadedCode !== undefined ? cache.invalidateIfChanged(name, loadedCode, undefined, 'loaded') : false;
|
|
96
96
|
if (!cached?.evaluated && cached?.ignored) {
|
|
97
97
|
return ['cached', cached];
|
|
98
98
|
}
|
|
@@ -177,7 +177,9 @@ export class Entrypoint extends BaseEntrypoint {
|
|
|
177
177
|
createEvaluated() {
|
|
178
178
|
const evaluatedOnly = mergeOnly(this.evaluatedOnly, this.only);
|
|
179
179
|
this.log('create EvaluatedEntrypoint for %o', evaluatedOnly);
|
|
180
|
-
|
|
180
|
+
const evaluated = new EvaluatedEntrypoint(this.services, evaluatedOnly, this.exportsProxy, this.generation + 1, this.name, this.only, this.parents, this.dependencies);
|
|
181
|
+
evaluated.initialCode = this.initialCode;
|
|
182
|
+
return evaluated;
|
|
181
183
|
}
|
|
182
184
|
getDependency(name) {
|
|
183
185
|
return this.dependencies.get(name);
|