@t4h.framework/core 0.7.0 → 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 (118) 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/ExecutionContext.d.ts +8 -0
  6. package/dist/models/ExecutionContext.d.ts.map +1 -0
  7. package/dist/models/ExecutionContext.js +22 -0
  8. package/dist/models/ExecutionContext.js.map +1 -0
  9. package/dist/testing/ActivityTesting.d.ts +25 -0
  10. package/dist/testing/ActivityTesting.d.ts.map +1 -0
  11. package/dist/testing/ActivityTesting.js +74 -0
  12. package/dist/testing/ActivityTesting.js.map +1 -0
  13. package/dist/testing/NonDeterministicWorkflowError.d.ts +4 -0
  14. package/dist/testing/NonDeterministicWorkflowError.d.ts.map +1 -0
  15. package/dist/testing/NonDeterministicWorkflowError.js +7 -0
  16. package/dist/testing/NonDeterministicWorkflowError.js.map +1 -0
  17. package/dist/testing/StrictGuard.d.ts +4 -0
  18. package/dist/testing/StrictGuard.d.ts.map +1 -0
  19. package/dist/testing/StrictGuard.js +26 -0
  20. package/dist/testing/StrictGuard.js.map +1 -0
  21. package/dist/testing/TestClock.d.ts +12 -0
  22. package/dist/testing/TestClock.d.ts.map +1 -0
  23. package/dist/testing/TestClock.js +64 -0
  24. package/dist/testing/TestClock.js.map +1 -0
  25. package/dist/testing/TestWorkflowEnvironment.d.ts +27 -0
  26. package/dist/testing/TestWorkflowEnvironment.d.ts.map +1 -0
  27. package/dist/testing/TestWorkflowEnvironment.js +62 -0
  28. package/dist/testing/TestWorkflowEnvironment.js.map +1 -0
  29. package/dist/testing/WorkflowTesting.d.ts +1 -1
  30. package/dist/testing/async-activity-results.d.ts +12 -0
  31. package/dist/testing/async-activity-results.d.ts.map +1 -0
  32. package/dist/testing/async-activity-results.js +10 -0
  33. package/dist/testing/async-activity-results.js.map +1 -0
  34. package/dist/testing/create-mock-claim.d.ts +11 -0
  35. package/dist/testing/create-mock-claim.d.ts.map +1 -0
  36. package/dist/testing/create-mock-claim.js +26 -0
  37. package/dist/testing/create-mock-claim.js.map +1 -0
  38. package/dist/testing/create-mock-claims.d.ts +13 -0
  39. package/dist/testing/create-mock-claims.d.ts.map +1 -0
  40. package/dist/testing/create-mock-claims.js +8 -0
  41. package/dist/testing/create-mock-claims.js.map +1 -0
  42. package/dist/testing/create-test-env.d.ts +10 -0
  43. package/dist/testing/create-test-env.d.ts.map +1 -0
  44. package/dist/testing/create-test-env.js +7 -0
  45. package/dist/testing/create-test-env.js.map +1 -0
  46. package/dist/testing/exceptions/NonDeterministicWorkflowError.d.ts +4 -0
  47. package/dist/testing/exceptions/NonDeterministicWorkflowError.d.ts.map +1 -0
  48. package/dist/testing/exceptions/NonDeterministicWorkflowError.js +7 -0
  49. package/dist/testing/exceptions/NonDeterministicWorkflowError.js.map +1 -0
  50. package/dist/testing/index.d.ts +8 -1
  51. package/dist/testing/index.d.ts.map +1 -1
  52. package/dist/testing/index.js +8 -1
  53. package/dist/testing/index.js.map +1 -1
  54. package/dist/testing/mock-async.d.ts +48 -0
  55. package/dist/testing/mock-async.d.ts.map +1 -0
  56. package/dist/testing/mock-async.js +58 -0
  57. package/dist/testing/mock-async.js.map +1 -0
  58. package/dist/testing/outcomes.d.ts +12 -0
  59. package/dist/testing/outcomes.d.ts.map +1 -0
  60. package/dist/testing/outcomes.js +10 -0
  61. package/dist/testing/outcomes.js.map +1 -0
  62. package/dist/testing/run-workflow.d.ts +22 -21
  63. package/dist/testing/run-workflow.d.ts.map +1 -1
  64. package/dist/testing/run-workflow.js +47 -23
  65. package/dist/testing/run-workflow.js.map +1 -1
  66. package/dist/testing/tools/create-mock-claim.d.ts +5 -0
  67. package/dist/testing/tools/create-mock-claim.d.ts.map +1 -0
  68. package/dist/testing/tools/create-mock-claim.js +26 -0
  69. package/dist/testing/tools/create-mock-claim.js.map +1 -0
  70. package/dist/testing/tools/create-mock-claims.d.ts +8 -0
  71. package/dist/testing/tools/create-mock-claims.d.ts.map +1 -0
  72. package/dist/testing/tools/create-mock-claims.js +5 -0
  73. package/dist/testing/tools/create-mock-claims.js.map +1 -0
  74. package/dist/testing/tools/create-test-env.d.ts +4 -0
  75. package/dist/testing/tools/create-test-env.d.ts.map +1 -0
  76. package/dist/testing/tools/create-test-env.js +7 -0
  77. package/dist/testing/tools/create-test-env.js.map +1 -0
  78. package/dist/testing/tools/mock-async.d.ts +20 -0
  79. package/dist/testing/tools/mock-async.d.ts.map +1 -0
  80. package/dist/testing/tools/mock-async.js +57 -0
  81. package/dist/testing/tools/mock-async.js.map +1 -0
  82. package/dist/testing/tools/resolve-activity.d.ts +11 -0
  83. package/dist/testing/tools/resolve-activity.d.ts.map +1 -0
  84. package/dist/testing/tools/resolve-activity.js +23 -0
  85. package/dist/testing/tools/resolve-activity.js.map +1 -0
  86. package/dist/testing/tools/resolve-async-activity.d.ts +15 -0
  87. package/dist/testing/tools/resolve-async-activity.d.ts.map +1 -0
  88. package/dist/testing/tools/resolve-async-activity.js +69 -0
  89. package/dist/testing/tools/resolve-async-activity.js.map +1 -0
  90. package/dist/testing/tools/run-with-clock.d.ts +3 -0
  91. package/dist/testing/tools/run-with-clock.d.ts.map +1 -0
  92. package/dist/testing/tools/run-with-clock.js +7 -0
  93. package/dist/testing/tools/run-with-clock.js.map +1 -0
  94. package/dist/testing/tools/run-workflow-ticks.d.ts +8 -0
  95. package/dist/testing/tools/run-workflow-ticks.d.ts.map +1 -0
  96. package/dist/testing/tools/run-workflow-ticks.js +26 -0
  97. package/dist/testing/tools/run-workflow-ticks.js.map +1 -0
  98. package/dist/testing/tools/run-workflow.d.ts +25 -0
  99. package/dist/testing/tools/run-workflow.d.ts.map +1 -0
  100. package/dist/testing/tools/run-workflow.js +25 -0
  101. package/dist/testing/tools/run-workflow.js.map +1 -0
  102. package/dist/testing/types.d.ts +19 -0
  103. package/dist/testing/types.d.ts.map +1 -0
  104. package/dist/testing/types.js +2 -0
  105. package/dist/testing/types.js.map +1 -0
  106. package/dist/testing/typings/AsyncActivityResult.d.ts +10 -0
  107. package/dist/testing/typings/AsyncActivityResult.d.ts.map +1 -0
  108. package/dist/testing/typings/AsyncActivityResult.js +2 -0
  109. package/dist/testing/typings/AsyncActivityResult.js.map +1 -0
  110. package/dist/testing/typings/ClaimConstructor.d.ts +2 -0
  111. package/dist/testing/typings/ClaimConstructor.d.ts.map +1 -0
  112. package/dist/testing/typings/ClaimConstructor.js +2 -0
  113. package/dist/testing/typings/ClaimConstructor.js.map +1 -0
  114. package/dist/testing/typings/MockAsyncActivity.d.ts +10 -0
  115. package/dist/testing/typings/MockAsyncActivity.d.ts.map +1 -0
  116. package/dist/testing/typings/MockAsyncActivity.js +2 -0
  117. package/dist/testing/typings/MockAsyncActivity.js.map +1 -0
  118. package/package.json +1 -1
