@t4h.framework/core 0.6.1 → 0.8.0

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 (125) hide show
  1. package/.ai/skills/framework-core/SKILL.md +103 -287
  2. package/.ai/skills/framework-workflow-creation/SKILL.md +108 -60
  3. package/.ai/skills/framework-workflow-testing/SKILL.md +165 -111
  4. package/README.md +123 -37
  5. package/dist/models/AsyncActivity.d.ts +1 -0
  6. package/dist/models/AsyncActivity.d.ts.map +1 -1
  7. package/dist/models/AsyncActivity.js +1 -0
  8. package/dist/models/AsyncActivity.js.map +1 -1
  9. package/dist/models/History.d.ts +1 -0
  10. package/dist/models/History.d.ts.map +1 -1
  11. package/dist/models/History.js +3 -0
  12. package/dist/models/History.js.map +1 -1
  13. package/dist/models/SyncActivity.d.ts +1 -0
  14. package/dist/models/SyncActivity.d.ts.map +1 -1
  15. package/dist/models/SyncActivity.js +1 -0
  16. package/dist/models/SyncActivity.js.map +1 -1
  17. package/dist/testing/ActivityTesting.d.ts +1 -1
  18. package/dist/testing/ActivityTesting.d.ts.map +1 -1
  19. package/dist/testing/ActivityTesting.js.map +1 -1
  20. package/dist/testing/TestClock.d.ts.map +1 -1
  21. package/dist/testing/TestClock.js +1 -2
  22. package/dist/testing/TestClock.js.map +1 -1
  23. package/dist/testing/TestWorkflowEnvironment.d.ts +6 -18
  24. package/dist/testing/TestWorkflowEnvironment.d.ts.map +1 -1
  25. package/dist/testing/TestWorkflowEnvironment.js +35 -93
  26. package/dist/testing/TestWorkflowEnvironment.js.map +1 -1
  27. package/dist/testing/WorkflowTesting.d.ts +1 -1
  28. package/dist/testing/async-activity-results.d.ts +12 -0
  29. package/dist/testing/async-activity-results.d.ts.map +1 -0
  30. package/dist/testing/async-activity-results.js +10 -0
  31. package/dist/testing/async-activity-results.js.map +1 -0
  32. package/dist/testing/create-mock-claim.d.ts +11 -5
  33. package/dist/testing/create-mock-claims.d.ts +12 -8
  34. package/dist/testing/create-test-env.d.ts +10 -4
  35. package/dist/testing/exceptions/NonDeterministicWorkflowError.d.ts +4 -0
  36. package/dist/testing/exceptions/NonDeterministicWorkflowError.d.ts.map +1 -0
  37. package/dist/testing/exceptions/NonDeterministicWorkflowError.js +7 -0
  38. package/dist/testing/exceptions/NonDeterministicWorkflowError.js.map +1 -0
  39. package/dist/testing/index.d.ts +8 -1
  40. package/dist/testing/index.d.ts.map +1 -1
  41. package/dist/testing/index.js +8 -1
  42. package/dist/testing/index.js.map +1 -1
  43. package/dist/testing/mock-async.d.ts +48 -0
  44. package/dist/testing/mock-async.d.ts.map +1 -0
  45. package/dist/testing/mock-async.js +58 -0
  46. package/dist/testing/mock-async.js.map +1 -0
  47. package/dist/testing/outcomes.d.ts +12 -0
  48. package/dist/testing/outcomes.d.ts.map +1 -0
  49. package/dist/testing/outcomes.js +10 -0
  50. package/dist/testing/outcomes.js.map +1 -0
  51. package/dist/testing/run-workflow.d.ts +22 -21
  52. package/dist/testing/run-workflow.d.ts.map +1 -1
  53. package/dist/testing/run-workflow.js +91 -33
  54. package/dist/testing/run-workflow.js.map +1 -1
  55. package/dist/testing/tools/create-mock-claim.d.ts +5 -0
  56. package/dist/testing/tools/create-mock-claim.d.ts.map +1 -0
  57. package/dist/testing/tools/create-mock-claim.js +26 -0
  58. package/dist/testing/tools/create-mock-claim.js.map +1 -0
  59. package/dist/testing/tools/create-mock-claims.d.ts +8 -0
  60. package/dist/testing/tools/create-mock-claims.d.ts.map +1 -0
  61. package/dist/testing/tools/create-mock-claims.js +5 -0
  62. package/dist/testing/tools/create-mock-claims.js.map +1 -0
  63. package/dist/testing/tools/create-test-env.d.ts +4 -0
  64. package/dist/testing/tools/create-test-env.d.ts.map +1 -0
  65. package/dist/testing/tools/create-test-env.js +7 -0
  66. package/dist/testing/tools/create-test-env.js.map +1 -0
  67. package/dist/testing/tools/mock-async.d.ts +20 -0
  68. package/dist/testing/tools/mock-async.d.ts.map +1 -0
  69. package/dist/testing/tools/mock-async.js +57 -0
  70. package/dist/testing/tools/mock-async.js.map +1 -0
  71. package/dist/testing/tools/resolve-activity.d.ts +11 -0
  72. package/dist/testing/tools/resolve-activity.d.ts.map +1 -0
  73. package/dist/testing/tools/resolve-activity.js +23 -0
  74. package/dist/testing/tools/resolve-activity.js.map +1 -0
  75. package/dist/testing/tools/resolve-async-activity.d.ts +15 -0
  76. package/dist/testing/tools/resolve-async-activity.d.ts.map +1 -0
  77. package/dist/testing/tools/resolve-async-activity.js +69 -0
  78. package/dist/testing/tools/resolve-async-activity.js.map +1 -0
  79. package/dist/testing/tools/run-with-clock.d.ts +3 -0
  80. package/dist/testing/tools/run-with-clock.d.ts.map +1 -0
  81. package/dist/testing/tools/run-with-clock.js +7 -0
  82. package/dist/testing/tools/run-with-clock.js.map +1 -0
  83. package/dist/testing/tools/run-workflow-ticks.d.ts +8 -0
  84. package/dist/testing/tools/run-workflow-ticks.d.ts.map +1 -0
  85. package/dist/testing/tools/run-workflow-ticks.js +26 -0
  86. package/dist/testing/tools/run-workflow-ticks.js.map +1 -0
  87. package/dist/testing/tools/run-workflow.d.ts +25 -0
  88. package/dist/testing/tools/run-workflow.d.ts.map +1 -0
  89. package/dist/testing/tools/run-workflow.js +25 -0
  90. package/dist/testing/tools/run-workflow.js.map +1 -0
  91. package/dist/testing/types.d.ts +1 -1
  92. package/dist/testing/types.d.ts.map +1 -1
  93. package/dist/testing/typings/AsyncActivityResult.d.ts +10 -0
  94. package/dist/testing/typings/AsyncActivityResult.d.ts.map +1 -0
  95. package/dist/testing/typings/AsyncActivityResult.js +2 -0
  96. package/dist/testing/typings/AsyncActivityResult.js.map +1 -0
  97. package/dist/testing/typings/ClaimConstructor.d.ts +2 -0
  98. package/dist/testing/typings/ClaimConstructor.d.ts.map +1 -0
  99. package/dist/testing/typings/ClaimConstructor.js +2 -0
  100. package/dist/testing/typings/ClaimConstructor.js.map +1 -0
  101. package/dist/testing/typings/MockAsyncActivity.d.ts +10 -0
  102. package/dist/testing/typings/MockAsyncActivity.d.ts.map +1 -0
  103. package/dist/testing/typings/MockAsyncActivity.js +2 -0
  104. package/dist/testing/typings/MockAsyncActivity.js.map +1 -0
  105. package/dist/tools/Internals.d.ts +1 -0
  106. package/dist/tools/Internals.d.ts.map +1 -1
  107. package/dist/tools/Internals.js +1 -0
  108. package/dist/tools/Internals.js.map +1 -1
  109. package/package.json +3 -2
  110. package/dist/testing/auto-resolve-timeouts.d.ts +0 -3
  111. package/dist/testing/auto-resolve-timeouts.d.ts.map +0 -1
  112. package/dist/testing/auto-resolve-timeouts.js +0 -16
  113. package/dist/testing/auto-resolve-timeouts.js.map +0 -1
  114. package/dist/testing/mock-async-by-activity.d.ts +0 -10
  115. package/dist/testing/mock-async-by-activity.d.ts.map +0 -1
  116. package/dist/testing/mock-async-by-activity.js +0 -15
  117. package/dist/testing/mock-async-by-activity.js.map +0 -1
  118. package/dist/testing/resolve-async-activities-in-order.d.ts +0 -3
  119. package/dist/testing/resolve-async-activities-in-order.d.ts.map +0 -1
  120. package/dist/testing/resolve-async-activities-in-order.js +0 -10
  121. package/dist/testing/resolve-async-activities-in-order.js.map +0 -1
  122. package/dist/tools/runWorkflowToCompletion.d.ts +0 -15
  123. package/dist/tools/runWorkflowToCompletion.d.ts.map +0 -1
  124. package/dist/tools/runWorkflowToCompletion.js +0 -61
  125. package/dist/tools/runWorkflowToCompletion.js.map +0 -1
