@ontrails/testing 1.0.0-beta.15 → 1.0.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +70 -1
  2. package/README.md +47 -3
  3. package/package.json +16 -7
  4. package/src/all.ts +32 -7
  5. package/src/context.ts +3 -0
  6. package/src/contracts.ts +1 -16
  7. package/src/examples.ts +19 -11
  8. package/src/harness-cli.ts +16 -3
  9. package/src/harness-http.ts +263 -0
  10. package/src/harness-mcp.ts +2 -0
  11. package/src/index.ts +18 -1
  12. package/src/logger.ts +3 -1
  13. package/src/scenario.ts +3 -5
  14. package/src/signals.ts +221 -0
  15. package/src/surface-parity.ts +356 -0
  16. package/src/types.ts +136 -1
  17. package/.turbo/turbo-build.log +0 -1
  18. package/.turbo/turbo-lint.log +0 -3
  19. package/.turbo/turbo-typecheck.log +0 -1
  20. package/dist/all.d.ts +0 -36
  21. package/dist/all.d.ts.map +0 -1
  22. package/dist/all.js +0 -99
  23. package/dist/all.js.map +0 -1
  24. package/dist/assertions.d.ts +0 -72
  25. package/dist/assertions.d.ts.map +0 -1
  26. package/dist/assertions.js +0 -238
  27. package/dist/assertions.js.map +0 -1
  28. package/dist/context.d.ts +0 -76
  29. package/dist/context.d.ts.map +0 -1
  30. package/dist/context.js +0 -118
  31. package/dist/context.js.map +0 -1
  32. package/dist/contracts.d.ts +0 -17
  33. package/dist/contracts.d.ts.map +0 -1
  34. package/dist/contracts.js +0 -75
  35. package/dist/contracts.js.map +0 -1
  36. package/dist/crosses.d.ts +0 -38
  37. package/dist/crosses.d.ts.map +0 -1
  38. package/dist/crosses.js +0 -223
  39. package/dist/crosses.js.map +0 -1
  40. package/dist/detours.d.ts +0 -13
  41. package/dist/detours.d.ts.map +0 -1
  42. package/dist/detours.js +0 -109
  43. package/dist/detours.js.map +0 -1
  44. package/dist/effective-examples.d.ts +0 -30
  45. package/dist/effective-examples.d.ts.map +0 -1
  46. package/dist/effective-examples.js +0 -227
  47. package/dist/effective-examples.js.map +0 -1
  48. package/dist/examples.d.ts +0 -23
  49. package/dist/examples.d.ts.map +0 -1
  50. package/dist/examples.js +0 -240
  51. package/dist/examples.js.map +0 -1
  52. package/dist/harness-cli.d.ts +0 -21
  53. package/dist/harness-cli.d.ts.map +0 -1
  54. package/dist/harness-cli.js +0 -205
  55. package/dist/harness-cli.js.map +0 -1
  56. package/dist/harness-mcp.d.ts +0 -21
  57. package/dist/harness-mcp.d.ts.map +0 -1
  58. package/dist/harness-mcp.js +0 -54
  59. package/dist/harness-mcp.js.map +0 -1
  60. package/dist/index.d.ts +0 -18
  61. package/dist/index.d.ts.map +0 -1
  62. package/dist/index.js +0 -19
  63. package/dist/index.js.map +0 -1
  64. package/dist/logger.d.ts +0 -15
  65. package/dist/logger.d.ts.map +0 -1
  66. package/dist/logger.js +0 -87
  67. package/dist/logger.js.map +0 -1
  68. package/dist/scenario.d.ts +0 -37
  69. package/dist/scenario.d.ts.map +0 -1
  70. package/dist/scenario.js +0 -235
  71. package/dist/scenario.js.map +0 -1
  72. package/dist/trail.d.ts +0 -20
  73. package/dist/trail.d.ts.map +0 -1
  74. package/dist/trail.js +0 -80
  75. package/dist/trail.js.map +0 -1
  76. package/dist/types.d.ts +0 -113
  77. package/dist/types.d.ts.map +0 -1
  78. package/dist/types.js +0 -5
  79. package/dist/types.js.map +0 -1
  80. package/src/__tests__/all.test.ts +0 -254
  81. package/src/__tests__/context.test.ts +0 -170
  82. package/src/__tests__/contracts.test.ts +0 -239
  83. package/src/__tests__/crosses.test.ts +0 -587
  84. package/src/__tests__/detours.test.ts +0 -212
  85. package/src/__tests__/effective-examples.test.ts +0 -203
  86. package/src/__tests__/examples.test.ts +0 -636
  87. package/src/__tests__/harness-cli.test.ts +0 -90
  88. package/src/__tests__/harness-mcp.test.ts +0 -37
  89. package/src/__tests__/logger.test.ts +0 -136
  90. package/src/__tests__/partial-match.test.ts +0 -126
  91. package/src/__tests__/scenario.test.ts +0 -381
  92. package/src/__tests__/trail.test.ts +0 -99
  93. package/tsconfig.json +0 -9
  94. package/tsconfig.tests.json +0 -10
  95. package/tsconfig.tsbuildinfo +0 -1
