@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewriteBarrelImports.js","names":["_generator","_interopRequireDefault","require","t","_interopRequireWildcard","_EventEmitter","_shaker","_cache","_Entrypoint","_barrelManifest","e","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","createAnalysisServices","services","cache","TransformCacheCollection","barrelManifests","exports","eventEmitter","EventEmitter","dummy","addBinding","manifest","exported","binding","explicitExports","existing","kind","isSameBinding","reason","addBlockedExport","buildResolvedDependencyMap","resolvedImports","Map","map","dependency","source","cloneExportedName","name","isValidIdentifier","identifier","stringLiteral","cloneImportedName","left","right","imported","createAnalysisEntrypoint","filename","loadedCode","Entrypoint","createRoot","getUniqueSources","raw","Array","from","Set","reexports","reexport","exportAll","buildImportsForResolve","getReexportResolutionMap","resolved","isBarrelEntry","entry","isRawBarrelManifest","shouldUseDirectExports","getModuleName","node","isIdentifier","value","canEmitNamedReexport","collectOptimizedImports","ast","imports","addImport","includes","push","program","statement","body","isImportDeclaration","isStringLiteral","specifiers","length","specifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","isImportSpecifier","isExportNamedDeclaration","isExportNamespaceSpecifier","isExportDefaultSpecifier","isExportSpecifier","local","isExportAllDeclaration","groupImportSpecifiers","optimized","grouped","defaults","named","bucket","importDefaultSpecifier","importSpecifier","declarations","importDeclaration","defaultSpecifier","slice","groupExportSpecifiers","exportNamespaceSpecifier","exportSpecifier","entries","exportNamedDeclaration","createImportFallback","fallbackSpecifiers","createExportFallback","emitRewriteSkipped","action","single","file","entrypoint","getManifestExport","_manifest$exports$exp","getNamedBinding","analysisServices","targetResolved","stack","targetManifest","getOrBuildBarrelManifest","complete","getStarCandidates","candidates","filter","getExportsForFile","getNext","undefined","cached","status","loadedAndParsed","loadAndParseFn","log","evaluator","ignoredEntry","add","shaker","customEntry","analyzed","analyzeBarrelFile","resolveEntrypoint","code","manifestDependencies","flatMap","resolutionMap","nextStack","namespaceBinding","getNamespaceBinding","exportAllSource","candidate","setCacheDependencies","getResolvedDependency","dependencies","rewriteImportDeclaration","generatedSources","mode","statements","fallback","rewritten","fallbackDeclaration","rewriteExportNamedDeclaration","rewriteExportAllDeclaration","hasUnrewritableExport","rewriteOptimizedBarrelImports","nextBody","optimizedCount","sourceModes","skippedCount","recordSourceMode","statementChanged","rewrittenCode","generate","preResolvedImports","only","fullyRewrittenSources","partialFallbackSources"],"sources":["../../../src/transform/generators/rewriteBarrelImports.ts"],"sourcesContent":["/* eslint-disable no-continue, @typescript-eslint/no-use-before-define, @typescript-eslint/no-explicit-any, no-param-reassign, prefer-destructuring */\nimport generate from '@babel/generator';\nimport * as t from '@babel/types';\n\nimport { EventEmitter } from '../../utils/EventEmitter';\nimport { shaker } from '../../shaker';\nimport { TransformCacheCollection } from '../../cache';\nimport { Entrypoint } from '../Entrypoint';\nimport {\n analyzeBarrelFile,\n type BarrelBlockedReason,\n type BarrelManifest,\n type BarrelManifestCacheEntry,\n type BarrelManifestExport,\n type BarrelResolvedBinding,\n type RawBarrelManifest,\n} from '../barrelManifest';\nimport type { IEntrypointDependency } from '../Entrypoint.types';\nimport type { Services, ITransformAction } from '../types';\n\ntype RewriteResult = {\n ast: t.File;\n code: string;\n fullyRewrittenSources: string[];\n imports: Map<string, string[]> | null;\n optimizedCount: number;\n partialFallbackSources: string[];\n preResolvedImports: IEntrypointDependency[];\n skippedCount: number;\n};\n\ntype RewriteMode = 'full' | 'partial' | 'unchanged';\n\ntype StatementRewriteResult = {\n generatedSources: string[];\n mode: RewriteMode;\n statements: t.Statement[];\n};\n\ntype ResolvedDependencyMap = Map<string, IEntrypointDependency>;\n\ntype StarCandidate = {\n binding: BarrelResolvedBinding;\n exported: string;\n};\n\ntype RewrittenImportSpecifier =\n | {\n kind: 'default';\n local: t.Identifier;\n source: string;\n }\n | {\n imported: string;\n kind: 'named';\n local: t.Identifier;\n source: string;\n };\n\ntype RewrittenExportSpecifier =\n | {\n exported: string;\n imported: string;\n kind: 'named';\n source: string;\n }\n | {\n exported: string;\n kind: 'namespace';\n source: string;\n };\n\ntype IneligibleBarrelEntry = Exclude<BarrelManifestCacheEntry, BarrelManifest>;\n\nconst createAnalysisServices = (services: Services): Services => ({\n ...services,\n cache: new TransformCacheCollection({\n barrelManifests: services.cache.barrelManifests,\n exports: services.cache.exports,\n }),\n eventEmitter: EventEmitter.dummy,\n});\n\nconst addBinding = (\n manifest: Record<string, BarrelManifestExport>,\n exported: string,\n binding: BarrelResolvedBinding,\n explicitExports: Set<string>\n) => {\n const existing = manifest[exported];\n if (explicitExports.has(exported)) {\n return;\n }\n\n if (!existing) {\n manifest[exported] = binding;\n return;\n }\n\n if (existing.kind === 'blocked') {\n return;\n }\n\n if (!isSameBinding(existing, binding)) {\n manifest[exported] = {\n kind: 'blocked',\n reason: 'ambiguous',\n };\n }\n};\n\nconst addBlockedExport = (\n manifest: Record<string, BarrelManifestExport>,\n exported: string,\n reason: BarrelBlockedReason\n) => {\n manifest[exported] = {\n kind: 'blocked',\n reason,\n };\n};\n\nconst buildResolvedDependencyMap = (\n resolvedImports: IEntrypointDependency[]\n): ResolvedDependencyMap =>\n new Map(resolvedImports.map((dependency) => [dependency.source, dependency]));\n\nconst cloneExportedName = (name: string): t.Identifier | t.StringLiteral =>\n t.isValidIdentifier(name) ? t.identifier(name) : t.stringLiteral(name);\n\nconst cloneImportedName = (name: string): t.Identifier | t.StringLiteral =>\n name === 'default' || t.isValidIdentifier(name)\n ? t.identifier(name)\n : t.stringLiteral(name);\n\nconst isSameBinding = (\n left: BarrelResolvedBinding,\n right: BarrelResolvedBinding\n): boolean => {\n if (left.kind !== right.kind) {\n return false;\n }\n\n if (left.source !== right.source) {\n return false;\n }\n\n if (left.kind === 'named' && right.kind === 'named') {\n return left.imported === right.imported;\n }\n\n return true;\n};\n\nfunction createAnalysisEntrypoint(\n services: Services,\n filename: string,\n loadedCode?: string\n): Entrypoint {\n return Entrypoint.createRoot(services, filename, ['*'], loadedCode);\n}\n\nfunction getUniqueSources(raw: RawBarrelManifest): string[] {\n return Array.from(\n new Set([\n ...raw.reexports.map((reexport) => reexport.source),\n ...raw.exportAll,\n ])\n );\n}\n\nfunction buildImportsForResolve(raw: RawBarrelManifest): Map<string, string[]> {\n return new Map(getUniqueSources(raw).map((source) => [source, []]));\n}\n\nfunction getReexportResolutionMap(\n resolvedImports: IEntrypointDependency[]\n): Map<string, string | null> {\n return new Map(\n resolvedImports.map((dependency) => [\n dependency.source,\n dependency.resolved,\n ])\n );\n}\n\nfunction isBarrelEntry(\n entry: BarrelManifestCacheEntry\n): entry is BarrelManifest {\n return entry.kind === 'barrel';\n}\n\nfunction isRawBarrelManifest(\n entry: BarrelManifestCacheEntry | RawBarrelManifest\n): entry is RawBarrelManifest {\n return 'reexports' in entry;\n}\n\nfunction shouldUseDirectExports(\n reason: IneligibleBarrelEntry['reason']\n): boolean {\n return reason === 'impure';\n}\n\nconst getModuleName = (node: t.Identifier | t.StringLiteral): string =>\n t.isIdentifier(node) ? node.name : node.value;\n\nconst canEmitNamedReexport = (imported: string): boolean =>\n imported === 'default' || t.isValidIdentifier(imported);\n\nfunction collectOptimizedImports(ast: t.File): Map<string, string[]> {\n const imports = new Map<string, string[]>();\n\n const addImport = (source: string, imported: string) => {\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (!imports.get(source)!.includes(imported)) {\n imports.get(source)!.push(imported);\n }\n };\n\n const program = ast.program;\n for (const statement of program.body) {\n if (\n t.isImportDeclaration(statement) &&\n t.isStringLiteral(statement.source)\n ) {\n if (statement.specifiers.length === 0) {\n addImport(statement.source.value, 'side-effect');\n continue;\n }\n\n for (const specifier of statement.specifiers) {\n if (t.isImportDefaultSpecifier(specifier)) {\n addImport(statement.source.value, 'default');\n continue;\n }\n\n if (t.isImportNamespaceSpecifier(specifier)) {\n addImport(statement.source.value, '*');\n continue;\n }\n\n if (t.isImportSpecifier(specifier)) {\n addImport(\n statement.source.value,\n t.isIdentifier(specifier.imported)\n ? specifier.imported.name\n : specifier.imported.value\n );\n }\n }\n continue;\n }\n\n if (\n t.isExportNamedDeclaration(statement) &&\n statement.source &&\n t.isStringLiteral(statement.source)\n ) {\n for (const specifier of statement.specifiers) {\n if (t.isExportNamespaceSpecifier(specifier)) {\n addImport(statement.source.value, '*');\n continue;\n }\n\n if (t.isExportDefaultSpecifier(specifier)) {\n addImport(statement.source.value, 'default');\n continue;\n }\n\n if (t.isExportSpecifier(specifier)) {\n addImport(statement.source.value, getModuleName(specifier.local));\n }\n }\n continue;\n }\n\n if (\n t.isExportAllDeclaration(statement) &&\n statement.source &&\n t.isStringLiteral(statement.source)\n ) {\n addImport(statement.source.value, '*');\n }\n }\n\n return imports;\n}\n\nfunction groupImportSpecifiers(\n optimized: RewrittenImportSpecifier[]\n): t.ImportDeclaration[] {\n const grouped = new Map<\n string,\n {\n defaults: t.ImportDefaultSpecifier[];\n named: t.ImportSpecifier[];\n }\n >();\n\n for (const specifier of optimized) {\n if (!grouped.has(specifier.source)) {\n grouped.set(specifier.source, {\n defaults: [],\n named: [],\n });\n }\n\n const bucket = grouped.get(specifier.source)!;\n if (specifier.kind === 'default') {\n bucket.defaults.push(t.importDefaultSpecifier(specifier.local));\n continue;\n }\n\n bucket.named.push(\n t.importSpecifier(specifier.local, cloneImportedName(specifier.imported))\n );\n }\n\n const declarations: t.ImportDeclaration[] = [];\n for (const [source, bucket] of grouped) {\n if (bucket.defaults.length === 0) {\n declarations.push(\n t.importDeclaration(bucket.named, t.stringLiteral(source))\n );\n continue;\n }\n\n declarations.push(\n t.importDeclaration(\n [bucket.defaults[0], ...bucket.named],\n t.stringLiteral(source)\n )\n );\n\n for (const defaultSpecifier of bucket.defaults.slice(1)) {\n declarations.push(\n t.importDeclaration([defaultSpecifier], t.stringLiteral(source))\n );\n }\n }\n\n return declarations;\n}\n\nfunction groupExportSpecifiers(\n optimized: RewrittenExportSpecifier[]\n): t.Statement[] {\n const grouped = new Map<\n string,\n Array<t.ExportSpecifier | t.ExportNamespaceSpecifier>\n >();\n\n for (const specifier of optimized) {\n if (!grouped.has(specifier.source)) {\n grouped.set(specifier.source, []);\n }\n\n if (specifier.kind === 'namespace') {\n grouped\n .get(specifier.source)!\n .push(t.exportNamespaceSpecifier(t.identifier(specifier.exported)));\n continue;\n }\n\n grouped\n .get(specifier.source)!\n .push(\n t.exportSpecifier(\n t.identifier(specifier.imported),\n cloneExportedName(specifier.exported)\n )\n );\n }\n\n return Array.from(grouped.entries()).map(([source, specifiers]) =>\n t.exportNamedDeclaration(null, specifiers, t.stringLiteral(source))\n );\n}\n\nfunction createImportFallback(\n statement: t.ImportDeclaration,\n fallbackSpecifiers: t.ImportDeclaration['specifiers']\n): t.ImportDeclaration | null {\n if (fallbackSpecifiers.length === 0) {\n return null;\n }\n\n return t.importDeclaration(\n fallbackSpecifiers,\n t.stringLiteral(statement.source.value)\n );\n}\n\nfunction createExportFallback(\n statement: t.ExportNamedDeclaration,\n fallbackSpecifiers: t.ExportNamedDeclaration['specifiers']\n): t.ExportNamedDeclaration | null {\n if (!statement.source || fallbackSpecifiers.length === 0) {\n return null;\n }\n\n return t.exportNamedDeclaration(\n null,\n fallbackSpecifiers,\n t.stringLiteral(statement.source.value)\n );\n}\n\nfunction emitRewriteSkipped(\n action: ITransformAction,\n source: string,\n reason: BarrelBlockedReason\n) {\n action.services.eventEmitter.single({\n file: action.entrypoint.name,\n kind: 'barrelRewriteSkipped',\n reason,\n source,\n });\n}\n\nfunction getManifestExport(\n manifest: BarrelManifest,\n exported: string\n): BarrelManifestExport | null {\n return manifest.exports[exported] ?? null;\n}\n\nfunction* getNamedBinding(\n this: ITransformAction,\n analysisServices: Services,\n targetResolved: string,\n imported: string,\n stack: Set<string>\n): Generator<any, BarrelManifestExport, any> {\n if (stack.has(targetResolved)) {\n return {\n kind: 'blocked',\n reason: 'cycle',\n };\n }\n\n const targetManifest = yield* getOrBuildBarrelManifest.call(\n this,\n analysisServices,\n targetResolved,\n stack\n );\n\n if (isBarrelEntry(targetManifest)) {\n const resolved = getManifestExport(targetManifest, imported);\n if (resolved) {\n return resolved;\n }\n\n return {\n kind: 'blocked',\n reason: targetManifest.complete ? 'unresolved' : 'unknown-star',\n };\n }\n\n return {\n kind: 'named',\n imported,\n source: targetResolved,\n };\n}\n\nfunction* getStarCandidates(\n this: ITransformAction,\n analysisServices: Services,\n targetResolved: string,\n stack: Set<string>\n): Generator<any, { candidates: StarCandidate[]; complete: boolean }, any> {\n if (stack.has(targetResolved)) {\n return {\n candidates: [],\n complete: false,\n };\n }\n\n const targetManifest = yield* getOrBuildBarrelManifest.call(\n this,\n analysisServices,\n targetResolved,\n stack\n );\n\n if (isBarrelEntry(targetManifest)) {\n if (!targetManifest.complete) {\n return {\n candidates: [],\n complete: false,\n };\n }\n\n return {\n candidates: Object.entries(targetManifest.exports)\n .filter(\n ([exported, binding]) =>\n exported !== 'default' && binding.kind !== 'blocked'\n )\n .map(([exported, binding]) => ({\n binding: binding as BarrelResolvedBinding,\n exported,\n })),\n complete: true,\n };\n }\n\n if (!shouldUseDirectExports(targetManifest.reason)) {\n return {\n candidates: [],\n complete: false,\n };\n }\n\n const exports = yield* getExportsForFile.call(\n this,\n analysisServices,\n targetResolved\n );\n\n return {\n candidates: exports\n .filter((exported) => exported !== 'default')\n .map((exported) => ({\n binding: {\n kind: 'named',\n imported: exported,\n source: targetResolved,\n } satisfies BarrelResolvedBinding,\n exported,\n })),\n complete: true,\n };\n}\n\nfunction* getExportsForFile(\n this: ITransformAction,\n services: Services,\n filename: string\n): Generator<any, string[], any> {\n const entrypoint = createAnalysisEntrypoint(services, filename);\n return yield* this.getNext('getExports', entrypoint, undefined, null);\n}\n\nfunction* getOrBuildBarrelManifest(\n this: ITransformAction,\n analysisServices: Services,\n filename: string,\n stack: Set<string> = new Set()\n): Generator<any, BarrelManifestCacheEntry, any> {\n const cached = this.services.cache.get('barrelManifests', filename);\n if (cached) {\n this.services.eventEmitter.single({\n file: filename,\n kind: 'barrelManifest',\n status: 'hit',\n });\n return cached;\n }\n\n const loadedAndParsed = analysisServices.loadAndParseFn(\n analysisServices,\n filename,\n undefined,\n analysisServices.log\n );\n\n if (loadedAndParsed.evaluator === 'ignored') {\n const ignoredEntry = {\n kind: 'ineligible',\n reason: 'ignored',\n } as const;\n this.services.cache.add('barrelManifests', filename, ignoredEntry);\n return ignoredEntry;\n }\n\n if (loadedAndParsed.evaluator !== shaker) {\n const customEntry = {\n kind: 'ineligible',\n reason: 'custom-evaluator',\n } as const;\n this.services.cache.add('barrelManifests', filename, customEntry);\n return customEntry;\n }\n\n const analyzed = analyzeBarrelFile(loadedAndParsed.ast);\n if (!isRawBarrelManifest(analyzed)) {\n this.services.cache.add('barrelManifests', filename, analyzed);\n return analyzed;\n }\n\n const resolveEntrypoint = createAnalysisEntrypoint(\n analysisServices,\n filename,\n loadedAndParsed.code\n );\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n resolveEntrypoint,\n {\n imports: buildImportsForResolve(analyzed),\n },\n null\n );\n const manifestDependencies = resolvedImports.flatMap((dependency) =>\n dependency.resolved ? [dependency.resolved] : []\n );\n\n const resolutionMap = getReexportResolutionMap(resolvedImports);\n const manifest: BarrelManifest = {\n complete: analyzed.complete,\n exports: {},\n kind: 'barrel',\n };\n const explicitExports = new Set<string>(analyzed.explicitExports);\n const nextStack = new Set(stack);\n nextStack.add(filename);\n\n for (const reexport of analyzed.reexports) {\n explicitExports.add(reexport.exported);\n const targetResolved = resolutionMap.get(reexport.source);\n\n if (!targetResolved) {\n manifest.complete = false;\n addBlockedExport(manifest.exports, reexport.exported, 'unresolved');\n continue;\n }\n\n if (reexport.kind === 'namespace') {\n const namespaceBinding = yield* getNamespaceBinding.call(\n this,\n analysisServices,\n targetResolved,\n nextStack\n );\n manifest.exports[reexport.exported] = namespaceBinding;\n if (namespaceBinding.kind === 'blocked') {\n manifest.complete = false;\n }\n continue;\n }\n\n const binding = yield* getNamedBinding.call(\n this,\n analysisServices,\n targetResolved,\n reexport.imported,\n nextStack\n );\n manifest.exports[reexport.exported] = binding;\n if (binding.kind === 'blocked') {\n manifest.complete = false;\n }\n }\n\n for (const exportAllSource of analyzed.exportAll) {\n const targetResolved = resolutionMap.get(exportAllSource);\n if (!targetResolved) {\n manifest.complete = false;\n continue;\n }\n\n const { candidates, complete } = yield* getStarCandidates.call(\n this,\n analysisServices,\n targetResolved,\n nextStack\n );\n\n if (!complete) {\n manifest.complete = false;\n continue;\n }\n\n for (const candidate of candidates) {\n addBinding(\n manifest.exports,\n candidate.exported,\n candidate.binding,\n explicitExports\n );\n }\n }\n\n this.services.cache.add('barrelManifests', filename, manifest);\n this.services.cache.setCacheDependencies(\n 'barrelManifests',\n filename,\n manifestDependencies\n );\n this.services.eventEmitter.single({\n complete: manifest.complete,\n file: filename,\n kind: 'barrelManifest',\n status: 'built',\n });\n\n return manifest;\n}\n\nfunction* getNamespaceBinding(\n this: ITransformAction,\n analysisServices: Services,\n targetResolved: string,\n stack: Set<string>\n): Generator<any, BarrelManifestExport, any> {\n if (stack.has(targetResolved)) {\n return {\n kind: 'blocked',\n reason: 'cycle',\n };\n }\n\n const targetManifest = yield* getOrBuildBarrelManifest.call(\n this,\n analysisServices,\n targetResolved,\n stack\n );\n\n if (isBarrelEntry(targetManifest)) {\n return {\n kind: 'blocked',\n reason: 'namespace-barrel',\n };\n }\n\n return {\n kind: 'namespace',\n source: targetResolved,\n };\n}\n\nfunction getResolvedDependency(\n dependencies: ResolvedDependencyMap,\n source: string\n): IEntrypointDependency | undefined {\n return dependencies.get(source);\n}\n\nfunction* rewriteImportDeclaration(\n this: ITransformAction,\n analysisServices: Services,\n statement: t.ImportDeclaration,\n dependencies: ResolvedDependencyMap\n): Generator<any, StatementRewriteResult, any> {\n const dependency = getResolvedDependency(\n dependencies,\n statement.source.value\n );\n if (!dependency?.resolved) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const manifest = yield* getOrBuildBarrelManifest.call(\n this,\n analysisServices,\n dependency.resolved\n );\n if (!isBarrelEntry(manifest)) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const optimized: RewrittenImportSpecifier[] = [];\n const fallback = [] as t.ImportDeclaration['specifiers'];\n\n for (const specifier of statement.specifiers) {\n if (t.isImportNamespaceSpecifier(specifier)) {\n fallback.push(specifier);\n continue;\n }\n\n if (t.isImportDefaultSpecifier(specifier)) {\n const binding = getManifestExport(manifest, 'default');\n if (binding?.kind === 'named' && binding.imported === 'default') {\n optimized.push({\n kind: 'default',\n local: specifier.local,\n source: binding.source,\n });\n continue;\n }\n\n if (binding?.kind === 'blocked') {\n emitRewriteSkipped(this, statement.source.value, binding.reason);\n }\n fallback.push(specifier);\n continue;\n }\n\n const imported = t.isIdentifier(specifier.imported)\n ? specifier.imported.name\n : specifier.imported.value;\n const binding = getManifestExport(manifest, imported);\n\n if (binding?.kind === 'named') {\n optimized.push({\n imported: binding.imported,\n kind: 'named',\n local: specifier.local,\n source: binding.source,\n });\n continue;\n }\n\n if (binding?.kind === 'blocked') {\n emitRewriteSkipped(this, statement.source.value, binding.reason);\n }\n fallback.push(specifier);\n }\n\n if (optimized.length === 0) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const rewritten = groupImportSpecifiers(optimized);\n const fallbackDeclaration = createImportFallback(statement, fallback);\n const mode: RewriteMode = fallbackDeclaration ? 'partial' : 'full';\n\n this.services.eventEmitter.single({\n file: this.entrypoint.name,\n kind: 'barrelRewrite',\n mode,\n optimized: optimized.length,\n source: statement.source.value,\n });\n\n return {\n generatedSources: Array.from(\n new Set(optimized.map((specifier) => specifier.source))\n ),\n mode,\n statements: fallbackDeclaration\n ? [fallbackDeclaration, ...rewritten]\n : rewritten,\n };\n}\n\nfunction* rewriteExportNamedDeclaration(\n this: ITransformAction,\n analysisServices: Services,\n statement: t.ExportNamedDeclaration,\n dependencies: ResolvedDependencyMap\n): Generator<any, StatementRewriteResult, any> {\n if (!statement.source || !t.isStringLiteral(statement.source)) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const dependency = getResolvedDependency(\n dependencies,\n statement.source.value\n );\n if (!dependency?.resolved) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const manifest = yield* getOrBuildBarrelManifest.call(\n this,\n analysisServices,\n dependency.resolved\n );\n if (!isBarrelEntry(manifest)) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const optimized: RewrittenExportSpecifier[] = [];\n const fallback = [] as t.ExportNamedDeclaration['specifiers'];\n\n for (const specifier of statement.specifiers) {\n if (t.isExportNamespaceSpecifier(specifier)) {\n fallback.push(specifier);\n continue;\n }\n\n if (t.isExportDefaultSpecifier(specifier)) {\n const binding = getManifestExport(manifest, 'default');\n if (binding?.kind === 'named' && binding.imported === 'default') {\n optimized.push({\n exported: getModuleName(specifier.exported),\n imported: 'default',\n kind: 'named',\n source: binding.source,\n });\n continue;\n }\n\n if (binding?.kind === 'blocked') {\n emitRewriteSkipped(this, statement.source.value, binding.reason);\n }\n fallback.push(specifier);\n continue;\n }\n\n const imported = getModuleName(specifier.local);\n const exported = getModuleName(specifier.exported);\n const binding = getManifestExport(manifest, imported);\n\n if (binding?.kind === 'named' && canEmitNamedReexport(binding.imported)) {\n optimized.push({\n exported,\n imported: binding.imported,\n kind: 'named',\n source: binding.source,\n });\n continue;\n }\n\n if (binding?.kind === 'namespace' && t.isValidIdentifier(exported)) {\n optimized.push({\n exported,\n kind: 'namespace',\n source: binding.source,\n });\n continue;\n }\n\n if (binding?.kind === 'blocked') {\n emitRewriteSkipped(this, statement.source.value, binding.reason);\n }\n fallback.push(specifier);\n }\n\n if (optimized.length === 0) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const rewritten = groupExportSpecifiers(optimized);\n const fallbackDeclaration = createExportFallback(statement, fallback);\n const mode: RewriteMode = fallbackDeclaration ? 'partial' : 'full';\n\n this.services.eventEmitter.single({\n file: this.entrypoint.name,\n kind: 'barrelRewrite',\n mode,\n optimized: optimized.length,\n source: statement.source.value,\n });\n\n return {\n generatedSources: Array.from(\n new Set(optimized.map((specifier) => specifier.source))\n ),\n mode,\n statements: fallbackDeclaration\n ? [fallbackDeclaration, ...rewritten]\n : rewritten,\n };\n}\n\nfunction* rewriteExportAllDeclaration(\n this: ITransformAction,\n analysisServices: Services,\n statement: t.ExportAllDeclaration,\n dependencies: ResolvedDependencyMap\n): Generator<any, StatementRewriteResult, any> {\n const dependency = getResolvedDependency(\n dependencies,\n statement.source.value\n );\n if (!dependency?.resolved) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const manifest = yield* getOrBuildBarrelManifest.call(\n this,\n analysisServices,\n dependency.resolved\n );\n if (!isBarrelEntry(manifest) || !manifest.complete) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n const optimized: RewrittenExportSpecifier[] = [];\n let hasUnrewritableExport = false;\n for (const [exported, binding] of Object.entries(manifest.exports)) {\n if (exported === 'default' || binding.kind === 'blocked') {\n continue;\n }\n\n if (binding.kind === 'namespace') {\n if (!t.isValidIdentifier(exported)) {\n emitRewriteSkipped(this, statement.source.value, 'namespace-barrel');\n hasUnrewritableExport = true;\n continue;\n }\n\n optimized.push({\n exported,\n kind: 'namespace',\n source: binding.source,\n });\n continue;\n }\n\n if (!canEmitNamedReexport(binding.imported)) {\n emitRewriteSkipped(this, statement.source.value, 'unknown-star');\n hasUnrewritableExport = true;\n continue;\n }\n\n optimized.push({\n exported,\n imported: binding.imported,\n kind: 'named',\n source: binding.source,\n });\n }\n\n if (hasUnrewritableExport) {\n return {\n generatedSources: [],\n mode: 'unchanged',\n statements: [statement],\n };\n }\n\n if (optimized.length === 0) {\n this.services.eventEmitter.single({\n file: this.entrypoint.name,\n kind: 'barrelRewrite',\n mode: 'full',\n optimized: 0,\n source: statement.source.value,\n });\n\n return {\n generatedSources: [],\n mode: 'full',\n statements: [],\n };\n }\n\n this.services.eventEmitter.single({\n complete: true,\n file: this.entrypoint.name,\n kind: 'barrelRewrite',\n mode: 'full',\n optimized: optimized.length,\n source: statement.source.value,\n });\n\n return {\n generatedSources: Array.from(\n new Set(optimized.map((specifier) => specifier.source))\n ),\n mode: 'full',\n statements: groupExportSpecifiers(optimized),\n };\n}\n\nexport function* rewriteOptimizedBarrelImports(\n this: ITransformAction,\n ast: t.File,\n code: string,\n resolvedImports: IEntrypointDependency[]\n): Generator<any, RewriteResult, any> {\n const dependencies = buildResolvedDependencyMap(resolvedImports);\n const analysisServices = createAnalysisServices(this.services);\n const nextBody: t.Statement[] = [];\n const generatedSources = new Set<string>();\n let optimizedCount = 0;\n const sourceModes = new Map<string, Exclude<RewriteMode, 'unchanged'>>();\n let skippedCount = 0;\n\n const recordSourceMode = (\n source: string,\n mode: RewriteMode,\n statementChanged: boolean\n ) => {\n if (mode === 'unchanged') {\n return;\n }\n\n if (statementChanged) {\n optimizedCount += 1;\n }\n\n if (mode === 'partial') {\n sourceModes.set(source, 'partial');\n return;\n }\n\n if (!sourceModes.has(source)) {\n sourceModes.set(source, 'full');\n }\n };\n\n for (const statement of ast.program.body) {\n if (\n t.isImportDeclaration(statement) &&\n t.isStringLiteral(statement.source)\n ) {\n const rewritten = yield* rewriteImportDeclaration.call(\n this,\n analysisServices,\n statement,\n dependencies\n );\n recordSourceMode(\n statement.source.value,\n rewritten.mode,\n !(\n rewritten.statements.length === 1 &&\n rewritten.statements[0] === statement\n )\n );\n for (const source of rewritten.generatedSources) {\n generatedSources.add(source);\n }\n nextBody.push(...rewritten.statements);\n continue;\n }\n\n if (\n t.isExportNamedDeclaration(statement) &&\n statement.source &&\n t.isStringLiteral(statement.source)\n ) {\n const rewritten = yield* rewriteExportNamedDeclaration.call(\n this,\n analysisServices,\n statement,\n dependencies\n );\n recordSourceMode(\n statement.source.value,\n rewritten.mode,\n !(\n rewritten.statements.length === 1 &&\n rewritten.statements[0] === statement\n )\n );\n for (const source of rewritten.generatedSources) {\n generatedSources.add(source);\n }\n nextBody.push(...rewritten.statements);\n continue;\n }\n\n if (\n t.isExportAllDeclaration(statement) &&\n statement.source &&\n t.isStringLiteral(statement.source)\n ) {\n const rewritten = yield* rewriteExportAllDeclaration.call(\n this,\n analysisServices,\n statement,\n dependencies\n );\n if (\n rewritten.mode === 'unchanged' &&\n rewritten.statements.length === 1 &&\n rewritten.statements[0] === statement\n ) {\n skippedCount += 1;\n }\n recordSourceMode(\n statement.source.value,\n rewritten.mode,\n !(\n rewritten.statements.length === 1 &&\n rewritten.statements[0] === statement\n )\n );\n for (const source of rewritten.generatedSources) {\n generatedSources.add(source);\n }\n nextBody.push(...rewritten.statements);\n continue;\n }\n\n nextBody.push(statement);\n }\n\n ast.program.body = nextBody;\n const rewrittenCode = generate(ast).code;\n const imports = collectOptimizedImports(ast);\n const preResolvedImports = Array.from(imports.entries()).flatMap(\n ([source, only]) => {\n const dependency = dependencies.get(source);\n if (dependency) {\n return [\n {\n ...dependency,\n only,\n },\n ];\n }\n\n if (generatedSources.has(source)) {\n return [\n {\n only,\n resolved: source,\n source,\n },\n ];\n }\n\n return [];\n }\n );\n\n return {\n ast,\n code: rewrittenCode,\n fullyRewrittenSources: Array.from(sourceModes.entries())\n .filter(([, mode]) => mode === 'full')\n .map(([source]) => source),\n imports,\n optimizedCount,\n partialFallbackSources: Array.from(sourceModes.entries())\n .filter(([, mode]) => mode === 'partial')\n .map(([source]) => source),\n preResolvedImports,\n skippedCount,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -9,8 +9,10 @@ exports.transform = transform;
9
9
  var _buildOptions = require("../../options/buildOptions");
10
10
  var _dynamicImport = _interopRequireDefault(require("../../plugins/dynamic-import"));
11
11
  var _preeval = _interopRequireDefault(require("../../plugins/preeval"));
12
+ var _shaker = require("../../shaker");
12
13
  var _TransformMetadata = require("../../utils/TransformMetadata");
13
14
  var _getPluginKey = require("../../utils/getPluginKey");
15
+ var _rewriteBarrelImports = require("./rewriteBarrelImports");
14
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
17
  const EMPTY_FILE = '=== empty file ===';
16
18
  const hasKeyInList = (plugin, list) => {
@@ -35,21 +37,19 @@ function runPreevalStage(babel, evalConfig, pluginOptions, code, originalAst, ev
35
37
  }
36
38
  return result;
37
39
  }
38
- const prepareCode = (services, item, originalAst) => {
40
+ const isPrevalOnly = only => only.length === 1 && only[0] === '__wywPreval';
41
+ const prepareEvaluatorInput = (services, item, originalAst) => {
39
42
  const {
40
- log,
41
43
  only,
42
- loadedAndParsed
44
+ loadedAndParsed,
45
+ log
43
46
  } = item;
44
47
  if (loadedAndParsed.evaluator === 'ignored') {
45
- var _loadedAndParsed$code;
46
- log('is ignored');
47
- return [(_loadedAndParsed$code = loadedAndParsed.code) !== null && _loadedAndParsed$code !== void 0 ? _loadedAndParsed$code : '', null, null];
48
+ throw new Error(`Cannot prepare ignored entrypoint ${item.name}`);
48
49
  }
49
50
  const {
50
51
  code,
51
- evalConfig,
52
- evaluator
52
+ evalConfig
53
53
  } = loadedAndParsed;
54
54
  const {
55
55
  options,
@@ -61,23 +61,55 @@ const prepareCode = (services, item, originalAst) => {
61
61
  } = options;
62
62
  const preevalStageResult = eventEmitter.perf('transform:preeval', () => runPreevalStage(babel, evalConfig, pluginOptions, code, originalAst, eventEmitter));
63
63
  const transformMetadata = (0, _TransformMetadata.getTransformMetadata)(preevalStageResult.metadata);
64
- if (only.length === 1 && only[0] === '__wywPreval' && !transformMetadata) {
64
+ if (isPrevalOnly(only) && !transformMetadata) {
65
65
  log('[evaluator:end] no metadata');
66
- return [preevalStageResult.code, null, null];
66
+ return {
67
+ kind: 'short-circuit',
68
+ code: preevalStageResult.code
69
+ };
67
70
  }
68
71
  log('[preeval] metadata %O', transformMetadata);
69
- log('[evaluator:start] using %s', evaluator.name);
70
- log.extend('source')('%s', preevalStageResult.code);
71
- const evaluatorConfig = {
72
- onlyExports: only,
73
- highPriorityPlugins: pluginOptions.highPriorityPlugins,
74
- features: pluginOptions.features,
75
- importOverrides: pluginOptions.importOverrides,
76
- root: options.root
72
+ return {
73
+ kind: 'continue',
74
+ ast: preevalStageResult.ast,
75
+ code: preevalStageResult.code,
76
+ evalConfig,
77
+ evaluatorConfig: {
78
+ onlyExports: only,
79
+ highPriorityPlugins: pluginOptions.highPriorityPlugins,
80
+ features: pluginOptions.features,
81
+ importOverrides: pluginOptions.importOverrides,
82
+ root: options.root
83
+ },
84
+ metadata: transformMetadata !== null && transformMetadata !== void 0 ? transformMetadata : null
77
85
  };
78
- const [, transformedCode, imports] = eventEmitter.perf('transform:evaluator', () => evaluator(evalConfig, preevalStageResult.ast, preevalStageResult.code, evaluatorConfig, babel));
86
+ };
87
+ const prepareCode = (services, item, originalAst) => {
88
+ const {
89
+ log,
90
+ loadedAndParsed
91
+ } = item;
92
+ if (loadedAndParsed.evaluator === 'ignored') {
93
+ var _loadedAndParsed$code;
94
+ log('is ignored');
95
+ return [(_loadedAndParsed$code = loadedAndParsed.code) !== null && _loadedAndParsed$code !== void 0 ? _loadedAndParsed$code : '', null, null];
96
+ }
97
+ const {
98
+ evaluator
99
+ } = loadedAndParsed;
100
+ const {
101
+ babel,
102
+ eventEmitter
103
+ } = services;
104
+ const prepared = prepareEvaluatorInput(services, item, originalAst);
105
+ if (prepared.kind === 'short-circuit') {
106
+ return [prepared.code, null, null];
107
+ }
108
+ log('[evaluator:start] using %s', evaluator.name);
109
+ log.extend('source')('%s', prepared.code);
110
+ const [, transformedCode, imports] = eventEmitter.perf('transform:evaluator', () => evaluator(prepared.evalConfig, prepared.ast, prepared.code, prepared.evaluatorConfig, babel));
79
111
  log('[evaluator:end]');
80
- return [transformedCode, imports, transformMetadata !== null && transformMetadata !== void 0 ? transformMetadata : null];
112
+ return [transformedCode, imports, prepared.metadata];
81
113
  };
82
114
  exports.prepareCode = prepareCode;
83
115
  function* internalTransform(prepareFn) {
@@ -130,7 +162,111 @@ function* internalTransform(prepareFn) {
130
162
  * Prepares the code for evaluation. This includes removing dead and potentially unsafe code.
131
163
  * Emits resolveImports and processImports events.
132
164
  */
133
- function transform() {
134
- return internalTransform.call(this, prepareCode);
165
+ function* transform() {
166
+ const {
167
+ only,
168
+ loadedAndParsed,
169
+ log
170
+ } = this.entrypoint;
171
+ if (loadedAndParsed.evaluator === 'ignored') {
172
+ var _loadedAndParsed$code4;
173
+ log('is ignored');
174
+ return {
175
+ code: (_loadedAndParsed$code4 = loadedAndParsed.code) !== null && _loadedAndParsed$code4 !== void 0 ? _loadedAndParsed$code4 : '',
176
+ metadata: null
177
+ };
178
+ }
179
+ if (loadedAndParsed.evaluator !== _shaker.shaker) {
180
+ return yield* internalTransform.call(this, prepareCode);
181
+ }
182
+ log('>> (%o)', only);
183
+ const prepared = prepareEvaluatorInput(this.services, this.entrypoint, loadedAndParsed.ast);
184
+ if (prepared.kind === 'short-circuit') {
185
+ if (loadedAndParsed.code === prepared.code) {
186
+ log('<< (%o)\n === no changes ===', only);
187
+ } else {
188
+ log('<< (%o)', only);
189
+ log.extend('source')('%s', prepared.code || EMPTY_FILE);
190
+ }
191
+ if (prepared.code === '') {
192
+ var _loadedAndParsed$code5;
193
+ log('is skipped');
194
+ return {
195
+ code: (_loadedAndParsed$code5 = loadedAndParsed.code) !== null && _loadedAndParsed$code5 !== void 0 ? _loadedAndParsed$code5 : '',
196
+ metadata: null
197
+ };
198
+ }
199
+ return {
200
+ code: prepared.code,
201
+ metadata: null
202
+ };
203
+ }
204
+ log('[evaluator:start] using %s', loadedAndParsed.evaluator.name);
205
+ log.extend('source')('%s', prepared.code);
206
+ const {
207
+ babel,
208
+ eventEmitter
209
+ } = this.services;
210
+ const [shakenAst, shakenCode, shakenImports] = eventEmitter.perf('transform:evaluator', () => (0, _shaker.shakeToESM)(prepared.evalConfig, prepared.ast, prepared.code, prepared.evaluatorConfig, babel));
211
+ let nextAst = shakenAst;
212
+ let nextCode = shakenCode;
213
+ let nextResolvedImports = [];
214
+ if (shakenImports !== null && shakenImports.size > 0) {
215
+ const resolvedImports = yield* this.getNext('resolveImports', this.entrypoint, {
216
+ imports: shakenImports,
217
+ phase: 'initial'
218
+ });
219
+ if (resolvedImports.length > 0) {
220
+ const rewritten = yield* _rewriteBarrelImports.rewriteOptimizedBarrelImports.call(this, shakenAst, shakenCode, resolvedImports);
221
+ nextAst = rewritten.ast;
222
+ nextCode = rewritten.code;
223
+ if (rewritten.optimizedCount > 0) {
224
+ const fullyRewrittenSources = new Set(rewritten.fullyRewrittenSources);
225
+ const partialFallbackSources = new Set(rewritten.partialFallbackSources);
226
+ for (const dependency of resolvedImports) {
227
+ if (dependency.resolved && (fullyRewrittenSources.has(dependency.source) || partialFallbackSources.has(dependency.source))) {
228
+ if (partialFallbackSources.has(dependency.source)) {
229
+ this.entrypoint.addDependency(dependency);
230
+ } else {
231
+ this.entrypoint.addInvalidationDependency(dependency);
232
+ }
233
+ this.entrypoint.markInvalidateOnDependencyChange(dependency.resolved);
234
+ }
235
+ }
236
+ nextResolvedImports = yield* this.getNext('resolveImports', this.entrypoint, {
237
+ imports: rewritten.imports,
238
+ phase: 'rewritten',
239
+ preResolved: rewritten.preResolvedImports
240
+ });
241
+ } else {
242
+ nextResolvedImports = resolvedImports;
243
+ }
244
+ }
245
+ }
246
+ if (nextResolvedImports.length !== 0) {
247
+ yield ['processImports', this.entrypoint, {
248
+ resolved: nextResolvedImports
249
+ }];
250
+ }
251
+ const [, preparedCode] = eventEmitter.perf('transform:emitCommonJS', () => (0, _shaker.emitCommonJS)(prepared.evalConfig, nextAst, nextCode, babel));
252
+ log('[evaluator:end]');
253
+ if (loadedAndParsed.code === preparedCode) {
254
+ log('<< (%o)\n === no changes ===', only);
255
+ } else {
256
+ log('<< (%o)', only);
257
+ log.extend('source')('%s', preparedCode || EMPTY_FILE);
258
+ }
259
+ if (preparedCode === '') {
260
+ var _loadedAndParsed$code6;
261
+ log('is skipped');
262
+ return {
263
+ code: (_loadedAndParsed$code6 = loadedAndParsed.code) !== null && _loadedAndParsed$code6 !== void 0 ? _loadedAndParsed$code6 : '',
264
+ metadata: null
265
+ };
266
+ }
267
+ return {
268
+ code: preparedCode,
269
+ metadata: prepared.metadata
270
+ };
135
271
  }
136
272
  //# sourceMappingURL=transform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","names":["_buildOptions","require","_dynamicImport","_interopRequireDefault","_preeval","_TransformMetadata","_getPluginKey","e","__esModule","default","EMPTY_FILE","hasKeyInList","plugin","list","pluginKey","getPluginKey","some","i","includes","runPreevalStage","babel","evalConfig","pluginOptions","code","originalAst","eventEmitter","_evalConfig$plugins$f","_evalConfig$plugins","_evalConfig$plugins2","_result$ast","preShakePlugins","plugins","filter","highPriorityPlugins","preevalPlugin","dynamicImportPlugin","transformConfig","buildOptions","envName","result","transformFromAstSync","ast","program","Error","prepareCode","services","item","log","only","loadedAndParsed","evaluator","_loadedAndParsed$code","options","preevalStageResult","perf","transformMetadata","getTransformMetadata","metadata","length","name","extend","evaluatorConfig","onlyExports","features","importOverrides","root","transformedCode","imports","exports","internalTransform","prepareFn","entrypoint","_loadedAndParsed$code2","preparedCode","_loadedAndParsed$code3","size","resolvedImports","getNext","resolved","transform","call"],"sources":["../../../src/transform/generators/transform.ts"],"sourcesContent":["import type {\n BabelFileResult,\n PluginItem,\n TransformOptions,\n} from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type { EvaluatorConfig, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { Core } from '../../babel';\nimport { buildOptions } from '../../options/buildOptions';\nimport dynamicImportPlugin from '../../plugins/dynamic-import';\nimport preevalPlugin from '../../plugins/preeval';\nimport type { EventEmitter } from '../../utils/EventEmitter';\nimport type { WYWTransformMetadata } from '../../utils/TransformMetadata';\nimport { getTransformMetadata } from '../../utils/TransformMetadata';\nimport { getPluginKey } from '../../utils/getPluginKey';\nimport type { Entrypoint } from '../Entrypoint';\nimport type {\n ITransformAction,\n Services,\n SyncScenarioForAction,\n} from '../types';\n\nconst EMPTY_FILE = '=== empty file ===';\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\nfunction runPreevalStage(\n babel: Core,\n evalConfig: TransformOptions,\n pluginOptions: StrictOptions,\n code: string,\n originalAst: File,\n eventEmitter: EventEmitter\n): BabelFileResult {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) =>\n hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ) ?? [];\n\n const plugins = [\n ...preShakePlugins,\n [\n preevalPlugin,\n {\n ...pluginOptions,\n eventEmitter,\n },\n ],\n dynamicImportPlugin,\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ),\n ];\n\n const transformConfig = buildOptions({\n ...evalConfig,\n envName: 'wyw-in-js',\n plugins,\n });\n\n const result = babel.transformFromAstSync(originalAst, code, transformConfig);\n\n if (!result || !result.ast?.program) {\n throw new Error('Babel transform failed');\n }\n\n return result;\n}\n\ntype PrepareCodeFn = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n) => [\n code: string,\n imports: Map<string, string[]> | null,\n metadata: WYWTransformMetadata | null,\n];\n\nexport const prepareCode = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n): ReturnType<PrepareCodeFn> => {\n const { log, only, loadedAndParsed } = item;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return [loadedAndParsed.code ?? '', null, null];\n }\n\n const { code, evalConfig, evaluator } = loadedAndParsed;\n const { options, babel, eventEmitter } = services;\n const { pluginOptions } = options;\n\n const preevalStageResult = eventEmitter.perf('transform:preeval', () =>\n runPreevalStage(\n babel,\n evalConfig,\n pluginOptions,\n code,\n originalAst,\n eventEmitter\n )\n );\n\n const transformMetadata = getTransformMetadata(preevalStageResult.metadata);\n\n if (only.length === 1 && only[0] === '__wywPreval' && !transformMetadata) {\n log('[evaluator:end] no metadata');\n return [preevalStageResult.code!, null, null];\n }\n\n log('[preeval] metadata %O', transformMetadata);\n log('[evaluator:start] using %s', evaluator.name);\n log.extend('source')('%s', preevalStageResult.code!);\n\n const evaluatorConfig: EvaluatorConfig = {\n onlyExports: only,\n highPriorityPlugins: pluginOptions.highPriorityPlugins,\n features: pluginOptions.features,\n importOverrides: pluginOptions.importOverrides,\n root: options.root,\n };\n\n const [, transformedCode, imports] = eventEmitter.perf(\n 'transform:evaluator',\n () =>\n evaluator(\n evalConfig,\n preevalStageResult.ast!,\n preevalStageResult.code!,\n evaluatorConfig,\n babel\n )\n );\n\n log('[evaluator:end]');\n\n return [transformedCode, imports, transformMetadata ?? null];\n};\n\nexport function* internalTransform(\n this: ITransformAction,\n prepareFn: PrepareCodeFn\n): SyncScenarioForAction<ITransformAction> {\n const { only, loadedAndParsed, log } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n log('>> (%o)', only);\n\n const [preparedCode, imports, metadata] = prepareFn(\n this.services,\n this.entrypoint,\n loadedAndParsed.ast\n );\n\n if (loadedAndParsed.code === preparedCode) {\n log('<< (%o)\\n === no changes ===', only);\n } else {\n log('<< (%o)', only);\n log.extend('source')('%s', preparedCode || EMPTY_FILE);\n }\n\n if (preparedCode === '') {\n log('is skipped');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n if (imports !== null && imports.size > 0) {\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports,\n }\n );\n\n if (resolvedImports.length !== 0) {\n yield [\n 'processImports',\n this.entrypoint,\n {\n resolved: resolvedImports,\n },\n ];\n }\n }\n\n return {\n code: preparedCode,\n metadata,\n };\n}\n\n/**\n * Prepares the code for evaluation. This includes removing dead and potentially unsafe code.\n * Emits resolveImports and processImports events.\n */\nexport function transform(this: ITransformAction) {\n return internalTransform.call(this, prepareCode);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"transform.js","names":["_buildOptions","require","_dynamicImport","_interopRequireDefault","_preeval","_shaker","_TransformMetadata","_getPluginKey","_rewriteBarrelImports","e","__esModule","default","EMPTY_FILE","hasKeyInList","plugin","list","pluginKey","getPluginKey","some","i","includes","runPreevalStage","babel","evalConfig","pluginOptions","code","originalAst","eventEmitter","_evalConfig$plugins$f","_evalConfig$plugins","_evalConfig$plugins2","_result$ast","preShakePlugins","plugins","filter","highPriorityPlugins","preevalPlugin","dynamicImportPlugin","transformConfig","buildOptions","envName","result","transformFromAstSync","ast","program","Error","isPrevalOnly","only","length","prepareEvaluatorInput","services","item","loadedAndParsed","log","evaluator","name","options","preevalStageResult","perf","transformMetadata","getTransformMetadata","metadata","kind","evaluatorConfig","onlyExports","features","importOverrides","root","prepareCode","_loadedAndParsed$code","prepared","extend","transformedCode","imports","exports","internalTransform","prepareFn","entrypoint","_loadedAndParsed$code2","preparedCode","_loadedAndParsed$code3","size","resolvedImports","getNext","resolved","transform","_loadedAndParsed$code4","shaker","call","_loadedAndParsed$code5","shakenAst","shakenCode","shakenImports","shakeToESM","nextAst","nextCode","nextResolvedImports","phase","rewritten","rewriteOptimizedBarrelImports","optimizedCount","fullyRewrittenSources","Set","partialFallbackSources","dependency","has","source","addDependency","addInvalidationDependency","markInvalidateOnDependencyChange","preResolved","preResolvedImports","emitCommonJS","_loadedAndParsed$code6"],"sources":["../../../src/transform/generators/transform.ts"],"sourcesContent":["import type {\n BabelFileResult,\n PluginItem,\n TransformOptions,\n} from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type { EvaluatorConfig, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { Core } from '../../babel';\nimport { buildOptions } from '../../options/buildOptions';\nimport dynamicImportPlugin from '../../plugins/dynamic-import';\nimport preevalPlugin from '../../plugins/preeval';\nimport { emitCommonJS, shakeToESM, shaker } from '../../shaker';\nimport type { EventEmitter } from '../../utils/EventEmitter';\nimport type { WYWTransformMetadata } from '../../utils/TransformMetadata';\nimport { getTransformMetadata } from '../../utils/TransformMetadata';\nimport { getPluginKey } from '../../utils/getPluginKey';\nimport type { Entrypoint } from '../Entrypoint';\nimport type { IEntrypointDependency } from '../Entrypoint.types';\nimport type {\n ITransformAction,\n Services,\n SyncScenarioForAction,\n} from '../types';\nimport { rewriteOptimizedBarrelImports } from './rewriteBarrelImports';\n\nconst EMPTY_FILE = '=== empty file ===';\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\nfunction runPreevalStage(\n babel: Core,\n evalConfig: TransformOptions,\n pluginOptions: StrictOptions,\n code: string,\n originalAst: File,\n eventEmitter: EventEmitter\n): BabelFileResult {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) =>\n hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ) ?? [];\n\n const plugins = [\n ...preShakePlugins,\n [\n preevalPlugin,\n {\n ...pluginOptions,\n eventEmitter,\n },\n ],\n dynamicImportPlugin,\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ),\n ];\n\n const transformConfig = buildOptions({\n ...evalConfig,\n envName: 'wyw-in-js',\n plugins,\n });\n\n const result = babel.transformFromAstSync(originalAst, code, transformConfig);\n\n if (!result || !result.ast?.program) {\n throw new Error('Babel transform failed');\n }\n\n return result;\n}\n\ntype PrepareCodeFn = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n) => [\n code: string,\n imports: Map<string, string[]> | null,\n metadata: WYWTransformMetadata | null,\n];\n\ntype PreparedEvaluatorInput =\n | {\n kind: 'continue';\n ast: File;\n code: string;\n evalConfig: TransformOptions;\n evaluatorConfig: EvaluatorConfig;\n metadata: WYWTransformMetadata | null;\n }\n | {\n kind: 'short-circuit';\n code: string;\n };\n\nconst isPrevalOnly = (only: string[]) =>\n only.length === 1 && only[0] === '__wywPreval';\n\nconst prepareEvaluatorInput = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n): PreparedEvaluatorInput => {\n const { only, loadedAndParsed, log } = item;\n if (loadedAndParsed.evaluator === 'ignored') {\n throw new Error(`Cannot prepare ignored entrypoint ${item.name}`);\n }\n\n const { code, evalConfig } = loadedAndParsed;\n const { options, babel, eventEmitter } = services;\n const { pluginOptions } = options;\n\n const preevalStageResult = eventEmitter.perf('transform:preeval', () =>\n runPreevalStage(\n babel,\n evalConfig,\n pluginOptions,\n code,\n originalAst,\n eventEmitter\n )\n );\n\n const transformMetadata = getTransformMetadata(preevalStageResult.metadata);\n if (isPrevalOnly(only) && !transformMetadata) {\n log('[evaluator:end] no metadata');\n return {\n kind: 'short-circuit',\n code: preevalStageResult.code!,\n };\n }\n\n log('[preeval] metadata %O', transformMetadata);\n\n return {\n kind: 'continue',\n ast: preevalStageResult.ast!,\n code: preevalStageResult.code!,\n evalConfig,\n evaluatorConfig: {\n onlyExports: only,\n highPriorityPlugins: pluginOptions.highPriorityPlugins,\n features: pluginOptions.features,\n importOverrides: pluginOptions.importOverrides,\n root: options.root,\n },\n metadata: transformMetadata ?? null,\n };\n};\n\nexport const prepareCode = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n): ReturnType<PrepareCodeFn> => {\n const { log, loadedAndParsed } = item;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return [loadedAndParsed.code ?? '', null, null];\n }\n\n const { evaluator } = loadedAndParsed;\n const { babel, eventEmitter } = services;\n const prepared = prepareEvaluatorInput(services, item, originalAst);\n if (prepared.kind === 'short-circuit') {\n return [prepared.code, null, null];\n }\n\n log('[evaluator:start] using %s', evaluator.name);\n log.extend('source')('%s', prepared.code);\n\n const [, transformedCode, imports] = eventEmitter.perf(\n 'transform:evaluator',\n () =>\n evaluator(\n prepared.evalConfig,\n prepared.ast,\n prepared.code,\n prepared.evaluatorConfig,\n babel\n )\n );\n\n log('[evaluator:end]');\n\n return [transformedCode, imports, prepared.metadata];\n};\n\nexport function* internalTransform(\n this: ITransformAction,\n prepareFn: PrepareCodeFn\n): SyncScenarioForAction<ITransformAction> {\n const { only, loadedAndParsed, log } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n log('>> (%o)', only);\n\n const [preparedCode, imports, metadata] = prepareFn(\n this.services,\n this.entrypoint,\n loadedAndParsed.ast\n );\n\n if (loadedAndParsed.code === preparedCode) {\n log('<< (%o)\\n === no changes ===', only);\n } else {\n log('<< (%o)', only);\n log.extend('source')('%s', preparedCode || EMPTY_FILE);\n }\n\n if (preparedCode === '') {\n log('is skipped');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n if (imports !== null && imports.size > 0) {\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports,\n }\n );\n\n if (resolvedImports.length !== 0) {\n yield [\n 'processImports',\n this.entrypoint,\n {\n resolved: resolvedImports,\n },\n ];\n }\n }\n\n return {\n code: preparedCode,\n metadata,\n };\n}\n\n/**\n * Prepares the code for evaluation. This includes removing dead and potentially unsafe code.\n * Emits resolveImports and processImports events.\n */\nexport function* transform(\n this: ITransformAction\n): SyncScenarioForAction<ITransformAction> {\n const { only, loadedAndParsed, log } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n if (loadedAndParsed.evaluator !== shaker) {\n return yield* internalTransform.call(this, prepareCode);\n }\n\n log('>> (%o)', only);\n\n const prepared = prepareEvaluatorInput(\n this.services,\n this.entrypoint,\n loadedAndParsed.ast\n );\n\n if (prepared.kind === 'short-circuit') {\n if (loadedAndParsed.code === prepared.code) {\n log('<< (%o)\\n === no changes ===', only);\n } else {\n log('<< (%o)', only);\n log.extend('source')('%s', prepared.code || EMPTY_FILE);\n }\n\n if (prepared.code === '') {\n log('is skipped');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n return {\n code: prepared.code,\n metadata: null,\n };\n }\n\n log('[evaluator:start] using %s', loadedAndParsed.evaluator.name);\n log.extend('source')('%s', prepared.code);\n\n const { babel, eventEmitter } = this.services;\n const [shakenAst, shakenCode, shakenImports] = eventEmitter.perf(\n 'transform:evaluator',\n () =>\n shakeToESM(\n prepared.evalConfig,\n prepared.ast,\n prepared.code,\n prepared.evaluatorConfig,\n babel\n )\n );\n\n let nextAst = shakenAst;\n let nextCode = shakenCode;\n let nextResolvedImports: IEntrypointDependency[] = [];\n\n if (shakenImports !== null && shakenImports.size > 0) {\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports: shakenImports,\n phase: 'initial',\n }\n );\n\n if (resolvedImports.length > 0) {\n const rewritten = yield* rewriteOptimizedBarrelImports.call(\n this,\n shakenAst,\n shakenCode,\n resolvedImports\n );\n\n nextAst = rewritten.ast;\n nextCode = rewritten.code;\n if (rewritten.optimizedCount > 0) {\n const fullyRewrittenSources = new Set(rewritten.fullyRewrittenSources);\n const partialFallbackSources = new Set(\n rewritten.partialFallbackSources\n );\n for (const dependency of resolvedImports) {\n if (\n dependency.resolved &&\n (fullyRewrittenSources.has(dependency.source) ||\n partialFallbackSources.has(dependency.source))\n ) {\n if (partialFallbackSources.has(dependency.source)) {\n this.entrypoint.addDependency(dependency);\n } else {\n this.entrypoint.addInvalidationDependency(dependency);\n }\n this.entrypoint.markInvalidateOnDependencyChange(\n dependency.resolved\n );\n }\n }\n\n nextResolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports: rewritten.imports,\n phase: 'rewritten',\n preResolved: rewritten.preResolvedImports,\n }\n );\n } else {\n nextResolvedImports = resolvedImports;\n }\n }\n }\n\n if (nextResolvedImports.length !== 0) {\n yield [\n 'processImports',\n this.entrypoint,\n {\n resolved: nextResolvedImports,\n },\n ];\n }\n\n const [, preparedCode] = eventEmitter.perf('transform:emitCommonJS', () =>\n emitCommonJS(prepared.evalConfig, nextAst, nextCode, babel)\n );\n\n log('[evaluator:end]');\n\n if (loadedAndParsed.code === preparedCode) {\n log('<< (%o)\\n === no changes ===', only);\n } else {\n log('<< (%o)', only);\n log.extend('source')('%s', preparedCode || EMPTY_FILE);\n }\n\n if (preparedCode === '') {\n log('is skipped');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n return {\n code: preparedCode,\n metadata: prepared.metadata,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["Pending","exports","Symbol"],"sources":["../../src/transform/types.ts"],"sourcesContent":["import type { BabelFileResult } from '@babel/core';\n\nimport type { ValueCache } from '@wyw-in-js/processor-utils';\nimport type { Debugger, Artifact, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { TransformCacheCollection } from '../cache';\nimport type { Options, ITransformFileResult } from '../types';\nimport type { EventEmitter } from '../utils/EventEmitter';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\n\nimport type { Entrypoint } from './Entrypoint';\nimport type { LoadAndParseFn, IEntrypointDependency } from './Entrypoint.types';\nimport type { BaseAction } from './actions/BaseAction';\nimport type {\n IExtracted,\n IWorkflowActionLinariaResult,\n IWorkflowActionNonLinariaResult,\n} from './actions/types';\n\nexport type Services = {\n babel: Core;\n cache: TransformCacheCollection;\n emitWarning?: (message: string) => void;\n eventEmitter: EventEmitter;\n loadAndParseFn: LoadAndParseFn;\n log: Debugger;\n options: Options & {\n pluginOptions: StrictOptions;\n };\n};\n\nexport interface IBaseNode {\n type: ActionTypes;\n}\n\nexport type ActionByType<TType extends ActionQueueItem['type']> = Extract<\n ActionQueueItem,\n {\n type: TType;\n }\n>;\n\nexport const Pending = Symbol('pending');\n\nexport type YieldResult = Exclude<ActionQueueItem['result'], typeof Pending>;\n\nexport type AnyIteratorResult<TMode extends 'async' | 'sync', TResult> = {\n async: Promise<IteratorResult<YieldArg, TResult>>;\n sync: IteratorResult<YieldArg, TResult>;\n}[TMode];\n\nexport interface IBaseAction<TAction extends ActionQueueItem, TResult, TData>\n extends IBaseNode {\n abortSignal: AbortSignal | null;\n createAbortSignal: () => AbortSignal & Disposable;\n data: TData;\n entrypoint: Entrypoint;\n getNext: GetNext;\n idx: string;\n result: TResult | typeof Pending;\n run: <TMode extends 'async' | 'sync'>(\n handler: Handler<TMode, TAction>\n ) => {\n next: (arg: YieldResult) => AnyIteratorResult<TMode, TResult>;\n throw(e: unknown): AnyIteratorResult<TMode, TResult>;\n };\n services: Services;\n}\n\ntype NextParams<\n TType extends ActionTypes,\n TNextAction extends ActionByType<TType> = ActionByType<TType>,\n> = [\n type: TType,\n entrypoint: Entrypoint,\n data: TNextAction['data'],\n abortSignal?: AbortSignal | null,\n];\n\nexport type YieldArg = {\n [K in ActionQueueItem['type']]: NextParams<K>;\n}[ActionQueueItem['type']];\n\nexport type SyncScenarioFor<TResult> = {\n [Symbol.iterator](): SyncScenarioFor<TResult>;\n next(arg: YieldResult): IteratorResult<YieldArg, TResult>;\n return(value: TResult): IteratorResult<YieldArg, TResult>;\n throw(e: unknown): IteratorResult<YieldArg, TResult>;\n};\n\nexport type AsyncScenarioFor<TResult> = {\n [Symbol.asyncIterator](): AsyncScenarioFor<TResult>;\n next(arg: YieldResult): Promise<IteratorResult<YieldArg, TResult>>;\n return(\n value: TResult | PromiseLike<TResult>\n ): Promise<IteratorResult<YieldArg, TResult>>;\n throw(e: unknown): Promise<IteratorResult<YieldArg, TResult>>;\n};\n\nexport type SyncScenarioForAction<TAction extends ActionQueueItem> =\n SyncScenarioFor<TypeOfResult<TAction>>;\n\nexport type AsyncScenarioForAction<TAction extends ActionQueueItem> =\n AsyncScenarioFor<TypeOfResult<TAction>>;\n\nexport type Handler<\n TMode extends 'async' | 'sync',\n TAction extends ActionQueueItem,\n> = ((this: BaseAction<TAction>) => {\n async: AsyncScenarioForAction<TAction>;\n sync: SyncScenarioForAction<TAction>;\n}[TMode]) & {\n recover?: (e: unknown, action: BaseAction<TAction>) => YieldArg;\n};\n\nexport type Handlers<TMode extends 'async' | 'sync'> = {\n [TAction in ActionQueueItem as TAction['type']]: Handler<TMode, TAction>;\n};\n\nexport type TypeOfResult<T extends ActionQueueItem> = Exclude<\n T['result'],\n typeof Pending\n>;\n\nexport type GetNext = <\n TType extends ActionTypes,\n TNextAction extends ActionByType<TType> = ActionByType<TType>,\n>(\n ...args: NextParams<TType, TNextAction>\n) => Generator<\n [TType, Entrypoint, TNextAction['data'], AbortSignal | null],\n TypeOfResult<TNextAction>,\n YieldResult\n>;\n\nexport interface ICollectActionResult {\n ast: BabelFileResult['ast']; // FIXME: looks like this is not used\n code: BabelFileResult['code'];\n map?: BabelFileResult['map'];\n metadata?: WYWTransformMetadata | null;\n}\n\nexport interface ICollectAction\n extends IBaseAction<\n ICollectAction,\n ICollectActionResult,\n { valueCache: ValueCache }\n > {\n type: 'collect';\n}\n\nexport interface IEvalAction\n extends IBaseAction<IEvalAction, [ValueCache, string[]] | null, undefined> {\n type: 'evalFile';\n}\n\nexport interface IExplodeReexportsAction\n extends IBaseAction<IExplodeReexportsAction, void, undefined> {\n type: 'explodeReexports';\n}\n\nexport interface IExtractAction\n extends IBaseAction<\n IExtractAction,\n IExtracted,\n { processors: { artifacts: Artifact[] }[] }\n > {\n type: 'extract';\n}\n\nexport interface IGetExportsAction\n extends IBaseAction<IGetExportsAction, string[], undefined> {\n type: 'getExports';\n}\n\nexport interface IProcessEntrypointAction\n extends IBaseAction<IProcessEntrypointAction, void, undefined> {\n type: 'processEntrypoint';\n}\n\nexport interface IProcessImportsAction\n extends IBaseAction<\n IProcessImportsAction,\n void,\n {\n resolved: IEntrypointDependency[];\n }\n > {\n type: 'processImports';\n}\n\nexport interface IResolveImportsAction\n extends IBaseAction<\n IResolveImportsAction,\n IEntrypointDependency[],\n {\n imports: Map<string, string[]> | null;\n }\n > {\n type: 'resolveImports';\n}\n\nexport interface ITransformAction\n extends IBaseAction<ITransformAction, ITransformFileResult, undefined> {\n type: 'transform';\n}\n\nexport interface IWorkflowAction\n extends IBaseAction<\n IWorkflowAction,\n IWorkflowActionLinariaResult | IWorkflowActionNonLinariaResult,\n undefined\n > {\n type: 'workflow';\n}\n\nexport type ActionQueueItem =\n | IEvalAction\n | IExplodeReexportsAction\n | IExtractAction\n | IGetExportsAction\n | ICollectAction\n | IProcessEntrypointAction\n | IProcessImportsAction\n | IResolveImportsAction\n | ITransformAction\n | IWorkflowAction;\n\nexport type ActionTypes = ActionQueueItem['type'];\n"],"mappings":";;;;;;AA2CO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAGE,MAAM,CAAC,SAAS,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":["Pending","exports","Symbol"],"sources":["../../src/transform/types.ts"],"sourcesContent":["import type { BabelFileResult } from '@babel/core';\n\nimport type { ValueCache } from '@wyw-in-js/processor-utils';\nimport type { Debugger, Artifact, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { TransformCacheCollection } from '../cache';\nimport type { Options, ITransformFileResult } from '../types';\nimport type { EventEmitter } from '../utils/EventEmitter';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\n\nimport type { Entrypoint } from './Entrypoint';\nimport type { LoadAndParseFn, IEntrypointDependency } from './Entrypoint.types';\nimport type { BaseAction } from './actions/BaseAction';\nimport type {\n IExtracted,\n IWorkflowActionLinariaResult,\n IWorkflowActionNonLinariaResult,\n} from './actions/types';\n\nexport type Services = {\n babel: Core;\n cache: TransformCacheCollection;\n emitWarning?: (message: string) => void;\n eventEmitter: EventEmitter;\n loadAndParseFn: LoadAndParseFn;\n log: Debugger;\n options: Options & {\n pluginOptions: StrictOptions;\n };\n};\n\nexport interface IBaseNode {\n type: ActionTypes;\n}\n\nexport type ActionByType<TType extends ActionQueueItem['type']> = Extract<\n ActionQueueItem,\n {\n type: TType;\n }\n>;\n\nexport const Pending = Symbol('pending');\n\nexport type YieldResult = Exclude<ActionQueueItem['result'], typeof Pending>;\n\nexport type AnyIteratorResult<TMode extends 'async' | 'sync', TResult> = {\n async: Promise<IteratorResult<YieldArg, TResult>>;\n sync: IteratorResult<YieldArg, TResult>;\n}[TMode];\n\nexport interface IBaseAction<TAction extends ActionQueueItem, TResult, TData>\n extends IBaseNode {\n abortSignal: AbortSignal | null;\n createAbortSignal: () => AbortSignal & Disposable;\n data: TData;\n entrypoint: Entrypoint;\n getNext: GetNext;\n idx: string;\n result: TResult | typeof Pending;\n run: <TMode extends 'async' | 'sync'>(\n handler: Handler<TMode, TAction>\n ) => {\n next: (arg: YieldResult) => AnyIteratorResult<TMode, TResult>;\n throw(e: unknown): AnyIteratorResult<TMode, TResult>;\n };\n services: Services;\n}\n\ntype NextParams<\n TType extends ActionTypes,\n TNextAction extends ActionByType<TType> = ActionByType<TType>,\n> = [\n type: TType,\n entrypoint: Entrypoint,\n data: TNextAction['data'],\n abortSignal?: AbortSignal | null,\n];\n\nexport type YieldArg = {\n [K in ActionQueueItem['type']]: NextParams<K>;\n}[ActionQueueItem['type']];\n\nexport type SyncScenarioFor<TResult> = {\n [Symbol.iterator](): SyncScenarioFor<TResult>;\n next(arg: YieldResult): IteratorResult<YieldArg, TResult>;\n return(value: TResult): IteratorResult<YieldArg, TResult>;\n throw(e: unknown): IteratorResult<YieldArg, TResult>;\n};\n\nexport type AsyncScenarioFor<TResult> = {\n [Symbol.asyncIterator](): AsyncScenarioFor<TResult>;\n next(arg: YieldResult): Promise<IteratorResult<YieldArg, TResult>>;\n return(\n value: TResult | PromiseLike<TResult>\n ): Promise<IteratorResult<YieldArg, TResult>>;\n throw(e: unknown): Promise<IteratorResult<YieldArg, TResult>>;\n};\n\nexport type SyncScenarioForAction<TAction extends ActionQueueItem> =\n SyncScenarioFor<TypeOfResult<TAction>>;\n\nexport type AsyncScenarioForAction<TAction extends ActionQueueItem> =\n AsyncScenarioFor<TypeOfResult<TAction>>;\n\nexport type Handler<\n TMode extends 'async' | 'sync',\n TAction extends ActionQueueItem,\n> = ((this: BaseAction<TAction>) => {\n async: AsyncScenarioForAction<TAction>;\n sync: SyncScenarioForAction<TAction>;\n}[TMode]) & {\n recover?: (e: unknown, action: BaseAction<TAction>) => YieldArg;\n};\n\nexport type Handlers<TMode extends 'async' | 'sync'> = {\n [TAction in ActionQueueItem as TAction['type']]: Handler<TMode, TAction>;\n};\n\nexport type TypeOfResult<T extends ActionQueueItem> = Exclude<\n T['result'],\n typeof Pending\n>;\n\nexport type GetNext = <\n TType extends ActionTypes,\n TNextAction extends ActionByType<TType> = ActionByType<TType>,\n>(\n ...args: NextParams<TType, TNextAction>\n) => Generator<\n [TType, Entrypoint, TNextAction['data'], AbortSignal | null],\n TypeOfResult<TNextAction>,\n YieldResult\n>;\n\nexport interface ICollectActionResult {\n ast: BabelFileResult['ast']; // FIXME: looks like this is not used\n code: BabelFileResult['code'];\n map?: BabelFileResult['map'];\n metadata?: WYWTransformMetadata | null;\n}\n\nexport interface ICollectAction\n extends IBaseAction<\n ICollectAction,\n ICollectActionResult,\n { valueCache: ValueCache }\n > {\n type: 'collect';\n}\n\nexport interface IEvalAction\n extends IBaseAction<IEvalAction, [ValueCache, string[]] | null, undefined> {\n type: 'evalFile';\n}\n\nexport interface IExplodeReexportsAction\n extends IBaseAction<IExplodeReexportsAction, void, undefined> {\n type: 'explodeReexports';\n}\n\nexport interface IExtractAction\n extends IBaseAction<\n IExtractAction,\n IExtracted,\n { processors: { artifacts: Artifact[] }[] }\n > {\n type: 'extract';\n}\n\nexport interface IGetExportsAction\n extends IBaseAction<IGetExportsAction, string[], undefined> {\n type: 'getExports';\n}\n\nexport interface IProcessEntrypointAction\n extends IBaseAction<IProcessEntrypointAction, void, undefined> {\n type: 'processEntrypoint';\n}\n\nexport interface IProcessImportsAction\n extends IBaseAction<\n IProcessImportsAction,\n void,\n {\n resolved: IEntrypointDependency[];\n }\n > {\n type: 'processImports';\n}\n\nexport interface IResolveImportsAction\n extends IBaseAction<\n IResolveImportsAction,\n IEntrypointDependency[],\n {\n imports: Map<string, string[]> | null;\n phase?: 'initial' | 'rewritten';\n preResolved?: IEntrypointDependency[];\n }\n > {\n type: 'resolveImports';\n}\n\nexport interface ITransformAction\n extends IBaseAction<ITransformAction, ITransformFileResult, undefined> {\n type: 'transform';\n}\n\nexport interface IWorkflowAction\n extends IBaseAction<\n IWorkflowAction,\n IWorkflowActionLinariaResult | IWorkflowActionNonLinariaResult,\n undefined\n > {\n type: 'workflow';\n}\n\nexport type ActionQueueItem =\n | IEvalAction\n | IExplodeReexportsAction\n | IExtractAction\n | IGetExportsAction\n | ICollectAction\n | IProcessEntrypointAction\n | IProcessImportsAction\n | IResolveImportsAction\n | ITransformAction\n | IWorkflowAction;\n\nexport type ActionTypes = ActionQueueItem['type'];\n"],"mappings":";;;;;;AA2CO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAGE,MAAM,CAAC,SAAS,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wyw-in-js/transform",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "dependencies": {
5
5
  "@babel/core": "^7.23.5",
6
6
  "@babel/generator": "^7.23.5",
@@ -9,8 +9,8 @@
9
9
  "@babel/template": "^7.22.15",
10
10
  "@babel/traverse": "^7.23.5",
11
11
  "@babel/types": "^7.23.5",
12
- "@wyw-in-js/processor-utils": "1.0.4",
13
- "@wyw-in-js/shared": "1.0.4",
12
+ "@wyw-in-js/processor-utils": "1.0.5",
13
+ "@wyw-in-js/shared": "1.0.5",
14
14
  "cosmiconfig": "^8.0.0",
15
15
  "happy-dom": "^20.1.0",
16
16
  "minimatch": "^9.0.5",
@@ -62,5 +62,9 @@
62
62
  "lint": "eslint --ext .js,.ts .",
63
63
  "test": "bun test src"
64
64
  },
65
- "types": "types/index.d.ts"
65
+ "types": "types/index.d.ts",
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "https://github.com/Anber/wyw-in-js"
69
+ }
66
70
  }
package/types/cache.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { BarrelManifestCacheEntry } from './transform/barrelManifest';
1
2
  import type { Entrypoint } from './transform/Entrypoint';
2
3
  import type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';
3
4
  interface IBaseCachedEntrypoint {
@@ -5,18 +6,26 @@ interface IBaseCachedEntrypoint {
5
6
  resolved: string | null;
6
7
  }>;
7
8
  initialCode?: string;
9
+ invalidateOnDependencyChange?: Set<string>;
10
+ invalidationDependencies?: Map<string, {
11
+ resolved: string | null;
12
+ }>;
8
13
  }
9
14
  interface ICaches<TEntrypoint extends IBaseCachedEntrypoint> {
15
+ barrelManifests: Map<string, BarrelManifestCacheEntry>;
10
16
  entrypoints: Map<string, TEntrypoint>;
11
17
  exports: Map<string, string[]>;
12
18
  }
13
19
  type MapValue<T> = T extends Map<string, infer V> ? V : never;
14
- declare const cacheNames: readonly ["entrypoints", "exports"];
20
+ declare const cacheNames: readonly ["barrelManifests", "entrypoints", "exports"];
15
21
  type CacheNames = (typeof cacheNames)[number];
16
22
  export declare class TransformCacheCollection<TEntrypoint extends IBaseCachedEntrypoint = Entrypoint | IEvaluatedEntrypoint> {
23
+ readonly barrelManifests: Map<string, BarrelManifestCacheEntry>;
17
24
  readonly entrypoints: Map<string, TEntrypoint>;
18
25
  readonly exports: Map<string, string[]>;
26
+ private readonly barrelManifestDependencies;
19
27
  private contentHashes;
28
+ private readonly exportDependencies;
20
29
  constructor(caches?: Partial<ICaches<TEntrypoint>>);
21
30
  add<TCache extends CacheNames, TValue extends MapValue<ICaches<TEntrypoint>[TCache]>>(cacheName: TCache, key: string, value: TValue): void;
22
31
  clear(cacheName: CacheNames | 'all'): void;
@@ -25,7 +34,12 @@ export declare class TransformCacheCollection<TEntrypoint extends IBaseCachedEnt
25
34
  has(cacheName: CacheNames, key: string): boolean;
26
35
  invalidate(cacheName: CacheNames, key: string): void;
27
36
  invalidateForFile(filename: string): void;
28
- invalidateIfChanged(filename: string, content: string, previousVisitedFiles?: Set<string>, source?: 'fs' | 'loaded'): boolean;
37
+ invalidateIfChanged(filename: string, content: string, previousVisitedFiles?: Set<string>, source?: 'fs' | 'loaded', changedFiles?: Set<string>): boolean;
38
+ setCacheDependencies(cacheName: 'barrelManifests' | 'exports', key: string, dependencies: Iterable<string>): void;
39
+ private clearCacheDependencies;
40
+ private getCachedDependencies;
41
+ private getDependencyCache;
42
+ private hasCachedDependencies;
29
43
  private setContentHash;
30
44
  }
31
45
  export {};