@wyw-in-js/transform 1.0.7 → 1.0.8

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 (47) hide show
  1. package/esm/cache.js +60 -5
  2. package/esm/cache.js.map +1 -1
  3. package/esm/module.js +8 -3
  4. package/esm/module.js.map +1 -1
  5. package/esm/transform/Entrypoint.js +8 -3
  6. package/esm/transform/Entrypoint.js.map +1 -1
  7. package/esm/transform/actions/BaseAction.js +2 -1
  8. package/esm/transform/actions/BaseAction.js.map +1 -1
  9. package/esm/transform/actions/actionRunner.js +2 -2
  10. package/esm/transform/actions/actionRunner.js.map +1 -1
  11. package/esm/transform/generators/processEntrypoint.js +5 -1
  12. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  13. package/esm/transform/types.js.map +1 -1
  14. package/esm/transform.js +45 -23
  15. package/esm/transform.js.map +1 -1
  16. package/esm/utils/collectTemplateDependencies.js +9 -0
  17. package/esm/utils/collectTemplateDependencies.js.map +1 -1
  18. package/lib/cache.js +60 -5
  19. package/lib/cache.js.map +1 -1
  20. package/lib/module.js +10 -5
  21. package/lib/module.js.map +1 -1
  22. package/lib/transform/Entrypoint.js +8 -3
  23. package/lib/transform/Entrypoint.js.map +1 -1
  24. package/lib/transform/actions/BaseAction.js +2 -1
  25. package/lib/transform/actions/BaseAction.js.map +1 -1
  26. package/lib/transform/actions/actionRunner.js +2 -2
  27. package/lib/transform/actions/actionRunner.js.map +1 -1
  28. package/lib/transform/generators/processEntrypoint.js +5 -1
  29. package/lib/transform/generators/processEntrypoint.js.map +1 -1
  30. package/lib/transform/types.js.map +1 -1
  31. package/lib/transform.js +45 -23
  32. package/lib/transform.js.map +1 -1
  33. package/lib/utils/collectTemplateDependencies.js +9 -0
  34. package/lib/utils/collectTemplateDependencies.js.map +1 -1
  35. package/package.json +1 -1
  36. package/types/cache.d.ts +7 -0
  37. package/types/cache.js +59 -3
  38. package/types/module.js +8 -3
  39. package/types/transform/Entrypoint.d.ts +1 -1
  40. package/types/transform/Entrypoint.js +8 -3
  41. package/types/transform/actions/BaseAction.d.ts +2 -1
  42. package/types/transform/actions/BaseAction.js +3 -1
  43. package/types/transform/actions/actionRunner.js +2 -2
  44. package/types/transform/generators/processEntrypoint.js +4 -1
  45. package/types/transform/types.d.ts +1 -0
  46. package/types/transform.js +47 -23
  47. package/types/utils/collectTemplateDependencies.js +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Entrypoint.js","names":["fs","invariant","BaseEntrypoint","isSuperSet","mergeOnly","EvaluatedEntrypoint","AbortError","BaseAction","UnprocessedEntrypointError","stripQueryAndHash","EMPTY_FILE","hasLoop","name","parent","processed","includes","p","parents","found","Entrypoint","evaluated","onSupersedeHandlers","actionsCache","Map","hasWywMetadata","isProcessing","pendingOnly","supersededWith","transformResultCode","constructor","services","initialCode","only","exports","evaluatedOnly","loadedAndParsed","resolveTasks","dependencies","invalidationDependencies","invalidateOnDependencyChange","Set","generation","loadAndParseFn","log","code","undefined","cache","invalidateIfChanged","evaluator","originalCode","extend","ignored","transformedCode","createRoot","loadedCode","created","create","eventEmitter","perf","status","entrypoint","innerCreate","seqId","add","cached","get","changed","readFileSync","mergedOnly","isLoop","map","push","deferOnlySupersede","supersede","newEntrypoint","addDependency","dependency","delete","source","set","addInvalidationDependency","addResolveTask","applyDeferredSupersede","nextEntrypoint","assertNotSuperseded","assertTransformed","beginProcessing","createAction","actionType","data","abortSignal","has","aborted","newAction","entrypointEvent","type","actionIdx","idx","createChild","createEvaluated","exportsProxy","endProcessing","getDependency","getInvalidationDependency","markInvalidateOnDependencyChange","filename","getResolveTask","onSupersede","callback","index","indexOf","splice","setTransformResult","res","Boolean","metadata","isNull","newOnlyOrEntrypoint","with","forEach","handler"],"sources":["../../src/transform/Entrypoint.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { invariant } from 'ts-invariant';\n\nimport type { ParentEntrypoint, ITransformFileResult } from '../types';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport { isSuperSet, mergeOnly } from './Entrypoint.helpers';\nimport type {\n IEntrypointCode,\n IEntrypointDependency,\n IIgnoredEntrypoint,\n} from './Entrypoint.types';\nimport { EvaluatedEntrypoint } from './EvaluatedEntrypoint';\nimport { AbortError } from './actions/AbortError';\nimport type { ActionByType } from './actions/BaseAction';\nimport { BaseAction } from './actions/BaseAction';\nimport { UnprocessedEntrypointError } from './actions/UnprocessedEntrypointError';\nimport type { Services, ActionTypes, ActionQueueItem } from './types';\nimport { stripQueryAndHash } from '../utils/parseRequest';\n\nconst EMPTY_FILE = '=== empty file ===';\n\nfunction hasLoop(\n name: string,\n parent: ParentEntrypoint,\n processed: string[] = []\n): boolean {\n if (parent.name === name || processed.includes(parent.name)) {\n return true;\n }\n\n for (const p of parent.parents) {\n const found = hasLoop(name, p, [...processed, parent.name]);\n if (found) {\n return found;\n }\n }\n\n return false;\n}\n\nexport class Entrypoint extends BaseEntrypoint {\n public readonly evaluated = false;\n\n public readonly loadedAndParsed: IEntrypointCode | IIgnoredEntrypoint;\n\n protected onSupersedeHandlers: Array<(newEntrypoint: Entrypoint) => void> =\n [];\n\n private actionsCache: Map<\n ActionTypes,\n Map<unknown, BaseAction<ActionQueueItem>>\n > = new Map();\n\n #hasWywMetadata: boolean = false;\n\n #isProcessing = false;\n\n #pendingOnly: string[] | null = null;\n\n #supersededWith: Entrypoint | null = null;\n\n #transformResultCode: string | null = null;\n\n private constructor(\n services: Services,\n parents: ParentEntrypoint[],\n public readonly initialCode: string | undefined,\n name: string,\n only: string[],\n exports: Record<string | symbol, unknown> | undefined,\n evaluatedOnly: string[],\n loadedAndParsed?: IEntrypointCode | IIgnoredEntrypoint,\n protected readonly resolveTasks = new Map<\n string,\n Promise<IEntrypointDependency>\n >(),\n readonly dependencies = new Map<string, IEntrypointDependency>(),\n readonly invalidationDependencies = new Map<\n string,\n IEntrypointDependency\n >(),\n readonly invalidateOnDependencyChange = new Set<string>(),\n generation = 1\n ) {\n super(\n services,\n evaluatedOnly,\n exports,\n generation,\n name,\n only,\n parents,\n dependencies,\n invalidationDependencies,\n invalidateOnDependencyChange\n );\n\n this.loadedAndParsed =\n loadedAndParsed ??\n services.loadAndParseFn(\n services,\n name,\n initialCode,\n parents[0]?.log ?? services.log\n );\n\n if (this.loadedAndParsed.code !== undefined) {\n services.cache.invalidateIfChanged(\n name,\n this.loadedAndParsed.code,\n undefined,\n this.initialCode === undefined ? 'fs' : 'loaded'\n );\n }\n\n const code =\n this.loadedAndParsed.evaluator === 'ignored'\n ? '[IGNORED]'\n : this.originalCode || EMPTY_FILE;\n\n this.log.extend('source')('created %s (%o)\\n%s', name, only, code);\n }\n\n public get ignored() {\n return this.loadedAndParsed.evaluator === 'ignored';\n }\n\n public get originalCode() {\n return this.loadedAndParsed.code;\n }\n\n public get supersededWith(): Entrypoint | null {\n return this.#supersededWith?.supersededWith ?? this.#supersededWith;\n }\n\n public get transformedCode(): string | null {\n return (\n this.#transformResultCode ?? this.supersededWith?.transformedCode ?? null\n );\n }\n\n public static createRoot(\n services: Services,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint {\n const created = Entrypoint.create(services, null, name, only, loadedCode);\n invariant(created !== 'loop', 'loop detected');\n\n return created;\n }\n\n /**\n * Creates an entrypoint for the specified file.\n * If there is already an entrypoint for this file, there will be four possible outcomes:\n * 1. If `loadedCode` is specified and is different from the one that was used to create the existing entrypoint,\n * the existing entrypoint will be superseded by a new one and all cached results for it will be invalidated.\n * It can happen if the file was changed and the watcher notified us about it, or we received a new version\n * of the file from a loader whereas the previous one was loaded from the filesystem.\n * The new entrypoint will be returned.\n * 2. If `only` is subset of the existing entrypoint's `only`, the existing entrypoint will be returned.\n * 3. If `only` is superset of the existing entrypoint's `only`, the existing entrypoint will be superseded and the new one will be returned.\n * 4. If a loop is detected, 'ignored' will be returned, the existing entrypoint will be superseded or not depending on the `only` value.\n */\n protected static create(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint | 'loop' {\n const { cache, eventEmitter } = services;\n return eventEmitter.perf('createEntrypoint', () => {\n const [status, entrypoint] = Entrypoint.innerCreate(\n services,\n parent\n ? {\n evaluated: parent.evaluated,\n log: parent.log,\n name: parent.name,\n parents: parent.parents,\n seqId: parent.seqId,\n }\n : null,\n name,\n only,\n loadedCode\n );\n\n if (status !== 'cached') {\n cache.add('entrypoints', name, entrypoint);\n }\n\n return status === 'loop' ? 'loop' : entrypoint;\n });\n }\n\n private static innerCreate(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): ['loop' | 'created' | 'cached', Entrypoint] {\n const { cache } = services;\n\n const cached = cache.get('entrypoints', name);\n let changed = false;\n if (loadedCode !== undefined) {\n changed = cache.invalidateIfChanged(\n name,\n loadedCode,\n undefined,\n 'loaded'\n );\n } else if (cached && cached.initialCode === undefined) {\n try {\n changed = cache.invalidateIfChanged(\n name,\n fs.readFileSync(stripQueryAndHash(name), 'utf8'),\n undefined,\n 'fs'\n );\n } catch {\n changed = false;\n }\n }\n\n if (!cached?.evaluated && cached?.ignored) {\n return ['cached', cached];\n }\n\n const exports = cached?.exports;\n const evaluatedOnly = changed ? [] : cached?.evaluatedOnly ?? [];\n\n const mergedOnly = cached?.only ? mergeOnly(cached.only, only) : [...only];\n\n if (cached?.evaluated) {\n cached.log('is already evaluated with', cached.evaluatedOnly);\n }\n\n if (!changed && cached && !cached.evaluated) {\n const isLoop = parent && hasLoop(name, parent);\n if (isLoop) {\n parent.log('[createEntrypoint] %s is a loop', name);\n }\n\n if (parent && !cached.parents.map((p) => p.name).includes(parent.name)) {\n cached.parents.push(parent);\n }\n\n if (isSuperSet(cached.only, mergedOnly)) {\n cached.log('is cached', name);\n return [isLoop ? 'loop' : 'cached', cached];\n }\n\n cached.log(\n 'is cached, but with different `only` %o (the cached one %o)',\n only,\n cached?.only\n );\n\n if (cached.#isProcessing) {\n cached.deferOnlySupersede(mergedOnly);\n cached.log(\n 'is being processed, defer supersede (%o -> %o)',\n cached.only,\n mergedOnly\n );\n return [isLoop ? 'loop' : 'cached', cached];\n }\n\n return [isLoop ? 'loop' : 'created', cached.supersede(mergedOnly)];\n }\n\n const newEntrypoint = new Entrypoint(\n services,\n parent ? [parent] : [],\n loadedCode,\n name,\n mergedOnly,\n exports,\n evaluatedOnly,\n undefined,\n cached && 'resolveTasks' in cached ? cached.resolveTasks : undefined,\n cached && 'dependencies' in cached ? cached.dependencies : undefined,\n cached && 'invalidationDependencies' in cached\n ? cached.invalidationDependencies\n : undefined,\n cached && 'invalidateOnDependencyChange' in cached\n ? cached.invalidateOnDependencyChange\n : undefined,\n cached ? cached.generation + 1 : 1\n );\n\n if (cached && !cached.evaluated) {\n cached.log('is cached, but with different code');\n cached.supersede(newEntrypoint);\n }\n\n return ['created', newEntrypoint];\n }\n\n public addDependency(dependency: IEntrypointDependency): void {\n this.resolveTasks.delete(dependency.source);\n this.dependencies.set(dependency.source, dependency);\n }\n\n public addInvalidationDependency(dependency: IEntrypointDependency): void {\n this.resolveTasks.delete(dependency.source);\n this.invalidationDependencies.set(dependency.source, dependency);\n }\n\n public addResolveTask(\n name: string,\n dependency: Promise<IEntrypointDependency>\n ): void {\n this.resolveTasks.set(name, dependency);\n }\n\n public applyDeferredSupersede() {\n if (this.#supersededWith || this.#pendingOnly === null) {\n return null;\n }\n\n const mergedOnly = mergeOnly(this.only, this.#pendingOnly);\n this.#pendingOnly = null;\n\n if (isSuperSet(this.only, mergedOnly)) {\n return null;\n }\n\n this.log('apply deferred supersede (%o -> %o)', this.only, mergedOnly);\n\n const nextEntrypoint = this.supersede(mergedOnly);\n this.services.cache.add('entrypoints', this.name, nextEntrypoint);\n\n return nextEntrypoint;\n }\n\n public assertNotSuperseded() {\n if (this.supersededWith) {\n this.log('superseded');\n throw new AbortError('superseded');\n }\n }\n\n public assertTransformed() {\n if (this.transformedCode === null) {\n this.log('not transformed');\n throw new UnprocessedEntrypointError(this.supersededWith ?? this);\n }\n }\n\n public beginProcessing() {\n this.#isProcessing = true;\n }\n\n public createAction<\n TType extends ActionTypes,\n TAction extends ActionByType<TType>,\n >(\n actionType: TType,\n data: TAction['data'],\n abortSignal: AbortSignal | null = null\n ): BaseAction<TAction> {\n if (!this.actionsCache.has(actionType)) {\n this.actionsCache.set(actionType, new Map());\n }\n\n const cache = this.actionsCache.get(actionType)!;\n const cached = cache.get(data);\n if (cached && !cached.abortSignal?.aborted) {\n return cached as BaseAction<TAction>;\n }\n\n const newAction = new BaseAction<TAction>(\n actionType as TAction['type'],\n this.services,\n this,\n data,\n abortSignal\n );\n\n cache.set(data, newAction);\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'actionCreated',\n actionType,\n actionIdx: newAction.idx,\n });\n\n return newAction;\n }\n\n public createChild(\n name: string,\n only: string[],\n loadedCode?: string\n ): Entrypoint | 'loop' {\n return Entrypoint.create(this.services, this, name, only, loadedCode);\n }\n\n public createEvaluated() {\n const evaluatedOnly = mergeOnly(this.evaluatedOnly, this.only);\n this.log('create EvaluatedEntrypoint for %o', evaluatedOnly);\n\n const evaluated = new EvaluatedEntrypoint(\n this.services,\n evaluatedOnly,\n this.exportsProxy,\n this.generation + 1,\n this.name,\n this.only,\n this.parents,\n this.dependencies,\n this.invalidationDependencies,\n this.invalidateOnDependencyChange\n );\n\n evaluated.initialCode = this.initialCode;\n\n return evaluated;\n }\n\n public endProcessing() {\n this.#isProcessing = false;\n }\n\n public getDependency(name: string): IEntrypointDependency | undefined {\n return this.dependencies.get(name);\n }\n\n public getInvalidationDependency(\n name: string\n ): IEntrypointDependency | undefined {\n return this.invalidationDependencies.get(name);\n }\n\n public markInvalidateOnDependencyChange(filename: string): void {\n this.invalidateOnDependencyChange.add(filename);\n }\n\n public getResolveTask(\n name: string\n ): Promise<IEntrypointDependency> | undefined {\n return this.resolveTasks.get(name);\n }\n\n public hasWywMetadata() {\n return this.#hasWywMetadata;\n }\n\n public onSupersede(callback: (newEntrypoint: Entrypoint) => void) {\n if (this.#supersededWith) {\n callback(this.#supersededWith);\n return () => {};\n }\n\n this.onSupersedeHandlers.push(callback);\n\n return () => {\n const index = this.onSupersedeHandlers.indexOf(callback);\n if (index >= 0) {\n this.onSupersedeHandlers.splice(index, 1);\n }\n };\n }\n\n public setTransformResult(res: ITransformFileResult | null) {\n this.#hasWywMetadata = Boolean(res?.metadata);\n this.#transformResultCode = res?.code ?? null;\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n isNull: res === null,\n type: 'setTransformResult',\n });\n }\n\n private deferOnlySupersede(only: string[]) {\n this.#pendingOnly = this.#pendingOnly\n ? mergeOnly(this.#pendingOnly, only)\n : [...only];\n }\n\n private supersede(newOnlyOrEntrypoint: string[] | Entrypoint): Entrypoint {\n this.#pendingOnly = null;\n const newEntrypoint =\n newOnlyOrEntrypoint instanceof Entrypoint\n ? newOnlyOrEntrypoint\n : new Entrypoint(\n this.services,\n this.parents,\n this.initialCode,\n this.name,\n newOnlyOrEntrypoint,\n this.exports,\n this.evaluatedOnly,\n this.loadedAndParsed,\n this.resolveTasks,\n this.dependencies,\n this.invalidationDependencies,\n this.invalidateOnDependencyChange,\n this.generation + 1\n );\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'superseded',\n with: newEntrypoint.seqId,\n });\n this.log(\n 'superseded by %s (%o -> %o)',\n newEntrypoint.name,\n this.only,\n newEntrypoint.only\n );\n this.#supersededWith = newEntrypoint;\n this.onSupersedeHandlers.forEach((handler) => handler(newEntrypoint));\n\n return newEntrypoint;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Entrypoint.js","names":["fs","invariant","BaseEntrypoint","isSuperSet","mergeOnly","EvaluatedEntrypoint","AbortError","BaseAction","UnprocessedEntrypointError","stripQueryAndHash","EMPTY_FILE","DEFAULT_ACTION_CONTEXT","Symbol","hasLoop","name","parent","processed","includes","p","parents","found","Entrypoint","evaluated","onSupersedeHandlers","actionsCache","Map","hasWywMetadata","isProcessing","pendingOnly","supersededWith","transformResultCode","constructor","services","initialCode","only","exports","evaluatedOnly","loadedAndParsed","resolveTasks","dependencies","invalidationDependencies","invalidateOnDependencyChange","Set","generation","loadAndParseFn","log","code","undefined","cache","invalidateIfChanged","evaluator","originalCode","extend","ignored","transformedCode","createRoot","loadedCode","created","create","eventEmitter","perf","status","entrypoint","innerCreate","seqId","add","cached","get","changed","readFileSync","mergedOnly","isLoop","map","push","deferOnlySupersede","supersede","newEntrypoint","addDependency","dependency","delete","source","set","addInvalidationDependency","addResolveTask","applyDeferredSupersede","nextEntrypoint","assertNotSuperseded","assertTransformed","beginProcessing","createAction","actionType","data","abortSignal","actionContext","has","contexts","aborted","newAction","entrypointEvent","type","actionIdx","idx","createChild","createEvaluated","exportsProxy","endProcessing","getDependency","getInvalidationDependency","markInvalidateOnDependencyChange","filename","getResolveTask","onSupersede","callback","index","indexOf","splice","setTransformResult","res","Boolean","metadata","isNull","newOnlyOrEntrypoint","with","forEach","handler"],"sources":["../../src/transform/Entrypoint.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { invariant } from 'ts-invariant';\n\nimport type { ParentEntrypoint, ITransformFileResult } from '../types';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport { isSuperSet, mergeOnly } from './Entrypoint.helpers';\nimport type {\n IEntrypointCode,\n IEntrypointDependency,\n IIgnoredEntrypoint,\n} from './Entrypoint.types';\nimport { EvaluatedEntrypoint } from './EvaluatedEntrypoint';\nimport { AbortError } from './actions/AbortError';\nimport type { ActionByType } from './actions/BaseAction';\nimport { BaseAction } from './actions/BaseAction';\nimport { UnprocessedEntrypointError } from './actions/UnprocessedEntrypointError';\nimport type { Services, ActionTypes, ActionQueueItem } from './types';\nimport { stripQueryAndHash } from '../utils/parseRequest';\n\nconst EMPTY_FILE = '=== empty file ===';\nconst DEFAULT_ACTION_CONTEXT = Symbol('defaultActionContext');\n\nfunction hasLoop(\n name: string,\n parent: ParentEntrypoint,\n processed: string[] = []\n): boolean {\n if (parent.name === name || processed.includes(parent.name)) {\n return true;\n }\n\n for (const p of parent.parents) {\n const found = hasLoop(name, p, [...processed, parent.name]);\n if (found) {\n return found;\n }\n }\n\n return false;\n}\n\nexport class Entrypoint extends BaseEntrypoint {\n public readonly evaluated = false;\n\n public readonly loadedAndParsed: IEntrypointCode | IIgnoredEntrypoint;\n\n protected onSupersedeHandlers: Array<(newEntrypoint: Entrypoint) => void> =\n [];\n\n private actionsCache: Map<\n ActionTypes,\n Map<unknown, Map<unknown, BaseAction<ActionQueueItem>>>\n > = new Map();\n\n #hasWywMetadata: boolean = false;\n\n #isProcessing = false;\n\n #pendingOnly: string[] | null = null;\n\n #supersededWith: Entrypoint | null = null;\n\n #transformResultCode: string | null = null;\n\n private constructor(\n services: Services,\n parents: ParentEntrypoint[],\n public readonly initialCode: string | undefined,\n name: string,\n only: string[],\n exports: Record<string | symbol, unknown> | undefined,\n evaluatedOnly: string[],\n loadedAndParsed?: IEntrypointCode | IIgnoredEntrypoint,\n protected readonly resolveTasks = new Map<\n string,\n Promise<IEntrypointDependency>\n >(),\n readonly dependencies = new Map<string, IEntrypointDependency>(),\n readonly invalidationDependencies = new Map<\n string,\n IEntrypointDependency\n >(),\n readonly invalidateOnDependencyChange = new Set<string>(),\n generation = 1\n ) {\n super(\n services,\n evaluatedOnly,\n exports,\n generation,\n name,\n only,\n parents,\n dependencies,\n invalidationDependencies,\n invalidateOnDependencyChange\n );\n\n this.loadedAndParsed =\n loadedAndParsed ??\n services.loadAndParseFn(\n services,\n name,\n initialCode,\n parents[0]?.log ?? services.log\n );\n\n if (this.loadedAndParsed.code !== undefined) {\n services.cache.invalidateIfChanged(\n name,\n this.loadedAndParsed.code,\n undefined,\n this.initialCode === undefined ? 'fs' : 'loaded'\n );\n }\n\n const code =\n this.loadedAndParsed.evaluator === 'ignored'\n ? '[IGNORED]'\n : this.originalCode || EMPTY_FILE;\n\n this.log.extend('source')('created %s (%o)\\n%s', name, only, code);\n }\n\n public get ignored() {\n return this.loadedAndParsed.evaluator === 'ignored';\n }\n\n public get originalCode() {\n return this.loadedAndParsed.code;\n }\n\n public get supersededWith(): Entrypoint | null {\n return this.#supersededWith?.supersededWith ?? this.#supersededWith;\n }\n\n public get transformedCode(): string | null {\n return (\n this.#transformResultCode ?? this.supersededWith?.transformedCode ?? null\n );\n }\n\n public static createRoot(\n services: Services,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint {\n const created = Entrypoint.create(services, null, name, only, loadedCode);\n invariant(created !== 'loop', 'loop detected');\n\n return created;\n }\n\n /**\n * Creates an entrypoint for the specified file.\n * If there is already an entrypoint for this file, there will be four possible outcomes:\n * 1. If `loadedCode` is specified and is different from the one that was used to create the existing entrypoint,\n * the existing entrypoint will be superseded by a new one and all cached results for it will be invalidated.\n * It can happen if the file was changed and the watcher notified us about it, or we received a new version\n * of the file from a loader whereas the previous one was loaded from the filesystem.\n * The new entrypoint will be returned.\n * 2. If `only` is subset of the existing entrypoint's `only`, the existing entrypoint will be returned.\n * 3. If `only` is superset of the existing entrypoint's `only`, the existing entrypoint will be superseded and the new one will be returned.\n * 4. If a loop is detected, 'ignored' will be returned, the existing entrypoint will be superseded or not depending on the `only` value.\n */\n protected static create(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): Entrypoint | 'loop' {\n const { cache, eventEmitter } = services;\n return eventEmitter.perf('createEntrypoint', () => {\n const [status, entrypoint] = Entrypoint.innerCreate(\n services,\n parent\n ? {\n evaluated: parent.evaluated,\n log: parent.log,\n name: parent.name,\n parents: parent.parents,\n seqId: parent.seqId,\n }\n : null,\n name,\n only,\n loadedCode\n );\n\n if (status !== 'cached') {\n cache.add('entrypoints', name, entrypoint);\n }\n\n return status === 'loop' ? 'loop' : entrypoint;\n });\n }\n\n private static innerCreate(\n services: Services,\n parent: ParentEntrypoint | null,\n name: string,\n only: string[],\n loadedCode: string | undefined\n ): ['loop' | 'created' | 'cached', Entrypoint] {\n const { cache } = services;\n\n const cached = cache.get('entrypoints', name);\n let changed = false;\n if (loadedCode !== undefined) {\n changed = cache.invalidateIfChanged(\n name,\n loadedCode,\n undefined,\n 'loaded'\n );\n } else if (cached && cached.initialCode === undefined) {\n try {\n changed = cache.invalidateIfChanged(\n name,\n fs.readFileSync(stripQueryAndHash(name), 'utf8'),\n undefined,\n 'fs'\n );\n } catch {\n changed = false;\n }\n }\n\n if (!cached?.evaluated && cached?.ignored) {\n return ['cached', cached];\n }\n\n const exports = cached?.exports;\n const evaluatedOnly = changed ? [] : cached?.evaluatedOnly ?? [];\n\n const mergedOnly = cached?.only ? mergeOnly(cached.only, only) : [...only];\n\n if (cached?.evaluated) {\n cached.log('is already evaluated with', cached.evaluatedOnly);\n }\n\n if (!changed && cached && !cached.evaluated) {\n const isLoop = parent && hasLoop(name, parent);\n if (isLoop) {\n parent.log('[createEntrypoint] %s is a loop', name);\n }\n\n if (parent && !cached.parents.map((p) => p.name).includes(parent.name)) {\n cached.parents.push(parent);\n }\n\n if (isSuperSet(cached.only, mergedOnly)) {\n cached.log('is cached', name);\n return [isLoop ? 'loop' : 'cached', cached];\n }\n\n cached.log(\n 'is cached, but with different `only` %o (the cached one %o)',\n only,\n cached?.only\n );\n\n if (cached.#isProcessing) {\n cached.deferOnlySupersede(mergedOnly);\n cached.log(\n 'is being processed, defer supersede (%o -> %o)',\n cached.only,\n mergedOnly\n );\n return [isLoop ? 'loop' : 'cached', cached];\n }\n\n return [isLoop ? 'loop' : 'created', cached.supersede(mergedOnly)];\n }\n\n const newEntrypoint = new Entrypoint(\n services,\n parent ? [parent] : [],\n loadedCode,\n name,\n mergedOnly,\n exports,\n evaluatedOnly,\n undefined,\n cached && 'resolveTasks' in cached ? cached.resolveTasks : undefined,\n cached && 'dependencies' in cached ? cached.dependencies : undefined,\n cached && 'invalidationDependencies' in cached\n ? cached.invalidationDependencies\n : undefined,\n cached && 'invalidateOnDependencyChange' in cached\n ? cached.invalidateOnDependencyChange\n : undefined,\n cached ? cached.generation + 1 : 1\n );\n\n if (cached && !cached.evaluated) {\n cached.log('is cached, but with different code');\n cached.supersede(newEntrypoint);\n }\n\n return ['created', newEntrypoint];\n }\n\n public addDependency(dependency: IEntrypointDependency): void {\n this.resolveTasks.delete(dependency.source);\n this.dependencies.set(dependency.source, dependency);\n }\n\n public addInvalidationDependency(dependency: IEntrypointDependency): void {\n this.resolveTasks.delete(dependency.source);\n this.invalidationDependencies.set(dependency.source, dependency);\n }\n\n public addResolveTask(\n name: string,\n dependency: Promise<IEntrypointDependency>\n ): void {\n this.resolveTasks.set(name, dependency);\n }\n\n public applyDeferredSupersede() {\n if (this.#supersededWith || this.#pendingOnly === null) {\n return null;\n }\n\n const mergedOnly = mergeOnly(this.only, this.#pendingOnly);\n this.#pendingOnly = null;\n\n if (isSuperSet(this.only, mergedOnly)) {\n return null;\n }\n\n this.log('apply deferred supersede (%o -> %o)', this.only, mergedOnly);\n\n const nextEntrypoint = this.supersede(mergedOnly);\n this.services.cache.add('entrypoints', this.name, nextEntrypoint);\n\n return nextEntrypoint;\n }\n\n public assertNotSuperseded() {\n if (this.supersededWith) {\n this.log('superseded');\n throw new AbortError('superseded');\n }\n }\n\n public assertTransformed() {\n if (this.transformedCode === null) {\n this.log('not transformed');\n throw new UnprocessedEntrypointError(this.supersededWith ?? this);\n }\n }\n\n public beginProcessing() {\n this.#isProcessing = true;\n }\n\n public createAction<\n TType extends ActionTypes,\n TAction extends ActionByType<TType>,\n >(\n actionType: TType,\n data: TAction['data'],\n abortSignal: AbortSignal | null = null,\n actionContext: unknown = DEFAULT_ACTION_CONTEXT\n ): BaseAction<TAction> {\n if (!this.actionsCache.has(actionType)) {\n this.actionsCache.set(actionType, new Map());\n }\n\n const contexts = this.actionsCache.get(actionType)!;\n if (!contexts.has(actionContext)) {\n contexts.set(actionContext, new Map());\n }\n\n const cache = contexts.get(actionContext)!;\n const cached = cache.get(data);\n if (cached && !cached.abortSignal?.aborted) {\n return cached as BaseAction<TAction>;\n }\n\n const newAction = new BaseAction<TAction>(\n actionType as TAction['type'],\n this.services,\n this,\n data,\n abortSignal,\n actionContext\n );\n\n cache.set(data, newAction);\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'actionCreated',\n actionType,\n actionIdx: newAction.idx,\n });\n\n return newAction;\n }\n\n public createChild(\n name: string,\n only: string[],\n loadedCode?: string\n ): Entrypoint | 'loop' {\n return Entrypoint.create(this.services, this, name, only, loadedCode);\n }\n\n public createEvaluated() {\n const evaluatedOnly = mergeOnly(this.evaluatedOnly, this.only);\n this.log('create EvaluatedEntrypoint for %o', evaluatedOnly);\n\n const evaluated = new EvaluatedEntrypoint(\n this.services,\n evaluatedOnly,\n this.exportsProxy,\n this.generation + 1,\n this.name,\n this.only,\n this.parents,\n this.dependencies,\n this.invalidationDependencies,\n this.invalidateOnDependencyChange\n );\n\n evaluated.initialCode = this.initialCode;\n\n return evaluated;\n }\n\n public endProcessing() {\n this.#isProcessing = false;\n }\n\n public getDependency(name: string): IEntrypointDependency | undefined {\n return this.dependencies.get(name);\n }\n\n public getInvalidationDependency(\n name: string\n ): IEntrypointDependency | undefined {\n return this.invalidationDependencies.get(name);\n }\n\n public markInvalidateOnDependencyChange(filename: string): void {\n this.invalidateOnDependencyChange.add(filename);\n }\n\n public getResolveTask(\n name: string\n ): Promise<IEntrypointDependency> | undefined {\n return this.resolveTasks.get(name);\n }\n\n public hasWywMetadata() {\n return this.#hasWywMetadata;\n }\n\n public onSupersede(callback: (newEntrypoint: Entrypoint) => void) {\n if (this.#supersededWith) {\n callback(this.#supersededWith);\n return () => {};\n }\n\n this.onSupersedeHandlers.push(callback);\n\n return () => {\n const index = this.onSupersedeHandlers.indexOf(callback);\n if (index >= 0) {\n this.onSupersedeHandlers.splice(index, 1);\n }\n };\n }\n\n public setTransformResult(res: ITransformFileResult | null) {\n this.#hasWywMetadata = Boolean(res?.metadata);\n this.#transformResultCode = res?.code ?? null;\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n isNull: res === null,\n type: 'setTransformResult',\n });\n }\n\n private deferOnlySupersede(only: string[]) {\n this.#pendingOnly = this.#pendingOnly\n ? mergeOnly(this.#pendingOnly, only)\n : [...only];\n }\n\n private supersede(newOnlyOrEntrypoint: string[] | Entrypoint): Entrypoint {\n this.#pendingOnly = null;\n const newEntrypoint =\n newOnlyOrEntrypoint instanceof Entrypoint\n ? newOnlyOrEntrypoint\n : new Entrypoint(\n this.services,\n this.parents,\n this.initialCode,\n this.name,\n newOnlyOrEntrypoint,\n this.exports,\n this.evaluatedOnly,\n this.loadedAndParsed,\n this.resolveTasks,\n this.dependencies,\n this.invalidationDependencies,\n this.invalidateOnDependencyChange,\n this.generation + 1\n );\n\n this.services.eventEmitter.entrypointEvent(this.seqId, {\n type: 'superseded',\n with: newEntrypoint.seqId,\n });\n this.log(\n 'superseded by %s (%o -> %o)',\n newEntrypoint.name,\n this.only,\n newEntrypoint.only\n );\n this.#supersededWith = newEntrypoint;\n this.onSupersedeHandlers.forEach((handler) => handler(newEntrypoint));\n\n return newEntrypoint;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,12 +7,13 @@ export class BaseAction {
7
7
  activeScenario = null;
8
8
  activeScenarioNextResults = [];
9
9
  handler = null;
10
- constructor(type, services, entrypoint, data, abortSignal) {
10
+ constructor(type, services, entrypoint, data, abortSignal, actionContext) {
11
11
  this.type = type;
12
12
  this.services = services;
13
13
  this.entrypoint = entrypoint;
14
14
  this.data = data;
15
15
  this.abortSignal = abortSignal;
16
+ this.actionContext = actionContext;
16
17
  actionIdx += 1;
17
18
  this.idx = actionIdx.toString(16).padStart(6, '0');
18
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAction.js","names":["Pending","actionIdx","BaseAction","result","activeScenario","activeScenarioNextResults","handler","constructor","type","services","entrypoint","data","abortSignal","idx","toString","padStart","log","extend","ref","createAbortSignal","abortController","AbortController","unsubscribeFromParentAbort","onAbort","abort","unsubscribeFromSupersede","onSupersede","signal","Symbol","dispose","getNext","fn","addEventListener","removeEventListener","run","Error","name","call","nextIdx","throwFn","e","emitAction","throw","nextFn","arg","next","processNextResult","onError","then","r","done","value","push","processError","length","nextResult","errorInGenerator","recover","activeScenarioError","processNext","rethrowActiveScenarioError","yieldIdx","eventEmitter","action"],"sources":["../../../src/transform/actions/BaseAction.ts"],"sourcesContent":["/* eslint-disable no-plusplus */\nimport '../../utils/dispose-polyfill';\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { Entrypoint } from '../Entrypoint';\nimport type {\n ActionQueueItem,\n ActionTypes,\n AnyIteratorResult,\n AsyncScenarioForAction,\n Handler,\n IBaseAction,\n Services,\n SyncScenarioForAction,\n TypeOfResult,\n YieldResult,\n} from '../types';\nimport { Pending } from '../types';\n\nlet actionIdx = 0;\n\nexport type ActionByType<TType extends ActionTypes> = Extract<\n ActionQueueItem,\n {\n type: TType;\n }\n>;\n\ntype GetBase<TAction extends ActionQueueItem> = IBaseAction<\n TAction,\n TypeOfResult<TAction>,\n TAction['data']\n>;\n\nexport class BaseAction<TAction extends ActionQueueItem>\n implements GetBase<TAction>\n{\n public readonly idx: string;\n\n public result: TypeOfResult<TAction> | typeof Pending = Pending;\n\n private activeScenario:\n | SyncScenarioForAction<TAction>\n | AsyncScenarioForAction<TAction>\n | null = null;\n\n private activeScenarioError?: unknown;\n\n private activeScenarioNextResults: AnyIteratorResult<\n 'async' | 'sync',\n TypeOfResult<TAction>\n >[] = [];\n\n private handler: null | unknown = null;\n\n public constructor(\n public readonly type: TAction['type'],\n public readonly services: Services,\n public readonly entrypoint: Entrypoint,\n public readonly data: TAction['data'],\n public readonly abortSignal: AbortSignal | null\n ) {\n actionIdx += 1;\n this.idx = actionIdx.toString(16).padStart(6, '0');\n }\n\n public get log(): Debugger {\n return this.entrypoint.log.extend(this.ref);\n }\n\n public get ref() {\n return `${this.type}@${this.idx}`;\n }\n\n public createAbortSignal(): AbortSignal & Disposable {\n const abortController = new AbortController();\n\n const unsubscribeFromParentAbort = this.onAbort(() => {\n this.entrypoint.log('parent aborted');\n abortController.abort();\n });\n\n const unsubscribeFromSupersede = this.entrypoint.onSupersede(() => {\n this.entrypoint.log('entrypoint superseded, aborting processing');\n abortController.abort();\n });\n\n const abortSignal = abortController.signal as AbortSignal & Disposable;\n abortSignal[Symbol.dispose] = () => {\n unsubscribeFromParentAbort();\n unsubscribeFromSupersede();\n };\n\n return abortSignal;\n }\n\n public *getNext<\n TNextType extends ActionTypes,\n TNextAction extends ActionByType<TNextType> = ActionByType<TNextType>,\n >(\n type: TNextType,\n entrypoint: Entrypoint,\n data: TNextAction['data'],\n abortSignal: AbortSignal | null = this.abortSignal\n ): Generator<\n [TNextType, Entrypoint, TNextAction['data'], AbortSignal | null],\n TypeOfResult<TNextAction>,\n YieldResult\n > {\n return (yield [\n type,\n entrypoint,\n data,\n abortSignal,\n ]) as TypeOfResult<TNextAction>;\n }\n\n public onAbort(fn: () => void): () => void {\n this.abortSignal?.addEventListener('abort', fn);\n\n return () => {\n this.abortSignal?.removeEventListener('abort', fn);\n };\n }\n\n public run<\n TMode extends 'async' | 'sync',\n THandler extends Handler<TMode, TAction> = Handler<TMode, TAction>,\n >(handler: THandler) {\n type IterationResult = AnyIteratorResult<TMode, TypeOfResult<TAction>>;\n\n if (this.handler && this.handler !== handler) {\n throw new Error(\n `action handler is already set for ${this.ref} (${this.entrypoint.name})`\n );\n }\n\n this.handler = handler;\n\n if (!this.activeScenario) {\n this.activeScenario = handler.call(this);\n this.activeScenarioNextResults = [];\n }\n\n let nextIdx = 0;\n\n const throwFn = (e: unknown) =>\n this.emitAction(nextIdx, () => this.activeScenario!.throw(e));\n\n const nextFn = (arg: YieldResult) =>\n this.emitAction(nextIdx, () => this.activeScenario!.next(arg));\n\n const processNextResult = (\n result: IterationResult,\n onError?: (e: unknown) => void\n ) => {\n if ('then' in result) {\n result.then((r) => {\n if (r.done) {\n this.result = r.value;\n }\n }, onError);\n } else if (result.done) {\n this.result = result.value;\n }\n\n this.activeScenarioNextResults.push(result);\n };\n\n const processError = (e: unknown) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'error was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('error processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = throwFn(e);\n processNextResult(nextResult as IterationResult, processError);\n } catch (errorInGenerator) {\n const { recover } = handler;\n if (recover) {\n const nextResult = {\n done: false,\n value: recover(errorInGenerator, this),\n };\n\n processNextResult(nextResult as IterationResult, processError);\n return;\n }\n\n this.activeScenarioError = errorInGenerator;\n throw errorInGenerator;\n }\n };\n\n const processNext = (arg: YieldResult) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'next was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('next processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = nextFn(arg);\n processNextResult(nextResult as IterationResult, processError);\n } catch (e) {\n processError(e);\n }\n };\n\n return {\n next: (arg: YieldResult): IterationResult => {\n this.rethrowActiveScenarioError();\n processNext(arg);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n throw: (e: unknown): IterationResult => {\n this.rethrowActiveScenarioError();\n processError(e);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n };\n }\n\n protected emitAction<TRes>(yieldIdx: number, fn: () => TRes) {\n return this.services.eventEmitter.action(\n this.type,\n `${this.idx}:${yieldIdx + 1}`,\n this.entrypoint.ref,\n fn\n );\n }\n\n private rethrowActiveScenarioError() {\n if (!this.activeScenarioError) {\n return;\n }\n\n this.log(\n 'scenario has an unhandled error from another branch, rethrow %o',\n this.activeScenarioError\n );\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw this.activeScenarioError;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BaseAction.js","names":["Pending","actionIdx","BaseAction","result","activeScenario","activeScenarioNextResults","handler","constructor","type","services","entrypoint","data","abortSignal","actionContext","idx","toString","padStart","log","extend","ref","createAbortSignal","abortController","AbortController","unsubscribeFromParentAbort","onAbort","abort","unsubscribeFromSupersede","onSupersede","signal","Symbol","dispose","getNext","fn","addEventListener","removeEventListener","run","Error","name","call","nextIdx","throwFn","e","emitAction","throw","nextFn","arg","next","processNextResult","onError","then","r","done","value","push","processError","length","nextResult","errorInGenerator","recover","activeScenarioError","processNext","rethrowActiveScenarioError","yieldIdx","eventEmitter","action"],"sources":["../../../src/transform/actions/BaseAction.ts"],"sourcesContent":["/* eslint-disable no-plusplus */\nimport '../../utils/dispose-polyfill';\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { Entrypoint } from '../Entrypoint';\nimport type {\n ActionQueueItem,\n ActionTypes,\n AnyIteratorResult,\n AsyncScenarioForAction,\n Handler,\n IBaseAction,\n Services,\n SyncScenarioForAction,\n TypeOfResult,\n YieldResult,\n} from '../types';\nimport { Pending } from '../types';\n\nlet actionIdx = 0;\n\nexport type ActionByType<TType extends ActionTypes> = Extract<\n ActionQueueItem,\n {\n type: TType;\n }\n>;\n\ntype GetBase<TAction extends ActionQueueItem> = IBaseAction<\n TAction,\n TypeOfResult<TAction>,\n TAction['data']\n>;\n\nexport class BaseAction<TAction extends ActionQueueItem>\n implements GetBase<TAction>\n{\n public readonly idx: string;\n\n public result: TypeOfResult<TAction> | typeof Pending = Pending;\n\n private activeScenario:\n | SyncScenarioForAction<TAction>\n | AsyncScenarioForAction<TAction>\n | null = null;\n\n private activeScenarioError?: unknown;\n\n private activeScenarioNextResults: AnyIteratorResult<\n 'async' | 'sync',\n TypeOfResult<TAction>\n >[] = [];\n\n private handler: null | unknown = null;\n\n public constructor(\n public readonly type: TAction['type'],\n public readonly services: Services,\n public readonly entrypoint: Entrypoint,\n public readonly data: TAction['data'],\n public readonly abortSignal: AbortSignal | null,\n public readonly actionContext: unknown\n ) {\n actionIdx += 1;\n this.idx = actionIdx.toString(16).padStart(6, '0');\n }\n\n public get log(): Debugger {\n return this.entrypoint.log.extend(this.ref);\n }\n\n public get ref() {\n return `${this.type}@${this.idx}`;\n }\n\n public createAbortSignal(): AbortSignal & Disposable {\n const abortController = new AbortController();\n\n const unsubscribeFromParentAbort = this.onAbort(() => {\n this.entrypoint.log('parent aborted');\n abortController.abort();\n });\n\n const unsubscribeFromSupersede = this.entrypoint.onSupersede(() => {\n this.entrypoint.log('entrypoint superseded, aborting processing');\n abortController.abort();\n });\n\n const abortSignal = abortController.signal as AbortSignal & Disposable;\n abortSignal[Symbol.dispose] = () => {\n unsubscribeFromParentAbort();\n unsubscribeFromSupersede();\n };\n\n return abortSignal;\n }\n\n public *getNext<\n TNextType extends ActionTypes,\n TNextAction extends ActionByType<TNextType> = ActionByType<TNextType>,\n >(\n type: TNextType,\n entrypoint: Entrypoint,\n data: TNextAction['data'],\n abortSignal: AbortSignal | null = this.abortSignal\n ): Generator<\n [TNextType, Entrypoint, TNextAction['data'], AbortSignal | null],\n TypeOfResult<TNextAction>,\n YieldResult\n > {\n return (yield [\n type,\n entrypoint,\n data,\n abortSignal,\n ]) as TypeOfResult<TNextAction>;\n }\n\n public onAbort(fn: () => void): () => void {\n this.abortSignal?.addEventListener('abort', fn);\n\n return () => {\n this.abortSignal?.removeEventListener('abort', fn);\n };\n }\n\n public run<\n TMode extends 'async' | 'sync',\n THandler extends Handler<TMode, TAction> = Handler<TMode, TAction>,\n >(handler: THandler) {\n type IterationResult = AnyIteratorResult<TMode, TypeOfResult<TAction>>;\n\n if (this.handler && this.handler !== handler) {\n throw new Error(\n `action handler is already set for ${this.ref} (${this.entrypoint.name})`\n );\n }\n\n this.handler = handler;\n\n if (!this.activeScenario) {\n this.activeScenario = handler.call(this);\n this.activeScenarioNextResults = [];\n }\n\n let nextIdx = 0;\n\n const throwFn = (e: unknown) =>\n this.emitAction(nextIdx, () => this.activeScenario!.throw(e));\n\n const nextFn = (arg: YieldResult) =>\n this.emitAction(nextIdx, () => this.activeScenario!.next(arg));\n\n const processNextResult = (\n result: IterationResult,\n onError?: (e: unknown) => void\n ) => {\n if ('then' in result) {\n result.then((r) => {\n if (r.done) {\n this.result = r.value;\n }\n }, onError);\n } else if (result.done) {\n this.result = result.value;\n }\n\n this.activeScenarioNextResults.push(result);\n };\n\n const processError = (e: unknown) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'error was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('error processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = throwFn(e);\n processNextResult(nextResult as IterationResult, processError);\n } catch (errorInGenerator) {\n const { recover } = handler;\n if (recover) {\n const nextResult = {\n done: false,\n value: recover(errorInGenerator, this),\n };\n\n processNextResult(nextResult as IterationResult, processError);\n return;\n }\n\n this.activeScenarioError = errorInGenerator;\n throw errorInGenerator;\n }\n };\n\n const processNext = (arg: YieldResult) => {\n if (this.activeScenarioNextResults.length > nextIdx) {\n this.log(\n 'next was already handled in another branch, result idx is %d',\n nextIdx\n );\n return;\n }\n\n this.log('next processing, result idx is %d', nextIdx);\n\n try {\n const nextResult = nextFn(arg);\n processNextResult(nextResult as IterationResult, processError);\n } catch (e) {\n processError(e);\n }\n };\n\n return {\n next: (arg: YieldResult): IterationResult => {\n this.rethrowActiveScenarioError();\n processNext(arg);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n throw: (e: unknown): IterationResult => {\n this.rethrowActiveScenarioError();\n processError(e);\n return this.activeScenarioNextResults[nextIdx++] as IterationResult;\n },\n };\n }\n\n protected emitAction<TRes>(yieldIdx: number, fn: () => TRes) {\n return this.services.eventEmitter.action(\n this.type,\n `${this.idx}:${yieldIdx + 1}`,\n this.entrypoint.ref,\n fn\n );\n }\n\n private rethrowActiveScenarioError() {\n if (!this.activeScenarioError) {\n return;\n }\n\n this.log(\n 'scenario has an unhandled error from another branch, rethrow %o',\n this.activeScenarioError\n );\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw this.activeScenarioError;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -33,7 +33,7 @@ export async function asyncActionRunner(action, actionHandlers, stack = [getActi
33
33
  return result.value;
34
34
  }
35
35
  const [type, entrypoint, data, abortSignal] = result.value;
36
- const nextAction = entrypoint.createAction(type, data, abortSignal);
36
+ const nextAction = entrypoint.createAction(type, data, abortSignal, action.actionContext);
37
37
  try {
38
38
  actionResult = await asyncActionRunner(nextAction, actionHandlers, [...stack, getActionRef(type, entrypoint)]);
39
39
  } catch (e) {
@@ -61,7 +61,7 @@ export function syncActionRunner(action, actionHandlers, stack = [getActionRef(a
61
61
  return result.value;
62
62
  }
63
63
  const [type, entrypoint, data, abortSignal] = result.value;
64
- const nextAction = entrypoint.createAction(type, data, abortSignal);
64
+ const nextAction = entrypoint.createAction(type, data, abortSignal, action.actionContext);
65
65
  try {
66
66
  actionResult = syncActionRunner(nextAction, actionHandlers, [...stack, getActionRef(type, entrypoint)]);
67
67
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"actionRunner.js","names":["Pending","AbortError","getHandler","action","actionHandlers","handler","type","Error","getActionRef","entrypoint","ref","ACTION_ERROR","Symbol","isActionError","e","Array","isArray","asyncActionRunner","stack","result","log","generator","run","actionResult","abortSignal","aborted","throw","next","done","value","data","nextAction","createAction","syncActionRunner"],"sources":["../../../src/transform/actions/actionRunner.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport type {\n ActionQueueItem,\n Handler,\n Handlers,\n TypeOfResult,\n} from '../types';\nimport { Pending } from '../types';\n\nimport { AbortError } from './AbortError';\nimport type { BaseAction } from './BaseAction';\n\nfunction getHandler<\n TMode extends 'async' | 'sync',\n TAction extends ActionQueueItem,\n>(\n action: BaseAction<TAction>,\n actionHandlers: Handlers<TMode>\n): Handler<TMode, TAction> {\n const handler = actionHandlers[action.type];\n if (!handler) {\n throw new Error(`No handler for action ${action.type}`);\n }\n\n // FIXME Handlers<TMode>[TAction['type']] is not assignable to Handler<TMode, TAction>\n return handler as unknown as Handler<TMode, TAction>;\n}\n\nconst getActionRef = (type: string, entrypoint: { ref: string }) =>\n `${type}@${entrypoint.ref}`;\n\nconst ACTION_ERROR = Symbol('ACTION_ERROR');\ntype ActionError = [marker: typeof ACTION_ERROR, err: unknown];\nconst isActionError = (e: unknown): e is ActionError =>\n Array.isArray(e) && e[0] === ACTION_ERROR;\n\nexport async function asyncActionRunner<TAction extends ActionQueueItem>(\n action: BaseAction<TAction>,\n actionHandlers: Handlers<'async' | 'sync'>,\n stack: string[] = [getActionRef(action.type, action.entrypoint)]\n): Promise<TypeOfResult<TAction>> {\n if (action.result !== Pending) {\n action.log('result is cached');\n return action.result as TypeOfResult<TAction>;\n }\n\n const handler = getHandler(action, actionHandlers);\n const generator = action.run<'async' | 'sync'>(handler);\n let actionResult: TypeOfResult<ActionQueueItem> | ActionError | undefined;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (action.abortSignal?.aborted) {\n action.log('action is aborted');\n generator.throw(new AbortError(stack[0]));\n }\n\n const result = await (isActionError(actionResult)\n ? generator.throw(actionResult[1])\n : generator.next(actionResult));\n if (result.done) {\n return result.value as TypeOfResult<TAction>;\n }\n\n const [type, entrypoint, data, abortSignal] = result.value;\n const nextAction = entrypoint.createAction(type, data, abortSignal);\n\n try {\n actionResult = await asyncActionRunner(nextAction, actionHandlers, [\n ...stack,\n getActionRef(type, entrypoint),\n ]);\n } catch (e) {\n nextAction.log('error', e);\n actionResult = [ACTION_ERROR, e];\n }\n }\n}\n\nexport function syncActionRunner<TAction extends ActionQueueItem>(\n action: BaseAction<TAction>,\n actionHandlers: Handlers<'sync'>,\n stack: string[] = [getActionRef(action.type, action.entrypoint)]\n): TypeOfResult<TAction> {\n if (action.result !== Pending) {\n action.log('result is cached');\n return action.result as TypeOfResult<TAction>;\n }\n\n const handler = getHandler(action, actionHandlers);\n const generator = action.run<'sync'>(handler);\n let actionResult: TypeOfResult<ActionQueueItem> | ActionError | undefined;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (action.abortSignal?.aborted) {\n action.log('action is aborted');\n generator.throw(new AbortError(stack[0]));\n }\n\n const result = isActionError(actionResult)\n ? generator.throw(actionResult[1])\n : generator.next(actionResult);\n if (result.done) {\n return result.value as TypeOfResult<TAction>;\n }\n\n const [type, entrypoint, data, abortSignal] = result.value;\n const nextAction = entrypoint.createAction(type, data, abortSignal);\n\n try {\n actionResult = syncActionRunner(nextAction, actionHandlers, [\n ...stack,\n getActionRef(type, entrypoint),\n ]);\n } catch (e) {\n nextAction.log('error', e);\n actionResult = [ACTION_ERROR, e];\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"actionRunner.js","names":["Pending","AbortError","getHandler","action","actionHandlers","handler","type","Error","getActionRef","entrypoint","ref","ACTION_ERROR","Symbol","isActionError","e","Array","isArray","asyncActionRunner","stack","result","log","generator","run","actionResult","abortSignal","aborted","throw","next","done","value","data","nextAction","createAction","actionContext","syncActionRunner"],"sources":["../../../src/transform/actions/actionRunner.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport type {\n ActionQueueItem,\n Handler,\n Handlers,\n TypeOfResult,\n} from '../types';\nimport { Pending } from '../types';\n\nimport { AbortError } from './AbortError';\nimport type { BaseAction } from './BaseAction';\n\nfunction getHandler<\n TMode extends 'async' | 'sync',\n TAction extends ActionQueueItem,\n>(\n action: BaseAction<TAction>,\n actionHandlers: Handlers<TMode>\n): Handler<TMode, TAction> {\n const handler = actionHandlers[action.type];\n if (!handler) {\n throw new Error(`No handler for action ${action.type}`);\n }\n\n // FIXME Handlers<TMode>[TAction['type']] is not assignable to Handler<TMode, TAction>\n return handler as unknown as Handler<TMode, TAction>;\n}\n\nconst getActionRef = (type: string, entrypoint: { ref: string }) =>\n `${type}@${entrypoint.ref}`;\n\nconst ACTION_ERROR = Symbol('ACTION_ERROR');\ntype ActionError = [marker: typeof ACTION_ERROR, err: unknown];\nconst isActionError = (e: unknown): e is ActionError =>\n Array.isArray(e) && e[0] === ACTION_ERROR;\n\nexport async function asyncActionRunner<TAction extends ActionQueueItem>(\n action: BaseAction<TAction>,\n actionHandlers: Handlers<'async' | 'sync'>,\n stack: string[] = [getActionRef(action.type, action.entrypoint)]\n): Promise<TypeOfResult<TAction>> {\n if (action.result !== Pending) {\n action.log('result is cached');\n return action.result as TypeOfResult<TAction>;\n }\n\n const handler = getHandler(action, actionHandlers);\n const generator = action.run<'async' | 'sync'>(handler);\n let actionResult: TypeOfResult<ActionQueueItem> | ActionError | undefined;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (action.abortSignal?.aborted) {\n action.log('action is aborted');\n generator.throw(new AbortError(stack[0]));\n }\n\n const result = await (isActionError(actionResult)\n ? generator.throw(actionResult[1])\n : generator.next(actionResult));\n if (result.done) {\n return result.value as TypeOfResult<TAction>;\n }\n\n const [type, entrypoint, data, abortSignal] = result.value;\n const nextAction = entrypoint.createAction(\n type,\n data,\n abortSignal,\n action.actionContext\n );\n\n try {\n actionResult = await asyncActionRunner(nextAction, actionHandlers, [\n ...stack,\n getActionRef(type, entrypoint),\n ]);\n } catch (e) {\n nextAction.log('error', e);\n actionResult = [ACTION_ERROR, e];\n }\n }\n}\n\nexport function syncActionRunner<TAction extends ActionQueueItem>(\n action: BaseAction<TAction>,\n actionHandlers: Handlers<'sync'>,\n stack: string[] = [getActionRef(action.type, action.entrypoint)]\n): TypeOfResult<TAction> {\n if (action.result !== Pending) {\n action.log('result is cached');\n return action.result as TypeOfResult<TAction>;\n }\n\n const handler = getHandler(action, actionHandlers);\n const generator = action.run<'sync'>(handler);\n let actionResult: TypeOfResult<ActionQueueItem> | ActionError | undefined;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (action.abortSignal?.aborted) {\n action.log('action is aborted');\n generator.throw(new AbortError(stack[0]));\n }\n\n const result = isActionError(actionResult)\n ? generator.throw(actionResult[1])\n : generator.next(actionResult);\n if (result.done) {\n return result.value as TypeOfResult<TAction>;\n }\n\n const [type, entrypoint, data, abortSignal] = result.value;\n const nextAction = entrypoint.createAction(\n type,\n data,\n abortSignal,\n action.actionContext\n );\n\n try {\n actionResult = syncActionRunner(nextAction, actionHandlers, [\n ...stack,\n getActionRef(type, entrypoint),\n ]);\n } catch (e) {\n nextAction.log('error', e);\n actionResult = [ACTION_ERROR, e];\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,8 +4,12 @@ import { isAborted } from '../actions/AbortError';
4
4
  import { analyzeBarrelFile } from '../barrelManifest';
5
5
  const shouldSkipExplodeReexports = action => {
6
6
  const {
7
- loadedAndParsed
7
+ loadedAndParsed,
8
+ only
8
9
  } = action.entrypoint;
10
+ if (only.length === 1 && only[0] === '__wywPreval') {
11
+ return true;
12
+ }
9
13
  if (loadedAndParsed.evaluator !== shaker || !loadedAndParsed.ast) {
10
14
  return false;
11
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"processEntrypoint.js","names":["shaker","isAborted","analyzeBarrelFile","shouldSkipExplodeReexports","action","loadedAndParsed","entrypoint","evaluator","ast","barrelAnalysis","kind","complete","processEntrypoint","only","log","beginProcessing","_usingCtx","_usingCtx2","abortSignal","u","createAbortSignal","undefined","result","getNext","assertNotSuperseded","setTransformResult","supersededWith","applyDeferredSupersede","_","e","d","endProcessing"],"sources":["../../../src/transform/generators/processEntrypoint.ts"],"sourcesContent":["import { shaker } from '../../shaker';\nimport { isAborted } from '../actions/AbortError';\nimport { analyzeBarrelFile } from '../barrelManifest';\nimport type { IProcessEntrypointAction, SyncScenarioForAction } from '../types';\n\nconst shouldSkipExplodeReexports = (\n action: IProcessEntrypointAction\n): boolean => {\n const { loadedAndParsed } = action.entrypoint;\n if (loadedAndParsed.evaluator !== shaker || !loadedAndParsed.ast) {\n return false;\n }\n\n const barrelAnalysis = analyzeBarrelFile(loadedAndParsed.ast);\n return barrelAnalysis.kind === 'barrel' && barrelAnalysis.complete;\n};\n\n/**\n * The first stage of processing an entrypoint.\n * This stage is responsible for:\n * - scheduling the explodeReexports action\n * - scheduling the transform action\n * - rescheduling itself if the entrypoint is superseded\n */\nexport function* processEntrypoint(\n this: IProcessEntrypointAction\n): SyncScenarioForAction<IProcessEntrypointAction> {\n const { only, log } = this.entrypoint;\n log('start processing (only: %o)', only);\n\n this.entrypoint.beginProcessing();\n\n try {\n using abortSignal = this.createAbortSignal();\n\n if (shouldSkipExplodeReexports(this)) {\n log('skip explodeReexports for pure barrel');\n } else {\n yield ['explodeReexports', this.entrypoint, undefined, abortSignal];\n }\n const result = yield* this.getNext(\n 'transform',\n this.entrypoint,\n undefined,\n abortSignal\n );\n\n this.entrypoint.assertNotSuperseded();\n\n this.entrypoint.setTransformResult(result);\n\n const supersededWith = this.entrypoint.applyDeferredSupersede();\n if (supersededWith) {\n log('processing finished, deferred only detected; schedule next attempt');\n yield* this.getNext('processEntrypoint', supersededWith, undefined, null);\n return;\n }\n\n log('entrypoint processing finished');\n } catch (e) {\n if (isAborted(e) && this.entrypoint.supersededWith) {\n log('processing aborted, schedule the next attempt');\n yield* this.getNext(\n 'processEntrypoint',\n this.entrypoint.supersededWith,\n undefined,\n null\n );\n\n return;\n }\n\n log(`Unhandled error: %O`, e);\n throw e;\n } finally {\n this.entrypoint.endProcessing();\n }\n}\n"],"mappings":";AAAA,SAASA,MAAM,QAAQ,cAAc;AACrC,SAASC,SAAS,QAAQ,uBAAuB;AACjD,SAASC,iBAAiB,QAAQ,mBAAmB;AAGrD,MAAMC,0BAA0B,GAC9BC,MAAgC,IACpB;EACZ,MAAM;IAAEC;EAAgB,CAAC,GAAGD,MAAM,CAACE,UAAU;EAC7C,IAAID,eAAe,CAACE,SAAS,KAAKP,MAAM,IAAI,CAACK,eAAe,CAACG,GAAG,EAAE;IAChE,OAAO,KAAK;EACd;EAEA,MAAMC,cAAc,GAAGP,iBAAiB,CAACG,eAAe,CAACG,GAAG,CAAC;EAC7D,OAAOC,cAAc,CAACC,IAAI,KAAK,QAAQ,IAAID,cAAc,CAACE,QAAQ;AACpE,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,iBAAiBA,CAAA,EAEiB;EACjD,MAAM;IAAEC,IAAI;IAAEC;EAAI,CAAC,GAAG,IAAI,CAACR,UAAU;EACrCQ,GAAG,CAAC,6BAA6B,EAAED,IAAI,CAAC;EAExC,IAAI,CAACP,UAAU,CAACS,eAAe,CAAC,CAAC;EAEjC;IAAI;MAAA,IAAAC,SAAA,GAAAC,UAAA;MACF,MAAMC,WAAW,GAAAF,SAAA,CAAAG,CAAA,CAAG,IAAI,CAACC,iBAAiB,CAAC,CAAC;MAE5C,IAAIjB,0BAA0B,CAAC,IAAI,CAAC,EAAE;QACpCW,GAAG,CAAC,uCAAuC,CAAC;MAC9C,CAAC,MAAM;QACL,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAACR,UAAU,EAAEe,SAAS,EAAEH,WAAW,CAAC;MACrE;MACA,MAAMI,MAAM,GAAG,OAAO,IAAI,CAACC,OAAO,CAChC,WAAW,EACX,IAAI,CAACjB,UAAU,EACfe,SAAS,EACTH,WACF,CAAC;MAED,IAAI,CAACZ,UAAU,CAACkB,mBAAmB,CAAC,CAAC;MAErC,IAAI,CAAClB,UAAU,CAACmB,kBAAkB,CAACH,MAAM,CAAC;MAE1C,MAAMI,cAAc,GAAG,IAAI,CAACpB,UAAU,CAACqB,sBAAsB,CAAC,CAAC;MAC/D,IAAID,cAAc,EAAE;QAClBZ,GAAG,CAAC,oEAAoE,CAAC;QACzE,OAAO,IAAI,CAACS,OAAO,CAAC,mBAAmB,EAAEG,cAAc,EAAEL,SAAS,EAAE,IAAI,CAAC;QACzE;MACF;MAEAP,GAAG,CAAC,gCAAgC,CAAC;IAAC,SAAAc,CAAA;MAAAZ,SAAA,CAAAa,CAAA,GAAAD,CAAA;IAAA;MAAAZ,SAAA,CAAAc,CAAA;IAAA;EACvC,EAAC,OAAOD,CAAC,EAAE;IACV,IAAI5B,SAAS,CAAC4B,CAAC,CAAC,IAAI,IAAI,CAACvB,UAAU,CAACoB,cAAc,EAAE;MAClDZ,GAAG,CAAC,+CAA+C,CAAC;MACpD,OAAO,IAAI,CAACS,OAAO,CACjB,mBAAmB,EACnB,IAAI,CAACjB,UAAU,CAACoB,cAAc,EAC9BL,SAAS,EACT,IACF,CAAC;MAED;IACF;IAEAP,GAAG,CAAC,qBAAqB,EAAEe,CAAC,CAAC;IAC7B,MAAMA,CAAC;EACT,CAAC,SAAS;IACR,IAAI,CAACvB,UAAU,CAACyB,aAAa,CAAC,CAAC;EACjC;AACF","ignoreList":[]}
1
+ {"version":3,"file":"processEntrypoint.js","names":["shaker","isAborted","analyzeBarrelFile","shouldSkipExplodeReexports","action","loadedAndParsed","only","entrypoint","length","evaluator","ast","barrelAnalysis","kind","complete","processEntrypoint","log","beginProcessing","_usingCtx","_usingCtx2","abortSignal","u","createAbortSignal","undefined","result","getNext","assertNotSuperseded","setTransformResult","supersededWith","applyDeferredSupersede","_","e","d","endProcessing"],"sources":["../../../src/transform/generators/processEntrypoint.ts"],"sourcesContent":["import { shaker } from '../../shaker';\nimport { isAborted } from '../actions/AbortError';\nimport { analyzeBarrelFile } from '../barrelManifest';\nimport type { IProcessEntrypointAction, SyncScenarioForAction } from '../types';\n\nconst shouldSkipExplodeReexports = (\n action: IProcessEntrypointAction\n): boolean => {\n const { loadedAndParsed, only } = action.entrypoint;\n if (only.length === 1 && only[0] === '__wywPreval') {\n return true;\n }\n\n if (loadedAndParsed.evaluator !== shaker || !loadedAndParsed.ast) {\n return false;\n }\n\n const barrelAnalysis = analyzeBarrelFile(loadedAndParsed.ast);\n return barrelAnalysis.kind === 'barrel' && barrelAnalysis.complete;\n};\n\n/**\n * The first stage of processing an entrypoint.\n * This stage is responsible for:\n * - scheduling the explodeReexports action\n * - scheduling the transform action\n * - rescheduling itself if the entrypoint is superseded\n */\nexport function* processEntrypoint(\n this: IProcessEntrypointAction\n): SyncScenarioForAction<IProcessEntrypointAction> {\n const { only, log } = this.entrypoint;\n log('start processing (only: %o)', only);\n\n this.entrypoint.beginProcessing();\n\n try {\n using abortSignal = this.createAbortSignal();\n\n if (shouldSkipExplodeReexports(this)) {\n log('skip explodeReexports for pure barrel');\n } else {\n yield ['explodeReexports', this.entrypoint, undefined, abortSignal];\n }\n const result = yield* this.getNext(\n 'transform',\n this.entrypoint,\n undefined,\n abortSignal\n );\n\n this.entrypoint.assertNotSuperseded();\n\n this.entrypoint.setTransformResult(result);\n\n const supersededWith = this.entrypoint.applyDeferredSupersede();\n if (supersededWith) {\n log('processing finished, deferred only detected; schedule next attempt');\n yield* this.getNext('processEntrypoint', supersededWith, undefined, null);\n return;\n }\n\n log('entrypoint processing finished');\n } catch (e) {\n if (isAborted(e) && this.entrypoint.supersededWith) {\n log('processing aborted, schedule the next attempt');\n yield* this.getNext(\n 'processEntrypoint',\n this.entrypoint.supersededWith,\n undefined,\n null\n );\n\n return;\n }\n\n log(`Unhandled error: %O`, e);\n throw e;\n } finally {\n this.entrypoint.endProcessing();\n }\n}\n"],"mappings":";AAAA,SAASA,MAAM,QAAQ,cAAc;AACrC,SAASC,SAAS,QAAQ,uBAAuB;AACjD,SAASC,iBAAiB,QAAQ,mBAAmB;AAGrD,MAAMC,0BAA0B,GAC9BC,MAAgC,IACpB;EACZ,MAAM;IAAEC,eAAe;IAAEC;EAAK,CAAC,GAAGF,MAAM,CAACG,UAAU;EACnD,IAAID,IAAI,CAACE,MAAM,KAAK,CAAC,IAAIF,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE;IAClD,OAAO,IAAI;EACb;EAEA,IAAID,eAAe,CAACI,SAAS,KAAKT,MAAM,IAAI,CAACK,eAAe,CAACK,GAAG,EAAE;IAChE,OAAO,KAAK;EACd;EAEA,MAAMC,cAAc,GAAGT,iBAAiB,CAACG,eAAe,CAACK,GAAG,CAAC;EAC7D,OAAOC,cAAc,CAACC,IAAI,KAAK,QAAQ,IAAID,cAAc,CAACE,QAAQ;AACpE,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,iBAAiBA,CAAA,EAEiB;EACjD,MAAM;IAAER,IAAI;IAAES;EAAI,CAAC,GAAG,IAAI,CAACR,UAAU;EACrCQ,GAAG,CAAC,6BAA6B,EAAET,IAAI,CAAC;EAExC,IAAI,CAACC,UAAU,CAACS,eAAe,CAAC,CAAC;EAEjC;IAAI;MAAA,IAAAC,SAAA,GAAAC,UAAA;MACF,MAAMC,WAAW,GAAAF,SAAA,CAAAG,CAAA,CAAG,IAAI,CAACC,iBAAiB,CAAC,CAAC;MAE5C,IAAIlB,0BAA0B,CAAC,IAAI,CAAC,EAAE;QACpCY,GAAG,CAAC,uCAAuC,CAAC;MAC9C,CAAC,MAAM;QACL,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAACR,UAAU,EAAEe,SAAS,EAAEH,WAAW,CAAC;MACrE;MACA,MAAMI,MAAM,GAAG,OAAO,IAAI,CAACC,OAAO,CAChC,WAAW,EACX,IAAI,CAACjB,UAAU,EACfe,SAAS,EACTH,WACF,CAAC;MAED,IAAI,CAACZ,UAAU,CAACkB,mBAAmB,CAAC,CAAC;MAErC,IAAI,CAAClB,UAAU,CAACmB,kBAAkB,CAACH,MAAM,CAAC;MAE1C,MAAMI,cAAc,GAAG,IAAI,CAACpB,UAAU,CAACqB,sBAAsB,CAAC,CAAC;MAC/D,IAAID,cAAc,EAAE;QAClBZ,GAAG,CAAC,oEAAoE,CAAC;QACzE,OAAO,IAAI,CAACS,OAAO,CAAC,mBAAmB,EAAEG,cAAc,EAAEL,SAAS,EAAE,IAAI,CAAC;QACzE;MACF;MAEAP,GAAG,CAAC,gCAAgC,CAAC;IAAC,SAAAc,CAAA;MAAAZ,SAAA,CAAAa,CAAA,GAAAD,CAAA;IAAA;MAAAZ,SAAA,CAAAc,CAAA;IAAA;EACvC,EAAC,OAAOD,CAAC,EAAE;IACV,IAAI7B,SAAS,CAAC6B,CAAC,CAAC,IAAI,IAAI,CAACvB,UAAU,CAACoB,cAAc,EAAE;MAClDZ,GAAG,CAAC,+CAA+C,CAAC;MACpD,OAAO,IAAI,CAACS,OAAO,CACjB,mBAAmB,EACnB,IAAI,CAACjB,UAAU,CAACoB,cAAc,EAC9BL,SAAS,EACT,IACF,CAAC;MAED;IACF;IAEAP,GAAG,CAAC,qBAAqB,EAAEe,CAAC,CAAC;IAC7B,MAAMA,CAAC;EACT,CAAC,SAAS;IACR,IAAI,CAACvB,UAAU,CAACyB,aAAa,CAAC,CAAC;EACjC;AACF","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 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":[]}
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 actionContext: unknown;\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":[]}
package/esm/transform.js CHANGED
@@ -18,6 +18,22 @@ import { asyncResolveImports, syncResolveImports } from './transform/generators/
18
18
  import { withDefaultServices } from './transform/helpers/withDefaultServices';
19
19
  const memoizedSyncResolve = new WeakMap();
20
20
  const memoizedAsyncResolve = new WeakMap();
21
+ const EMPTY_CUSTOM_HANDLERS = {};
22
+ const memoizedActionContexts = new WeakMap();
23
+ const getActionContext = (resolveImportsHandler, customHandlers) => {
24
+ const customHandlersKey = Object.keys(customHandlers).length === 0 ? EMPTY_CUSTOM_HANDLERS : customHandlers;
25
+ let actionContextsByHandlers = memoizedActionContexts.get(resolveImportsHandler);
26
+ if (!actionContextsByHandlers) {
27
+ actionContextsByHandlers = new WeakMap();
28
+ memoizedActionContexts.set(resolveImportsHandler, actionContextsByHandlers);
29
+ }
30
+ let actionContext = actionContextsByHandlers.get(customHandlersKey);
31
+ if (!actionContext) {
32
+ actionContext = {};
33
+ actionContextsByHandlers.set(customHandlersKey, actionContext);
34
+ }
35
+ return actionContext;
36
+ };
21
37
  export function transformSync(partialServices, originalCode, syncResolve, customHandlers = {}) {
22
38
  const {
23
39
  options
@@ -34,6 +50,18 @@ export function transformSync(partialServices, originalCode, syncResolve, custom
34
50
  // If global cache is disabled, we need to create a new cache for each file
35
51
  services.cache = new TransformCacheCollection();
36
52
  }
53
+ if (!memoizedSyncResolve.has(syncResolve)) {
54
+ memoizedSyncResolve.set(syncResolve, function resolveImports() {
55
+ return syncResolveImports.call(this, syncResolve);
56
+ });
57
+ }
58
+ const resolveImportsHandler = memoizedSyncResolve.get(syncResolve);
59
+ const actionHandlers = {
60
+ ...baseHandlers,
61
+ ...customHandlers,
62
+ resolveImports: resolveImportsHandler
63
+ };
64
+ const actionContext = getActionContext(resolveImportsHandler, customHandlers);
37
65
  const entrypoint = Entrypoint.createRoot(services, options.filename, ['__wywPreval'], originalCode);
38
66
  if (entrypoint.ignored) {
39
67
  return {
@@ -41,18 +69,9 @@ export function transformSync(partialServices, originalCode, syncResolve, custom
41
69
  sourceMap: options.inputSourceMap
42
70
  };
43
71
  }
44
- const workflowAction = entrypoint.createAction('workflow', undefined);
45
- if (!memoizedSyncResolve.has(syncResolve)) {
46
- memoizedSyncResolve.set(syncResolve, function resolveImports() {
47
- return syncResolveImports.call(this, syncResolve);
48
- });
49
- }
72
+ const workflowAction = entrypoint.createAction('workflow', undefined, null, actionContext);
50
73
  try {
51
- const result = syncActionRunner(workflowAction, {
52
- ...baseHandlers,
53
- ...customHandlers,
54
- resolveImports: memoizedSyncResolve.get(syncResolve)
55
- });
74
+ const result = syncActionRunner(workflowAction, actionHandlers);
56
75
  entrypoint.log('%s is ready', entrypoint.name);
57
76
  return result;
58
77
  } catch (err) {
@@ -93,6 +112,19 @@ export async function transform(partialServices, originalCode, asyncResolve, cus
93
112
  * but the "only" option has changed, the file will be re-processed using
94
113
  * the combined "only" option.
95
114
  */
115
+ if (!memoizedAsyncResolve.has(asyncResolve)) {
116
+ const resolveImports = function resolveImports() {
117
+ return asyncResolveImports.call(this, asyncResolve);
118
+ };
119
+ memoizedAsyncResolve.set(asyncResolve, resolveImports);
120
+ }
121
+ const resolveImportsHandler = memoizedAsyncResolve.get(asyncResolve);
122
+ const actionHandlers = {
123
+ ...baseHandlers,
124
+ ...customHandlers,
125
+ resolveImports: resolveImportsHandler
126
+ };
127
+ const actionContext = getActionContext(resolveImportsHandler, customHandlers);
96
128
  const entrypoint = Entrypoint.createRoot(services, options.filename, ['__wywPreval'], originalCode);
97
129
  if (entrypoint.ignored) {
98
130
  return {
@@ -100,19 +132,9 @@ export async function transform(partialServices, originalCode, asyncResolve, cus
100
132
  sourceMap: options.inputSourceMap
101
133
  };
102
134
  }
103
- const workflowAction = entrypoint.createAction('workflow', undefined);
104
- if (!memoizedAsyncResolve.has(asyncResolve)) {
105
- const resolveImports = function resolveImports() {
106
- return asyncResolveImports.call(this, asyncResolve);
107
- };
108
- memoizedAsyncResolve.set(asyncResolve, resolveImports);
109
- }
135
+ const workflowAction = entrypoint.createAction('workflow', undefined, null, actionContext);
110
136
  try {
111
- const result = await asyncActionRunner(workflowAction, {
112
- ...baseHandlers,
113
- ...customHandlers,
114
- resolveImports: memoizedAsyncResolve.get(asyncResolve)
115
- });
137
+ const result = await asyncActionRunner(workflowAction, actionHandlers);
116
138
  entrypoint.log('%s is ready', entrypoint.name);
117
139
  return result;
118
140
  } catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","names":["isFeatureEnabled","loadWywOptions","TransformCacheCollection","Entrypoint","asyncActionRunner","syncActionRunner","baseHandlers","asyncResolveImports","syncResolveImports","withDefaultServices","memoizedSyncResolve","WeakMap","memoizedAsyncResolve","transformSync","partialServices","originalCode","syncResolve","customHandlers","options","pluginOptions","services","features","filename","cache","entrypoint","createRoot","ignored","code","sourceMap","inputSourceMap","workflowAction","createAction","undefined","has","set","resolveImports","call","result","get","log","name","err","console","error","transform","asyncResolve"],"sources":["../src/transform.ts"],"sourcesContent":["/**\n * This file exposes sync and async transform functions that:\n * - parse the passed code to AST\n * - builds a dependency graph for the file\n * - shakes each dependency and removes unused code\n * - runs generated code in a sandbox\n * - collects artifacts\n * - returns transformed code (without WYW template literals), generated CSS, source maps and babel metadata from transform step.\n */\n\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { PartialOptions } from './transform/helpers/loadWywOptions';\nimport { loadWywOptions } from './transform/helpers/loadWywOptions';\nimport { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n asyncActionRunner,\n syncActionRunner,\n} from './transform/actions/actionRunner';\nimport { baseHandlers } from './transform/generators';\nimport {\n asyncResolveImports,\n syncResolveImports,\n} from './transform/generators/resolveImports';\nimport { withDefaultServices } from './transform/helpers/withDefaultServices';\nimport type {\n Handler,\n Handlers,\n IResolveImportsAction,\n Services,\n} from './transform/types';\nimport type { Result } from './types';\n\ntype PartialServices = Partial<Omit<Services, 'options'>> & {\n options: Omit<Services['options'], 'pluginOptions'> & {\n pluginOptions?: PartialOptions;\n };\n};\n\ntype AllHandlers<TMode extends 'async' | 'sync'> = Handlers<TMode>;\n\nconst memoizedSyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => string | null,\n Handler<'sync', IResolveImportsAction>\n>();\n\nconst memoizedAsyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => Promise<string | null>,\n Handler<'async' | 'sync', IResolveImportsAction>\n>();\n\nexport function transformSync(\n partialServices: PartialServices,\n originalCode: string,\n syncResolve: (what: string, importer: string, stack: string[]) => string,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Result {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction('workflow', undefined);\n\n if (!memoizedSyncResolve.has(syncResolve)) {\n memoizedSyncResolve.set(\n syncResolve,\n function resolveImports(this: IResolveImportsAction) {\n return syncResolveImports.call(this, syncResolve);\n }\n );\n }\n\n try {\n const result = syncActionRunner(workflowAction, {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: memoizedSyncResolve.get(syncResolve)!,\n });\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n\nexport async function transform(\n partialServices: PartialServices,\n originalCode: string,\n asyncResolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Promise<Result> {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n /*\n * This method can be run simultaneously for multiple files.\n * A shared cache is accessible for all runs, but each run has its own queue\n * to maintain the correct processing order. The cache stores the outcome\n * of tree-shaking, and if the result is already stored in the cache\n * but the \"only\" option has changed, the file will be re-processed using\n * the combined \"only\" option.\n */\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction('workflow', undefined);\n\n if (!memoizedAsyncResolve.has(asyncResolve)) {\n const resolveImports = function resolveImports(\n this: IResolveImportsAction\n ) {\n return asyncResolveImports.call(this, asyncResolve);\n };\n\n memoizedAsyncResolve.set(asyncResolve, resolveImports);\n }\n\n try {\n const result = await asyncActionRunner(workflowAction, {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: memoizedAsyncResolve.get(asyncResolve)!,\n });\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"transform.js","names":["isFeatureEnabled","loadWywOptions","TransformCacheCollection","Entrypoint","asyncActionRunner","syncActionRunner","baseHandlers","asyncResolveImports","syncResolveImports","withDefaultServices","memoizedSyncResolve","WeakMap","memoizedAsyncResolve","EMPTY_CUSTOM_HANDLERS","memoizedActionContexts","getActionContext","resolveImportsHandler","customHandlers","customHandlersKey","Object","keys","length","actionContextsByHandlers","get","set","actionContext","transformSync","partialServices","originalCode","syncResolve","options","pluginOptions","services","features","filename","cache","has","resolveImports","call","actionHandlers","entrypoint","createRoot","ignored","code","sourceMap","inputSourceMap","workflowAction","createAction","undefined","result","log","name","err","console","error","transform","asyncResolve"],"sources":["../src/transform.ts"],"sourcesContent":["/**\n * This file exposes sync and async transform functions that:\n * - parse the passed code to AST\n * - builds a dependency graph for the file\n * - shakes each dependency and removes unused code\n * - runs generated code in a sandbox\n * - collects artifacts\n * - returns transformed code (without WYW template literals), generated CSS, source maps and babel metadata from transform step.\n */\n\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { PartialOptions } from './transform/helpers/loadWywOptions';\nimport { loadWywOptions } from './transform/helpers/loadWywOptions';\nimport { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n asyncActionRunner,\n syncActionRunner,\n} from './transform/actions/actionRunner';\nimport { baseHandlers } from './transform/generators';\nimport {\n asyncResolveImports,\n syncResolveImports,\n} from './transform/generators/resolveImports';\nimport { withDefaultServices } from './transform/helpers/withDefaultServices';\nimport type {\n Handler,\n Handlers,\n IResolveImportsAction,\n Services,\n} from './transform/types';\nimport type { Result } from './types';\n\ntype PartialServices = Partial<Omit<Services, 'options'>> & {\n options: Omit<Services['options'], 'pluginOptions'> & {\n pluginOptions?: PartialOptions;\n };\n};\n\ntype AllHandlers<TMode extends 'async' | 'sync'> = Handlers<TMode>;\n\nconst memoizedSyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => string | null,\n Handler<'sync', IResolveImportsAction>\n>();\n\nconst memoizedAsyncResolve = new WeakMap<\n (what: string, importer: string, stack: string[]) => Promise<string | null>,\n Handler<'async' | 'sync', IResolveImportsAction>\n>();\n\nconst EMPTY_CUSTOM_HANDLERS = {};\nconst memoizedActionContexts = new WeakMap<object, WeakMap<object, object>>();\n\nconst getActionContext = (\n resolveImportsHandler: object,\n customHandlers: object\n): object => {\n const customHandlersKey =\n Object.keys(customHandlers).length === 0\n ? EMPTY_CUSTOM_HANDLERS\n : customHandlers;\n let actionContextsByHandlers = memoizedActionContexts.get(\n resolveImportsHandler\n );\n if (!actionContextsByHandlers) {\n actionContextsByHandlers = new WeakMap();\n memoizedActionContexts.set(resolveImportsHandler, actionContextsByHandlers);\n }\n\n let actionContext = actionContextsByHandlers.get(customHandlersKey);\n if (!actionContext) {\n actionContext = {};\n actionContextsByHandlers.set(customHandlersKey, actionContext);\n }\n\n return actionContext;\n};\n\nexport function transformSync(\n partialServices: PartialServices,\n originalCode: string,\n syncResolve: (what: string, importer: string, stack: string[]) => string,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Result {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n if (!memoizedSyncResolve.has(syncResolve)) {\n memoizedSyncResolve.set(\n syncResolve,\n function resolveImports(this: IResolveImportsAction) {\n return syncResolveImports.call(this, syncResolve);\n }\n );\n }\n\n const resolveImportsHandler = memoizedSyncResolve.get(syncResolve)!;\n const actionHandlers = {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: resolveImportsHandler,\n };\n const actionContext = getActionContext(resolveImportsHandler, customHandlers);\n\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction(\n 'workflow',\n undefined,\n null,\n actionContext\n );\n\n try {\n const result = syncActionRunner(workflowAction, actionHandlers);\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n\nexport async function transform(\n partialServices: PartialServices,\n originalCode: string,\n asyncResolve: (\n what: string,\n importer: string,\n stack: string[]\n ) => Promise<string | null>,\n customHandlers: Partial<AllHandlers<'sync'>> = {}\n): Promise<Result> {\n const { options } = partialServices;\n const pluginOptions = loadWywOptions(options.pluginOptions);\n const services = withDefaultServices({\n ...partialServices,\n options: {\n ...options,\n pluginOptions,\n },\n });\n\n if (\n !isFeatureEnabled(pluginOptions.features, 'globalCache', options.filename)\n ) {\n // If global cache is disabled, we need to create a new cache for each file\n services.cache = new TransformCacheCollection();\n }\n\n /*\n * This method can be run simultaneously for multiple files.\n * A shared cache is accessible for all runs, but each run has its own queue\n * to maintain the correct processing order. The cache stores the outcome\n * of tree-shaking, and if the result is already stored in the cache\n * but the \"only\" option has changed, the file will be re-processed using\n * the combined \"only\" option.\n */\n if (!memoizedAsyncResolve.has(asyncResolve)) {\n const resolveImports = function resolveImports(\n this: IResolveImportsAction\n ) {\n return asyncResolveImports.call(this, asyncResolve);\n };\n\n memoizedAsyncResolve.set(asyncResolve, resolveImports);\n }\n\n const resolveImportsHandler = memoizedAsyncResolve.get(asyncResolve)!;\n const actionHandlers = {\n ...baseHandlers,\n ...customHandlers,\n resolveImports: resolveImportsHandler,\n };\n const actionContext = getActionContext(resolveImportsHandler, customHandlers);\n\n const entrypoint = Entrypoint.createRoot(\n services,\n options.filename,\n ['__wywPreval'],\n originalCode\n );\n\n if (entrypoint.ignored) {\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n const workflowAction = entrypoint.createAction(\n 'workflow',\n undefined,\n null,\n actionContext\n );\n\n try {\n const result = await asyncActionRunner(workflowAction, actionHandlers);\n\n entrypoint.log('%s is ready', entrypoint.name);\n\n return result;\n } catch (err) {\n entrypoint.log('Unhandled error %O', err);\n\n if (\n isFeatureEnabled(pluginOptions.features, 'softErrors', options.filename)\n ) {\n // eslint-disable-next-line no-console\n console.error(`Error during transform of ${entrypoint.name}:`, err);\n\n return {\n code: originalCode,\n sourceMap: options.inputSourceMap,\n };\n }\n\n throw err;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -15,6 +15,15 @@ import { mutate, referenceAll } from './scopeHelpers';
15
15
  import { valueToLiteral } from './valueToLiteral';
16
16
  function staticEval(ex, evaluate = false) {
17
17
  if (!evaluate) return undefined;
18
+ if (ex.isIdentifier()) {
19
+ const binding = ex.scope.getBinding(ex.node.name);
20
+
21
+ // Babel may "evaluate" a destructured binding to its source container
22
+ // object/array instead of the bound value, which changes template semantics.
23
+ if (binding?.path.isVariableDeclarator() && !binding.path.get('id').isIdentifier()) {
24
+ return undefined;
25
+ }
26
+ }
18
27
  const result = ex.evaluate();
19
28
  if (result.confident && !hasEvalMeta(result.value)) {
20
29
  return [result.value];