@@ -0,0 +1,12 @@
1
+ export declare function fulfilled<T>(output?: T): {
2
+ status: 'fulfilled';
3
+ output?: T;
4
+ };
5
+ export declare function rejected(reason?: unknown): {
6
+ status: 'rejected';
7
+ reason?: unknown;
8
+ };
9
+ export declare function timeout(): {
10
+ status: 'timeout';
11
+ };
12
+ //# sourceMappingURL=async-activity-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-activity-results.d.ts","sourceRoot":"","sources":["../../src/testing/async-activity-results.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,CAAA;CAAE,CAE5E;AAED,wBAAgB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG;IAC1C,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAEA;AAED,wBAAgB,OAAO,IAAI;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAE/C"}
@@ -0,0 +1,10 @@
1
+ export function fulfilled(output) {
2
+ return { status: 'fulfilled', output };
3
+ }
4
+ export function rejected(reason) {
5
+ return { status: 'rejected', reason };
6
+ }
7
+ export function timeout() {
8
+ return { status: 'timeout' };
9
+ }
10
+ //# sourceMappingURL=async-activity-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-activity-results.js","sourceRoot":"","sources":["../../src/testing/async-activity-results.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAI,MAAU;IACrC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAgB;IAIvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC"}
@@ -1,5 +1,11 @@
1
- import type { ClaimProvider } from '../models/Claim.js';
2
- import type { ClaimConstructor } from './types.js';
3
- export declare function createMockClaim<T extends ClaimConstructor>(ClaimClass: T, implementation?: Partial<InstanceType<T>>): InstanceType<T>;
4
- export declare function mockClaim<T extends ClaimConstructor>(ClaimClass: T, implementation?: Partial<InstanceType<T>>): ClaimProvider<InstanceType<T>>;
5
- //# sourceMappingURL=create-mock-claim.d.ts.map
1
+ import type { ClaimProvider } from '../../models/Claim.js'
2
+ import type { ClaimConstructor } from '../types.js'
3
+ export declare function createMockClaim<T extends ClaimConstructor>(
4
+ ClaimClass: T,
5
+ implementation?: Partial<InstanceType<T>>,
6
+ ): InstanceType<T>
7
+ export declare function mockClaim<T extends ClaimConstructor>(
8
+ ClaimClass: T,
9
+ implementation?: Partial<InstanceType<T>>,
10
+ ): ClaimProvider<InstanceType<T>>
11
+ //# sourceMappingURL=create-mock-claim.d.ts.map
@@ -1,9 +1,13 @@
1
- import type { ClaimConstructor } from './types.js';
2
- import type { ClaimProvider } from '../models/Claim.js';
3
- export declare function createMockClaims(...providers: readonly ClaimProvider<any>[]): readonly ClaimProvider<any>[];
1
+ import type { ClaimConstructor } from '../types.js'
2
+ import type { ClaimProvider } from '../../models/Claim.js'
3
+ export declare function createMockClaims(
4
+ ...providers: readonly ClaimProvider<any>[]
5
+ ): readonly ClaimProvider<any>[]
4
6
  export type MockClaimEntry = readonly [
5
- claim: ClaimConstructor,
6
- implementation?: Partial<InstanceType<ClaimConstructor>>
7
- ];
8
- export declare function createMockClaimsFromMap(entries: readonly MockClaimEntry[]): readonly ClaimProvider<any>[];
9
- //# sourceMappingURL=create-mock-claims.d.ts.map
7
+ claim: ClaimConstructor,
8
+ implementation?: Partial<InstanceType<ClaimConstructor>>,
9
+ ]
10
+ export declare function createMockClaimsFromMap(
11
+ entries: readonly MockClaimEntry[],
12
+ ): readonly ClaimProvider<any>[]
13
+ //# sourceMappingURL=create-mock-claims.d.ts.map
@@ -1,4 +1,10 @@
1
- import type { Env } from '../models/Env.js';
2
- export declare function createTestEnv(overrides: Record<string, string | undefined>, base?: Record<string, string | undefined>): Record<string, string | undefined>;
3
- export declare function createTestEnvEntries(overrides: Record<string, string | undefined>, base?: Record<string, string | undefined>): Env.Entries;
4
- //# sourceMappingURL=create-test-env.d.ts.map
1
+ import type { Env } from '../../models/Env.js'
2
+ export declare function createTestEnv(
3
+ overrides: Record<string, string | undefined>,
4
+ base?: Record<string, string | undefined>,
5
+ ): Record<string, string | undefined>
6
+ export declare function createTestEnvEntries(
7
+ overrides: Record<string, string | undefined>,
8
+ base?: Record<string, string | undefined>,
9
+ ): Env.Entries
10
+ //# sourceMappingURL=create-test-env.d.ts.map
@@ -0,0 +1,4 @@
1
+ export declare class NonDeterministicWorkflowError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ //# sourceMappingURL=NonDeterministicWorkflowError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NonDeterministicWorkflowError.d.ts","sourceRoot":"","sources":["../../../src/testing/exceptions/NonDeterministicWorkflowError.ts"],"names":[],"mappings":"AAAA,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAK5B"}
@@ -0,0 +1,7 @@
1
+ export class NonDeterministicWorkflowError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'NonDeterministicWorkflowError';
5
+ }
6
+ }
7
+ //# sourceMappingURL=NonDeterministicWorkflowError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NonDeterministicWorkflowError.js","sourceRoot":"","sources":["../../../src/testing/exceptions/NonDeterministicWorkflowError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAA;IAC7C,CAAC;CACF"}
@@ -1,2 +1,9 @@
1
- export * from './WorkflowTesting.js';
1
+ export * from './tools/mock-async.js';
2
+ export * from './tools/create-mock-claim.js';
3
+ export * from './tools/create-mock-claims.js';
4
+ export * from './tools/create-test-env.js';
5
+ export * from './async-activity-results.js';
6
+ export * from './TestClock.js';
7
+ export * from './TestWorkflowEnvironment.js';
8
+ export * from './exceptions/NonDeterministicWorkflowError.js';
2
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+CAA+C,CAAA"}
@@ -1,2 +1,9 @@
1
- export * from './WorkflowTesting.js';
1
+ export * from './tools/mock-async.js';
2
+ export * from './tools/create-mock-claim.js';
3
+ export * from './tools/create-mock-claims.js';
4
+ export * from './tools/create-test-env.js';
5
+ export * from './async-activity-results.js';
6
+ export * from './TestClock.js';
7
+ export * from './TestWorkflowEnvironment.js';
8
+ export * from './exceptions/NonDeterministicWorkflowError.js';
2
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+CAA+C,CAAA"}
@@ -0,0 +1,48 @@
1
+ import type { MockAsyncActivity } from '../types.js'
2
+ import {
3
+ AsyncActivity,
4
+ type AnyAsyncActivity,
5
+ } from '../../models/AsyncActivity.js'
6
+ import type { AsyncActivityResultPending } from '../../models/AsyncActivityAdvanceResult.js'
7
+ type InferSerializableOutput<T extends AnyAsyncActivity> =
8
+ T extends AsyncActivity<any, any, infer TSerializableOutput, any, any, any>
9
+ ? TSerializableOutput
10
+ : unknown
11
+ type TypedOutcome<TOutput> =
12
+ | {
13
+ status: 'fulfilled'
14
+ output?: TOutput
15
+ }
16
+ | {
17
+ status: 'rejected'
18
+ reason?: unknown
19
+ }
20
+ | {
21
+ status: 'timeout'
22
+ }
23
+ interface OnContext {
24
+ callCount: number
25
+ input: unknown
26
+ pending: AsyncActivityResultPending
27
+ }
28
+ type OnCallback<T extends AnyAsyncActivity> = (
29
+ activity: T,
30
+ context: OnContext,
31
+ ) =>
32
+ | TypedOutcome<InferSerializableOutput<T>>
33
+ | Promise<TypedOutcome<InferSerializableOutput<T>>>
34
+ type OnHandler<T extends AnyAsyncActivity> =
35
+ | TypedOutcome<InferSerializableOutput<T>>
36
+ | TypedOutcome<InferSerializableOutput<T>>[]
37
+ | OnCallback<T>
38
+ export interface MockAsyncBuilder extends MockAsyncActivity {
39
+ on<T extends AnyAsyncActivity>(
40
+ ActivityClass: new () => T,
41
+ handler: OnHandler<T>,
42
+ ): MockAsyncBuilder
43
+ timeout(): MockAsyncBuilder
44
+ fallback(handler: MockAsyncActivity): MockAsyncBuilder
45
+ }
46
+ export declare function mockAsync(): MockAsyncBuilder
47
+ export {}
48
+ //# sourceMappingURL=mock-async.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-async.d.ts","sourceRoot":"","sources":["../../src/testing/mock-async.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,aAAa,EACb,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AAEzF,KAAK,uBAAuB,CAAC,CAAC,SAAS,gBAAgB,IACrD,CAAC,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GACvE,mBAAmB,GACnB,OAAO,CAAA;AAEb,KAAK,YAAY,CAAC,OAAO,IACrB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA;AAEzB,UAAU,SAAS;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,0BAA0B,CAAA;CACpC;AAED,KAAK,UAAU,CAAC,CAAC,SAAS,gBAAgB,IAAI,CAC5C,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,SAAS,KAEhB,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAErD,KAAK,SAAS,CAAC,CAAC,SAAS,gBAAgB,IACrC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GACxC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,GAC1C,UAAU,CAAC,CAAC,CAAC,CAAA;AAQjB,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAC3B,aAAa,EAAE,UAAU,CAAC,EAC1B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GACpB,gBAAgB,CAAA;IAEnB,OAAO,IAAI,gBAAgB,CAAA;IAE3B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAAA;CACvD;AAED,wBAAgB,SAAS,IAAI,gBAAgB,CA+E5C"}
@@ -0,0 +1,58 @@
1
+ import { TestClock } from './TestClock.js';
2
+ import { AsyncActivity, } from '../models/AsyncActivity.js';
3
+ export function mockAsync() {
4
+ const entries = [];
5
+ let timeoutFallback = false;
6
+ let fallbackHandler;
7
+ const execute = async (activity, context) => {
8
+ for (const entry of entries) {
9
+ if (!(activity instanceof entry.ActivityClass))
10
+ continue;
11
+ const callCount = entry.callCount++;
12
+ const ctx = {
13
+ callCount,
14
+ input: context.input,
15
+ pending: context.pending,
16
+ };
17
+ if (typeof entry.handler === 'function') {
18
+ return entry.handler(activity, ctx);
19
+ }
20
+ if (Array.isArray(entry.handler)) {
21
+ const outcome = entry.handler[callCount];
22
+ if (outcome === undefined)
23
+ throw new Error(`mockAsync().on(${activity.constructor.name}): no outcome at call ${callCount} (${entry.handler.length} defined)`);
24
+ return outcome;
25
+ }
26
+ return entry.handler;
27
+ }
28
+ if (timeoutFallback && context.pending.timeoutAt) {
29
+ const target = context.pending.timeoutAt.getTime();
30
+ if (TestClock.isActive() && TestClock.now() < target)
31
+ TestClock.advance(target - TestClock.now());
32
+ return { status: 'timeout' };
33
+ }
34
+ if (fallbackHandler)
35
+ return fallbackHandler(activity, context);
36
+ throw new Error(`mockAsync(): no handler registered for "${activity.constructor.name}"`);
37
+ };
38
+ const builder = Object.assign(execute, {
39
+ on(ActivityClass, handler) {
40
+ entries.push({
41
+ ActivityClass: ActivityClass,
42
+ handler: handler,
43
+ callCount: 0,
44
+ });
45
+ return builder;
46
+ },
47
+ timeout() {
48
+ timeoutFallback = true;
49
+ return builder;
50
+ },
51
+ fallback(handler) {
52
+ fallbackHandler = handler;
53
+ return builder;
54
+ },
55
+ });
56
+ return builder;
57
+ }
58
+ //# sourceMappingURL=mock-async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-async.js","sourceRoot":"","sources":["../../src/testing/mock-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAM1C,OAAO,EACL,aAAa,GAEd,MAAM,4BAA4B,CAAA;AAgDnC,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAc,EAAE,CAAA;IAC7B,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,eAA8C,CAAA;IAElD,MAAM,OAAO,GAAsB,KAAK,EACtC,QAA0B,EAC1B,OAAiC,EACF,EAAE;QACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,aAAa,CAAC;gBAAE,SAAQ;YAExD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;YACnC,MAAM,GAAG,GAAc;gBACrB,SAAS;gBACT,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAA;YAED,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACxC,OAAQ,KAAK,CAAC,OAAwC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACvE,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBAExC,IAAI,OAAO,KAAK,SAAS;oBACvB,MAAM,IAAI,KAAK,CACb,kBAAkB,QAAQ,CAAC,WAAW,CAAC,IAAI,yBAAyB,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,WAAW,CAClH,CAAA;gBAEH,OAAO,OAAO,CAAA;YAChB,CAAC;YAED,OAAO,KAAK,CAAC,OAAO,CAAA;QACtB,CAAC;QAED,IAAI,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;YAElD,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM;gBAClD,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,CAAA;YAE7C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QAC9B,CAAC;QAED,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE9D,MAAM,IAAI,KAAK,CACb,2CAA2C,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CACxE,CAAA;IACH,CAAC,CAAA;IAED,MAAM,OAAO,GAAqB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QACvD,EAAE,CACA,aAA0B,EAC1B,OAAqB;YAErB,OAAO,CAAC,IAAI,CAAC;gBACX,aAAa,EAAE,aAA2C;gBAC1D,OAAO,EAAE,OAAsC;gBAC/C,SAAS,EAAE,CAAC;aACb,CAAC,CAAA;YAEF,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,OAAO;YACL,eAAe,GAAG,IAAI,CAAA;YACtB,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,QAAQ,CAAC,OAA0B;YACjC,eAAe,GAAG,OAAO,CAAA;YACzB,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare function fulfilled<T>(output?: T): {
2
+ status: 'fulfilled';
3
+ output?: T;
4
+ };
5
+ export declare function rejected(reason?: unknown): {
6
+ status: 'rejected';
7
+ reason?: unknown;
8
+ };
9
+ export declare function timeout(): {
10
+ status: 'timeout';
11
+ };
12
+ //# sourceMappingURL=outcomes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomes.d.ts","sourceRoot":"","sources":["../../src/testing/outcomes.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,CAAA;CAAE,CAE5E;AAED,wBAAgB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAEnF;AAED,wBAAgB,OAAO,IAAI;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAE/C"}
@@ -0,0 +1,10 @@
1
+ export function fulfilled(output) {
2
+ return { status: 'fulfilled', output };
3
+ }
4
+ export function rejected(reason) {
5
+ return { status: 'rejected', reason };
6
+ }
7
+ export function timeout() {
8
+ return { status: 'timeout' };
9
+ }
10
+ //# sourceMappingURL=outcomes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomes.js","sourceRoot":"","sources":["../../src/testing/outcomes.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAI,MAAU;IACrC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAgB;IACvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC"}
@@ -1,31 +1,32 @@
1
- import { type AnyAsyncActivity } from '../models/AsyncActivity.js';
2
- import { AsyncActivityResultPending } from '../models/AsyncActivityAdvanceResult.js';
1
+ import { type TestClockRunOptions } from './TestClock.js';
2
+ import type { MockAsyncActivity } from './types.js';
3
3
  import type { ClaimProvider } from '../models/Claim.js';
