@workflow/world-testing 5.0.0-beta.5 → 5.0.0-beta.50

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 (42) hide show
  1. package/dist/.well-known/workflow/v1/__step_registrations.mjs +34960 -0
  2. package/dist/.well-known/workflow/v1/flow.mjs +104550 -64125
  3. package/dist/.well-known/workflow/v1/manifest.json +1450 -180
  4. package/dist/src/addition.mjs +2 -2
  5. package/dist/src/errors.mjs +2 -2
  6. package/dist/src/event-ids.d.mts +16 -0
  7. package/dist/src/event-ids.d.mts.map +1 -0
  8. package/dist/src/event-ids.mjs +60 -0
  9. package/dist/src/event-limit.d.mts +2 -0
  10. package/dist/src/event-limit.d.mts.map +1 -0
  11. package/dist/src/event-limit.mjs +29 -0
  12. package/dist/src/hooks.mjs +2 -2
  13. package/dist/src/idempotency.mjs +2 -2
  14. package/dist/src/index.d.mts.map +1 -1
  15. package/dist/src/index.mjs +5 -1
  16. package/dist/src/inline-batches-debug.mjs +2 -2
  17. package/dist/src/inline-execution.d.mts.map +1 -1
  18. package/dist/src/inline-execution.mjs +22 -2
  19. package/dist/src/jsonlines.mjs +1 -1
  20. package/dist/src/lineage.d.mts +8 -0
  21. package/dist/src/lineage.d.mts.map +1 -0
  22. package/dist/src/lineage.mjs +48 -0
  23. package/dist/src/null-byte.mjs +2 -2
  24. package/dist/src/server.mjs +15 -7
  25. package/dist/src/util.d.mts +26 -6
  26. package/dist/src/util.d.mts.map +1 -1
  27. package/dist/src/util.mjs +51 -3
  28. package/dist/workflows/hooks.js +1 -1
  29. package/package.json +14 -13
  30. package/dist/.well-known/workflow/v1/step.mjs +0 -26802
  31. package/dist/src/addition.mjs.map +0 -1
  32. package/dist/src/errors.mjs.map +0 -1
  33. package/dist/src/hooks.mjs.map +0 -1
  34. package/dist/src/idempotency.mjs.map +0 -1
  35. package/dist/src/index.mjs.map +0 -1
  36. package/dist/src/inline-batches-debug.mjs.map +0 -1
  37. package/dist/src/inline-execution.mjs.map +0 -1
  38. package/dist/src/jsonlines.mjs.map +0 -1
  39. package/dist/src/null-byte.mjs.map +0 -1
  40. package/dist/src/server.mjs.map +0 -1
  41. package/dist/src/util.mjs.map +0 -1
  42. package/dist/workflows/hooks.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { expect, test, vi } from 'vitest';
2
1
  import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
3
  import { createFetcher, startServer } from './util.mjs';
