@wyw-in-js/transform 1.0.6 → 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 (98) hide show
  1. package/esm/cache.js +160 -12
  2. package/esm/cache.js.map +1 -1
  3. package/esm/debug/fileReporter.js.map +1 -1
  4. package/esm/module.js +59 -5
  5. package/esm/module.js.map +1 -1
  6. package/esm/plugins/shaker.js +152 -13
  7. package/esm/plugins/shaker.js.map +1 -1
  8. package/esm/shaker.js +51 -23
  9. package/esm/shaker.js.map +1 -1
  10. package/esm/transform/BaseEntrypoint.js +3 -1
  11. package/esm/transform/BaseEntrypoint.js.map +1 -1
  12. package/esm/transform/Entrypoint.js +68 -20
  13. package/esm/transform/Entrypoint.js.map +1 -1
  14. package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
  15. package/esm/transform/actions/BaseAction.js +2 -1
  16. package/esm/transform/actions/BaseAction.js.map +1 -1
  17. package/esm/transform/actions/actionRunner.js +2 -2
  18. package/esm/transform/actions/actionRunner.js.map +1 -1
  19. package/esm/transform/barrelManifest.js +291 -0
  20. package/esm/transform/barrelManifest.js.map +1 -0
  21. package/esm/transform/generators/getExports.js +5 -0
  22. package/esm/transform/generators/getExports.js.map +1 -1
  23. package/esm/transform/generators/processEntrypoint.js +31 -1
  24. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  25. package/esm/transform/generators/resolveImports.js +29 -5
  26. package/esm/transform/generators/resolveImports.js.map +1 -1
  27. package/esm/transform/generators/rewriteBarrelImports.js +733 -0
  28. package/esm/transform/generators/rewriteBarrelImports.js.map +1 -0
  29. package/esm/transform/generators/transform.js +154 -21
  30. package/esm/transform/generators/transform.js.map +1 -1
  31. package/esm/transform/types.js.map +1 -1
  32. package/esm/transform.js +45 -23
  33. package/esm/transform.js.map +1 -1
  34. package/esm/utils/collectTemplateDependencies.js +9 -0
  35. package/esm/utils/collectTemplateDependencies.js.map +1 -1
  36. package/lib/cache.js +163 -12
  37. package/lib/cache.js.map +1 -1
  38. package/lib/debug/fileReporter.js.map +1 -1
  39. package/lib/module.js +61 -7
  40. package/lib/module.js.map +1 -1
  41. package/lib/plugins/shaker.js +152 -13
  42. package/lib/plugins/shaker.js.map +1 -1
  43. package/lib/shaker.js +58 -26
  44. package/lib/shaker.js.map +1 -1
  45. package/lib/transform/BaseEntrypoint.js +3 -1
  46. package/lib/transform/BaseEntrypoint.js.map +1 -1
  47. package/lib/transform/Entrypoint.js +69 -20
  48. package/lib/transform/Entrypoint.js.map +1 -1
  49. package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
  50. package/lib/transform/actions/BaseAction.js +2 -1
  51. package/lib/transform/actions/BaseAction.js.map +1 -1
  52. package/lib/transform/actions/actionRunner.js +2 -2
  53. package/lib/transform/actions/actionRunner.js.map +1 -1
  54. package/lib/transform/barrelManifest.js +300 -0
  55. package/lib/transform/barrelManifest.js.map +1 -0
  56. package/lib/transform/generators/getExports.js +5 -0
  57. package/lib/transform/generators/getExports.js.map +1 -1
  58. package/lib/transform/generators/processEntrypoint.js +31 -1
  59. package/lib/transform/generators/processEntrypoint.js.map +1 -1
  60. package/lib/transform/generators/resolveImports.js +29 -5
  61. package/lib/transform/generators/resolveImports.js.map +1 -1
  62. package/lib/transform/generators/rewriteBarrelImports.js +743 -0
  63. package/lib/transform/generators/rewriteBarrelImports.js.map +1 -0
  64. package/lib/transform/generators/transform.js +158 -22
  65. package/lib/transform/generators/transform.js.map +1 -1
  66. package/lib/transform/types.js.map +1 -1
  67. package/lib/transform.js +45 -23
  68. package/lib/transform.js.map +1 -1
  69. package/lib/utils/collectTemplateDependencies.js +9 -0
  70. package/lib/utils/collectTemplateDependencies.js.map +1 -1
  71. package/package.json +8 -4
  72. package/types/cache.d.ts +23 -2
  73. package/types/cache.js +170 -10
  74. package/types/debug/fileReporter.d.ts +1 -0
  75. package/types/module.d.ts +3 -0
  76. package/types/module.js +65 -5
  77. package/types/plugins/shaker.js +161 -16
  78. package/types/shaker.d.ts +10 -1
  79. package/types/shaker.js +56 -28
  80. package/types/transform/BaseEntrypoint.d.ts +3 -1
  81. package/types/transform/BaseEntrypoint.js +5 -1
  82. package/types/transform/Entrypoint.d.ts +10 -1
  83. package/types/transform/Entrypoint.js +81 -23
  84. package/types/transform/EvaluatedEntrypoint.d.ts +2 -0
  85. package/types/transform/actions/BaseAction.d.ts +2 -1
  86. package/types/transform/actions/BaseAction.js +3 -1
  87. package/types/transform/actions/actionRunner.js +2 -2
  88. package/types/transform/barrelManifest.d.ts +42 -0
  89. package/types/transform/barrelManifest.js +300 -0
  90. package/types/transform/generators/getExports.js +5 -0
  91. package/types/transform/generators/processEntrypoint.js +29 -1
  92. package/types/transform/generators/resolveImports.js +29 -5
  93. package/types/transform/generators/rewriteBarrelImports.d.ts +15 -0
  94. package/types/transform/generators/rewriteBarrelImports.js +815 -0
  95. package/types/transform/generators/transform.js +148 -19
  96. package/types/transform/types.d.ts +3 -0
  97. package/types/transform.js +47 -23
  98. package/types/utils/collectTemplateDependencies.js +9 -0