4
- import { Env } from '../models/Env.js';
4
+ import type { Env } from '../models/Env.js';
5
+ import type { HistoryItem } from '../models/History.js';
5
6
  import type { Log } from '../models/Logger.js';
6
7
  import type { Workflow, WorkflowInput } from '../models/Workflow.js';
7
- interface MockAsyncActivityContext {
8
- input: unknown;
9
- pending: AsyncActivityResultPending;
10
- index: number;
11
- }
12
- export type AsyncActivityOutcome = {
13
- status: 'fulfilled';
14
- output?: unknown;
15
- } | {
16
- status: 'rejected';
17
- reason?: unknown;
18
- } | {
19
- status: 'timeout';
20
- };
21
- type MockAsyncActivity = (activity: AnyAsyncActivity, context: MockAsyncActivityContext) => AsyncActivityOutcome | Promise<AsyncActivityOutcome>;
8
+ export type { AsyncActivityOutcome, MockAsyncActivity, MockAsyncActivityContext, } from './types.js';
22
9
  export interface RunWorkflowOptions {
23
10
  claims?: readonly ClaimProvider<any>[];
24
11
  env?: Env.Entries;
25
- mockAsyncActivity?: MockAsyncActivity | readonly AsyncActivityOutcome[];
12
+ mockAsyncActivity?: MockAsyncActivity;
26
13
  maxTicks?: number;
27
14
  logs?: Log[];
15
+ history?: HistoryItem[];
16
+ clock?: TestClockRunOptions | false;
17
+ strict?: boolean;
18
+ autoResolveTimeouts?: boolean;
19
+ }
20
+ export interface RunWorkflowResult<TOutput = unknown> {
21
+ output: TOutput;
22
+ history: readonly HistoryItem[];
23
+ logs: readonly Log[];
24
+ clockNow?: number;
28
25
  }