4
4
  export function addition(world) {
5
5
  test('runs an addition', { timeout: 30_000 }, async () => {
@@ -19,4 +19,4 @@ export function addition(world) {
19
19
  expect(output).toEqual(3);
20
20
  });
21
21
  }
22
- //# sourceMappingURL=addition.mjs.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkaXRpb24ubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkZGl0aW9uLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFhO0lBQ3BDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FDaEMsdUJBQXVCLEVBQ3ZCLFVBQVUsRUFDVixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDUCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0Q7WUFDRSxRQUFRLEVBQUUsR0FBRztZQUNiLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQ0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQTBCLENBQzdDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZGl0aW9uKHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgncnVucyBhbiBhZGRpdGlvbicsIHsgdGltZW91dDogMzBfMDAwIH0sIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICd3b3JrZmxvd3MvYWRkaXRpb24udHMnLFxuICAgICAgJ2FkZGl0aW9uJyxcbiAgICAgIFsxLCAyXVxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5ydW5JZCkudG9NYXRjaCgvXndydW5fLisvKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgZXhwZWN0KHJ1bi5vdXRwdXQpLnRvQmVJbnN0YW5jZU9mKFVpbnQ4QXJyYXkpO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgdGltZW91dDogMjVfMDAwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICBydW4ub3V0cHV0ISxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCgzKTtcbiAgfSk7XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
- import { expect, test, vi } from 'vitest';
2
1
  import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
3
  import { createFetcher, startServer } from './util.mjs';
4
4
  export function errors(world) {
5
5
  test('retriable and fatal errors', { timeout: 59_000 }, async () => {
@@ -28,4 +28,4 @@ export function errors(world) {
28
28
  expect(output.retryableResult.duration).toBeGreaterThanOrEqual(2000);
29
29
  });
30
30
  }
31
- //# sourceMappingURL=errors.mjs.map
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4RCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBc0I7Z0JBQzdDLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUNEO1lBQ0UsUUFBUSxFQUFFLEdBQUc7WUFDYixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUNGLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sMEJBQTBCLENBQzlDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBUSxDQUFDO1FBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyQixhQUFhLEVBQUUsSUFBSTtZQUNuQixlQUFlLEVBQUU7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO2dCQUM1QixhQUFhLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDaEM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBjcmVhdGVGZXRjaGVyLCBzdGFydFNlcnZlciB9IGZyb20gJy4vdXRpbC5tanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JzKHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgncmV0cmlhYmxlIGFuZCBmYXRhbCBlcnJvcnMnLCB7IHRpbWVvdXQ6IDU5XzAwMCB9LCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5pbnZva2UoXG4gICAgICAnd29ya2Zsb3dzL3JldHJpYWJsZS1hbmQtZmF0YWwudHMnLFxuICAgICAgJ3JldHJ5YWJsZUFuZEZhdGFsRXJyb3JXb3JrZmxvdycsXG4gICAgICBbXVxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5ydW5JZCkudG9NYXRjaCgvXndydW5fLisvKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgIGV4cGVjdChydW4pLnRvTWF0Y2hPYmplY3Q8UGFydGlhbDx0eXBlb2YgcnVuPj4oe1xuICAgICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgdGltZW91dDogNTBfMDAwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gKGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgcnVuLm91dHB1dCEsXG4gICAgICBydW4ucnVuSWQsXG4gICAgICB1bmRlZmluZWRcbiAgICApKSBhcyBhbnk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCh7XG4gICAgICBnb3RGYXRhbEVycm9yOiB0cnVlLFxuICAgICAgcmV0cnlhYmxlUmVzdWx0OiB7XG4gICAgICAgIGF0dGVtcHQ6IDIsXG4gICAgICAgIGR1cmF0aW9uOiBleHBlY3QuYW55KE51bWJlciksXG4gICAgICAgIHN0ZXBTdGFydGVkQXQ6IGV4cGVjdC5hbnkoRGF0ZSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChvdXRwdXQucmV0cnlhYmxlUmVzdWx0LmR1cmF0aW9uKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDIwMDApO1xuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Event ids are positions.
3
+ *
4
+ * This is the one part of the storage contract a World can get wrong while
5
+ * every other test in this suite passes. Nothing here reads an event id, so a
6
+ * World that mints ULIDs runs an addition, resumes a hook and completes a run
7
+ * exactly as it should — and then fails every replay on the deployment, with
8
+ * `Event id is not slot-numbered`, because the runtime reads a position out of
9
+ * each id it loads and cannot proceed without one.
10
+ *
11
+ * Asserting it here is the difference between a conformance failure a World
12
+ * author can act on and a production failure nobody can explain. See the
13
+ * Event ID Allocation section of the building-a-world guide.
14
+ */
15
+ export declare function eventIds(world: string): void;
16
+ //# sourceMappingURL=event-ids.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-ids.d.mts","sourceRoot":"","sources":["../../src/event-ids.mts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,QAyDrC"}
@@ -0,0 +1,60 @@
1
+ import { eventIdToSlot, FIRST_EVENT_SLOT, mintedSpecVersion, SPEC_VERSION_MAX_SUPPORTED, slotToEventId, } from '@workflow/world';
2
+ import { expect, test, vi } from 'vitest';
3
+ import { createFetcher, startServer } from './util.mjs';
4
+ /**
5
+ * Event ids are positions.
6
+ *
7
+ * This is the one part of the storage contract a World can get wrong while
8
+ * every other test in this suite passes. Nothing here reads an event id, so a
9
+ * World that mints ULIDs runs an addition, resumes a hook and completes a run
10
+ * exactly as it should — and then fails every replay on the deployment, with
11
+ * `Event id is not slot-numbered`, because the runtime reads a position out of
12
+ * each id it loads and cannot proceed without one.
13
+ *
14
+ * Asserting it here is the difference between a conformance failure a World
15
+ * author can act on and a production failure nobody can explain. See the
16
+ * Event ID Allocation section of the building-a-world guide.
17
+ */
18
+ export function eventIds(world) {
19
+ test('numbers events by position', { timeout: 30_000 }, async () => {
20
+ const server = await startServer({ world }).then(createFetcher);
21
+ const result = await server.invoke('workflows/addition.ts', 'addition', [1, 2]);
22
+ await vi.waitFor(async () => {
23
+ expect((await server.getRun(result.runId)).status).toBe('completed');
24
+ }, { interval: 200, timeout: 25_000 });
25
+ // The version the World declared, stamped on the run it created. Slot ids
26
+ // and this number have to agree: the World allocates the positions, but the
27
+ // number is what a backend reads to decide which scheme a run uses, and
28
+ // what the runtime checks before it replays anything. A World that numbers
29
+ // its events correctly while declaring an older version is rejected at
30
+ // startup, which reads as a broken install rather than as a stale
31
+ // constant.
32
+ //
33
+ // The floor is `mintedSpecVersion()`, not `SPEC_VERSION_CURRENT`: what a
34
+ // World is told to stamp is that function (see the building-a-world
35
+ // guide), and the two differ whenever a version is readable before it is
36
+ // mintable. Pinning the constant here would fail every World the moment a
37
+ // spec bump raises the ceiling ahead of the default, which is the normal
38
+ // mid-bump state rather than a conformance defect.
39
+ const run = await server.getRun(result.runId);
40
+ expect(run.specVersion).toBeGreaterThanOrEqual(mintedSpecVersion());
41
+ expect(run.specVersion).toBeLessThanOrEqual(SPEC_VERSION_MAX_SUPPORTED);
42
+ const events = await server.getEvents(result.runId);
43
+ expect(events.length).toBeGreaterThan(0);
44
+ // Every id decodes to a slot. `eventIdToSlot` answers null for anything
45
+ // else, which is what `requireEventSlot` turns into a failed run.
46
+ const slots = events.map((event) => ({
47
+ eventId: event.eventId,
48
+ slot: eventIdToSlot(event.eventId),
49
+ }));
50
+ expect(slots.filter((entry) => entry.slot === null)).toEqual([]);
51
+ // Dense from 1, in the order the World returns them. Density is what lets
52
+ // a reader tell a complete log from a truncated one by its length, and
53
+ // what makes the writer's event count a statement of its position.
54
+ expect(slots.map((entry) => entry.slot)).toEqual(slots.map((_, index) => FIRST_EVENT_SLOT + index));
55
+ // The canonical format, not merely something that decodes: a World that
56
+ // pads to a different width sorts its own log wrongly past 10 events.
57
+ expect(slots.map((entry) => entry.eventId)).toEqual(slots.map((entry) => slotToEventId(entry.slot)));
58
+ });
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtaWRzLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldmVudC1pZHMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFDMUIsYUFBYSxHQUNkLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXhEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWE7SUFDcEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyx1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNQLENBQUM7UUFDRixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQ2QsS0FBSyxJQUFJLEVBQUU7WUFDVCxNQUFNLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUNuQyxDQUFDO1FBRUYsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLHVFQUF1RTtRQUN2RSxrRUFBa0U7UUFDbEUsWUFBWTtRQUNaLEVBQUU7UUFDRix5RUFBeUU7UUFDekUsb0VBQW9FO1FBQ3BFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUseUVBQXlFO1FBQ3pFLG1EQUFtRDtRQUNuRCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUV4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpDLHdFQUF3RTtRQUN4RSxrRUFBa0U7UUFDbEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakUsMEVBQTBFO1FBQzFFLHVFQUF1RTtRQUN2RSxtRUFBbUU7UUFDbkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDOUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUNsRCxDQUFDO1FBRUYsd0VBQXdFO1FBQ3hFLHNFQUFzRTtRQUN0RSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNqRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQWMsQ0FBQyxDQUFDLENBQzFELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBldmVudElkVG9TbG90LFxuICBGSVJTVF9FVkVOVF9TTE9ULFxuICBtaW50ZWRTcGVjVmVyc2lvbixcbiAgU1BFQ19WRVJTSU9OX01BWF9TVVBQT1JURUQsXG4gIHNsb3RUb0V2ZW50SWQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBleHBlY3QsIHRlc3QsIHZpIH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IGNyZWF0ZUZldGNoZXIsIHN0YXJ0U2VydmVyIH0gZnJvbSAnLi91dGlsLm1qcyc7XG5cbi8qKlxuICogRXZlbnQgaWRzIGFyZSBwb3NpdGlvbnMuXG4gKlxuICogVGhpcyBpcyB0aGUgb25lIHBhcnQgb2YgdGhlIHN0b3JhZ2UgY29udHJhY3QgYSBXb3JsZCBjYW4gZ2V0IHdyb25nIHdoaWxlXG4gKiBldmVyeSBvdGhlciB0ZXN0IGluIHRoaXMgc3VpdGUgcGFzc2VzLiBOb3RoaW5nIGhlcmUgcmVhZHMgYW4gZXZlbnQgaWQsIHNvIGFcbiAqIFdvcmxkIHRoYXQgbWludHMgVUxJRHMgcnVucyBhbiBhZGRpdGlvbiwgcmVzdW1lcyBhIGhvb2sgYW5kIGNvbXBsZXRlcyBhIHJ1blxuICogZXhhY3RseSBhcyBpdCBzaG91bGQg4oCUIGFuZCB0aGVuIGZhaWxzIGV2ZXJ5IHJlcGxheSBvbiB0aGUgZGVwbG95bWVudCwgd2l0aFxuICogYEV2ZW50IGlkIGlzIG5vdCBzbG90LW51bWJlcmVkYCwgYmVjYXVzZSB0aGUgcnVudGltZSByZWFkcyBhIHBvc2l0aW9uIG91dCBvZlxuICogZWFjaCBpZCBpdCBsb2FkcyBhbmQgY2Fubm90IHByb2NlZWQgd2l0aG91dCBvbmUuXG4gKlxuICogQXNzZXJ0aW5nIGl0IGhlcmUgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvbmZvcm1hbmNlIGZhaWx1cmUgYSBXb3JsZFxuICogYXV0aG9yIGNhbiBhY3Qgb24gYW5kIGEgcHJvZHVjdGlvbiBmYWlsdXJlIG5vYm9keSBjYW4gZXhwbGFpbi4gU2VlIHRoZVxuICogRXZlbnQgSUQgQWxsb2NhdGlvbiBzZWN0aW9uIG9mIHRoZSBidWlsZGluZy1hLXdvcmxkIGd1aWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRJZHMod29ybGQ6IHN0cmluZykge1xuICB0ZXN0KCdudW1iZXJzIGV2ZW50cyBieSBwb3NpdGlvbicsIHsgdGltZW91dDogMzBfMDAwIH0sIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICd3b3JrZmxvd3MvYWRkaXRpb24udHMnLFxuICAgICAgJ2FkZGl0aW9uJyxcbiAgICAgIFsxLCAyXVxuICAgICk7XG4gICAgYXdhaXQgdmkud2FpdEZvcihcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgZXhwZWN0KChhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCkpLnN0YXR1cykudG9CZSgnY29tcGxldGVkJyk7XG4gICAgICB9LFxuICAgICAgeyBpbnRlcnZhbDogMjAwLCB0aW1lb3V0OiAyNV8wMDAgfVxuICAgICk7XG5cbiAgICAvLyBUaGUgdmVyc2lvbiB0aGUgV29ybGQgZGVjbGFyZWQsIHN0YW1wZWQgb24gdGhlIHJ1biBpdCBjcmVhdGVkLiBTbG90IGlkc1xuICAgIC8vIGFuZCB0aGlzIG51bWJlciBoYXZlIHRvIGFncmVlOiB0aGUgV29ybGQgYWxsb2NhdGVzIHRoZSBwb3NpdGlvbnMsIGJ1dCB0aGVcbiAgICAvLyBudW1iZXIgaXMgd2hhdCBhIGJhY2tlbmQgcmVhZHMgdG8gZGVjaWRlIHdoaWNoIHNjaGVtZSBhIHJ1biB1c2VzLCBhbmRcbiAgICAvLyB3aGF0IHRoZSBydW50aW1lIGNoZWNrcyBiZWZvcmUgaXQgcmVwbGF5cyBhbnl0aGluZy4gQSBXb3JsZCB0aGF0IG51bWJlcnNcbiAgICAvLyBpdHMgZXZlbnRzIGNvcnJlY3RseSB3aGlsZSBkZWNsYXJpbmcgYW4gb2xkZXIgdmVyc2lvbiBpcyByZWplY3RlZCBhdFxuICAgIC8vIHN0YXJ0dXAsIHdoaWNoIHJlYWRzIGFzIGEgYnJva2VuIGluc3RhbGwgcmF0aGVyIHRoYW4gYXMgYSBzdGFsZVxuICAgIC8vIGNvbnN0YW50LlxuICAgIC8vXG4gICAgLy8gVGhlIGZsb29yIGlzIGBtaW50ZWRTcGVjVmVyc2lvbigpYCwgbm90IGBTUEVDX1ZFUlNJT05fQ1VSUkVOVGA6IHdoYXQgYVxuICAgIC8vIFdvcmxkIGlzIHRvbGQgdG8gc3RhbXAgaXMgdGhhdCBmdW5jdGlvbiAoc2VlIHRoZSBidWlsZGluZy1hLXdvcmxkXG4gICAgLy8gZ3VpZGUpLCBhbmQgdGhlIHR3byBkaWZmZXIgd2hlbmV2ZXIgYSB2ZXJzaW9uIGlzIHJlYWRhYmxlIGJlZm9yZSBpdCBpc1xuICAgIC8vIG1pbnRhYmxlLiBQaW5uaW5nIHRoZSBjb25zdGFudCBoZXJlIHdvdWxkIGZhaWwgZXZlcnkgV29ybGQgdGhlIG1vbWVudCBhXG4gICAgLy8gc3BlYyBidW1wIHJhaXNlcyB0aGUgY2VpbGluZyBhaGVhZCBvZiB0aGUgZGVmYXVsdCwgd2hpY2ggaXMgdGhlIG5vcm1hbFxuICAgIC8vIG1pZC1idW1wIHN0YXRlIHJhdGhlciB0aGFuIGEgY29uZm9ybWFuY2UgZGVmZWN0LlxuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHNlcnZlci5nZXRSdW4ocmVzdWx0LnJ1bklkKTtcbiAgICBleHBlY3QocnVuLnNwZWNWZXJzaW9uKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKG1pbnRlZFNwZWNWZXJzaW9uKCkpO1xuICAgIGV4cGVjdChydW4uc3BlY1ZlcnNpb24pLnRvQmVMZXNzVGhhbk9yRXF1YWwoU1BFQ19WRVJTSU9OX01BWF9TVVBQT1JURUQpO1xuXG4gICAgY29uc3QgZXZlbnRzID0gYXdhaXQgc2VydmVyLmdldEV2ZW50cyhyZXN1bHQucnVuSWQpO1xuICAgIGV4cGVjdChldmVudHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG5cbiAgICAvLyBFdmVyeSBpZCBkZWNvZGVzIHRvIGEgc2xvdC4gYGV2ZW50SWRUb1Nsb3RgIGFuc3dlcnMgbnVsbCBmb3IgYW55dGhpbmdcbiAgICAvLyBlbHNlLCB3aGljaCBpcyB3aGF0IGByZXF1aXJlRXZlbnRTbG90YCB0dXJucyBpbnRvIGEgZmFpbGVkIHJ1bi5cbiAgICBjb25zdCBzbG90cyA9IGV2ZW50cy5tYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgIHNsb3Q6IGV2ZW50SWRUb1Nsb3QoZXZlbnQuZXZlbnRJZCksXG4gICAgfSkpO1xuICAgIGV4cGVjdChzbG90cy5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5zbG90ID09PSBudWxsKSkudG9FcXVhbChbXSk7XG5cbiAgICAvLyBEZW5zZSBmcm9tIDEsIGluIHRoZSBvcmRlciB0aGUgV29ybGQgcmV0dXJucyB0aGVtLiBEZW5zaXR5IGlzIHdoYXQgbGV0c1xuICAgIC8vIGEgcmVhZGVyIHRlbGwgYSBjb21wbGV0ZSBsb2cgZnJvbSBhIHRydW5jYXRlZCBvbmUgYnkgaXRzIGxlbmd0aCwgYW5kXG4gICAgLy8gd2hhdCBtYWtlcyB0aGUgd3JpdGVyJ3MgZXZlbnQgY291bnQgYSBzdGF0ZW1lbnQgb2YgaXRzIHBvc2l0aW9uLlxuICAgIGV4cGVjdChzbG90cy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5zbG90KSkudG9FcXVhbChcbiAgICAgIHNsb3RzLm1hcCgoXywgaW5kZXgpID0+IEZJUlNUX0VWRU5UX1NMT1QgKyBpbmRleClcbiAgICApO1xuXG4gICAgLy8gVGhlIGNhbm9uaWNhbCBmb3JtYXQsIG5vdCBtZXJlbHkgc29tZXRoaW5nIHRoYXQgZGVjb2RlczogYSBXb3JsZCB0aGF0XG4gICAgLy8gcGFkcyB0byBhIGRpZmZlcmVudCB3aWR0aCBzb3J0cyBpdHMgb3duIGxvZyB3cm9uZ2x5IHBhc3QgMTAgZXZlbnRzLlxuICAgIGV4cGVjdChzbG90cy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5ldmVudElkKSkudG9FcXVhbChcbiAgICAgIHNsb3RzLm1hcCgoZW50cnkpID0+IHNsb3RUb0V2ZW50SWQoZW50cnkuc2xvdCBhcyBudW1iZXIpKVxuICAgICk7XG4gIH0pO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export declare function eventLimit(world: string): void;
2
+ //# sourceMappingURL=event-limit.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-limit.d.mts","sourceRoot":"","sources":["../../src/event-limit.mts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,QAsCvC"}
@@ -0,0 +1,29 @@
1
+ import { expect, test, vi } from 'vitest';
2
+ import { createFetcher, startServer } from './util.mjs';
3
+ export function eventLimit(world) {
4
+ // Cover enforcement end-to-end under both configs (turbo is the production
5
+ // default). Against the local world these don't isolate the turbo run_started
6
+ // threading — a non-turbo continuation backfills the ceiling regardless — but
7
+ // they guard that a runaway run fails under each.
8
+ for (const turbo of ['1', '0']) {
9
+ test(`fails a runaway run at the server-supplied event limit (turbo=${turbo})`, { timeout: 59_000 }, async () => {
10
+ // Low ceiling to trip it fast.
11
+ const server = await startServer({
12
+ world,
13
+ env: { WORKFLOW_MAX_EVENTS: '10', WORKFLOW_TURBO: turbo },
14
+ }).then(createFetcher);
15
+ const result = await server.invoke('workflows/event-limit.ts', 'runawayWorkflow', []);
16
+ expect(result.runId).toMatch(/^wrun_.+/);
17
+ const run = await vi.waitFor(async () => {
18
+ const run = await server.getRun(result.runId);
19
+ expect(run.status).toBe('failed');
20
+ return run;
21
+ }, {
22
+ interval: 200,
23
+ timeout: 50_000,
24
+ });
25
+ expect(run.errorCode).toBe('MAX_EVENTS_EXCEEDED');
26
+ });
27
+ }
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGltaXQubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50LWxpbWl0Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLGtEQUFrRDtJQUNsRCxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBVSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUNGLGlFQUFpRSxLQUFLLEdBQUcsRUFDekUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ25CLEtBQUssSUFBSSxFQUFFO1lBQ1QsK0JBQStCO1lBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDO2dCQUMvQixLQUFLO2dCQUNMLEdBQUcsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFO2FBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQywwQkFBMEIsRUFDMUIsaUJBQWlCLEVBQ2pCLEVBQUUsQ0FDSCxDQUFDO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtnQkFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDLEVBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsT0FBTyxFQUFFLE1BQU07YUFDaEIsQ0FDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBjcmVhdGVGZXRjaGVyLCBzdGFydFNlcnZlciB9IGZyb20gJy4vdXRpbC5tanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRMaW1pdCh3b3JsZDogc3RyaW5nKSB7XG4gIC8vIENvdmVyIGVuZm9yY2VtZW50IGVuZC10by1lbmQgdW5kZXIgYm90aCBjb25maWdzICh0dXJibyBpcyB0aGUgcHJvZHVjdGlvblxuICAvLyBkZWZhdWx0KS4gQWdhaW5zdCB0aGUgbG9jYWwgd29ybGQgdGhlc2UgZG9uJ3QgaXNvbGF0ZSB0aGUgdHVyYm8gcnVuX3N0YXJ0ZWRcbiAgLy8gdGhyZWFkaW5nIOKAlCBhIG5vbi10dXJibyBjb250aW51YXRpb24gYmFja2ZpbGxzIHRoZSBjZWlsaW5nIHJlZ2FyZGxlc3Mg4oCUIGJ1dFxuICAvLyB0aGV5IGd1YXJkIHRoYXQgYSBydW5hd2F5IHJ1biBmYWlscyB1bmRlciBlYWNoLlxuICBmb3IgKGNvbnN0IHR1cmJvIG9mIFsnMScsICcwJ10gYXMgY29uc3QpIHtcbiAgICB0ZXN0KFxuICAgICAgYGZhaWxzIGEgcnVuYXdheSBydW4gYXQgdGhlIHNlcnZlci1zdXBwbGllZCBldmVudCBsaW1pdCAodHVyYm89JHt0dXJib30pYCxcbiAgICAgIHsgdGltZW91dDogNTlfMDAwIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIExvdyBjZWlsaW5nIHRvIHRyaXAgaXQgZmFzdC5cbiAgICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoe1xuICAgICAgICAgIHdvcmxkLFxuICAgICAgICAgIGVudjogeyBXT1JLRkxPV19NQVhfRVZFTlRTOiAnMTAnLCBXT1JLRkxPV19UVVJCTzogdHVyYm8gfSxcbiAgICAgICAgfSkudGhlbihjcmVhdGVGZXRjaGVyKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgICAgICd3b3JrZmxvd3MvZXZlbnQtbGltaXQudHMnLFxuICAgICAgICAgICdydW5hd2F5V29ya2Zsb3cnLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucnVuSWQpLnRvTWF0Y2goL153cnVuXy4rLyk7XG5cbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgdmkud2FpdEZvcihcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgICAgICBleHBlY3QocnVuLnN0YXR1cykudG9CZSgnZmFpbGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDUwXzAwMCxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdChydW4uZXJyb3JDb2RlKS50b0JlKCdNQVhfRVZFTlRTX0VYQ0VFREVEJyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
- import { expect, test, vi } from 'vitest';
2
1
  import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
3
  import { jsonlines } from './jsonlines.mjs';
4
4
  import { createFetcher, startServer } from './util.mjs';
5
5
  export function hooks(world) {
@@ -71,4 +71,4 @@ export function hooks(world) {
71
71
  });
72
72
  });
73
73
  }
74
- //# sourceMappingURL=hooks.mjs.map
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXhELE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBYTtJQUNqQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUNwQixDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBUSxDQUFDO1FBQ2xELE1BQU0saUJBQWlCLEdBQUcsRUFBZSxDQUFDO1FBRTFDLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDVixJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLEVBQUUsS0FBSyxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUNqQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3RCLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLEdBQUcsRUFBRSxLQUFLLEtBQUssYUFBYSxFQUFFLENBQUM7b0JBQ2pDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3BDLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDZCxtQ0FBbUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFFMUIsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNWLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBYyxLQUFLLEVBQUU7Z0JBQzFDLElBQUksRUFBRSxlQUFlO2FBQ3RCLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBYyxLQUFLLEVBQUU7Z0JBQzFDLElBQUksRUFBRSxnQkFBZ0I7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFjLEtBQUssRUFBRTtnQkFDMUMsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVMLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FDMUIsS0FBSyxJQUFJLEVBQUU7WUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQXNCO2dCQUM3QyxNQUFNLEVBQUUsV0FBVzthQUNwQixDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRDtZQUNFLFFBQVEsRUFBRSxHQUFHO1lBQ2IsT0FBTyxFQUFFLE1BQU07U0FDaEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSwwQkFBMEIsQ0FDN0MsR0FBRyxDQUFDLE1BQU8sRUFDWCxHQUFHLENBQUMsS0FBSyxFQUNULFNBQVMsQ0FDVixDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRTtpQkFDekI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFO2lCQUN6QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZUFBZTtvQkFDckIsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFO29CQUN4QixJQUFJLEVBQUUsSUFBSTtpQkFDWDthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHR5cGUgeyBIb29rIH0gZnJvbSAnLi4vd29ya2Zsb3dzL2hvb2tzLnRzJztcbmltcG9ydCB7IGpzb25saW5lcyB9IGZyb20gJy4vanNvbmxpbmVzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVGZXRjaGVyLCBzdGFydFNlcnZlciB9IGZyb20gJy4vdXRpbC5tanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaG9va3Mod29ybGQ6IHN0cmluZykge1xuICB0ZXN0KCdob29rcycsIHsgdGltZW91dDogNjBfMDAwIH0sIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgY29uc3QgdG9rZW4gPSBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KTtcbiAgICBjb25zdCBjdXN0b21EYXRhID0gYG15LWN1c3RvbS1kYXRhLSR7dG9rZW59YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgJ3dvcmtmbG93cy9ob29rcy50cycsXG4gICAgICAnY29sbGVjdFdpdGhIb29rJyxcbiAgICAgIFt0b2tlbiwgY3VzdG9tRGF0YV1cbiAgICApO1xuICAgIGV4cGVjdChyZXN1bHQucnVuSWQpLnRvTWF0Y2goL153cnVuXy4rLyk7XG4gICAgY29uc3QgcmVhZGFibGUgPSBhd2FpdCBzZXJ2ZXIuZ2V0UmVhZGFibGUocmVzdWx0LnJ1bklkKTtcbiAgICBjb25zdCBldmVudHMgPSBqc29ubGluZXMocmVhZGFibGUpO1xuICAgIGNvbnN0IGhvb2tDcmVhdGVkID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPHZvaWQ+KCk7XG4gICAgY29uc3QgaG9va1Jlc3VtZWRFdmVudHMgPSBbXSBhcyB1bmtub3duW107XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBvYmogb2YgZXZlbnRzKSB7XG4gICAgICAgIGlmIChvYmo/LmV2ZW50ID09PSAnaG9va0NyZWF0ZWQnKSB7XG4gICAgICAgICAgaG9va0NyZWF0ZWQucmVzb2x2ZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iaj8uZXZlbnQgPT09ICdob29rUmVzdW1lZCcpIHtcbiAgICAgICAgICBob29rUmVzdW1lZEV2ZW50cy5wdXNoKG9iai5wYXlsb2FkKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCd1bmhhbmRsZWQgZXZlbnQnLCBvYmopO1xuICAgICAgfVxuICAgIH0pKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgLy8gaWdub3JlIGVycm9ycyBmb3IgcmVhZGluZyBzdHJlYW1cbiAgICB9KTtcblxuICAgIGF3YWl0IGhvb2tDcmVhdGVkLnByb21pc2U7XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmVyLnJlc3VtZUhvb2s8dHlwZW9mIEhvb2s+KHRva2VuLCB7XG4gICAgICAgIGRhdGE6ICdmaXJzdCBwYXlsb2FkJyxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgc2VydmVyLnJlc3VtZUhvb2s8dHlwZW9mIEhvb2s+KHRva2VuLCB7XG4gICAgICAgIGRhdGE6ICdzZWNvbmQgcGF5bG9hZCcsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHNlcnZlci5yZXN1bWVIb29rPHR5cGVvZiBIb29rPih0b2tlbiwge1xuICAgICAgICBkYXRhOiAndGhpcmQgcGF5bG9hZCcsXG4gICAgICAgIGRvbmU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgcnVuID0gYXdhaXQgdmkud2FpdEZvcihcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICBleHBlY3QocnVuKS50b01hdGNoT2JqZWN0PFBhcnRpYWw8dHlwZW9mIHJ1bj4+KHtcbiAgICAgICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGludGVydmFsOiAyMDAsXG4gICAgICAgIHRpbWVvdXQ6IDU5XzAwMCxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICBydW4ub3V0cHV0ISxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCh7XG4gICAgICBjb2xsZWN0ZWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6ICdmaXJzdCBwYXlsb2FkJyxcbiAgICAgICAgICBtZXRhZGF0YTogeyBjdXN0b21EYXRhIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiAnc2Vjb25kIHBheWxvYWQnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IGN1c3RvbURhdGEgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6ICd0aGlyZCBwYXlsb2FkJyxcbiAgICAgICAgICBtZXRhZGF0YTogeyBjdXN0b21EYXRhIH0sXG4gICAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH0pO1xufVxuIl19
@@ -1,5 +1,5 @@
1
- import { expect, test, vi } from 'vitest';
2
1
  import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
3
  import { createFetcher, startServer } from './util.mjs';
4
4
  export function idempotency(world) {
5
5
  test('idempotency', { timeout: 60_000 }, async () => {
@@ -22,4 +22,4 @@ export function idempotency(world) {
22
22
  });
23
23
  });
24
24
  }
