@pgflow/dsl 0.13.2 → 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 CHANGED
@@ -1,5 +1,32 @@
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
+
28
+ ## 0.13.3
29
+
3
30
  ## 0.13.2
4
31
 
5
32
  ## 0.13.1
@@ -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,CA+BnD"}
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"}
@@ -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('${flow.slug}'${flowOptions});`);
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.map((dep) => `'${dep}'`).join(', ');
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('${flow.slug}', '${step.slug}'${depsClause}${stepOptions}${stepTypeClause});`);
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, AnyOutput>;
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 ExtractFlowSteps<TFlow extends AnyFlow> = TFlow extends Flow<infer _TI, infer _TC, infer TS, infer _TD, infer _TEnv> ? TS : never;
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>> = (FlowContext<ExtractFlowEnv<F>> & PlatformResources & UserResources) extends ExtractFlowContext<F> ? F : 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
- }>, // Dependent step: only deps
201
- Steps[SlugType], FlowContext<TEnv, TFlowInput> & TContext>;
202
- step<Slug extends string, TOutput>(opts: Simplify<{
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
- } & StepRuntimeOptions>, handler: (flowInput: TFlowInput, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
206
- [K in Slug]: Awaited<TOutput>;
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, Deps extends Extract<keyof Steps, string>, TOutput>(opts: Simplify<{
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
- } & StepRuntimeOptions>, handler: (deps: {
214
- [K in Deps]: K extends keyof Steps ? Steps[K] : never;
215
- }, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
216
- [K in Slug]: Awaited<TOutput>;
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
- } & StepRuntimeOptions>, handler: (flowInput: TFlowInput, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
237
- [K in Slug]: Awaited<TOutput>;
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
- } & StepRuntimeOptions>, handler: (deps: {
245
- [K in Deps]: K extends keyof Steps ? Steps[K] : never;
246
- }, context: FlowContext<TEnv, TFlowInput> & TContext) => TOutput | Promise<TOutput>): Flow<TFlowInput, TContext, Steps & {
247
- [K in Slug]: Awaited<TOutput>;
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
- } & StepRuntimeOptions>, handler: THandler): Flow<TFlowInput, TContext, Steps & {
265
- [K in Slug]: AwaitedReturn<THandler>[];
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
- } & StepRuntimeOptions>, handler: THandler): Flow<TFlowInput, TContext, Steps & {
273
- [K in Slug]: AwaitedReturn<THandler>[];
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
@@ -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
  } & {
@@ -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
  /**
@@ -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;AAMnC;;;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;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,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,CAwCzD;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,SAAS,EACZ,CAAC,EAAE,SAAS,GACX,qBAAqB,CA6BvB"}
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"}
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pgflow/dsl",
3
- "version": "0.13.2",
3
+ "version": "0.14.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
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 start with an underscore
5
- * - Cannot contain spaces
6
- * - Cannot contain special characters like /, :, ?, #
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
@@ -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;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5F,IAAI,GAAE,0BAAgD,GACrD,IAAI,CAiCN"}
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 start with an underscore
5
- * - Cannot contain spaces
6
- * - Cannot contain special characters like /, :, ?, #
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 (/^_/.test(slug)) {
20
- throw new Error(`Slug '${slug}' cannot start with an underscore`);
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
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pgflow/dsl",
3
- "version": "0.13.2",
3
+ "version": "0.14.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",