@@ -4,15 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Entrypoint = void 0;
7
+ var _nodeFs = _interopRequireDefault(require("node:fs"));
7
8
  var _tsInvariant = require("ts-invariant");
8
9
  var _BaseEntrypoint = require("./BaseEntrypoint");
9
10
  var _Entrypoint = require("./Entrypoint.helpers");
10
- var _isStaticallyEvaluatableModule = require("./isStaticallyEvaluatableModule");
11
11
  var _EvaluatedEntrypoint = require("./EvaluatedEntrypoint");
12
12
  var _AbortError = require("./actions/AbortError");
13
13
  var _BaseAction = require("./actions/BaseAction");
14
14
  var _UnprocessedEntrypointError = require("./actions/UnprocessedEntrypointError");
15
+ var _parseRequest = require("../utils/parseRequest");
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
17
  const EMPTY_FILE = '=== empty file ===';
18
+ const DEFAULT_ACTION_CONTEXT = Symbol('defaultActionContext');
16
19
  function hasLoop(name, parent, processed = []) {
17
20
  if (parent.name === name || processed.includes(parent.name)) {
18
21
  return true;
@@ -30,14 +33,18 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
30
33
  onSupersedeHandlers = [];
31
34
  actionsCache = new Map();
32
35
  #hasWywMetadata = false;
36
+ #isProcessing = false;
37
+ #pendingOnly = null;
33
38
  #supersededWith = null;
34
39
  #transformResultCode = null;
35
- constructor(services, parents, initialCode, name, only, exports, evaluatedOnly, loadedAndParsed, resolveTasks = new Map(), dependencies = new Map(), generation = 1) {
40
+ constructor(services, parents, initialCode, name, only, exports, evaluatedOnly, loadedAndParsed, resolveTasks = new Map(), dependencies = new Map(), invalidationDependencies = new Map(), invalidateOnDependencyChange = new Set(), generation = 1) {
36
41
  var _parents$0$log, _parents$;
37
- super(services, evaluatedOnly, exports, generation, name, only, parents, dependencies);
42
+ super(services, evaluatedOnly, exports, generation, name, only, parents, dependencies, invalidationDependencies, invalidateOnDependencyChange);
38
43
  this.initialCode = initialCode;
39
44
  this.resolveTasks = resolveTasks;
40
45
  this.dependencies = dependencies;
46
+ this.invalidationDependencies = invalidationDependencies;
47
+ this.invalidateOnDependencyChange = invalidateOnDependencyChange;
41
48
  this.loadedAndParsed = loadedAndParsed !== null && loadedAndParsed !== void 0 ? loadedAndParsed : services.loadAndParseFn(services, name, initialCode, (_parents$0$log = (_parents$ = parents[0]) === null || _parents$ === void 0 ? void 0 : _parents$.log) !== null && _parents$0$log !== void 0 ? _parents$0$log : services.log);
42
49
  if (this.loadedAndParsed.code !== undefined) {
43
50
  services.cache.invalidateIfChanged(name, this.loadedAndParsed.code, undefined, this.initialCode === undefined ? 'fs' : 'loaded');
@@ -102,7 +109,16 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
102
109
  cache
103
110
  } = services;
104
111
  const cached = cache.get('entrypoints', name);
105
- const changed = loadedCode !== undefined ? cache.invalidateIfChanged(name, loadedCode, undefined, 'loaded') : false;
112
+ let changed = false;
113
+ if (loadedCode !== undefined) {
114
+ changed = cache.invalidateIfChanged(name, loadedCode, undefined, 'loaded');
115
+ } else if (cached && cached.initialCode === undefined) {
116
+ try {
117
+ changed = cache.invalidateIfChanged(name, _nodeFs.default.readFileSync((0, _parseRequest.stripQueryAndHash)(name), 'utf8'), undefined, 'fs');
118
+ } catch {
119
+ changed = false;
120
+ }
121
+ }
106
122
  if (!(cached !== null && cached !== void 0 && cached.evaluated) && cached !== null && cached !== void 0 && cached.ignored) {
107
123
  return ['cached', cached];
108
124
  }
@@ -125,19 +141,14 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
125
141
  return [isLoop ? 'loop' : 'cached', cached];
126
142
  }
127
143
  cached.log('is cached, but with different `only` %o (the cached one %o)', only, cached === null || cached === void 0 ? void 0 : cached.only);
128
- return [isLoop ? 'loop' : 'created', cached.supersede(mergedOnly)];
129
- }
130
- const newEntrypoint = new Entrypoint(services, parent ? [parent] : [], loadedCode, name, mergedOnly, exports, evaluatedOnly, undefined, cached && 'resolveTasks' in cached ? cached.resolveTasks : undefined, cached && 'dependencies' in cached ? cached.dependencies : undefined, cached ? cached.generation + 1 : 1);
131
- if (!newEntrypoint.ignored && !newEntrypoint.only.includes('*') && !newEntrypoint.only.includes('__wywPreval') && !newEntrypoint.only.includes('side-effect')) {
132
- const {
133
- ast
134
- } = newEntrypoint.loadedAndParsed;
135
- if (ast && (0, _isStaticallyEvaluatableModule.isStaticallyEvaluatableModule)(ast)) {
136
- newEntrypoint.log('[entrypoint] promote `only` to "*" for statically evaluatable module');
137
- newEntrypoint.only.length = 0;
138
- newEntrypoint.only.push('*');
144
+ if (cached.#isProcessing) {
145
+ cached.deferOnlySupersede(mergedOnly);
146
+ cached.log('is being processed, defer supersede (%o -> %o)', cached.only, mergedOnly);
147
+ return [isLoop ? 'loop' : 'cached', cached];
139
148
  }
149
+ return [isLoop ? 'loop' : 'created', cached.supersede(mergedOnly)];
140
150
  }
151
+ const newEntrypoint = new Entrypoint(services, parent ? [parent] : [], loadedCode, name, mergedOnly, exports, evaluatedOnly, undefined, cached && 'resolveTasks' in cached ? cached.resolveTasks : undefined, cached && 'dependencies' in cached ? cached.dependencies : undefined, cached && 'invalidationDependencies' in cached ? cached.invalidationDependencies : undefined, cached && 'invalidateOnDependencyChange' in cached ? cached.invalidateOnDependencyChange : undefined, cached ? cached.generation + 1 : 1);
141
152
  if (cached && !cached.evaluated) {
142
153
  cached.log('is cached, but with different code');
143
154
  cached.supersede(newEntrypoint);
@@ -148,9 +159,27 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
148
159
  this.resolveTasks.delete(dependency.source);
149
160
  this.dependencies.set(dependency.source, dependency);
150
161
  }
162
+ addInvalidationDependency(dependency) {
163
+ this.resolveTasks.delete(dependency.source);
164
+ this.invalidationDependencies.set(dependency.source, dependency);
165
+ }
151
166
  addResolveTask(name, dependency) {
152
167
  this.resolveTasks.set(name, dependency);
153
168
  }
169
+ applyDeferredSupersede() {
170
+ if (this.#supersededWith || this.#pendingOnly === null) {
171
+ return null;
172
+ }
173
+ const mergedOnly = (0, _Entrypoint.mergeOnly)(this.only, this.#pendingOnly);
174
+ this.#pendingOnly = null;
175
+ if ((0, _Entrypoint.isSuperSet)(this.only, mergedOnly)) {
176
+ return null;
177
+ }
178
+ this.log('apply deferred supersede (%o -> %o)', this.only, mergedOnly);
179
+ const nextEntrypoint = this.supersede(mergedOnly);
180
+ this.services.cache.add('entrypoints', this.name, nextEntrypoint);
181
+ return nextEntrypoint;
182
+ }
154
183
  assertNotSuperseded() {
155
184
  if (this.supersededWith) {
156
185
  this.log('superseded');
@@ -164,17 +193,24 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
164
193
  throw new _UnprocessedEntrypointError.UnprocessedEntrypointError((_this$supersededWith3 = this.supersededWith) !== null && _this$supersededWith3 !== void 0 ? _this$supersededWith3 : this);
165
194
  }
166
195
  }
167
- createAction(actionType, data, abortSignal = null) {
196
+ beginProcessing() {
197
+ this.#isProcessing = true;
198
+ }
199
+ createAction(actionType, data, abortSignal = null, actionContext = DEFAULT_ACTION_CONTEXT) {
168
200
  var _cached$abortSignal;
169
201
  if (!this.actionsCache.has(actionType)) {
170
202
  this.actionsCache.set(actionType, new Map());
171
203
  }
172
- const cache = this.actionsCache.get(actionType);
204
+ const contexts = this.actionsCache.get(actionType);
205
+ if (!contexts.has(actionContext)) {
206
+ contexts.set(actionContext, new Map());
207
+ }
208
+ const cache = contexts.get(actionContext);
173
209
  const cached = cache.get(data);
174
210
  if (cached && !((_cached$abortSignal = cached.abortSignal) !== null && _cached$abortSignal !== void 0 && _cached$abortSignal.aborted)) {
175
211
  return cached;
176
212
  }
177
- const newAction = new _BaseAction.BaseAction(actionType, this.services, this, data, abortSignal);
213
+ const newAction = new _BaseAction.BaseAction(actionType, this.services, this, data, abortSignal, actionContext);
178
214
  cache.set(data, newAction);
179
215
  this.services.eventEmitter.entrypointEvent(this.seqId, {
180
216
  type: 'actionCreated',
@@ -189,13 +225,22 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
189
225
  createEvaluated() {
190
226
  const evaluatedOnly = (0, _Entrypoint.mergeOnly)(this.evaluatedOnly, this.only);
191
227
  this.log('create EvaluatedEntrypoint for %o', evaluatedOnly);
192
- const evaluated = new _EvaluatedEntrypoint.EvaluatedEntrypoint(this.services, evaluatedOnly, this.exportsProxy, this.generation + 1, this.name, this.only, this.parents, this.dependencies);
228
+ const evaluated = new _EvaluatedEntrypoint.EvaluatedEntrypoint(this.services, evaluatedOnly, this.exportsProxy, this.generation + 1, this.name, this.only, this.parents, this.dependencies, this.invalidationDependencies, this.invalidateOnDependencyChange);
193
229
  evaluated.initialCode = this.initialCode;
194
230
  return evaluated;
195
231
  }
232
+ endProcessing() {
233
+ this.#isProcessing = false;
234
+ }
196
235
  getDependency(name) {
197
236
  return this.dependencies.get(name);
198
237
  }
238
+ getInvalidationDependency(name) {
239
+ return this.invalidationDependencies.get(name);
240
+ }
241
+ markInvalidateOnDependencyChange(filename) {
242
+ this.invalidateOnDependencyChange.add(filename);
243
+ }
199
244
  getResolveTask(name) {
200
245
  return this.resolveTasks.get(name);
201
246
  }
@@ -224,8 +269,12 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
224
269
  type: 'setTransformResult'
225
270
  });
226
271
  }
272
+ deferOnlySupersede(only) {
273
+ this.#pendingOnly = this.#pendingOnly ? (0, _Entrypoint.mergeOnly)(this.#pendingOnly, only) : [...only];
274
+ }
227
275
  supersede(newOnlyOrEntrypoint) {
228
- const newEntrypoint = newOnlyOrEntrypoint instanceof Entrypoint ? newOnlyOrEntrypoint : new Entrypoint(this.services, this.parents, this.initialCode, this.name, newOnlyOrEntrypoint, this.exports, this.evaluatedOnly, this.loadedAndParsed, this.resolveTasks, this.dependencies, this.generation + 1);
276
+ this.#pendingOnly = null;
277
+ const newEntrypoint = newOnlyOrEntrypoint instanceof Entrypoint ? newOnlyOrEntrypoint : new Entrypoint(this.services, this.parents, this.initialCode, this.name, newOnlyOrEntrypoint, this.exports, this.evaluatedOnly, this.loadedAndParsed, this.resolveTasks, this.dependencies, this.invalidationDependencies, this.invalidateOnDependencyChange, this.generation + 1);
229
278
  this.services.eventEmitter.entrypointEvent(this.seqId, {
230
279
  type: 'superseded',
231
280
  with: newEntrypoint.seqId
@@ -1 +1 @@
1
- {"version":3,"file":"Entrypoint.js","names":["_tsInvariant","require","_BaseEntrypoint","_Entrypoint","_isStaticallyEvaluatableModule","_EvaluatedEntrypoint","_AbortError","_BaseAction","_UnprocessedEntrypointError","EMPTY_FILE","hasLoop","name","parent","processed","includes","p","parents","found","Entrypoint","BaseEntrypoint","evaluated","onSupersedeHandlers","actionsCache","Map","hasWywMetadata","supersededWith","transformResultCode","constructor","services","initialCode","only","exports","evaluatedOnly","loadedAndParsed","resolveTasks","dependencies","generation","_parents$0$log","_parents$","loadAndParseFn","log","code","undefined","cache","invalidateIfChanged","evaluator","originalCode","extend","ignored","_this$supersededWith$","_this$supersededWith","transformedCode","_ref","_this$transformResult","_this$supersededWith2","createRoot","loadedCode","created","create","invariant","eventEmitter","perf","status","entrypoint","innerCreate","seqId","add","_cached$evaluatedOnly","cached","get","changed","mergedOnly","mergeOnly","isLoop","map","push","isSuperSet","supersede","newEntrypoint","ast","isStaticallyEvaluatableModule","length","addDependency","dependency","delete","source","set","addResolveTask","assertNotSuperseded","AbortError","assertTransformed","_this$supersededWith3","UnprocessedEntrypointError","createAction","actionType","data","abortSignal","_cached$abortSignal","has","aborted","newAction","BaseAction","entrypointEvent","type","actionIdx","idx","createChild","createEvaluated","EvaluatedEntrypoint","exportsProxy","getDependency","getResolveTask","onSupersede","callback","index","indexOf","splice","setTransformResult","res","_res$code","Boolean","metadata","isNull","newOnlyOrEntrypoint","with","forEach","handler"],"sources":["../../src/transform/Entrypoint.ts"],"sourcesContent":["import { invariant } from 'ts-invariant';\n\nimport type { ParentEntrypoint, ITransformFileResult } from '../types';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport { isSuperSet, mergeOnly } from './Entrypoint.helpers';\nimport { isStaticallyEvaluatableModule } from './isStaticallyEvaluatableModule';\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';\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 #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 generation = 1\n ) {\n super(\n services,\n evaluatedOnly,\n exports,\n generation,\n name,\n only,\n parents,\n dependencies\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 const changed =\n loadedCode !== undefined\n ? cache.invalidateIfChanged(name, loadedCode, undefined, 'loaded')\n : false;\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 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 ? cached.generation + 1 : 1\n );\n\n if (\n !newEntrypoint.ignored &&\n !newEntrypoint.only.includes('*') &&\n !newEntrypoint.only.includes('__wywPreval') &&\n !newEntrypoint.only.includes('side-effect')\n ) {\n const { ast } = newEntrypoint.loadedAndParsed;\n\n if (ast && isStaticallyEvaluatableModule(ast)) {\n newEntrypoint.log(\n '[entrypoint] promote `only` to \"*\" for statically evaluatable module'\n );\n newEntrypoint.only.length = 0;\n newEntrypoint.only.push('*');\n }\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 addResolveTask(\n name: string,\n dependency: Promise<IEntrypointDependency>\n ): void {\n this.resolveTasks.set(name, dependency);\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 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 );\n\n evaluated.initialCode = this.initialCode;\n\n return evaluated;\n }\n\n public getDependency(name: string): IEntrypointDependency | undefined {\n return this.dependencies.get(name);\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 supersede(newOnlyOrEntrypoint: string[] | Entrypoint): Entrypoint {\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.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":["_nodeFs","_interopRequireDefault","require","_tsInvariant","_BaseEntrypoint","_Entrypoint","_EvaluatedEntrypoint","_AbortError","_BaseAction","_UnprocessedEntrypointError","_parseRequest","e","__esModule","default","EMPTY_FILE","DEFAULT_ACTION_CONTEXT","Symbol","hasLoop","name","parent","processed","includes","p","parents","found","Entrypoint","BaseEntrypoint","evaluated","onSupersedeHandlers","actionsCache","Map","hasWywMetadata","isProcessing","pendingOnly","supersededWith","transformResultCode","constructor","services","initialCode","only","exports","evaluatedOnly","loadedAndParsed","resolveTasks","dependencies","invalidationDependencies","invalidateOnDependencyChange","Set","generation","_parents$0$log","_parents$","loadAndParseFn","log","code","undefined","cache","invalidateIfChanged","evaluator","originalCode","extend","ignored","_this$supersededWith$","_this$supersededWith","transformedCode","_ref","_this$transformResult","_this$supersededWith2","createRoot","loadedCode","created","create","invariant","eventEmitter","perf","status","entrypoint","innerCreate","seqId","add","_cached$evaluatedOnly","cached","get","changed","fs","readFileSync","stripQueryAndHash","mergedOnly","mergeOnly","isLoop","map","push","isSuperSet","deferOnlySupersede","supersede","newEntrypoint","addDependency","dependency","delete","source","set","addInvalidationDependency","addResolveTask","applyDeferredSupersede","nextEntrypoint","assertNotSuperseded","AbortError","assertTransformed","_this$supersededWith3","UnprocessedEntrypointError","beginProcessing","createAction","actionType","data","abortSignal","actionContext","_cached$abortSignal","has","contexts","aborted","newAction","BaseAction","entrypointEvent","type","actionIdx","idx","createChild","createEvaluated","EvaluatedEntrypoint","exportsProxy","endProcessing","getDependency","getInvalidationDependency","markInvalidateOnDependencyChange","filename","getResolveTask","onSupersede","callback","index","indexOf","splice","setTransformResult","res","_res$code","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":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"EvaluatedEntrypoint.js","names":["_BaseEntrypoint","require","EvaluatedEntrypoint","BaseEntrypoint","evaluated","ignored","exports"],"sources":["../../src/transform/EvaluatedEntrypoint.ts"],"sourcesContent":["import type { Debugger } from '@wyw-in-js/shared';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport type { IEntrypointDependency } from './Entrypoint.types';\n\nexport interface IEvaluatedEntrypoint {\n dependencies: Map<string, IEntrypointDependency>;\n evaluated: true;\n evaluatedOnly: string[];\n exports: Record<string | symbol, unknown>;\n generation: number;\n ignored: false;\n initialCode?: string;\n log: Debugger;\n only: string[];\n}\n\nexport class EvaluatedEntrypoint\n extends BaseEntrypoint\n implements IEvaluatedEntrypoint\n{\n public readonly evaluated = true;\n\n public readonly ignored = false;\n\n public initialCode?: string;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAeO,MAAMC,mBAAmB,SACtBC,8BAAc,CAExB;EACkBC,SAAS,GAAG,IAAI;EAEhBC,OAAO,GAAG,KAAK;AAGjC;AAACC,OAAA,CAAAJ,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"file":"EvaluatedEntrypoint.js","names":["_BaseEntrypoint","require","EvaluatedEntrypoint","BaseEntrypoint","evaluated","ignored","exports"],"sources":["../../src/transform/EvaluatedEntrypoint.ts"],"sourcesContent":["import type { Debugger } from '@wyw-in-js/shared';\n\nimport { BaseEntrypoint } from './BaseEntrypoint';\nimport type { IEntrypointDependency } from './Entrypoint.types';\n\nexport interface IEvaluatedEntrypoint {\n dependencies: Map<string, IEntrypointDependency>;\n evaluated: true;\n evaluatedOnly: string[];\n exports: Record<string | symbol, unknown>;\n generation: number;\n ignored: false;\n initialCode?: string;\n invalidationDependencies: Map<string, IEntrypointDependency>;\n invalidateOnDependencyChange: Set<string>;\n log: Debugger;\n only: string[];\n}\n\nexport class EvaluatedEntrypoint\n extends BaseEntrypoint\n implements IEvaluatedEntrypoint\n{\n public readonly evaluated = true;\n\n public readonly ignored = false;\n\n public initialCode?: string;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAiBO,MAAMC,mBAAmB,SACtBC,8BAAc,CAExB;EACkBC,SAAS,GAAG,IAAI;EAEhBC,OAAO,GAAG,KAAK;AAGjC;AAACC,OAAA,CAAAJ,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -14,12 +14,13 @@ class BaseAction {
14
14
  activeScenario = null;
15
15
  activeScenarioNextResults = [];
16
16
  handler = null;
17
- constructor(type, services, entrypoint, data, abortSignal) {
17
+ constructor(type, services, entrypoint, data, abortSignal, actionContext) {
18
18
  this.type = type;
19
19
  this.services = services;
20
20
  this.entrypoint = entrypoint;
21
21
  this.data = data;
22
22
  this.abortSignal = abortSignal;
23
+ this.actionContext = actionContext;
23
24
  actionIdx += 1;
24
25
  this.idx = actionIdx.toString(16).padStart(6, '0');
25
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAction.js","names":["require","_types","actionIdx","BaseAction","result","Pending","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","_this$abortSignal","addEventListener","_this$abortSignal2","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","exports"],"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":["require","_types","actionIdx","BaseAction","result","Pending","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","_this$abortSignal","addEventListener","_this$abortSignal2","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","exports"],"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":[]}
@@ -41,7 +41,7 @@ async function asyncActionRunner(action, actionHandlers, stack = [getActionRef(a
41
41
  return result.value;
42
42
  }
43
43
  const [type, entrypoint, data, abortSignal] = result.value;
44
- const nextAction = entrypoint.createAction(type, data, abortSignal);
44
+ const nextAction = entrypoint.createAction(type, data, abortSignal, action.actionContext);
45
45
  try {
46
46
  actionResult = await asyncActionRunner(nextAction, actionHandlers, [...stack, getActionRef(type, entrypoint)]);
47
47
  } catch (e) {
@@ -70,7 +70,7 @@ function syncActionRunner(action, actionHandlers, stack = [getActionRef(action.t
70
70
  return result.value;
71
71
  }
72
72
  const [type, entrypoint, data, abortSignal] = result.value;
73
- const nextAction = entrypoint.createAction(type, data, abortSignal);
73
+ const nextAction = entrypoint.createAction(type, data, abortSignal, action.actionContext);
74
74
  try {
75
75
  actionResult = syncActionRunner(nextAction, actionHandlers, [...stack, getActionRef(type, entrypoint)]);
76
76
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"actionRunner.js","names":["_types","require","_AbortError","getHandler","action","actionHandlers","handler","type","Error","getActionRef","entrypoint","ref","ACTION_ERROR","Symbol","isActionError","e","Array","isArray","asyncActionRunner","stack","result","Pending","log","generator","run","actionResult","_action$abortSignal","abortSignal","aborted","throw","AbortError","next","done","value","data","nextAction","createAction","syncActionRunner","_action$abortSignal2"],"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":["_types","require","_AbortError","getHandler","action","actionHandlers","handler","type","Error","getActionRef","entrypoint","ref","ACTION_ERROR","Symbol","isActionError","e","Array","isArray","asyncActionRunner","stack","result","Pending","log","generator","run","actionResult","_action$abortSignal","abortSignal","aborted","throw","AbortError","next","done","value","data","nextAction","createAction","actionContext","syncActionRunner","_action$abortSignal2"],"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":[]}