25
- //# sourceMappingURL=idempotency.mjs.map
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3kubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkZW1wb3RlbmN5Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFhO0lBQ3ZDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBc0I7Z0JBQzdDLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUNEO1lBQ0UsUUFBUSxFQUFFLEdBQUc7WUFDYixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLDBCQUEwQixDQUM3QyxHQUFHLENBQUMsTUFBTyxFQUNYLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsU0FBUyxDQUNWLENBQUM7UUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW1wb3RlbmN5KHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgnaWRlbXBvdGVuY3knLCB7IHRpbWVvdXQ6IDYwXzAwMCB9LCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5pbnZva2UoJ3dvcmtmbG93cy9ub29wLnRzJywgJ2Jyb2tlbldmJywgWzEsIDJdKTtcbiAgICBleHBlY3QocmVzdWx0LnJ1bklkKS50b01hdGNoKC9ed3J1bl8uKy8pO1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHZpLndhaXRGb3IoXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHNlcnZlci5nZXRSdW4ocmVzdWx0LnJ1bklkKTtcbiAgICAgICAgZXhwZWN0KHJ1bikudG9NYXRjaE9iamVjdDxQYXJ0aWFsPHR5cGVvZiBydW4+Pih7XG4gICAgICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbnRlcnZhbDogMjAwLFxuICAgICAgICB0aW1lb3V0OiA1OV8wMDAsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgcnVuLm91dHB1dCEsXG4gICAgICBydW4ucnVuSWQsXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCh7XG4gICAgICBudW1iZXJzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMCB9LCAoKSA9PiBleHBlY3QuYW55KE51bWJlcikpLFxuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/index.mts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,QAO9C"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/index.mts"],"names":[],"mappings":"AASA,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,QAS9C"}
@@ -1,15 +1,19 @@
1
1
  import { addition } from './addition.mjs';