@@ -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"}
@@ -0,0 +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>(
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mock-claim.d.ts","sourceRoot":"","sources":["../../src/testing/create-mock-claim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,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 (...args) => {
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/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,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC5B,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"}
@@ -0,0 +1,13 @@
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>[]
6
+ export type MockClaimEntry = readonly [
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mock-claims.d.ts","sourceRoot":"","sources":["../../src/testing/create-mock-claims.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,wBAAgB,gBAAgB,CAC9B,GAAG,SAAS,EAAE,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,GAC1C,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAE/B;AAED,MAAM,MAAM,cAAc,GAAG,SAAS;IACpC,KAAK,EAAE,gBAAgB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;CACzD,CAAA;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,cAAc,EAAE,GACjC,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAI/B"}
@@ -0,0 +1,8 @@
1
+ import { mockClaim } from './create-mock-claim.js';
2
+ export function createMockClaims(...providers) {
3
+ return providers;
4
+ }
5
+ export function createMockClaimsFromMap(entries) {
6
+ return entries.map(([ClaimClass, implementation]) => mockClaim(ClaimClass, implementation ?? {}));
7
+ }
8
+ //# sourceMappingURL=create-mock-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mock-claims.js","sourceRoot":"","sources":["../../src/testing/create-mock-claims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAIlD,MAAM,UAAU,gBAAgB,CAC9B,GAAG,SAAwC;IAE3C,OAAO,SAAS,CAAA;AAClB,CAAC;AAOD,MAAM,UAAU,uBAAuB,CACrC,OAAkC;IAElC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,CAClD,SAAS,CAAC,UAAU,EAAE,cAAc,IAAI,EAAE,CAAC,CAC5C,CAAA;AACH,CAAC"}
@@ -0,0 +1,10 @@
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 @@
1
+ {"version":3,"file":"create-test-env.d.ts","sourceRoot":"","sources":["../../src/testing/create-test-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM,GAC5C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAEpC;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM,GAC5C,GAAG,CAAC,OAAO,CAEb"}
@@ -0,0 +1,7 @@
1
+ export function createTestEnv(overrides, base = {}) {
2
+ return { ...base, ...overrides };
3
+ }
4
+ export function createTestEnvEntries(overrides, base = {}) {
5
+ return createTestEnv(overrides, base);
6
+ }
7
+ //# sourceMappingURL=create-test-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-test-env.js","sourceRoot":"","sources":["../../src/testing/create-test-env.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAC3B,SAA6C,EAC7C,OAA2C,EAAE;IAE7C,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAA6C,EAC7C,OAA2C,EAAE;IAE7C,OAAO,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AACvC,CAAC"}
@@ -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
  }
@@ -82,14 +106,14 @@ async function resolveAsyncActivity(activity, bootstrap, context, input, mockAsy
82
106
  throw new Error('Unknown async activity result');
83
107
  const name = activity.constructor.name;
84
108
  if (!mockAsyncActivity)
85
- 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`);
86
110
  const outcome = await mockAsyncActivity(activity, {
87
111
  input,
88
112
  pending: bootstrap,
89
- index: resolutionState?.index ?? 0,
113
+ callCount: resolutionState?.callCount ?? 0,
90
114
  });
91
115
  if (resolutionState)
92
- resolutionState.index++;
116
+ resolutionState.callCount++;
93
117
  return outcomeToHistoryItem(activity, outcome, bootstrap, context, name);
94
118
  }
95
119
  async function outcomeToHistoryItem(activity, outcome, pending, context, name) {
@@ -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"}
@@ -0,0 +1,8 @@
1
+ import type { ClaimProvider } from '../../models/Claim.js';
2
+ import type { ClaimConstructor } from '../typings/ClaimConstructor.js';
3
+ export type MockClaimEntry = readonly [
4
+ claim: ClaimConstructor,
5
+ implementation?: Partial<InstanceType<ClaimConstructor>>
6
+ ];
7
+ export declare function createMockClaims(entries: readonly MockClaimEntry[]): readonly ClaimProvider<any>[];
8
+ //# sourceMappingURL=create-mock-claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mock-claims.d.ts","sourceRoot":"","sources":["../../../src/testing/tools/create-mock-claims.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,MAAM,MAAM,cAAc,GAAG,SAAS;IACpC,KAAK,EAAE,gBAAgB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;CACzD,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,cAAc,EAAE,GACjC,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAI/B"}
@@ -0,0 +1,5 @@
1
+ import { mockClaim } from './create-mock-claim.js';
2
+ export function createMockClaims(entries) {
3
+ return entries.map(([ClaimClass, implementation]) => mockClaim(ClaimClass, implementation ?? {}));
4
+ }
5
+ //# sourceMappingURL=create-mock-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mock-claims.js","sourceRoot":"","sources":["../../../src/testing/tools/create-mock-claims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AASlD,MAAM,UAAU,gBAAgB,CAC9B,OAAkC;IAElC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,CAClD,SAAS,CAAC,UAAU,EAAE,cAAc,IAAI,EAAE,CAAC,CAC5C,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-test-env.d.ts","sourceRoot":"","sources":["../../../src/testing/tools/create-test-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAE9C,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM,GAC5C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAEpC;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM,GAC5C,GAAG,CAAC,OAAO,CAEb"}
@@ -0,0 +1,7 @@
1
+ export function createTestEnv(overrides, base = {}) {
2
+ return { ...base, ...overrides };
3
+ }
4
+ export function createTestEnvEntries(overrides, base = {}) {
5
+ return createTestEnv(overrides, base);
6
+ }
7
+ //# sourceMappingURL=create-test-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-test-env.js","sourceRoot":"","sources":["../../../src/testing/tools/create-test-env.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAC3B,SAA6C,EAC7C,OAA2C,EAAE;IAE7C,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAA6C,EAC7C,OAA2C,EAAE;IAE7C,OAAO,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AACvC,CAAC"}