29
- export declare function runWorkflow<T extends Workflow<any, any>>(workflow: T, input: WorkflowInput<T>, options?: RunWorkflowOptions): Promise<any>;
30
- export {};
26
+ export declare function runWorkflow<T extends Workflow<any, any>>(workflow: T, input: WorkflowInput<T>, options?: RunWorkflowOptions): Promise<unknown>;
27
+ export declare function runWorkflowDetailed<T extends Workflow<any, any>>(workflow: T, input: WorkflowInput<T>, options?: RunWorkflowOptions): Promise<RunWorkflowResult>;
28
+ export declare function runWorkflowTicks<T extends Workflow<any, any>>(workflow: T, input: WorkflowInput<T>, options: RunWorkflowOptions & {
29
+ history: HistoryItem[];
30
+ logs: Log[];
31
+ }): Promise<any>;
31
32
  //# sourceMappingURL=run-workflow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-workflow.d.ts","sourceRoot":"","sources":["../../src/testing/run-workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAEL,0BAA0B,EAE3B,MAAM,yCAAyC,CAAA;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAG9C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGpE,UAAU,wBAAwB;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,0BAA0B,CAAA;IACnC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA;AAEzB,KAAK,iBAAiB,GAAG,CACvB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,wBAAwB,KAC9B,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAEzD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAAA;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACjB,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,SAAS,oBAAoB,EAAE,CAAA;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;CACb;AA6BD,wBAAsB,WAAW,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAC5D,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,OAAO,GAAE,kBAAuB,gBAmCjC"}
