@pgflow/dsl 0.13.3 → 0.14.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/dist/CHANGELOG.md +25 -0
- package/dist/compile-flow.d.ts.map +1 -1
- package/dist/compile-flow.js +23 -3
- package/dist/dsl.d.ts +315 -32
- package/dist/dsl.d.ts.map +1 -1
- package/dist/dsl.js +17 -3
- package/dist/example-flow.d.ts +7 -7
- package/dist/flow-shape.d.ts +19 -1
- package/dist/flow-shape.d.ts.map +1 -1
- package/dist/flow-shape.js +29 -0
- package/dist/package.json +1 -1
- package/dist/utils.d.ts +3 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +11 -11
- package/package.json +1 -1
package/dist/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @pgflow/dsl
|
|
2
2
|
|
|
3
|
+
## 0.14.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 320a106: Add conditional step execution with skip infrastructure
|
|
8
|
+
|
|
9
|
+
**New DSL Options:**
|
|
10
|
+
|
|
11
|
+
- `if` - Run step only when input contains specified pattern
|
|
12
|
+
- `ifNot` - Run step only when input does NOT contain pattern
|
|
13
|
+
- `whenUnmet` - Control behavior when condition not met (fail/skip/skip-cascade)
|
|
14
|
+
- `retriesExhausted` - Control behavior after all retries fail (fail/skip/skip-cascade)
|
|
15
|
+
|
|
16
|
+
**New Types:**
|
|
17
|
+
|
|
18
|
+
- `ContainmentPattern<T>` - Type-safe JSON containment patterns for conditions
|
|
19
|
+
- `StepMeta` - Track skippable dependencies for proper type inference
|
|
20
|
+
|
|
21
|
+
**Schema Changes:**
|
|
22
|
+
|
|
23
|
+
- New columns: required_input_pattern, forbidden_input_pattern, when_unmet, when_exhausted, skip_reason, skipped_at
|
|
24
|
+
- New step status: 'skipped'
|
|
25
|
+
- New function: cascade_skip_steps() for skip propagation
|
|
26
|
+
- FlowShape condition fields for auto-compilation drift detection
|
|
27
|
+
|
|
3
28
|
## 0.13.3
|
|
4
29
|
|
|
5
30
|
## 0.13.2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-flow.d.ts","sourceRoot":"","sources":["../src/compile-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsC,MAAM,UAAU,CAAC;AAEvE;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"compile-flow.d.ts","sourceRoot":"","sources":["../src/compile-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsC,MAAM,UAAU,CAAC;AAEvE;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAsCnD"}
|
package/dist/compile-flow.js
CHANGED
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export function compileFlow(flow) {
|
|
9
9
|
const statements = [];
|
|
10
|
+
const escapedFlowSlug = escapeSqlLiteral(flow.slug);
|
|
10
11
|
// Create the flow
|
|
11
12
|
const flowOptions = formatRuntimeOptions(flow.options);
|
|
12
|
-
statements.push(`SELECT pgflow.create_flow('${
|
|
13
|
+
statements.push(`SELECT pgflow.create_flow('${escapedFlowSlug}'${flowOptions});`);
|
|
13
14
|
// Add steps in the order they were defined
|
|
14
15
|
for (const stepSlug of flow.stepOrder) {
|
|
15
16
|
const step = flow.getStepDefinition(stepSlug);
|
|
@@ -17,7 +18,9 @@ export function compileFlow(flow) {
|
|
|
17
18
|
// Format dependencies array if it exists
|
|
18
19
|
let depsClause = '';
|
|
19
20
|
if (step.dependencies.length > 0) {
|
|
20
|
-
const depsArray = step.dependencies
|
|
21
|
+
const depsArray = step.dependencies
|
|
22
|
+
.map((dep) => `'${escapeSqlLiteral(dep)}'`)
|
|
23
|
+
.join(', ');
|
|
21
24
|
depsClause = `, ARRAY[${depsArray}]`;
|
|
22
25
|
}
|
|
23
26
|
// Add step_type parameter for map steps
|
|
@@ -25,7 +28,7 @@ export function compileFlow(flow) {
|
|
|
25
28
|
if (step.stepType === 'map') {
|
|
26
29
|
stepTypeClause = `, step_type => 'map'`;
|
|
27
30
|
}
|
|
28
|
-
statements.push(`SELECT pgflow.add_step('${
|
|
31
|
+
statements.push(`SELECT pgflow.add_step('${escapedFlowSlug}', '${escapeSqlLiteral(step.slug)}'${depsClause}${stepOptions}${stepTypeClause});`);
|
|
29
32
|
}
|
|
30
33
|
return statements;
|
|
31
34
|
}
|
|
@@ -46,5 +49,22 @@ function formatRuntimeOptions(options) {
|
|
|
46
49
|
if ('startDelay' in options && options.startDelay !== undefined) {
|
|
47
50
|
parts.push(`start_delay => ${options.startDelay}`);
|
|
48
51
|
}
|
|
52
|
+
if ('if' in options && options.if !== undefined) {
|
|
53
|
+
const jsonStr = JSON.stringify(options.if);
|
|
54
|
+
parts.push(`required_input_pattern => '${escapeSqlLiteral(jsonStr)}'`);
|
|
55
|
+
}
|
|
56
|
+
if ('ifNot' in options && options.ifNot !== undefined) {
|
|
57
|
+
const jsonStr = JSON.stringify(options.ifNot);
|
|
58
|
+
parts.push(`forbidden_input_pattern => '${escapeSqlLiteral(jsonStr)}'`);
|
|
59
|
+
}
|
|
60
|
+
if ('whenUnmet' in options && options.whenUnmet !== undefined) {
|
|
61
|
+
parts.push(`when_unmet => '${escapeSqlLiteral(options.whenUnmet)}'`);
|
|
62
|
+
}
|
|
63
|
+
if ('whenExhausted' in options && options.whenExhausted !== undefined) {
|
|
64
|
+
parts.push(`when_exhausted => '${escapeSqlLiteral(options.whenExhausted)}'`);
|
|
65
|
+
}
|
|
49
66
|
return parts.length > 0 ? `, ${parts.join(', ')}` : '';
|
|
50
67
|
}
|
|
68
|
+
function escapeSqlLiteral(value) {
|
|
69
|
+
return value.replace(/'/g, "''");
|
|
70
|
+
}
|
package/dist/dsl.d.ts
CHANGED
|
@@ -4,6 +4,18 @@ export type Json = string | number | boolean | null | Json[] | {
|
|
|
4
4
|
export type Simplify<T> = {
|
|
5
5
|
[KeyType in keyof T]: T[KeyType];
|
|
6
6
|
} & {};
|
|
7
|
+
/**
|
|
8
|
+
* ContainmentPattern<T> - Type for JSON containment (@>) patterns
|
|
9
|
+
*
|
|
10
|
+
* Matches PostgreSQL's @> containment semantics where a pattern is a
|
|
11
|
+
* recursive partial structure that the target must contain:
|
|
12
|
+
* - Primitives: exact value match
|
|
13
|
+
* - Objects: all keys optional, recursively applied
|
|
14
|
+
* - Arrays: elements expected to be present in target array
|
|
15
|
+
*/
|
|
16
|
+
export type ContainmentPattern<T> = T extends readonly (infer U)[] ? ContainmentPattern<U>[] : T extends object ? {
|
|
17
|
+
[K in keyof T]?: ContainmentPattern<T[K]>;
|
|
18
|
+
} : T;
|
|
7
19
|
type AwaitedReturn<T> = T extends (...args: any[]) => Promise<infer R> ? R : T extends (...args: any[]) => infer R ? R : never;
|
|
8
20
|
export interface Env {
|
|
9
21
|
[key: string]: string | undefined;
|
|
@@ -13,8 +25,13 @@ export interface UserEnv extends Env {
|
|
|
13
25
|
}
|
|
14
26
|
export type AnyInput = Json;
|
|
15
27
|
export type AnyOutput = Json;
|
|
28
|
+
export type SkippableMode = 'skip' | 'skip-cascade' | false;
|
|
29
|
+
export interface StepMeta<TOutput = AnyOutput, TSkippable extends SkippableMode = SkippableMode> {
|
|
30
|
+
output: TOutput;
|
|
31
|
+
skippable: TSkippable;
|
|
32
|
+
}
|
|
16
33
|
export type EmptySteps = Record<never, never>;
|
|
17
|
-
export type AnySteps = Record<string,
|
|
34
|
+
export type AnySteps = Record<string, StepMeta>;
|
|
18
35
|
export type EmptyDeps = Record<never, never[]>;
|
|
19
36
|
export type DefaultDeps = Record<string, string[]>;
|
|
20
37
|
export type AnyDeps = Record<string, string[]>;
|
|
@@ -48,10 +65,17 @@ export type ExtractFlowOutput<TFlow extends AnyFlow> = TFlow extends Flow<infer
|
|
|
48
65
|
[K in keyof ExtractFlowLeafSteps<TFlow> as K extends string ? K : never]: StepOutput<TFlow, K & string>;
|
|
49
66
|
} : never;
|
|
50
67
|
/**
|
|
51
|
-
* Extracts the steps type from a Flow
|
|
68
|
+
* Extracts the steps type from a Flow (unwraps StepMeta to just output types)
|
|
69
|
+
* @template TFlow - The Flow type to extract from
|
|
70
|
+
*/
|
|
71
|
+
export type ExtractFlowSteps<TFlow extends AnyFlow> = TFlow extends Flow<infer _TI, infer _TC, infer TS, infer _TD, infer _TEnv> ? {
|
|
72
|
+
[K in keyof TS]: TS[K]['output'];
|
|
73
|
+
} : never;
|
|
74
|
+
/**
|
|
75
|
+
* Extracts the raw steps type from a Flow (includes StepMeta structure with skippable info)
|
|
52
76
|
* @template TFlow - The Flow type to extract from
|
|
53
77
|
*/
|
|
54
|
-
export type
|
|
78
|
+
export type ExtractFlowStepsRaw<TFlow extends AnyFlow> = TFlow extends Flow<infer _TI, infer _TC, infer TS, infer _TD, infer _TEnv> ? TS : never;
|
|
55
79
|
/**
|
|
56
80
|
* Extracts the dependencies type from a Flow
|
|
57
81
|
* @template TFlow - The Flow type to extract from
|
|
@@ -91,7 +115,7 @@ export type ExtractFlowContext<TFlow extends AnyFlow> = TFlow extends Flow<infer
|
|
|
91
115
|
* }
|
|
92
116
|
* ```
|
|
93
117
|
*/
|
|
94
|
-
export type CompatibleFlow<F extends AnyFlow, PlatformResources extends Record<string, unknown>, UserResources extends Record<string, unknown> = Record<string, never>> =
|
|
118
|
+
export type CompatibleFlow<F extends AnyFlow, PlatformResources extends Record<string, unknown>, UserResources extends Record<string, unknown> = Record<string, never>> = FlowContext<ExtractFlowEnv<F>> & PlatformResources & UserResources extends ExtractFlowContext<F> ? F : never;
|
|
95
119
|
/**
|
|
96
120
|
* Extracts the dependencies type from a Flow
|
|
97
121
|
* @template TFlow - The Flow type to extract from
|
|
@@ -99,23 +123,43 @@ export type CompatibleFlow<F extends AnyFlow, PlatformResources extends Record<s
|
|
|
99
123
|
type StepDepsOf<TFlow extends AnyFlow, TStepSlug extends string> = TStepSlug extends keyof ExtractFlowDeps<TFlow> ? ExtractFlowDeps<TFlow>[TStepSlug][number] : never;
|
|
100
124
|
/**
|
|
101
125
|
* Extracts only the leaf steps from a Flow (steps that are not dependencies of any other steps)
|
|
126
|
+
* Returns the output types, not the full StepMeta structure
|
|
102
127
|
* @template TFlow - The Flow type to extract from
|
|
103
128
|
*/
|
|
104
129
|
export type ExtractFlowLeafSteps<TFlow extends AnyFlow> = {
|
|
105
130
|
[K in keyof ExtractFlowSteps<TFlow> as K extends string ? K extends ExtractFlowDeps<TFlow>[keyof ExtractFlowDeps<TFlow>][number] ? never : K : never]: ExtractFlowSteps<TFlow>[K];
|
|
106
131
|
};
|
|
107
132
|
export type StepOutput<TFlow extends AnyFlow, TStepSlug extends string> = TStepSlug extends keyof ExtractFlowSteps<TFlow> ? ExtractFlowSteps<TFlow>[TStepSlug] : never;
|
|
133
|
+
/**
|
|
134
|
+
* Gets the skippable mode for a step ('skip' | 'skip-cascade' | false)
|
|
135
|
+
* @template TFlow - The Flow type
|
|
136
|
+
* @template TStepSlug - The step slug to check
|
|
137
|
+
*/
|
|
138
|
+
export type GetSkippableMode<TFlow extends AnyFlow, TStepSlug extends string> = TStepSlug extends keyof ExtractFlowStepsRaw<TFlow> ? ExtractFlowStepsRaw<TFlow>[TStepSlug]['skippable'] : false;
|
|
139
|
+
/**
|
|
140
|
+
* Checks if a step makes its dependents' deps optional (only 'skip' mode, not 'skip-cascade')
|
|
141
|
+
* With 'skip-cascade', dependents are also skipped at runtime, so if handler runs, dep succeeded.
|
|
142
|
+
*/
|
|
143
|
+
export type IsStepSkippable<TFlow extends AnyFlow, TStepSlug extends string> = GetSkippableMode<TFlow, TStepSlug> extends 'skip' ? true : false;
|
|
144
|
+
type RequiredDeps<TFlow extends AnyFlow, TStepSlug extends string> = {
|
|
145
|
+
[K in Extract<keyof ExtractFlowSteps<TFlow>, StepDepsOf<TFlow, TStepSlug>> as GetSkippableMode<TFlow, K & string> extends 'skip' ? never : K]: ExtractFlowSteps<TFlow>[K];
|
|
146
|
+
};
|
|
147
|
+
type OptionalDeps<TFlow extends AnyFlow, TStepSlug extends string> = {
|
|
148
|
+
[K in Extract<keyof ExtractFlowSteps<TFlow>, StepDepsOf<TFlow, TStepSlug>> as GetSkippableMode<TFlow, K & string> extends 'skip' ? K : never]?: ExtractFlowSteps<TFlow>[K];
|
|
149
|
+
};
|
|
108
150
|
/**
|
|
109
151
|
* Asymmetric step input type:
|
|
110
152
|
* - Root steps (no dependencies): receive flow input directly
|
|
111
153
|
* - Dependent steps: receive only their dependencies (flow input available via context)
|
|
154
|
+
* - Skippable deps (whenUnmet/whenExhausted: 'skip') are optional
|
|
155
|
+
* - Cascade deps (whenUnmet/whenExhausted: 'skip-cascade') are required
|
|
156
|
+
* (because if handler runs, the dependency must have succeeded)
|
|
157
|
+
* - All other deps are required
|
|
112
158
|
*
|
|
113
159
|
* This enables functional composition where subflows can receive typed inputs
|
|
114
160
|
* without the 'run' wrapper that previously blocked type matching.
|
|
115
161
|
*/
|
|
116
|
-
export type StepInput<TFlow extends AnyFlow, TStepSlug extends string> = StepDepsOf<TFlow, TStepSlug> extends never ? ExtractFlowInput<TFlow> :
|
|
117
|
-
[K in Extract<keyof ExtractFlowSteps<TFlow>, StepDepsOf<TFlow, TStepSlug>>]: ExtractFlowSteps<TFlow>[K];
|
|
118
|
-
};
|
|
162
|
+
export type StepInput<TFlow extends AnyFlow, TStepSlug extends string> = StepDepsOf<TFlow, TStepSlug> extends never ? ExtractFlowInput<TFlow> : Simplify<RequiredDeps<TFlow, TStepSlug> & OptionalDeps<TFlow, TStepSlug>>;
|
|
119
163
|
export interface RuntimeOptions {
|
|
120
164
|
maxAttempts?: number;
|
|
121
165
|
baseDelay?: number;
|
|
@@ -160,9 +204,171 @@ export interface FlowContext<TEnv extends Env = Env, TFlowInput extends AnyInput
|
|
|
160
204
|
flowInput: Promise<TFlowInput>;
|
|
161
205
|
}
|
|
162
206
|
export type Context<T extends Record<string, unknown> = Record<string, never>, TEnv extends Env = Env> = FlowContext<TEnv> & T;
|
|
207
|
+
/**
|
|
208
|
+
* Options for handling unmet conditions (when 'if' pattern doesn't match input)
|
|
209
|
+
*
|
|
210
|
+
* @example
|
|
211
|
+
* // Fail the step (and run) when pattern doesn't match
|
|
212
|
+
* { if: { enabled: true }, whenUnmet: 'fail' }
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* // Skip this step only when pattern doesn't match
|
|
216
|
+
* { if: { enabled: true }, whenUnmet: 'skip' }
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* // Skip this step and all dependents when pattern doesn't match
|
|
220
|
+
* { if: { enabled: true }, whenUnmet: 'skip-cascade' }
|
|
221
|
+
*
|
|
222
|
+
* @remarks
|
|
223
|
+
* - `'fail'`: When pattern doesn't match, step fails -> run fails (default)
|
|
224
|
+
* - `'skip'`: When pattern doesn't match, skip step and continue (step key omitted from dependent inputs)
|
|
225
|
+
* - `'skip-cascade'`: When pattern doesn't match, skip step + mark all dependents as skipped
|
|
226
|
+
*/
|
|
227
|
+
export type WhenUnmetMode = 'fail' | 'skip' | 'skip-cascade';
|
|
228
|
+
/**
|
|
229
|
+
* Options for handling errors after all retries are exhausted
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* // Fail the run after retries exhausted (default)
|
|
233
|
+
* { whenExhausted: 'fail' }
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* // Skip this step after retries exhausted, continue run
|
|
237
|
+
* { whenExhausted: 'skip' }
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* // Skip this step and all dependents after retries exhausted
|
|
241
|
+
* { whenExhausted: 'skip-cascade' }
|
|
242
|
+
*
|
|
243
|
+
* @remarks
|
|
244
|
+
* - `'fail'`: Step fails -> run fails (default behavior)
|
|
245
|
+
* - `'skip'`: Mark step as skipped, continue run (step key omitted from dependent inputs)
|
|
246
|
+
* - `'skip-cascade'`: Skip step + mark all dependents as skipped too
|
|
247
|
+
*
|
|
248
|
+
* @note
|
|
249
|
+
* TYPE_VIOLATION errors (e.g., single step returns non-array for map dependent)
|
|
250
|
+
* are NOT subject to whenExhausted - these always hard fail as they indicate
|
|
251
|
+
* programming errors, not runtime conditions.
|
|
252
|
+
*/
|
|
253
|
+
export type WhenExhaustedMode = 'fail' | 'skip' | 'skip-cascade';
|
|
254
|
+
/**
|
|
255
|
+
* Helper type for dependent step handlers - creates deps object with correct optionality.
|
|
256
|
+
* Only steps with 'skip' mode (not 'skip-cascade') make deps optional.
|
|
257
|
+
* With 'skip-cascade', dependents are also skipped at runtime, so if handler runs, dep succeeded.
|
|
258
|
+
*/
|
|
259
|
+
type DepsWithOptionalSkippable<TSteps extends AnySteps, TDeps extends string> = {
|
|
260
|
+
[K in TDeps as K extends keyof TSteps ? TSteps[K]['skippable'] extends 'skip' ? never : K : K]: K extends keyof TSteps ? TSteps[K]['output'] : never;
|
|
261
|
+
} & {
|
|
262
|
+
[K in TDeps as K extends keyof TSteps ? TSteps[K]['skippable'] extends 'skip' ? K : never : never]?: K extends keyof TSteps ? TSteps[K]['output'] : never;
|
|
263
|
+
};
|
|
163
264
|
export interface StepRuntimeOptions extends RuntimeOptions {
|
|
164
265
|
startDelay?: number;
|
|
266
|
+
/**
|
|
267
|
+
* Pattern to match using PostgreSQL's @> (contains) operator
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* // Root step: match against flow input
|
|
271
|
+
* { if: { role: 'admin', active: true } }
|
|
272
|
+
*
|
|
273
|
+
* @example
|
|
274
|
+
* // Dependent step: match against dependency outputs
|
|
275
|
+
* { if: { prevStep: { status: 'success' } } }
|
|
276
|
+
*
|
|
277
|
+
* @remarks
|
|
278
|
+
* - Primitives: exact value match
|
|
279
|
+
* - Objects: all keys optional, recursively applied
|
|
280
|
+
* - Arrays: elements expected to be present in target array
|
|
281
|
+
*
|
|
282
|
+
* @see WhenUnmetMode for controlling what happens when pattern doesn't match
|
|
283
|
+
*/
|
|
284
|
+
if?: Json;
|
|
285
|
+
/**
|
|
286
|
+
* Negative pattern - step executes when input does NOT match this pattern
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* // Root step: execute when NOT an admin
|
|
290
|
+
* { ifNot: { role: 'admin' } }
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* // Combined with 'if' for AND semantics: "active admin who is NOT suspended"
|
|
294
|
+
* { if: { role: 'admin', active: true }, ifNot: { suspended: true } }
|
|
295
|
+
*
|
|
296
|
+
* @remarks
|
|
297
|
+
* - Uses PostgreSQL's @> containment check, negated
|
|
298
|
+
* - When combined with 'if', BOTH must pass (AND semantics)
|
|
299
|
+
* - For mutual exclusion: use same pattern with if on one step, ifNot on another
|
|
300
|
+
*
|
|
301
|
+
* @see WhenUnmetMode for controlling what happens when condition not met
|
|
302
|
+
*/
|
|
303
|
+
ifNot?: Json;
|
|
304
|
+
/**
|
|
305
|
+
* What to do when the 'if' pattern doesn't match the input
|
|
306
|
+
*
|
|
307
|
+
* @default 'skip'
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* { whenUnmet: 'fail' } // Pattern doesn't match -> step fails -> run fails
|
|
311
|
+
* { whenUnmet: 'skip' } // Pattern doesn't match -> skip step, continue run
|
|
312
|
+
* { whenUnmet: 'skip-cascade' } // Pattern doesn't match -> skip step + all dependents
|
|
313
|
+
*
|
|
314
|
+
* @see WhenUnmetMode for detailed documentation of each mode
|
|
315
|
+
*/
|
|
316
|
+
whenUnmet?: WhenUnmetMode;
|
|
317
|
+
/**
|
|
318
|
+
* What to do when handler throws an error after all retries are exhausted
|
|
319
|
+
*
|
|
320
|
+
* @default 'fail'
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* { whenExhausted: 'fail' } // Step fails -> run fails
|
|
324
|
+
* { whenExhausted: 'skip' } // Skip step, continue run
|
|
325
|
+
* { whenExhausted: 'skip-cascade' } // Skip step + all dependents
|
|
326
|
+
*
|
|
327
|
+
* @remarks
|
|
328
|
+
* Only applies after maxAttempts retries are exhausted.
|
|
329
|
+
* TYPE_VIOLATION errors always fail regardless of this setting.
|
|
330
|
+
*
|
|
331
|
+
* @see WhenExhaustedMode for detailed documentation of each mode
|
|
332
|
+
*/
|
|
333
|
+
whenExhausted?: WhenExhaustedMode;
|
|
334
|
+
}
|
|
335
|
+
interface BaseStepRuntimeOptions extends RuntimeOptions {
|
|
336
|
+
startDelay?: number;
|
|
337
|
+
whenExhausted?: WhenExhaustedMode;
|
|
165
338
|
}
|
|
339
|
+
/**
|
|
340
|
+
* Condition with 'if' required (ifNot optional) - allows whenUnmet.
|
|
341
|
+
* whenUnmet only makes sense when there's a condition to be "unmet".
|
|
342
|
+
*/
|
|
343
|
+
type WithIfCondition<T> = {
|
|
344
|
+
if: ContainmentPattern<T>;
|
|
345
|
+
ifNot?: ContainmentPattern<T>;
|
|
346
|
+
whenUnmet?: WhenUnmetMode;
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* Condition with 'ifNot' required (if optional) - allows whenUnmet.
|
|
350
|
+
*/
|
|
351
|
+
type WithIfNotCondition<T> = {
|
|
352
|
+
if?: ContainmentPattern<T>;
|
|
353
|
+
ifNot: ContainmentPattern<T>;
|
|
354
|
+
whenUnmet?: WhenUnmetMode;
|
|
355
|
+
};
|
|
356
|
+
/**
|
|
357
|
+
* No condition - if, ifNot, and whenUnmet are all forbidden.
|
|
358
|
+
* This ensures whenUnmet can only be used with a condition.
|
|
359
|
+
*/
|
|
360
|
+
type WithoutCondition = {
|
|
361
|
+
if?: never;
|
|
362
|
+
ifNot?: never;
|
|
363
|
+
whenUnmet?: never;
|
|
364
|
+
};
|
|
365
|
+
/**
|
|
366
|
+
* Discriminated union for condition options.
|
|
367
|
+
* whenUnmet is only allowed when if or ifNot is provided.
|
|
368
|
+
*/
|
|
369
|
+
type ConditionOpts<T> = WithIfCondition<T> | WithIfNotCondition<T> | WithoutCondition;
|
|
370
|
+
export type RootStepOptions<TFlowInput> = BaseStepRuntimeOptions & ConditionOpts<TFlowInput>;
|
|
371
|
+
export type DependentStepOptions<TDeps> = BaseStepRuntimeOptions & ConditionOpts<TDeps>;
|
|
166
372
|
export interface StepDefinition<TInput extends AnyInput, TOutput extends AnyOutput, TContext = FlowContext> {
|
|
167
373
|
slug: string;
|
|
168
374
|
handler: (input: TInput, context: TContext) => TOutput | Promise<TOutput>;
|
|
@@ -192,28 +398,83 @@ Steps extends AnySteps = EmptySteps, StepDependencies extends AnyDeps = EmptyDep
|
|
|
192
398
|
* Returns the step definition with asymmetric input typing:
|
|
193
399
|
* - Root steps (no dependencies): input is flowInput directly
|
|
194
400
|
* - Dependent steps: input is deps object only (flowInput available via context)
|
|
401
|
+
* - Skippable deps are optional, required deps are required
|
|
195
402
|
*
|
|
196
403
|
* @throws Error if the step with the given slug doesn't exist
|
|
197
404
|
*/
|
|
198
405
|
getStepDefinition<SlugType extends keyof Steps & keyof StepDependencies>(slug: SlugType): StepDefinition<StepDependencies[SlugType] extends [] | readonly [] ? TFlowInput : Simplify<{
|
|
199
|
-
[K in StepDependencies[SlugType][number]]: K extends keyof Steps ? Steps[K] : never;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
step
|
|
406
|
+
[K in StepDependencies[SlugType][number] as K extends keyof Steps ? Steps[K]['skippable'] extends 'skip' ? never : K : never]: K extends keyof Steps ? Steps[K]['output'] : never;
|
|
407
|
+
} & {
|
|
408
|
+
[K in StepDependencies[SlugType][number] as K extends keyof Steps ? Steps[K]['skippable'] extends 'skip' ? K : never : never]?: K extends keyof Steps ? Steps[K]['output'] : never;
|
|
409
|
+
}>, // Dependent step: only deps (skippable deps optional)
|
|
410
|
+
Steps[SlugType]['output'], FlowContext<TEnv, TFlowInput> & TContext>;
|
|
411
|
+
step<Slug extends string, TOutput, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
412
|
+
slug: Slug extends keyof Steps ? never : Slug;
|
|
413
|
+
dependsOn?: never;
|
|
414
|
+
whenExhausted?: TRetries;
|
|
415
|
+
} & WithoutCondition & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (flowInput: TFlowInput, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
416
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
417
|
+
}, StepDependencies & {
|
|
418
|
+
[K in Slug]: [];
|
|
419
|
+
}, TEnv>;
|
|
420
|
+
step<Slug extends string, TOutput, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
203
421
|
slug: Slug extends keyof Steps ? never : Slug;
|
|
204
422
|
dependsOn?: never;
|
|
205
|
-
|
|
206
|
-
|
|
423
|
+
whenExhausted?: TRetries;
|
|
424
|
+
} & ((WithIfCondition<TFlowInput> & {
|
|
425
|
+
whenUnmet?: undefined;
|
|
426
|
+
}) | (WithIfNotCondition<TFlowInput> & {
|
|
427
|
+
whenUnmet?: undefined;
|
|
428
|
+
})) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (flowInput: TFlowInput, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
429
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, 'skip'>;
|
|
207
430
|
}, StepDependencies & {
|
|
208
431
|
[K in Slug]: [];
|
|
209
432
|
}, TEnv>;
|
|
210
|
-
step<Slug extends string,
|
|
433
|
+
step<Slug extends string, TOutput, TWhenUnmet extends WhenUnmetMode, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
434
|
+
slug: Slug extends keyof Steps ? never : Slug;
|
|
435
|
+
dependsOn?: never;
|
|
436
|
+
whenExhausted?: TRetries;
|
|
437
|
+
} & ((WithIfCondition<TFlowInput> & {
|
|
438
|
+
whenUnmet: TWhenUnmet;
|
|
439
|
+
}) | (WithIfNotCondition<TFlowInput> & {
|
|
440
|
+
whenUnmet: TWhenUnmet;
|
|
441
|
+
})) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (flowInput: TFlowInput, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
442
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, TWhenUnmet extends 'skip' | 'skip-cascade' ? TWhenUnmet : TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
443
|
+
}, StepDependencies & {
|
|
444
|
+
[K in Slug]: [];
|
|
445
|
+
}, TEnv>;
|
|
446
|
+
step<Slug extends string, Deps extends Extract<keyof Steps, string>, TOutput, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
447
|
+
slug: Slug extends keyof Steps ? never : Slug;
|
|
448
|
+
dependsOn: [Deps, ...Deps[]];
|
|
449
|
+
whenExhausted?: TRetries;
|
|
450
|
+
} & WithoutCondition & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (deps: Simplify<DepsWithOptionalSkippable<Steps, Deps>>, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
451
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
452
|
+
}, StepDependencies & {
|
|
453
|
+
[K in Slug]: Deps[];
|
|
454
|
+
}, TEnv>;
|
|
455
|
+
step<Slug extends string, Deps extends Extract<keyof Steps, string>, TOutput, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
456
|
+
slug: Slug extends keyof Steps ? never : Slug;
|
|
457
|
+
dependsOn: [Deps, ...Deps[]];
|
|
458
|
+
whenExhausted?: TRetries;
|
|
459
|
+
} & ((WithIfCondition<Simplify<DepsWithOptionalSkippable<Steps, Deps>>> & {
|
|
460
|
+
whenUnmet?: undefined;
|
|
461
|
+
}) | (WithIfNotCondition<Simplify<DepsWithOptionalSkippable<Steps, Deps>>> & {
|
|
462
|
+
whenUnmet?: undefined;
|
|
463
|
+
})) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (deps: Simplify<DepsWithOptionalSkippable<Steps, Deps>>, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
464
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, 'skip'>;
|
|
465
|
+
}, StepDependencies & {
|
|
466
|
+
[K in Slug]: Deps[];
|
|
467
|
+
}, TEnv>;
|
|
468
|
+
step<Slug extends string, Deps extends Extract<keyof Steps, string>, TOutput, TWhenUnmet extends WhenUnmetMode, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
211
469
|
slug: Slug extends keyof Steps ? never : Slug;
|
|
212
470
|
dependsOn: [Deps, ...Deps[]];
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
471
|
+
whenExhausted?: TRetries;
|
|
472
|
+
} & ((WithIfCondition<Simplify<DepsWithOptionalSkippable<Steps, Deps>>> & {
|
|
473
|
+
whenUnmet: TWhenUnmet;
|
|
474
|
+
}) | (WithIfNotCondition<Simplify<DepsWithOptionalSkippable<Steps, Deps>>> & {
|
|
475
|
+
whenUnmet: TWhenUnmet;
|
|
476
|
+
})) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (deps: Simplify<DepsWithOptionalSkippable<Steps, Deps>>, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
477
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, TWhenUnmet extends 'skip' | 'skip-cascade' ? TWhenUnmet : TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
217
478
|
}, StepDependencies & {
|
|
218
479
|
[K in Slug]: Deps[];
|
|
219
480
|
}, TEnv>;
|
|
@@ -230,21 +491,29 @@ Steps extends AnySteps = EmptySteps, StepDependencies extends AnyDeps = EmptyDep
|
|
|
230
491
|
* @param handler - Function that processes input and returns an array (null/undefined rejected)
|
|
231
492
|
* @returns A new Flow instance with the array step added
|
|
232
493
|
*/
|
|
233
|
-
array<Slug extends string, TOutput extends readonly any[]>(opts: Simplify<{
|
|
494
|
+
array<Slug extends string, TOutput extends readonly any[], TWhenUnmet extends WhenUnmetMode | undefined = undefined, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
234
495
|
slug: Slug extends keyof Steps ? never : Slug;
|
|
235
496
|
dependsOn?: never;
|
|
236
|
-
|
|
237
|
-
|
|
497
|
+
whenExhausted?: TRetries;
|
|
498
|
+
} & ((WithIfCondition<TFlowInput> & {
|
|
499
|
+
whenUnmet?: TWhenUnmet;
|
|
500
|
+
}) | (WithIfNotCondition<TFlowInput> & {
|
|
501
|
+
whenUnmet?: TWhenUnmet;
|
|
502
|
+
}) | WithoutCondition) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (flowInput: TFlowInput, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
503
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, TWhenUnmet extends 'skip' | 'skip-cascade' ? TWhenUnmet : TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
238
504
|
}, StepDependencies & {
|
|
239
505
|
[K in Slug]: [];
|
|
240
506
|
}, TEnv>;
|
|
241
|
-
array<Slug extends string, Deps extends Extract<keyof Steps, string>, TOutput extends readonly any[]>(opts: Simplify<{
|
|
507
|
+
array<Slug extends string, Deps extends Extract<keyof Steps, string>, TOutput extends readonly any[], TWhenUnmet extends WhenUnmetMode | undefined = undefined, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
242
508
|
slug: Slug extends keyof Steps ? never : Slug;
|
|
243
509
|
dependsOn: [Deps, ...Deps[]];
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
510
|
+
whenExhausted?: TRetries;
|
|
511
|
+
} & ((WithIfCondition<Simplify<DepsWithOptionalSkippable<Steps, Deps>>> & {
|
|
512
|
+
whenUnmet?: TWhenUnmet;
|
|
513
|
+
}) | (WithIfNotCondition<Simplify<DepsWithOptionalSkippable<Steps, Deps>>> & {
|
|
514
|
+
whenUnmet?: TWhenUnmet;
|
|
515
|
+
}) | WithoutCondition) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: (deps: Simplify<DepsWithOptionalSkippable<Steps, Deps>>, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
|
|
516
|
+
[K in Slug]: StepMeta<Awaited<TOutput>, TWhenUnmet extends 'skip' | 'skip-cascade' ? TWhenUnmet : TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
248
517
|
}, StepDependencies & {
|
|
249
518
|
[K in Slug]: Deps[];
|
|
250
519
|
}, TEnv>;
|
|
@@ -259,18 +528,32 @@ Steps extends AnySteps = EmptySteps, StepDependencies extends AnyDeps = EmptyDep
|
|
|
259
528
|
* @param handler - Function that processes individual array elements
|
|
260
529
|
* @returns A new Flow instance with the map step added
|
|
261
530
|
*/
|
|
262
|
-
map<Slug extends string, THandler extends TFlowInput extends readonly (infer Item)[] ? (item: Item, context: FlowContext<TEnv, TFlowInput> & TContext) => Json | Promise<Json> : never>(opts: Simplify<{
|
|
531
|
+
map<Slug extends string, THandler extends TFlowInput extends readonly (infer Item)[] ? (item: Item, context: FlowContext<TEnv, TFlowInput> & TContext) => Json | Promise<Json> : never, TWhenUnmet extends WhenUnmetMode | undefined = undefined, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
263
532
|
slug: Slug extends keyof Steps ? never : Slug;
|
|
264
|
-
|
|
265
|
-
|
|
533
|
+
whenExhausted?: TRetries;
|
|
534
|
+
} & ((WithIfCondition<TFlowInput> & {
|
|
535
|
+
whenUnmet?: TWhenUnmet;
|
|
536
|
+
}) | (WithIfNotCondition<TFlowInput> & {
|
|
537
|
+
whenUnmet?: TWhenUnmet;
|
|
538
|
+
}) | WithoutCondition) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: THandler): Flow<TFlowInput, TContext, Steps & {
|
|
539
|
+
[K in Slug]: StepMeta<AwaitedReturn<THandler>[], TWhenUnmet extends 'skip' | 'skip-cascade' ? TWhenUnmet : TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
266
540
|
}, StepDependencies & {
|
|
267
541
|
[K in Slug]: [];
|
|
268
542
|
}, TEnv>;
|
|
269
|
-
map<Slug extends string, TArrayDep extends Extract<keyof Steps, string>, THandler extends Steps[TArrayDep] extends readonly (infer Item)[] ? (item: Item, context: FlowContext<TEnv, TFlowInput> & TContext) => Json | Promise<Json> : never>(opts: Simplify<{
|
|
543
|
+
map<Slug extends string, TArrayDep extends Extract<keyof Steps, string>, THandler extends Steps[TArrayDep]['output'] extends readonly (infer Item)[] ? (item: Item, context: FlowContext<TEnv, TFlowInput> & TContext) => Json | Promise<Json> : never, TWhenUnmet extends WhenUnmetMode | undefined = undefined, TRetries extends WhenExhaustedMode | undefined = undefined>(opts: Simplify<{
|
|
270
544
|
slug: Slug extends keyof Steps ? never : Slug;
|
|
271
545
|
array: TArrayDep;
|
|
272
|
-
|
|
273
|
-
|
|
546
|
+
whenExhausted?: TRetries;
|
|
547
|
+
} & ((WithIfCondition<{
|
|
548
|
+
[K in TArrayDep]: Steps[K]['output'];
|
|
549
|
+
}> & {
|
|
550
|
+
whenUnmet?: TWhenUnmet;
|
|
551
|
+
}) | (WithIfNotCondition<{
|
|
552
|
+
[K in TArrayDep]: Steps[K]['output'];
|
|
553
|
+
}> & {
|
|
554
|
+
whenUnmet?: TWhenUnmet;
|
|
555
|
+
}) | WithoutCondition) & Omit<BaseStepRuntimeOptions, 'whenExhausted'>>, handler: THandler): Flow<TFlowInput, TContext, Steps & {
|
|
556
|
+
[K in Slug]: StepMeta<AwaitedReturn<THandler>[], TWhenUnmet extends 'skip' | 'skip-cascade' ? TWhenUnmet : TRetries extends 'skip' | 'skip-cascade' ? TRetries : false>;
|
|
274
557
|
}, StepDependencies & {
|
|
275
558
|
[K in Slug]: [TArrayDep];
|
|
276
559
|
}, TEnv>;
|
package/dist/dsl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsl.d.ts","sourceRoot":"","sources":["../src/dsl.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dsl.d.ts","sourceRoot":"","sources":["../src/dsl.ts"],"names":[],"mappings":"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"}
|
package/dist/dsl.js
CHANGED
|
@@ -31,6 +31,7 @@ export class Flow {
|
|
|
31
31
|
* Returns the step definition with asymmetric input typing:
|
|
32
32
|
* - Root steps (no dependencies): input is flowInput directly
|
|
33
33
|
* - Dependent steps: input is deps object only (flowInput available via context)
|
|
34
|
+
* - Skippable deps are optional, required deps are required
|
|
34
35
|
*
|
|
35
36
|
* @throws Error if the step with the given slug doesn't exist
|
|
36
37
|
*/
|
|
@@ -39,9 +40,6 @@ export class Flow {
|
|
|
39
40
|
if (!(slug in this.stepDefinitions)) {
|
|
40
41
|
throw new Error(`Step "${String(slug)}" does not exist in flow "${this.slug}"`);
|
|
41
42
|
}
|
|
42
|
-
// Use a type assertion directive to tell TypeScript that this is safe
|
|
43
|
-
// @ts-expect-error The type system cannot track that this.stepDefinitions[slug] has the correct type
|
|
44
|
-
// but we know it's safe because we only add steps through the strongly-typed `step` method
|
|
45
43
|
return this.stepDefinitions[slug];
|
|
46
44
|
}
|
|
47
45
|
// Implementation (type safety enforced by overloads above)
|
|
@@ -71,6 +69,14 @@ export class Flow {
|
|
|
71
69
|
options.timeout = opts.timeout;
|
|
72
70
|
if (opts.startDelay !== undefined)
|
|
73
71
|
options.startDelay = opts.startDelay;
|
|
72
|
+
if (opts.if !== undefined)
|
|
73
|
+
options.if = opts.if;
|
|
74
|
+
if (opts.ifNot !== undefined)
|
|
75
|
+
options.ifNot = opts.ifNot;
|
|
76
|
+
if (opts.whenUnmet !== undefined)
|
|
77
|
+
options.whenUnmet = opts.whenUnmet;
|
|
78
|
+
if (opts.whenExhausted !== undefined)
|
|
79
|
+
options.whenExhausted = opts.whenExhausted;
|
|
74
80
|
// Validate runtime options (optional for step level)
|
|
75
81
|
validateRuntimeOptions(options, { optional: true });
|
|
76
82
|
// Create step definition (type assertions needed due to complex generic constraints)
|
|
@@ -127,6 +133,14 @@ export class Flow {
|
|
|
127
133
|
options.timeout = opts.timeout;
|
|
128
134
|
if (opts.startDelay !== undefined)
|
|
129
135
|
options.startDelay = opts.startDelay;
|
|
136
|
+
if (opts.if !== undefined)
|
|
137
|
+
options.if = opts.if;
|
|
138
|
+
if (opts.ifNot !== undefined)
|
|
139
|
+
options.ifNot = opts.ifNot;
|
|
140
|
+
if (opts.whenUnmet !== undefined)
|
|
141
|
+
options.whenUnmet = opts.whenUnmet;
|
|
142
|
+
if (opts.whenExhausted !== undefined)
|
|
143
|
+
options.whenExhausted = opts.whenExhausted;
|
|
130
144
|
// Validate runtime options
|
|
131
145
|
validateRuntimeOptions(options, { optional: true });
|
|
132
146
|
// Create the map step definition with stepType
|
package/dist/example-flow.d.ts
CHANGED
|
@@ -3,19 +3,19 @@ type Input = {
|
|
|
3
3
|
url: string;
|
|
4
4
|
};
|
|
5
5
|
export declare const AnalyzeWebsite: Flow<Input, {}, import("./dsl.js").EmptySteps & {
|
|
6
|
-
website: {
|
|
6
|
+
website: import("./dsl.js").StepMeta<{
|
|
7
7
|
content: string;
|
|
8
|
-
}
|
|
8
|
+
}, false>;
|
|
9
9
|
} & {
|
|
10
|
-
sentiment: {
|
|
10
|
+
sentiment: import("./dsl.js").StepMeta<{
|
|
11
11
|
score: number;
|
|
12
|
-
}
|
|
12
|
+
}, false>;
|
|
13
13
|
} & {
|
|
14
|
-
summary: {
|
|
14
|
+
summary: import("./dsl.js").StepMeta<{
|
|
15
15
|
aiSummary: string;
|
|
16
|
-
}
|
|
16
|
+
}, false>;
|
|
17
17
|
} & {
|
|
18
|
-
saveToDb: string
|
|
18
|
+
saveToDb: import("./dsl.js").StepMeta<string, false>;
|
|
19
19
|
}, import("./dsl.js").EmptyDeps & {
|
|
20
20
|
website: [];
|
|
21
21
|
} & {
|
package/dist/flow-shape.d.ts
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
import { AnyFlow } from './dsl.js';
|
|
1
|
+
import { AnyFlow, WhenUnmetMode, WhenExhaustedMode, Json } from './dsl.js';
|
|
2
|
+
/**
|
|
3
|
+
* Input pattern wrapper - explicit representation to avoid null vs JSON-null ambiguity.
|
|
4
|
+
* - { defined: false } means no pattern (don't check)
|
|
5
|
+
* - { defined: true, value: Json } means pattern is set (check against value)
|
|
6
|
+
*/
|
|
7
|
+
export type InputPattern = {
|
|
8
|
+
defined: false;
|
|
9
|
+
} | {
|
|
10
|
+
defined: true;
|
|
11
|
+
value: Json;
|
|
12
|
+
};
|
|
2
13
|
/**
|
|
3
14
|
* Step-level options that can be included in the shape for creation,
|
|
4
15
|
* but are NOT compared during shape comparison (runtime tunable).
|
|
@@ -24,11 +35,18 @@ export interface FlowShapeOptions {
|
|
|
24
35
|
* The `options` field is included for flow creation but NOT compared during
|
|
25
36
|
* shape comparison. Options can be tuned at runtime via SQL without
|
|
26
37
|
* requiring recompilation. See: /deploy/tune-flow-config/
|
|
38
|
+
*
|
|
39
|
+
* `whenUnmet`, `whenExhausted`, and pattern fields ARE structural - they affect
|
|
40
|
+
* DAG execution semantics and must match between worker and database.
|
|
27
41
|
*/
|
|
28
42
|
export interface StepShape {
|
|
29
43
|
slug: string;
|
|
30
44
|
stepType: 'single' | 'map';
|
|
31
45
|
dependencies: string[];
|
|
46
|
+
whenUnmet: WhenUnmetMode;
|
|
47
|
+
whenExhausted: WhenExhaustedMode;
|
|
48
|
+
requiredInputPattern: InputPattern;
|
|
49
|
+
forbiddenInputPattern: InputPattern;
|
|
32
50
|
options?: StepShapeOptions;
|
|
33
51
|
}
|
|
34
52
|
/**
|
package/dist/flow-shape.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-shape.d.ts","sourceRoot":"","sources":["../src/flow-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"flow-shape.d.ts","sourceRoot":"","sources":["../src/flow-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAM3E;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,CAAC;AAE/E;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,iBAAiB,CAAC;IACjC,oBAAoB,EAAE,YAAY,CAAC;IACnC,qBAAqB,EAAE,YAAY,CAAC;IACpC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAyBD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAoDzD;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,SAAS,EACZ,CAAC,EAAE,SAAS,GACX,qBAAqB,CAiCvB"}
|
package/dist/flow-shape.js
CHANGED
|
@@ -33,6 +33,16 @@ export function extractFlowShape(flow) {
|
|
|
33
33
|
stepType: stepDef.stepType ?? 'single',
|
|
34
34
|
// Sort dependencies alphabetically for deterministic comparison
|
|
35
35
|
dependencies: [...stepDef.dependencies].sort(),
|
|
36
|
+
// Condition modes are structural - they affect DAG execution semantics
|
|
37
|
+
whenUnmet: stepDef.options.whenUnmet ?? 'skip',
|
|
38
|
+
whenExhausted: stepDef.options.whenExhausted ?? 'fail',
|
|
39
|
+
// Input patterns use explicit wrapper to avoid null vs JSON-null ambiguity
|
|
40
|
+
requiredInputPattern: stepDef.options.if !== undefined
|
|
41
|
+
? { defined: true, value: stepDef.options.if }
|
|
42
|
+
: { defined: false },
|
|
43
|
+
forbiddenInputPattern: stepDef.options.ifNot !== undefined
|
|
44
|
+
? { defined: true, value: stepDef.options.ifNot }
|
|
45
|
+
: { defined: false },
|
|
36
46
|
};
|
|
37
47
|
// Only include options if at least one is defined
|
|
38
48
|
const stepOptions = {
|
|
@@ -116,4 +126,23 @@ function compareSteps(a, b, index, differences) {
|
|
|
116
126
|
if (aDeps !== bDeps) {
|
|
117
127
|
differences.push(`Step at index ${index}: dependencies differ [${a.dependencies.join(', ')}] vs [${b.dependencies.join(', ')}]`);
|
|
118
128
|
}
|
|
129
|
+
// Compare condition modes (structural - affects DAG execution semantics)
|
|
130
|
+
if (a.whenUnmet !== b.whenUnmet) {
|
|
131
|
+
differences.push(`Step at index ${index}: whenUnmet differs '${a.whenUnmet}' vs '${b.whenUnmet}'`);
|
|
132
|
+
}
|
|
133
|
+
if (a.whenExhausted !== b.whenExhausted) {
|
|
134
|
+
differences.push(`Step at index ${index}: whenExhausted differs '${a.whenExhausted}' vs '${b.whenExhausted}'`);
|
|
135
|
+
}
|
|
136
|
+
// Compare pattern fields (structural - affects DAG execution semantics)
|
|
137
|
+
// Uses wrapper objects: { defined: false } or { defined: true, value: Json }
|
|
138
|
+
const aReqPattern = JSON.stringify(a.requiredInputPattern);
|
|
139
|
+
const bReqPattern = JSON.stringify(b.requiredInputPattern);
|
|
140
|
+
if (aReqPattern !== bReqPattern) {
|
|
141
|
+
differences.push(`Step at index ${index}: requiredInputPattern differs '${aReqPattern}' vs '${bReqPattern}'`);
|
|
142
|
+
}
|
|
143
|
+
const aForbPattern = JSON.stringify(a.forbiddenInputPattern);
|
|
144
|
+
const bForbPattern = JSON.stringify(b.forbiddenInputPattern);
|
|
145
|
+
if (aForbPattern !== bForbPattern) {
|
|
146
|
+
differences.push(`Step at index ${index}: forbiddenInputPattern differs '${aForbPattern}' vs '${bForbPattern}'`);
|
|
147
|
+
}
|
|
119
148
|
}
|
package/dist/package.json
CHANGED
package/dist/utils.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Validates a slug string according to the following rules:
|
|
3
3
|
* - Cannot start with a number
|
|
4
|
-
* - Cannot
|
|
5
|
-
* - Cannot
|
|
6
|
-
* -
|
|
4
|
+
* - Cannot be empty
|
|
5
|
+
* - Cannot use reserved words
|
|
6
|
+
* - Must contain only letters, numbers, and underscores
|
|
7
7
|
* - Cannot be longer than 128 characters
|
|
8
8
|
*
|
|
9
9
|
* @param slug The slug string to validate
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAsB/C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAsB/C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,IAAI,GAAE,0BAAgD,GACrD,IAAI,CAiCN"}
|
package/dist/utils.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Validates a slug string according to the following rules:
|
|
3
3
|
* - Cannot start with a number
|
|
4
|
-
* - Cannot
|
|
5
|
-
* - Cannot
|
|
6
|
-
* -
|
|
4
|
+
* - Cannot be empty
|
|
5
|
+
* - Cannot use reserved words
|
|
6
|
+
* - Must contain only letters, numbers, and underscores
|
|
7
7
|
* - Cannot be longer than 128 characters
|
|
8
8
|
*
|
|
9
9
|
* @param slug The slug string to validate
|
|
10
10
|
* @throws Error if the slug is invalid
|
|
11
11
|
*/
|
|
12
12
|
export function validateSlug(slug) {
|
|
13
|
+
if (slug.length === 0) {
|
|
14
|
+
throw new Error('Slug cannot be empty');
|
|
15
|
+
}
|
|
13
16
|
if (slug.length > 128) {
|
|
14
17
|
throw new Error(`Slug '${slug}' cannot be longer than 128 characters`);
|
|
15
18
|
}
|
|
19
|
+
if (slug === 'run') {
|
|
20
|
+
throw new Error(`Slug 'run' is reserved and cannot be used`);
|
|
21
|
+
}
|
|
16
22
|
if (/^\d/.test(slug)) {
|
|
17
23
|
throw new Error(`Slug '${slug}' cannot start with a number`);
|
|
18
24
|
}
|
|
19
|
-
if (
|
|
20
|
-
throw new Error(`Slug '${slug}'
|
|
21
|
-
}
|
|
22
|
-
if (/\s/.test(slug)) {
|
|
23
|
-
throw new Error(`Slug '${slug}' cannot contain spaces`);
|
|
24
|
-
}
|
|
25
|
-
if (/[/:#\-?]/.test(slug)) {
|
|
26
|
-
throw new Error(`Slug '${slug}' cannot contain special characters like /, :, ?, #, -`);
|
|
25
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(slug)) {
|
|
26
|
+
throw new Error(`Slug '${slug}' can only contain letters, numbers, and underscores`);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
/**
|