2
2
  import { errors } from './errors.mjs';
3
+ import { eventIds } from './event-ids.mjs';
3
4
  import { hooks } from './hooks.mjs';
4
5
  import { idempotency } from './idempotency.mjs';
5
6
  import { inlineExecution } from './inline-execution.mjs';
7
+ import { lineage } from './lineage.mjs';
6
8
  import { nullByte } from './null-byte.mjs';
7
9
  export function createTestSuite(pkgName) {
8
10
  addition(pkgName);
11
+ eventIds(pkgName);
9
12
  idempotency(pkgName);
10
13
  hooks(pkgName);
11
14
  nullByte(pkgName);
12
15
  errors(pkgName);
13
16
  inlineExecution(pkgName);
17
+ lineage(pkgName);
14
18
  }
15
- //# sourceMappingURL=index.mjs.map
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZGV4Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBZTtJQUM3QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDZixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hCLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZGl0aW9uIH0gZnJvbSAnLi9hZGRpdGlvbi5tanMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnLi9lcnJvcnMubWpzJztcbmltcG9ydCB7IGV2ZW50SWRzIH0gZnJvbSAnLi9ldmVudC1pZHMubWpzJztcbmltcG9ydCB7IGhvb2tzIH0gZnJvbSAnLi9ob29rcy5tanMnO1xuaW1wb3J0IHsgaWRlbXBvdGVuY3kgfSBmcm9tICcuL2lkZW1wb3RlbmN5Lm1qcyc7XG5pbXBvcnQgeyBpbmxpbmVFeGVjdXRpb24gfSBmcm9tICcuL2lubGluZS1leGVjdXRpb24ubWpzJztcbmltcG9ydCB7IGxpbmVhZ2UgfSBmcm9tICcuL2xpbmVhZ2UubWpzJztcbmltcG9ydCB7IG51bGxCeXRlIH0gZnJvbSAnLi9udWxsLWJ5dGUubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRlc3RTdWl0ZShwa2dOYW1lOiBzdHJpbmcpIHtcbiAgYWRkaXRpb24ocGtnTmFtZSk7XG4gIGV2ZW50SWRzKHBrZ05hbWUpO1xuICBpZGVtcG90ZW5jeShwa2dOYW1lKTtcbiAgaG9va3MocGtnTmFtZSk7XG4gIG51bGxCeXRlKHBrZ05hbWUpO1xuICBlcnJvcnMocGtnTmFtZSk7XG4gIGlubGluZUV4ZWN1dGlvbihwa2dOYW1lKTtcbiAgbGluZWFnZShwa2dOYW1lKTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
- import { expect, test, vi } from 'vitest';
2
1
  import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
3
  import { createFetcher, startServer } from './util.mjs';
