@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.
Files changed (77) hide show
  1. package/esm/cache.js +100 -7
  2. package/esm/cache.js.map +1 -1
  3. package/esm/debug/fileReporter.js.map +1 -1
  4. package/esm/module.js +51 -2
  5. package/esm/module.js.map +1 -1
  6. package/esm/plugins/shaker.js +152 -13
  7. package/esm/plugins/shaker.js.map +1 -1
  8. package/esm/shaker.js +51 -23
  9. package/esm/shaker.js.map +1 -1
  10. package/esm/transform/BaseEntrypoint.js +3 -1
  11. package/esm/transform/BaseEntrypoint.js.map +1 -1
  12. package/esm/transform/Entrypoint.js +60 -17
  13. package/esm/transform/Entrypoint.js.map +1 -1
  14. package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
  15. package/esm/transform/barrelManifest.js +291 -0
  16. package/esm/transform/barrelManifest.js.map +1 -0
  17. package/esm/transform/generators/getExports.js +5 -0
  18. package/esm/transform/generators/getExports.js.map +1 -1
  19. package/esm/transform/generators/processEntrypoint.js +27 -1
  20. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  21. package/esm/transform/generators/resolveImports.js +29 -5
  22. package/esm/transform/generators/resolveImports.js.map +1 -1
  23. package/esm/transform/generators/rewriteBarrelImports.js +733 -0
  24. package/esm/transform/generators/rewriteBarrelImports.js.map +1 -0
  25. package/esm/transform/generators/transform.js +154 -21
  26. package/esm/transform/generators/transform.js.map +1 -1
  27. package/esm/transform/types.js.map +1 -1
  28. package/lib/cache.js +103 -7
  29. package/lib/cache.js.map +1 -1
  30. package/lib/debug/fileReporter.js.map +1 -1
  31. package/lib/module.js +51 -2
  32. package/lib/module.js.map +1 -1
  33. package/lib/plugins/shaker.js +152 -13
  34. package/lib/plugins/shaker.js.map +1 -1
  35. package/lib/shaker.js +58 -26
  36. package/lib/shaker.js.map +1 -1
  37. package/lib/transform/BaseEntrypoint.js +3 -1
  38. package/lib/transform/BaseEntrypoint.js.map +1 -1
  39. package/lib/transform/Entrypoint.js +61 -17
  40. package/lib/transform/Entrypoint.js.map +1 -1
  41. package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
  42. package/lib/transform/barrelManifest.js +300 -0
  43. package/lib/transform/barrelManifest.js.map +1 -0
  44. package/lib/transform/generators/getExports.js +5 -0
  45. package/lib/transform/generators/getExports.js.map +1 -1
  46. package/lib/transform/generators/processEntrypoint.js +27 -1
  47. package/lib/transform/generators/processEntrypoint.js.map +1 -1
  48. package/lib/transform/generators/resolveImports.js +29 -5
  49. package/lib/transform/generators/resolveImports.js.map +1 -1
  50. package/lib/transform/generators/rewriteBarrelImports.js +743 -0
  51. package/lib/transform/generators/rewriteBarrelImports.js.map +1 -0
  52. package/lib/transform/generators/transform.js +158 -22
  53. package/lib/transform/generators/transform.js.map +1 -1
  54. package/lib/transform/types.js.map +1 -1
  55. package/package.json +8 -4
  56. package/types/cache.d.ts +16 -2
  57. package/types/cache.js +111 -7
  58. package/types/debug/fileReporter.d.ts +1 -0
  59. package/types/module.d.ts +3 -0
  60. package/types/module.js +57 -2
  61. package/types/plugins/shaker.js +161 -16
  62. package/types/shaker.d.ts +10 -1
  63. package/types/shaker.js +56 -28
  64. package/types/transform/BaseEntrypoint.d.ts +3 -1
  65. package/types/transform/BaseEntrypoint.js +5 -1
  66. package/types/transform/Entrypoint.d.ts +9 -0
  67. package/types/transform/Entrypoint.js +73 -20
  68. package/types/transform/EvaluatedEntrypoint.d.ts +2 -0
  69. package/types/transform/barrelManifest.d.ts +42 -0
  70. package/types/transform/barrelManifest.js +300 -0
  71. package/types/transform/generators/getExports.js +5 -0
  72. package/types/transform/generators/processEntrypoint.js +26 -1
  73. package/types/transform/generators/resolveImports.js +29 -5
  74. package/types/transform/generators/rewriteBarrelImports.d.ts +15 -0
  75. package/types/transform/generators/rewriteBarrelImports.js +815 -0
  76. package/types/transform/generators/transform.js +148 -19
  77. package/types/transform/types.d.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"shaker.js","names":["_path","_interopRequireDefault","require","_shared","_collectExportsAndImports","_getFileIdx","_isRemoved","_scopeHelpers","_traversalCache","_parseRequest","_importOverrides","e","__esModule","default","warnedDynamicImportFiles","Set","getNonParamBinding","exportPath","name","_exportPath$scope$par","_exportPath$scope$par2","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","isRemoved","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","_constantViolations","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","reference","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","logger","extend","pre","file","filename","opts","log","getFileIdx","join","onlyExportsSet","shouldKeepOverride","override","hasImportOverride","Object","keys","cache","Map","source","_getImportOverride","cached","strippedSource","stripQueryAndHash","direct","getImportOverride","result","set","isFileImport","startsWith","pathLib","isAbsolute","resolved","syncResolve","key","toImportKey","collected","collectExportsAndImports","imports","sideEffectImports","sideEffectImport","values","reexports","hasWywPreval","__wywPreval","hasDefault","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","findActionForNode","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","dereference","applyAction","removeWithRelated","unreferenced","getAllBindings","referenced","violation","visitor","post","dynamicImportWarningsEnabled","Boolean","process","env","WYW_WARN_DYNAMIC_IMPORTS","dynamicImports","imp","type","sources","Array","from","sort","sourcesToWarn","shouldWarn","_getImportOverride2","importKey","overrideKeys","item","index","array","firstIndexForKey","findIndex","warning","console","warn","processedImports","addImport","metadata","wywEvaluator","invalidateTraversalCache"],"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":[]}
