@t4h.framework/core 0.7.0 → 0.9.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/activities/StartWorkflowActivity.d.ts +52 -9
- package/dist/activities/StartWorkflowActivity.d.ts.map +1 -1
- package/dist/activities/StartWorkflowActivity.js +45 -5
- package/dist/activities/StartWorkflowActivity.js.map +1 -1
- package/dist/core.d.ts +2 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -1
- package/dist/models/ContinueAsNew.d.ts +24 -0
- package/dist/models/ContinueAsNew.d.ts.map +1 -0
- package/dist/models/ContinueAsNew.js +28 -0
- package/dist/models/ContinueAsNew.js.map +1 -0
- package/dist/models/ExecutionContext.d.ts +8 -0
- package/dist/models/ExecutionContext.d.ts.map +1 -0
- package/dist/models/ExecutionContext.js +22 -0
- package/dist/models/ExecutionContext.js.map +1 -0
- package/dist/models/WorkflowBatchClaim.d.ts +10 -0
- package/dist/models/WorkflowBatchClaim.d.ts.map +1 -0
- package/dist/models/WorkflowBatchClaim.js +3 -0
- package/dist/models/WorkflowBatchClaim.js.map +1 -0
- package/dist/models/WorkflowBatchRef.d.ts +6 -0
- package/dist/models/WorkflowBatchRef.d.ts.map +1 -0
- package/dist/models/WorkflowBatchRef.js +9 -0
- package/dist/models/WorkflowBatchRef.js.map +1 -0
- package/dist/models/WorkflowRef.d.ts +2 -2
- package/dist/models/WorkflowRef.d.ts.map +1 -1
- package/dist/models/WorkflowRef.js.map +1 -1
- package/dist/testing/ActivityTesting.d.ts +25 -0
- package/dist/testing/ActivityTesting.d.ts.map +1 -0
- package/dist/testing/ActivityTesting.js +74 -0
- package/dist/testing/ActivityTesting.js.map +1 -0
- package/dist/testing/NonDeterministicWorkflowError.d.ts +4 -0
- package/dist/testing/NonDeterministicWorkflowError.d.ts.map +1 -0
- package/dist/testing/NonDeterministicWorkflowError.js +7 -0
- package/dist/testing/NonDeterministicWorkflowError.js.map +1 -0
- package/dist/testing/StrictGuard.d.ts +4 -0
- package/dist/testing/StrictGuard.d.ts.map +1 -0
- package/dist/testing/StrictGuard.js +26 -0
- package/dist/testing/StrictGuard.js.map +1 -0
- package/dist/testing/TestClock.d.ts +12 -0
- package/dist/testing/TestClock.d.ts.map +1 -0
- package/dist/testing/TestClock.js +64 -0
- package/dist/testing/TestClock.js.map +1 -0
- package/dist/testing/TestWorkflowEnvironment.d.ts +27 -0
- package/dist/testing/TestWorkflowEnvironment.d.ts.map +1 -0
- package/dist/testing/TestWorkflowEnvironment.js +64 -0
- package/dist/testing/TestWorkflowEnvironment.js.map +1 -0
- 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 -0
- package/dist/testing/create-mock-claim.d.ts.map +1 -0
- package/dist/testing/create-mock-claim.js +26 -0
- package/dist/testing/create-mock-claim.js.map +1 -0
- package/dist/testing/create-mock-claims.d.ts +13 -0
- package/dist/testing/create-mock-claims.d.ts.map +1 -0
- package/dist/testing/create-mock-claims.js +8 -0
- package/dist/testing/create-mock-claims.js.map +1 -0
- package/dist/testing/create-test-env.d.ts +10 -0
- package/dist/testing/create-test-env.d.ts.map +1 -0
- package/dist/testing/create-test-env.js +7 -0
- package/dist/testing/create-test-env.js.map +1 -0
- 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 +47 -23
- package/dist/testing/run-workflow.js.map +1 -1
- package/dist/testing/tools/clone.d.ts +2 -0
- package/dist/testing/tools/clone.d.ts.map +1 -0
- package/dist/testing/tools/clone.js +42 -0
- package/dist/testing/tools/clone.js.map +1 -0
- 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/tools/serializable-clone.d.ts +21 -0
- package/dist/testing/tools/serializable-clone.d.ts.map +1 -0
- package/dist/testing/tools/serializable-clone.js +77 -0
- package/dist/testing/tools/serializable-clone.js.map +1 -0
- package/dist/testing/types.d.ts +19 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing/types.js +2 -0
- package/dist/testing/types.js.map +1 -0
- 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/package.json +1 -1
|
@@ -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
|
|
2
|
-
import {
|
|
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
|
-
|
|
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
|
|
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<
|
|
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":"
|
|
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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
17
|
-
if (
|
|
18
|
-
return
|
|
19
|
-
|
|
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
|
|
29
|
-
const
|
|
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 },
|
|
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
|
|
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
|
-
|
|
113
|
+
callCount: resolutionState?.callCount ?? 0,
|
|
90
114
|
});
|
|
91
115
|
if (resolutionState)
|
|
92
|
-
resolutionState.
|
|
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":"
|
|
1
|
+
{"version":3,"file":"run-workflow.js","sourceRoot":"","sources":["../../src/testing/run-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAA4B,MAAM,gBAAgB,CAAA;AAGpE,OAAO,EACL,aAAa,GAEd,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,yCAAyC,CAAA;AAKhD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AA2BjD,SAAS,wBAAwB,CAC/B,OAA2B;IAE3B,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,iBAAiB,CAAA;IAE7E,IAAI,OAAO,CAAC,mBAAmB;QAAE,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,CAAA;IAE7D,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,YAAY,CACnB,KAA8C,EAC9C,EAAW;IAEX,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,CAAA;IAEvD,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAW,EACX,KAAuB,EACvB,UAA8B,EAAE;IAEhC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAEtE,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAW,EACX,KAAuB,EACvB,UAA8B,EAAE;IAEhC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;IAC/B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,IAAI,QAA4B,CAAA;IAEhC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE;gBACrD,GAAG,OAAO;gBACV,OAAO;gBACP,IAAI;gBACJ,iBAAiB,EAAE,wBAAwB,CAAC,OAAO,CAAC;aACrD,CAAC,CAAA;YAEF,IAAI,SAAS,CAAC,QAAQ,EAAE;gBAAE,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,CAAA;YAEpD,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC5C,CAAC;YAAS,CAAC;QACT,aAAa,EAAE,EAAE,CAAA;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAW,EACX,KAAuB,EACvB,OAGC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAA;IAE3C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAA;IACtC,MAAM,eAAe,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;IAExC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE;gBAC3C,KAAK;gBACL,MAAM;gBACN,GAAG;gBACH,OAAO;gBACP,IAAI;aACL,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,CAAC,WAAW,YAAY,YAAY,CAAC;gBAAE,MAAM,WAAW,CAAA;YAE7D,MAAM,IAAI,GAAG,MAAM,eAAe,CAChC,WAAW,EACX,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,IAAI,EACJ,eAAe,CAChB,CAAA;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,QAAQ,CAAC,CAAA;AACrE,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAA4B,EAC5B,OAAiD,EACjD,iBAAqC,EACrC,eAAuC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9B,MAAM,eAAe,GAAiC;QACpD,GAAG,OAAO;QACV,EAAE,EAAE,QAAQ,CAAC,EAAE;KAChB,CAAA;IAED,IAAI,QAAQ,YAAY,YAAY,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CACxC,QAAQ,EACR,eAAe,EACf,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CACrC,CAAA;QAED,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;IAClD,CAAC;IAED,IAAI,QAAQ,YAAY,aAAa,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,WAAW,CAC3C,QAAQ,EACR,eAAe,EACf,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3C,CAAA;QAED,OAAO,oBAAoB,CACzB,QAAQ,EACR,SAAS,EACT,eAAe,EACf,IAAI,CAAC,KAAK,EACV,iBAAiB,EACjB,eAAe,CAChB,CAAA;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;AAC1C,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAA0B,EAC1B,SAAkB,EAClB,OAAqC,EACrC,KAAc,EACd,iBAAqC,EACrC,eAAuC;IAEvC,IAAI,SAAS,YAAY,4BAA4B;QACnD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,SAAS,CAAC,OAAO;SAC1B,CAAA;IAEH,IAAI,SAAS,YAAY,2BAA2B;QAClD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,SAAS,CAAC,OAAO;SAC1B,CAAA;IAEH,IAAI,CAAC,CAAC,SAAS,YAAY,0BAA0B,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAElD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA;IAEtC,IAAI,CAAC,iBAAiB;QACpB,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,oDAAoD,CAC5E,CAAA;IAEH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE;QAChD,KAAK;QACL,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,eAAe,EAAE,SAAS,IAAI,CAAC;KAC3C,CAAC,CAAA;IAEF,IAAI,eAAe;QAAE,eAAe,CAAC,SAAS,EAAE,CAAA;IAEhD,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAC1E,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAA0B,EAC1B,OAA6B,EAC7B,OAAmC,EACnC,OAAqC,EACrC,IAAY;IAEZ,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,WAAW;YACd,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAA;QAEH,KAAK,UAAU;YACb,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAA;QAEH,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEpD,IAAI,CAAC,SAAS;gBACZ,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,8CAA8C,CACtE,CAAA;YAEH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CACjE,SAAS,CAAC,OAAO,CAAC,CACnB,CAAA;YAED,IAAI,MAAM,YAAY,4BAA4B;gBAChD,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,MAAM,CAAC,OAAO;iBACvB,CAAA;YAEH,IAAI,MAAM,YAAY,2BAA2B;gBAC/C,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,MAAM,CAAC,OAAO;iBACvB,CAAA;YAEH,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,kCAAkC,CAAC,CAAA;QAC5E,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,GAAG,CAAC,CAAA;IACnE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../src/testing/tools/clone.ts"],"names":[],"mappings":"AAQA,wBAAsB,KAAK,CACzB,KAAK,EAAE,GAAG,EACV,IAAI,GAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAiB,GACzC,OAAO,CAAC,GAAG,CAAC,CA2Dd"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Binary } from '../../models/Binary.js';
|
|
2
|
+
import { SerializableClass, } from '../../models/SerializableHelper.js';
|
|
3
|
+
const cloning = Symbol('cloning');
|
|
4
|
+
export async function clone(value, seen = new WeakMap()) {
|
|
5
|
+
if (value === null || typeof value !== 'object')
|
|
6
|
+
return value;
|
|
7
|
+
if (value instanceof Binary)
|
|
8
|
+
return value;
|
|
9
|
+
if (value instanceof SerializableClass) {
|
|
10
|
+
const cached = seen.get(value);
|
|
11
|
+
if (cached === cloning)
|
|
12
|
+
throw new TypeError('Could not clone a cyclic SerializableClass graph: it is not serializable');
|
|
13
|
+
if (cached)
|
|
14
|
+
return cached;
|
|
15
|
+
seen.set(value, cloning);
|
|
16
|
+
const serializer = inner => clone(inner, seen);
|
|
17
|
+
const serialized = await value.toSerializable(serializer);
|
|
18
|
+
const result = value.constructor.fromSerializable(serialized, serializer);
|
|
19
|
+
seen.set(value, result);
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
if (value instanceof Date)
|
|
23
|
+
return new Date(value.getTime());
|
|
24
|
+
const cached = seen.get(value);
|
|
25
|
+
if (cached)
|
|
26
|
+
return cached;
|
|
27
|
+
if (Array.isArray(value)) {
|
|
28
|
+
const result = [];
|
|
29
|
+
seen.set(value, result);
|
|
30
|
+
for (const item of value)
|
|
31
|
+
result.push(await clone(item, seen));
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
if (value.constructor !== Object && typeof value.constructor !== 'undefined')
|
|
35
|
+
throw new TypeError(`Could not clone a history value of type "${value.constructor.name}": it is not Serializable and would not survive replay`);
|
|
36
|
+
const result = {};
|
|
37
|
+
seen.set(value, result);
|
|
38
|
+
for (const [key, val] of Object.entries(value))
|
|
39
|
+
result[key] = await clone(val, seen);
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/testing/tools/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EACL,iBAAiB,GAElB,MAAM,oCAAoC,CAAA;AAE3C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;AAEjC,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,KAAU,EACV,OAA6B,IAAI,OAAO,EAAE;IAE1C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE7D,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,KAAK,CAAA;IAEzC,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAE9B,IAAI,MAAM,KAAK,OAAO;YACpB,MAAM,IAAI,SAAS,CACjB,0EAA0E,CAC3E,CAAA;QAEH,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAExB,MAAM,UAAU,GAAe,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC1D,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;QAEzD,MAAM,MAAM,GACV,KAAK,CAAC,WAGP,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QAE1C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEvB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAE9B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAU,EAAE,CAAA;QACxB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEvB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAE9D,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,WAAW;QAC1E,MAAM,IAAI,SAAS,CACjB,4CAA4C,KAAK,CAAC,WAAW,CAAC,IAAI,wDAAwD,CAC3H,CAAA;IAEH,MAAM,MAAM,GAAwB,EAAE,CAAA;IAEtC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAEvB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAEtC,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AsyncActivity, type AnyAsyncActivity } from '../../models/AsyncActivity.js';
|
|
2
|
+
import type { AsyncActivityResultPending } from '../../models/AsyncActivityAdvanceResult.js';
|
|
3
|
+
import type { AsyncActivityResult } from '../typings/AsyncActivityResult.js';
|
|
4
|
+
import type { MockAsyncActivity } from '../typings/MockAsyncActivity.js';
|
|
5
|
+
type InferSerializableOutput<T extends AnyAsyncActivity> = T extends AsyncActivity<any, any, infer TSerializableOutput, any, any, any> ? TSerializableOutput : unknown;
|
|
6
|
+
interface OnContext {
|
|
7
|
+
callCount: number;
|
|
8
|
+
input: unknown;
|
|
9
|
+
pending: AsyncActivityResultPending;
|
|
10
|
+
}
|
|
11
|
+
type OnCallback<T extends AnyAsyncActivity> = (activity: T, context: OnContext) => AsyncActivityResult<InferSerializableOutput<T>> | Promise<AsyncActivityResult<InferSerializableOutput<T>>>;
|
|
12
|
+
type OnHandler<T extends AnyAsyncActivity> = AsyncActivityResult<InferSerializableOutput<T>> | AsyncActivityResult<InferSerializableOutput<T>>[] | OnCallback<T>;
|
|
13
|
+
export interface MockAsyncBuilder extends MockAsyncActivity {
|
|
14
|
+
on<T extends AnyAsyncActivity>(ActivityClass: new () => T, handler: OnHandler<T>): MockAsyncBuilder;
|
|
15
|
+
timeout(): MockAsyncBuilder;
|
|
16
|
+
fallback(handler: MockAsyncActivity): MockAsyncBuilder;
|
|
17
|
+
}
|
|
18
|
+
export declare function mockAsync(): MockAsyncBuilder;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=mock-async.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-async.d.ts","sourceRoot":"","sources":["../../../src/testing/tools/mock-async.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA;AAE5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAC5E,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,iCAAiC,CAAA;AAExC,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,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,mBAAmB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAC/C,OAAO,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5D,KAAK,SAAS,CAAC,CAAC,SAAS,gBAAgB,IACrC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAC/C,mBAAmB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,GACjD,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,CAkF5C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { AsyncActivity, } from '../../models/AsyncActivity.js';
|
|
2
|
+
import { TestClock } from '../TestClock.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
|
+
if (Array.isArray(entry.handler)) {
|
|
20
|
+
const result = entry.handler[callCount];
|
|
21
|
+
if (result === undefined)
|
|
22
|
+
throw new Error(`mockAsync().on(${activity.constructor.name}): no outcome at call ${callCount} (${entry.handler.length} defined)`);
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
return entry.handler;
|
|
26
|
+
}
|
|
27
|
+
if (timeoutFallback && context.pending.timeoutAt) {
|
|
28
|
+
const target = context.pending.timeoutAt.getTime();
|
|
29
|
+
if (TestClock.isActive() && TestClock.now() < target)
|
|
30
|
+
TestClock.advance(target - TestClock.now());
|
|
31
|
+
return { status: 'timeout' };
|
|
32
|
+
}
|
|
33
|
+
if (fallbackHandler)
|
|
34
|
+
return fallbackHandler(activity, context);
|
|
35
|
+
throw new Error(`mockAsync(): no handler registered for "${activity.constructor.name}"`);
|
|
36
|
+
};
|
|
37
|
+
const builder = Object.assign(execute, {
|
|
38
|
+
on(ActivityClass, handler) {
|
|
39
|
+
entries.push({
|
|
40
|
+
ActivityClass: ActivityClass,
|
|
41
|
+
handler: handler,
|
|
42
|
+
callCount: 0,
|
|
43
|
+
});
|
|
44
|
+
return builder;
|
|
45
|
+
},
|
|
46
|
+
timeout() {
|
|
47
|
+
timeoutFallback = true;
|
|
48
|
+
return builder;
|
|
49
|
+
},
|
|
50
|
+
fallback(handler) {
|
|
51
|
+
fallbackHandler = handler;
|
|
52
|
+
return builder;
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
return builder;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=mock-async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-async.js","sourceRoot":"","sources":["../../../src/testing/tools/mock-async.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,GAEd,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AA+C3C,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAc,EAAE,CAAA;IAE7B,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,eAA8C,CAAA;IAElD,MAAM,OAAO,GAAsB,KAAK,EACtC,QAA0B,EAC1B,OAAiC,EACH,EAAE;QAChC,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;YAEnC,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;gBACrC,OAAQ,KAAK,CAAC,OAAwC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAEvE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBAEvC,IAAI,MAAM,KAAK,SAAS;oBACtB,MAAM,IAAI,KAAK,CACb,kBAAkB,QAAQ,CAAC,WAAW,CAAC,IAAI,yBAAyB,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,WAAW,CAClH,CAAA;gBAEH,OAAO,MAAM,CAAA;YACf,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;YAEtB,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,QAAQ,CAAC,OAA0B;YACjC,eAAe,GAAG,OAAO,CAAA;YAEzB,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Internals, type Activity, type HistoryItem, type PushActivity } from '../../core.js';
|
|
2
|
+
import type { MockAsyncActivity } from '../typings/MockAsyncActivity.js';
|
|
3
|
+
interface ResolveActivityOptions {
|
|
4
|
+
mock?: MockAsyncActivity;
|
|
5
|
+
state?: {
|
|
6
|
+
callCount: number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveActivity(push: PushActivity<Activity>, context: Omit<Internals.ActivityRunContext, 'id'>, options?: ResolveActivityOptions): Promise<HistoryItem>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=resolve-activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-activity.d.ts","sourceRoot":"","sources":["../../../src/testing/tools/resolve-activity.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,YAAY,EAElB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACxB,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,EACjD,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,WAAW,CAAC,CAqCtB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { resolveAsyncActivity } from './resolve-async-activity.js';
|
|
2
|
+
import { SyncActivity, Internals, AsyncActivity, } from '../../core.js';
|
|
3
|
+
export async function resolveActivity(push, context, options) {
|
|
4
|
+
const activity = push.activity;
|
|
5
|
+
const activityContext = {
|
|
6
|
+
...context,
|
|
7
|
+
id: activity.id,
|
|
8
|
+
};
|
|
9
|
+
if (activity instanceof SyncActivity) {
|
|
10
|
+
const output = await Internals.runActivity(activity, activityContext, instance => instance.run(push.input));
|
|
11
|
+
return { id: activity.id, type: 'sync', output };
|
|
12
|
+
}
|
|
13
|
+
if (activity instanceof AsyncActivity) {
|
|
14
|
+
const bootstrap = await Internals.runActivity(activity, activityContext, instance => instance.bootstrap(push.input));
|
|
15
|
+
return resolveAsyncActivity({
|
|
16
|
+
...activityContext,
|
|
17
|
+
activity,
|
|
18
|
+
bootstrap,
|
|
19
|
+
}, push.input, options);
|
|
20
|
+
}
|
|
21
|
+
throw new Error('Unknown activity type');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=resolve-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-activity.js","sourceRoot":"","sources":["../../../src/testing/tools/resolve-activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EACL,YAAY,EACZ,SAAS,EAIT,aAAa,GACd,MAAM,eAAe,CAAA;AAQtB,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA4B,EAC5B,OAAiD,EACjD,OAAgC;IAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAE9B,MAAM,eAAe,GAAiC;QACpD,GAAG,OAAO;QACV,EAAE,EAAE,QAAQ,CAAC,EAAE;KAChB,CAAA;IAED,IAAI,QAAQ,YAAY,YAAY,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CACxC,QAAQ,EACR,eAAe,EACf,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CACrC,CAAA;QAED,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;IAClD,CAAC;IAED,IAAI,QAAQ,YAAY,aAAa,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,WAAW,CAC3C,QAAQ,EACR,eAAe,EACf,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3C,CAAA;QAED,OAAO,oBAAoB,CACzB;YACE,GAAG,eAAe;YAClB,QAAQ;YACR,SAAS;SACV,EACD,IAAI,CAAC,KAAK,EACV,OAAO,CACR,CAAA;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Internals, type AnyAsyncActivity, type HistoryItem } from '../../core.js';
|
|
2
|
+
import type { MockAsyncActivity } from '../typings/MockAsyncActivity.js';
|
|
3
|
+
interface ResolveAsyncActivityOptions {
|
|
4
|
+
mock?: MockAsyncActivity;
|
|
5
|
+
state?: {
|
|
6
|
+
callCount: number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
interface ResolveAsyncActivityContext extends Internals.ActivityRunContext {
|
|
10
|
+
activity: AnyAsyncActivity;
|
|
11
|
+
bootstrap: unknown;
|
|
12
|
+
}
|
|
13
|
+
export declare function resolveAsyncActivity(context: ResolveAsyncActivityContext, input: unknown, options?: ResolveAsyncActivityOptions): Promise<HistoryItem>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=resolve-async-activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-async-activity.d.ts","sourceRoot":"","sources":["../../../src/testing/tools/resolve-async-activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE,UAAU,2BAA2B;IACnC,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACxB,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B;AAED,UAAU,2BAA4B,SAAQ,SAAS,CAAC,kBAAkB;IACxE,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,SAAS,EAAE,OAAO,CAAA;CACnB;AA6DD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,EACpC,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,WAAW,CAAC,CAoCtB"}
|