@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.
- package/.ai/skills/framework-core/SKILL.md +103 -287
- package/.ai/skills/framework-workflow-creation/SKILL.md +108 -60
- package/.ai/skills/framework-workflow-testing/SKILL.md +165 -111
- package/README.md +123 -37
- package/dist/models/AsyncActivity.d.ts +1 -0
- package/dist/models/AsyncActivity.d.ts.map +1 -1
- package/dist/models/AsyncActivity.js +1 -0
- package/dist/models/AsyncActivity.js.map +1 -1
- package/dist/models/History.d.ts +1 -0
- package/dist/models/History.d.ts.map +1 -1
- package/dist/models/History.js +3 -0
- package/dist/models/History.js.map +1 -1
- package/dist/models/SyncActivity.d.ts +1 -0
- package/dist/models/SyncActivity.d.ts.map +1 -1
- package/dist/models/SyncActivity.js +1 -0
- package/dist/models/SyncActivity.js.map +1 -1
- package/dist/testing/ActivityTesting.d.ts +1 -1
- package/dist/testing/ActivityTesting.d.ts.map +1 -1
- package/dist/testing/ActivityTesting.js.map +1 -1
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +1 -2
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestWorkflowEnvironment.d.ts +6 -18
- package/dist/testing/TestWorkflowEnvironment.d.ts.map +1 -1
- package/dist/testing/TestWorkflowEnvironment.js +35 -93
- package/dist/testing/TestWorkflowEnvironment.js.map +1 -1
- package/dist/testing/WorkflowTesting.d.ts +1 -1
- package/dist/testing/async-activity-results.d.ts +12 -0
- package/dist/testing/async-activity-results.d.ts.map +1 -0
- package/dist/testing/async-activity-results.js +10 -0
- package/dist/testing/async-activity-results.js.map +1 -0
- package/dist/testing/create-mock-claim.d.ts +11 -5
- package/dist/testing/create-mock-claims.d.ts +12 -8
- package/dist/testing/create-test-env.d.ts +10 -4
- package/dist/testing/exceptions/NonDeterministicWorkflowError.d.ts +4 -0
- package/dist/testing/exceptions/NonDeterministicWorkflowError.d.ts.map +1 -0
- package/dist/testing/exceptions/NonDeterministicWorkflowError.js +7 -0
- package/dist/testing/exceptions/NonDeterministicWorkflowError.js.map +1 -0
- package/dist/testing/index.d.ts +8 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +8 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mock-async.d.ts +48 -0
- package/dist/testing/mock-async.d.ts.map +1 -0
- package/dist/testing/mock-async.js +58 -0
- package/dist/testing/mock-async.js.map +1 -0
- package/dist/testing/outcomes.d.ts +12 -0
- package/dist/testing/outcomes.d.ts.map +1 -0
- package/dist/testing/outcomes.js +10 -0
- package/dist/testing/outcomes.js.map +1 -0
- package/dist/testing/run-workflow.d.ts +22 -21
- package/dist/testing/run-workflow.d.ts.map +1 -1
- package/dist/testing/run-workflow.js +91 -33
- package/dist/testing/run-workflow.js.map +1 -1
- package/dist/testing/tools/create-mock-claim.d.ts +5 -0
- package/dist/testing/tools/create-mock-claim.d.ts.map +1 -0
- package/dist/testing/tools/create-mock-claim.js +26 -0
- package/dist/testing/tools/create-mock-claim.js.map +1 -0
- package/dist/testing/tools/create-mock-claims.d.ts +8 -0
- package/dist/testing/tools/create-mock-claims.d.ts.map +1 -0
- package/dist/testing/tools/create-mock-claims.js +5 -0
- package/dist/testing/tools/create-mock-claims.js.map +1 -0
- package/dist/testing/tools/create-test-env.d.ts +4 -0
- package/dist/testing/tools/create-test-env.d.ts.map +1 -0
- package/dist/testing/tools/create-test-env.js +7 -0
- package/dist/testing/tools/create-test-env.js.map +1 -0
- package/dist/testing/tools/mock-async.d.ts +20 -0
- package/dist/testing/tools/mock-async.d.ts.map +1 -0
- package/dist/testing/tools/mock-async.js +57 -0
- package/dist/testing/tools/mock-async.js.map +1 -0
- package/dist/testing/tools/resolve-activity.d.ts +11 -0
- package/dist/testing/tools/resolve-activity.d.ts.map +1 -0
- package/dist/testing/tools/resolve-activity.js +23 -0
- package/dist/testing/tools/resolve-activity.js.map +1 -0
- package/dist/testing/tools/resolve-async-activity.d.ts +15 -0
- package/dist/testing/tools/resolve-async-activity.d.ts.map +1 -0
- package/dist/testing/tools/resolve-async-activity.js +69 -0
- package/dist/testing/tools/resolve-async-activity.js.map +1 -0
- package/dist/testing/tools/run-with-clock.d.ts +3 -0
- package/dist/testing/tools/run-with-clock.d.ts.map +1 -0
- package/dist/testing/tools/run-with-clock.js +7 -0
- package/dist/testing/tools/run-with-clock.js.map +1 -0
- package/dist/testing/tools/run-workflow-ticks.d.ts +8 -0
- package/dist/testing/tools/run-workflow-ticks.d.ts.map +1 -0
- package/dist/testing/tools/run-workflow-ticks.js +26 -0
- package/dist/testing/tools/run-workflow-ticks.js.map +1 -0
- package/dist/testing/tools/run-workflow.d.ts +25 -0
- package/dist/testing/tools/run-workflow.d.ts.map +1 -0
- package/dist/testing/tools/run-workflow.js +25 -0
- package/dist/testing/tools/run-workflow.js.map +1 -0
- package/dist/testing/types.d.ts +1 -1
- package/dist/testing/types.d.ts.map +1 -1
- package/dist/testing/typings/AsyncActivityResult.d.ts +10 -0
- package/dist/testing/typings/AsyncActivityResult.d.ts.map +1 -0
- package/dist/testing/typings/AsyncActivityResult.js +2 -0
- package/dist/testing/typings/AsyncActivityResult.js.map +1 -0
- package/dist/testing/typings/ClaimConstructor.d.ts +2 -0
- package/dist/testing/typings/ClaimConstructor.d.ts.map +1 -0
- package/dist/testing/typings/ClaimConstructor.js +2 -0
- package/dist/testing/typings/ClaimConstructor.js.map +1 -0
- package/dist/testing/typings/MockAsyncActivity.d.ts +10 -0
- package/dist/testing/typings/MockAsyncActivity.d.ts.map +1 -0
- package/dist/testing/typings/MockAsyncActivity.js +2 -0
- package/dist/testing/typings/MockAsyncActivity.js.map +1 -0
- package/dist/tools/Internals.d.ts +1 -0
- package/dist/tools/Internals.d.ts.map +1 -1
- package/dist/tools/Internals.js +1 -0
- package/dist/tools/Internals.js.map +1 -1
- package/package.json +3 -2
- package/dist/testing/auto-resolve-timeouts.d.ts +0 -3
- package/dist/testing/auto-resolve-timeouts.d.ts.map +0 -1
- package/dist/testing/auto-resolve-timeouts.js +0 -16
- package/dist/testing/auto-resolve-timeouts.js.map +0 -1
- package/dist/testing/mock-async-by-activity.d.ts +0 -10
- package/dist/testing/mock-async-by-activity.d.ts.map +0 -1
- package/dist/testing/mock-async-by-activity.js +0 -15
- package/dist/testing/mock-async-by-activity.js.map +0 -1
- package/dist/testing/resolve-async-activities-in-order.d.ts +0 -3
- package/dist/testing/resolve-async-activities-in-order.d.ts.map +0 -1
- package/dist/testing/resolve-async-activities-in-order.js +0 -10
- package/dist/testing/resolve-async-activities-in-order.js.map +0 -1
- package/dist/tools/runWorkflowToCompletion.d.ts +0 -15
- package/dist/tools/runWorkflowToCompletion.d.ts.map +0 -1
- package/dist/tools/runWorkflowToCompletion.js +0 -61
- package/dist/tools/runWorkflowToCompletion.js.map +0 -1
package/README.md
CHANGED
|
@@ -356,66 +356,152 @@ single process), use the dedicated `testing` entrypoint. It is meant for tests a
|
|
|
356
356
|
local execution only and is not part of the runtime contract.
|
|
357
357
|
|
|
358
358
|
```typescript
|
|
359
|
-
import {
|
|
359
|
+
import {
|
|
360
|
+
TestWorkflowEnvironment,
|
|
361
|
+
mockAsync,
|
|
362
|
+
fulfilled,
|
|
363
|
+
createMockClaims,
|
|
364
|
+
mockClaim,
|
|
365
|
+
} from '@t4h.framework/core/testing'
|
|
360
366
|
|
|
361
|
-
const
|
|
367
|
+
const env = TestWorkflowEnvironment.create({ now: 0 })
|
|
368
|
+
|
|
369
|
+
const output = await env.execute(myWorkflow, input, {
|
|
362
370
|
env: { API_URL: 'https://api.example.com' },
|
|
363
|
-
claims: [
|
|
364
|
-
|
|
365
|
-
],
|
|
366
|
-
mockAsyncActivity: () => ({ status: 'fulfilled', output: true }),
|
|
371
|
+
claims: [{ provide: UserRepositoryClaim, value: new UserRepositoryClaimImpl() }],
|
|
372
|
+
mockAsyncActivity: mockAsync().on(WaitForApprovalActivity, fulfilled(true)),
|
|
367
373
|
})
|
|
368
374
|
```
|
|
369
375
|
|
|
376
|
+
`TestWorkflowEnvironment.create()` options:
|
|
377
|
+
|
|
378
|
+
| Option | Default | Purpose |
|
|
379
|
+
|--------|---------|---------|
|
|
380
|
+
| `now` | `0` | Pins `Date.now()` to this value at run start |
|
|
381
|
+
| `resolveActivityTimeouts` | `true` | Auto-advances clock to each activity's `timeoutAt` and resolves via `onTimeout` |
|
|
382
|
+
|
|
383
|
+
`execute()` options:
|
|
384
|
+
|
|
385
|
+
| Option | Type | Purpose |
|
|
386
|
+
|--------|------|---------|
|
|
387
|
+
| `claims` | `readonly ClaimProvider[]` | Claim implementations |
|
|
388
|
+
| `env` | `Env.Entries` | String env vars |
|
|
389
|
+
| `mockAsyncActivity` | `MockAsyncActivity` | Required when `bootstrap` returns `pending` and `resolveActivityTimeouts` doesn't cover it |
|
|
390
|
+
|
|
391
|
+
**Replay validation is automatic.** After each `execute()`, the environment
|
|
392
|
+
re-runs the workflow from the recorded history and from a fresh tick-by-tick
|
|
393
|
+
replay. A mismatch throws `NonDeterministicWorkflowError`.
|
|
394
|
+
|
|
370
395
|
### Driving async activities
|
|
371
396
|
|
|
372
397
|
The harness runs the real `bootstrap`. If it already settles (`done`/`rejected`),
|
|
373
|
-
that result is honored. If it returns `pending`,
|
|
374
|
-
`
|
|
375
|
-
|
|
398
|
+
that result is honored. If it returns `pending`, the `resolveActivityTimeouts`
|
|
399
|
+
option (default `true`) auto-advances the clock and resolves the activity via its
|
|
400
|
+
real `onTimeout` handler. When `resolveActivityTimeouts` is false or the activity
|
|
401
|
+
has no `timeoutAt`, you must provide `mockAsyncActivity`.
|
|
376
402
|
|
|
377
|
-
|
|
403
|
+
Use the `mockAsync()` builder to declare outcomes per activity type:
|
|
378
404
|
|
|
379
405
|
```typescript
|
|
380
|
-
|
|
381
|
-
|
|
406
|
+
import { mockAsync, fulfilled, rejected, timeout } from '@t4h.framework/core/testing'
|
|
407
|
+
|
|
408
|
+
// Static outcome per activity type
|
|
409
|
+
mockAsyncActivity: mockAsync()
|
|
410
|
+
.on(WaitForApprovalActivity, fulfilled(true))
|
|
411
|
+
.on(EmailActivity, fulfilled())
|
|
412
|
+
|
|
413
|
+
// Sequential outcomes per type (per-type call count)
|
|
414
|
+
mockAsyncActivity: mockAsync()
|
|
415
|
+
.on(WaitForApprovalActivity, [rejected(new Error('transient')), fulfilled(true)])
|
|
416
|
+
|
|
417
|
+
// Callback with per-type callCount
|
|
418
|
+
mockAsyncActivity: mockAsync()
|
|
419
|
+
.on(WaitForApprovalActivity, (activity, { callCount }) =>
|
|
420
|
+
callCount === 0 ? rejected() : fulfilled(true),
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
// Auto-resolve timeoutAt-based activities (e.g. SleepActivity)
|
|
424
|
+
mockAsyncActivity: mockAsync()
|
|
425
|
+
.on(WaitForApprovalActivity, fulfilled(true))
|
|
426
|
+
.timeout()
|
|
427
|
+
|
|
428
|
+
// Fallback for types not explicitly registered
|
|
429
|
+
mockAsyncActivity: mockAsync()
|
|
430
|
+
.on(WaitForApprovalActivity, fulfilled(true))
|
|
431
|
+
.fallback(() => timeout())
|
|
432
|
+
```
|
|
382
433
|
|
|
383
|
-
|
|
384
|
-
mockAsyncActivity: () => ({ status: 'rejected', reason: 'denied' })
|
|
434
|
+
Outcome helpers:
|
|
385
435
|
|
|
386
|
-
|
|
387
|
-
|
|
436
|
+
```typescript
|
|
437
|
+
fulfilled(output?) // { status: 'fulfilled', output }
|
|
438
|
+
rejected(reason?) // { status: 'rejected', reason }
|
|
439
|
+
timeout() // { status: 'timeout' } — runs the activity's real onTimeout()
|
|
388
440
|
```
|
|
389
441
|
|
|
390
|
-
|
|
391
|
-
|
|
442
|
+
### Mock claims
|
|
443
|
+
|
|
444
|
+
Use `mockClaim` and `createMockClaims` to build typed claim providers without
|
|
445
|
+
manual casts:
|
|
392
446
|
|
|
393
447
|
```typescript
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
]
|
|
448
|
+
import { createMockClaims, mockClaim } from '@t4h.framework/core/testing'
|
|
449
|
+
import { SftpClaim } from '@t4h.framework/sftp'
|
|
450
|
+
|
|
451
|
+
const list = vi.fn().mockResolvedValue([])
|
|
452
|
+
const claims = createMockClaims([mockClaim(SftpClaim, { list })])
|
|
399
453
|
```
|
|
400
454
|
|
|
401
|
-
|
|
402
|
-
|
|
455
|
+
Unimplemented claim methods throw with a clear error instead of returning
|
|
456
|
+
`undefined`.
|
|
457
|
+
|
|
458
|
+
For ready-made mocks, use each package's testing entrypoint — for example
|
|
459
|
+
`@t4h.framework/sftp/testing`, `@t4h.framework/http/testing`,
|
|
460
|
+
`@t4h.framework/orm/testing`.
|
|
461
|
+
|
|
462
|
+
### Controlling test time
|
|
463
|
+
|
|
464
|
+
The environment exposes a clock that stays synchronized with the pinned
|
|
465
|
+
`Date.now()` across runs:
|
|
403
466
|
|
|
404
467
|
```typescript
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
468
|
+
env.clock.now() // current pinned timestamp (ms)
|
|
469
|
+
env.clock.advance(ms) // advance the pinned clock
|
|
470
|
+
env.clock.set(now) // set clock to a Date | number
|
|
471
|
+
```
|
|
408
472
|
|
|
409
|
-
|
|
473
|
+
For direct clock control outside an environment, use `TestClock`:
|
|
410
474
|
|
|
411
|
-
|
|
412
|
-
}
|
|
475
|
+
```typescript
|
|
476
|
+
import { TestClock } from '@t4h.framework/core/testing'
|
|
477
|
+
|
|
478
|
+
await TestClock.run({ now: 0 }, async () => {
|
|
479
|
+
TestClock.advance(86_400_000) // advance 1 day
|
|
480
|
+
// Date.now() returns the pinned value here
|
|
481
|
+
})
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Activity-level tests
|
|
485
|
+
|
|
486
|
+
The real `advance` logic is intentionally **not** exercised by `execute()`.
|
|
487
|
+
Test `advance` by calling it directly via `Internals.runActivity`:
|
|
488
|
+
|
|
489
|
+
```typescript
|
|
490
|
+
import { Internals } from '@t4h.framework/core'
|
|
491
|
+
|
|
492
|
+
await Internals.runActivity(
|
|
493
|
+
WaitForApprovalActivity,
|
|
494
|
+
{ env, claims },
|
|
495
|
+
activity => activity.advance({ approved: true }, pendingResult),
|
|
496
|
+
)
|
|
413
497
|
```
|
|
414
498
|
|
|
415
|
-
|
|
416
|
-
`resolveAsyncActivitiesInOrder([...])` from `@t4h.framework/core/testing`.
|
|
499
|
+
### Env helpers
|
|
417
500
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
501
|
+
Use `createTestEnv` to build env overrides:
|
|
502
|
+
|
|
503
|
+
```typescript
|
|
504
|
+
import { createTestEnv } from '@t4h.framework/core/testing'
|
|
505
|
+
|
|
506
|
+
const envEntries = createTestEnv({ API_URL: 'https://example.com' })
|
|
507
|
+
```
|
|
@@ -5,6 +5,7 @@ import type { IHistoryItemAsync } from './History.js';
|
|
|
5
5
|
import type { Serializable } from '../typings/Serializable.js';
|
|
6
6
|
export type AnyAsyncActivity = AsyncActivity<readonly any[], any, any, any, any, any>;
|
|
7
7
|
export declare abstract class AsyncActivity<TArgs extends readonly any[], TInput extends Serializable, TSerializableOutput extends Serializable | void, TOutput, TBootstrap extends Serializable, TSchema extends Type.TSchema> {
|
|
8
|
+
id: string;
|
|
8
9
|
abstract toInput(...args: TArgs): TInput | Promise<TInput>;
|
|
9
10
|
abstract bootstrap(input: TInput): AsyncActivityResult<TBootstrap, TSchema, TSerializableOutput> | Promise<AsyncActivityResult<TBootstrap, TSchema, TSerializableOutput>>;
|
|
10
11
|
abstract advance(payload: Type.Static<TSchema>, bootstrap: AsyncActivityResultPending): AsyncActivityResult<Serializable, TSchema, TSerializableOutput> | Promise<AsyncActivityResult<Serializable, TSchema, TSerializableOutput>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncActivity.d.ts","sourceRoot":"","sources":["../../src/models/AsyncActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAA;AAE/B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,iCAAiC,EACvC,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAC1C,SAAS,GAAG,EAAE,EACd,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAA;AAED,8BAAsB,aAAa,CACjC,KAAK,SAAS,SAAS,GAAG,EAAE,EAC5B,MAAM,SAAS,YAAY,EAC3B,mBAAmB,SAAS,YAAY,GAAG,IAAI,EAC/C,OAAO,EACP,UAAU,SAAS,YAAY,EAC/B,OAAO,SAAS,IAAI,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"AsyncActivity.d.ts","sourceRoot":"","sources":["../../src/models/AsyncActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAA;AAE/B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,iCAAiC,EACvC,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAC1C,SAAS,GAAG,EAAE,EACd,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAA;AAED,8BAAsB,aAAa,CACjC,KAAK,SAAS,SAAS,GAAG,EAAE,EAC5B,MAAM,SAAS,YAAY,EAC3B,mBAAmB,SAAS,YAAY,GAAG,IAAI,EAC/C,OAAO,EACP,UAAU,SAAS,YAAY,EAC/B,OAAO,SAAS,IAAI,CAAC,OAAO;IAErB,EAAE,EAAG,MAAM,CAAA;aAEF,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAEjD,SAAS,CACvB,KAAK,EAAE,MAAM,GAEX,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAC7D,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;aAE1D,OAAO,CACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAC7B,SAAS,EAAE,0BAA0B,GAEnC,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAC/D,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;aAE5D,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,KAAK,GAAG,OAAO;IAEvE,SAAS,CAAC,CAEf,OAAO,EAAE,0BAA0B,GAEjC,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAC/D,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAM5E,SAAS,CAAC,OAAO,CACf,OAAO,CAAC,EAAE,iCAAiC,CAAC,UAAU,EAAE,OAAO,CAAC;IAKlE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,mBAAmB;IAI5C,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAIzC,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE;CAGjE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AsyncActivityResultFulfilled, AsyncActivityResultPending, AsyncActivityResultRejected, } from './AsyncActivityAdvanceResult.js';
|
|
2
2
|
import { AsyncActivityAwaitable } from './AsyncActivityAwaitable.js';
|
|
3
3
|
export class AsyncActivity {
|
|
4
|
+
id;
|
|
4
5
|
onTimeout(
|
|
5
6
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
6
7
|
payload) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncActivity.js","sourceRoot":"","sources":["../../src/models/AsyncActivity.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAG5B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAapE,MAAM,OAAgB,aAAa;
|
|
1
|
+
{"version":3,"file":"AsyncActivity.js","sourceRoot":"","sources":["../../src/models/AsyncActivity.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAG5B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAapE,MAAM,OAAgB,aAAa;IAQ1B,EAAE,CAAS;IAmBX,SAAS;IACd,6DAA6D;IAC7D,OAAmC;QAInC,OAAO,IAAI,CAAC,QAAQ,CAAC;YACnB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAA;IACJ,CAAC;IAES,OAAO,CACf,OAAgE;QAEhE,OAAO,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAES,IAAI,CAAC,OAA6B;QAC1C,OAAO,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAAA;IAClD,CAAC;IAES,QAAQ,CAAC,OAA6B;QAC9C,OAAO,IAAI,2BAA2B,CAAC,OAAO,CAAC,CAAA;IACjD,CAAC;IAEM,WAAW,CAAC,IAAuB,EAAE,IAAoB;QAC9D,OAAO,IAAI,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACrD,CAAC;CACF"}
|
package/dist/models/History.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { type AnyAsyncActivity } from './AsyncActivity.js';
|
|
|
3
3
|
import { AsyncActivityAwaitable } from './AsyncActivityAwaitable.js';
|
|
4
4
|
export type HistoryItemType = 'sync' | 'async';
|
|
5
5
|
interface IHistoryItem<T extends HistoryItemType> {
|
|
6
|
+
id: string;
|
|
6
7
|
type: T;
|
|
7
8
|
output: any;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"History.d.ts","sourceRoot":"","sources":["../../src/models/History.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"History.d.ts","sourceRoot":"","sources":["../../src/models/History.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAA;AAE9C,UAAU,YAAY,CAAC,CAAC,SAAS,eAAe;IAC9C,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,CAAC,CAAA;IACP,MAAM,EAAE,GAAG,CAAA;CACZ;AAGD,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC,MAAM,CAAC;CAAG;AAEjE,MAAM,WAAW,iBAAkB,SAAQ,YAAY,CAAC,OAAO,CAAC;IAC9D,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAA;IAC5C,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,CAAA;AAE9D,yBAAiB,OAAO,CAAC;IACvB,KAAY,gBAAgB,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,SAAS,gBAAgB,GACzE,sBAAsB,CAAC,CAAC,CAAC,GACzB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAItB,SAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,IACpD,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,kCAClC;IAED,SAAsB,UAAU,CAAC,CAAC,SAAS,QAAQ,EACjD,QAAQ,EAAE,UAAU,CAAC,EACrB,GAAG,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CA4B9B;IAED,SAAgB,WAAW,IAAI,OAAO,CAMrC;IAED,SAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,KAElE;CACF"}
|
package/dist/models/History.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { uuidv7 } from 'uuidv7';
|
|
2
3
|
import {} from './Activity.js';
|
|
3
4
|
import { AsyncActivity } from './AsyncActivity.js';
|
|
4
5
|
import { AsyncActivityAwaitable } from './AsyncActivityAwaitable.js';
|
|
@@ -17,9 +18,11 @@ export var History;
|
|
|
17
18
|
const value = history.shift();
|
|
18
19
|
const activity = new Activity();
|
|
19
20
|
if (!value) {
|
|
21
|
+
activity.id = uuidv7();
|
|
20
22
|
const input = await activity.toInput(...args);
|
|
21
23
|
throw new PushActivity(activity, input);
|
|
22
24
|
}
|
|
25
|
+
activity.id = value.id;
|
|
23
26
|
if (activity instanceof AsyncActivity) {
|
|
24
27
|
if (value.type !== 'async')
|
|
25
28
|
throw new Error('Invalid history item type');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"History.js","sourceRoot":"","sources":["../../src/models/History.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAiB,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAyB,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"History.js","sourceRoot":"","sources":["../../src/models/History.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAiB,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAyB,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAoBhD,MAAM,KAAW,OAAO,CAuDvB;AAvDD,WAAiB,OAAO;IAKtB,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAiB,CAAA;IAEtD,SAAgB,IAAI,CAAqB,QAAqB;QAC5D,OAAO,CAAC,GAAG,IAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAA;IACrE,CAAC;IAFe,YAAI,OAEnB,CAAA;IAEM,KAAK,UAAU,UAAU,CAC9B,QAAqB,EACrB,GAAG,IAAsB;QAEzB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAElC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAEzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;QAE7B,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,CAAA;YAEtB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;YAE7C,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QACzC,CAAC;QAED,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QAEtB,IAAI,QAAQ,YAAY,aAAa,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAExE,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAwB,CAAA;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAE3B,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAwB,CAAA;IAClE,CAAC;IA/BqB,kBAAU,aA+B/B,CAAA;IAED,SAAgB,WAAW;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAEhC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QAExB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IACzB,CAAC;IANe,mBAAW,cAM1B,CAAA;IAED,SAAgB,GAAG,CAAI,OAA+B,EAAE,EAAW;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IACjD,CAAC;IAFe,WAAG,MAElB,CAAA;AACH,CAAC,EAvDgB,OAAO,KAAP,OAAO,QAuDvB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Serializable } from '../typings/Serializable.js';
|
|
2
2
|
export declare abstract class SyncActivity<TArgs extends readonly any[], TInput extends Serializable, TSerializableOutput extends Serializable | void, TOutput> {
|
|
3
|
+
id: string;
|
|
3
4
|
abstract toInput(...args: TArgs): TInput | Promise<TInput>;
|
|
4
5
|
abstract run(input: TInput): TSerializableOutput | Promise<TSerializableOutput>;
|
|
5
6
|
abstract toOutput(output: TSerializableOutput, ...args: TArgs): TOutput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncActivity.d.ts","sourceRoot":"","sources":["../../src/models/SyncActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,8BAAsB,YAAY,CAChC,KAAK,SAAS,SAAS,GAAG,EAAE,EAC5B,MAAM,SAAS,YAAY,EAC3B,mBAAmB,SAAS,YAAY,GAAG,IAAI,EAC/C,OAAO;
|
|
1
|
+
{"version":3,"file":"SyncActivity.d.ts","sourceRoot":"","sources":["../../src/models/SyncActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,8BAAsB,YAAY,CAChC,KAAK,SAAS,SAAS,GAAG,EAAE,EAC5B,MAAM,SAAS,YAAY,EAC3B,mBAAmB,SAAS,YAAY,GAAG,IAAI,EAC/C,OAAO;IAEA,EAAE,EAAG,MAAM,CAAA;aAEF,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAEjD,GAAG,CACjB,KAAK,EAAE,MAAM,GACZ,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;aAErC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,KAAK,GAAG,OAAO;CAC/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncActivity.js","sourceRoot":"","sources":["../../src/models/SyncActivity.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,YAAY;
|
|
1
|
+
{"version":3,"file":"SyncActivity.js","sourceRoot":"","sources":["../../src/models/SyncActivity.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,YAAY;IAMzB,EAAE,CAAS;CASnB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import type { AsyncActivityOutcome } from './types.js';
|
|
1
2
|
import type { Activity } from '../models/Activity.js';
|
|
2
3
|
import type { ClaimProvider } from '../models/Claim.js';
|
|
3
4
|
import type { Env } from '../models/Env.js';
|
|
4
5
|
import type { Log } from '../models/Logger.js';
|
|
5
|
-
import type { AsyncActivityOutcome } from './types.js';
|
|
6
6
|
export interface ActivityTestingAsyncOptions {
|
|
7
7
|
/** Run the real advance handler when bootstrap returns pending. */
|
|
8
8
|
advance?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityTesting.d.ts","sourceRoot":"","sources":["../../src/testing/ActivityTesting.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ActivityTesting.d.ts","sourceRoot":"","sources":["../../src/testing/ActivityTesting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAUrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAI9C,MAAM,WAAW,2BAA2B;IAC1C,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,oBAAoB,CAAA;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAAA;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,CAAC,EAAE,2BAA2B,CAAA;CACpC;AAED,qBAAa,eAAe;WACN,GAAG,CAAC,CAAC,SAAS,QAAQ,EACxC,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EACtC,IAAI,GAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAqC,EAC1D,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CA6B/B;AAyFD,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,MAAM,EAAE,OAAO;gBAAf,MAAM,EAAE,OAAO;CAQ5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityTesting.js","sourceRoot":"","sources":["../../src/testing/ActivityTesting.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ActivityTesting.js","sourceRoot":"","sources":["../../src/testing/ActivityTesting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestClock.d.ts","sourceRoot":"","sources":["../../src/testing/TestClock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestClock.d.ts","sourceRoot":"","sources":["../../src/testing/TestClock.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CACpB;AAwBD,qBAAa,SAAS;WACN,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;WA+BpD,QAAQ,IAAI,OAAO;WAInB,GAAG,IAAI,MAAM;WAIb,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;WAWzB,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;WAW7B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAGtC"}
|
|
@@ -2,7 +2,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
|
|
|
2
2
|
const storage = new AsyncLocalStorage();
|
|
3
3
|
const OriginalDate = globalThis.Date;
|
|
4
4
|
function createPatchedDateConstructor() {
|
|
5
|
-
|
|
5
|
+
return class extends OriginalDate {
|
|
6
6
|
constructor(...args) {
|
|
7
7
|
if (args.length === 0) {
|
|
8
8
|
super(TestClock.now());
|
|
@@ -14,7 +14,6 @@ function createPatchedDateConstructor() {
|
|
|
14
14
|
return TestClock.now();
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
|
-
return PatchedDate;
|
|
18
17
|
}
|
|
19
18
|
export class TestClock {
|
|
20
19
|
static run(options, fn) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestClock.js","sourceRoot":"","sources":["../../src/testing/TestClock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"TestClock.js","sourceRoot":"","sources":["../../src/testing/TestClock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAUpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAkB,CAAA;AAEvD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAA;AAEpC,SAAS,4BAA4B;IACnC,OAAO,KAAM,SAAQ,YAAY;QAC/B,YAAY,GAAG,IAAmC;YAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAA;gBAEtB,OAAM;YACR,CAAC;YAED,KAAK,CAAC,GAAI,IAAmD,CAAC,CAAA;QAChE,CAAC;QAEM,MAAM,CAAC,GAAG;YACf,OAAO,SAAS,CAAC,GAAG,EAAE,CAAA;QACxB,CAAC;KACiB,CAAA;AACtB,CAAC;AAED,MAAM,OAAO,SAAS;IACb,MAAM,CAAC,GAAG,CAAI,OAA4B,EAAE,EAAW;QAC5D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,YAAY,IAAI;YACzB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;YACvB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAA;QAEzC,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE;YAC/B,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAA;YAElD,UAAU,CAAC,IAAI,GAAG,WAAW,CAAA;YAE7B,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,UAAU,CAAC,IAAI,GAAG,YAAY,CAAA;YAChC,CAAC,CAAA;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAA;gBAEnB,IAAI,MAAM,YAAY,OAAO;oBAAE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAM,CAAA;gBAEjE,MAAM,EAAE,CAAA;gBAER,OAAO,MAAM,CAAA;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,EAAE,CAAA;gBAER,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,MAAM,CAAC,QAAQ;QACpB,OAAO,OAAO,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAA;IACzC,CAAC;IAEM,MAAM,CAAC,GAAG;QACf,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,CAAA;IACtD,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,EAAU;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAEhC,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAA;QAEH,KAAK,CAAC,GAAG,IAAI,EAAE,CAAA;IACjB,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,GAAkB;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAEhC,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAA;QAEH,KAAK,CAAC,GAAG,GAAG,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,EAAU;QAC5B,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;CACF"}
|
|
@@ -1,39 +1,27 @@
|
|
|
1
1
|
import type { ClaimProvider } from '../models/Claim.js';
|
|
2
2
|
import type { Env } from '../models/Env.js';
|
|
3
|
-
import type { HistoryItem } from '../models/History.js';
|
|
4
|
-
import type { Log } from '../models/Logger.js';
|
|
5
3
|
import type { Workflow, WorkflowInput } from '../models/Workflow.js';
|
|
6
|
-
import {
|
|
4
|
+
import type { MockAsyncActivity } from './typings/MockAsyncActivity.js';
|
|
7
5
|
export interface TestWorkflowEnvironmentOptions {
|
|
8
6
|
now?: Date | number;
|
|
9
|
-
|
|
10
|
-
autoResolveTimeouts?: boolean;
|
|
7
|
+
resolveActivityTimeouts?: boolean;
|
|
11
8
|
}
|
|
12
9
|
export interface TestWorkflowEnvironmentExecuteOptions {
|
|
13
10
|
claims?: readonly ClaimProvider<any>[];
|
|
14
11
|
env?: Env.Entries;
|
|
15
|
-
mockAsyncActivity?:
|
|
16
|
-
maxTicks?: number;
|
|
12
|
+
mockAsyncActivity?: MockAsyncActivity;
|
|
17
13
|
}
|
|
18
14
|
export declare class TestWorkflowEnvironment {
|
|
19
|
-
private
|
|
20
|
-
private
|
|
21
|
-
private currentNow;
|
|
22
|
-
private disposed;
|
|
23
|
-
private lastRun?;
|
|
15
|
+
private resolveActivityTimeouts;
|
|
16
|
+
private now;
|
|
24
17
|
private constructor();
|
|
25
18
|
static create(options?: TestWorkflowEnvironmentOptions): TestWorkflowEnvironment;
|
|
26
|
-
get history(): readonly HistoryItem[];
|
|
27
|
-
get logs(): readonly Log[];
|
|
28
19
|
readonly clock: {
|
|
29
20
|
now: () => number;
|
|
30
21
|
advance: (ms: number) => void;
|
|
31
|
-
sleep: (ms: number) => void;
|
|
32
22
|
set: (now: Date | number) => void;
|
|
33
23
|
};
|
|
34
24
|
execute<T extends Workflow<any, any>>(workflow: T, input?: WorkflowInput<T>, options?: TestWorkflowEnvironmentExecuteOptions): Promise<unknown>;
|
|
35
|
-
|
|
36
|
-
teardown(): void;
|
|
37
|
-
private assertActive;
|
|
25
|
+
private assertWorkflowReplays;
|
|
38
26
|
}
|
|
39
27
|
//# sourceMappingURL=TestWorkflowEnvironment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestWorkflowEnvironment.d.ts","sourceRoot":"","sources":["../../src/testing/TestWorkflowEnvironment.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestWorkflowEnvironment.d.ts","sourceRoot":"","sources":["../../src/testing/TestWorkflowEnvironment.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,MAAM,WAAW,qCAAqC;IACpD,MAAM,CAAC,EAAE,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAAA;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACjB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,OAAO,CAAC,GAAG,CAAY;IAEvB,OAAO;WASO,MAAM,CAClB,OAAO,GAAE,8BAAmC,GAC3C,uBAAuB;IAI1B,SAAgB,KAAK;;sBAGL,MAAM;mBAMT,IAAI,GAAG,MAAM;MAKzB;IAEY,OAAO,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAC/C,QAAQ,EAAE,CAAC,EACX,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,qCAA0C;YAgCvC,qBAAqB;CAsBpC"}
|
|
@@ -1,120 +1,62 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { NonDeterministicWorkflowError } from './NonDeterministicWorkflowError.js';
|
|
3
|
-
import { runWorkflowDetailed, runWorkflowTicks, } from './run-workflow.js';
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
import { NonDeterministicWorkflowError } from './exceptions/NonDeterministicWorkflowError.js';
|
|
4
3
|
import { TestClock } from './TestClock.js';
|
|
4
|
+
import { runWorkflow } from './tools/run-workflow.js';
|
|
5
|
+
import { Internals } from '../tools/Internals.js';
|
|
5
6
|
export class TestWorkflowEnvironment {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
currentNow;
|
|
9
|
-
disposed = false;
|
|
10
|
-
lastRun;
|
|
7
|
+
resolveActivityTimeouts = true;
|
|
8
|
+
now = 0;
|
|
11
9
|
constructor(options) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
? options.now.getTime()
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
this.autoResolveTimeouts = options.autoResolveTimeouts ?? true;
|
|
10
|
+
if (options.now)
|
|
11
|
+
this.now =
|
|
12
|
+
options.now instanceof Date ? options.now.getTime() : options.now;
|
|
13
|
+
if (typeof options.resolveActivityTimeouts === 'boolean')
|
|
14
|
+
this.resolveActivityTimeouts = options.resolveActivityTimeouts;
|
|
18
15
|
}
|
|
19
16
|
static create(options = {}) {
|
|
20
17
|
return new TestWorkflowEnvironment(options);
|
|
21
18
|
}
|
|
22
|
-
get history() {
|
|
23
|
-
return this.lastRun?.history ?? [];
|
|
24
|
-
}
|
|
25
|
-
get logs() {
|
|
26
|
-
return this.lastRun?.logs ?? [];
|
|
27
|
-
}
|
|
28
19
|
clock = {
|
|
29
|
-
now: () => this.
|
|
20
|
+
now: () => this.now,
|
|
30
21
|
advance: (ms) => {
|
|
31
|
-
this.
|
|
22
|
+
this.now += ms;
|
|
32
23
|
if (TestClock.isActive())
|
|
33
24
|
TestClock.advance(ms);
|
|
34
25
|
},
|
|
35
|
-
sleep: (ms) => {
|
|
36
|
-
this.clock.advance(ms);
|
|
37
|
-
},
|
|
38
26
|
set: (now) => {
|
|
39
|
-
this.
|
|
27
|
+
this.now = now instanceof Date ? now.getTime() : now;
|
|
40
28
|
if (TestClock.isActive())
|
|
41
29
|
TestClock.set(now);
|
|
42
30
|
},
|
|
43
31
|
};
|
|
44
32
|
async execute(workflow, input, options = {}) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
claims,
|
|
53
|
-
env,
|
|
54
|
-
history,
|
|
55
|
-
logs,
|
|
56
|
-
clock: { now: this.currentNow },
|
|
57
|
-
strict: this.strict,
|
|
58
|
-
autoResolveTimeouts: this.autoResolveTimeouts,
|
|
59
|
-
maxTicks: options.maxTicks,
|
|
33
|
+
const runWorkflowOptions = {
|
|
34
|
+
claims: options.claims ?? [],
|
|
35
|
+
env: options.env ?? {},
|
|
36
|
+
history: [],
|
|
37
|
+
logs: [],
|
|
38
|
+
clock: { now: this.now },
|
|
39
|
+
resolveActivityTimeouts: this.resolveActivityTimeouts,
|
|
60
40
|
};
|
|
61
41
|
if (options.mockAsyncActivity !== undefined)
|
|
62
|
-
|
|
63
|
-
const result = await
|
|
64
|
-
|
|
65
|
-
this.
|
|
66
|
-
|
|
67
|
-
});
|
|
68
|
-
this.lastRun = {
|
|
69
|
-
workflow,
|
|
70
|
-
input: workflowInput,
|
|
71
|
-
output: result.output,
|
|
72
|
-
history: [...history],
|
|
73
|
-
logs: [...logs],
|
|
74
|
-
claims,
|
|
75
|
-
env,
|
|
76
|
-
mockAsyncActivity: options.mockAsyncActivity,
|
|
77
|
-
};
|
|
42
|
+
runWorkflowOptions.mockAsyncActivity = options.mockAsyncActivity;
|
|
43
|
+
const result = await runWorkflow(workflow, input, runWorkflowOptions);
|
|
44
|
+
if (result.clockNow !== undefined)
|
|
45
|
+
this.now = result.clockNow;
|
|
46
|
+
await this.assertWorkflowReplays(workflow, input, result.output, runWorkflowOptions);
|
|
78
47
|
return result.output;
|
|
79
48
|
}
|
|
80
|
-
async
|
|
81
|
-
this.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
input: lastRun.input,
|
|
87
|
-
claims: lastRun.claims,
|
|
88
|
-
env: lastRun.env,
|
|
89
|
-
history: structuredClone(lastRun.history),
|
|
90
|
-
logs: [],
|
|
91
|
-
}));
|
|
92
|
-
if (!isEqual(lastRun.output, replayResult))
|
|
93
|
-
throw new NonDeterministicWorkflowError('Replay from recorded history produced a different workflow output.');
|
|
94
|
-
const history = [];
|
|
95
|
-
await TestClock.run({ now: this.currentNow }, () => runWorkflowTicks(lastRun.workflow, lastRun.input, {
|
|
96
|
-
claims: lastRun.claims,
|
|
97
|
-
env: lastRun.env,
|
|
98
|
-
history,
|
|
49
|
+
async assertWorkflowReplays(workflow, input, output, context) {
|
|
50
|
+
const replay = await TestClock.run({ now: this.now }, () => Internals.runWorkflow(workflow, {
|
|
51
|
+
input,
|
|
52
|
+
claims: context.claims,
|
|
53
|
+
env: context.env,
|
|
54
|
+
history: structuredClone(context.history),
|
|
99
55
|
logs: [],
|
|
100
|
-
strict: this.strict,
|
|
101
|
-
autoResolveTimeouts: this.autoResolveTimeouts,
|
|
102
|
-
mockAsyncActivity: lastRun.mockAsyncActivity,
|
|
103
|
-
maxTicks: 10_000,
|
|
104
56
|
}));
|
|
105
|
-
if (
|
|
106
|
-
|
|
57
|
+
if (isDeepStrictEqual(output, replay))
|
|
58
|
+
return;
|
|
59
|
+
throw new NonDeterministicWorkflowError('Replay from recorded history produced a different workflow output.');
|
|
107
60
|
}
|
|
108
|
-
teardown() {
|
|
109
|
-
this.disposed = true;
|
|
110
|
-
this.lastRun = undefined;
|
|
111
|
-
}
|
|
112
|
-
assertActive() {
|
|
113
|
-
if (this.disposed)
|
|
114
|
-
throw new Error('TestWorkflowEnvironment has been torn down. Create a new environment with TestWorkflowEnvironment.create().');
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
function isEqual(left, right) {
|
|
118
|
-
return JSON.stringify(left) === JSON.stringify(right);
|
|
119
61
|
}
|
|
120
62
|
//# sourceMappingURL=TestWorkflowEnvironment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestWorkflowEnvironment.js","sourceRoot":"","sources":["../../src/testing/TestWorkflowEnvironment.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestWorkflowEnvironment.js","sourceRoot":"","sources":["../../src/testing/TestWorkflowEnvironment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type RunWorkflowOptions } from './run-workflow.js';
|
|
2
2
|
import type { Workflow, WorkflowInput } from '../models/Workflow.js';
|
|
3
3
|
export declare class WorkflowTesting {
|
|
4
|
-
static run<T extends Workflow<any, any>>(workflow: T, input?: WorkflowInput<T>, options?: RunWorkflowOptions): Promise<
|
|
4
|
+
static run<T extends Workflow<any, any>>(workflow: T, input?: WorkflowInput<T>, options?: RunWorkflowOptions): Promise<unknown>;
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=WorkflowTesting.d.ts.map
|