@wyw-in-js/transform 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/cache.js +100 -7
- package/esm/cache.js.map +1 -1
- package/esm/debug/fileReporter.js.map +1 -1
- package/esm/module.js +51 -2
- package/esm/module.js.map +1 -1
- package/esm/plugins/shaker.js +152 -13
- package/esm/plugins/shaker.js.map +1 -1
- package/esm/shaker.js +51 -23
- package/esm/shaker.js.map +1 -1
- package/esm/transform/BaseEntrypoint.js +3 -1
- package/esm/transform/BaseEntrypoint.js.map +1 -1
- package/esm/transform/Entrypoint.js +60 -17
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
- package/esm/transform/barrelManifest.js +291 -0
- package/esm/transform/barrelManifest.js.map +1 -0
- package/esm/transform/generators/getExports.js +5 -0
- package/esm/transform/generators/getExports.js.map +1 -1
- package/esm/transform/generators/processEntrypoint.js +27 -1
- package/esm/transform/generators/processEntrypoint.js.map +1 -1
- package/esm/transform/generators/resolveImports.js +29 -5
- package/esm/transform/generators/resolveImports.js.map +1 -1
- package/esm/transform/generators/rewriteBarrelImports.js +733 -0
- package/esm/transform/generators/rewriteBarrelImports.js.map +1 -0
- package/esm/transform/generators/transform.js +154 -21
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/types.js.map +1 -1
- package/lib/cache.js +103 -7
- package/lib/cache.js.map +1 -1
- package/lib/debug/fileReporter.js.map +1 -1
- package/lib/module.js +51 -2
- package/lib/module.js.map +1 -1
- package/lib/plugins/shaker.js +152 -13
- package/lib/plugins/shaker.js.map +1 -1
- package/lib/shaker.js +58 -26
- package/lib/shaker.js.map +1 -1
- package/lib/transform/BaseEntrypoint.js +3 -1
- package/lib/transform/BaseEntrypoint.js.map +1 -1
- package/lib/transform/Entrypoint.js +61 -17
- package/lib/transform/Entrypoint.js.map +1 -1
- package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
- package/lib/transform/barrelManifest.js +300 -0
- package/lib/transform/barrelManifest.js.map +1 -0
- package/lib/transform/generators/getExports.js +5 -0
- package/lib/transform/generators/getExports.js.map +1 -1
- package/lib/transform/generators/processEntrypoint.js +27 -1
- package/lib/transform/generators/processEntrypoint.js.map +1 -1
- package/lib/transform/generators/resolveImports.js +29 -5
- package/lib/transform/generators/resolveImports.js.map +1 -1
- package/lib/transform/generators/rewriteBarrelImports.js +743 -0
- package/lib/transform/generators/rewriteBarrelImports.js.map +1 -0
- package/lib/transform/generators/transform.js +158 -22
- package/lib/transform/generators/transform.js.map +1 -1
- package/lib/transform/types.js.map +1 -1
- package/package.json +8 -4
- package/types/cache.d.ts +16 -2
- package/types/cache.js +111 -7
- package/types/debug/fileReporter.d.ts +1 -0
- package/types/module.d.ts +3 -0
- package/types/module.js +57 -2
- package/types/plugins/shaker.js +161 -16
- package/types/shaker.d.ts +10 -1
- package/types/shaker.js +56 -28
- package/types/transform/BaseEntrypoint.d.ts +3 -1
- package/types/transform/BaseEntrypoint.js +5 -1
- package/types/transform/Entrypoint.d.ts +9 -0
- package/types/transform/Entrypoint.js +73 -20
- package/types/transform/EvaluatedEntrypoint.d.ts +2 -0
- package/types/transform/barrelManifest.d.ts +42 -0
- package/types/transform/barrelManifest.js +300 -0
- package/types/transform/generators/getExports.js +5 -0
- package/types/transform/generators/processEntrypoint.js +26 -1
- package/types/transform/generators/resolveImports.js +29 -5
- package/types/transform/generators/rewriteBarrelImports.d.ts +15 -0
- package/types/transform/generators/rewriteBarrelImports.js +815 -0
- package/types/transform/generators/transform.js +148 -19
- package/types/transform/types.d.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewriteBarrelImports.js","names":["generate","t","EventEmitter","shaker","TransformCacheCollection","Entrypoint","analyzeBarrelFile","createAnalysisServices","services","cache","barrelManifests","exports","eventEmitter","dummy","addBinding","manifest","exported","binding","explicitExports","existing","has","kind","isSameBinding","reason","addBlockedExport","buildResolvedDependencyMap","resolvedImports","Map","map","dependency","source","cloneExportedName","name","isValidIdentifier","identifier","stringLiteral","cloneImportedName","left","right","imported","createAnalysisEntrypoint","filename","loadedCode","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","set","get","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","getNamedBinding","analysisServices","targetResolved","stack","targetManifest","getOrBuildBarrelManifest","call","complete","getStarCandidates","candidates","Object","filter","getExportsForFile","getNext","undefined","cached","status","loadedAndParsed","loadAndParseFn","log","evaluator","ignoredEntry","add","customEntry","analyzed","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","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":[]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { buildOptions } from '../../options/buildOptions';
|
|
2
2
|
import dynamicImportPlugin from '../../plugins/dynamic-import';
|
|
3
3
|
import preevalPlugin from '../../plugins/preeval';
|
|
4
|
+
import { emitCommonJS, shakeToESM, shaker } from '../../shaker';
|
|
4
5
|
import { getTransformMetadata } from '../../utils/TransformMetadata';
|
|
5
6
|
import { getPluginKey } from '../../utils/getPluginKey';
|
|
7
|
+
import { rewriteOptimizedBarrelImports } from './rewriteBarrelImports';
|
|
6
8
|
const EMPTY_FILE = '=== empty file ===';
|
|
7
9
|
const hasKeyInList = (plugin, list) => {
|
|
8
10
|
const pluginKey = getPluginKey(plugin);
|
|
@@ -25,20 +27,19 @@ function runPreevalStage(babel, evalConfig, pluginOptions, code, originalAst, ev
|
|
|
25
27
|
}
|
|
26
28
|
return result;
|
|
27
29
|
}
|
|
28
|
-
|
|
30
|
+
const isPrevalOnly = only => only.length === 1 && only[0] === '__wywPreval';
|
|
31
|
+
const prepareEvaluatorInput = (services, item, originalAst) => {
|
|
29
32
|
const {
|
|
30
|
-
log,
|
|
31
33
|
only,
|
|
32
|
-
loadedAndParsed
|
|
34
|
+
loadedAndParsed,
|
|
35
|
+
log
|
|
33
36
|
} = item;
|
|
34
37
|
if (loadedAndParsed.evaluator === 'ignored') {
|
|
35
|
-
|
|
36
|
-
return [loadedAndParsed.code ?? '', null, null];
|
|
38
|
+
throw new Error(`Cannot prepare ignored entrypoint ${item.name}`);
|
|
37
39
|
}
|
|
38
40
|
const {
|
|
39
41
|
code,
|
|
40
|
-
evalConfig
|
|
41
|
-
evaluator
|
|
42
|
+
evalConfig
|
|
42
43
|
} = loadedAndParsed;
|
|
43
44
|
const {
|
|
44
45
|
options,
|
|
@@ -50,23 +51,54 @@ export const prepareCode = (services, item, originalAst) => {
|
|
|
50
51
|
} = options;
|
|
51
52
|
const preevalStageResult = eventEmitter.perf('transform:preeval', () => runPreevalStage(babel, evalConfig, pluginOptions, code, originalAst, eventEmitter));
|
|
52
53
|
const transformMetadata = getTransformMetadata(preevalStageResult.metadata);
|
|
53
|
-
if (only
|
|
54
|
+
if (isPrevalOnly(only) && !transformMetadata) {
|
|
54
55
|
log('[evaluator:end] no metadata');
|
|
55
|
-
return
|
|
56
|
+
return {
|
|
57
|
+
kind: 'short-circuit',
|
|
58
|
+
code: preevalStageResult.code
|
|
59
|
+
};
|
|
56
60
|
}
|
|
57
61
|
log('[preeval] metadata %O', transformMetadata);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
return {
|
|
63
|
+
kind: 'continue',
|
|
64
|
+
ast: preevalStageResult.ast,
|
|
65
|
+
code: preevalStageResult.code,
|
|
66
|
+
evalConfig,
|
|
67
|
+
evaluatorConfig: {
|
|
68
|
+
onlyExports: only,
|
|
69
|
+
highPriorityPlugins: pluginOptions.highPriorityPlugins,
|
|
70
|
+
features: pluginOptions.features,
|
|
71
|
+
importOverrides: pluginOptions.importOverrides,
|
|
72
|
+
root: options.root
|
|
73
|
+
},
|
|
74
|
+
metadata: transformMetadata ?? null
|
|
66
75
|
};
|
|
67
|
-
|
|
76
|
+
};
|
|
77
|
+
export const prepareCode = (services, item, originalAst) => {
|
|
78
|
+
const {
|
|
79
|
+
log,
|
|
80
|
+
loadedAndParsed
|
|
81
|
+
} = item;
|
|
82
|
+
if (loadedAndParsed.evaluator === 'ignored') {
|
|
83
|
+
log('is ignored');
|
|
84
|
+
return [loadedAndParsed.code ?? '', null, null];
|
|
85
|
+
}
|
|
86
|
+
const {
|
|
87
|
+
evaluator
|
|
88
|
+
} = loadedAndParsed;
|
|
89
|
+
const {
|
|
90
|
+
babel,
|
|
91
|
+
eventEmitter
|
|
92
|
+
} = services;
|
|
93
|
+
const prepared = prepareEvaluatorInput(services, item, originalAst);
|
|
94
|
+
if (prepared.kind === 'short-circuit') {
|
|
95
|
+
return [prepared.code, null, null];
|
|
96
|
+
}
|
|
97
|
+
log('[evaluator:start] using %s', evaluator.name);
|
|
98
|
+
log.extend('source')('%s', prepared.code);
|
|
99
|
+
const [, transformedCode, imports] = eventEmitter.perf('transform:evaluator', () => evaluator(prepared.evalConfig, prepared.ast, prepared.code, prepared.evaluatorConfig, babel));
|
|
68
100
|
log('[evaluator:end]');
|
|
69
|
-
return [transformedCode, imports,
|
|
101
|
+
return [transformedCode, imports, prepared.metadata];
|
|
70
102
|
};
|
|
71
103
|
export function* internalTransform(prepareFn) {
|
|
72
104
|
const {
|
|
@@ -116,7 +148,108 @@ export function* internalTransform(prepareFn) {
|
|
|
116
148
|
* Prepares the code for evaluation. This includes removing dead and potentially unsafe code.
|
|
117
149
|
* Emits resolveImports and processImports events.
|
|
118
150
|
*/
|
|
119
|
-
export function transform() {
|
|
120
|
-
|
|
151
|
+
export function* transform() {
|
|
152
|
+
const {
|
|
153
|
+
only,
|
|
154
|
+
loadedAndParsed,
|
|
155
|
+
log
|
|
156
|
+
} = this.entrypoint;
|
|
157
|
+
if (loadedAndParsed.evaluator === 'ignored') {
|
|
158
|
+
log('is ignored');
|
|
159
|
+
return {
|
|
160
|
+
code: loadedAndParsed.code ?? '',
|
|
161
|
+
metadata: null
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (loadedAndParsed.evaluator !== shaker) {
|
|
165
|
+
return yield* internalTransform.call(this, prepareCode);
|
|
166
|
+
}
|
|
167
|
+
log('>> (%o)', only);
|
|
168
|
+
const prepared = prepareEvaluatorInput(this.services, this.entrypoint, loadedAndParsed.ast);
|
|
169
|
+
if (prepared.kind === 'short-circuit') {
|
|
170
|
+
if (loadedAndParsed.code === prepared.code) {
|
|
171
|
+
log('<< (%o)\n === no changes ===', only);
|
|
172
|
+
} else {
|
|
173
|
+
log('<< (%o)', only);
|
|
174
|
+
log.extend('source')('%s', prepared.code || EMPTY_FILE);
|
|
175
|
+
}
|
|
176
|
+
if (prepared.code === '') {
|
|
177
|
+
log('is skipped');
|
|
178
|
+
return {
|
|
179
|
+
code: loadedAndParsed.code ?? '',
|
|
180
|
+
metadata: null
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
code: prepared.code,
|
|
185
|
+
metadata: null
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
log('[evaluator:start] using %s', loadedAndParsed.evaluator.name);
|
|
189
|
+
log.extend('source')('%s', prepared.code);
|
|
190
|
+
const {
|
|
191
|
+
babel,
|
|
192
|
+
eventEmitter
|
|
193
|
+
} = this.services;
|
|
194
|
+
const [shakenAst, shakenCode, shakenImports] = eventEmitter.perf('transform:evaluator', () => shakeToESM(prepared.evalConfig, prepared.ast, prepared.code, prepared.evaluatorConfig, babel));
|
|
195
|
+
let nextAst = shakenAst;
|
|
196
|
+
let nextCode = shakenCode;
|
|
197
|
+
let nextResolvedImports = [];
|
|
198
|
+
if (shakenImports !== null && shakenImports.size > 0) {
|
|
199
|
+
const resolvedImports = yield* this.getNext('resolveImports', this.entrypoint, {
|
|
200
|
+
imports: shakenImports,
|
|
201
|
+
phase: 'initial'
|
|
202
|
+
});
|
|
203
|
+
if (resolvedImports.length > 0) {
|
|
204
|
+
const rewritten = yield* rewriteOptimizedBarrelImports.call(this, shakenAst, shakenCode, resolvedImports);
|
|
205
|
+
nextAst = rewritten.ast;
|
|
206
|
+
nextCode = rewritten.code;
|
|
207
|
+
if (rewritten.optimizedCount > 0) {
|
|
208
|
+
const fullyRewrittenSources = new Set(rewritten.fullyRewrittenSources);
|
|
209
|
+
const partialFallbackSources = new Set(rewritten.partialFallbackSources);
|
|
210
|
+
for (const dependency of resolvedImports) {
|
|
211
|
+
if (dependency.resolved && (fullyRewrittenSources.has(dependency.source) || partialFallbackSources.has(dependency.source))) {
|
|
212
|
+
if (partialFallbackSources.has(dependency.source)) {
|
|
213
|
+
this.entrypoint.addDependency(dependency);
|
|
214
|
+
} else {
|
|
215
|
+
this.entrypoint.addInvalidationDependency(dependency);
|
|
216
|
+
}
|
|
217
|
+
this.entrypoint.markInvalidateOnDependencyChange(dependency.resolved);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
nextResolvedImports = yield* this.getNext('resolveImports', this.entrypoint, {
|
|
221
|
+
imports: rewritten.imports,
|
|
222
|
+
phase: 'rewritten',
|
|
223
|
+
preResolved: rewritten.preResolvedImports
|
|
224
|
+
});
|
|
225
|
+
} else {
|
|
226
|
+
nextResolvedImports = resolvedImports;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (nextResolvedImports.length !== 0) {
|
|
231
|
+
yield ['processImports', this.entrypoint, {
|
|
232
|
+
resolved: nextResolvedImports
|
|
233
|
+
}];
|
|
234
|
+
}
|
|
235
|
+
const [, preparedCode] = eventEmitter.perf('transform:emitCommonJS', () => emitCommonJS(prepared.evalConfig, nextAst, nextCode, babel));
|
|
236
|
+
log('[evaluator:end]');
|
|
237
|
+
if (loadedAndParsed.code === preparedCode) {
|
|
238
|
+
log('<< (%o)\n === no changes ===', only);
|
|
239
|
+
} else {
|
|
240
|
+
log('<< (%o)', only);
|
|
241
|
+
log.extend('source')('%s', preparedCode || EMPTY_FILE);
|
|
242
|
+
}
|
|
243
|
+
if (preparedCode === '') {
|
|
244
|
+
log('is skipped');
|
|
245
|
+
return {
|
|
246
|
+
code: loadedAndParsed.code ?? '',
|
|
247
|
+
metadata: null
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
code: preparedCode,
|
|
252
|
+
metadata: prepared.metadata
|
|
253
|
+
};
|
|
121
254
|
}
|
|
122
255
|
//# sourceMappingURL=transform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","names":["buildOptions","dynamicImportPlugin","preevalPlugin","getTransformMetadata","getPluginKey","EMPTY_FILE","hasKeyInList","plugin","list","pluginKey","some","i","includes","runPreevalStage","babel","evalConfig","pluginOptions","code","originalAst","eventEmitter","preShakePlugins","plugins","filter","highPriorityPlugins","transformConfig","envName","result","transformFromAstSync","ast","program","Error","prepareCode","services","item","log","only","loadedAndParsed","evaluator","options","preevalStageResult","perf","transformMetadata","metadata","length","name","extend","evaluatorConfig","onlyExports","features","importOverrides","root","transformedCode","imports","internalTransform","prepareFn","entrypoint","preparedCode","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","dynamicImportPlugin","preevalPlugin","emitCommonJS","shakeToESM","shaker","getTransformMetadata","getPluginKey","rewriteOptimizedBarrelImports","EMPTY_FILE","hasKeyInList","plugin","list","pluginKey","some","i","includes","runPreevalStage","babel","evalConfig","pluginOptions","code","originalAst","eventEmitter","preShakePlugins","plugins","filter","highPriorityPlugins","transformConfig","envName","result","transformFromAstSync","ast","program","Error","isPrevalOnly","only","length","prepareEvaluatorInput","services","item","loadedAndParsed","log","evaluator","name","options","preevalStageResult","perf","transformMetadata","metadata","kind","evaluatorConfig","onlyExports","features","importOverrides","root","prepareCode","prepared","extend","transformedCode","imports","internalTransform","prepareFn","entrypoint","preparedCode","size","resolvedImports","getNext","resolved","transform","call","shakenAst","shakenCode","shakenImports","nextAst","nextCode","nextResolvedImports","phase","rewritten","optimizedCount","fullyRewrittenSources","Set","partialFallbackSources","dependency","has","source","addDependency","addInvalidationDependency","markInvalidateOnDependencyChange","preResolved","preResolvedImports"],"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","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":"AA2CA,OAAO,MAAMA,OAAO,GAAGC,MAAM,CAAC,SAAS,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":["Pending","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":"AA2CA,OAAO,MAAMA,OAAO,GAAGC,MAAM,CAAC,SAAS,CAAC","ignoreList":[]}
|