package/dist/scenario.js DELETED
@@ -1,235 +0,0 @@
1
- /**
2
- * Multi-step scenario runner for composition testing.
3
- *
4
- * Scenarios express multi-trail flows as structured data — arrays of steps
5
- * with cross-step references via `ref()`. Each step invokes a trail through
6
- * the normal execution pipeline (validation, layers, blaze, Result).
7
- */
8
- import { describe, test } from 'bun:test';
9
- import { buildCrossValidationSchema, executeTrail, InternalError, Result as R, } from '@ontrails/core';
10
- import { claimNextCrossBatchIndex, createCrossBatchValidationResults, normalizeCrossBatchConcurrency, } from '@ontrails/core/internal/cross-batch';
11
- import { assertPartialMatch, expectOk } from './assertions.js';
12
- import { createTestContext, createMockResources } from './context.js';
13
- // ---------------------------------------------------------------------------
14
- // ref() — cross-step reference marker
15
- // ---------------------------------------------------------------------------
16
- /**
17
- * Create a reference marker for cross-step data in scenario inputs.
18
- *
19
- * `ref('create.id')` resolves to the `id` field of the step aliased as
20
- * `create`. Dot-paths are supported for nested access.
21
- *
22
- * @example
23
- * ```typescript
24
- * scenario('Fork flow', app, [
25
- * { cross: createGist, input: { name: 'Hello' }, as: 'original' },
26
- * { cross: forkGist, input: { id: ref('original.id') } },
27
- * ]);
28
- * ```
29
- */
30
- export const ref = (path) => ({ __ref: true, path });
31
- // ---------------------------------------------------------------------------
32
- // Internals
33
- // ---------------------------------------------------------------------------
34
- /** Type guard for RefToken. */
35
- const isRef = (value) => typeof value === 'object' &&
36
- value !== null &&
37
- '__ref' in value &&
38
- value['__ref'] === true &&
39
- 'path' in value;
40
- /**
41
- * Resolve a dot-path against the outputs map.
42
- *
43
- * `ref('create.id')` splits into step name `create` and field path `id`.
44
- * The first segment is the step alias; remaining segments are property lookups.
45
- */
46
- /**
47
- * Walk remaining segments of a dot-path, drilling into the step output.
48
- */
49
- const drillPath = (path, segments, start) => {
50
- let current = start;
51
- for (let i = 1; i < segments.length; i += 1) {
52
- const segment = segments[i];
53
- if (segment === undefined) {
54
- break;
55
- }
56
- if (typeof current !== 'object' || current === null) {
57
- throw new Error(`ref('${path}'): cannot access '${segment}' on ${typeof current}`);
58
- }
59
- current = current[segment];
60
- }
61
- return current;
62
- };
63
- const resolvePath = (path, outputs) => {
64
- const segments = path.split('.');
65
- const [stepName] = segments;
66
- if (stepName === undefined) {
67
- throw new Error(`ref(): empty path`);
68
- }
69
- const stepOutput = outputs.get(stepName);
70
- if (stepOutput === undefined) {
71
- throw new Error(`ref('${path}'): no step output found for alias '${stepName}'`);
72
- }
73
- return drillPath(path, segments, stepOutput);
74
- };
75
- /**
76
- * Recursively walk a value, replacing RefToken instances with resolved values.
77
- */
78
- export const deriveRefs = (value, outputs) => {
79
- if (isRef(value)) {
80
- return resolvePath(value.path, outputs);
81
- }
82
- if (Array.isArray(value)) {
83
- return value.map((item) => deriveRefs(item, outputs));
84
- }
85
- if (typeof value === 'object' && value !== null) {
86
- const result = {};
87
- for (const [key, val] of Object.entries(value)) {
88
- result[key] = deriveRefs(val, outputs);
89
- }
90
- return result;
91
- }
92
- return value;
93
- };
94
- // ---------------------------------------------------------------------------
95
- // scenario() — the public API
96
- // ---------------------------------------------------------------------------
97
- /**
98
- * Define a multi-step scenario test for composition flows.
99
- *
100
- * Each step invokes a trail through the normal execution pipeline.
101
- * Steps can reference prior step outputs via `ref()`. If any step
102
- * fails, the scenario stops and reports which step failed.
103
- *
104
- * @example
105
- * ```typescript
106
- * scenario('Create and show', app, [
107
- * { cross: createItem, input: { name: 'Test' }, as: 'created' },
108
- * { cross: showItem, input: { id: ref('created.id') },
109
- * expectedMatch: { found: true } },
110
- * ]);
111
- * ```
112
- */
113
- /** Assert the result of a step against its expectations and record output. */
114
- const assertStepExpectations = async (step, result, outputs) => {
115
- const value = expectOk(result);
116
- if (step.expected !== undefined) {
117
- const { expect } = await import('bun:test');
118
- expect(value).toEqual(deriveRefs(step.expected, outputs));
119
- }
120
- else if (step.expectedMatch !== undefined) {
121
- assertPartialMatch(result, deriveRefs(step.expectedMatch, outputs));
122
- }
123
- if (step.as !== undefined) {
124
- outputs.set(step.as, value);
125
- }
126
- };
127
- const executeUnlimitedCrossBatch = async (calls, runCall) => await Promise.all(calls.map((call, branchIndex) => runCall(call, branchIndex)));
128
- const executeLimitedCrossBatch = async (calls, runCall, limit) => {
129
- const results = Array.from({ length: calls.length });
130
- const nextIndex = { value: 0 };
131
- const runWorker = async () => {
132
- while (true) {
133
- const branchIndex = claimNextCrossBatchIndex(nextIndex, calls);
134
- if (branchIndex === undefined) {
135
- return;
136
- }
137
- const call = calls[branchIndex];
138
- if (call === undefined) {
139
- // Defensive: `claimNextCrossBatchIndex` only returns indices within
140
- // bounds, so this slot should always be populated. If it ever isn't,
141
- // surface a clear InternalError in place of the missing slot and keep
142
- // the worker loop running so sibling branches still get processed.
143
- results[branchIndex] = R.err(new InternalError(`unreachable: concurrent cross batch call missing at index ${branchIndex}`));
144
- continue;
145
- }
146
- results[branchIndex] = await runCall(call, branchIndex);
147
- }
148
- };
149
- await Promise.all(Array.from({ length: limit }, runWorker));
150
- return results;
151
- };
152
- /**
153
- * Build a cross function that resolves trails from the topo and executes
154
- * them through the standard pipeline. Mirrors the pattern in crosses.ts
155
- * `executeFromMap` but without recording or injection.
156
- */
157
- const createScenarioCross = (app, resources) => {
158
- const invokeCross = async (idOrTrail, input, self) => {
159
- const id = typeof idOrTrail === 'string' ? idOrTrail : idOrTrail.id;
160
- const trailDef = app.get(id);
161
- if (trailDef === undefined) {
162
- return R.err(new InternalError(`cross: trail "${id}" not found in topo`));
163
- }
164
- const baseCtx = createTestContext();
165
- return await executeTrail(trailDef, input, {
166
- ctx: { ...baseCtx, cross: self },
167
- resources,
168
- topo: app,
169
- validationSchema: buildCrossValidationSchema(trailDef),
170
- });
171
- };
172
- const executeCrossBatch = async (calls, self, options) => {
173
- if (calls.length === 0) {
174
- return [];
175
- }
176
- const concurrency = normalizeCrossBatchConcurrency(options);
177
- if (concurrency.isErr()) {
178
- return createCrossBatchValidationResults(calls, concurrency.error);
179
- }
180
- const runCall = async ([target, batchInput], _branchIndex) => await invokeCross(target, batchInput, self);
181
- const limit = concurrency.value ?? calls.length;
182
- return limit >= calls.length
183
- ? await executeUnlimitedCrossBatch(calls, runCall)
184
- : await executeLimitedCrossBatch(calls, runCall, limit);
185
- };
186
- const cross = async function cross(idOrTrail, inputOrOptions) {
187
- if (Array.isArray(idOrTrail)) {
188
- return await executeCrossBatch(idOrTrail, cross, inputOrOptions);
189
- }
190
- return await invokeCross(idOrTrail, inputOrOptions, cross);
191
- };
192
- return cross;
193
- };
194
- /**
195
- * Execute a single scenario step: run the trail, assert expectations,
196
- * and record outputs.
197
- */
198
- const executeStep = async (step, index, app, outputs, resources) => {
199
- if (step.as !== undefined && outputs.has(step.as)) {
200
- throw new Error(`scenario: duplicate step alias "${step.as}" — each alias must be unique`);
201
- }
202
- const scenarioCross = createScenarioCross(app, resources);
203
- const baseCtx = createTestContext();
204
- const resolvedInput = deriveRefs(step.input, outputs);
205
- const result = await executeTrail(step.cross, resolvedInput, {
206
- ctx: { ...baseCtx, cross: scenarioCross },
207
- resources,
208
- topo: app,
209
- });
210
- if (result.isErr()) {
211
- throw new Error(`Step ${String(index + 1)} ("${step.as ?? step.cross.id}") failed: ${result.error.message}`);
212
- }
213
- await assertStepExpectations(step, result, outputs);
214
- };
215
- /**
216
- * Execute scenario steps sequentially, resolving mock resources once upfront.
217
- *
218
- * Exported for direct use in tests that need to assert on step execution
219
- * without the describe/test wrapper that `scenario()` provides.
220
- */
221
- export const executeScenarioSteps = async (app, steps) => {
222
- const outputs = new Map();
223
- const resources = await createMockResources(app);
224
- for (const [index, step] of steps.entries()) {
225
- await executeStep(step, index, app, outputs, resources);
226
- }
227
- };
228
- export const scenario = (name, app, steps) => {
229
- describe(name, () => {
230
- test('executes all steps', async () => {
231
- await executeScenarioSteps(app, steps);
232
- });
233
- });
234
- };
235
- //# sourceMappingURL=scenario.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scenario.js","sourceRoot":"","sources":["../src/scenario.ts"],"names":[],"mappings":"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"}
package/dist/trail.d.ts DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * testTrail — custom scenario testing for individual trails.
3
- *
4
- * Use this for edge cases, boundary values, and regression tests
5
- * that don't belong in `examples` (which are agent-facing documentation).
6
- */
7
- import type { AnyTrail, TrailContext } from '@ontrails/core';
8
- import type { TestScenario } from './types.js';
9
- /**
10
- * Generate a describe block for a trail with one test per scenario.
11
- *
12
- * ```ts
13
- * testTrail(myTrail, [
14
- * { description: "valid input", input: { name: "Alpha" }, expectOk: true },
15
- * { description: "missing name", input: {}, expectErr: ValidationError },
16
- * ]);
17
- * ```
18
- */
19
- export declare const testTrail: (trailDef: AnyTrail, scenarios: readonly TestScenario[], ctx?: Partial<TrailContext>) => void;
20
- //# sourceMappingURL=trail.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trail.d.ts","sourceRoot":"","sources":["../src/trail.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAUrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAyE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,QAAQ,EAClB,WAAW,SAAS,YAAY,EAAE,EAClC,MAAM,OAAO,CAAC,YAAY,CAAC,KAC1B,IASF,CAAC"}
package/dist/trail.js DELETED
@@ -1,80 +0,0 @@
1
- /**
2
- * testTrail — custom scenario testing for individual trails.
3
- *
4
- * Use this for edge cases, boundary values, and regression tests
5
- * that don't belong in `examples` (which are agent-facing documentation).
6
- */
7
- import { describe, expect, test } from 'bun:test';
8
- import { ValidationError, validateInput } from '@ontrails/core';
9
- import { assertErrorMatch, assertFullMatch, assertSchemaMatch, expectOk, } from './assertions.js';
10
- import { mergeTestContext } from './context.js';
11
- // ---------------------------------------------------------------------------
12
- // Helpers
13
- // ---------------------------------------------------------------------------
14
- const assertScenarioResult = (result, scenario, trailDef) => {
15
- if (scenario.expectValue !== undefined) {
16
- assertFullMatch(result, scenario.expectValue);
17
- }
18
- else if (scenario.expectErr !== undefined) {
19
- assertErrorMatch(result, scenario.expectErr, scenario.expectErrMessage);
20
- }
21
- else if (scenario.expectErrMessage !== undefined) {
22
- expect(result.isErr()).toBe(true);
23
- if (result.isErr()) {
24
- expect(result.error.message).toContain(scenario.expectErrMessage);
25
- }
26
- }
27
- else if (scenario.expectOk === true) {
28
- expect(result.isOk()).toBe(true);
29
- assertSchemaMatch(result, trailDef.output);
30
- }
31
- };
32
- /**
33
- * Handle input validation failure for a scenario.
34
- * Returns true if the error was expected and handled.
35
- * Throws if the error was unexpected.
36
- */
37
- const handleValidationError = (validated, scenario) => {
38
- if (!validated.isErr()) {
39
- return false;
40
- }
41
- if (scenario.expectErr === ValidationError) {
42
- expect(validated.error).toBeInstanceOf(ValidationError);
43
- if (scenario.expectErrMessage !== undefined) {
44
- expect(validated.error.message).toContain(scenario.expectErrMessage);
45
- }
46
- return true;
47
- }
48
- throw new Error(`Input validation failed unexpectedly: ${validated.error.message}`);
49
- };
50
- const runScenario = async (trailDef, scenario, ctx) => {
51
- const testCtx = mergeTestContext(ctx);
52
- const validated = validateInput(trailDef.input, scenario.input);
53
- if (handleValidationError(validated, scenario)) {
54
- return;
55
- }
56
- const validatedInput = expectOk(validated);
57
- const result = await trailDef.blaze(validatedInput, testCtx);
58
- assertScenarioResult(result, scenario, trailDef);
59
- };
60
- // ---------------------------------------------------------------------------
61
- // testTrail
62
- // ---------------------------------------------------------------------------
63
- /**
64
- * Generate a describe block for a trail with one test per scenario.
65
- *
66
- * ```ts
67
- * testTrail(myTrail, [
68
- * { description: "valid input", input: { name: "Alpha" }, expectOk: true },
69
- * { description: "missing name", input: {}, expectErr: ValidationError },
70
- * ]);
71
- * ```
72
- */
73
- export const testTrail = (trailDef, scenarios, ctx) => {
74
- describe(trailDef.id, () => {
75
- test.each([...scenarios])('$description', async (scenario) => {
76
- await runScenario(trailDef, scenario, ctx);
77
- });
78
- });
79
- };
80
- //# sourceMappingURL=trail.js.map
package/dist/trail.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"trail.js","sourceRoot":"","sources":["../src/trail.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts DELETED
@@ -1,113 +0,0 @@
1
- /**
2
- * Shared types for @ontrails/testing.
3
- */
4
- import type { DeriveCliCommandsOptions } from '@ontrails/cli';
5
- import type { McpExtra, DeriveMcpToolsOptions } from '@ontrails/mcp';
6
- import type { AnyTrail, Logger, Topo, TraceFn, TrailContext } from '@ontrails/core';
7
- import type { LogLevel, LogRecord } from '@ontrails/logging';
8
- /** A custom test scenario for a single trail. */
9
- export interface TestScenario {
10
- /** Description shown in test output. */
11
- readonly description?: string | undefined;
12
- /** Assert the result error has this message (substring match). */
13
- readonly expectErrMessage?: string | undefined;
14
- /** Assert the result is an error of this type. */
15
- readonly expectErr?: (new (...args: never[]) => Error) | undefined;
16
- /** Assert the result is ok. */
17
- readonly expectOk?: boolean | undefined;
18
- /** Assert the result value equals this. */
19
- readonly expectValue?: unknown | undefined;
20
- /** Input to pass to the implementation. */
21
- readonly input: unknown;
22
- }
23
- /** A test scenario for a trail's crossing graph. */
24
- export interface CrossScenario extends TestScenario {
25
- /** Assert these trail IDs were crossed, in order. */
26
- readonly expectCrossed?: readonly string[] | undefined;
27
- /** Assert crossing counts per trail ID. */
28
- readonly expectCrossedCount?: Readonly<Record<string, number>> | undefined;
29
- /** Inject failure from a crossed trail's example by description. */
30
- readonly injectFromExample?: Readonly<Record<string, string>> | undefined;
31
- }
32
- /** A logger that captures entries for assertion in tests. */
33
- export interface TestLogger extends Logger {
34
- /** All log records captured during the test. */
35
- readonly entries: readonly LogRecord[];
36
- /** Clear captured entries. */
37
- clear(): void;
38
- /** Find entries matching a predicate. */
39
- find(predicate: (record: LogRecord) => boolean): readonly LogRecord[];
40
- /** Assert that at least one entry matches. */
41
- assertLogged(level: LogLevel, messageSubstring: string): void;
42
- }
43
- /** Options for creating a test trail context. */
44
- export interface TestTrailContextOptions {
45
- readonly cwd?: string | undefined;
46
- readonly env?: Record<string, string> | undefined;
47
- readonly logger?: Logger | undefined;
48
- readonly requestId?: string | undefined;
49
- readonly abortSignal?: AbortSignal | undefined;
50
- readonly trace?: TraceFn | undefined;
51
- }
52
- /** Options for creating a CLI harness. */
53
- export interface CliHarnessOptions extends Omit<DeriveCliCommandsOptions, 'onResult' | 'presets' | 'resolveInput'> {
54
- readonly ctx?: Partial<TrailContext> | undefined;
55
- readonly graph: Topo;
56
- }
57
- /** A test harness for CLI commands. */
58
- export interface CliHarness {
59
- /** Execute a CLI command string and capture output. */
60
- run(command: string): Promise<CliHarnessResult>;
61
- }
62
- /** The result of a CLI harness command execution. */
63
- export interface CliHarnessResult {
64
- readonly exitCode: number;
65
- /** Parsed JSON output if --output json was used. */
66
- readonly json?: unknown | undefined;
67
- readonly stderr: string;
68
- readonly stdout: string;
69
- }
70
- /** Options for creating an MCP harness. */
71
- export interface McpHarnessOptions extends DeriveMcpToolsOptions {
72
- readonly extra?: Partial<McpExtra> | undefined;
73
- readonly graph: Topo;
74
- }
75
- /** A test harness for MCP tools. */
76
- export interface McpHarness {
77
- /** Call an MCP tool by name with arguments. */
78
- callTool(name: string, args: Record<string, unknown>): Promise<McpHarnessResult>;
79
- }
80
- /** The result of an MCP harness tool invocation. */
81
- export interface McpHarnessResult {
82
- readonly content: unknown;
83
- readonly isError: boolean;
84
- }
85
- export interface TestAllEstablishedOptions {
86
- readonly cli?: Omit<CliHarnessOptions, 'graph'> | undefined;
87
- readonly createPermit?: ((trail: {
88
- readonly permit?: {
89
- readonly scopes: readonly string[];
90
- } | 'public' | undefined;
91
- }) => {
92
- readonly id: string;
93
- readonly scopes: readonly string[];
94
- } | undefined) | undefined;
95
- readonly ctx?: Partial<TrailContext> | undefined;
96
- readonly mcp?: Omit<McpHarnessOptions, 'graph'> | undefined;
97
- readonly resources?: Record<string, unknown> | undefined;
98
- readonly strictPermits?: boolean | undefined;
99
- }
100
- /** Marker for cross-step references in scenario inputs. */
101
- export interface RefToken {
102
- readonly __ref: true;
103
- readonly path: string;
104
- }
105
- /** A single step in a scenario. */
106
- export interface ScenarioStep {
107
- readonly cross: AnyTrail;
108
- readonly input: Record<string, unknown>;
109
- readonly as?: string | undefined;
110
- readonly expected?: unknown | undefined;
111
- readonly expectedMatch?: unknown | undefined;
112
- }
113
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Shared types for @ontrails/testing.
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}