1
+ {"version":3,"file":"shaker.js","names":["_path","_interopRequireDefault","require","_shared","_collectExportsAndImports","_getFileIdx","_isRemoved","_scopeHelpers","_traversalCache","_parseRequest","_importOverrides","e","__esModule","default","warnedDynamicImportFiles","Set","getNonParamBinding","exportPath","name","_exportPath$scope$par","_exportPath$scope$par2","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","isTSEnumDeclaration","withoutRemoved","items","filter","local","isRemoved","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","_constantViolations","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","reference","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","getExportPathsForVariableDeclaration","exportPaths","Object","keys","getOuterBindingIdentifiers","includes","getDeclaratorExportLiveness","bindingNames","liveness","isAlive","has","hasRuntimeReferencesToEnum","path","enumId","program","getProgramParent","hasReference","traverse","Identifier","ancestor","isTSType","isFlowType","isReferencedIdentifier","localBinding","stop","stripExportKeepDeclaration","exportDeclaration","isExportNamedDeclaration","cloneNode","isVariableDeclaration","declarators","staleExportPaths","segments","clonedDeclarator","currentSegment","replaceWithMultiple","map","groupedDeclarators","groupedDeclaration","exportNamedDeclaration","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","logger","extend","pre","file","filename","opts","log","getFileIdx","join","onlyExportsSet","shouldKeepOverride","override","hasImportOverride","cache","Map","source","_getImportOverride","cached","strippedSource","stripQueryAndHash","direct","getImportOverride","result","set","isFileImport","startsWith","pathLib","isAbsolute","resolved","syncResolve","key","toImportKey","collected","collectExportsAndImports","imports","sideEffectImports","sideEffectImport","values","reexports","hasWywPreval","__wywPreval","hasDefault","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","findActionForNode","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","dereference","strippedEnum","stalePath","strippedWithBlocking","strippedWithoutBlocking","applyAction","removeWithRelated","crawl","unreferenced","getAllBindings","referenced","isArrayPattern","isObjectPattern","violation","visitor","post","dynamicImportWarningsEnabled","Boolean","process","env","WYW_WARN_DYNAMIC_IMPORTS","dynamicImports","imp","type","sources","Array","from","sort","sourcesToWarn","shouldWarn","_getImportOverride2","importKey","overrideKeys","item","index","array","firstIndexForKey","findIndex","warning","console","warn","processedImports","addImport","metadata","wywEvaluator","invalidateTraversalCache"],"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 VariableDeclaration,\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 if (exportPath.isTSEnumDeclaration()) {\n return getNonParamBinding(exportPath, exportPath.node.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 getExportPathsForVariableDeclaration(\n declaration: NodePath<VariableDeclaration>,\n exports: Exports\n): NodePath[] {\n const exportPaths: NodePath[] = [];\n\n declaration.get('declarations').forEach((declarator) => {\n Object.keys(declarator.getOuterBindingIdentifiers()).forEach((name) => {\n const exportPath = exports[name];\n if (exportPath && !exportPaths.includes(exportPath)) {\n exportPaths.push(exportPath);\n }\n });\n });\n\n return exportPaths;\n}\n\nfunction getDeclaratorExportLiveness(\n declarator: NodePath<VariableDeclarator>,\n exports: Exports,\n aliveExports: Set<NodePath>\n): boolean | null {\n const bindingNames = Object.keys(declarator.getOuterBindingIdentifiers());\n if (bindingNames.length === 0) {\n return null;\n }\n\n let liveness: boolean | null = null;\n for (const name of bindingNames) {\n const exportPath = exports[name];\n if (!exportPath) {\n return null;\n }\n\n const isAlive = aliveExports.has(exportPath);\n if (liveness === null) {\n liveness = isAlive;\n } else if (liveness !== isAlive) {\n return null;\n }\n }\n\n return liveness;\n}\n\nfunction hasRuntimeReferencesToEnum(path: NodePath): boolean {\n if (!path.isTSEnumDeclaration()) {\n return false;\n }\n\n const enumId = path.get('id');\n const bindingName = enumId.node.name;\n const program = path.scope.getProgramParent().path as NodePath<Program>;\n\n let hasReference = false;\n program.traverse({\n Identifier(identifier) {\n if (hasReference || identifier.node.name !== bindingName) {\n return;\n }\n\n if (identifier.findParent((ancestor) => ancestor === path)) {\n return;\n }\n\n if (\n identifier.find(\n (ancestor) => ancestor.isTSType() || ancestor.isFlowType()\n )\n ) {\n return;\n }\n\n if (!identifier.isReferencedIdentifier()) {\n return;\n }\n\n const localBinding = identifier.scope.getBinding(bindingName);\n if (localBinding && localBinding.path !== enumId) {\n return;\n }\n\n hasReference = true;\n identifier.stop();\n },\n });\n\n return hasReference;\n}\n\nfunction stripExportKeepDeclaration(\n path: NodePath,\n exports: Exports,\n aliveExports: Set<NodePath>,\n t: Core['types']\n): NodePath[] | null {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return null;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return null;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(t.cloneNode(declaration.node, true));\n return [path];\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n const staleExportPaths = getExportPathsForVariableDeclaration(\n declaration,\n exports\n );\n\n if (declarators.length === 1) {\n exportDeclaration.replaceWith(t.cloneNode(declaration.node, true));\n return staleExportPaths.length > 0 ? staleExportPaths : [path];\n }\n\n const segments: Array<{\n alive: boolean;\n declarators: VariableDeclarator[];\n }> = [];\n\n for (const declarator of declarators) {\n const isAlive = getDeclaratorExportLiveness(\n declarator,\n exports,\n aliveExports\n );\n if (isAlive === null) {\n return null;\n }\n\n const clonedDeclarator = t.cloneNode(declarator.node, true);\n const currentSegment = segments[segments.length - 1];\n if (currentSegment && currentSegment.alive === isAlive) {\n currentSegment.declarators.push(clonedDeclarator);\n } else {\n segments.push({\n alive: isAlive,\n declarators: [clonedDeclarator],\n });\n }\n }\n\n exportDeclaration.replaceWithMultiple(\n segments.map(({ alive, declarators: groupedDeclarators }) => {\n const groupedDeclaration = t.variableDeclaration(\n declaration.node.kind,\n groupedDeclarators\n );\n\n return alive\n ? t.exportNamedDeclaration(groupedDeclaration, [])\n : groupedDeclaration;\n })\n );\n\n return staleExportPaths.length > 0 ? staleExportPaths : [path];\n }\n\n return null;\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 const strippedEnum =\n !deleted.has(path) && hasRuntimeReferencesToEnum(path)\n ? stripExportKeepDeclaration(\n path,\n exports,\n aliveExports,\n babel.types\n )\n : null;\n\n if (strippedEnum) {\n strippedEnum.forEach((stalePath) => {\n deleted.add(stalePath);\n });\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const strippedWithBlocking =\n !deleted.has(path) && binding && blockingReferences.length > 0\n ? stripExportKeepDeclaration(\n path,\n exports,\n aliveExports,\n babel.types\n )\n : null;\n\n if (strippedWithBlocking) {\n strippedWithBlocking.forEach((stalePath) => {\n deleted.add(stalePath);\n });\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 // For variable declaration exports, `path` is the init expression\n // (not the Identifier). Other forDeleting candidates whose init\n // expressions are ancestors of references to this binding can\n // incorrectly filter them out of outerReferences. Those candidates\n // may later survive via stripExportKeepDeclaration, leaving a\n // dangling reference. Strip the export keyword but keep the\n // declaration so the unreferenced sweep removes it only when dead.\n // This only applies to expression paths (variable init), not\n // Identifiers (function/class declarations) which can't be\n // ancestors of external references.\n const strippedWithoutBlocking =\n binding && !path.isIdentifier()\n ? stripExportKeepDeclaration(\n path,\n exports,\n aliveExports,\n babel.types\n )\n : null;\n\n if (strippedWithoutBlocking) {\n strippedWithoutBlocking.forEach((stalePath) => {\n deleted.add(stalePath);\n });\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\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 // stripExportKeepDeclaration replaces ExportNamedDeclaration with\n // its declaration, creating new AST nodes. The old scope bindings\n // become stale (pointing at disconnected paths). Recrawl so\n // getAllBindings() returns fresh bindings with correct .referenced.\n file.scope.crawl();\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 // Skip destructured patterns — removing the declarator would kill\n // sibling bindings that may still be referenced (e.g. export {B}\n // from `const [A, B] = createContext(...)` when only A is dead).\n if (\n !id.isArrayPattern() &&\n !id.isObjectPattern() &&\n !isRemoved(id) &&\n !forDeletingSet.has(id)\n ) {\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":[]}
package/lib/shaker.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.shaker = exports.default = void 0;
6
+ exports.shaker = exports.shakeToESM = exports.emitCommonJS = exports.default = void 0;
7
7
  var _shaker = _interopRequireDefault(require("./plugins/shaker"));