4
4
  /**
5
5
  * Instrumented test: runs `threeBatchesOfFiveWorkflow` with
@@ -205,4 +205,4 @@ function matchCount(logs, pattern, runId) {
205
205
  }
206
206
  return n;
207
207
  }
208
- //# sourceMappingURL=inline-batches-debug.mjs.map
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWJhdGNoZXMtZGVidWcubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lubGluZS1iYXRjaGVzLWRlYnVnLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWE7SUFDOUMsSUFBSSxDQUNGLG1FQUFtRSxFQUNuRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDbkIsS0FBSyxJQUFJLEVBQUU7UUFDVCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQztZQUMvQixLQUFLO1lBQ0wsR0FBRyxFQUFFO2dCQUNILEtBQUssRUFBRSxvQkFBb0I7YUFDNUI7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQywrQkFBK0IsRUFDL0IsNEJBQTRCLEVBQzVCLEVBQUUsQ0FDSCxDQUFDO1FBRUYsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0QsRUFBRSxRQUFR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QUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsU0FBUztRQUN4QyxDQUFDO1FBQ0QsQ0FBQyxFQUFFLENBQUM7SUFDTixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuLyoqXG4gKiBJbnN0cnVtZW50ZWQgdGVzdDogcnVucyBgdGhyZWVCYXRjaGVzT2ZGaXZlV29ya2Zsb3dgIHdpdGhcbiAqIERFQlVHPXdvcmtmbG93OnJ1bnRpbWU6KiBhbmQgcHJpbnRzIGEgc3VtbWFyeSBvZiBWMiBoYW5kbGVyIGJlaGF2aW9yOlxuICogICAtIHRvdGFsIGZsb3cgaW52b2NhdGlvbnNcbiAqICAgLSBwZXItaW52b2NhdGlvbiByZXBsYXkgaXRlcmF0aW9uc1xuICogICAtIGV2ZW50IGxvYWRzIChmdWxsIHZzIGluY3JlbWVudGFsKSBhbmQgc2l6ZXNcbiAqICAgLSByZWR1bmRhbnQvc2tpcHBlZCBzdGVwIGV4ZWN1dGlvbnNcbiAqICAgLSBjb25jdXJyZW50IFwiYWxsIHBhcmFsbGVsIHN0ZXBzIGRvbmVcIiByZXBsYXkgcmFjZXNcbiAqICAgLSB1bmNvbnN1bWVkLWV2ZW50IHNraXBzXG4gKlxuICogTm90IHBhcnQgb2YgdGhlIGRlZmF1bHQgc3VpdGU7IHJ1biB3aXRoOlxuICogICBwbnBtIHZpdGVzdCBydW4gcGFja2FnZXMvd29ybGQtdGVzdGluZy90ZXN0L2lubGluZS1iYXRjaGVzLWRlYnVnLnRlc3QudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlubGluZUJhdGNoZXNEZWJ1Zyh3b3JsZDogc3RyaW5nKSB7XG4gIHRlc3QoXG4gICAgJ3RocmVlIGJhdGNoZXMgb2YgZml2ZSBwYXJhbGxlbCBzdGVwcyDigJQgcmVwb3J0IFYyIGhhbmRsZXIgYmVoYXZpb3InLFxuICAgIHsgdGltZW91dDogNjBfMDAwIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoe1xuICAgICAgICB3b3JsZCxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgREVCVUc6ICd3b3JrZmxvdzpydW50aW1lOionLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVGZXRjaGVyKHNlcnZlcik7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbnZva2UoXG4gICAgICAgICd3b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi50cycsXG4gICAgICAgICd0aHJlZUJhdGNoZXNPZkZpdmVXb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgY2xpZW50LmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDU5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgLy8gRXhwZWN0ZWQgb3V0cHV0OiAzIGJhdGNoZXMgw5cgWzExLCAyMSwgMzEsIDQxLCA1MV0gfCBbMTIsIDIyLCAuLi5dIHwgLi4uXG4gICAgICBleHBlY3Qob3V0cHV0KS50b0VxdWFsKFtcbiAgICAgICAgMTEsIDIxLCAzMSwgNDEsIDUxLCAxMiwgMjIsIDMyLCA0MiwgNTIsIDEzLCAyMywgMzMsIDQzLCA1MyxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBmbG93SW52b2NhdGlvbnMgPSBhd2FpdCBjbGllbnQuZ2V0Rmxvd0ludm9jYXRpb25Db3VudChyZXN1bHQucnVuSWQpO1xuXG4gICAgICAvLyBXYWl0IGEgc2hvcnQgbW9tZW50IHRvIGZsdXNoIGxhdGUgbG9nIGxpbmVzXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MDApKTtcbiAgICAgIGNvbnN0IGxvZ3MgPSBzZXJ2ZXIuZ2V0T3V0cHV0KCk7XG5cbiAgICAgIC8vIC0tLSBQYXJzZSBsb2cgbGluZXMgLS0tXG5cbiAgICAgIC8vIDEpIFJlcGxheSBpdGVyYXRpb25zICsgdGhlIGBldmVudENvdW50YCBwYXNzZWQgaW50byBlYWNoIHJlcGxheS5cbiAgICAgIC8vIFRoZSBydW50aW1lIGxvZ3M6IFwiU3RhcnRpbmcgd29ya2Zsb3cgcmVwbGF5XCIgd2l0aCBgZXZlbnRDb3VudDogTmAuXG4gICAgICBjb25zdCByZXBsYXlFdmVudENvdW50czogbnVtYmVyW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsb2dzLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICBpZiAoIWxpbmUuaW5jbHVkZXMocmVzdWx0LnJ1bklkKSkgY29udGludWU7XG4gICAgICAgIGlmICghbGluZS5pbmNsdWRlcygnU3RhcnRpbmcgd29ya2Zsb3cgcmVwbGF5JykpIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gZXZlbnRDb3VudCBpcyBvZnRlbiBvbiB0aGUgbmV4dCBsaW5lIGluIGEgbXVsdGktbGluZSBvYmplY3QgbGl0ZXJhbFxuICAgICAgLy8gKGNvbnNvbGUuZGVidWcgcHJpbnRzIHRoZSBzZWNvbmQgYXJndW1lbnQgd2l0aCB1dGlsLmluc3BlY3QpLiBQdWxsIGFsbFxuICAgICAgLy8gZXZlbnRDb3VudCBvY2N1cnJlbmNlcyB0aGF0IGFyZSB3aXRoaW4gfjYgbGluZXMgb2YgYSByZXBsYXkgc3RhcnRcbiAgICAgIC8vIGxpbmUgcmVmZXJlbmNpbmcgdGhpcyBydW5JZC5cbiAgICAgIGNvbnN0IGxpbmVzID0gbG9ncy5zcGxpdCgnXFxuJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghbGluZXNbaV0hLmluY2x1ZGVzKCdTdGFydGluZyB3b3JrZmxvdyByZXBsYXknKSkgY29udGludWU7XG4gICAgICAgIC8vIGZpbmQgdGhlIHJ1bklkIGluIHRoZSBzdXJyb3VuZGluZyA4IGxpbmVzXG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IGxpbmVzLnNsaWNlKGksIGkgKyA4KS5qb2luKCdcXG4nKTtcbiAgICAgICAgaWYgKCF3aW5kb3cuaW5jbHVkZXMocmVzdWx0LnJ1bklkKSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IG0gPSB3aW5kb3cubWF0Y2goL2V2ZW50Q291bnQ6XFxzKihcXGQrKS8pO1xuICAgICAgICBpZiAobSkgcmVwbGF5RXZlbnRDb3VudHMucHVzaChOdW1iZXIucGFyc2VJbnQobVsxXSEsIDEwKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXBsYXlTdGFydHMgPSByZXBsYXlFdmVudENvdW50cy5sZW5ndGg7XG5cbiAgICAgIC8vIDMpIFwiQWxsIHBhcmFsbGVsIHN0ZXBzIGRvbmUsIHJlcGxheWluZyBpbmxpbmVcIiAocGVyLXJ1bilcbiAgICAgIGNvbnN0IGFsbERvbmVJbmxpbmVSZXBsYXlzID0gbWF0Y2hDb3VudChcbiAgICAgICAgbG9ncyxcbiAgICAgICAgL0FsbCBwYXJhbGxlbCBzdGVwcyBkb25lLCByZXBsYXlpbmcgaW5saW5lL2csXG4gICAgICAgIHJlc3VsdC5ydW5JZFxuICAgICAgKTtcblxuICAgICAgLy8gNCkgXCJCYWNrZ3JvdW5kIHN0ZXAgZG9uZSBidXQgb3RoZXIgc3RlcHMgcGVuZGluZ1wiIChwZXItcnVuKVxuICAgICAgY29uc3QgYmFja2dyb3VuZFN0ZXBQZW5kaW5nUmV0dXJucyA9IG1hdGNoQ291bnQoXG4gICAgICAgIGxvZ3MsXG4gICAgICAgIC9CYWNrZ3JvdW5kIHN0ZXAgZG9uZSBidXQgb3RoZXIgc3RlcHMgcGVuZGluZy9nLFxuICAgICAgICByZXN1bHQucnVuSWRcbiAgICAgICk7XG5cbiAgICAgIC8vIDUpIFN0ZXAgc2tpcHBlZCBiZWNhdXNlIHN0ZXAgd2FzIGFscmVhZHkgaW4gdGVybWluYWwgc3RhdGVcbiAgICAgIC8vIChiYWNrZ3JvdW5kIGhhbmRsZXIgYXJyaXZlZCBhZnRlciBpbmxpbmUgcGF0aCBhbHJlYWR5IGNvbXBsZXRlZCBpdCkuXG4gICAgICAvLyBUaGlzIGlzIGVtaXR0ZWQgZnJvbSB0aGUgc3RlcF9zdGFydGVkIGNvbmZsaWN0IHBhdGggaW4gc3RlcC1leGVjdXRvci50c1xuICAgICAgLy8gKFwiU3RlcCBpbiB0ZXJtaW5hbCBzdGF0ZSwgc2tpcHBpbmdcIikuIFRoZSBzdGVwX2NvbXBsZXRlZCA0MDkgcGF0aFxuICAgICAgLy8gKFwiVHJpZWQgY29tcGxldGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZFwiKSBmaXJlcyBvbmx5XG4gICAgICAvLyB3aGVuIHR3byBoYW5kbGVycyBib3RoIHJhbiB0aGUgc3RlcCBib2R5IGNvbmN1cnJlbnRseS5cbiAgICAgIGNvbnN0IHN0ZXBzU2tpcHBlZEFscmVhZHlEb25lID0gbWF0Y2hDb3VudChcbiAgICAgICAgbG9ncyxcbiAgICAgICAgL1N0ZXAgaW4gdGVybWluYWwgc3RhdGUsIHNraXBwaW5nL2csXG4gICAgICAgIHJlc3VsdC5ydW5JZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0ZXBDb21wbGV0ZWRSYWNlcyA9IG1hdGNoQ291bnQoXG4gICAgICAgIGxvZ3MsXG4gICAgICAgIC9UcmllZCBjb21wbGV0aW5nIHN0ZXAsIGJ1dCBzdGVwIGhhcyBhbHJlYWR5IGZpbmlzaGVkL2csXG4gICAgICAgIHJlc3VsdC5ydW5JZFxuICAgICAgKTtcblxuICAgICAgLy8gNikgVW5jb25zdW1lZCBldmVudCBza2lwcyAoZGVidWcgbWVzc2FnZSBlbWl0dGVkIGJ5IHdvcmtmbG93LnRzIHNraXAgbG9naWMpXG4gICAgICBjb25zdCB1bmNvbnN1bWVkRXZlbnRTa2lwcyA9IG1hdGNoQ291bnQoXG4gICAgICAgIGxvZ3MsXG4gICAgICAgIC9Ta2lwcGluZyB1bmNvbnN1bWVkIHN0ZXAgZXZlbnQvZyxcbiAgICAgICAgcmVzdWx0LnJ1bklkXG4gICAgICApO1xuXG4gICAgICAvLyA3KSBIb29rL3N0ZXAgc3RhcnRlZCB3aXRoIGFscmVhZHktcnVubmluZzogdmlhIGNvbmN1cnJlbnQgaGFuZGxlclxuICAgICAgY29uc3QgbWF4RGVsaXZlcmllcyA9IG1hdGNoQ291bnQobG9ncywgL01heCByZXRyaWVzIHJlYWNoZWQvZyk7XG5cbiAgICAgIGNvbnNvbGUubG9nKCdcXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICAgIGNvbnNvbGUubG9nKCdWMiBoYW5kbGVyIGJlaGF2aW9yIOKAlCAzIGJhdGNoZXMgw5cgNSBzdGVwcycpO1xuICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgY29uc29sZS5sb2coYEZsb3cgaGFuZGxlciBpbnZvY2F0aW9uczogJHtmbG93SW52b2NhdGlvbnN9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgUmVwbGF5IGl0ZXJhdGlvbnMgKHRvdGFsKTogJHtyZXBsYXlTdGFydHN9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgRXZlbnQgY291bnRzIHBlciByZXBsYXk6IFske3JlcGxheUV2ZW50Q291bnRzLmpvaW4oJywgJyl9XWApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBcIkFsbCBzdGVwcyBkb25lLCByZXBsYXkgaW5saW5lXCIgaGl0czogJHthbGxEb25lSW5saW5lUmVwbGF5c31gXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBcIkJhY2tncm91bmQgc3RlcCBwZW5kaW5nLCByZXR1cm5cIiBoaXRzOiAke2JhY2tncm91bmRTdGVwUGVuZGluZ1JldHVybnN9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgU3RlcCBza2lwcGVkIChhbHJlYWR5IHRlcm1pbmFsLCBzdGVwX3N0YXJ0ZWQgNDA5KTogJHtzdGVwc1NraXBwZWRBbHJlYWR5RG9uZX1gXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBTdGVwIGJvZHkgcmFuIHR3aWNlIChzdGVwX2NvbXBsZXRlZCA0MDkpOiAgICAgICAgICAgJHtzdGVwQ29tcGxldGVkUmFjZXN9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgVW5jb25zdW1lZCBldmVudHMgc2tpcHBlZCBieSBjb25zdW1lcjogJHt1bmNvbnN1bWVkRXZlbnRTa2lwc31gXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coYE1heCByZXRyaWVzIHJlYWNoZWQgKGJhZCk6ICR7bWF4RGVsaXZlcmllc31gKTtcbiAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4nKTtcblxuICAgICAgLy8gQWxzbyBwcmludCB0aGUga2V5IHRpbWVsaW5lOiBvbmUgbGluZSBwZXIgXCJzaWduaWZpY2FudFwiIHJ1bnRpbWVcbiAgICAgIC8vIGRlYnVnIGV2ZW50LCBpbiBvcmRlci4gTWFueSBkZWJ1ZyBsaW5lcyBwdXQgdGhlIHJ1bklkIGluIHRoZVxuICAgICAgLy8gbWV0YWRhdGEgb2JqZWN0IG9uIGEgZm9sbG93aW5nIGxpbmUsIHNvIGxvb2sgYXQgYSBzbWFsbCBmb3J3YXJkXG4gICAgICAvLyB3aW5kb3cgYXJvdW5kIGVhY2ggbWF0Y2guXG4gICAgICBjb25zdCB0aW1lbGluZTogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHNpZ1JlZ2V4ID1cbiAgICAgICAgL1N0YXJ0aW5nIHdvcmtmbG93IHJlcGxheXxBbGwgcGFyYWxsZWwgc3RlcHMgZG9uZXxCYWNrZ3JvdW5kIHN0ZXAgZG9uZSBidXR8V29ya2Zsb3cgc3VzcGVuZGVkfFdvcmtmbG93IHJlcGxheSBjb21wbGV0ZWR8UnVuIGFscmVhZHkgZmluaXNoZWQsIHNraXBwaW5nIGJhY2tncm91bmQgc3RlcHxTdGVwIGluIHRlcm1pbmFsIHN0YXRlfFRyaWVkIGNvbXBsZXRpbmcgc3RlcHxNYXggcmV0cmllcyByZWFjaGVkfFNraXBwaW5nIHVuY29uc3VtZWQgc3RlcCBldmVudC87XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghc2lnUmVnZXgudGVzdChsaW5lc1tpXSEpKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gbGluZXMuc2xpY2UoaSwgaSArIDgpLmpvaW4oJ1xcbicpO1xuICAgICAgICBpZiAoIXdpbmRvdy5pbmNsdWRlcyhyZXN1bHQucnVuSWQpKSBjb250aW51ZTtcbiAgICAgICAgdGltZWxpbmUucHVzaChsaW5lc1tpXSEpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJy0tLSBUaW1lbGluZSAocnVudGltZSBkZWJ1ZyBldmVudHMgZm9yIHRoaXMgcnVuKSAtLS0nKTtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiB0aW1lbGluZSkge1xuICAgICAgICBjb25zdCBzaG9ydCA9IGxpbmUucmVwbGFjZSgvXFxzKy9nLCAnICcpLnNsaWNlKDAsIDE4MCk7XG4gICAgICAgIGNvbnNvbGUubG9nKHNob3J0KTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKGBUaW1lbGluZSBlbnRyaWVzOiAke3RpbWVsaW5lLmxlbmd0aH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyk7XG5cbiAgICAgIC8vIFJhdyBjb3VudHMg4oCUIHRvdGFsIG9jY3VycmVuY2VzIGluIHRoZSB3aG9sZSBsb2cgcmVnYXJkbGVzcyBvZiBydW5JZFxuICAgICAgLy8gKGZvciBzYW5pdHktY2hlY2tpbmcgdGhlIHdpbmRvd2VkIG1hdGNoZXIgYWJvdmUpLlxuICAgICAgY29uc3QgcmF3VW5jb25zdW1lZCA9IChcbiAgICAgICAgbG9ncy5tYXRjaCgvU2tpcHBpbmcgdW5jb25zdW1lZCBzdGVwIGV2ZW50L2cpIHx8IFtdXG4gICAgICApLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhd0FsbERvbmUgPSAoXG4gICAgICAgIGxvZ3MubWF0Y2goL0FsbCBwYXJhbGxlbCBzdGVwcyBkb25lLCByZXBsYXlpbmcgaW5saW5lL2cpIHx8IFtdXG4gICAgICApLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhd1BlbmRpbmcgPSAoXG4gICAgICAgIGxvZ3MubWF0Y2goL0JhY2tncm91bmQgc3RlcCBkb25lIGJ1dCBvdGhlciBzdGVwcyBwZW5kaW5nL2cpIHx8IFtdXG4gICAgICApLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhd1Rlcm1pbmFsID0gKFxuICAgICAgICBsb2dzLm1hdGNoKC9TdGVwIGluIHRlcm1pbmFsIHN0YXRlLCBza2lwcGluZy9nKSB8fCBbXVxuICAgICAgKS5sZW5ndGg7XG4gICAgICBjb25zdCByYXdDb21wbGV0ZWQ0MDkgPSAoXG4gICAgICAgIGxvZ3MubWF0Y2goL1RyaWVkIGNvbXBsZXRpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQvZykgfHxcbiAgICAgICAgW11cbiAgICAgICkubGVuZ3RoO1xuICAgICAgY29uc29sZS5sb2coJy0tLSBSYXcgY291bnRzIChubyBydW5JZCBmaWx0ZXIpIC0tLScpO1xuICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIHVuY29uc3VtZWQgc3RlcCBldmVudDogJHtyYXdVbmNvbnN1bWVkfWApO1xuICAgICAgY29uc29sZS5sb2coYEFsbCBwYXJhbGxlbCBzdGVwcyBkb25lLCByZXBsYXlpbmcgaW5saW5lOiAke3Jhd0FsbERvbmV9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYEJhY2tncm91bmQgc3RlcCBkb25lIGJ1dCBvdGhlciBzdGVwcyBwZW5kaW5nOiAke3Jhd1BlbmRpbmd9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBTdGVwIGluIHRlcm1pbmFsIHN0YXRlLCBza2lwcGluZzogJHtyYXdUZXJtaW5hbH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgVHJpZWQgY29tcGxldGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZDogJHtyYXdDb21wbGV0ZWQ0MDl9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyk7XG5cbiAgICAgIC8vIEJyZWFrZG93biBvZiB1bmNvbnN1bWVkIGV2ZW50IHR5cGVzLiBUaGUgbG9nIGZvcm1hdCBlbWl0cyB0aGVcbiAgICAgIC8vIG1lc3NhZ2Ugb24gb25lIGxpbmUgYW5kIHRoZSBtZXRhZGF0YSBvYmplY3QgKGV2ZW50VHlwZSxcbiAgICAgIC8vIGNvcnJlbGF0aW9uSWQpIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuIFdhbGsgYSAxMi1saW5lIHdpbmRvdyBhZnRlclxuICAgICAgLy8gZWFjaCBtYXRjaCBhbmQgZXh0cmFjdCB0aGUgZmllbGRzLlxuICAgICAgY29uc3Qgc2tpcHBlZEJ5RXZlbnRUeXBlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgIGNvbnN0IHNraXBwZWRFdmVudHM6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGNvcnJlbGF0aW9uSWQ6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFsaW5lc1tpXSEuaW5jbHVkZXMoJ1NraXBwaW5nIHVuY29uc3VtZWQgc3RlcCBldmVudCcpKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gbGluZXMuc2xpY2UoaSwgaSArIDEyKS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgZXQgPSB3aW5kb3cubWF0Y2goL2V2ZW50VHlwZTpcXHMqJyhbXiddKyknLyk7XG4gICAgICAgIGNvbnN0IGNpZCA9IHdpbmRvdy5tYXRjaCgvY29ycmVsYXRpb25JZDpcXHMqJyhbXiddKyknLyk7XG4gICAgICAgIGlmIChldCAmJiBjaWQpIHtcbiAgICAgICAgICBza2lwcGVkQnlFdmVudFR5cGUuc2V0KFxuICAgICAgICAgICAgZXRbMV0hLFxuICAgICAgICAgICAgKHNraXBwZWRCeUV2ZW50VHlwZS5nZXQoZXRbMV0hKSA/PyAwKSArIDFcbiAgICAgICAgICApO1xuICAgICAgICAgIHNraXBwZWRFdmVudHMucHVzaCh7IGV2ZW50VHlwZTogZXRbMV0hLCBjb3JyZWxhdGlvbklkOiBjaWRbMV0hIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygnLS0tIFVuY29uc3VtZWQgZXZlbnQgdHlwZSBicmVha2Rvd24gLS0tJyk7XG4gICAgICBmb3IgKGNvbnN0IFtldmVudFR5cGUsIGNvdW50XSBvZiBza2lwcGVkQnlFdmVudFR5cGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtldmVudFR5cGV9OiAke2NvdW50fWApO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgZWFjaCBza2lwcGVkIGV2ZW50LCBsb29rIHVwIGFsbCBvY2N1cnJlbmNlcyBvZiBpdHMgY29ycmVsYXRpb25JZFxuICAgICAgLy8gaW4gdGhlIGV2ZW50IGxvZyBvcmRlciBzbyB3ZSBjYW4gc2VlIHdoZXRoZXIgaXQncyBhIHRyYWlsaW5nXG4gICAgICAvLyBkdXBsaWNhdGUgbGlmZWN5Y2xlIGV2ZW50IGFmdGVyIHN0ZXBfY29tcGxldGVkLlxuICAgICAgLy8gV2UgcmVjb25zdHJ1Y3QgZXZlbnQgb3JkZXIgZnJvbSB0aGUgXCJyZXBsYXlpbmcgaXRlcmF0aW9uXCIgbG9ncyBpc24ndFxuICAgICAgLy8gcmVsaWFibGUsIHNvIGluc3RlYWQgYXNrIHRoZSBzZXJ2ZXIgZGlyZWN0bHkuXG4gICAgICBjb25zdCBldmVudHNSZXNwID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7c2VydmVyLmluZm8ucG9ydH0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChyZXN1bHQucnVuSWQpfS9ldmVudHNgXG4gICAgICApO1xuICAgICAgY29uc3QgZXZlbnRzRGF0YSA9IChhd2FpdCBldmVudHNSZXNwLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKSkgYXMge1xuICAgICAgICBldmVudHM6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfVtdO1xuICAgICAgfSB8IG51bGw7XG4gICAgICBpZiAoZXZlbnRzRGF0YT8uZXZlbnRzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIFRvdGFsIGV2ZW50cyBpbiBsb2c6ICR7ZXZlbnRzRGF0YS5ldmVudHMubGVuZ3RofWApO1xuICAgICAgICAvLyBGb3IgZWFjaCBjb3JyZWxhdGlvbklkIHRoYXQgaGFkIGEgc2tpcHBlZCBldmVudCwgc2hvdyB0aGUgZXZlbnRcbiAgICAgICAgLy8gc2VxdWVuY2UgaW4gdGhlIGxvZyBmb3IgdGhhdCBjb3JyZWxhdGlvbklkLlxuICAgICAgICBjb25zdCBzaG93bkNpZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBza2lwIG9mIHNraXBwZWRFdmVudHMuc2xpY2UoMCwgNikpIHtcbiAgICAgICAgICBpZiAoc2hvd25DaWRzLmhhcyhza2lwLmNvcnJlbGF0aW9uSWQpKSBjb250aW51ZTtcbiAgICAgICAgICBzaG93bkNpZHMuYWRkKHNraXAuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgY29uc3Qgc2VxID0gZXZlbnRzRGF0YS5ldmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoKGUpID0+IGUuY29ycmVsYXRpb25JZCA9PT0gc2tpcC5jb3JyZWxhdGlvbklkKVxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gZS5ldmVudFR5cGUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCAgY2lkPSR7c2tpcC5jb3JyZWxhdGlvbklkLnNsaWNlKDAsIDIwKX0uLi4gc2VxPVske3NlcS5qb2luKCcsICcpfV1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJyAgKGV2ZW50cyBlbmRwb2ludCBub3QgYXZhaWxhYmxlLCBza2lwcGluZyBzZXF1ZW5jZSBkdW1wKSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicpO1xuXG4gICAgICAvLyBTYW5pdHk6IHRoZSBydW4gZGlkIGNvbXBsZXRlLiBFdmVyeXRoaW5nIGVsc2UgaXMgZGlhZ25vc3RpYy5cbiAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgIC8vIEhhcmQgYXNzZXJ0aW9uOiBubyBzdGVwIHNob3VsZCBoYXZlIGhpdCBtYXggcmV0cmllcyBmb3IgdGhpcyB3b3JrZmxvdy5cbiAgICAgIGV4cGVjdChtYXhEZWxpdmVyaWVzKS50b0JlKDApO1xuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBDb3VudCBtYXRjaGVzIG9mIGBwYXR0ZXJuYCBpbiBgbG9nc2AuIElmIGBydW5JZGAgaXMgcHJvdmlkZWQsIG9ubHkgY291bnRcbiAqIG1hdGNoZXMgd2hlcmUgYHJ1bklkYCBhcHBlYXJzIHdpdGhpbiBhbiA4LWxpbmUgd2luZG93IHN0YXJ0aW5nIGF0IHRoZVxuICogbWF0Y2gg4oCUIG1hbnkgZGVidWcgbGluZXMgcHV0IGB3b3JrZmxvd1J1bklkYCBpbiB0aGUgbWV0YWRhdGEgb2JqZWN0IG9uXG4gKiBhIGZvbGxvd2luZyBsaW5lLlxuICovXG5mdW5jdGlvbiBtYXRjaENvdW50KGxvZ3M6IHN0cmluZywgcGF0dGVybjogUmVnRXhwLCBydW5JZD86IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IGxpbmVzID0gbG9ncy5zcGxpdCgnXFxuJyk7XG4gIGxldCBuID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBpZiAoIXBhdHRlcm4udGVzdChsaW5lc1tpXSEpKSBjb250aW51ZTtcbiAgICBpZiAocnVuSWQpIHtcbiAgICAgIGNvbnN0IHdpbmRvdyA9IGxpbmVzLnNsaWNlKGksIGkgKyA4KS5qb2luKCdcXG4nKTtcbiAgICAgIGlmICghd2luZG93LmluY2x1ZGVzKHJ1bklkKSkgY29udGludWU7XG4gICAgfVxuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"inline-execution.d.mts","sourceRoot":"","sources":["../../src/inline-execution.mts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,QA4I5C"}
1
+ {"version":3,"file":"inline-execution.d.mts","sourceRoot":"","sources":["../../src/inline-execution.mts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,QAmL5C"}
@@ -1,5 +1,5 @@
1
- import { expect, test, vi } from 'vitest';
2
1
  import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
3
  import { createFetcher, startServer } from './util.mjs';
4
4
  /**
5
5
  * Tests that the V2 inline execution loop correctly minimizes flow
@@ -73,8 +73,28 @@ export function inlineExecution(world) {
73
73
  expect(count).toBeGreaterThanOrEqual(1);
74
74
  expect(count).toBeLessThanOrEqual(3);
75
75
  });
76
+ test('sequential steps carrying an AbortSignal still run in a single flow invocation', { timeout: 30_000 }, async () => {
77
+ // Regression for vercel/workflow#2795: a serialized AbortSignal in step
78
+ // arguments opens a real-time abort-stream reader for the step's
79
+ // duration. If that reader isn't torn down before the step's ops-settle
80
+ // check, its never-resolving read() makes every signal-bearing step
81
+ // report `hasPendingOps`, forcing a queue continuation per step (N+1
82
+ // invocations) instead of running inline.
83
+ const server = await startServer({ world }).then(createFetcher);
84
+ const count = 5;
85
+ const result = await server.invoke('workflows/signal-cost.ts', 'signalCostWorkflow', [{ count, withSignal: true }]);
86
+ const run = await vi.waitFor(async () => {
87
+ const run = await server.getRun(result.runId);
88
+ expect(run.status).toBe('completed');
89
+ return run;
90
+ }, { interval: 200, timeout: 29_000 });
91
+ const output = await hydrateWorkflowReturnValue(run.output, run.runId, undefined);
92
+ expect(output).toBe('done');
93
+ const invocations = await server.getFlowInvocationCount(result.runId);
94
+ expect(invocations).toBe(1);
95
+ });
76
96
  // Hook invocation counting is tested by the existing hooks test suite.
77
97
  // The hook pattern requires external resume, which involves complex
78
98
  // timing. The invocation count for hooks is 2: create + resume.
79
99
  }
80
- //# sourceMappingURL=inline-execution.mjs.map
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWV4ZWN1dGlvbi5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5saW5lLWV4ZWN1dGlvbi5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsSUFBSSxDQUNGLHVEQUF1RCxFQUN2RCxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDbkIsS0FBSyxJQUFJLEVBQUU7UUFDVCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FDaEMsK0JBQStCLEVBQy9CLHlCQUF5QixFQUN6QixDQUFDLEVBQUUsQ0FBQyxDQUNMLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQzFCLEtBQUssSUFBSSxFQUFFO1lBQ1QsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUNuQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcs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RUFBRSxNQUFNLEVBQUUsQ0FDbkMsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQTBCLENBQzdDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUNGLENBQUM7SUFFRix1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLGdFQUFnRTtBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuLyoqXG4gKiBUZXN0cyB0aGF0IHRoZSBWMiBpbmxpbmUgZXhlY3V0aW9uIGxvb3AgY29ycmVjdGx5IG1pbmltaXplcyBmbG93XG4gKiBoYW5kbGVyIGludm9jYXRpb25zLiBFYWNoIHRlc3QgdmVyaWZpZXMgYSBzcGVjaWZpYyBwYXR0ZXJuOlxuICpcbiAqIC0gU2VxdWVudGlhbCBzdGVwcyAobm8gc3RyZWFtcyk6IDEgaW52b2NhdGlvblxuICogLSBTZXF1ZW50aWFsIHN0ZXBzIHdpdGggV3JpdGFibGVTdHJlYW06IDEgaW52b2NhdGlvbiAoc3luYyBmbHVzaClcbiAqIC0gU2xlZXAgKyBzdGVwOiAyIGludm9jYXRpb25zIChzbGVlcCByZXF1aXJlcyBxdWV1ZSByb3VuZC10cmlwKVxuICogLSBQYXJhbGxlbCBzdGVwcyAoUHJvbWlzZS5hbGwpOiAxLTMgaW52b2NhdGlvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlXG4gKiAgIGVtYmVkZGVkIGhhcm5lc3Mgb2JzZXJ2ZXMgdGhlIGJhY2tncm91bmQgc3RlcCBhbmQgY29udGludWF0aW9uIHNlcGFyYXRlbHlcbiAqIC0gSG9vayArIHJlc3VtZTogMiBpbnZvY2F0aW9ucyAoaG9vayByZXF1aXJlcyBleHRlcm5hbCByZXN1bWUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmxpbmVFeGVjdXRpb24od29ybGQ6IHN0cmluZykge1xuICB0ZXN0KFxuICAgICdzZXF1ZW50aWFsIHN0ZXBzIGNvbXBsZXRlIGluIGEgc2luZ2xlIGZsb3cgaW52b2NhdGlvbicsXG4gICAgeyB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgICAnd29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24udHMnLFxuICAgICAgICAnc2VxdWVudGlhbFN0ZXBzV29ya2Zsb3cnLFxuICAgICAgICBbMTBdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgyMCk7XG5cbiAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgc2VydmVyLmdldEZsb3dJbnZvY2F0aW9uQ291bnQocmVzdWx0LnJ1bklkKTtcbiAgICAgIGV4cGVjdChjb3VudCkudG9CZSgxKTtcbiAgICB9XG4gICk7XG5cbiAgdGVzdChcbiAgICAnc2VxdWVudGlhbCBzdGVwcyB3aXRoIHN0cmVhbSBjb21wbGV0ZSBpbiBhIHNpbmdsZSBmbG93IGludm9jYXRpb24nLFxuICAgIHsgdGltZW91dDogMzBfMDAwIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICAgJ3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLnRzJyxcbiAgICAgICAgJ3NlcXVlbnRpYWxTdGVwc1dpdGhTdHJlYW1Xb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgnaGVsbG8gd29ybGQnKTtcblxuICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBzZXJ2ZXIuZ2V0Rmxvd0ludm9jYXRpb25Db3VudChyZXN1bHQucnVuSWQpO1xuICAgICAgZXhwZWN0KGNvdW50KS50b0JlKDEpO1xuICAgIH1cbiAgKTtcblxuICB0ZXN0KFxuICAgICdzbGVlcCB3b3JrZmxvdyByZXF1aXJlcyBleGFjdGx5IDIgZmxvdyBpbnZvY2F0aW9ucycsXG4gICAgeyB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgICAnd29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24udHMnLFxuICAgICAgICAnc2xlZXBXb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgzKTtcblxuICAgICAgLy8gSW52b2NhdGlvbiAxOiByZXBsYXkg4oaSIHNsZWVwIOKGkiByZXR1cm4ge3RpbWVvdXRTZWNvbmRzfVxuICAgICAgLy8gSW52b2NhdGlvbiAyOiBzbGVlcCBjb21wbGV0ZWQg4oaSIHJlcGxheSDihpIgc3RlcCBpbmxpbmUg4oaSIGNvbXBsZXRlXG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHNlcnZlci5nZXRGbG93SW52b2NhdGlvbkNvdW50KHJlc3VsdC5ydW5JZCk7XG4gICAgICBleHBlY3QoY291bnQpLnRvQmUoMik7XG4gICAgfVxuICApO1xuXG4gIHRlc3QoXG4gICAgJ3BhcmFsbGVsIHN0ZXBzIChQcm9taXNlLmFsbCkgY29tcGxldGUgaW4gMS0zIGZsb3cgaW52b2NhdGlvbnMnLFxuICAgIHsgdGltZW91dDogMzBfMDAwIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICAgJ3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLnRzJyxcbiAgICAgICAgJ3BhcmFsbGVsU3RlcHNXb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgzMyk7IC8vICgxMCsxKSArICgyMCsyKVxuXG4gICAgICAvLyBJbiB0aGUgZW1iZWRkZWQgaGFybmVzcyB0aGUgYmFja2dyb3VuZCBzdGVwIGNhbiBmaW5pc2ggcXVpY2tseSBlbm91Z2hcbiAgICAgIC8vIHRoYXQgdGhlIHJ1biBjb21wbGV0ZXMgYmVmb3JlIHdlIG9ic2VydmUgYSBkaXN0aW5jdCBjb250aW51YXRpb24gcGFzcyxcbiAgICAgIC8vIHNvIHRoZSBsb3dlciBib3VuZCBpcyAxIGV2ZW4gdGhvdWdoIHByb2R1Y3Rpb24gb2Z0ZW4gc2hvd3MgMi5cbiAgICAgIC8vIFdpdGggaGlnaGVyIHF1ZXVlIGNvbmN1cnJlbmN5LCB0aGUgYmFja2dyb3VuZCBzdGVwJ3MgY29udGludWF0aW9uIG1heVxuICAgICAgLy8gYWxzbyByYWNlIHdpdGggdGhlIGlubGluZSBoYW5kbGVyJ3MgbG9vcCwgYWRkaW5nIGEgM3JkIG5vLW9wIGludm9jYXRpb24uXG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHNlcnZlci5nZXRGbG93SW52b2NhdGlvbkNvdW50KHJlc3VsdC5ydW5JZCk7XG4gICAgICBleHBlY3QoY291bnQpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMSk7XG4gICAgICBleHBlY3QoY291bnQpLnRvQmVMZXNzVGhhbk9yRXF1YWwoMyk7XG4gICAgfVxuICApO1xuXG4gIHRlc3QoXG4gICAgJ3NlcXVlbnRpYWwgc3RlcHMgY2FycnlpbmcgYW4gQWJvcnRTaWduYWwgc3RpbGwgcnVuIGluIGEgc2luZ2xlIGZsb3cgaW52b2NhdGlvbicsXG4gICAgeyB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBSZWdyZXNzaW9uIGZvciB2ZXJjZWwvd29ya2Zsb3cjMjc5NTogYSBzZXJpYWxpemVkIEFib3J0U2lnbmFsIGluIHN0ZXBcbiAgICAgIC8vIGFyZ3VtZW50cyBvcGVucyBhIHJlYWwtdGltZSBhYm9ydC1zdHJlYW0gcmVhZGVyIGZvciB0aGUgc3RlcCdzXG4gICAgICAvLyBkdXJhdGlvbi4gSWYgdGhhdCByZWFkZXIgaXNuJ3QgdG9ybiBkb3duIGJlZm9yZSB0aGUgc3RlcCdzIG9wcy1zZXR0bGVcbiAgICAgIC8vIGNoZWNrLCBpdHMgbmV2ZXItcmVzb2x2aW5nIHJlYWQoKSBtYWtlcyBldmVyeSBzaWduYWwtYmVhcmluZyBzdGVwXG4gICAgICAvLyByZXBvcnQgYGhhc1BlbmRpbmdPcHNgLCBmb3JjaW5nIGEgcXVldWUgY29udGludWF0aW9uIHBlciBzdGVwIChOKzFcbiAgICAgIC8vIGludm9jYXRpb25zKSBpbnN0ZWFkIG9mIHJ1bm5pbmcgaW5saW5lLlxuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgICAgY29uc3QgY291bnQgPSA1O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICAgJ3dvcmtmbG93cy9zaWduYWwtY29zdC50cycsXG4gICAgICAgICdzaWduYWxDb3N0V29ya2Zsb3cnLFxuICAgICAgICBbeyBjb3VudCwgd2l0aFNpZ25hbDogdHJ1ZSB9XVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcnVuID0gYXdhaXQgdmkud2FpdEZvcihcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHNlcnZlci5nZXRSdW4ocmVzdWx0LnJ1bklkKTtcbiAgICAgICAgICBleHBlY3QocnVuLnN0YXR1cykudG9CZSgnY29tcGxldGVkJyk7XG4gICAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbnRlcnZhbDogMjAwLCB0aW1lb3V0OiAyOV8wMDAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICAgIHJ1bi5vdXRwdXQhLFxuICAgICAgICBydW4ucnVuSWQsXG4gICAgICAgIHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoJ2RvbmUnKTtcblxuICAgICAgY29uc3QgaW52b2NhdGlvbnMgPSBhd2FpdCBzZXJ2ZXIuZ2V0Rmxvd0ludm9jYXRpb25Db3VudChyZXN1bHQucnVuSWQpO1xuICAgICAgZXhwZWN0KGludm9jYXRpb25zKS50b0JlKDEpO1xuICAgIH1cbiAgKTtcblxuICAvLyBIb29rIGludm9jYXRpb24gY291bnRpbmcgaXMgdGVzdGVkIGJ5IHRoZSBleGlzdGluZyBob29rcyB0ZXN0IHN1aXRlLlxuICAvLyBUaGUgaG9vayBwYXR0ZXJuIHJlcXVpcmVzIGV4dGVybmFsIHJlc3VtZSwgd2hpY2ggaW52b2x2ZXMgY29tcGxleFxuICAvLyB0aW1pbmcuIFRoZSBpbnZvY2F0aW9uIGNvdW50IGZvciBob29rcyBpcyAyOiBjcmVhdGUgKyByZXN1bWUuXG59XG4iXX0=
@@ -29,4 +29,4 @@ export async function* jsonlines(readable) {
29
29
  }
30
30
  yield* bufferedObjects();
31
31
  }
32
- //# sourceMappingURL=jsonlines.mjs.map
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmxpbmVzLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc29ubGluZXMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFvQztJQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixLQUFLLFNBQVMsQ0FBQyxDQUFDLGVBQWU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLElBQUksSUFBSSxDQUFDO1lBQ2YsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhc3luYyBmdW5jdGlvbioganNvbmxpbmVzKHJlYWRhYmxlOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pikge1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlLmdldFJlYWRlcigpO1xuICBsZXQgYnVmZmVyID0gJyc7XG5cbiAgY29uc3QgYnVmZmVyZWRMaW5lcyA9ICgpID0+IHtcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuJyk7XG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJyc7XG4gICAgcmV0dXJuIGxpbmVzO1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uKiBidWZmZXJlZE9iamVjdHMoKSB7XG4gICAgY29uc3QgbGluZXMgPSBidWZmZXJlZExpbmVzKCk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB5aWVsZCBKU09OLnBhcnNlKGxpbmUpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKHJlYWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBkZWNvZGVyLmRlY29kZShyZWFkLnZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgIGJ1ZmZlciArPSB0ZXh0O1xuICAgICAgeWllbGQqIGJ1ZmZlcmVkT2JqZWN0cygpO1xuICAgIH1cbiAgICBpZiAocmVhZC5kb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB5aWVsZCogYnVmZmVyZWRPYmplY3RzKCk7XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Proves end-to-end that `start()` called from a workflow *body* (the canonical
3
+ * child-workflow spawn, not from inside a step) records cross-run lineage. The
4
+ * spawned child must carry `$parentRunId`/`$rootRunId` pointing at the parent,
5
+ * while the top-level parent itself carries none.
6
+ */
7
+ export declare function lineage(world: string): void;
8
+ //# sourceMappingURL=lineage.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage.d.mts","sourceRoot":"","sources":["../../src/lineage.mts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,QAuDpC"}
@@ -0,0 +1,48 @@
1
+ import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
+ import { createFetcher, startServer } from './util.mjs';
4
+ const awaitCompleted = (server, runId) => vi.waitFor(async () => {
5
+ const run = await server.getRun(runId);
6
+ expect(run.status).toBe('completed');
7
+ return run;
8
+ }, { interval: 200, timeout: 10_000 });
9
+ // The runId a run spawned, read from its return value.
10
+ const spawnedRunId = (run) => hydrateWorkflowReturnValue(run.output, run.runId, undefined);
11
+ /**
12
+ * Proves end-to-end that `start()` called from a workflow *body* (the canonical
13
+ * child-workflow spawn, not from inside a step) records cross-run lineage. The
14
+ * spawned child must carry `$parentRunId`/`$rootRunId` pointing at the parent,
15
+ * while the top-level parent itself carries none.
16
+ */
17
+ export function lineage(world) {
18
+ test('body-level start() records lineage on the child', { timeout: 30_000 }, async () => {
19
+ const server = await startServer({ world }).then(createFetcher);
20
+ const { runId: parentRunId } = await server.invoke('workflows/lineage.ts', 'bodyStartsChild', []);
21
+ const parent = await awaitCompleted(server, parentRunId);
22
+ const child = await awaitCompleted(server, await spawnedRunId(parent));
23
+ // The child started from the parent's body inherits the lineage; the
24
+ // parent is top-level, so it anchors the root to itself.
25
+ expect(child.attributes?.$parentRunId).toBe(parentRunId);
26
+ expect(child.attributes?.$rootRunId).toBe(parentRunId);
27
+ expect(parent.attributes?.$parentRunId).toBeUndefined();
28
+ });
29
+ test('a three-level chain groups every run under the same root', { timeout: 30_000 }, async () => {
30
+ const server = await startServer({ world }).then(createFetcher);
31
+ // Each run returns the id of the one it spawned.
32
+ const { runId: rootRunId } = await server.invoke('workflows/lineage.ts', 'chainRoot', []);
33
+ const root = await awaitCompleted(server, rootRunId);
34
+ const middleRunId = await spawnedRunId(root);
35
+ const middle = await awaitCompleted(server, middleRunId);
36
+ const leaf = await awaitCompleted(server, await spawnedRunId(middle));
37
+ // Root is top-level.
38
+ expect(root.attributes?.$parentRunId).toBeUndefined();
39
+ expect(root.attributes?.$rootRunId).toBeUndefined();
40
+ // Middle: root and parent coincide at depth two.
41
+ expect(middle.attributes?.$parentRunId).toBe(rootRunId);
42
+ expect(middle.attributes?.$rootRunId).toBe(rootRunId);
43
+ // Leaf: parent is the middle, but root is still the chain root.
44
+ expect(leaf.attributes?.$parentRunId).toBe(middleRunId);
45
+ expect(leaf.attributes?.$rootRunId).toBe(rootRunId);
46
+ });
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZWFnZS5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGluZWFnZS5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSXhELE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBZSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQ3hELEVBQUUsQ0FBQyxPQUFPLENBQ1IsS0FBSyxJQUFJLEVBQUU7SUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FDbkMsQ0FBQztBQUVKLHVEQUF1RDtBQUN2RCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQXdDLEVBQUUsRUFBRSxDQUNoRSwwQkFBMEIsQ0FDeEIsR0FBRyxDQUFDLE1BQU8sRUFDWCxHQUFHLENBQUMsS0FBSyxFQUNULFNBQVMsQ0FDUyxDQUFDO0FBRXZCOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhO0lBQ25DLElBQUksQ0FDRixpREFBaUQsRUFDakQsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ25CLEtBQUssSUFBSSxFQUFFO1FBQ1QsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FDaEQsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixFQUFFLENBQ0gsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV2RSxxRUFBcUU7UUFDckUseURBQXlEO1FBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUQsQ0FBQyxDQUNGLENBQUM7SUFFRixJQUFJLENBQ0YsMERBQTBELEVBQzFELEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUNuQixLQUFLLElBQUksRUFBRTtRQUNULE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEUsaURBQWlEO1FBQ2pELE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUM5QyxzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLEVBQUUsQ0FDSCxDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV0RSxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFcEQsaURBQWlEO1FBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdEQsZ0VBQWdFO1FBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxudHlwZSBGZXRjaGVyID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlRmV0Y2hlcj47XG5cbmNvbnN0IGF3YWl0Q29tcGxldGVkID0gKHNlcnZlcjogRmV0Y2hlciwgcnVuSWQ6IHN0cmluZykgPT5cbiAgdmkud2FpdEZvcihcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJ1bklkKTtcbiAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgIHJldHVybiBydW47XG4gICAgfSxcbiAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDEwXzAwMCB9XG4gICk7XG5cbi8vIFRoZSBydW5JZCBhIHJ1biBzcGF3bmVkLCByZWFkIGZyb20gaXRzIHJldHVybiB2YWx1ZS5cbmNvbnN0IHNwYXduZWRSdW5JZCA9IChydW46IHsgb3V0cHV0PzogdW5rbm93bjsgcnVuSWQ6IHN0cmluZyB9KSA9PlxuICBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICBydW4ub3V0cHV0ISxcbiAgICBydW4ucnVuSWQsXG4gICAgdW5kZWZpbmVkXG4gICkgYXMgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFByb3ZlcyBlbmQtdG8tZW5kIHRoYXQgYHN0YXJ0KClgIGNhbGxlZCBmcm9tIGEgd29ya2Zsb3cgKmJvZHkqICh0aGUgY2Fub25pY2FsXG4gKiBjaGlsZC13b3JrZmxvdyBzcGF3biwgbm90IGZyb20gaW5zaWRlIGEgc3RlcCkgcmVjb3JkcyBjcm9zcy1ydW4gbGluZWFnZS4gVGhlXG4gKiBzcGF3bmVkIGNoaWxkIG11c3QgY2FycnkgYCRwYXJlbnRSdW5JZGAvYCRyb290UnVuSWRgIHBvaW50aW5nIGF0IHRoZSBwYXJlbnQsXG4gKiB3aGlsZSB0aGUgdG9wLWxldmVsIHBhcmVudCBpdHNlbGYgY2FycmllcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGluZWFnZSh3b3JsZDogc3RyaW5nKSB7XG4gIHRlc3QoXG4gICAgJ2JvZHktbGV2ZWwgc3RhcnQoKSByZWNvcmRzIGxpbmVhZ2Ugb24gdGhlIGNoaWxkJyxcbiAgICB7IHRpbWVvdXQ6IDMwXzAwMCB9LFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHN0YXJ0U2VydmVyKHsgd29ybGQgfSkudGhlbihjcmVhdGVGZXRjaGVyKTtcblxuICAgICAgY29uc3QgeyBydW5JZDogcGFyZW50UnVuSWQgfSA9IGF3YWl0IHNlcnZlci5pbnZva2UoXG4gICAgICAgICd3b3JrZmxvd3MvbGluZWFnZS50cycsXG4gICAgICAgICdib2R5U3RhcnRzQ2hpbGQnLFxuICAgICAgICBbXVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcGFyZW50ID0gYXdhaXQgYXdhaXRDb21wbGV0ZWQoc2VydmVyLCBwYXJlbnRSdW5JZCk7XG4gICAgICBjb25zdCBjaGlsZCA9IGF3YWl0IGF3YWl0Q29tcGxldGVkKHNlcnZlciwgYXdhaXQgc3Bhd25lZFJ1bklkKHBhcmVudCkpO1xuXG4gICAgICAvLyBUaGUgY2hpbGQgc3RhcnRlZCBmcm9tIHRoZSBwYXJlbnQncyBib2R5IGluaGVyaXRzIHRoZSBsaW5lYWdlOyB0aGVcbiAgICAgIC8vIHBhcmVudCBpcyB0b3AtbGV2ZWwsIHNvIGl0IGFuY2hvcnMgdGhlIHJvb3QgdG8gaXRzZWxmLlxuICAgICAgZXhwZWN0KGNoaWxkLmF0dHJpYnV0ZXM/LiRwYXJlbnRSdW5JZCkudG9CZShwYXJlbnRSdW5JZCk7XG4gICAgICBleHBlY3QoY2hpbGQuYXR0cmlidXRlcz8uJHJvb3RSdW5JZCkudG9CZShwYXJlbnRSdW5JZCk7XG4gICAgICBleHBlY3QocGFyZW50LmF0dHJpYnV0ZXM/LiRwYXJlbnRSdW5JZCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH1cbiAgKTtcblxuICB0ZXN0KFxuICAgICdhIHRocmVlLWxldmVsIGNoYWluIGdyb3VwcyBldmVyeSBydW4gdW5kZXIgdGhlIHNhbWUgcm9vdCcsXG4gICAgeyB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG5cbiAgICAgIC8vIEVhY2ggcnVuIHJldHVybnMgdGhlIGlkIG9mIHRoZSBvbmUgaXQgc3Bhd25lZC5cbiAgICAgIGNvbnN0IHsgcnVuSWQ6IHJvb3RSdW5JZCB9ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICAgJ3dvcmtmbG93cy9saW5lYWdlLnRzJyxcbiAgICAgICAgJ2NoYWluUm9vdCcsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCByb290ID0gYXdhaXQgYXdhaXRDb21wbGV0ZWQoc2VydmVyLCByb290UnVuSWQpO1xuICAgICAgY29uc3QgbWlkZGxlUnVuSWQgPSBhd2FpdCBzcGF3bmVkUnVuSWQocm9vdCk7XG4gICAgICBjb25zdCBtaWRkbGUgPSBhd2FpdCBhd2FpdENvbXBsZXRlZChzZXJ2ZXIsIG1pZGRsZVJ1bklkKTtcbiAgICAgIGNvbnN0IGxlYWYgPSBhd2FpdCBhd2FpdENvbXBsZXRlZChzZXJ2ZXIsIGF3YWl0IHNwYXduZWRSdW5JZChtaWRkbGUpKTtcblxuICAgICAgLy8gUm9vdCBpcyB0b3AtbGV2ZWwuXG4gICAgICBleHBlY3Qocm9vdC5hdHRyaWJ1dGVzPy4kcGFyZW50UnVuSWQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChyb290LmF0dHJpYnV0ZXM/LiRyb290UnVuSWQpLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgLy8gTWlkZGxlOiByb290IGFuZCBwYXJlbnQgY29pbmNpZGUgYXQgZGVwdGggdHdvLlxuICAgICAgZXhwZWN0KG1pZGRsZS5hdHRyaWJ1dGVzPy4kcGFyZW50UnVuSWQpLnRvQmUocm9vdFJ1bklkKTtcbiAgICAgIGV4cGVjdChtaWRkbGUuYXR0cmlidXRlcz8uJHJvb3RSdW5JZCkudG9CZShyb290UnVuSWQpO1xuXG4gICAgICAvLyBMZWFmOiBwYXJlbnQgaXMgdGhlIG1pZGRsZSwgYnV0IHJvb3QgaXMgc3RpbGwgdGhlIGNoYWluIHJvb3QuXG4gICAgICBleHBlY3QobGVhZi5hdHRyaWJ1dGVzPy4kcGFyZW50UnVuSWQpLnRvQmUobWlkZGxlUnVuSWQpO1xuICAgICAgZXhwZWN0KGxlYWYuYXR0cmlidXRlcz8uJHJvb3RSdW5JZCkudG9CZShyb290UnVuSWQpO1xuICAgIH1cbiAgKTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
- import { expect, test, vi } from 'vitest';
2
1
  import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
2
+ import { expect, test, vi } from 'vitest';
3
3
  import { createFetcher, startServer } from './util.mjs';
4
4
  export function nullByte(world) {
5
5
  test('supports null bytes in step results', { timeout: 12_000 }, async () => {
@@ -19,4 +19,4 @@ export function nullByte(world) {
19
19
  expect(output).toEqual('null byte \0');
20
20
  });
21
21
  }
22
- //# sourceMappingURL=null-byte.mjs.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbC1ieXRlLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9udWxsLWJ5dGUubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4RCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWE7SUFDcEMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ2xCLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0Q7WUFDRSxRQUFRLEVBQUUsR0FBRztZQUNiLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQ0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQTBCLENBQzdDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIG51bGxCeXRlKHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgnc3VwcG9ydHMgbnVsbCBieXRlcyBpbiBzdGVwIHJlc3VsdHMnLCB7IHRpbWVvdXQ6IDEyXzAwMCB9LCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5pbnZva2UoXG4gICAgICAnd29ya2Zsb3dzL251bGwtYnl0ZS50cycsXG4gICAgICAnbnVsbEJ5dGVXb3JrZmxvdycsXG4gICAgICBbXVxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5ydW5JZCkudG9NYXRjaCgvXndydW5fLisvKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgZXhwZWN0KHJ1bi5vdXRwdXQpLnRvQmVJbnN0YW5jZU9mKFVpbnQ4QXJyYXkpO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICBydW4ub3V0cHV0ISxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCgnbnVsbCBieXRlIFxcMCcpO1xuICB9KTtcbn1cbiJdfQ==