@codemation/core 0.14.0 → 0.15.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/CHANGELOG.md +68 -0
- package/dist/{CostCatalogContract-B9aYIqJu.d.cts → CostCatalogContract-Dwo-ZamG.d.cts} +2 -2
- package/dist/EngineRuntimeRegistration.types-BiNasx3G.d.cts +54 -0
- package/dist/EngineRuntimeRegistration.types-Dq4ucrdo.d.ts +21 -0
- package/dist/{InMemoryRunDataFactory-C3rIszrW.d.cts → InMemoryRunDataFactory-D2U9azmZ.d.cts} +2 -20
- package/dist/{InMemoryRunEventBusRegistry-Sa86VxuV.cjs → InMemoryRunEventBusRegistry-DO0WM9Lw.cjs} +1 -1
- package/dist/{InMemoryRunEventBusRegistry-Sa86VxuV.cjs.map → InMemoryRunEventBusRegistry-DO0WM9Lw.cjs.map} +1 -1
- package/dist/{InMemoryRunEventBusRegistry-Bwunvt1T.js → InMemoryRunEventBusRegistry-Layt2xgm.js} +1 -1
- package/dist/{InMemoryRunEventBusRegistry-Bwunvt1T.js.map → InMemoryRunEventBusRegistry-Layt2xgm.js.map} +1 -1
- package/dist/{ItemsInputNormalizer-UCpn7luX.d.cts → ItemsInputNormalizer-A5txcOWX.d.cts} +3 -98
- package/dist/{ItemsInputNormalizer-B9SdLG24.cjs → ItemsInputNormalizer-C1fv3sMW.cjs} +2 -2
- package/dist/ItemsInputNormalizer-C1fv3sMW.cjs.map +1 -0
- package/dist/{ItemsInputNormalizer-DoOawd9R.d.ts → ItemsInputNormalizer-D2vrMrX1.d.ts} +2 -62
- package/dist/{ItemsInputNormalizer-CZEODg94.js → ItemsInputNormalizer-fUYo4GLV.js} +2 -2
- package/dist/ItemsInputNormalizer-fUYo4GLV.js.map +1 -0
- package/dist/{RunIntentService-0f3ICjAz.d.cts → RunIntentService-DKxuHTUz.d.cts} +2 -15
- package/dist/{RunIntentService-Dx_HHxDX.d.ts → RunIntentService-DrpKli2k.d.ts} +2 -22
- package/dist/{agentMcpTypes-B11B3Hd-.d.cts → agentMcpTypes-BHX4RQCC.d.cts} +24 -524
- package/dist/bootstrap/index.cjs +9 -5
- package/dist/bootstrap/index.d.cts +32 -106
- package/dist/bootstrap/index.d.ts +18 -17
- package/dist/bootstrap/index.js +6 -5
- package/dist/{bootstrap-Be0LB0nh.cjs → bootstrap-CTB53rEF.cjs} +9 -60
- package/dist/bootstrap-CTB53rEF.cjs.map +1 -0
- package/dist/{bootstrap-pSQdsMfa.js → bootstrap-DmqKheCI.js} +6 -57
- package/dist/bootstrap-DmqKheCI.js.map +1 -0
- package/dist/browser.cjs +12 -11
- package/dist/browser.d.cts +4 -4
- package/dist/browser.d.ts +3 -3
- package/dist/browser.js +3 -2
- package/dist/contracts-7L1wJHdk.cjs +569 -0
- package/dist/contracts-7L1wJHdk.cjs.map +1 -0
- package/dist/contracts-CjJ5CZ7N.js +447 -0
- package/dist/contracts-CjJ5CZ7N.js.map +1 -0
- package/dist/contracts.cjs +9 -2
- package/dist/contracts.d.cts +5 -5
- package/dist/contracts.d.ts +2 -2
- package/dist/contracts.js +3 -2
- package/dist/{executionPersistenceContracts-CX9Ql8N1.d.cts → deploymentManifestTypes-B8CDmZZK.d.cts} +65 -81
- package/dist/di-C6Ubf9o5.cjs +179 -0
- package/dist/di-C6Ubf9o5.cjs.map +1 -0
- package/dist/di-Cjiil7U-.js +114 -0
- package/dist/di-Cjiil7U-.js.map +1 -0
- package/dist/{index-CbJdbIHe.d.ts → index-CRv3_pY3.d.ts} +87 -870
- package/dist/{index-uPnD9EE6.d.ts → index-mnLS0iQl.d.ts} +27 -400
- package/dist/index.cjs +44 -115
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -524
- package/dist/index.d.ts +5 -5
- package/dist/index.js +21 -98
- package/dist/index.js.map +1 -1
- package/dist/{params-Dwl10Ws9.d.cts → params-CrK4iuG1.d.cts} +2 -11
- package/dist/{runtime-CSunvf7A.js → runtime-CBFDpmiz.js} +46 -679
- package/dist/runtime-CBFDpmiz.js.map +1 -0
- package/dist/{runtime-n2tqRwaf.cjs → runtime-Due-FOZ2.cjs} +69 -752
- package/dist/runtime-Due-FOZ2.cjs.map +1 -0
- package/dist/testing.cjs +8 -40
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +3 -32
- package/dist/testing.d.ts +3 -32
- package/dist/testing.js +6 -38
- package/dist/testing.js.map +1 -1
- package/dist/{di-DhwtDRgs.cjs → workflowTypes-BW6Hhee7.cjs} +4 -229
- package/dist/workflowTypes-BW6Hhee7.cjs.map +1 -0
- package/dist/{di-CEV6wTc4.js → workflowTypes-DZtBTmKf.js} +3 -162
- package/dist/workflowTypes-DZtBTmKf.js.map +1 -0
- package/package.json +1 -1
- package/src/ai/AgentConnectionNodeCollector.ts +0 -4
- package/src/ai/AgentMessageConfigNormalizerFactory.ts +0 -4
- package/src/ai/AiHost.ts +0 -38
- package/src/ai/CallableToolConfig.ts +0 -9
- package/src/ai/CallableToolKindToken.ts +0 -4
- package/src/authoring/callableTool.types.ts +0 -3
- package/src/authoring/defineCollection.types.ts +0 -11
- package/src/authoring/defineHumanApprovalNode.types.ts +0 -116
- package/src/authoring/defineNode.types.ts +0 -25
- package/src/authoring/definePollingTrigger.types.ts +18 -152
- package/src/authoring/definePollingTriggerInternals.ts +0 -4
- package/src/authoring/nodeBaseOptions.types.ts +0 -14
- package/src/binaries/boundedReadBinary.types.ts +0 -16
- package/src/bootstrap/index.ts +8 -2
- package/src/bootstrap/runtime/EngineRuntimeRegistrar.ts +0 -5
- package/src/bootstrap/runtime/EngineRuntimeRegistration.types.ts +0 -23
- package/src/browser.ts +0 -3
- package/src/contracts/AgentBindError.ts +0 -5
- package/src/contracts/Clock.ts +0 -1
- package/src/contracts/CodemationTelemetryAttributeNames.ts +0 -10
- package/src/contracts/NoOpAgentMcpIntegration.ts +0 -6
- package/src/contracts/NoOpTelemetrySpanScope.ts +0 -7
- package/src/contracts/RetryPolicy.ts +0 -2
- package/src/contracts/agentMcpTypes.ts +0 -34
- package/src/contracts/assertionTypes.ts +0 -33
- package/src/contracts/baseTypes.ts +0 -6
- package/src/contracts/collectionTypes.ts +0 -25
- package/src/contracts/credentialTypes.ts +13 -60
- package/src/contracts/deploymentManifestTypes.ts +158 -0
- package/src/contracts/dispatchTypes.ts +29 -0
- package/src/contracts/executionPersistenceContracts.ts +0 -33
- package/src/contracts/hitlSeamTypes.ts +0 -14
- package/src/contracts/humanTaskStoreTypes.ts +0 -2
- package/src/contracts/inboxChannelTypes.ts +0 -9
- package/src/contracts/index.ts +3 -0
- package/src/contracts/itemExpr.ts +0 -18
- package/src/contracts/itemMeta.ts +0 -3
- package/src/contracts/mcpTypes.ts +0 -16
- package/src/contracts/retryPolicySpec.types.ts +0 -10
- package/src/contracts/runFinishedAtFactory.ts +0 -1
- package/src/contracts/runTypes.ts +0 -74
- package/src/contracts/runtimeTypes.ts +4 -131
- package/src/contracts/telemetryTypes.ts +0 -7
- package/src/contracts/testTriggerTypes.ts +0 -43
- package/src/contracts/triggerInvokerTypes.ts +6 -0
- package/src/contracts/webhookTypes.ts +0 -8
- package/src/contracts/workflowActivationPolicy.ts +0 -5
- package/src/contracts/workflowTypes.ts +4 -86
- package/src/contracts/workspaceFileTypes.ts +0 -72
- package/src/contracts.ts +18 -10
- package/src/credentials/CredentialMaterialProvider.types.ts +0 -28
- package/src/credentials/ManagedCredentialMaterialWriteError.ts +0 -6
- package/src/credentials/ManagedMaterialFetchError.ts +0 -6
- package/src/credentials/OAuthFlowExecutor.types.ts +0 -15
- package/src/di/CoreTokens.ts +2 -6
- package/src/events/ConnectionInvocationEventPublisher.ts +0 -7
- package/src/events/NodeEventPublisher.ts +0 -1
- package/src/events/runEvents.ts +0 -8
- package/src/execution/ActivationEnqueueService.ts +0 -10
- package/src/execution/ChildExecutionScopeFactory.ts +0 -13
- package/src/execution/FanInMergeByOriginMerger.ts +0 -11
- package/src/execution/InProcessRetryRunner.ts +0 -1
- package/src/execution/ItemExprResolver.ts +0 -3
- package/src/execution/NodeActivationRequestComposer.ts +0 -3
- package/src/execution/NodeActivationRequestInputPreparer.ts +0 -5
- package/src/execution/NodeExecutionSnapshotFactory.ts +0 -1
- package/src/execution/NodeExecutor.ts +1 -17
- package/src/execution/NodeSuspensionHandler.ts +1 -39
- package/src/execution/PersistedRunStateTerminalBuilder.ts +0 -5
- package/src/execution/RunSuspendedError.ts +0 -10
- package/src/execution/WorkflowRunExecutionContextFactory.ts +0 -3
- package/src/orchestration/AbortControllerFactory.ts +0 -4
- package/src/orchestration/Engine.ts +0 -9
- package/src/orchestration/NodeExecutionRequestHandlerService.ts +3 -4
- package/src/orchestration/RunContinuationService.ts +7 -39
- package/src/orchestration/RunStartService.ts +0 -7
- package/src/orchestration/TestSuiteOrchestrator.ts +0 -18
- package/src/orchestration/TestSuiteRunIdFactory.ts +0 -4
- package/src/orchestration/TriggerRuntimeService.ts +3 -2
- package/src/planning/CurrentStateFrontierPlanner.ts +0 -1
- package/src/planning/RunQueuePlanner.ts +0 -6
- package/src/policies/executionLimits/EngineExecutionLimitsPolicy.ts +0 -8
- package/src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts +0 -3
- package/src/runStorage/RunSummaryMapper.ts +0 -1
- package/src/runtime/EngineFactory.ts +6 -11
- package/src/runtime/RunIntentService.ts +0 -4
- package/src/runtime/WorkflowRepositoryWebhookTriggerMatcher.ts +0 -4
- package/src/runtime-types/InjectableRuntimeDecoratorComposerRegistry.ts +0 -4
- package/src/runtime-types/PersistedRuntimeTypeMetadataStoreRegistry.ts +0 -4
- package/src/runtime-types/PersistedRuntimeTypeNameResolver.ts +0 -1
- package/src/runtime-types/persistedRuntimeTypeModelRegistry.ts +0 -4
- package/src/runtime-types/runtimeTypeDecorators.types.ts +0 -12
- package/src/scheduler/ConfigDrivenOffloadPolicy.ts +0 -1
- package/src/scheduler/DefaultDrivingScheduler.ts +0 -6
- package/src/scheduler/InlineDrivingScheduler.ts +0 -13
- package/src/serialization/ItemsInputNormalizer.ts +0 -5
- package/src/testing/CapturingScheduler.ts +0 -3
- package/src/testing/EngineTestKitRunIdFactory.ts +0 -3
- package/src/testing/ItemHarnessNode.ts +0 -3
- package/src/testing/ItemHarnessNodeConfig.ts +0 -4
- package/src/testing/PrefixedSequentialIdGenerator.ts +0 -3
- package/src/testing/RegistrarEngineTestKit.types.ts +0 -2
- package/src/testing/RejectingCredentialSessionService.ts +0 -4
- package/src/testing/SubWorkflowRunnerTestNode.ts +0 -3
- package/src/testing/WorkflowTestHarnessManualTrigger.ts +0 -3
- package/src/testing/WorkflowTestKitBuilder.ts +0 -4
- package/src/testing/WorkflowTestKitRunNodeWorkflowFactory.ts +0 -3
- package/src/testing.ts +0 -3
- package/src/triggers/polling/PollingTriggerDedupWindow.ts +0 -4
- package/src/triggers/polling/PollingTriggerLogger.ts +0 -5
- package/src/triggers/polling/PollingTriggerRuntime.ts +0 -5
- package/src/types/index.ts +0 -6
- package/src/validation/WorkflowEdgePortValidator.ts +0 -5
- package/src/workflow/definition/ConnectionInvocationIdFactory.ts +0 -7
- package/src/workflow/definition/ConnectionNodeIdFactory.ts +0 -6
- package/src/workflow/definition/NodeIterationIdFactory.ts +0 -13
- package/src/workflow/definition/WorkflowExecutableNodeClassifier.ts +0 -6
- package/src/workflow/dsl/ChainCursorResolver.ts +0 -20
- package/src/workflow/dsl/NodeIdSlugifier.ts +0 -9
- package/src/workflow/dsl/WhenBuilder.ts +0 -17
- package/src/workflow/dsl/WorkflowDefinitionError.ts +0 -9
- package/src/workflow/dsl/workflowBuilderTypes.ts +0 -24
- package/src/workflowSnapshots/MissingRuntimeParityGuard.ts +24 -0
- package/src/workflowSnapshots/PersistedWorkflowTokenRegistry.ts +0 -6
- package/src/workflowSnapshots/WorkflowParityMismatchError.ts +18 -0
- package/src/workflowSnapshots/WorkflowSnapshotCodec.ts +0 -5
- package/src/workflowSnapshots/index.ts +3 -0
- package/dist/EngineRuntimeRegistration.types-BYAmGMdS.d.cts +0 -81
- package/dist/EngineRuntimeRegistration.types-CVLI8DsJ.d.ts +0 -44
- package/dist/ItemsInputNormalizer-B9SdLG24.cjs.map +0 -1
- package/dist/ItemsInputNormalizer-CZEODg94.js.map +0 -1
- package/dist/bootstrap-Be0LB0nh.cjs.map +0 -1
- package/dist/bootstrap-pSQdsMfa.js.map +0 -1
- package/dist/contracts-CK0x6w_G.cjs +0 -74
- package/dist/contracts-CK0x6w_G.cjs.map +0 -1
- package/dist/contracts-DXdfTdpW.js +0 -50
- package/dist/contracts-DXdfTdpW.js.map +0 -1
- package/dist/di-CEV6wTc4.js.map +0 -1
- package/dist/di-DhwtDRgs.cjs.map +0 -1
- package/dist/runtime-CSunvf7A.js.map +0 -1
- package/dist/runtime-n2tqRwaf.cjs.map +0 -1
package/dist/testing.cjs
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
const require_di = require('./di-
|
|
2
|
-
require('./
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
1
|
+
const require_di = require('./di-C6Ubf9o5.cjs');
|
|
2
|
+
require('./workflowTypes-BW6Hhee7.cjs');
|
|
3
|
+
const require_contracts = require('./contracts-7L1wJHdk.cjs');
|
|
4
|
+
const require_runtime = require('./runtime-Due-FOZ2.cjs');
|
|
5
|
+
const require_InMemoryRunEventBusRegistry = require('./InMemoryRunEventBusRegistry-DO0WM9Lw.cjs');
|
|
6
|
+
const require_bootstrap = require('./bootstrap-CTB53rEF.cjs');
|
|
6
7
|
let tsyringe = require("tsyringe");
|
|
7
8
|
tsyringe = require_di.__toESM(tsyringe);
|
|
8
9
|
|
|
9
10
|
//#region src/testing/RejectingCredentialSessionService.ts
|
|
10
|
-
/**
|
|
11
|
-
* Test harness default: rejects any credential lookup so missing bindings fail loudly.
|
|
12
|
-
* Prefer registering a real {@link CredentialSessionService} in integration scenarios.
|
|
13
|
-
*/
|
|
14
11
|
var RejectingCredentialSessionService = class {
|
|
15
12
|
async getSession(args) {
|
|
16
13
|
throw new Error(`Credential sessions are unavailable for workflow ${args.workflowId} node ${args.nodeId} slot "${args.slotKey}". Register a real CredentialSessionService implementation before executing workflows.`);
|
|
@@ -19,9 +16,6 @@ var RejectingCredentialSessionService = class {
|
|
|
19
16
|
|
|
20
17
|
//#endregion
|
|
21
18
|
//#region src/testing/ItemHarnessNode.ts
|
|
22
|
-
/**
|
|
23
|
-
* Item-mode harness node for engine tests (see {@link ItemHarnessNodeConfig}).
|
|
24
|
-
*/
|
|
25
19
|
var ItemHarnessNode = class {
|
|
26
20
|
kind = "node";
|
|
27
21
|
outputPorts = ["main"];
|
|
@@ -38,10 +32,6 @@ var ItemHarnessNode = class {
|
|
|
38
32
|
|
|
39
33
|
//#endregion
|
|
40
34
|
//#region src/testing/ItemHarnessNodeConfig.ts
|
|
41
|
-
/**
|
|
42
|
-
* Item-mode harness node config for engine tests: engine applies {@link RunnableNodeConfig.inputSchema},
|
|
43
|
-
* then {@link ItemHarnessNode.execute} per item.
|
|
44
|
-
*/
|
|
45
35
|
var ItemHarnessNodeConfig = class {
|
|
46
36
|
kind = "node";
|
|
47
37
|
type = ItemHarnessNode;
|
|
@@ -58,9 +48,6 @@ var ItemHarnessNodeConfig = class {
|
|
|
58
48
|
|
|
59
49
|
//#endregion
|
|
60
50
|
//#region src/testing/CapturingScheduler.ts
|
|
61
|
-
/**
|
|
62
|
-
* Test scheduler that records enqueue requests without executing a real queue.
|
|
63
|
-
*/
|
|
64
51
|
var CapturingScheduler = class {
|
|
65
52
|
lastRequest;
|
|
66
53
|
requests = [];
|
|
@@ -73,9 +60,6 @@ var CapturingScheduler = class {
|
|
|
73
60
|
|
|
74
61
|
//#endregion
|
|
75
62
|
//#region src/testing/PrefixedSequentialIdGenerator.ts
|
|
76
|
-
/**
|
|
77
|
-
* Deterministic `run_1`, `act_1`-style ids for test harness factories.
|
|
78
|
-
*/
|
|
79
63
|
var PrefixedSequentialIdGenerator = class {
|
|
80
64
|
n = 0;
|
|
81
65
|
constructor(prefix) {
|
|
@@ -92,9 +76,6 @@ var PrefixedSequentialIdGenerator = class {
|
|
|
92
76
|
|
|
93
77
|
//#endregion
|
|
94
78
|
//#region src/testing/EngineTestKitRunIdFactory.ts
|
|
95
|
-
/**
|
|
96
|
-
* @internal Test harness id factory shared by registrar kit wiring.
|
|
97
|
-
*/
|
|
98
79
|
var EngineTestKitRunIdFactory = class {
|
|
99
80
|
runCounter = 0;
|
|
100
81
|
activationCounter = 0;
|
|
@@ -132,9 +113,6 @@ var InMemoryTriggerSetupStateRepository = class {
|
|
|
132
113
|
|
|
133
114
|
//#endregion
|
|
134
115
|
//#region src/testing/SubWorkflowRunnerTestNode.ts
|
|
135
|
-
/**
|
|
136
|
-
* Test harness subworkflow runner (mirrors integration patterns; lives under {@link "@codemation/core/testing"}).
|
|
137
|
-
*/
|
|
138
116
|
var SubWorkflowRunnerConfig = class {
|
|
139
117
|
kind = "node";
|
|
140
118
|
type = SubWorkflowRunnerNode;
|
|
@@ -185,9 +163,6 @@ var SubWorkflowRunnerNode = class {
|
|
|
185
163
|
|
|
186
164
|
//#endregion
|
|
187
165
|
//#region src/testing/WorkflowTestHarnessManualTrigger.ts
|
|
188
|
-
/**
|
|
189
|
-
* Minimal pass-through manual trigger for {@link WorkflowTestKit.runNode}; emits input items unchanged.
|
|
190
|
-
*/
|
|
191
166
|
var WorkflowTestHarnessManualTriggerConfig = class {
|
|
192
167
|
kind = "trigger";
|
|
193
168
|
type = WorkflowTestHarnessManualTriggerNode;
|
|
@@ -252,7 +227,7 @@ var RegistrarEngineTestKitFactory = class {
|
|
|
252
227
|
dependencyContainer.registerInstance(require_di.CoreTokens.RunDataFactory, runDataFactory);
|
|
253
228
|
dependencyContainer.registerInstance(require_di.CoreTokens.ExecutionContextFactory, executionContextFactory);
|
|
254
229
|
dependencyContainer.registerInstance(require_di.CoreTokens.RunEventBus, eventBus);
|
|
255
|
-
dependencyContainer.registerInstance(require_di.CoreTokens.PersistedWorkflowTokenRegistry, new
|
|
230
|
+
dependencyContainer.registerInstance(require_di.CoreTokens.PersistedWorkflowTokenRegistry, new require_contracts.PersistedWorkflowTokenRegistry());
|
|
256
231
|
dependencyContainer.registerInstance(require_di.CoreTokens.WorkflowActivationPolicy, new require_runtime.AllWorkflowsActiveWorkflowActivationPolicy());
|
|
257
232
|
if (options.executionLimitsPolicy !== void 0) dependencyContainer.registerInstance(require_di.CoreTokens.EngineExecutionLimitsPolicy, options.executionLimitsPolicy);
|
|
258
233
|
new require_bootstrap.EngineRuntimeRegistrar().register(dependencyContainer, options.registrarOptions ?? {});
|
|
@@ -314,9 +289,6 @@ var WorkflowTestKitNodeRegistrationContextFactory = class {
|
|
|
314
289
|
//#region src/testing/WorkflowTestKitRunNodeWorkflowFactory.ts
|
|
315
290
|
const defaultInlineWorkflowId = "codemation.testing.workflowkit.inline";
|
|
316
291
|
const defaultInlineWorkflowName = "WorkflowTestKit inline";
|
|
317
|
-
/**
|
|
318
|
-
* Builds the minimal trigger → runnable workflow used by {@link import("./WorkflowTestKit").WorkflowTestKit.runNode}.
|
|
319
|
-
*/
|
|
320
292
|
var WorkflowTestKitRunNodeWorkflowFactory = class {
|
|
321
293
|
build(args) {
|
|
322
294
|
const workflowId = args.workflowId ?? defaultInlineWorkflowId;
|
|
@@ -356,10 +328,6 @@ var WorkflowTestKit = class {
|
|
|
356
328
|
get runStore() {
|
|
357
329
|
return this.handle.runStore;
|
|
358
330
|
}
|
|
359
|
-
/**
|
|
360
|
-
* Registers {@link import("../authoring/defineNode.types").DefinedNode} implementations on the same DI container used by the engine
|
|
361
|
-
* (same pattern as `plugin.register({ registerNode })` in the host).
|
|
362
|
-
*/
|
|
363
331
|
registerDefinedNodes(definitions) {
|
|
364
332
|
const ctx = this.nodeRegistrationContextFactory.create(this.handle.dependencyContainer);
|
|
365
333
|
for (const def of definitions) def.register(ctx);
|
|
@@ -387,7 +355,7 @@ exports.CapturingScheduler = CapturingScheduler;
|
|
|
387
355
|
exports.InMemoryLiveWorkflowRepository = require_runtime.InMemoryLiveWorkflowRepository;
|
|
388
356
|
exports.ItemHarnessNode = ItemHarnessNode;
|
|
389
357
|
exports.ItemHarnessNodeConfig = ItemHarnessNodeConfig;
|
|
390
|
-
exports.PersistedWorkflowSnapshotFactory =
|
|
358
|
+
exports.PersistedWorkflowSnapshotFactory = require_contracts.WorkflowSnapshotCodec;
|
|
391
359
|
exports.PrefixedSequentialIdGenerator = PrefixedSequentialIdGenerator;
|
|
392
360
|
exports.RegistrarEngineTestKitFactory = RegistrarEngineTestKitFactory;
|
|
393
361
|
exports.RejectingCredentialSessionService = RejectingCredentialSessionService;
|
package/dist/testing.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.cjs","names":["name: string","inputSchema: ZodType<TIn>","runOne: (args: {\n input: TIn;\n item: Item<TIn>;\n itemIndex: number;\n items: Items<TIn>;\n ctx: NodeExecutionContext<ItemHarnessNodeConfig<TIn, TOut>>;\n }) => TOut | Promise<TOut>","opts: Readonly<{\n id?: string;\n }>","prefix: string","makeRunIdValue: () => string","makeActivationIdValue: () => string","name: string","args: Readonly<{\n workflowId: WorkflowId;\n startAt?: NodeId;\n id?: string;\n execution?: Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }>;\n }>","workflows: WorkflowRunnerService","emitPorts","name: string","id?: string","emitPorts","InMemoryWorkflowExecutionRepository","HintOnlyOffloadPolicy","InMemoryRunEventBus","InMemoryLiveWorkflowRepository","InMemoryRunDataFactory","DefaultExecutionContextFactory","tsyringeContainer","DefaultDrivingScheduler","InlineDrivingScheduler","NodeExecutor","NodeInstanceFactory","InProcessRetryRunner","DefaultAsyncSleeper","CoreTokens","PersistedWorkflowTokenRegistry","AllWorkflowsActiveWorkflowActivationPolicy","EngineRuntimeRegistrar","Engine","RunIntentService","runToCompletion: RegistrarEngineTestKitHandle[\"runToCompletion\"]","runIntentStartToCompletion: RegistrarEngineTestKitHandle[\"runIntentStartToCompletion\"]","WorkflowBuilder"],"sources":["../src/testing/RejectingCredentialSessionService.ts","../src/testing/ItemHarnessNode.ts","../src/testing/ItemHarnessNodeConfig.ts","../src/testing/CapturingScheduler.ts","../src/testing/PrefixedSequentialIdGenerator.ts","../src/testing/EngineTestKitRunIdFactory.ts","../src/testing/InMemoryTriggerSetupStateRepository.ts","../src/testing/SubWorkflowRunnerTestNode.ts","../src/testing/WorkflowTestHarnessManualTrigger.ts","../src/testing/SwitchHarnessNode.ts","../src/testing/RegistrarEngineTestKitFactory.ts","../src/testing/WorkflowTestKitNodeRegistrationContextFactory.ts","../src/testing/WorkflowTestKitRunNodeWorkflowFactory.ts","../src/testing/WorkflowTestKitBuilder.ts"],"sourcesContent":["import type { CredentialSessionService } from \"../contracts/credentialTypes\";\n\n/**\n * Test harness default: rejects any credential lookup so missing bindings fail loudly.\n * Prefer registering a real {@link CredentialSessionService} in integration scenarios.\n */\nexport class RejectingCredentialSessionService implements CredentialSessionService {\n async getSession<TSession = unknown>(\n args: Readonly<{ workflowId: string; nodeId: string; slotKey: string }>,\n ): Promise<TSession> {\n throw new Error(\n `Credential sessions are unavailable for workflow ${args.workflowId} node ${args.nodeId} slot \"${args.slotKey}\". Register a real CredentialSessionService implementation before executing workflows.`,\n );\n }\n}\n","import type { Item, RunnableNode, RunnableNodeExecuteArgs } from \"../types\";\n\nimport type { ItemHarnessNodeConfig } from \"./ItemHarnessNodeConfig\";\n\n/**\n * Item-mode harness node for engine tests (see {@link ItemHarnessNodeConfig}).\n */\nexport class ItemHarnessNode implements RunnableNode<ItemHarnessNodeConfig<any, any>> {\n readonly kind = \"node\" as const;\n readonly outputPorts = [\"main\"] as const;\n\n async execute(args: RunnableNodeExecuteArgs<ItemHarnessNodeConfig<any, any>>): Promise<unknown> {\n return await args.ctx.config.runOne({\n input: args.input as never,\n item: args.item as Item,\n itemIndex: args.itemIndex,\n items: args.items,\n ctx: args.ctx,\n });\n }\n}\n","import type { ZodType } from \"zod\";\n\nimport type { TypeToken } from \"../di\";\nimport type { Item, Items, NodeExecutionContext, RunnableNodeConfig } from \"../types\";\n\nimport { ItemHarnessNode } from \"./ItemHarnessNode\";\n\n/**\n * Item-mode harness node config for engine tests: engine applies {@link RunnableNodeConfig.inputSchema},\n * then {@link ItemHarnessNode.execute} per item.\n */\nexport class ItemHarnessNodeConfig<TIn = unknown, TOut = unknown> implements RunnableNodeConfig<TIn, TOut> {\n readonly kind = \"node\" as const;\n readonly type: TypeToken<unknown> = ItemHarnessNode;\n\n constructor(\n public readonly name: string,\n public readonly inputSchema: ZodType<TIn>,\n public readonly runOne: (args: {\n input: TIn;\n item: Item<TIn>;\n itemIndex: number;\n items: Items<TIn>;\n ctx: NodeExecutionContext<ItemHarnessNodeConfig<TIn, TOut>>;\n }) => TOut | Promise<TOut>,\n public readonly opts: Readonly<{\n id?: string;\n }> = {},\n ) {}\n\n get id(): string | undefined {\n return this.opts.id;\n }\n}\n","import type { NodeExecutionRequest, NodeExecutionScheduler } from \"../types\";\n\n/**\n * Test scheduler that records enqueue requests without executing a real queue.\n */\nexport class CapturingScheduler implements NodeExecutionScheduler {\n lastRequest: NodeExecutionRequest | undefined;\n requests: NodeExecutionRequest[] = [];\n\n async enqueue(request: NodeExecutionRequest): Promise<{ receiptId: string }> {\n this.lastRequest = request;\n this.requests.push(request);\n return { receiptId: `receipt_${this.requests.length}` };\n }\n}\n","/**\n * Deterministic `run_1`, `act_1`-style ids for test harness factories.\n */\nexport class PrefixedSequentialIdGenerator {\n private n = 0;\n\n constructor(private readonly prefix: string) {}\n\n next(): string {\n this.n += 1;\n return `${this.prefix}${this.n}`;\n }\n\n asFn(): () => string {\n return () => this.next();\n }\n}\n","import type { RunIdFactory } from \"../types\";\n\n/**\n * @internal Test harness id factory shared by registrar kit wiring.\n */\nexport class EngineTestKitRunIdFactory implements RunIdFactory {\n private runCounter = 0;\n private activationCounter = 0;\n\n constructor(\n private readonly makeRunIdValue: () => string,\n private readonly makeActivationIdValue: () => string,\n ) {}\n\n makeRunId(): string {\n this.runCounter += 1;\n return this.makeRunIdValue();\n }\n\n makeActivationId(): string {\n this.activationCounter += 1;\n return this.makeActivationIdValue();\n }\n}\n","import type { PersistedTriggerSetupState, TriggerSetupStateRepository } from \"../types\";\n\nexport class InMemoryTriggerSetupStateRepository implements TriggerSetupStateRepository {\n private readonly statesByKey = new Map<string, PersistedTriggerSetupState>();\n\n async load(trigger: { workflowId: string; nodeId: string }): Promise<PersistedTriggerSetupState | undefined> {\n return this.statesByKey.get(this.toKey(trigger));\n }\n\n async save(state: PersistedTriggerSetupState): Promise<void> {\n this.statesByKey.set(this.toKey(state.trigger), state);\n }\n\n async delete(trigger: { workflowId: string; nodeId: string }): Promise<void> {\n this.statesByKey.delete(this.toKey(trigger));\n }\n\n private toKey(trigger: { workflowId: string; nodeId: string }): string {\n return `${trigger.workflowId}:${trigger.nodeId}`;\n }\n}\n","/* eslint-disable codemation/single-class-per-file -- Runnable config and implementation share a TypeToken pairing. */\nimport type { WorkflowRunnerService } from \"../contracts/runtimeTypes\";\nimport type { TypeToken } from \"../di\";\nimport type { Item, NodeId, RunnableNode, RunnableNodeConfig, RunnableNodeExecuteArgs, WorkflowId } from \"../types\";\nimport { emitPorts } from \"../contracts/emitPorts\";\n\n/**\n * Test harness subworkflow runner (mirrors integration patterns; lives under {@link \"@codemation/core/testing\"}).\n */\nexport class SubWorkflowRunnerConfig<TInputJson = unknown, TOutputJson = unknown> implements RunnableNodeConfig<\n TInputJson,\n TOutputJson\n> {\n readonly kind = \"node\" as const;\n readonly type: TypeToken<unknown> = SubWorkflowRunnerNode;\n\n readonly workflowId: WorkflowId;\n readonly startAt: NodeId | undefined;\n\n constructor(\n public readonly name: string,\n public readonly args: Readonly<{\n workflowId: WorkflowId;\n startAt?: NodeId;\n id?: string;\n execution?: Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }>;\n }>,\n ) {\n this.workflowId = args.workflowId;\n this.startAt = args.startAt;\n }\n\n get id(): string | undefined {\n return this.args.id;\n }\n\n get execution(): Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }> | undefined {\n return this.args.execution;\n }\n}\n\nexport class SubWorkflowRunnerNode implements RunnableNode<SubWorkflowRunnerConfig<any, any>> {\n readonly kind = \"node\" as const;\n readonly outputPorts = [\"main\"] as const;\n\n constructor(private readonly workflows: WorkflowRunnerService) {}\n\n async execute(args: RunnableNodeExecuteArgs<SubWorkflowRunnerConfig<any, any>>): Promise<unknown> {\n const current = args.item as Item;\n const result = await this.workflows.runById({\n workflowId: args.ctx.config.workflowId,\n startAt: args.ctx.config.startAt,\n items: [current],\n parent: {\n runId: args.ctx.runId,\n workflowId: args.ctx.workflowId,\n nodeId: args.ctx.nodeId,\n subworkflowDepth: args.ctx.subworkflowDepth,\n engineMaxNodeActivations: args.ctx.engineMaxNodeActivations,\n engineMaxSubworkflowDepth: args.ctx.engineMaxSubworkflowDepth,\n },\n });\n await args.ctx.nodeState?.setChildRunId?.({ nodeId: args.ctx.nodeId, childRunId: result.runId });\n if (result.status !== \"completed\") {\n throw new Error(`Subworkflow ${args.ctx.config.workflowId} did not complete (status=${result.status})`);\n }\n return emitPorts({ main: result.outputs });\n }\n}\n","/* eslint-disable codemation/single-class-per-file -- Trigger config and implementation share a TypeToken pairing. */\nimport type { TypeToken } from \"../di\";\nimport type {\n Items,\n NodeExecutionContext,\n NodeOutputs,\n TriggerNode,\n TriggerNodeConfig,\n TriggerSetupContext,\n} from \"../types\";\n\n/**\n * Minimal pass-through manual trigger for {@link WorkflowTestKit.runNode}; emits input items unchanged.\n */\nexport class WorkflowTestHarnessManualTriggerConfig implements TriggerNodeConfig<unknown> {\n readonly kind = \"trigger\" as const;\n readonly type: TypeToken<unknown> = WorkflowTestHarnessManualTriggerNode;\n\n constructor(\n public readonly name: string,\n public readonly id?: string,\n ) {}\n}\n\nexport class WorkflowTestHarnessManualTriggerNode implements TriggerNode<WorkflowTestHarnessManualTriggerConfig> {\n readonly kind = \"trigger\" as const;\n readonly outputPorts = [\"main\"] as const;\n\n async setup(_ctx: TriggerSetupContext<WorkflowTestHarnessManualTriggerConfig>): Promise<undefined> {\n return undefined;\n }\n\n async execute(\n items: Items,\n _ctx: NodeExecutionContext<WorkflowTestHarnessManualTriggerConfig>,\n ): Promise<NodeOutputs> {\n return { main: items };\n }\n}\n","import type { TypeToken } from \"../di\";\nimport type {\n Item,\n Items,\n NodeExecutionContext,\n RunnableNode,\n RunnableNodeConfig,\n RunnableNodeExecuteArgs,\n} from \"../types\";\nimport { emitPorts } from \"../contracts/emitPorts\";\n\nexport class SwitchHarnessNode implements RunnableNode<SwitchHarnessNodeConfig<any>> {\n readonly kind = \"node\" as const;\n readonly outputPorts = [] as const;\n\n async execute(args: RunnableNodeExecuteArgs<SwitchHarnessNodeConfig<any>>): Promise<unknown> {\n const key = await Promise.resolve(\n args.ctx.config.cfg.resolveCaseKey(args.item as Item, args.itemIndex, args.items, args.ctx),\n );\n const { cases, defaultCase } = args.ctx.config.cfg;\n const port = cases.includes(key) ? key : defaultCase;\n return emitPorts({\n [port]: [args.item],\n });\n }\n}\n\nexport class SwitchHarnessNodeConfig<TInputJson = unknown> implements RunnableNodeConfig<TInputJson, TInputJson> {\n readonly kind = \"node\" as const;\n readonly type: TypeToken<unknown> = SwitchHarnessNode;\n readonly declaredOutputPorts: ReadonlyArray<string>;\n\n constructor(\n public readonly name: string,\n public readonly cfg: Readonly<{\n cases: readonly string[];\n defaultCase: string;\n resolveCaseKey: (\n item: Item<TInputJson>,\n index: number,\n items: Items<TInputJson>,\n ctx: NodeExecutionContext<SwitchHarnessNodeConfig<TInputJson>>,\n ) => string | Promise<string>;\n }>,\n public readonly opts: Readonly<{ id?: string }> = {},\n ) {\n this.declaredOutputPorts = [...new Set([...cfg.cases, cfg.defaultCase])].sort();\n }\n\n get id(): string | undefined {\n return this.opts.id;\n }\n}\n","import type { DependencyContainer, InjectionToken } from \"tsyringe\";\nimport { container as tsyringeContainer } from \"tsyringe\";\n\nimport type { WorkflowRunnerService } from \"../contracts/runtimeTypes\";\nimport { CoreTokens } from \"../di\";\nimport { InMemoryRunEventBus } from \"../events/InMemoryRunEventBusRegistry\";\nimport { AllWorkflowsActiveWorkflowActivationPolicy } from \"../contracts/workflowActivationPolicy\";\nimport { RunIntentService } from \"../runtime/RunIntentService\";\nimport {\n DefaultDrivingScheduler,\n DefaultAsyncSleeper,\n DefaultExecutionContextFactory,\n Engine,\n EngineRuntimeRegistrar,\n EngineWorkflowRunnerService,\n HintOnlyOffloadPolicy,\n InProcessRetryRunner,\n InMemoryRunDataFactory,\n InMemoryWorkflowExecutionRepository,\n InlineDrivingScheduler,\n NodeExecutor,\n NodeInstanceFactory,\n PersistedWorkflowTokenRegistry,\n} from \"../bootstrap/index\";\nimport { InMemoryLiveWorkflowRepository } from \"../runtime/InMemoryLiveWorkflowRepository\";\nimport { EngineTestKitRunIdFactory } from \"./EngineTestKitRunIdFactory\";\nimport { InMemoryTriggerSetupStateRepository } from \"./InMemoryTriggerSetupStateRepository\";\nimport { RejectingCredentialSessionService } from \"./RejectingCredentialSessionService\";\nimport { CapturingScheduler } from \"./CapturingScheduler\";\nimport { PrefixedSequentialIdGenerator } from \"./PrefixedSequentialIdGenerator\";\nimport type { RegistrarEngineTestKitHandle, RegistrarEngineTestKitOptions } from \"./RegistrarEngineTestKit.types\";\nimport { ItemHarnessNode } from \"./ItemHarnessNode\";\nimport { SubWorkflowRunnerNode } from \"./SubWorkflowRunnerTestNode\";\nimport { WorkflowTestHarnessManualTriggerNode } from \"./WorkflowTestHarnessManualTrigger\";\nimport { SwitchHarnessNode } from \"./SwitchHarnessNode\";\n\nexport class RegistrarEngineTestKitFactory {\n static create(options: RegistrarEngineTestKitOptions = {}): RegistrarEngineTestKitHandle {\n const runStore = options.runStore ?? new InMemoryWorkflowExecutionRepository();\n const scheduler = options.scheduler ?? new CapturingScheduler();\n const offloadPolicy = options.offloadPolicy ?? new HintOnlyOffloadPolicy();\n const runIdGen = new PrefixedSequentialIdGenerator(\"run_\");\n const activationIdGen = new PrefixedSequentialIdGenerator(\"act_\");\n const makeRunId = options.makeRunId ?? runIdGen.asFn();\n const makeActivationId = options.makeActivationId ?? activationIdGen.asFn();\n const credentialSessions = options.credentialSessions ?? new RejectingCredentialSessionService();\n const eventBus = options.eventBus ?? new InMemoryRunEventBus();\n const triggerSetupStateRepository =\n options.triggerSetupStateRepository ?? new InMemoryTriggerSetupStateRepository();\n const liveWorkflowRepository = new InMemoryLiveWorkflowRepository();\n const runDataFactory = options.runDataFactory ?? new InMemoryRunDataFactory();\n const executionContextFactory = options.executionContextFactory ?? new DefaultExecutionContextFactory();\n const container = options.container ?? tsyringeContainer.createChildContainer();\n const dependencyContainer = container as DependencyContainer;\n const nodeResolver = container;\n const nodeExecutor = new NodeExecutor(\n new NodeInstanceFactory(nodeResolver),\n new InProcessRetryRunner(new DefaultAsyncSleeper()),\n );\n const activationScheduler = new DefaultDrivingScheduler(\n offloadPolicy,\n scheduler,\n new InlineDrivingScheduler(nodeExecutor),\n );\n\n for (const [token, value] of options.providers ?? new Map<InjectionToken<unknown>, unknown>()) {\n dependencyContainer.registerInstance(token, value);\n }\n\n dependencyContainer.registerInstance(CoreTokens.CredentialSessionService, credentialSessions);\n dependencyContainer.registerInstance(CoreTokens.LiveWorkflowRepository, liveWorkflowRepository);\n dependencyContainer.registerInstance(CoreTokens.WorkflowRepository, liveWorkflowRepository);\n dependencyContainer.registerInstance(CoreTokens.NodeResolver, nodeResolver);\n dependencyContainer.registerInstance(\n CoreTokens.RunIdFactory,\n new EngineTestKitRunIdFactory(makeRunId, makeActivationId),\n );\n dependencyContainer.registerInstance(\n CoreTokens.ActivationIdFactory,\n new EngineTestKitRunIdFactory(makeRunId, makeActivationId),\n );\n dependencyContainer.registerInstance(CoreTokens.WebhookBasePath, options.webhookBasePath ?? \"/webhooks\");\n dependencyContainer.registerInstance(CoreTokens.WorkflowExecutionRepository, runStore);\n dependencyContainer.registerInstance(CoreTokens.TriggerSetupStateRepository, triggerSetupStateRepository);\n dependencyContainer.registerInstance(CoreTokens.NodeActivationScheduler, activationScheduler);\n dependencyContainer.registerInstance(CoreTokens.RunDataFactory, runDataFactory);\n dependencyContainer.registerInstance(CoreTokens.ExecutionContextFactory, executionContextFactory);\n dependencyContainer.registerInstance(CoreTokens.RunEventBus, eventBus);\n dependencyContainer.registerInstance(\n CoreTokens.PersistedWorkflowTokenRegistry,\n new PersistedWorkflowTokenRegistry(),\n );\n dependencyContainer.registerInstance(\n CoreTokens.WorkflowActivationPolicy,\n new AllWorkflowsActiveWorkflowActivationPolicy(),\n );\n\n if (options.executionLimitsPolicy !== undefined) {\n dependencyContainer.registerInstance(CoreTokens.EngineExecutionLimitsPolicy, options.executionLimitsPolicy);\n }\n\n new EngineRuntimeRegistrar().register(dependencyContainer, options.registrarOptions ?? {});\n\n const engine = dependencyContainer.resolve(Engine);\n const runIntent = dependencyContainer.resolve(RunIntentService);\n const workflowRunner =\n options.workflowRunner ??\n (dependencyContainer.resolve(CoreTokens.WorkflowRunnerService) as EngineWorkflowRunnerService);\n dependencyContainer.registerInstance(\n SubWorkflowRunnerNode,\n new SubWorkflowRunnerNode(workflowRunner as WorkflowRunnerService),\n );\n dependencyContainer.registerInstance(ItemHarnessNode, new ItemHarnessNode());\n dependencyContainer.registerInstance(SwitchHarnessNode, new SwitchHarnessNode());\n dependencyContainer.registerInstance(\n WorkflowTestHarnessManualTriggerNode,\n new WorkflowTestHarnessManualTriggerNode(),\n );\n\n const start = async (workflows: ReadonlyArray<import(\"../types\").WorkflowDefinition>): Promise<void> => {\n await engine.start([...workflows]);\n };\n\n const runToCompletion: RegistrarEngineTestKitHandle[\"runToCompletion\"] = async (args) => {\n const r0 = await engine.runWorkflow(args.wf, args.startAt, args.items, args.parent);\n if (r0.status !== \"pending\") return r0;\n return await engine.waitForCompletion(r0.runId);\n };\n\n const runIntentStartToCompletion: RegistrarEngineTestKitHandle[\"runIntentStartToCompletion\"] = async (args) => {\n const r0 = await runIntent.startWorkflow({\n workflow: args.wf,\n startAt: args.startAt,\n items: args.items,\n parent: args.parent,\n });\n if (r0.status !== \"pending\") return r0;\n return await engine.waitForCompletion(r0.runId);\n };\n\n return {\n engine,\n runIntent,\n liveWorkflowRepository,\n runStore,\n triggerSetupStateRepository,\n scheduler: scheduler as CapturingScheduler | import(\"../types\").NodeExecutionScheduler,\n offloadPolicy,\n workflowRunner,\n dependencyContainer,\n start,\n runToCompletion,\n runIntentStartToCompletion,\n makeRunId,\n makeActivationId,\n };\n }\n}\n","import type { DependencyContainer } from \"tsyringe\";\n\nimport type { TypeToken } from \"../di\";\n\nimport type { DefinedNodeRegistrationContext } from \"./WorkflowTestKit.types\";\n\nexport class WorkflowTestKitNodeRegistrationContextFactory {\n create(dependencyContainer: DependencyContainer): DefinedNodeRegistrationContext {\n return {\n registerNode<TValue>(token: TypeToken<TValue>, implementation?: TypeToken<TValue>) {\n dependencyContainer.registerSingleton(token as never, (implementation ?? token) as never);\n },\n };\n }\n}\n","import type { RunnableNodeConfig, WorkflowDefinition, WorkflowId } from \"../types\";\nimport { WorkflowBuilder } from \"../workflow/dsl/WorkflowBuilder\";\n\nimport { WorkflowTestHarnessManualTriggerConfig } from \"./WorkflowTestHarnessManualTrigger\";\n\nconst defaultInlineWorkflowId = \"codemation.testing.workflowkit.inline\" as WorkflowId;\nconst defaultInlineWorkflowName = \"WorkflowTestKit inline\";\n\n/**\n * Builds the minimal trigger → runnable workflow used by {@link import(\"./WorkflowTestKit\").WorkflowTestKit.runNode}.\n */\nexport class WorkflowTestKitRunNodeWorkflowFactory {\n build(args: { node: RunnableNodeConfig; workflowId?: WorkflowId; workflowName?: string }): WorkflowDefinition {\n const workflowId = args.workflowId ?? defaultInlineWorkflowId;\n const workflowName = args.workflowName ?? defaultInlineWorkflowName;\n const trigger = new WorkflowTestHarnessManualTriggerConfig(\n \"WorkflowTestKit trigger\",\n \"workflowkit.harness.trigger\",\n );\n return new WorkflowBuilder({ id: workflowId, name: workflowName }).trigger(trigger).then(args.node).build();\n }\n\n defaultStartNodeId(): string {\n return \"workflowkit.harness.trigger\";\n }\n}\n","import type { DependencyContainer } from \"tsyringe\";\n\nimport type { Items, NodeId, RunnableNodeConfig, RunResult, WorkflowDefinition, WorkflowId } from \"../types\";\n\nimport { RegistrarEngineTestKitFactory } from \"./RegistrarEngineTestKitFactory\";\nimport type { EngineTestKitOptions, RegistrarEngineTestKitHandle } from \"./RegistrarEngineTestKit.types\";\nimport { WorkflowTestKitNodeRegistrationContextFactory } from \"./WorkflowTestKitNodeRegistrationContextFactory\";\nimport type { DefinedNodeRegistration } from \"./WorkflowTestKit.types\";\nimport { WorkflowTestKitRunNodeWorkflowFactory } from \"./WorkflowTestKitRunNodeWorkflowFactory\";\n\nexport type { DefinedNodeRegistration, DefinedNodeRegistrationContext } from \"./WorkflowTestKit.types\";\n\nexport type WorkflowTestKitOptions = EngineTestKitOptions;\n\nexport class WorkflowTestKit {\n private readonly handle: RegistrarEngineTestKitHandle;\n private readonly runNodeWorkflowFactory = new WorkflowTestKitRunNodeWorkflowFactory();\n private readonly nodeRegistrationContextFactory = new WorkflowTestKitNodeRegistrationContextFactory();\n\n constructor(options: WorkflowTestKitOptions = {}) {\n this.handle = RegistrarEngineTestKitFactory.create(options);\n }\n\n get dependencyContainer(): DependencyContainer {\n return this.handle.dependencyContainer;\n }\n\n get engine(): RegistrarEngineTestKitHandle[\"engine\"] {\n return this.handle.engine;\n }\n\n get workflowRunner(): RegistrarEngineTestKitHandle[\"workflowRunner\"] {\n return this.handle.workflowRunner;\n }\n\n get liveWorkflowRepository(): RegistrarEngineTestKitHandle[\"liveWorkflowRepository\"] {\n return this.handle.liveWorkflowRepository;\n }\n\n get runStore(): RegistrarEngineTestKitHandle[\"runStore\"] {\n return this.handle.runStore;\n }\n\n /**\n * Registers {@link import(\"../authoring/defineNode.types\").DefinedNode} implementations on the same DI container used by the engine\n * (same pattern as `plugin.register({ registerNode })` in the host).\n */\n registerDefinedNodes(definitions: ReadonlyArray<DefinedNodeRegistration>): void {\n const ctx = this.nodeRegistrationContextFactory.create(this.handle.dependencyContainer);\n for (const def of definitions) {\n def.register(ctx);\n }\n }\n\n async run(args: { workflow: WorkflowDefinition; items: Items; startAt?: NodeId }): Promise<RunResult> {\n await this.handle.start([args.workflow]);\n return await this.handle.workflowRunner.runById({\n workflowId: args.workflow.id,\n startAt: args.startAt,\n items: args.items,\n });\n }\n\n async runNode(args: {\n node: RunnableNodeConfig;\n items: Items;\n workflowId?: WorkflowId;\n workflowName?: string;\n }): Promise<RunResult> {\n const wf = this.runNodeWorkflowFactory.build(args);\n return await this.run({\n workflow: wf,\n items: args.items,\n startAt: this.runNodeWorkflowFactory.defaultStartNodeId(),\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testing.cjs","names":["name: string","inputSchema: ZodType<TIn>","runOne: (args: {\n input: TIn;\n item: Item<TIn>;\n itemIndex: number;\n items: Items<TIn>;\n ctx: NodeExecutionContext<ItemHarnessNodeConfig<TIn, TOut>>;\n }) => TOut | Promise<TOut>","opts: Readonly<{\n id?: string;\n }>","prefix: string","makeRunIdValue: () => string","makeActivationIdValue: () => string","name: string","args: Readonly<{\n workflowId: WorkflowId;\n startAt?: NodeId;\n id?: string;\n execution?: Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }>;\n }>","workflows: WorkflowRunnerService","emitPorts","name: string","id?: string","emitPorts","InMemoryWorkflowExecutionRepository","HintOnlyOffloadPolicy","InMemoryRunEventBus","InMemoryLiveWorkflowRepository","InMemoryRunDataFactory","DefaultExecutionContextFactory","tsyringeContainer","DefaultDrivingScheduler","InlineDrivingScheduler","NodeExecutor","NodeInstanceFactory","InProcessRetryRunner","DefaultAsyncSleeper","CoreTokens","PersistedWorkflowTokenRegistry","AllWorkflowsActiveWorkflowActivationPolicy","EngineRuntimeRegistrar","Engine","RunIntentService","runToCompletion: RegistrarEngineTestKitHandle[\"runToCompletion\"]","runIntentStartToCompletion: RegistrarEngineTestKitHandle[\"runIntentStartToCompletion\"]","WorkflowBuilder"],"sources":["../src/testing/RejectingCredentialSessionService.ts","../src/testing/ItemHarnessNode.ts","../src/testing/ItemHarnessNodeConfig.ts","../src/testing/CapturingScheduler.ts","../src/testing/PrefixedSequentialIdGenerator.ts","../src/testing/EngineTestKitRunIdFactory.ts","../src/testing/InMemoryTriggerSetupStateRepository.ts","../src/testing/SubWorkflowRunnerTestNode.ts","../src/testing/WorkflowTestHarnessManualTrigger.ts","../src/testing/SwitchHarnessNode.ts","../src/testing/RegistrarEngineTestKitFactory.ts","../src/testing/WorkflowTestKitNodeRegistrationContextFactory.ts","../src/testing/WorkflowTestKitRunNodeWorkflowFactory.ts","../src/testing/WorkflowTestKitBuilder.ts"],"sourcesContent":["import type { CredentialSessionService } from \"../contracts/credentialTypes\";\n\nexport class RejectingCredentialSessionService implements CredentialSessionService {\n async getSession<TSession = unknown>(\n args: Readonly<{ workflowId: string; nodeId: string; slotKey: string }>,\n ): Promise<TSession> {\n throw new Error(\n `Credential sessions are unavailable for workflow ${args.workflowId} node ${args.nodeId} slot \"${args.slotKey}\". Register a real CredentialSessionService implementation before executing workflows.`,\n );\n }\n}\n","import type { Item, RunnableNode, RunnableNodeExecuteArgs } from \"../types\";\n\nimport type { ItemHarnessNodeConfig } from \"./ItemHarnessNodeConfig\";\n\nexport class ItemHarnessNode implements RunnableNode<ItemHarnessNodeConfig<any, any>> {\n readonly kind = \"node\" as const;\n readonly outputPorts = [\"main\"] as const;\n\n async execute(args: RunnableNodeExecuteArgs<ItemHarnessNodeConfig<any, any>>): Promise<unknown> {\n return await args.ctx.config.runOne({\n input: args.input as never,\n item: args.item as Item,\n itemIndex: args.itemIndex,\n items: args.items,\n ctx: args.ctx,\n });\n }\n}\n","import type { ZodType } from \"zod\";\n\nimport type { TypeToken } from \"../di\";\nimport type { Item, Items, NodeExecutionContext, RunnableNodeConfig } from \"../types\";\n\nimport { ItemHarnessNode } from \"./ItemHarnessNode\";\n\nexport class ItemHarnessNodeConfig<TIn = unknown, TOut = unknown> implements RunnableNodeConfig<TIn, TOut> {\n readonly kind = \"node\" as const;\n readonly type: TypeToken<unknown> = ItemHarnessNode;\n\n constructor(\n public readonly name: string,\n public readonly inputSchema: ZodType<TIn>,\n public readonly runOne: (args: {\n input: TIn;\n item: Item<TIn>;\n itemIndex: number;\n items: Items<TIn>;\n ctx: NodeExecutionContext<ItemHarnessNodeConfig<TIn, TOut>>;\n }) => TOut | Promise<TOut>,\n public readonly opts: Readonly<{\n id?: string;\n }> = {},\n ) {}\n\n get id(): string | undefined {\n return this.opts.id;\n }\n}\n","import type { NodeExecutionRequest, NodeExecutionScheduler } from \"../types\";\n\nexport class CapturingScheduler implements NodeExecutionScheduler {\n lastRequest: NodeExecutionRequest | undefined;\n requests: NodeExecutionRequest[] = [];\n\n async enqueue(request: NodeExecutionRequest): Promise<{ receiptId: string }> {\n this.lastRequest = request;\n this.requests.push(request);\n return { receiptId: `receipt_${this.requests.length}` };\n }\n}\n","export class PrefixedSequentialIdGenerator {\n private n = 0;\n\n constructor(private readonly prefix: string) {}\n\n next(): string {\n this.n += 1;\n return `${this.prefix}${this.n}`;\n }\n\n asFn(): () => string {\n return () => this.next();\n }\n}\n","import type { RunIdFactory } from \"../types\";\n\nexport class EngineTestKitRunIdFactory implements RunIdFactory {\n private runCounter = 0;\n private activationCounter = 0;\n\n constructor(\n private readonly makeRunIdValue: () => string,\n private readonly makeActivationIdValue: () => string,\n ) {}\n\n makeRunId(): string {\n this.runCounter += 1;\n return this.makeRunIdValue();\n }\n\n makeActivationId(): string {\n this.activationCounter += 1;\n return this.makeActivationIdValue();\n }\n}\n","import type { PersistedTriggerSetupState, TriggerSetupStateRepository } from \"../types\";\n\nexport class InMemoryTriggerSetupStateRepository implements TriggerSetupStateRepository {\n private readonly statesByKey = new Map<string, PersistedTriggerSetupState>();\n\n async load(trigger: { workflowId: string; nodeId: string }): Promise<PersistedTriggerSetupState | undefined> {\n return this.statesByKey.get(this.toKey(trigger));\n }\n\n async save(state: PersistedTriggerSetupState): Promise<void> {\n this.statesByKey.set(this.toKey(state.trigger), state);\n }\n\n async delete(trigger: { workflowId: string; nodeId: string }): Promise<void> {\n this.statesByKey.delete(this.toKey(trigger));\n }\n\n private toKey(trigger: { workflowId: string; nodeId: string }): string {\n return `${trigger.workflowId}:${trigger.nodeId}`;\n }\n}\n","/* eslint-disable codemation/single-class-per-file -- Runnable config and implementation share a TypeToken pairing. */\nimport type { WorkflowRunnerService } from \"../contracts/runtimeTypes\";\nimport type { TypeToken } from \"../di\";\nimport type { Item, NodeId, RunnableNode, RunnableNodeConfig, RunnableNodeExecuteArgs, WorkflowId } from \"../types\";\nimport { emitPorts } from \"../contracts/emitPorts\";\n\nexport class SubWorkflowRunnerConfig<TInputJson = unknown, TOutputJson = unknown> implements RunnableNodeConfig<\n TInputJson,\n TOutputJson\n> {\n readonly kind = \"node\" as const;\n readonly type: TypeToken<unknown> = SubWorkflowRunnerNode;\n\n readonly workflowId: WorkflowId;\n readonly startAt: NodeId | undefined;\n\n constructor(\n public readonly name: string,\n public readonly args: Readonly<{\n workflowId: WorkflowId;\n startAt?: NodeId;\n id?: string;\n execution?: Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }>;\n }>,\n ) {\n this.workflowId = args.workflowId;\n this.startAt = args.startAt;\n }\n\n get id(): string | undefined {\n return this.args.id;\n }\n\n get execution(): Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }> | undefined {\n return this.args.execution;\n }\n}\n\nexport class SubWorkflowRunnerNode implements RunnableNode<SubWorkflowRunnerConfig<any, any>> {\n readonly kind = \"node\" as const;\n readonly outputPorts = [\"main\"] as const;\n\n constructor(private readonly workflows: WorkflowRunnerService) {}\n\n async execute(args: RunnableNodeExecuteArgs<SubWorkflowRunnerConfig<any, any>>): Promise<unknown> {\n const current = args.item as Item;\n const result = await this.workflows.runById({\n workflowId: args.ctx.config.workflowId,\n startAt: args.ctx.config.startAt,\n items: [current],\n parent: {\n runId: args.ctx.runId,\n workflowId: args.ctx.workflowId,\n nodeId: args.ctx.nodeId,\n subworkflowDepth: args.ctx.subworkflowDepth,\n engineMaxNodeActivations: args.ctx.engineMaxNodeActivations,\n engineMaxSubworkflowDepth: args.ctx.engineMaxSubworkflowDepth,\n },\n });\n await args.ctx.nodeState?.setChildRunId?.({ nodeId: args.ctx.nodeId, childRunId: result.runId });\n if (result.status !== \"completed\") {\n throw new Error(`Subworkflow ${args.ctx.config.workflowId} did not complete (status=${result.status})`);\n }\n return emitPorts({ main: result.outputs });\n }\n}\n","/* eslint-disable codemation/single-class-per-file -- Trigger config and implementation share a TypeToken pairing. */\nimport type { TypeToken } from \"../di\";\nimport type {\n Items,\n NodeExecutionContext,\n NodeOutputs,\n TriggerNode,\n TriggerNodeConfig,\n TriggerSetupContext,\n} from \"../types\";\n\nexport class WorkflowTestHarnessManualTriggerConfig implements TriggerNodeConfig<unknown> {\n readonly kind = \"trigger\" as const;\n readonly type: TypeToken<unknown> = WorkflowTestHarnessManualTriggerNode;\n\n constructor(\n public readonly name: string,\n public readonly id?: string,\n ) {}\n}\n\nexport class WorkflowTestHarnessManualTriggerNode implements TriggerNode<WorkflowTestHarnessManualTriggerConfig> {\n readonly kind = \"trigger\" as const;\n readonly outputPorts = [\"main\"] as const;\n\n async setup(_ctx: TriggerSetupContext<WorkflowTestHarnessManualTriggerConfig>): Promise<undefined> {\n return undefined;\n }\n\n async execute(\n items: Items,\n _ctx: NodeExecutionContext<WorkflowTestHarnessManualTriggerConfig>,\n ): Promise<NodeOutputs> {\n return { main: items };\n }\n}\n","import type { TypeToken } from \"../di\";\nimport type {\n Item,\n Items,\n NodeExecutionContext,\n RunnableNode,\n RunnableNodeConfig,\n RunnableNodeExecuteArgs,\n} from \"../types\";\nimport { emitPorts } from \"../contracts/emitPorts\";\n\nexport class SwitchHarnessNode implements RunnableNode<SwitchHarnessNodeConfig<any>> {\n readonly kind = \"node\" as const;\n readonly outputPorts = [] as const;\n\n async execute(args: RunnableNodeExecuteArgs<SwitchHarnessNodeConfig<any>>): Promise<unknown> {\n const key = await Promise.resolve(\n args.ctx.config.cfg.resolveCaseKey(args.item as Item, args.itemIndex, args.items, args.ctx),\n );\n const { cases, defaultCase } = args.ctx.config.cfg;\n const port = cases.includes(key) ? key : defaultCase;\n return emitPorts({\n [port]: [args.item],\n });\n }\n}\n\nexport class SwitchHarnessNodeConfig<TInputJson = unknown> implements RunnableNodeConfig<TInputJson, TInputJson> {\n readonly kind = \"node\" as const;\n readonly type: TypeToken<unknown> = SwitchHarnessNode;\n readonly declaredOutputPorts: ReadonlyArray<string>;\n\n constructor(\n public readonly name: string,\n public readonly cfg: Readonly<{\n cases: readonly string[];\n defaultCase: string;\n resolveCaseKey: (\n item: Item<TInputJson>,\n index: number,\n items: Items<TInputJson>,\n ctx: NodeExecutionContext<SwitchHarnessNodeConfig<TInputJson>>,\n ) => string | Promise<string>;\n }>,\n public readonly opts: Readonly<{ id?: string }> = {},\n ) {\n this.declaredOutputPorts = [...new Set([...cfg.cases, cfg.defaultCase])].sort();\n }\n\n get id(): string | undefined {\n return this.opts.id;\n }\n}\n","import type { DependencyContainer, InjectionToken } from \"tsyringe\";\nimport { container as tsyringeContainer } from \"tsyringe\";\n\nimport type { WorkflowRunnerService } from \"../contracts/runtimeTypes\";\nimport { CoreTokens } from \"../di\";\nimport { InMemoryRunEventBus } from \"../events/InMemoryRunEventBusRegistry\";\nimport { AllWorkflowsActiveWorkflowActivationPolicy } from \"../contracts/workflowActivationPolicy\";\nimport { RunIntentService } from \"../runtime/RunIntentService\";\nimport {\n DefaultDrivingScheduler,\n DefaultAsyncSleeper,\n DefaultExecutionContextFactory,\n Engine,\n EngineRuntimeRegistrar,\n EngineWorkflowRunnerService,\n HintOnlyOffloadPolicy,\n InProcessRetryRunner,\n InMemoryRunDataFactory,\n InMemoryWorkflowExecutionRepository,\n InlineDrivingScheduler,\n NodeExecutor,\n NodeInstanceFactory,\n PersistedWorkflowTokenRegistry,\n} from \"../bootstrap/index\";\nimport { InMemoryLiveWorkflowRepository } from \"../runtime/InMemoryLiveWorkflowRepository\";\nimport { EngineTestKitRunIdFactory } from \"./EngineTestKitRunIdFactory\";\nimport { InMemoryTriggerSetupStateRepository } from \"./InMemoryTriggerSetupStateRepository\";\nimport { RejectingCredentialSessionService } from \"./RejectingCredentialSessionService\";\nimport { CapturingScheduler } from \"./CapturingScheduler\";\nimport { PrefixedSequentialIdGenerator } from \"./PrefixedSequentialIdGenerator\";\nimport type { RegistrarEngineTestKitHandle, RegistrarEngineTestKitOptions } from \"./RegistrarEngineTestKit.types\";\nimport { ItemHarnessNode } from \"./ItemHarnessNode\";\nimport { SubWorkflowRunnerNode } from \"./SubWorkflowRunnerTestNode\";\nimport { WorkflowTestHarnessManualTriggerNode } from \"./WorkflowTestHarnessManualTrigger\";\nimport { SwitchHarnessNode } from \"./SwitchHarnessNode\";\n\nexport class RegistrarEngineTestKitFactory {\n static create(options: RegistrarEngineTestKitOptions = {}): RegistrarEngineTestKitHandle {\n const runStore = options.runStore ?? new InMemoryWorkflowExecutionRepository();\n const scheduler = options.scheduler ?? new CapturingScheduler();\n const offloadPolicy = options.offloadPolicy ?? new HintOnlyOffloadPolicy();\n const runIdGen = new PrefixedSequentialIdGenerator(\"run_\");\n const activationIdGen = new PrefixedSequentialIdGenerator(\"act_\");\n const makeRunId = options.makeRunId ?? runIdGen.asFn();\n const makeActivationId = options.makeActivationId ?? activationIdGen.asFn();\n const credentialSessions = options.credentialSessions ?? new RejectingCredentialSessionService();\n const eventBus = options.eventBus ?? new InMemoryRunEventBus();\n const triggerSetupStateRepository =\n options.triggerSetupStateRepository ?? new InMemoryTriggerSetupStateRepository();\n const liveWorkflowRepository = new InMemoryLiveWorkflowRepository();\n const runDataFactory = options.runDataFactory ?? new InMemoryRunDataFactory();\n const executionContextFactory = options.executionContextFactory ?? new DefaultExecutionContextFactory();\n const container = options.container ?? tsyringeContainer.createChildContainer();\n const dependencyContainer = container as DependencyContainer;\n const nodeResolver = container;\n const nodeExecutor = new NodeExecutor(\n new NodeInstanceFactory(nodeResolver),\n new InProcessRetryRunner(new DefaultAsyncSleeper()),\n );\n const activationScheduler = new DefaultDrivingScheduler(\n offloadPolicy,\n scheduler,\n new InlineDrivingScheduler(nodeExecutor),\n );\n\n for (const [token, value] of options.providers ?? new Map<InjectionToken<unknown>, unknown>()) {\n dependencyContainer.registerInstance(token, value);\n }\n\n dependencyContainer.registerInstance(CoreTokens.CredentialSessionService, credentialSessions);\n dependencyContainer.registerInstance(CoreTokens.LiveWorkflowRepository, liveWorkflowRepository);\n dependencyContainer.registerInstance(CoreTokens.WorkflowRepository, liveWorkflowRepository);\n dependencyContainer.registerInstance(CoreTokens.NodeResolver, nodeResolver);\n dependencyContainer.registerInstance(\n CoreTokens.RunIdFactory,\n new EngineTestKitRunIdFactory(makeRunId, makeActivationId),\n );\n dependencyContainer.registerInstance(\n CoreTokens.ActivationIdFactory,\n new EngineTestKitRunIdFactory(makeRunId, makeActivationId),\n );\n dependencyContainer.registerInstance(CoreTokens.WebhookBasePath, options.webhookBasePath ?? \"/webhooks\");\n dependencyContainer.registerInstance(CoreTokens.WorkflowExecutionRepository, runStore);\n dependencyContainer.registerInstance(CoreTokens.TriggerSetupStateRepository, triggerSetupStateRepository);\n dependencyContainer.registerInstance(CoreTokens.NodeActivationScheduler, activationScheduler);\n dependencyContainer.registerInstance(CoreTokens.RunDataFactory, runDataFactory);\n dependencyContainer.registerInstance(CoreTokens.ExecutionContextFactory, executionContextFactory);\n dependencyContainer.registerInstance(CoreTokens.RunEventBus, eventBus);\n dependencyContainer.registerInstance(\n CoreTokens.PersistedWorkflowTokenRegistry,\n new PersistedWorkflowTokenRegistry(),\n );\n dependencyContainer.registerInstance(\n CoreTokens.WorkflowActivationPolicy,\n new AllWorkflowsActiveWorkflowActivationPolicy(),\n );\n\n if (options.executionLimitsPolicy !== undefined) {\n dependencyContainer.registerInstance(CoreTokens.EngineExecutionLimitsPolicy, options.executionLimitsPolicy);\n }\n\n new EngineRuntimeRegistrar().register(dependencyContainer, options.registrarOptions ?? {});\n\n const engine = dependencyContainer.resolve(Engine);\n const runIntent = dependencyContainer.resolve(RunIntentService);\n const workflowRunner =\n options.workflowRunner ??\n (dependencyContainer.resolve(CoreTokens.WorkflowRunnerService) as EngineWorkflowRunnerService);\n dependencyContainer.registerInstance(\n SubWorkflowRunnerNode,\n new SubWorkflowRunnerNode(workflowRunner as WorkflowRunnerService),\n );\n dependencyContainer.registerInstance(ItemHarnessNode, new ItemHarnessNode());\n dependencyContainer.registerInstance(SwitchHarnessNode, new SwitchHarnessNode());\n dependencyContainer.registerInstance(\n WorkflowTestHarnessManualTriggerNode,\n new WorkflowTestHarnessManualTriggerNode(),\n );\n\n const start = async (workflows: ReadonlyArray<import(\"../types\").WorkflowDefinition>): Promise<void> => {\n await engine.start([...workflows]);\n };\n\n const runToCompletion: RegistrarEngineTestKitHandle[\"runToCompletion\"] = async (args) => {\n const r0 = await engine.runWorkflow(args.wf, args.startAt, args.items, args.parent);\n if (r0.status !== \"pending\") return r0;\n return await engine.waitForCompletion(r0.runId);\n };\n\n const runIntentStartToCompletion: RegistrarEngineTestKitHandle[\"runIntentStartToCompletion\"] = async (args) => {\n const r0 = await runIntent.startWorkflow({\n workflow: args.wf,\n startAt: args.startAt,\n items: args.items,\n parent: args.parent,\n });\n if (r0.status !== \"pending\") return r0;\n return await engine.waitForCompletion(r0.runId);\n };\n\n return {\n engine,\n runIntent,\n liveWorkflowRepository,\n runStore,\n triggerSetupStateRepository,\n scheduler: scheduler as CapturingScheduler | import(\"../types\").NodeExecutionScheduler,\n offloadPolicy,\n workflowRunner,\n dependencyContainer,\n start,\n runToCompletion,\n runIntentStartToCompletion,\n makeRunId,\n makeActivationId,\n };\n }\n}\n","import type { DependencyContainer } from \"tsyringe\";\n\nimport type { TypeToken } from \"../di\";\n\nimport type { DefinedNodeRegistrationContext } from \"./WorkflowTestKit.types\";\n\nexport class WorkflowTestKitNodeRegistrationContextFactory {\n create(dependencyContainer: DependencyContainer): DefinedNodeRegistrationContext {\n return {\n registerNode<TValue>(token: TypeToken<TValue>, implementation?: TypeToken<TValue>) {\n dependencyContainer.registerSingleton(token as never, (implementation ?? token) as never);\n },\n };\n }\n}\n","import type { RunnableNodeConfig, WorkflowDefinition, WorkflowId } from \"../types\";\nimport { WorkflowBuilder } from \"../workflow/dsl/WorkflowBuilder\";\n\nimport { WorkflowTestHarnessManualTriggerConfig } from \"./WorkflowTestHarnessManualTrigger\";\n\nconst defaultInlineWorkflowId = \"codemation.testing.workflowkit.inline\" as WorkflowId;\nconst defaultInlineWorkflowName = \"WorkflowTestKit inline\";\n\nexport class WorkflowTestKitRunNodeWorkflowFactory {\n build(args: { node: RunnableNodeConfig; workflowId?: WorkflowId; workflowName?: string }): WorkflowDefinition {\n const workflowId = args.workflowId ?? defaultInlineWorkflowId;\n const workflowName = args.workflowName ?? defaultInlineWorkflowName;\n const trigger = new WorkflowTestHarnessManualTriggerConfig(\n \"WorkflowTestKit trigger\",\n \"workflowkit.harness.trigger\",\n );\n return new WorkflowBuilder({ id: workflowId, name: workflowName }).trigger(trigger).then(args.node).build();\n }\n\n defaultStartNodeId(): string {\n return \"workflowkit.harness.trigger\";\n }\n}\n","import type { DependencyContainer } from \"tsyringe\";\n\nimport type { Items, NodeId, RunnableNodeConfig, RunResult, WorkflowDefinition, WorkflowId } from \"../types\";\n\nimport { RegistrarEngineTestKitFactory } from \"./RegistrarEngineTestKitFactory\";\nimport type { EngineTestKitOptions, RegistrarEngineTestKitHandle } from \"./RegistrarEngineTestKit.types\";\nimport { WorkflowTestKitNodeRegistrationContextFactory } from \"./WorkflowTestKitNodeRegistrationContextFactory\";\nimport type { DefinedNodeRegistration } from \"./WorkflowTestKit.types\";\nimport { WorkflowTestKitRunNodeWorkflowFactory } from \"./WorkflowTestKitRunNodeWorkflowFactory\";\n\nexport type { DefinedNodeRegistration, DefinedNodeRegistrationContext } from \"./WorkflowTestKit.types\";\n\nexport type WorkflowTestKitOptions = EngineTestKitOptions;\n\nexport class WorkflowTestKit {\n private readonly handle: RegistrarEngineTestKitHandle;\n private readonly runNodeWorkflowFactory = new WorkflowTestKitRunNodeWorkflowFactory();\n private readonly nodeRegistrationContextFactory = new WorkflowTestKitNodeRegistrationContextFactory();\n\n constructor(options: WorkflowTestKitOptions = {}) {\n this.handle = RegistrarEngineTestKitFactory.create(options);\n }\n\n get dependencyContainer(): DependencyContainer {\n return this.handle.dependencyContainer;\n }\n\n get engine(): RegistrarEngineTestKitHandle[\"engine\"] {\n return this.handle.engine;\n }\n\n get workflowRunner(): RegistrarEngineTestKitHandle[\"workflowRunner\"] {\n return this.handle.workflowRunner;\n }\n\n get liveWorkflowRepository(): RegistrarEngineTestKitHandle[\"liveWorkflowRepository\"] {\n return this.handle.liveWorkflowRepository;\n }\n\n get runStore(): RegistrarEngineTestKitHandle[\"runStore\"] {\n return this.handle.runStore;\n }\n\n registerDefinedNodes(definitions: ReadonlyArray<DefinedNodeRegistration>): void {\n const ctx = this.nodeRegistrationContextFactory.create(this.handle.dependencyContainer);\n for (const def of definitions) {\n def.register(ctx);\n }\n }\n\n async run(args: { workflow: WorkflowDefinition; items: Items; startAt?: NodeId }): Promise<RunResult> {\n await this.handle.start([args.workflow]);\n return await this.handle.workflowRunner.runById({\n workflowId: args.workflow.id,\n startAt: args.startAt,\n items: args.items,\n });\n }\n\n async runNode(args: {\n node: RunnableNodeConfig;\n items: Items;\n workflowId?: WorkflowId;\n workflowName?: string;\n }): Promise<RunResult> {\n const wf = this.runNodeWorkflowFactory.build(args);\n return await this.run({\n workflow: wf,\n items: args.items,\n startAt: this.runNodeWorkflowFactory.defaultStartNodeId(),\n });\n }\n}\n"],"mappings":"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"}
|
package/dist/testing.d.cts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as InMemoryLiveWorkflowRepository, r as Engine, t as RunIntentService } from "./RunIntentService-
|
|
3
|
-
import { a as WorkflowSnapshotCodec, i as EngineWorkflowRunnerService, t as EngineRuntimeRegistrationOptions } from "./EngineRuntimeRegistration.types-
|
|
1
|
+
import { Er as TriggerSetupStateRepository, Et as Items, Gn as ExecutionContextFactory, H as WorkflowExecutionRepository, Jt as ParentExecutionRef, N as RunResult, Qi as NodeId, U as Container, Ut as NodeOffloadPolicy, Wt as NodeOutputs, Y as TypeToken, Zt as RunDataFactory, _r as RunnableNodeExecuteArgs, ar as NodeExecutionContext, cn as WorkflowDefinition, cr as NodeExecutionScheduler, ft as RunEventBus, gr as RunnableNode, in as TriggerNodeConfig, jr as WorkflowRunnerService, lt as EngineExecutionLimitsPolicy, or as NodeExecutionRequest, ta as WorkflowId, tn as RunnableNodeConfig, wr as TriggerSetupContext, wt as Item, xr as TriggerNode, zi as CredentialSessionService } from "./agentMcpTypes-BHX4RQCC.cjs";
|
|
2
|
+
import { n as InMemoryLiveWorkflowRepository, r as Engine, t as RunIntentService } from "./RunIntentService-DKxuHTUz.cjs";
|
|
3
|
+
import { a as WorkflowSnapshotCodec, i as EngineWorkflowRunnerService, t as EngineRuntimeRegistrationOptions } from "./EngineRuntimeRegistration.types-BiNasx3G.cjs";
|
|
4
4
|
import { ZodType } from "zod";
|
|
5
5
|
import { DependencyContainer, InjectionToken } from "tsyringe";
|
|
6
6
|
|
|
7
7
|
//#region src/testing/RejectingCredentialSessionService.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* Test harness default: rejects any credential lookup so missing bindings fail loudly.
|
|
10
|
-
* Prefer registering a real {@link CredentialSessionService} in integration scenarios.
|
|
11
|
-
*/
|
|
12
8
|
declare class RejectingCredentialSessionService implements CredentialSessionService {
|
|
13
9
|
getSession<TSession = unknown>(args: Readonly<{
|
|
14
10
|
workflowId: string;
|
|
@@ -18,10 +14,6 @@ declare class RejectingCredentialSessionService implements CredentialSessionServ
|
|
|
18
14
|
}
|
|
19
15
|
//#endregion
|
|
20
16
|
//#region src/testing/ItemHarnessNodeConfig.d.ts
|
|
21
|
-
/**
|
|
22
|
-
* Item-mode harness node config for engine tests: engine applies {@link RunnableNodeConfig.inputSchema},
|
|
23
|
-
* then {@link ItemHarnessNode.execute} per item.
|
|
24
|
-
*/
|
|
25
17
|
declare class ItemHarnessNodeConfig<TIn = unknown, TOut = unknown> implements RunnableNodeConfig<TIn, TOut> {
|
|
26
18
|
readonly name: string;
|
|
27
19
|
readonly inputSchema: ZodType<TIn>;
|
|
@@ -50,9 +42,6 @@ declare class ItemHarnessNodeConfig<TIn = unknown, TOut = unknown> implements Ru
|
|
|
50
42
|
}
|
|
51
43
|
//#endregion
|
|
52
44
|
//#region src/testing/ItemHarnessNode.d.ts
|
|
53
|
-
/**
|
|
54
|
-
* Item-mode harness node for engine tests (see {@link ItemHarnessNodeConfig}).
|
|
55
|
-
*/
|
|
56
45
|
declare class ItemHarnessNode implements RunnableNode<ItemHarnessNodeConfig<any, any>> {
|
|
57
46
|
readonly kind: "node";
|
|
58
47
|
readonly outputPorts: readonly ["main"];
|
|
@@ -60,9 +49,6 @@ declare class ItemHarnessNode implements RunnableNode<ItemHarnessNodeConfig<any,
|
|
|
60
49
|
}
|
|
61
50
|
//#endregion
|
|
62
51
|
//#region src/testing/CapturingScheduler.d.ts
|
|
63
|
-
/**
|
|
64
|
-
* Test scheduler that records enqueue requests without executing a real queue.
|
|
65
|
-
*/
|
|
66
52
|
declare class CapturingScheduler implements NodeExecutionScheduler {
|
|
67
53
|
lastRequest: NodeExecutionRequest | undefined;
|
|
68
54
|
requests: NodeExecutionRequest[];
|
|
@@ -72,9 +58,6 @@ declare class CapturingScheduler implements NodeExecutionScheduler {
|
|
|
72
58
|
}
|
|
73
59
|
//#endregion
|
|
74
60
|
//#region src/testing/PrefixedSequentialIdGenerator.d.ts
|
|
75
|
-
/**
|
|
76
|
-
* Deterministic `run_1`, `act_1`-style ids for test harness factories.
|
|
77
|
-
*/
|
|
78
61
|
declare class PrefixedSequentialIdGenerator {
|
|
79
62
|
private readonly prefix;
|
|
80
63
|
private n;
|
|
@@ -99,11 +82,9 @@ type EngineTestKitOptions = Partial<{
|
|
|
99
82
|
makeRunId: () => string;
|
|
100
83
|
makeActivationId: () => string;
|
|
101
84
|
workflowRunner: EngineWorkflowRunnerService;
|
|
102
|
-
/** Passed to engine factory so integration tests can assert host-configured limits propagate. */
|
|
103
85
|
executionLimitsPolicy: EngineExecutionLimitsPolicy;
|
|
104
86
|
}>;
|
|
105
87
|
type RegistrarEngineTestKitOptions = EngineTestKitOptions & {
|
|
106
|
-
/** Passed to {@link EngineRuntimeRegistrar.register}. */
|
|
107
88
|
registrarOptions?: EngineRuntimeRegistrationOptions;
|
|
108
89
|
};
|
|
109
90
|
interface RegistrarEngineTestKitHandle {
|
|
@@ -139,9 +120,6 @@ declare class RegistrarEngineTestKitFactory {
|
|
|
139
120
|
}
|
|
140
121
|
//#endregion
|
|
141
122
|
//#region src/testing/SubWorkflowRunnerTestNode.d.ts
|
|
142
|
-
/**
|
|
143
|
-
* Test harness subworkflow runner (mirrors integration patterns; lives under {@link "@codemation/core/testing"}).
|
|
144
|
-
*/
|
|
145
123
|
declare class SubWorkflowRunnerConfig<TInputJson = unknown, TOutputJson = unknown> implements RunnableNodeConfig<TInputJson, TOutputJson> {
|
|
146
124
|
readonly name: string;
|
|
147
125
|
readonly args: Readonly<{
|
|
@@ -181,9 +159,6 @@ declare class SubWorkflowRunnerNode implements RunnableNode<SubWorkflowRunnerCon
|
|
|
181
159
|
}
|
|
182
160
|
//#endregion
|
|
183
161
|
//#region src/testing/WorkflowTestHarnessManualTrigger.d.ts
|
|
184
|
-
/**
|
|
185
|
-
* Minimal pass-through manual trigger for {@link WorkflowTestKit.runNode}; emits input items unchanged.
|
|
186
|
-
*/
|
|
187
162
|
declare class WorkflowTestHarnessManualTriggerConfig implements TriggerNodeConfig<unknown> {
|
|
188
163
|
readonly name: string;
|
|
189
164
|
readonly id?: string | undefined;
|
|
@@ -218,10 +193,6 @@ declare class WorkflowTestKit {
|
|
|
218
193
|
get workflowRunner(): RegistrarEngineTestKitHandle["workflowRunner"];
|
|
219
194
|
get liveWorkflowRepository(): RegistrarEngineTestKitHandle["liveWorkflowRepository"];
|
|
220
195
|
get runStore(): RegistrarEngineTestKitHandle["runStore"];
|
|
221
|
-
/**
|
|
222
|
-
* Registers {@link import("../authoring/defineNode.types").DefinedNode} implementations on the same DI container used by the engine
|
|
223
|
-
* (same pattern as `plugin.register({ registerNode })` in the host).
|
|
224
|
-
*/
|
|
225
196
|
registerDefinedNodes(definitions: ReadonlyArray<DefinedNodeRegistration>): void;
|
|
226
197
|
run(args: {
|
|
227
198
|
workflow: WorkflowDefinition;
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as WorkflowSnapshotCodec, n as InMemoryLiveWorkflowRepository, r as EngineWorkflowRunnerService, t as RunIntentService, u as Engine } from "./RunIntentService-
|
|
3
|
-
import { t as EngineRuntimeRegistrationOptions } from "./EngineRuntimeRegistration.types-
|
|
1
|
+
import { $i as NodeExecutionContext, Dn as RunResult, Gr as RunDataFactory, Hr as ParentExecutionRef, In as WorkflowExecutionRepository, Ko as NodeId, Ln as Container, Lr as NodeOffloadPolicy, No as CredentialSessionService, Qr as TriggerNodeConfig, Rr as NodeOutputs, Ta as WorkflowRunnerService, Un as TypeToken, Yo as WorkflowId, Yr as RunnableNodeConfig, ba as TriggerSetupStateRepository, br as Items, da as RunnableNodeExecuteArgs, ea as NodeExecutionRequest, ha as TriggerNode, na as NodeExecutionScheduler, ni as WorkflowDefinition, or as RunEventBus, rr as EngineExecutionLimitsPolicy, ua as RunnableNode, va as TriggerSetupContext, vr as Item, zi as ExecutionContextFactory } from "./index-CRv3_pY3.js";
|
|
2
|
+
import { i as WorkflowSnapshotCodec, n as InMemoryLiveWorkflowRepository, r as EngineWorkflowRunnerService, t as RunIntentService, u as Engine } from "./RunIntentService-DrpKli2k.js";
|
|
3
|
+
import { t as EngineRuntimeRegistrationOptions } from "./EngineRuntimeRegistration.types-Dq4ucrdo.js";
|
|
4
4
|
import { DependencyContainer, InjectionToken } from "tsyringe";
|
|
5
5
|
import { ZodType } from "zod";
|
|
6
6
|
|
|
7
7
|
//#region src/testing/RejectingCredentialSessionService.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* Test harness default: rejects any credential lookup so missing bindings fail loudly.
|
|
10
|
-
* Prefer registering a real {@link CredentialSessionService} in integration scenarios.
|
|
11
|
-
*/
|
|
12
8
|
declare class RejectingCredentialSessionService implements CredentialSessionService {
|
|
13
9
|
getSession<TSession = unknown>(args: Readonly<{
|
|
14
10
|
workflowId: string;
|
|
@@ -18,10 +14,6 @@ declare class RejectingCredentialSessionService implements CredentialSessionServ
|
|
|
18
14
|
}
|
|
19
15
|
//#endregion
|
|
20
16
|
//#region src/testing/ItemHarnessNodeConfig.d.ts
|
|
21
|
-
/**
|
|
22
|
-
* Item-mode harness node config for engine tests: engine applies {@link RunnableNodeConfig.inputSchema},
|
|
23
|
-
* then {@link ItemHarnessNode.execute} per item.
|
|
24
|
-
*/
|
|
25
17
|
declare class ItemHarnessNodeConfig<TIn = unknown, TOut = unknown> implements RunnableNodeConfig<TIn, TOut> {
|
|
26
18
|
readonly name: string;
|
|
27
19
|
readonly inputSchema: ZodType<TIn>;
|
|
@@ -50,9 +42,6 @@ declare class ItemHarnessNodeConfig<TIn = unknown, TOut = unknown> implements Ru
|
|
|
50
42
|
}
|
|
51
43
|
//#endregion
|
|
52
44
|
//#region src/testing/ItemHarnessNode.d.ts
|
|
53
|
-
/**
|
|
54
|
-
* Item-mode harness node for engine tests (see {@link ItemHarnessNodeConfig}).
|
|
55
|
-
*/
|
|
56
45
|
declare class ItemHarnessNode implements RunnableNode<ItemHarnessNodeConfig<any, any>> {
|
|
57
46
|
readonly kind: "node";
|
|
58
47
|
readonly outputPorts: readonly ["main"];
|
|
@@ -60,9 +49,6 @@ declare class ItemHarnessNode implements RunnableNode<ItemHarnessNodeConfig<any,
|
|
|
60
49
|
}
|
|
61
50
|
//#endregion
|
|
62
51
|
//#region src/testing/CapturingScheduler.d.ts
|
|
63
|
-
/**
|
|
64
|
-
* Test scheduler that records enqueue requests without executing a real queue.
|
|
65
|
-
*/
|
|
66
52
|
declare class CapturingScheduler implements NodeExecutionScheduler {
|
|
67
53
|
lastRequest: NodeExecutionRequest | undefined;
|
|
68
54
|
requests: NodeExecutionRequest[];
|
|
@@ -72,9 +58,6 @@ declare class CapturingScheduler implements NodeExecutionScheduler {
|
|
|
72
58
|
}
|
|
73
59
|
//#endregion
|
|
74
60
|
//#region src/testing/PrefixedSequentialIdGenerator.d.ts
|
|
75
|
-
/**
|
|
76
|
-
* Deterministic `run_1`, `act_1`-style ids for test harness factories.
|
|
77
|
-
*/
|
|
78
61
|
declare class PrefixedSequentialIdGenerator {
|
|
79
62
|
private readonly prefix;
|
|
80
63
|
private n;
|
|
@@ -99,11 +82,9 @@ type EngineTestKitOptions = Partial<{
|
|
|
99
82
|
makeRunId: () => string;
|
|
100
83
|
makeActivationId: () => string;
|
|
101
84
|
workflowRunner: EngineWorkflowRunnerService;
|
|
102
|
-
/** Passed to engine factory so integration tests can assert host-configured limits propagate. */
|
|
103
85
|
executionLimitsPolicy: EngineExecutionLimitsPolicy;
|
|
104
86
|
}>;
|
|
105
87
|
type RegistrarEngineTestKitOptions = EngineTestKitOptions & {
|
|
106
|
-
/** Passed to {@link EngineRuntimeRegistrar.register}. */
|
|
107
88
|
registrarOptions?: EngineRuntimeRegistrationOptions;
|
|
108
89
|
};
|
|
109
90
|
interface RegistrarEngineTestKitHandle {
|
|
@@ -139,9 +120,6 @@ declare class RegistrarEngineTestKitFactory {
|
|
|
139
120
|
}
|
|
140
121
|
//#endregion
|
|
141
122
|
//#region src/testing/SubWorkflowRunnerTestNode.d.ts
|
|
142
|
-
/**
|
|
143
|
-
* Test harness subworkflow runner (mirrors integration patterns; lives under {@link "@codemation/core/testing"}).
|
|
144
|
-
*/
|
|
145
123
|
declare class SubWorkflowRunnerConfig<TInputJson = unknown, TOutputJson = unknown> implements RunnableNodeConfig<TInputJson, TOutputJson> {
|
|
146
124
|
readonly name: string;
|
|
147
125
|
readonly args: Readonly<{
|
|
@@ -181,9 +159,6 @@ declare class SubWorkflowRunnerNode implements RunnableNode<SubWorkflowRunnerCon
|
|
|
181
159
|
}
|
|
182
160
|
//#endregion
|
|
183
161
|
//#region src/testing/WorkflowTestHarnessManualTrigger.d.ts
|
|
184
|
-
/**
|
|
185
|
-
* Minimal pass-through manual trigger for {@link WorkflowTestKit.runNode}; emits input items unchanged.
|
|
186
|
-
*/
|
|
187
162
|
declare class WorkflowTestHarnessManualTriggerConfig implements TriggerNodeConfig<unknown> {
|
|
188
163
|
readonly name: string;
|
|
189
164
|
readonly id?: string | undefined;
|
|
@@ -218,10 +193,6 @@ declare class WorkflowTestKit {
|
|
|
218
193
|
get workflowRunner(): RegistrarEngineTestKitHandle["workflowRunner"];
|
|
219
194
|
get liveWorkflowRepository(): RegistrarEngineTestKitHandle["liveWorkflowRepository"];
|
|
220
195
|
get runStore(): RegistrarEngineTestKitHandle["runStore"];
|
|
221
|
-
/**
|
|
222
|
-
* Registers {@link import("../authoring/defineNode.types").DefinedNode} implementations on the same DI container used by the engine
|
|
223
|
-
* (same pattern as `plugin.register({ registerNode })` in the host).
|
|
224
|
-
*/
|
|
225
196
|
registerDefinedNodes(definitions: ReadonlyArray<DefinedNodeRegistration>): void;
|
|
226
197
|
run(args: {
|
|
227
198
|
workflow: WorkflowDefinition;
|
package/dist/testing.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import "./workflowTypes-DZtBTmKf.js";
|
|
2
|
+
import { d as CoreTokens } from "./di-Cjiil7U-.js";
|
|
3
|
+
import { a as WorkflowSnapshotCodec, o as PersistedWorkflowTokenRegistry } from "./contracts-CjJ5CZ7N.js";
|
|
4
|
+
import { C as DefaultDrivingScheduler, G as AllWorkflowsActiveWorkflowActivationPolicy, N as NodeExecutor, O as NodeInstanceFactory, S as HintOnlyOffloadPolicy, V as DefaultExecutionContextFactory, a as InMemoryLiveWorkflowRepository, i as RunIntentService, it as emitPorts, l as Engine, p as InMemoryRunDataFactory, st as DefaultAsyncSleeper, x as InlineDrivingScheduler, yt as WorkflowBuilder, z as InProcessRetryRunner } from "./runtime-CBFDpmiz.js";
|
|
5
|
+
import { t as InMemoryRunEventBus } from "./InMemoryRunEventBusRegistry-Layt2xgm.js";
|
|
6
|
+
import { a as InMemoryWorkflowExecutionRepository, t as EngineRuntimeRegistrar } from "./bootstrap-DmqKheCI.js";
|
|
6
7
|
import { container } from "tsyringe";
|
|
7
8
|
|
|
8
9
|
//#region src/testing/RejectingCredentialSessionService.ts
|
|
9
|
-
/**
|
|
10
|
-
* Test harness default: rejects any credential lookup so missing bindings fail loudly.
|
|
11
|
-
* Prefer registering a real {@link CredentialSessionService} in integration scenarios.
|
|
12
|
-
*/
|
|
13
10
|
var RejectingCredentialSessionService = class {
|
|
14
11
|
async getSession(args) {
|
|
15
12
|
throw new Error(`Credential sessions are unavailable for workflow ${args.workflowId} node ${args.nodeId} slot "${args.slotKey}". Register a real CredentialSessionService implementation before executing workflows.`);
|
|
@@ -18,9 +15,6 @@ var RejectingCredentialSessionService = class {
|
|
|
18
15
|
|
|
19
16
|
//#endregion
|
|
20
17
|
//#region src/testing/ItemHarnessNode.ts
|
|
21
|
-
/**
|
|
22
|
-
* Item-mode harness node for engine tests (see {@link ItemHarnessNodeConfig}).
|
|
23
|
-
*/
|
|
24
18
|
var ItemHarnessNode = class {
|
|
25
19
|
kind = "node";
|
|
26
20
|
outputPorts = ["main"];
|
|
@@ -37,10 +31,6 @@ var ItemHarnessNode = class {
|
|
|
37
31
|
|
|
38
32
|
//#endregion
|
|
39
33
|
//#region src/testing/ItemHarnessNodeConfig.ts
|
|
40
|
-
/**
|
|
41
|
-
* Item-mode harness node config for engine tests: engine applies {@link RunnableNodeConfig.inputSchema},
|
|
42
|
-
* then {@link ItemHarnessNode.execute} per item.
|
|
43
|
-
*/
|
|
44
34
|
var ItemHarnessNodeConfig = class {
|
|
45
35
|
kind = "node";
|
|
46
36
|
type = ItemHarnessNode;
|
|
@@ -57,9 +47,6 @@ var ItemHarnessNodeConfig = class {
|
|
|
57
47
|
|
|
58
48
|
//#endregion
|
|
59
49
|
//#region src/testing/CapturingScheduler.ts
|
|
60
|
-
/**
|
|
61
|
-
* Test scheduler that records enqueue requests without executing a real queue.
|
|
62
|
-
*/
|
|
63
50
|
var CapturingScheduler = class {
|
|
64
51
|
lastRequest;
|
|
65
52
|
requests = [];
|
|
@@ -72,9 +59,6 @@ var CapturingScheduler = class {
|
|
|
72
59
|
|
|
73
60
|
//#endregion
|
|
74
61
|
//#region src/testing/PrefixedSequentialIdGenerator.ts
|
|
75
|
-
/**
|
|
76
|
-
* Deterministic `run_1`, `act_1`-style ids for test harness factories.
|
|
77
|
-
*/
|
|
78
62
|
var PrefixedSequentialIdGenerator = class {
|
|
79
63
|
n = 0;
|
|
80
64
|
constructor(prefix) {
|
|
@@ -91,9 +75,6 @@ var PrefixedSequentialIdGenerator = class {
|
|
|
91
75
|
|
|
92
76
|
//#endregion
|
|
93
77
|
//#region src/testing/EngineTestKitRunIdFactory.ts
|
|
94
|
-
/**
|
|
95
|
-
* @internal Test harness id factory shared by registrar kit wiring.
|
|
96
|
-
*/
|
|
97
78
|
var EngineTestKitRunIdFactory = class {
|
|
98
79
|
runCounter = 0;
|
|
99
80
|
activationCounter = 0;
|
|
@@ -131,9 +112,6 @@ var InMemoryTriggerSetupStateRepository = class {
|
|
|
131
112
|
|
|
132
113
|
//#endregion
|
|
133
114
|
//#region src/testing/SubWorkflowRunnerTestNode.ts
|
|
134
|
-
/**
|
|
135
|
-
* Test harness subworkflow runner (mirrors integration patterns; lives under {@link "@codemation/core/testing"}).
|
|
136
|
-
*/
|
|
137
115
|
var SubWorkflowRunnerConfig = class {
|
|
138
116
|
kind = "node";
|
|
139
117
|
type = SubWorkflowRunnerNode;
|
|
@@ -184,9 +162,6 @@ var SubWorkflowRunnerNode = class {
|
|
|
184
162
|
|
|
185
163
|
//#endregion
|
|
186
164
|
//#region src/testing/WorkflowTestHarnessManualTrigger.ts
|
|
187
|
-
/**
|
|
188
|
-
* Minimal pass-through manual trigger for {@link WorkflowTestKit.runNode}; emits input items unchanged.
|
|
189
|
-
*/
|
|
190
165
|
var WorkflowTestHarnessManualTriggerConfig = class {
|
|
191
166
|
kind = "trigger";
|
|
192
167
|
type = WorkflowTestHarnessManualTriggerNode;
|
|
@@ -313,9 +288,6 @@ var WorkflowTestKitNodeRegistrationContextFactory = class {
|
|
|
313
288
|
//#region src/testing/WorkflowTestKitRunNodeWorkflowFactory.ts
|
|
314
289
|
const defaultInlineWorkflowId = "codemation.testing.workflowkit.inline";
|
|
315
290
|
const defaultInlineWorkflowName = "WorkflowTestKit inline";
|
|
316
|
-
/**
|
|
317
|
-
* Builds the minimal trigger → runnable workflow used by {@link import("./WorkflowTestKit").WorkflowTestKit.runNode}.
|
|
318
|
-
*/
|
|
319
291
|
var WorkflowTestKitRunNodeWorkflowFactory = class {
|
|
320
292
|
build(args) {
|
|
321
293
|
const workflowId = args.workflowId ?? defaultInlineWorkflowId;
|
|
@@ -355,10 +327,6 @@ var WorkflowTestKit = class {
|
|
|
355
327
|
get runStore() {
|
|
356
328
|
return this.handle.runStore;
|
|
357
329
|
}
|
|
358
|
-
/**
|
|
359
|
-
* Registers {@link import("../authoring/defineNode.types").DefinedNode} implementations on the same DI container used by the engine
|
|
360
|
-
* (same pattern as `plugin.register({ registerNode })` in the host).
|
|
361
|
-
*/
|
|
362
330
|
registerDefinedNodes(definitions) {
|
|
363
331
|
const ctx = this.nodeRegistrationContextFactory.create(this.handle.dependencyContainer);
|
|
364
332
|
for (const def of definitions) def.register(ctx);
|