8
8
  var _ShakerMetadata = require("./utils/ShakerMetadata");
9
9
  var _getPluginKey = require("./utils/getPluginKey");
@@ -12,6 +12,7 @@ const hasKeyInList = (plugin, list) => {
12
12
  const pluginKey = (0, _getPluginKey.getPluginKey)(plugin);
13
13
  return pluginKey ? list.some(i => pluginKey.includes(i)) : false;
14
14
  };
15
+ const isCommonJSPlugin = plugin => (0, _getPluginKey.getPluginKey)(plugin) === 'transform-modules-commonjs';
15
16
  const safeResolve = (id, paths) => {
16
17
  try {
17
18
  return require.resolve(id, {
@@ -21,43 +22,74 @@ const safeResolve = (id, paths) => {
21
22
  return null;
22
23
  }
23
24
  };
24
- const shaker = (evalConfig, ast, code, {
25
- highPriorityPlugins,
26
- ...config
27
- }, babel) => {
28
- var _evalConfig$plugins$f, _evalConfig$plugins, _evalConfig$plugins2, _evalConfig$plugins3, _evalConfig$filename, _evalConfig$filename2, _evalConfig$filename3, _evalConfig$filename4, _transformed$code;
25
+ const ensureTypescriptPlugin = (plugins, evalConfig) => {
26
+ var _evalConfig$filename, _evalConfig$filename2, _evalConfig$filename3, _evalConfig$filename4;
27
+ if (!((_evalConfig$filename = evalConfig.filename) !== null && _evalConfig$filename !== void 0 && _evalConfig$filename.endsWith('.ts')) && !((_evalConfig$filename2 = evalConfig.filename) !== null && _evalConfig$filename2 !== void 0 && _evalConfig$filename2.endsWith('.tsx')) && !((_evalConfig$filename3 = evalConfig.filename) !== null && _evalConfig$filename3 !== void 0 && _evalConfig$filename3.endsWith('.mts')) && !((_evalConfig$filename4 = evalConfig.filename) !== null && _evalConfig$filename4 !== void 0 && _evalConfig$filename4.endsWith('.cts'))) {
28
+ return;
29
+ }
30
+ const hasTypescriptPlugin = plugins.some(i => (0, _getPluginKey.getPluginKey)(i) === 'transform-typescript');
31
+ if (hasTypescriptPlugin) {
32
+ return;
33
+ }
34
+ const preset = safeResolve('@babel/preset-typescript', [evalConfig.filename]);
35
+ const plugin = safeResolve('@babel/plugin-transform-typescript', [evalConfig.filename, preset]);
36
+ if (plugin) {
37
+ plugins.push([plugin, {
38
+ allowDeclareFields: true
39
+ }]);
40
+ }
41
+ };
42
+ const createShakerPlugins = (evalConfig, config, includeCommonJS) => {
43
+ var _evalConfig$plugins$f, _evalConfig$plugins, _evalConfig$plugins2;
44
+ const {
45
+ highPriorityPlugins,
46
+ ...shakerConfig
47
+ } = config;
29
48
  const preShakePlugins = (_evalConfig$plugins$f = (_evalConfig$plugins = evalConfig.plugins) === null || _evalConfig$plugins === void 0 ? void 0 : _evalConfig$plugins.filter(i => hasKeyInList(i, highPriorityPlugins))) !== null && _evalConfig$plugins$f !== void 0 ? _evalConfig$plugins$f : [];
30
- const plugins = [...preShakePlugins, [_shaker.default, config], ...((_evalConfig$plugins2 = evalConfig.plugins) !== null && _evalConfig$plugins2 !== void 0 ? _evalConfig$plugins2 : []).filter(i => !hasKeyInList(i, highPriorityPlugins))];
31
- const hasCommonjsPlugin = (_evalConfig$plugins3 = evalConfig.plugins) === null || _evalConfig$plugins3 === void 0 ? void 0 : _evalConfig$plugins3.some(i => (0, _getPluginKey.getPluginKey)(i) === 'transform-modules-commonjs');
32
- if (!hasCommonjsPlugin) {
49
+ const plugins = [...preShakePlugins, [_shaker.default, shakerConfig], ...((_evalConfig$plugins2 = evalConfig.plugins) !== null && _evalConfig$plugins2 !== void 0 ? _evalConfig$plugins2 : []).filter(i => !hasKeyInList(i, highPriorityPlugins) && !isCommonJSPlugin(i))];
50
+ ensureTypescriptPlugin(plugins, evalConfig);
51
+ if (includeCommonJS) {
33
52
  plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));
34
53
  }
35
- if ((_evalConfig$filename = evalConfig.filename) !== null && _evalConfig$filename !== void 0 && _evalConfig$filename.endsWith('.ts') || (_evalConfig$filename2 = evalConfig.filename) !== null && _evalConfig$filename2 !== void 0 && _evalConfig$filename2.endsWith('.tsx') || (_evalConfig$filename3 = evalConfig.filename) !== null && _evalConfig$filename3 !== void 0 && _evalConfig$filename3.endsWith('.mts') || (_evalConfig$filename4 = evalConfig.filename) !== null && _evalConfig$filename4 !== void 0 && _evalConfig$filename4.endsWith('.cts')) {
36
- var _evalConfig$plugins4;
37
- const hasTypescriptPlugin = (_evalConfig$plugins4 = evalConfig.plugins) === null || _evalConfig$plugins4 === void 0 ? void 0 : _evalConfig$plugins4.some(i => (0, _getPluginKey.getPluginKey)(i) === 'transform-typescript');
38
- if (!hasTypescriptPlugin) {
39
- const preset = safeResolve('@babel/preset-typescript', [evalConfig.filename]);
40
- const plugin = safeResolve('@babel/plugin-transform-typescript', [evalConfig.filename, preset]);
41
- if (plugin) {
42
- plugins.push([plugin, {
43
- allowDeclareFields: true
44
- }]);
45
- }
46
- }
47
- }
48
- const transformOptions = {
54
+ return plugins;
55
+ };
56
+ const shakeToESM = (evalConfig, ast, code, config, babel) => {
57
+ var _transformed$code;
58
+ const transformed = babel.transformFromAstSync(ast, code, {
49
59
  ...evalConfig,
60
+ ast: true,
50
61
  caller: {
51
62
  name: 'wyw-in-js'
52
63
  },
53
- plugins
54
- };
55
- const transformed = babel.transformFromAstSync(ast, code, transformOptions);
64
+ plugins: createShakerPlugins(evalConfig, config, false)
65
+ });
56
66
  if (!transformed || !(0, _ShakerMetadata.hasShakerMetadata)(transformed.metadata)) {
57
67
  throw new Error(`${evalConfig.filename} has no shaker metadata`);
58
68
  }
59
69
  return [transformed.ast, (_transformed$code = transformed.code) !== null && _transformed$code !== void 0 ? _transformed$code : '', transformed.metadata.wywEvaluator.imports];
60
70
  };
71
+ exports.shakeToESM = shakeToESM;
72
+ const emitCommonJS = (evalConfig, ast, code, babel) => {
73
+ var _transformed$code2;
74
+ const transformed = babel.transformFromAstSync(ast, code, {
75
+ ...evalConfig,
76
+ ast: true,
77
+ caller: {
78
+ name: 'wyw-in-js'
79
+ },
80
+ plugins: [require.resolve('@babel/plugin-transform-modules-commonjs')]
81
+ });
82
+ if (!(transformed !== null && transformed !== void 0 && transformed.ast)) {
83
+ throw new Error('Babel transform failed');
84
+ }
85
+ return [transformed.ast, (_transformed$code2 = transformed.code) !== null && _transformed$code2 !== void 0 ? _transformed$code2 : ''];
86
+ };
87
+ exports.emitCommonJS = emitCommonJS;
88
+ const shaker = (evalConfig, ast, code, config, babel) => {
89
+ const [esmAst, esmCode, imports] = shakeToESM(evalConfig, ast, code, config, babel);
90
+ const [, commonJSCode] = emitCommonJS(evalConfig, esmAst, esmCode, babel);
91
+ return [esmAst, commonJSCode, imports];
92
+ };
61
93
  exports.shaker = shaker;
62
94
  var _default = exports.default = shaker;
63
95
  //# sourceMappingURL=shaker.js.map
package/lib/shaker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"shaker.js","names":["_shaker","_interopRequireDefault","require","_ShakerMetadata","_getPluginKey","e","__esModule","default","hasKeyInList","plugin","list","pluginKey","getPluginKey","some","i","includes","safeResolve","id","paths","resolve","filter","shaker","evalConfig","ast","code","highPriorityPlugins","config","babel","_evalConfig$plugins$f","_evalConfig$plugins","_evalConfig$plugins2","_evalConfig$plugins3","_evalConfig$filename","_evalConfig$filename2","_evalConfig$filename3","_evalConfig$filename4","_transformed$code","preShakePlugins","plugins","shakerPlugin","hasCommonjsPlugin","push","filename","endsWith","_evalConfig$plugins4","hasTypescriptPlugin","preset","allowDeclareFields","transformOptions","caller","name","transformed","transformFromAstSync","hasShakerMetadata","metadata","Error","wywEvaluator","imports","exports","_default"],"sources":["../src/shaker.ts"],"sourcesContent":["import type { TransformOptions, PluginItem } from '@babel/core';\n\nimport type { Evaluator } from '@wyw-in-js/shared';\n\nimport shakerPlugin from './plugins/shaker';\nimport { hasShakerMetadata } from './utils/ShakerMetadata';\nimport { getPluginKey } from './utils/getPluginKey';\n\nconst hasKeyInList = (plugin: PluginItem, list: string[]): boolean => {\n const pluginKey = getPluginKey(plugin);\n return pluginKey ? list.some((i) => pluginKey.includes(i)) : false;\n};\n\nconst safeResolve = (id: string, paths: (string | null)[]): string | null => {\n try {\n return require.resolve(id, {\n paths: paths.filter((i) => i !== null) as string[],\n });\n } catch {\n return null;\n }\n};\n\nexport const shaker: Evaluator = (\n evalConfig,\n ast,\n code,\n { highPriorityPlugins, ...config },\n babel\n) => {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) => hasKeyInList(i, highPriorityPlugins)) ??\n [];\n\n const plugins = [\n ...preShakePlugins,\n [shakerPlugin, config],\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, highPriorityPlugins)\n ),\n ];\n\n const hasCommonjsPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-modules-commonjs'\n );\n\n if (!hasCommonjsPlugin) {\n plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));\n }\n\n if (\n evalConfig.filename?.endsWith('.ts') ||\n evalConfig.filename?.endsWith('.tsx') ||\n evalConfig.filename?.endsWith('.mts') ||\n evalConfig.filename?.endsWith('.cts')\n ) {\n const hasTypescriptPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-typescript'\n );\n\n if (!hasTypescriptPlugin) {\n const preset = safeResolve('@babel/preset-typescript', [\n evalConfig.filename,\n ]);\n const plugin = safeResolve('@babel/plugin-transform-typescript', [\n evalConfig.filename,\n preset,\n ]);\n\n if (plugin) {\n plugins.push([plugin, { allowDeclareFields: true }]);\n }\n }\n }\n\n const transformOptions: TransformOptions = {\n ...evalConfig,\n caller: {\n name: 'wyw-in-js',\n },\n plugins,\n };\n\n const transformed = babel.transformFromAstSync(ast, code, transformOptions);\n\n if (!transformed || !hasShakerMetadata(transformed.metadata)) {\n throw new Error(`${evalConfig.filename} has no shaker metadata`);\n }\n\n return [\n transformed.ast!,\n transformed.code ?? '',\n transformed.metadata.wywEvaluator.imports,\n ];\n};\n\nexport default shaker;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"shaker.js","names":["_shaker","_interopRequireDefault","require","_ShakerMetadata","_getPluginKey","e","__esModule","default","hasKeyInList","plugin","list","pluginKey","getPluginKey","some","i","includes","isCommonJSPlugin","safeResolve","id","paths","resolve","filter","ensureTypescriptPlugin","plugins","evalConfig","_evalConfig$filename","_evalConfig$filename2","_evalConfig$filename3","_evalConfig$filename4","filename","endsWith","hasTypescriptPlugin","preset","push","allowDeclareFields","createShakerPlugins","config","includeCommonJS","_evalConfig$plugins$f","_evalConfig$plugins","_evalConfig$plugins2","highPriorityPlugins","shakerConfig","preShakePlugins","shakerPlugin","shakeToESM","ast","code","babel","_transformed$code","transformed","transformFromAstSync","caller","name","hasShakerMetadata","metadata","Error","wywEvaluator","imports","exports","emitCommonJS","_transformed$code2","shaker","esmAst","esmCode","commonJSCode","_default"],"sources":["../src/shaker.ts"],"sourcesContent":["import type { TransformOptions, PluginItem } from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type { Evaluator, EvaluatorConfig } from '@wyw-in-js/shared';\n\nimport shakerPlugin from './plugins/shaker';\nimport { hasShakerMetadata } from './utils/ShakerMetadata';\nimport { getPluginKey } from './utils/getPluginKey';\n\nconst hasKeyInList = (plugin: PluginItem, list: string[]): boolean => {\n const pluginKey = getPluginKey(plugin);\n return pluginKey ? list.some((i) => pluginKey.includes(i)) : false;\n};\n\nconst isCommonJSPlugin = (plugin: PluginItem): boolean =>\n getPluginKey(plugin) === 'transform-modules-commonjs';\n\nconst safeResolve = (id: string, paths: (string | null)[]): string | null => {\n try {\n return require.resolve(id, {\n paths: paths.filter((i) => i !== null) as string[],\n });\n } catch {\n return null;\n }\n};\n\nconst ensureTypescriptPlugin = (\n plugins: PluginItem[],\n evalConfig: TransformOptions\n) => {\n if (\n !evalConfig.filename?.endsWith('.ts') &&\n !evalConfig.filename?.endsWith('.tsx') &&\n !evalConfig.filename?.endsWith('.mts') &&\n !evalConfig.filename?.endsWith('.cts')\n ) {\n return;\n }\n\n const hasTypescriptPlugin = plugins.some(\n (i) => getPluginKey(i) === 'transform-typescript'\n );\n\n if (hasTypescriptPlugin) {\n return;\n }\n\n const preset = safeResolve('@babel/preset-typescript', [evalConfig.filename]);\n const plugin = safeResolve('@babel/plugin-transform-typescript', [\n evalConfig.filename,\n preset,\n ]);\n\n if (plugin) {\n plugins.push([plugin, { allowDeclareFields: true }]);\n }\n};\n\nconst createShakerPlugins = (\n evalConfig: TransformOptions,\n config: EvaluatorConfig,\n includeCommonJS: boolean\n): PluginItem[] => {\n const { highPriorityPlugins, ...shakerConfig } = config;\n const preShakePlugins =\n evalConfig.plugins?.filter((i) => hasKeyInList(i, highPriorityPlugins)) ??\n [];\n\n const plugins: PluginItem[] = [\n ...preShakePlugins,\n [shakerPlugin, shakerConfig],\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, highPriorityPlugins) && !isCommonJSPlugin(i)\n ),\n ];\n\n ensureTypescriptPlugin(plugins, evalConfig);\n\n if (includeCommonJS) {\n plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));\n }\n\n return plugins;\n};\n\ntype ShakerStageResult = [\n ast: File,\n code: string,\n imports: Map<string, string[]> | null,\n];\n\nexport const shakeToESM = (\n evalConfig: TransformOptions,\n ast: File,\n code: string,\n config: EvaluatorConfig,\n babel: Parameters<Evaluator>[4]\n): ShakerStageResult => {\n const transformed = babel.transformFromAstSync(ast, code, {\n ...evalConfig,\n ast: true,\n caller: {\n name: 'wyw-in-js',\n },\n plugins: createShakerPlugins(evalConfig, config, false),\n });\n\n if (!transformed || !hasShakerMetadata(transformed.metadata)) {\n throw new Error(`${evalConfig.filename} has no shaker metadata`);\n }\n\n return [\n transformed.ast!,\n transformed.code ?? '',\n transformed.metadata.wywEvaluator.imports,\n ];\n};\n\nexport const emitCommonJS = (\n evalConfig: TransformOptions,\n ast: File,\n code: string,\n babel: Parameters<Evaluator>[4]\n): [ast: File, code: string] => {\n const transformed = babel.transformFromAstSync(ast, code, {\n ...evalConfig,\n ast: true,\n caller: {\n name: 'wyw-in-js',\n },\n plugins: [require.resolve('@babel/plugin-transform-modules-commonjs')],\n });\n\n if (!transformed?.ast) {\n throw new Error('Babel transform failed');\n }\n\n return [transformed.ast, transformed.code ?? ''];\n};\n\nexport const shaker: Evaluator = (evalConfig, ast, code, config, babel) => {\n const [esmAst, esmCode, imports] = shakeToESM(\n evalConfig,\n ast,\n code,\n config,\n babel\n );\n const [, commonJSCode] = emitCommonJS(evalConfig, esmAst, esmCode, babel);\n\n return [esmAst, commonJSCode, imports];\n};\n\nexport default shaker;\n"],"mappings":"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","ignoreList":[]}
@@ -116,7 +116,7 @@ class BaseEntrypoint {
116
116
  // eslint-disable-next-line no-plusplus
117
117
  seqId = entrypointSeqId++;
118
118
  #exports;
119
- constructor(services, evaluatedOnly, exports, generation, name, only, parents, dependencies) {
119
+ constructor(services, evaluatedOnly, exports, generation, name, only, parents, dependencies, invalidationDependencies, invalidateOnDependencyChange) {
120
120
  var _parents$0$log$extend, _parents$, _parents$0$seqId, _parents$2;
121
121
  this.services = services;
122
122
  this.evaluatedOnly = evaluatedOnly;
@@ -125,6 +125,8 @@ class BaseEntrypoint {
125
125
  this.only = only;
126
126
  this.parents = parents;
127
127
  this.dependencies = dependencies;
128
+ this.invalidationDependencies = invalidationDependencies;
129
+ this.invalidateOnDependencyChange = invalidateOnDependencyChange;
128
130
  this.idx = (0, _getFileIdx.getFileIdx)(name);
129
131
  this.log = (_parents$0$log$extend = (_parents$ = parents[0]) === null || _parents$ === void 0 ? void 0 : _parents$.log.extend(this.ref, '->')) !== null && _parents$0$log$extend !== void 0 ? _parents$0$log$extend : services.log.extend(this.ref);
130
132
  this.dependencies = dependencies;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseEntrypoint.js","names":["_getFileIdx","require","hasKey","obj","key","VALUES","Symbol","isProxy","createExports","log","exports","lazyFields","Set","Proxy","get","_target","value","Reflect","undefined","defaultValue","default","has","ownKeys","Object","keys","set","delete","defineProperty","descriptor","prev","_descriptor$get","v","call","_descriptor$get2","add","getOwnPropertyDescriptor","enumerable","configurable","EXPORTS","entrypointSeqId","BaseEntrypoint","seqId","constructor","services","evaluatedOnly","generation","name","only","parents","dependencies","_parents$0$log$extend","_parents$","_parents$0$seqId","_parents$2","idx","getFileIdx","extend","ref","isExportsInherited","eventEmitter","entrypointEvent","class","filename","parentId","type","exportsProxy"],"sources":["../../src/transform/BaseEntrypoint.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\n\nimport type { Services } from './types';\nimport type { IEntrypointDependency } from './Entrypoint.types';\n\nconst hasKey = <TKey extends string | symbol>(\n obj: unknown,\n key: TKey\n): obj is Record<TKey, unknown> =>\n (typeof obj === 'object' || typeof obj === 'function') &&\n obj !== null &&\n key in obj;\n\nconst VALUES = Symbol('values');\n\nconst isProxy = (\n obj: unknown\n): obj is { [VALUES]: Record<string | symbol, unknown> } =>\n typeof obj === 'object' && obj !== null && VALUES in obj;\n\nexport const createExports = (log: Debugger) => {\n let exports: Record<string | symbol, unknown> = {};\n const lazyFields = new Set<string | symbol>();\n\n return new Proxy(exports, {\n get: (_target, key) => {\n if (key === VALUES) {\n return exports;\n }\n\n let value: unknown;\n if (key in exports) {\n value = exports[key];\n } else {\n // Support Object.prototype methods on `exports`\n // e.g `exports.hasOwnProperty`\n value = Reflect.get(exports, key);\n }\n\n if (value === undefined && 'default' in exports) {\n const defaultValue = exports.default;\n if (hasKey(defaultValue, key)) {\n log(\n '⚠️ %s has been found in `default`. It indicates that ESM to CJS conversion went wrong.',\n key\n );\n value = defaultValue[key];\n }\n }\n\n if (value !== undefined && lazyFields.has(key)) {\n value = (value as () => unknown)();\n }\n\n log('get %s: %o', key, value);\n return value;\n },\n has: (_target, key) => {\n if (key === VALUES) return true;\n return key in exports;\n },\n ownKeys: () => {\n return Object.keys(exports);\n },\n set: (_target, key, value) => {\n if (key === VALUES) {\n exports = value;\n return true;\n }\n\n if (key !== '__esModule') {\n log('set %s: %o', key, value);\n }\n\n if (value !== undefined) {\n exports[key] = value;\n lazyFields.delete(key);\n }\n\n return true;\n },\n defineProperty: (_target, key, descriptor) => {\n const { value } = descriptor;\n if (value !== undefined) {\n if (key !== '__esModule') {\n log('defineProperty %s with value %o', key, value);\n }\n\n exports[key] = value;\n lazyFields.delete(key);\n\n return true;\n }\n\n if ('get' in descriptor) {\n if (lazyFields.has(key)) {\n const prev = exports[key] as () => void;\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev();\n };\n } else {\n const prev = exports[key];\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev;\n };\n }\n\n lazyFields.add(key);\n log('defineProperty %s with getter', key);\n }\n\n return true;\n },\n getOwnPropertyDescriptor: (_target, key) => {\n if (key in exports)\n return {\n enumerable: true,\n configurable: true,\n };\n\n return undefined;\n },\n });\n};\n\nconst EXPORTS = Symbol('exports');\n\nlet entrypointSeqId = 0;\n\nexport abstract class BaseEntrypoint {\n public static createExports = createExports;\n\n public readonly idx: string;\n\n public readonly log: Debugger;\n\n // eslint-disable-next-line no-plusplus\n public readonly seqId = entrypointSeqId++;\n\n readonly #exports: Record<string | symbol, unknown>;\n\n protected constructor(\n protected services: Services,\n public readonly evaluatedOnly: string[],\n exports: Record<string | symbol, unknown> | undefined,\n public readonly generation: number,\n public readonly name: string,\n public readonly only: string[],\n public readonly parents: ParentEntrypoint[],\n public readonly dependencies: Map<string, IEntrypointDependency>\n ) {\n this.idx = getFileIdx(name);\n this.log =\n parents[0]?.log.extend(this.ref, '->') ?? services.log.extend(this.ref);\n\n this.dependencies = dependencies;\n\n let isExportsInherited = false;\n if (exports) {\n if (isProxy(exports)) {\n this.#exports = exports;\n isExportsInherited = true;\n } else {\n this.#exports = createExports(this.log);\n this.#exports[EXPORTS] = exports;\n }\n this.exports = exports;\n } else {\n this.#exports = BaseEntrypoint.createExports(this.log);\n }\n\n services.eventEmitter.entrypointEvent(this.seqId, {\n class: this.constructor.name,\n evaluatedOnly: this.evaluatedOnly,\n filename: name,\n generation,\n idx: this.idx,\n isExportsInherited,\n only,\n parentId: parents[0]?.seqId ?? null,\n type: 'created',\n });\n }\n\n public get exports(): Record<string | symbol, unknown> {\n if (EXPORTS in this.#exports) {\n return this.#exports[EXPORTS] as Record<string | symbol, unknown>;\n }\n\n return this.#exports;\n }\n\n public set exports(value: unknown) {\n if (isProxy(value)) {\n this.#exports[VALUES] = value[VALUES];\n } else {\n this.#exports[EXPORTS] = value;\n }\n }\n\n public get ref() {\n return `${this.idx}#${this.generation}`;\n }\n\n protected get exportsProxy() {\n return this.#exports;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BaseEntrypoint.js","names":["_getFileIdx","require","hasKey","obj","key","VALUES","Symbol","isProxy","createExports","log","exports","lazyFields","Set","Proxy","get","_target","value","Reflect","undefined","defaultValue","default","has","ownKeys","Object","keys","set","delete","defineProperty","descriptor","prev","_descriptor$get","v","call","_descriptor$get2","add","getOwnPropertyDescriptor","enumerable","configurable","EXPORTS","entrypointSeqId","BaseEntrypoint","seqId","constructor","services","evaluatedOnly","generation","name","only","parents","dependencies","invalidationDependencies","invalidateOnDependencyChange","_parents$0$log$extend","_parents$","_parents$0$seqId","_parents$2","idx","getFileIdx","extend","ref","isExportsInherited","eventEmitter","entrypointEvent","class","filename","parentId","type","exportsProxy"],"sources":["../../src/transform/BaseEntrypoint.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\n\nimport type { Services } from './types';\nimport type { IEntrypointDependency } from './Entrypoint.types';\n\nconst hasKey = <TKey extends string | symbol>(\n obj: unknown,\n key: TKey\n): obj is Record<TKey, unknown> =>\n (typeof obj === 'object' || typeof obj === 'function') &&\n obj !== null &&\n key in obj;\n\nconst VALUES = Symbol('values');\n\nconst isProxy = (\n obj: unknown\n): obj is { [VALUES]: Record<string | symbol, unknown> } =>\n typeof obj === 'object' && obj !== null && VALUES in obj;\n\nexport const createExports = (log: Debugger) => {\n let exports: Record<string | symbol, unknown> = {};\n const lazyFields = new Set<string | symbol>();\n\n return new Proxy(exports, {\n get: (_target, key) => {\n if (key === VALUES) {\n return exports;\n }\n\n let value: unknown;\n if (key in exports) {\n value = exports[key];\n } else {\n // Support Object.prototype methods on `exports`\n // e.g `exports.hasOwnProperty`\n value = Reflect.get(exports, key);\n }\n\n if (value === undefined && 'default' in exports) {\n const defaultValue = exports.default;\n if (hasKey(defaultValue, key)) {\n log(\n '⚠️ %s has been found in `default`. It indicates that ESM to CJS conversion went wrong.',\n key\n );\n value = defaultValue[key];\n }\n }\n\n if (value !== undefined && lazyFields.has(key)) {\n value = (value as () => unknown)();\n }\n\n log('get %s: %o', key, value);\n return value;\n },\n has: (_target, key) => {\n if (key === VALUES) return true;\n return key in exports;\n },\n ownKeys: () => {\n return Object.keys(exports);\n },\n set: (_target, key, value) => {\n if (key === VALUES) {\n exports = value;\n return true;\n }\n\n if (key !== '__esModule') {\n log('set %s: %o', key, value);\n }\n\n if (value !== undefined) {\n exports[key] = value;\n lazyFields.delete(key);\n }\n\n return true;\n },\n defineProperty: (_target, key, descriptor) => {\n const { value } = descriptor;\n if (value !== undefined) {\n if (key !== '__esModule') {\n log('defineProperty %s with value %o', key, value);\n }\n\n exports[key] = value;\n lazyFields.delete(key);\n\n return true;\n }\n\n if ('get' in descriptor) {\n if (lazyFields.has(key)) {\n const prev = exports[key] as () => void;\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev();\n };\n } else {\n const prev = exports[key];\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev;\n };\n }\n\n lazyFields.add(key);\n log('defineProperty %s with getter', key);\n }\n\n return true;\n },\n getOwnPropertyDescriptor: (_target, key) => {\n if (key in exports)\n return {\n enumerable: true,\n configurable: true,\n };\n\n return undefined;\n },\n });\n};\n\nconst EXPORTS = Symbol('exports');\n\nlet entrypointSeqId = 0;\n\nexport abstract class BaseEntrypoint {\n public static createExports = createExports;\n\n public readonly idx: string;\n\n public readonly log: Debugger;\n\n // eslint-disable-next-line no-plusplus\n public readonly seqId = entrypointSeqId++;\n\n readonly #exports: Record<string | symbol, unknown>;\n\n protected constructor(\n protected services: Services,\n public readonly evaluatedOnly: string[],\n exports: Record<string | symbol, unknown> | undefined,\n public readonly generation: number,\n public readonly name: string,\n public readonly only: string[],\n public readonly parents: ParentEntrypoint[],\n public readonly dependencies: Map<string, IEntrypointDependency>,\n public readonly invalidationDependencies: Map<\n string,\n IEntrypointDependency\n >,\n public readonly invalidateOnDependencyChange: Set<string>\n ) {\n this.idx = getFileIdx(name);\n this.log =\n parents[0]?.log.extend(this.ref, '->') ?? services.log.extend(this.ref);\n\n this.dependencies = dependencies;\n\n let isExportsInherited = false;\n if (exports) {\n if (isProxy(exports)) {\n this.#exports = exports;\n isExportsInherited = true;\n } else {\n this.#exports = createExports(this.log);\n this.#exports[EXPORTS] = exports;\n }\n this.exports = exports;\n } else {\n this.#exports = BaseEntrypoint.createExports(this.log);\n }\n\n services.eventEmitter.entrypointEvent(this.seqId, {\n class: this.constructor.name,\n evaluatedOnly: this.evaluatedOnly,\n filename: name,\n generation,\n idx: this.idx,\n isExportsInherited,\n only,\n parentId: parents[0]?.seqId ?? null,\n type: 'created',\n });\n }\n\n public get exports(): Record<string | symbol, unknown> {\n if (EXPORTS in this.#exports) {\n return this.#exports[EXPORTS] as Record<string | symbol, unknown>;\n }\n\n return this.#exports;\n }\n\n public set exports(value: unknown) {\n if (isProxy(value)) {\n this.#exports[VALUES] = value[VALUES];\n } else {\n this.#exports[EXPORTS] = value;\n }\n }\n\n public get ref() {\n return `${this.idx}#${this.generation}`;\n }\n\n protected get exportsProxy() {\n return this.#exports;\n }\n}\n"],"mappings":"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","ignoreList":[]}