1
+ {"version":3,"file":"run-workflow.d.ts","sourceRoot":"","sources":["../../src/testing/run-workflow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpE,OAAO,KAAK,EAAwB,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAWzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAG9C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGpE,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAAA;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACjB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,GAAG,OAAO;IAClD,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,IAAI,EAAE,SAAS,GAAG,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAqBD,wBAAsB,WAAW,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAC5D,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,OAAO,GAAE,kBAAuB,oBAKjC;AAED,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EACpE,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;AAED,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EACjE,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,kBAAkB,GAAG;IAC5B,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ,gBAkCF"}
@@ -1,33 +1,57 @@
1
+ import { mockAsync } from './mock-async.js';
2
+ import { StrictGuard } from './StrictGuard.js';
3
+ import { TestClock } from './TestClock.js';
1
4
  import { AsyncActivity, } from '../models/AsyncActivity.js';
2
5
  import { AsyncActivityResultFulfilled, AsyncActivityResultPending, AsyncActivityResultRejected, } from '../models/AsyncActivityAdvanceResult.js';
3
- import { Env } from '../models/Env.js';
4
6
  import { PushActivity } from '../models/PushActivity.js';
5
7
  import { SyncActivity } from '../models/SyncActivity.js';
6
8
  import { Internals } from '../tools/Internals.js';
7
- function mockAsyncActivities(outcomes) {
8
- const queue = [...outcomes];
9
- return (activity, context) => {
10
- const next = queue.shift();
11
- if (!next)
12
- throw new Error(`No more async outcomes (activity: "${activity.constructor.name}", index: ${context.index}, input: ${JSON.stringify(context.input)})`);
13
- return next;
14
- };
9
+ function resolveMockAsyncActivity(options) {
10
+ if (options.mockAsyncActivity !== undefined)
11
+ return options.mockAsyncActivity;
12
+ if (options.autoResolveTimeouts)
13
+ return mockAsync().timeout();
14
+ return undefined;
15
15
  }
16
- function normalizeMockAsyncActivity(mock) {
17
- if (!mock)
18
- return undefined;
19
- if (Array.isArray(mock))
20
- return mockAsyncActivities(mock);
21
- return mock;
16
+ function runWithClock(clock, fn) {
17
+ if (clock === false || clock === undefined)
18
+ return fn();
19
+ return TestClock.run(clock, fn);
22
20
  }
23
21
  export async function runWorkflow(workflow, input, options = {}) {
22
+ const { output } = await runWorkflowDetailed(workflow, input, options);
23
+ return output;
24
+ }
25
+ export async function runWorkflowDetailed(workflow, input, options = {}) {
26
+ const history = options.history ?? [];
27
+ const logs = options.logs ?? [];
28
+ const restoreStrict = options.strict ? StrictGuard.install() : undefined;
29
+ let clockNow;
30
+ try {
31
+ const output = await runWithClock(options.clock, async () => {
32
+ const result = await runWorkflowTicks(workflow, input, {
33
+ ...options,
34
+ history,
35
+ logs,
36
+ mockAsyncActivity: resolveMockAsyncActivity(options),
37
+ });
38
+ if (TestClock.isActive())
39
+ clockNow = TestClock.now();
40
+ return result;
41
+ });
42
+ return { output, history, logs, clockNow };
43
+ }
44
+ finally {
45
+ restoreStrict?.();
46
+ }
47
+ }
48
+ export async function runWorkflowTicks(workflow, input, options) {
24
49
  const claims = options.claims ?? [];
25
50
  const env = options.env ?? {};
26
51
  const maxTicks = options.maxTicks ?? 10_000;
27
- const history = [];
28
- const logs = options.logs ?? [];
29
- const mocks = normalizeMockAsyncActivity(options.mockAsyncActivity);
30
- const resolutionState = { index: 0 };
52
+ const { history, logs } = options;
53
+ const mock = options.mockAsyncActivity;
54
+ const resolutionState = { callCount: 0 };
31
55
  for (let tick = 0; tick < maxTicks; tick++) {
32
56
  try {
33
57
  return await Internals.runWorkflow(workflow, {
@@ -41,7 +65,7 @@ export async function runWorkflow(workflow, input, options = {}) {
41
65
  catch (pushOrError) {
42
66
  if (!(pushOrError instanceof PushActivity))
43
67
  throw pushOrError;
44
- const item = await resolveActivity(pushOrError, { claims, env }, mocks, resolutionState);
68
+ const item = await resolveActivity(pushOrError, { claims, env }, mock, resolutionState);
45
69
  history.push(item);
46
70
  }
47
71
  }
@@ -49,50 +73,84 @@ export async function runWorkflow(workflow, input, options = {}) {
49
73
  }
50
74
  async function resolveActivity(push, context, mockAsyncActivity, resolutionState) {
51
75
  const activity = push.activity;
76
+ const activityContext = {
77
+ ...context,
78
+ id: activity.id,
79
+ };
52
80
  if (activity instanceof SyncActivity) {
53
- const output = await Internals.runActivity(activity, context, instance => instance.run(push.input));
54
- return { type: 'sync', output };
81
+ const output = await Internals.runActivity(activity, activityContext, instance => instance.run(push.input));
82
+ return { id: activity.id, type: 'sync', output };
55
83
  }
56
84
  if (activity instanceof AsyncActivity) {
57
- const bootstrap = await Internals.runActivity(activity, context, instance => instance.bootstrap(push.input));
58
- return resolveAsyncActivity(activity, bootstrap, context, push.input, mockAsyncActivity, resolutionState);
85
+ const bootstrap = await Internals.runActivity(activity, activityContext, instance => instance.bootstrap(push.input));
86
+ return resolveAsyncActivity(activity, bootstrap, activityContext, push.input, mockAsyncActivity, resolutionState);
59
87
  }
60
88
  throw new Error('Unknown activity type');
61
89
  }
62
90
  async function resolveAsyncActivity(activity, bootstrap, context, input, mockAsyncActivity, resolutionState) {
63
91
  if (bootstrap instanceof AsyncActivityResultFulfilled)
64
- return { type: 'async', status: 'fulfilled', output: bootstrap.payload };
92
+ return {
93
+ id: activity.id,
94
+ type: 'async',
95
+ status: 'fulfilled',
96
+ output: bootstrap.payload,
97
+ };
65
98
  if (bootstrap instanceof AsyncActivityResultRejected)
66
- return { type: 'async', status: 'rejected', output: bootstrap.payload };
99
+ return {
100
+ id: activity.id,
101
+ type: 'async',
102
+ status: 'rejected',
103
+ output: bootstrap.payload,
104
+ };
67
105
  if (!(bootstrap instanceof AsyncActivityResultPending))
68
106
  throw new Error('Unknown async activity result');
69
107
  const name = activity.constructor.name;
70
108
  if (!mockAsyncActivity)
71
- throw new Error(`Async activity "${name}" is pending and no resolveAsyncActivity was provided`);
109
+ throw new Error(`Async activity "${name}" is pending and no mockAsyncActivity was provided`);
72
110
  const outcome = await mockAsyncActivity(activity, {
73
111
  input,
74
112
  pending: bootstrap,
75
- index: resolutionState?.index ?? 0,
113
+ callCount: resolutionState?.callCount ?? 0,
76
114
  });
77
115
  if (resolutionState)
78
- resolutionState.index++;
116
+ resolutionState.callCount++;
79
117
  return outcomeToHistoryItem(activity, outcome, bootstrap, context, name);
80
118
  }
81
119
  async function outcomeToHistoryItem(activity, outcome, pending, context, name) {
82
120
  switch (outcome.status) {
83
121
  case 'fulfilled':
84
- return { type: 'async', status: 'fulfilled', output: outcome.output };
122
+ return {
123
+ id: activity.id,
124
+ type: 'async',
125
+ status: 'fulfilled',
126
+ output: outcome.output,
127
+ };
85
128
  case 'rejected':
86
- return { type: 'async', status: 'rejected', output: outcome.reason };
129
+ return {
130
+ id: activity.id,
131
+ type: 'async',
132
+ status: 'rejected',
133
+ output: outcome.reason,
134
+ };
87
135
  case 'timeout': {
88
136
  const onTimeout = activity.onTimeout?.bind(activity);
89
137
  if (!onTimeout)
90
138
  throw new Error(`Async activity "${name}" timed out but defines no onTimeout handler`);
91
139
  const result = await Internals.runActivity(activity, context, () => onTimeout(pending));
92
140
  if (result instanceof AsyncActivityResultFulfilled)
93
- return { type: 'async', status: 'fulfilled', output: result.payload };
141
+ return {
142
+ id: activity.id,
143
+ type: 'async',
144
+ status: 'fulfilled',
145
+ output: result.payload,
146
+ };
94
147
  if (result instanceof AsyncActivityResultRejected)
95
- return { type: 'async', status: 'rejected', output: result.payload };
148
+ return {
149
+ id: activity.id,
150
+ type: 'async',
151
+ status: 'rejected',
152
+ output: result.payload,
153
+ };
96
154
  throw new Error(`Async activity "${name}" stayed pending after onTimeout`);
97
155
  }
98
156
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"run-workflow.js","sourceRoot":"","sources":["../../src/testing/run-workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-workflow.js","sourceRoot":"","sources":["../../src/testing/run-workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ClaimProvider } from '../../models/Claim.js';
2
+ import type { ClaimConstructor } from '../typings/ClaimConstructor.js';
3
+ export declare function createMockClaim<T extends ClaimConstructor>(ClaimClass: T, implementation?: Partial<InstanceType<T>>): InstanceType<T>;
4
+ export declare function mockClaim<T extends ClaimConstructor>(ClaimClass: T, implementation?: Partial<InstanceType<T>>): ClaimProvider<InstanceType<T>>;
5
+ //# sourceMappingURL=create-mock-claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mock-claim.d.ts","sourceRoot":"","sources":["../../../src/testing/tools/create-mock-claim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,wBAAgB,eAAe,CAAC,CAAC,SAAS,gBAAgB,EACxD,UAAU,EAAE,CAAC,EACb,cAAc,GAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAM,GAC5C,YAAY,CAAC,CAAC,CAAC,CAuBjB;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,gBAAgB,EAClD,UAAU,EAAE,CAAC,EACb,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACxC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAKhC"}
@@ -0,0 +1,26 @@
1
+ export function createMockClaim(ClaimClass, implementation = {}) {
2
+ const name = ClaimClass.name;
3
+ return new Proxy(implementation, {
4
+ get(target, propertyKey, receiver) {
5
+ if (propertyKey in target) {
6
+ const value = Reflect.get(target, propertyKey, receiver);
7
+ if (typeof value === 'function')
8
+ return value.bind(target);
9
+ return value;
10
+ }
11
+ if (propertyKey === 'then')
12
+ return undefined;
13
+ return () => {
14
+ throw new Error(`Mock ${name}.${String(propertyKey)} was not implemented. ` +
15
+ `Provide it via mockClaim(${name}, { ${String(propertyKey)}: ... }).`);
16
+ };
17
+ },
18
+ });
19
+ }
20
+ export function mockClaim(ClaimClass, implementation) {
21
+ return {
22
+ provide: ClaimClass,
23
+ value: createMockClaim(ClaimClass, implementation ?? {}),
24
+ };
25
+ }
26
+ //# sourceMappingURL=create-mock-claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mock-claim.js","sourceRoot":"","sources":["../../../src/testing/tools/create-mock-claim.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,eAAe,CAC7B,UAAa,EACb,iBAA2C,EAAE;IAE7C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAE5B,OAAO,IAAI,KAAK,CAAC,cAAwB,EAAE;QACzC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ;YAC/B,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;gBAExD,IAAI,OAAO,KAAK,KAAK,UAAU;oBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAE1D,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,WAAW,KAAK,MAAM;gBAAE,OAAO,SAAS,CAAA;YAE5C,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,KAAK,CACb,QAAQ,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,wBAAwB;oBACzD,4BAA4B,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CACxE,CAAA;YACH,CAAC,CAAA;QACH,CAAC;KACF,CAAoB,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,UAAa,EACb,cAAyC;IAEzC,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE,cAAc,IAAI,EAAE,CAAC;KACzD,CAAA;AACH,CAAC"}