@shipfox/expression 2.1.0 → 2.2.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.
Files changed (37) hide show
  1. package/README.md +20 -8
  2. package/dist/evaluator/evaluate-workflow-expression.d.ts +3 -4
  3. package/dist/evaluator/evaluate-workflow-expression.d.ts.map +1 -1
  4. package/dist/evaluator/evaluate-workflow-expression.js +5 -5
  5. package/dist/evaluator/evaluate-workflow-expression.js.map +1 -1
  6. package/dist/evaluator/index.d.ts +2 -0
  7. package/dist/evaluator/index.d.ts.map +1 -1
  8. package/dist/evaluator/index.js +2 -0
  9. package/dist/evaluator/index.js.map +1 -1
  10. package/dist/evaluator/range.d.ts +2 -3
  11. package/dist/evaluator/range.d.ts.map +1 -1
  12. package/dist/evaluator/range.js +4 -43
  13. package/dist/evaluator/range.js.map +1 -1
  14. package/dist/evaluator/workflow-environment.d.ts +3 -0
  15. package/dist/evaluator/workflow-environment.d.ts.map +1 -0
  16. package/dist/evaluator/workflow-environment.js +17 -0
  17. package/dist/evaluator/workflow-environment.js.map +1 -0
  18. package/dist/expression/create-workflow-expression.d.ts.map +1 -1
  19. package/dist/expression/create-workflow-expression.js +31 -12
  20. package/dist/expression/create-workflow-expression.js.map +1 -1
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/json.d.ts +2 -0
  26. package/dist/json.d.ts.map +1 -0
  27. package/dist/json.js +7 -0
  28. package/dist/json.js.map +1 -0
  29. package/dist/resolver/coerce-workflow-value-to-string.d.ts.map +1 -1
  30. package/dist/resolver/coerce-workflow-value-to-string.js +1 -5
  31. package/dist/resolver/coerce-workflow-value-to-string.js.map +1 -1
  32. package/dist/tsconfig.test.tsbuildinfo +1 -1
  33. package/dist/workflow-function-registry.d.ts +21 -0
  34. package/dist/workflow-function-registry.d.ts.map +1 -0
  35. package/dist/workflow-function-registry.js +133 -0
  36. package/dist/workflow-function-registry.js.map +1 -0
  37. package/package.json +1 -1
package/README.md CHANGED
@@ -9,14 +9,20 @@ CEL checks and run-time evaluation for Shipfox workflow expressions.
9
9
  - **`WorkflowExpression`**: Stores the CEL tag, source, and check level.
10
10
  - **`ExpressionTypeEnvironment`**: Lists names and field types for typed checks.
11
11
  - **`evaluateWorkflowExpression`**: Runs a checked value against caller data.
12
+ - **`createWorkflowEnvironment`**: Creates an isolated evaluator with the shared
13
+ `range()`, `toJson()`, and `fromJson()` functions.
12
14
  - **`evaluateWorkflowExpressionWithEnvironment`**: Runs a checked value against
13
15
  a caller-owned CEL environment for explicitly scoped custom functions.
14
16
  - **`WorkflowExpressionEnvironment`**: The evaluate-only environment shape
15
17
  accepted by the scoped evaluator.
16
- - **`createRangeEnvironment`**: Creates an opt-in evaluator with the bounded,
17
- inclusive `range(start, stop, step)` config-templating function.
18
+ - **`createRangeEnvironment`**: Compatibility alias for
19
+ `createWorkflowEnvironment`.
18
20
  - **`MAX_RANGE_ELEMENTS`**: The per-evaluation range materialization limit,
19
21
  currently 1,000 values.
22
+ - **`MAX_RANGE_FANOUT_BYTES`**: The per-evaluation context-sized range fan-out
23
+ limit, currently 1,000,000 bytes.
24
+ - **`MAX_JSON_OUTPUT_BYTES`**: The per-evaluation `toJson()` output limit,
25
+ currently 1,000,000 UTF-8 bytes.
20
26
  - **`evaluateWorkflowPredicate`**: Returns `true` only for the boolean `true`.
21
27
  - **`classifyShellCodePosition`**: Finds named workflow bindings passed directly
22
28
  to shell positions that re-evaluate their arguments.
@@ -86,12 +92,18 @@ const passed = evaluateWorkflowPredicate(expression, {
86
92
  - Context values can include external data. Interpolatable fields rely on their
87
93
  structural sink guarantees, while host and availability checks remain enforced.
88
94
  - Evaluation is deterministic and has no side effects.
89
- - Workflow evaluation does not include config-templating functions. Use a
90
- caller-owned environment when a custom function is intentionally needed.
91
- - The config-templating range evaluator accepts CEL integers and safe integer
92
- values from JavaScript contexts. It creates a fresh CEL environment and one
93
- materialization budget for each evaluation, shared by nested range calls;
94
- each evaluation can materialize at most 1,000 values.
95
+ - Workflow evaluation includes the shared `range()`, `toJson()`, and `fromJson()`
96
+ functions. Use a caller-owned environment when a custom function is intentionally
97
+ needed outside that registry.
98
+ - `range()` accepts CEL integers and safe integer values from JavaScript
99
+ contexts. An environment is built once and reused, and each evaluation gets
100
+ its own materialization budget, shared by nested range calls and restored when
101
+ a context accessor re-enters the evaluator; each evaluation can materialize at
102
+ most 1,000 values and 1,000,000 context-byte fan-out units.
103
+ - `toJson()` writes integers outside the safe-integer range as quoted strings, so
104
+ a round trip through `fromJson()` returns them as strings rather than numbers.
105
+ Safe JSON numbers parsed by `fromJson()` become CEL integers, and all
106
+ `toJson()` output shares a 1,000,000-byte budget per evaluation.
95
107
  - Field resolution remains string-based by default. Callers rendering config
96
108
  objects may opt into raw values for an exact single expression with
97
109
  `preserveSingleExpressionType: true`; mixed literal and expression fields
@@ -1,4 +1,4 @@
1
- import { type Environment } from '@marcbachmann/cel-js';
1
+ import type { Environment } from '@marcbachmann/cel-js';
2
2
  import type { WorkflowExpression } from '../expression/workflow-expression.js';
3
3
  export type WorkflowExpressionEvaluationContext = Readonly<Record<string, unknown>>;
4
4
  export type WorkflowExpressionEvaluationValue = unknown;
@@ -7,9 +7,8 @@ export declare function evaluateWorkflowExpression(expression: WorkflowExpressio
7
7
  /**
8
8
  * Evaluate an expression against a caller-owned CEL environment.
9
9
  *
10
- * Workflow expressions deliberately continue to use the global CEL evaluator.
11
- * Callers that need custom functions, such as config templating, must opt in
12
- * by creating and passing their own environment.
10
+ * The caller-owned environment can provide a narrower or broader function set
11
+ * when the shared workflow registry is not the right boundary.
13
12
  */
14
13
  export declare function evaluateWorkflowExpressionWithEnvironment(expression: WorkflowExpression, context: WorkflowExpressionEvaluationContext, environment: WorkflowExpressionEnvironment): WorkflowExpressionEvaluationValue;
15
14
  export declare function evaluateWorkflowPredicate(expression: WorkflowExpression, context: WorkflowExpressionEvaluationContext): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-workflow-expression.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluate-workflow-expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,WAAW,EAAW,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sCAAsC,CAAC;AAG7E,MAAM,MAAM,mCAAmC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACpF,MAAM,MAAM,iCAAiC,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAE1E,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,GAC3C,iCAAiC,CAMnC;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,EAC5C,WAAW,EAAE,6BAA6B,GACzC,iCAAiC,CAMnC;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAET;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,GAC3C,0BAA0B,CAS5B"}
1
+ {"version":3,"file":"evaluate-workflow-expression.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluate-workflow-expression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sCAAsC,CAAC;AAI7E,MAAM,MAAM,mCAAmC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACpF,MAAM,MAAM,iCAAiC,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAI1E,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,GAC3C,iCAAiC,CAMnC;AAED;;;;;GAKG;AACH,wBAAgB,yCAAyC,CACvD,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,EAC5C,WAAW,EAAE,6BAA6B,GACzC,iCAAiC,CAMnC;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAET;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,mCAAmC,GAC3C,0BAA0B,CAS5B"}
@@ -1,8 +1,9 @@
1
- import { evaluate } from '@marcbachmann/cel-js';
2
1
  import { WorkflowExpressionEvaluationError } from './errors.js';
2
+ import { createWorkflowEnvironment } from './workflow-environment.js';
3
+ const workflowEnvironment = createWorkflowEnvironment();
3
4
  export function evaluateWorkflowExpression(expression, context) {
4
5
  try {
5
- return evaluate(expression.source, context);
6
+ return workflowEnvironment.evaluate(expression.source, context);
6
7
  } catch (error) {
7
8
  throw new WorkflowExpressionEvaluationError(error);
8
9
  }
@@ -10,9 +11,8 @@ export function evaluateWorkflowExpression(expression, context) {
10
11
  /**
11
12
  * Evaluate an expression against a caller-owned CEL environment.
12
13
  *
13
- * Workflow expressions deliberately continue to use the global CEL evaluator.
14
- * Callers that need custom functions, such as config templating, must opt in
15
- * by creating and passing their own environment.
14
+ * The caller-owned environment can provide a narrower or broader function set
15
+ * when the shared workflow registry is not the right boundary.
16
16
  */ export function evaluateWorkflowExpressionWithEnvironment(expression, context, environment) {
17
17
  try {
18
18
  return environment.evaluate(expression.source, context);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/evaluator/evaluate-workflow-expression.ts"],"sourcesContent":["import {type Environment, evaluate} from '@marcbachmann/cel-js';\nimport type {WorkflowExpression} from '../expression/workflow-expression.js';\nimport {WorkflowExpressionEvaluationError} from './errors.js';\n\nexport type WorkflowExpressionEvaluationContext = Readonly<Record<string, unknown>>;\nexport type WorkflowExpressionEvaluationValue = unknown;\nexport type WorkflowExpressionEnvironment = Pick<Environment, 'evaluate'>;\n\nexport function evaluateWorkflowExpression(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n): WorkflowExpressionEvaluationValue {\n try {\n return evaluate(expression.source, context);\n } catch (error) {\n throw new WorkflowExpressionEvaluationError(error);\n }\n}\n\n/**\n * Evaluate an expression against a caller-owned CEL environment.\n *\n * Workflow expressions deliberately continue to use the global CEL evaluator.\n * Callers that need custom functions, such as config templating, must opt in\n * by creating and passing their own environment.\n */\nexport function evaluateWorkflowExpressionWithEnvironment(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n environment: WorkflowExpressionEnvironment,\n): WorkflowExpressionEvaluationValue {\n try {\n return environment.evaluate(expression.source, context);\n } catch (error) {\n throw new WorkflowExpressionEvaluationError(error);\n }\n}\n\nexport function evaluateWorkflowPredicate(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n): boolean {\n return evaluateWorkflowExpression(expression, context) === true;\n}\n\nexport interface FailClosedPredicateOutcome {\n readonly value: boolean;\n readonly evaluationFailed: boolean;\n}\n\nexport function evaluateWorkflowPredicateFailClosed(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n): FailClosedPredicateOutcome {\n try {\n return {value: evaluateWorkflowPredicate(expression, context), evaluationFailed: false};\n } catch (error) {\n if (error instanceof WorkflowExpressionEvaluationError) {\n return {value: false, evaluationFailed: true};\n }\n throw error;\n }\n}\n"],"names":["evaluate","WorkflowExpressionEvaluationError","evaluateWorkflowExpression","expression","context","source","error","evaluateWorkflowExpressionWithEnvironment","environment","evaluateWorkflowPredicate","evaluateWorkflowPredicateFailClosed","value","evaluationFailed"],"mappings":"AAAA,SAA0BA,QAAQ,QAAO,uBAAuB;AAEhE,SAAQC,iCAAiC,QAAO,cAAc;AAM9D,OAAO,SAASC,2BACdC,UAA8B,EAC9BC,OAA4C;IAE5C,IAAI;QACF,OAAOJ,SAASG,WAAWE,MAAM,EAAED;IACrC,EAAE,OAAOE,OAAO;QACd,MAAM,IAAIL,kCAAkCK;IAC9C;AACF;AAEA;;;;;;CAMC,GACD,OAAO,SAASC,0CACdJ,UAA8B,EAC9BC,OAA4C,EAC5CI,WAA0C;IAE1C,IAAI;QACF,OAAOA,YAAYR,QAAQ,CAACG,WAAWE,MAAM,EAAED;IACjD,EAAE,OAAOE,OAAO;QACd,MAAM,IAAIL,kCAAkCK;IAC9C;AACF;AAEA,OAAO,SAASG,0BACdN,UAA8B,EAC9BC,OAA4C;IAE5C,OAAOF,2BAA2BC,YAAYC,aAAa;AAC7D;AAOA,OAAO,SAASM,oCACdP,UAA8B,EAC9BC,OAA4C;IAE5C,IAAI;QACF,OAAO;YAACO,OAAOF,0BAA0BN,YAAYC;YAAUQ,kBAAkB;QAAK;IACxF,EAAE,OAAON,OAAO;QACd,IAAIA,iBAAiBL,mCAAmC;YACtD,OAAO;gBAACU,OAAO;gBAAOC,kBAAkB;YAAI;QAC9C;QACA,MAAMN;IACR;AACF"}
1
+ {"version":3,"sources":["../../src/evaluator/evaluate-workflow-expression.ts"],"sourcesContent":["import type {Environment} from '@marcbachmann/cel-js';\nimport type {WorkflowExpression} from '../expression/workflow-expression.js';\nimport {WorkflowExpressionEvaluationError} from './errors.js';\nimport {createWorkflowEnvironment} from './workflow-environment.js';\n\nexport type WorkflowExpressionEvaluationContext = Readonly<Record<string, unknown>>;\nexport type WorkflowExpressionEvaluationValue = unknown;\nexport type WorkflowExpressionEnvironment = Pick<Environment, 'evaluate'>;\n\nconst workflowEnvironment = createWorkflowEnvironment();\n\nexport function evaluateWorkflowExpression(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n): WorkflowExpressionEvaluationValue {\n try {\n return workflowEnvironment.evaluate(expression.source, context);\n } catch (error) {\n throw new WorkflowExpressionEvaluationError(error);\n }\n}\n\n/**\n * Evaluate an expression against a caller-owned CEL environment.\n *\n * The caller-owned environment can provide a narrower or broader function set\n * when the shared workflow registry is not the right boundary.\n */\nexport function evaluateWorkflowExpressionWithEnvironment(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n environment: WorkflowExpressionEnvironment,\n): WorkflowExpressionEvaluationValue {\n try {\n return environment.evaluate(expression.source, context);\n } catch (error) {\n throw new WorkflowExpressionEvaluationError(error);\n }\n}\n\nexport function evaluateWorkflowPredicate(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n): boolean {\n return evaluateWorkflowExpression(expression, context) === true;\n}\n\nexport interface FailClosedPredicateOutcome {\n readonly value: boolean;\n readonly evaluationFailed: boolean;\n}\n\nexport function evaluateWorkflowPredicateFailClosed(\n expression: WorkflowExpression,\n context: WorkflowExpressionEvaluationContext,\n): FailClosedPredicateOutcome {\n try {\n return {value: evaluateWorkflowPredicate(expression, context), evaluationFailed: false};\n } catch (error) {\n if (error instanceof WorkflowExpressionEvaluationError) {\n return {value: false, evaluationFailed: true};\n }\n throw error;\n }\n}\n"],"names":["WorkflowExpressionEvaluationError","createWorkflowEnvironment","workflowEnvironment","evaluateWorkflowExpression","expression","context","evaluate","source","error","evaluateWorkflowExpressionWithEnvironment","environment","evaluateWorkflowPredicate","evaluateWorkflowPredicateFailClosed","value","evaluationFailed"],"mappings":"AAEA,SAAQA,iCAAiC,QAAO,cAAc;AAC9D,SAAQC,yBAAyB,QAAO,4BAA4B;AAMpE,MAAMC,sBAAsBD;AAE5B,OAAO,SAASE,2BACdC,UAA8B,EAC9BC,OAA4C;IAE5C,IAAI;QACF,OAAOH,oBAAoBI,QAAQ,CAACF,WAAWG,MAAM,EAAEF;IACzD,EAAE,OAAOG,OAAO;QACd,MAAM,IAAIR,kCAAkCQ;IAC9C;AACF;AAEA;;;;;CAKC,GACD,OAAO,SAASC,0CACdL,UAA8B,EAC9BC,OAA4C,EAC5CK,WAA0C;IAE1C,IAAI;QACF,OAAOA,YAAYJ,QAAQ,CAACF,WAAWG,MAAM,EAAEF;IACjD,EAAE,OAAOG,OAAO;QACd,MAAM,IAAIR,kCAAkCQ;IAC9C;AACF;AAEA,OAAO,SAASG,0BACdP,UAA8B,EAC9BC,OAA4C;IAE5C,OAAOF,2BAA2BC,YAAYC,aAAa;AAC7D;AAOA,OAAO,SAASO,oCACdR,UAA8B,EAC9BC,OAA4C;IAE5C,IAAI;QACF,OAAO;YAACQ,OAAOF,0BAA0BP,YAAYC;YAAUS,kBAAkB;QAAK;IACxF,EAAE,OAAON,OAAO;QACd,IAAIA,iBAAiBR,mCAAmC;YACtD,OAAO;gBAACa,OAAO;gBAAOC,kBAAkB;YAAI;QAC9C;QACA,MAAMN;IACR;AACF"}
@@ -1,5 +1,7 @@
1
+ export { MAX_JSON_OUTPUT_BYTES, MAX_RANGE_FANOUT_BYTES } from '../workflow-function-registry.js';
1
2
  export { WorkflowExpressionEvaluationError, type WorkflowExpressionEvaluationFailureReason, workflowExpressionEvaluationErrorCode, } from './errors.js';
2
3
  export { evaluateWorkflowExpression, evaluateWorkflowExpressionWithEnvironment, evaluateWorkflowPredicate, evaluateWorkflowPredicateFailClosed, type FailClosedPredicateOutcome, type WorkflowExpressionEnvironment, type WorkflowExpressionEvaluationContext, type WorkflowExpressionEvaluationValue, } from './evaluate-workflow-expression.js';
3
4
  export { createRangeEnvironment, MAX_RANGE_ELEMENTS } from './range.js';
4
5
  export { rehydrateJsonExpressionRecord, rehydrateJsonExpressionValue, } from './rehydrate-json-expression.js';
6
+ export { createWorkflowEnvironment } from './workflow-environment.js';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evaluator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,KAAK,yCAAyC,EAC9C,qCAAqC,GACtC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,yCAAyC,EACzC,yBAAyB,EACzB,mCAAmC,EACnC,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,mCAAmC,EACxC,KAAK,iCAAiC,GACvC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evaluator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EACL,iCAAiC,EACjC,KAAK,yCAAyC,EAC9C,qCAAqC,GACtC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,yCAAyC,EACzC,yBAAyB,EACzB,mCAAmC,EACnC,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,mCAAmC,EACxC,KAAK,iCAAiC,GACvC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,yBAAyB,EAAC,MAAM,2BAA2B,CAAC"}
@@ -1,6 +1,8 @@
1
+ export { MAX_JSON_OUTPUT_BYTES, MAX_RANGE_FANOUT_BYTES } from '../workflow-function-registry.js';
1
2
  export { WorkflowExpressionEvaluationError, workflowExpressionEvaluationErrorCode } from './errors.js';
2
3
  export { evaluateWorkflowExpression, evaluateWorkflowExpressionWithEnvironment, evaluateWorkflowPredicate, evaluateWorkflowPredicateFailClosed } from './evaluate-workflow-expression.js';
3
4
  export { createRangeEnvironment, MAX_RANGE_ELEMENTS } from './range.js';
4
5
  export { rehydrateJsonExpressionRecord, rehydrateJsonExpressionValue } from './rehydrate-json-expression.js';
6
+ export { createWorkflowEnvironment } from './workflow-environment.js';
5
7
 
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/evaluator/index.ts"],"sourcesContent":["export {\n WorkflowExpressionEvaluationError,\n type WorkflowExpressionEvaluationFailureReason,\n workflowExpressionEvaluationErrorCode,\n} from './errors.js';\nexport {\n evaluateWorkflowExpression,\n evaluateWorkflowExpressionWithEnvironment,\n evaluateWorkflowPredicate,\n evaluateWorkflowPredicateFailClosed,\n type FailClosedPredicateOutcome,\n type WorkflowExpressionEnvironment,\n type WorkflowExpressionEvaluationContext,\n type WorkflowExpressionEvaluationValue,\n} from './evaluate-workflow-expression.js';\nexport {createRangeEnvironment, MAX_RANGE_ELEMENTS} from './range.js';\nexport {\n rehydrateJsonExpressionRecord,\n rehydrateJsonExpressionValue,\n} from './rehydrate-json-expression.js';\n"],"names":["WorkflowExpressionEvaluationError","workflowExpressionEvaluationErrorCode","evaluateWorkflowExpression","evaluateWorkflowExpressionWithEnvironment","evaluateWorkflowPredicate","evaluateWorkflowPredicateFailClosed","createRangeEnvironment","MAX_RANGE_ELEMENTS","rehydrateJsonExpressionRecord","rehydrateJsonExpressionValue"],"mappings":"AAAA,SACEA,iCAAiC,EAEjCC,qCAAqC,QAChC,cAAc;AACrB,SACEC,0BAA0B,EAC1BC,yCAAyC,EACzCC,yBAAyB,EACzBC,mCAAmC,QAK9B,oCAAoC;AAC3C,SAAQC,sBAAsB,EAAEC,kBAAkB,QAAO,aAAa;AACtE,SACEC,6BAA6B,EAC7BC,4BAA4B,QACvB,iCAAiC"}
1
+ {"version":3,"sources":["../../src/evaluator/index.ts"],"sourcesContent":["export {MAX_JSON_OUTPUT_BYTES, MAX_RANGE_FANOUT_BYTES} from '../workflow-function-registry.js';\nexport {\n WorkflowExpressionEvaluationError,\n type WorkflowExpressionEvaluationFailureReason,\n workflowExpressionEvaluationErrorCode,\n} from './errors.js';\nexport {\n evaluateWorkflowExpression,\n evaluateWorkflowExpressionWithEnvironment,\n evaluateWorkflowPredicate,\n evaluateWorkflowPredicateFailClosed,\n type FailClosedPredicateOutcome,\n type WorkflowExpressionEnvironment,\n type WorkflowExpressionEvaluationContext,\n type WorkflowExpressionEvaluationValue,\n} from './evaluate-workflow-expression.js';\nexport {createRangeEnvironment, MAX_RANGE_ELEMENTS} from './range.js';\nexport {\n rehydrateJsonExpressionRecord,\n rehydrateJsonExpressionValue,\n} from './rehydrate-json-expression.js';\nexport {createWorkflowEnvironment} from './workflow-environment.js';\n"],"names":["MAX_JSON_OUTPUT_BYTES","MAX_RANGE_FANOUT_BYTES","WorkflowExpressionEvaluationError","workflowExpressionEvaluationErrorCode","evaluateWorkflowExpression","evaluateWorkflowExpressionWithEnvironment","evaluateWorkflowPredicate","evaluateWorkflowPredicateFailClosed","createRangeEnvironment","MAX_RANGE_ELEMENTS","rehydrateJsonExpressionRecord","rehydrateJsonExpressionValue","createWorkflowEnvironment"],"mappings":"AAAA,SAAQA,qBAAqB,EAAEC,sBAAsB,QAAO,mCAAmC;AAC/F,SACEC,iCAAiC,EAEjCC,qCAAqC,QAChC,cAAc;AACrB,SACEC,0BAA0B,EAC1BC,yCAAyC,EACzCC,yBAAyB,EACzBC,mCAAmC,QAK9B,oCAAoC;AAC3C,SAAQC,sBAAsB,EAAEC,kBAAkB,QAAO,aAAa;AACtE,SACEC,6BAA6B,EAC7BC,4BAA4B,QACvB,iCAAiC;AACxC,SAAQC,yBAAyB,QAAO,4BAA4B"}
@@ -1,6 +1,5 @@
1
1
  import type { WorkflowExpressionEnvironment } from './evaluate-workflow-expression.js';
2
- /** Maximum number of values a config-template range may materialize. */
3
- export declare const MAX_RANGE_ELEMENTS = 1000;
4
- /** Create the opt-in range evaluator for config templating. */
2
+ export { MAX_RANGE_ELEMENTS } from '../workflow-function-registry.js';
3
+ /** Create a workflow evaluator with the shared CEL function registry. */
5
4
  export declare function createRangeEnvironment(): WorkflowExpressionEnvironment;
6
5
  //# sourceMappingURL=range.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/evaluator/range.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,mCAAmC,CAAC;AAErF,wEAAwE;AACxE,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AA+CxC,+DAA+D;AAC/D,wBAAgB,sBAAsB,IAAI,6BAA6B,CAWtE"}
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/evaluator/range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,mCAAmC,CAAC;AAGrF,OAAO,EAAC,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AAEpE,yEAAyE;AACzE,wBAAgB,sBAAsB,IAAI,6BAA6B,CAEtE"}
@@ -1,46 +1,7 @@
1
- import { Environment } from '@marcbachmann/cel-js';
2
- /** Maximum number of values a config-template range may materialize. */ export const MAX_RANGE_ELEMENTS = 1_000;
3
- const RANGE_FUNCTION_SIGNATURE = 'range(dyn, dyn, dyn): list<int>';
4
- function materializeRange(start, stop, step) {
5
- const values = [];
6
- for(let value = start; value <= stop; value += step)values.push(value);
7
- return values;
8
- }
9
- function rangeElementCount(start, stop, step) {
10
- if (step <= 0n) throw new RangeError('range step must be positive');
11
- if (start > stop) return 0n;
12
- return (stop - start) / step + 1n;
13
- }
14
- function toCelInteger(value, name) {
15
- if (typeof value === 'bigint') return value;
16
- if (typeof value === 'number' && Number.isSafeInteger(value)) return BigInt(value);
17
- throw new RangeError(`${name} must be a safe integer`);
18
- }
19
- function evaluateRange(budget, start, stop, step) {
20
- const startValue = toCelInteger(start, 'range start');
21
- const stopValue = toCelInteger(stop, 'range stop');
22
- const stepValue = toCelInteger(step, 'range step');
23
- const count = rangeElementCount(startValue, stopValue, stepValue);
24
- if (count > BigInt(budget.remaining)) {
25
- throw new RangeError(`range evaluation budget exceeded; ${count} elements requested with ${budget.remaining} remaining`);
26
- }
27
- const values = materializeRange(startValue, stopValue, stepValue);
28
- budget.remaining -= values.length;
29
- return values;
30
- }
31
- /** Create the opt-in range evaluator for config templating. */ export function createRangeEnvironment() {
32
- return {
33
- evaluate (expression, context) {
34
- const budget = {
35
- remaining: MAX_RANGE_ELEMENTS
36
- };
37
- const environment = new Environment({
38
- unlistedVariablesAreDyn: true
39
- });
40
- environment.registerFunction(RANGE_FUNCTION_SIGNATURE, (start, stop, step)=>evaluateRange(budget, start, stop, step));
41
- return environment.evaluate(expression, context);
42
- }
43
- };
1
+ import { createWorkflowEnvironment } from './workflow-environment.js';
2
+ export { MAX_RANGE_ELEMENTS } from '../workflow-function-registry.js';
3
+ /** Create a workflow evaluator with the shared CEL function registry. */ export function createRangeEnvironment() {
4
+ return createWorkflowEnvironment();
44
5
  }
45
6
 
46
7
  //# sourceMappingURL=range.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/evaluator/range.ts"],"sourcesContent":["import {type Context, Environment} from '@marcbachmann/cel-js';\nimport type {WorkflowExpressionEnvironment} from './evaluate-workflow-expression.js';\n\n/** Maximum number of values a config-template range may materialize. */\nexport const MAX_RANGE_ELEMENTS = 1_000;\nconst RANGE_FUNCTION_SIGNATURE = 'range(dyn, dyn, dyn): list<int>';\n\ninterface RangeBudget {\n remaining: number;\n}\n\nfunction materializeRange(start: bigint, stop: bigint, step: bigint): bigint[] {\n const values: bigint[] = [];\n for (let value = start; value <= stop; value += step) values.push(value);\n return values;\n}\n\nfunction rangeElementCount(start: bigint, stop: bigint, step: bigint): bigint {\n if (step <= 0n) throw new RangeError('range step must be positive');\n if (start > stop) return 0n;\n\n return (stop - start) / step + 1n;\n}\n\nfunction toCelInteger(value: unknown, name: string): bigint {\n if (typeof value === 'bigint') return value;\n if (typeof value === 'number' && Number.isSafeInteger(value)) return BigInt(value);\n throw new RangeError(`${name} must be a safe integer`);\n}\n\nfunction evaluateRange(\n budget: RangeBudget,\n start: unknown,\n stop: unknown,\n step: unknown,\n): bigint[] {\n const startValue = toCelInteger(start, 'range start');\n const stopValue = toCelInteger(stop, 'range stop');\n const stepValue = toCelInteger(step, 'range step');\n const count = rangeElementCount(startValue, stopValue, stepValue);\n if (count > BigInt(budget.remaining)) {\n throw new RangeError(\n `range evaluation budget exceeded; ${count} elements requested with ${budget.remaining} remaining`,\n );\n }\n\n const values = materializeRange(startValue, stopValue, stepValue);\n budget.remaining -= values.length;\n return values;\n}\n\n/** Create the opt-in range evaluator for config templating. */\nexport function createRangeEnvironment(): WorkflowExpressionEnvironment {\n return {\n evaluate(expression: string, context?: Context) {\n const budget = {remaining: MAX_RANGE_ELEMENTS};\n const environment = new Environment({unlistedVariablesAreDyn: true});\n environment.registerFunction(RANGE_FUNCTION_SIGNATURE, (start, stop, step) =>\n evaluateRange(budget, start, stop, step),\n );\n return environment.evaluate(expression, context);\n },\n };\n}\n"],"names":["Environment","MAX_RANGE_ELEMENTS","RANGE_FUNCTION_SIGNATURE","materializeRange","start","stop","step","values","value","push","rangeElementCount","RangeError","toCelInteger","name","Number","isSafeInteger","BigInt","evaluateRange","budget","startValue","stopValue","stepValue","count","remaining","length","createRangeEnvironment","evaluate","expression","context","environment","unlistedVariablesAreDyn","registerFunction"],"mappings":"AAAA,SAAsBA,WAAW,QAAO,uBAAuB;AAG/D,sEAAsE,GACtE,OAAO,MAAMC,qBAAqB,MAAM;AACxC,MAAMC,2BAA2B;AAMjC,SAASC,iBAAiBC,KAAa,EAAEC,IAAY,EAAEC,IAAY;IACjE,MAAMC,SAAmB,EAAE;IAC3B,IAAK,IAAIC,QAAQJ,OAAOI,SAASH,MAAMG,SAASF,KAAMC,OAAOE,IAAI,CAACD;IAClE,OAAOD;AACT;AAEA,SAASG,kBAAkBN,KAAa,EAAEC,IAAY,EAAEC,IAAY;IAClE,IAAIA,QAAQ,EAAE,EAAE,MAAM,IAAIK,WAAW;IACrC,IAAIP,QAAQC,MAAM,OAAO,EAAE;IAE3B,OAAO,AAACA,CAAAA,OAAOD,KAAI,IAAKE,OAAO,EAAE;AACnC;AAEA,SAASM,aAAaJ,KAAc,EAAEK,IAAY;IAChD,IAAI,OAAOL,UAAU,UAAU,OAAOA;IACtC,IAAI,OAAOA,UAAU,YAAYM,OAAOC,aAAa,CAACP,QAAQ,OAAOQ,OAAOR;IAC5E,MAAM,IAAIG,WAAW,GAAGE,KAAK,uBAAuB,CAAC;AACvD;AAEA,SAASI,cACPC,MAAmB,EACnBd,KAAc,EACdC,IAAa,EACbC,IAAa;IAEb,MAAMa,aAAaP,aAAaR,OAAO;IACvC,MAAMgB,YAAYR,aAAaP,MAAM;IACrC,MAAMgB,YAAYT,aAAaN,MAAM;IACrC,MAAMgB,QAAQZ,kBAAkBS,YAAYC,WAAWC;IACvD,IAAIC,QAAQN,OAAOE,OAAOK,SAAS,GAAG;QACpC,MAAM,IAAIZ,WACR,CAAC,kCAAkC,EAAEW,MAAM,yBAAyB,EAAEJ,OAAOK,SAAS,CAAC,UAAU,CAAC;IAEtG;IAEA,MAAMhB,SAASJ,iBAAiBgB,YAAYC,WAAWC;IACvDH,OAAOK,SAAS,IAAIhB,OAAOiB,MAAM;IACjC,OAAOjB;AACT;AAEA,6DAA6D,GAC7D,OAAO,SAASkB;IACd,OAAO;QACLC,UAASC,UAAkB,EAAEC,OAAiB;YAC5C,MAAMV,SAAS;gBAACK,WAAWtB;YAAkB;YAC7C,MAAM4B,cAAc,IAAI7B,YAAY;gBAAC8B,yBAAyB;YAAI;YAClED,YAAYE,gBAAgB,CAAC7B,0BAA0B,CAACE,OAAOC,MAAMC,OACnEW,cAAcC,QAAQd,OAAOC,MAAMC;YAErC,OAAOuB,YAAYH,QAAQ,CAACC,YAAYC;QAC1C;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/evaluator/range.ts"],"sourcesContent":["import type {WorkflowExpressionEnvironment} from './evaluate-workflow-expression.js';\nimport {createWorkflowEnvironment} from './workflow-environment.js';\n\nexport {MAX_RANGE_ELEMENTS} from '../workflow-function-registry.js';\n\n/** Create a workflow evaluator with the shared CEL function registry. */\nexport function createRangeEnvironment(): WorkflowExpressionEnvironment {\n return createWorkflowEnvironment();\n}\n"],"names":["createWorkflowEnvironment","MAX_RANGE_ELEMENTS","createRangeEnvironment"],"mappings":"AACA,SAAQA,yBAAyB,QAAO,4BAA4B;AAEpE,SAAQC,kBAAkB,QAAO,mCAAmC;AAEpE,uEAAuE,GACvE,OAAO,SAASC;IACd,OAAOF;AACT"}
@@ -0,0 +1,3 @@
1
+ import type { WorkflowExpressionEnvironment } from './evaluate-workflow-expression.js';
2
+ export declare function createWorkflowEnvironment(): WorkflowExpressionEnvironment;
3
+ //# sourceMappingURL=workflow-environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-environment.d.ts","sourceRoot":"","sources":["../../src/evaluator/workflow-environment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,mCAAmC,CAAC;AAErF,wBAAgB,yBAAyB,IAAI,6BAA6B,CAWzE"}
@@ -0,0 +1,17 @@
1
+ import { Environment } from '@marcbachmann/cel-js';
2
+ import { registerWorkflowFunctions } from '../workflow-function-registry.js';
3
+ export function createWorkflowEnvironment() {
4
+ // Building the CEL environment once and resetting the budget keeps the
5
+ // per-evaluation materialization limit while avoiding a rebuild per call.
6
+ const environment = new Environment({
7
+ unlistedVariablesAreDyn: true
8
+ });
9
+ const budgets = registerWorkflowFunctions(environment);
10
+ return {
11
+ evaluate (expression, context) {
12
+ return budgets.isolate(context, ()=>environment.evaluate(expression, context));
13
+ }
14
+ };
15
+ }
16
+
17
+ //# sourceMappingURL=workflow-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/evaluator/workflow-environment.ts"],"sourcesContent":["import {type Context, Environment} from '@marcbachmann/cel-js';\nimport {registerWorkflowFunctions} from '../workflow-function-registry.js';\nimport type {WorkflowExpressionEnvironment} from './evaluate-workflow-expression.js';\n\nexport function createWorkflowEnvironment(): WorkflowExpressionEnvironment {\n // Building the CEL environment once and resetting the budget keeps the\n // per-evaluation materialization limit while avoiding a rebuild per call.\n const environment = new Environment({unlistedVariablesAreDyn: true});\n const budgets = registerWorkflowFunctions(environment);\n\n return {\n evaluate(expression: string, context?: Context) {\n return budgets.isolate(context, () => environment.evaluate(expression, context));\n },\n };\n}\n"],"names":["Environment","registerWorkflowFunctions","createWorkflowEnvironment","environment","unlistedVariablesAreDyn","budgets","evaluate","expression","context","isolate"],"mappings":"AAAA,SAAsBA,WAAW,QAAO,uBAAuB;AAC/D,SAAQC,yBAAyB,QAAO,mCAAmC;AAG3E,OAAO,SAASC;IACd,uEAAuE;IACvE,0EAA0E;IAC1E,MAAMC,cAAc,IAAIH,YAAY;QAACI,yBAAyB;IAAI;IAClE,MAAMC,UAAUJ,0BAA0BE;IAE1C,OAAO;QACLG,UAASC,UAAkB,EAAEC,OAAiB;YAC5C,OAAOH,QAAQI,OAAO,CAACD,SAAS,IAAML,YAAYG,QAAQ,CAACC,YAAYC;QACzE;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-workflow-expression.d.ts","sourceRoot":"","sources":["../../src/expression/create-workflow-expression.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,8BAA8B,EAK9B,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,8BAA8B,GACrC,kBAAkB,CAyDpB;AA0CD,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;CACpC,GAAG,kBAAkB,CAOrB"}
1
+ {"version":3,"file":"create-workflow-expression.d.ts","sourceRoot":"","sources":["../../src/expression/create-workflow-expression.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,8BAA8B,EAK9B,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,8BAA8B,GACrC,kBAAkB,CAmDpB;AA2CD,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;CACpC,GAAG,kBAAkB,CAOrB"}
@@ -1,4 +1,5 @@
1
1
  import { Environment, parse as parseCel } from '@marcbachmann/cel-js';
2
+ import { registerWorkflowFunctions } from '../workflow-function-registry.js';
2
3
  import { InvalidWorkflowExpressionError } from './errors.js';
3
4
  const scalarTypeToCelType = {
4
5
  string: 'string',
@@ -18,14 +19,7 @@ export function createWorkflowExpression(params) {
18
19
  reason: 'Expression source must not be empty.'
19
20
  });
20
21
  }
21
- try {
22
- parseCel(source);
23
- } catch (error) {
24
- throw new InvalidWorkflowExpressionError({
25
- source,
26
- reason: error instanceof Error ? error.message : 'Expression source could not be parsed.'
27
- });
28
- }
22
+ const ast = parseWorkflowExpression(source);
29
23
  if (params.check.mode === 'typed') {
30
24
  const environment = createTypeCheckingEnvironment();
31
25
  for (const [name, type] of Object.entries(params.check.typeEnvironment ?? {})){
@@ -46,13 +40,13 @@ export function createWorkflowExpression(params) {
46
40
  reason: typeCheckResult.error?.message ?? 'Expression source did not type-check.'
47
41
  });
48
42
  }
49
- if (params.check.expectedResultType !== undefined && typeCheckResult.type !== scalarTypeToCelType[params.check.expectedResultType]) {
43
+ if (params.check.expectedResultType !== undefined && typeCheckResult.type !== scalarTypeToCelType[params.check.expectedResultType] && !(typeCheckResult.type === 'dyn' && containsFromJsonCall(ast))) {
50
44
  throw new InvalidWorkflowExpressionError({
51
45
  source,
52
46
  reason: `Expression source must return ${scalarTypeToCelType[params.check.expectedResultType]}; got ${typeCheckResult.type ?? 'unknown'}.`
53
47
  });
54
48
  }
55
- resultType = resolveKnownPathType(source, params.check.typeEnvironment) ?? fromCelType(typeCheckResult.type);
49
+ resultType = resolveKnownPathType(source, params.check.typeEnvironment) ?? fromCelType(typeCheckResult.type, ast);
56
50
  }
57
51
  return {
58
52
  language: 'cel',
@@ -83,6 +77,7 @@ function createTypeCheckingEnvironment() {
83
77
  const environment = new Environment({
84
78
  unlistedVariablesAreDyn: false
85
79
  });
80
+ registerWorkflowFunctions(environment);
86
81
  // CEL evaluates numeric equality across types, but its static checker normally
87
82
  // rejects the same expression. Match validation to the runtime contract.
88
83
  environment.registerOperator('double == int', (left, right)=>{
@@ -147,7 +142,7 @@ function toCelListElementType(type, environment, variableName) {
147
142
  }
148
143
  return 'dyn';
149
144
  }
150
- function fromCelType(type) {
145
+ function fromCelType(type, ast) {
151
146
  if (type === undefined) return undefined;
152
147
  switch(type){
153
148
  case 'string':
@@ -167,7 +162,8 @@ function fromCelType(type) {
167
162
  kind: 'map'
168
163
  };
169
164
  case 'dyn':
170
- return 'string';
165
+ // Preserve legacy string fallback for open-map lookups; JSON values stay unknown.
166
+ return containsFromJsonCall(ast) ? undefined : 'string';
171
167
  default:
172
168
  // cel-js currently exposes custom/list element result types as opaque strings.
173
169
  // Keep the outer list shape when present, but erase element detail rather than
@@ -183,5 +179,28 @@ function fromCelType(type) {
183
179
  };
184
180
  }
185
181
  }
182
+ function parseWorkflowExpression(source) {
183
+ try {
184
+ return parseCel(source).ast;
185
+ } catch (error) {
186
+ throw new InvalidWorkflowExpressionError({
187
+ source,
188
+ reason: error instanceof Error ? error.message : 'Expression source could not be parsed.'
189
+ });
190
+ }
191
+ }
192
+ function containsFromJsonCall(node) {
193
+ if ((node.op === 'call' || node.op === 'rcall') && node.args[0] === 'fromJson') {
194
+ return true;
195
+ }
196
+ return containsFromJsonValue(node.args);
197
+ }
198
+ function containsFromJsonValue(value) {
199
+ if (Array.isArray(value)) return value.some(containsFromJsonValue);
200
+ if (typeof value !== 'object' || value === null) return false;
201
+ const candidate = value;
202
+ if (candidate.args === undefined || candidate.op === undefined) return false;
203
+ return containsFromJsonCall(candidate);
204
+ }
186
205
 
187
206
  //# sourceMappingURL=create-workflow-expression.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/create-workflow-expression.ts"],"sourcesContent":["import {Environment, parse as parseCel} from '@marcbachmann/cel-js';\nimport {InvalidWorkflowExpressionError} from './errors.js';\nimport type {\n CreateWorkflowExpressionParams,\n ExpressionScalarType,\n ExpressionType,\n ExpressionTypeEnvironment,\n ValidCelExpression,\n WorkflowExpression,\n} from './workflow-expression.js';\n\nconst scalarTypeToCelType = {\n string: 'string',\n int: 'int',\n double: 'double',\n bool: 'bool',\n null: 'null',\n timestamp: 'google.protobuf.Timestamp',\n} satisfies Record<ExpressionScalarType, string>;\n\ntype CelSchema = {\n [field: string]: string | CelSchema;\n};\n\nconst directPathPattern = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/;\n\nexport function createWorkflowExpression(\n params: CreateWorkflowExpressionParams,\n): WorkflowExpression {\n const source = params.source.trim();\n let resultType: ExpressionType | undefined;\n if (source.length === 0) {\n throw new InvalidWorkflowExpressionError({\n source: params.source,\n reason: 'Expression source must not be empty.',\n });\n }\n\n try {\n parseCel(source);\n } catch (error) {\n throw new InvalidWorkflowExpressionError({\n source,\n reason: error instanceof Error ? error.message : 'Expression source could not be parsed.',\n });\n }\n\n if (params.check.mode === 'typed') {\n const environment = createTypeCheckingEnvironment();\n for (const [name, type] of Object.entries(params.check.typeEnvironment ?? {})) {\n const celType = toCelType(type, environment, name);\n if (typeof celType === 'string') {\n environment.registerVariable(name, celType);\n } else {\n environment.registerVariable({name, schema: celType.schema});\n }\n }\n\n const typeCheckResult = environment.check(source);\n if (!typeCheckResult.valid) {\n throw new InvalidWorkflowExpressionError({\n source,\n reason: typeCheckResult.error?.message ?? 'Expression source did not type-check.',\n });\n }\n if (\n params.check.expectedResultType !== undefined &&\n typeCheckResult.type !== scalarTypeToCelType[params.check.expectedResultType]\n ) {\n throw new InvalidWorkflowExpressionError({\n source,\n reason: `Expression source must return ${scalarTypeToCelType[params.check.expectedResultType]}; got ${typeCheckResult.type ?? 'unknown'}.`,\n });\n }\n resultType =\n resolveKnownPathType(source, params.check.typeEnvironment) ??\n fromCelType(typeCheckResult.type);\n }\n\n return {\n language: 'cel',\n source: source as ValidCelExpression,\n check: params.check.mode,\n ...(resultType === undefined ? {} : {resultType}),\n };\n}\n\nfunction resolveKnownPathType(\n source: string,\n typeEnvironment: ExpressionTypeEnvironment | undefined,\n): ExpressionType | undefined {\n // cel-js erases list element detail from custom result type strings, so recover\n // known direct paths before falling back to its lossy result type conversion.\n if (typeEnvironment === undefined || !directPathPattern.test(source)) {\n return undefined;\n }\n\n const [root, ...path] = source.split('.');\n let current = root === undefined ? undefined : typeEnvironment[root];\n for (const segment of path) {\n if (current === undefined || typeof current === 'string' || current.kind !== 'object') {\n return undefined;\n }\n current = current.fields[segment];\n }\n\n return current;\n}\n\nfunction createTypeCheckingEnvironment(): Environment {\n const environment = new Environment({unlistedVariablesAreDyn: false});\n\n // CEL evaluates numeric equality across types, but its static checker normally\n // rejects the same expression. Match validation to the runtime contract.\n environment.registerOperator('double == int', (left: number, right: bigint) => {\n return Number.isInteger(left) && BigInt(left) === right;\n });\n\n // Typed context fields may be absent at runtime while still exposing their\n // known shape when present. CEL's built-in equality overloads do not allow a\n // declared object type to compare with null, so keep null checks aligned with\n // the runtime context contract.\n environment.registerOperator('dyn != null', (left: unknown, right: null) => left !== right);\n\n return environment;\n}\n\nexport function unsafeWorkflowExpressionFromSource(params: {\n source: string;\n check: WorkflowExpression['check'];\n}): WorkflowExpression {\n // Use only when rehydrating a source that was already validated before storage.\n return {\n language: 'cel',\n source: params.source as ValidCelExpression,\n check: params.check,\n };\n}\n\nfunction toCelType(\n type: ExpressionType,\n environment: Environment,\n variableName: string,\n): string | {schema: CelSchema} {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'list') {\n return `list<${toCelListElementType(type.element, environment, variableName)}>`;\n }\n if (type.kind === 'map') return 'map';\n\n return {\n schema: Object.fromEntries(\n Object.entries(type.fields).map(([name, field]) => [name, toCelSchemaType(field)]),\n ),\n };\n}\n\nfunction toCelSchemaType(type: ExpressionType): string | CelSchema {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'list') return `list<${toCelSchemaListElementType(type.element)}>`;\n if (type.kind === 'map') return 'map';\n return Object.fromEntries(\n Object.entries(type.fields).map(([name, field]) => [name, toCelSchemaType(field)]),\n );\n}\n\nfunction toCelSchemaListElementType(type: ExpressionType): string {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'map') return 'map';\n if (type.kind === 'object') return 'dyn';\n return `list<${toCelSchemaListElementType(type.element)}>`;\n}\n\nfunction toCelListElementType(\n type: ExpressionType,\n environment: Environment,\n variableName: string,\n): string {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'map') return 'map';\n if (type.kind === 'object') {\n const typeName = `$${variableName}.item`;\n environment.registerType({\n name: typeName,\n schema: Object.fromEntries(\n Object.entries(type.fields).map(([name, field]) => [name, toCelSchemaType(field)]),\n ),\n });\n return typeName;\n }\n return 'dyn';\n}\n\nfunction fromCelType(type: string | undefined): ExpressionType | undefined {\n if (type === undefined) return undefined;\n\n switch (type) {\n case 'string':\n return 'string';\n case 'int':\n return 'int';\n case 'double':\n return 'double';\n case 'bool':\n return 'bool';\n case 'null':\n return 'null';\n case 'google.protobuf.Timestamp':\n return 'timestamp';\n case 'map':\n return {kind: 'map'};\n case 'dyn':\n return 'string';\n default:\n // cel-js currently exposes custom/list element result types as opaque strings.\n // Keep the outer list shape when present, but erase element detail rather than\n // pretending we can round-trip the original schema.\n if (type.startsWith('list<')) return {kind: 'list', element: {kind: 'map'}};\n return {kind: 'map'};\n }\n}\n"],"names":["Environment","parse","parseCel","InvalidWorkflowExpressionError","scalarTypeToCelType","string","int","double","bool","null","timestamp","directPathPattern","createWorkflowExpression","params","source","trim","resultType","length","reason","error","Error","message","check","mode","environment","createTypeCheckingEnvironment","name","type","Object","entries","typeEnvironment","celType","toCelType","registerVariable","schema","typeCheckResult","valid","expectedResultType","undefined","resolveKnownPathType","fromCelType","language","test","root","path","split","current","segment","kind","fields","unlistedVariablesAreDyn","registerOperator","left","right","Number","isInteger","BigInt","unsafeWorkflowExpressionFromSource","variableName","toCelListElementType","element","fromEntries","map","field","toCelSchemaType","toCelSchemaListElementType","typeName","registerType","startsWith"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/expression/create-workflow-expression.ts"],"sourcesContent":["import {type ASTNode, Environment, parse as parseCel} from '@marcbachmann/cel-js';\nimport {registerWorkflowFunctions} from '../workflow-function-registry.js';\nimport {InvalidWorkflowExpressionError} from './errors.js';\nimport type {\n CreateWorkflowExpressionParams,\n ExpressionScalarType,\n ExpressionType,\n ExpressionTypeEnvironment,\n ValidCelExpression,\n WorkflowExpression,\n} from './workflow-expression.js';\n\nconst scalarTypeToCelType = {\n string: 'string',\n int: 'int',\n double: 'double',\n bool: 'bool',\n null: 'null',\n timestamp: 'google.protobuf.Timestamp',\n} satisfies Record<ExpressionScalarType, string>;\n\ntype CelSchema = {\n [field: string]: string | CelSchema;\n};\n\nconst directPathPattern = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/;\n\nexport function createWorkflowExpression(\n params: CreateWorkflowExpressionParams,\n): WorkflowExpression {\n const source = params.source.trim();\n let resultType: ExpressionType | undefined;\n if (source.length === 0) {\n throw new InvalidWorkflowExpressionError({\n source: params.source,\n reason: 'Expression source must not be empty.',\n });\n }\n\n const ast = parseWorkflowExpression(source);\n\n if (params.check.mode === 'typed') {\n const environment = createTypeCheckingEnvironment();\n for (const [name, type] of Object.entries(params.check.typeEnvironment ?? {})) {\n const celType = toCelType(type, environment, name);\n if (typeof celType === 'string') {\n environment.registerVariable(name, celType);\n } else {\n environment.registerVariable({name, schema: celType.schema});\n }\n }\n\n const typeCheckResult = environment.check(source);\n if (!typeCheckResult.valid) {\n throw new InvalidWorkflowExpressionError({\n source,\n reason: typeCheckResult.error?.message ?? 'Expression source did not type-check.',\n });\n }\n if (\n params.check.expectedResultType !== undefined &&\n typeCheckResult.type !== scalarTypeToCelType[params.check.expectedResultType] &&\n !(typeCheckResult.type === 'dyn' && containsFromJsonCall(ast))\n ) {\n throw new InvalidWorkflowExpressionError({\n source,\n reason: `Expression source must return ${scalarTypeToCelType[params.check.expectedResultType]}; got ${typeCheckResult.type ?? 'unknown'}.`,\n });\n }\n resultType =\n resolveKnownPathType(source, params.check.typeEnvironment) ??\n fromCelType(typeCheckResult.type, ast);\n }\n\n return {\n language: 'cel',\n source: source as ValidCelExpression,\n check: params.check.mode,\n ...(resultType === undefined ? {} : {resultType}),\n };\n}\n\nfunction resolveKnownPathType(\n source: string,\n typeEnvironment: ExpressionTypeEnvironment | undefined,\n): ExpressionType | undefined {\n // cel-js erases list element detail from custom result type strings, so recover\n // known direct paths before falling back to its lossy result type conversion.\n if (typeEnvironment === undefined || !directPathPattern.test(source)) {\n return undefined;\n }\n\n const [root, ...path] = source.split('.');\n let current = root === undefined ? undefined : typeEnvironment[root];\n for (const segment of path) {\n if (current === undefined || typeof current === 'string' || current.kind !== 'object') {\n return undefined;\n }\n current = current.fields[segment];\n }\n\n return current;\n}\n\nfunction createTypeCheckingEnvironment(): Environment {\n const environment = new Environment({unlistedVariablesAreDyn: false});\n registerWorkflowFunctions(environment);\n\n // CEL evaluates numeric equality across types, but its static checker normally\n // rejects the same expression. Match validation to the runtime contract.\n environment.registerOperator('double == int', (left: number, right: bigint) => {\n return Number.isInteger(left) && BigInt(left) === right;\n });\n\n // Typed context fields may be absent at runtime while still exposing their\n // known shape when present. CEL's built-in equality overloads do not allow a\n // declared object type to compare with null, so keep null checks aligned with\n // the runtime context contract.\n environment.registerOperator('dyn != null', (left: unknown, right: null) => left !== right);\n\n return environment;\n}\n\nexport function unsafeWorkflowExpressionFromSource(params: {\n source: string;\n check: WorkflowExpression['check'];\n}): WorkflowExpression {\n // Use only when rehydrating a source that was already validated before storage.\n return {\n language: 'cel',\n source: params.source as ValidCelExpression,\n check: params.check,\n };\n}\n\nfunction toCelType(\n type: ExpressionType,\n environment: Environment,\n variableName: string,\n): string | {schema: CelSchema} {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'list') {\n return `list<${toCelListElementType(type.element, environment, variableName)}>`;\n }\n if (type.kind === 'map') return 'map';\n\n return {\n schema: Object.fromEntries(\n Object.entries(type.fields).map(([name, field]) => [name, toCelSchemaType(field)]),\n ),\n };\n}\n\nfunction toCelSchemaType(type: ExpressionType): string | CelSchema {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'list') return `list<${toCelSchemaListElementType(type.element)}>`;\n if (type.kind === 'map') return 'map';\n return Object.fromEntries(\n Object.entries(type.fields).map(([name, field]) => [name, toCelSchemaType(field)]),\n );\n}\n\nfunction toCelSchemaListElementType(type: ExpressionType): string {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'map') return 'map';\n if (type.kind === 'object') return 'dyn';\n return `list<${toCelSchemaListElementType(type.element)}>`;\n}\n\nfunction toCelListElementType(\n type: ExpressionType,\n environment: Environment,\n variableName: string,\n): string {\n if (typeof type === 'string') return scalarTypeToCelType[type];\n if (type.kind === 'map') return 'map';\n if (type.kind === 'object') {\n const typeName = `$${variableName}.item`;\n environment.registerType({\n name: typeName,\n schema: Object.fromEntries(\n Object.entries(type.fields).map(([name, field]) => [name, toCelSchemaType(field)]),\n ),\n });\n return typeName;\n }\n return 'dyn';\n}\n\nfunction fromCelType(type: string | undefined, ast: ASTNode): ExpressionType | undefined {\n if (type === undefined) return undefined;\n\n switch (type) {\n case 'string':\n return 'string';\n case 'int':\n return 'int';\n case 'double':\n return 'double';\n case 'bool':\n return 'bool';\n case 'null':\n return 'null';\n case 'google.protobuf.Timestamp':\n return 'timestamp';\n case 'map':\n return {kind: 'map'};\n case 'dyn':\n // Preserve legacy string fallback for open-map lookups; JSON values stay unknown.\n return containsFromJsonCall(ast) ? undefined : 'string';\n default:\n // cel-js currently exposes custom/list element result types as opaque strings.\n // Keep the outer list shape when present, but erase element detail rather than\n // pretending we can round-trip the original schema.\n if (type.startsWith('list<')) return {kind: 'list', element: {kind: 'map'}};\n return {kind: 'map'};\n }\n}\n\nfunction parseWorkflowExpression(source: string): ASTNode {\n try {\n return parseCel(source).ast;\n } catch (error) {\n throw new InvalidWorkflowExpressionError({\n source,\n reason: error instanceof Error ? error.message : 'Expression source could not be parsed.',\n });\n }\n}\n\nfunction containsFromJsonCall(node: ASTNode): boolean {\n if ((node.op === 'call' || node.op === 'rcall') && node.args[0] === 'fromJson') {\n return true;\n }\n\n return containsFromJsonValue(node.args);\n}\n\nfunction containsFromJsonValue(value: unknown): boolean {\n if (Array.isArray(value)) return value.some(containsFromJsonValue);\n if (typeof value !== 'object' || value === null) return false;\n\n const candidate = value as {readonly args?: unknown; readonly op?: unknown};\n if (candidate.args === undefined || candidate.op === undefined) return false;\n\n return containsFromJsonCall(candidate as ASTNode);\n}\n"],"names":["Environment","parse","parseCel","registerWorkflowFunctions","InvalidWorkflowExpressionError","scalarTypeToCelType","string","int","double","bool","null","timestamp","directPathPattern","createWorkflowExpression","params","source","trim","resultType","length","reason","ast","parseWorkflowExpression","check","mode","environment","createTypeCheckingEnvironment","name","type","Object","entries","typeEnvironment","celType","toCelType","registerVariable","schema","typeCheckResult","valid","error","message","expectedResultType","undefined","containsFromJsonCall","resolveKnownPathType","fromCelType","language","test","root","path","split","current","segment","kind","fields","unlistedVariablesAreDyn","registerOperator","left","right","Number","isInteger","BigInt","unsafeWorkflowExpressionFromSource","variableName","toCelListElementType","element","fromEntries","map","field","toCelSchemaType","toCelSchemaListElementType","typeName","registerType","startsWith","Error","node","op","args","containsFromJsonValue","value","Array","isArray","some","candidate"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { WorkflowExpressionEvaluationError, type WorkflowExpressionEvaluationFai
2
2
  export { evaluateWorkflowExpression, evaluateWorkflowExpressionWithEnvironment, evaluateWorkflowPredicate, evaluateWorkflowPredicateFailClosed, type FailClosedPredicateOutcome, type WorkflowExpressionEnvironment, type WorkflowExpressionEvaluationContext, type WorkflowExpressionEvaluationValue, } from './evaluator/evaluate-workflow-expression.js';
3
3
  export { createRangeEnvironment, MAX_RANGE_ELEMENTS } from './evaluator/range.js';
4
4
  export { rehydrateJsonExpressionRecord, rehydrateJsonExpressionValue, } from './evaluator/rehydrate-json-expression.js';
5
+ export { createWorkflowEnvironment } from './evaluator/workflow-environment.js';
5
6
  export { createWorkflowExpression, unsafeWorkflowExpressionFromSource, } from './expression/create-workflow-expression.js';
6
7
  export { InvalidWorkflowExpressionError, invalidWorkflowExpressionErrorCode, } from './expression/errors.js';
7
8
  export type { CreateWorkflowExpressionParams, ExpressionScalarType, ExpressionType, ExpressionTypeEnvironment, ValidCelExpression, WorkflowExpression, WorkflowExpressionCheck, WorkflowExpressionCheckOptions, } from './expression/workflow-expression.js';
@@ -27,4 +28,5 @@ export { parseWorkflowTemplate } from './template/parse-workflow-template.js';
27
28
  export type { WorkflowTemplateExprSegment, WorkflowTemplateLiteralSegment, WorkflowTemplateSegment, } from './template/template-segment.js';
28
29
  export { type AvailabilitySite, availabilitySites, buildTypedRootsEnvironment, contextRootsForField, type FillTarget, getWorkflowContextAvailability, getWorkflowContextDefinition, getWorkflowContextHost, getWorkflowContextSensitivity, getWorkflowContextTypeEnvironment, getWorkflowInterpolationFieldFailurePolicy, getWorkflowInterpolationFieldSelfReference, getWorkflowPredicateContextRoots, getWorkflowPredicateFieldMinimumFillTarget, getWorkflowPredicateFieldTypeEnvironment, isWorkflowPredicateField, type OpenWorkflowContextDefinition, projectWorkflowPredicateContext, type ReservedRootDefinition, type RunnerWorkflowContextDefinition, resolveContextRootAvailability, resolveContextRootHost, rootsAvailableAt, runnerFillTarget, type TypedWorkflowContextDefinition, unavailableRootsAt, type WorkflowContextAvailabilityReferenceEntry, type WorkflowContextDefinition, type WorkflowContextHost, type WorkflowContextName, type WorkflowContextReservedRoot, type WorkflowContextSensitivity, type WorkflowContextShape, type WorkflowFieldFailurePolicy, type WorkflowInterpolationFailurePolicy, type WorkflowInterpolationField, type WorkflowInterpolationFieldPolicy, type WorkflowJobTypeOverlay, type WorkflowPredicateContextRoot, type WorkflowPredicateField, type WorkflowStepTypeOverlay, workflowContextAvailabilityReference, workflowContextDefinitions, workflowContextHosts, workflowContextNames, workflowContextReservedRoots, workflowContextRootRequiresLiteralKey, workflowContextSensitivities, workflowFieldFailurePolicies, workflowInterpolationFieldAcceptsHost, workflowInterpolationFieldPolicies, workflowInterpolationFields, workflowPredicateContextRoots, workflowPredicateFieldFailurePolicy, workflowPredicateFields, } from './workflow-context/workflow-context.js';
29
30
  export { type WorkflowContextDoc, workflowContextDocs, } from './workflow-context/workflow-context-docs.js';
31
+ export { MAX_JSON_OUTPUT_BYTES, MAX_RANGE_FANOUT_BYTES, } from './workflow-function-registry.js';
30
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ export { WorkflowExpressionEvaluationError, workflowExpressionEvaluationErrorCod
2
2
  export { evaluateWorkflowExpression, evaluateWorkflowExpressionWithEnvironment, evaluateWorkflowPredicate, evaluateWorkflowPredicateFailClosed } from './evaluator/evaluate-workflow-expression.js';
3
3
  export { createRangeEnvironment, MAX_RANGE_ELEMENTS } from './evaluator/range.js';
4
4
  export { rehydrateJsonExpressionRecord, rehydrateJsonExpressionValue } from './evaluator/rehydrate-json-expression.js';
5
+ export { createWorkflowEnvironment } from './evaluator/workflow-environment.js';
5
6
  export { createWorkflowExpression, unsafeWorkflowExpressionFromSource } from './expression/create-workflow-expression.js';
6
7
  export { InvalidWorkflowExpressionError, invalidWorkflowExpressionErrorCode } from './expression/errors.js';
7
8
  export { coerceStepOutputs, jsonSchemaToExpressionType, outputDeclarationsToExpressionFields, outputDeclarationToExpressionType, outputTypes, validateJsonSchema } from './outputs/index.js';
@@ -24,5 +25,6 @@ export { extractCelContextRoots } from './template/extract-cel-context-roots.js'
24
25
  export { parseWorkflowTemplate } from './template/parse-workflow-template.js';
25
26
  export { availabilitySites, buildTypedRootsEnvironment, contextRootsForField, getWorkflowContextAvailability, getWorkflowContextDefinition, getWorkflowContextHost, getWorkflowContextSensitivity, getWorkflowContextTypeEnvironment, getWorkflowInterpolationFieldFailurePolicy, getWorkflowInterpolationFieldSelfReference, getWorkflowPredicateContextRoots, getWorkflowPredicateFieldMinimumFillTarget, getWorkflowPredicateFieldTypeEnvironment, isWorkflowPredicateField, projectWorkflowPredicateContext, resolveContextRootAvailability, resolveContextRootHost, rootsAvailableAt, runnerFillTarget, unavailableRootsAt, workflowContextAvailabilityReference, workflowContextDefinitions, workflowContextHosts, workflowContextNames, workflowContextReservedRoots, workflowContextRootRequiresLiteralKey, workflowContextSensitivities, workflowFieldFailurePolicies, workflowInterpolationFieldAcceptsHost, workflowInterpolationFieldPolicies, workflowInterpolationFields, workflowPredicateContextRoots, workflowPredicateFieldFailurePolicy, workflowPredicateFields } from './workflow-context/workflow-context.js';
26
27
  export { workflowContextDocs } from './workflow-context/workflow-context-docs.js';
28
+ export { MAX_JSON_OUTPUT_BYTES, MAX_RANGE_FANOUT_BYTES } from './workflow-function-registry.js';
27
29
 
28
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n WorkflowExpressionEvaluationError,\n type WorkflowExpressionEvaluationFailureReason,\n workflowExpressionEvaluationErrorCode,\n} from './evaluator/errors.js';\nexport {\n evaluateWorkflowExpression,\n evaluateWorkflowExpressionWithEnvironment,\n evaluateWorkflowPredicate,\n evaluateWorkflowPredicateFailClosed,\n type FailClosedPredicateOutcome,\n type WorkflowExpressionEnvironment,\n type WorkflowExpressionEvaluationContext,\n type WorkflowExpressionEvaluationValue,\n} from './evaluator/evaluate-workflow-expression.js';\nexport {createRangeEnvironment, MAX_RANGE_ELEMENTS} from './evaluator/range.js';\nexport {\n rehydrateJsonExpressionRecord,\n rehydrateJsonExpressionValue,\n} from './evaluator/rehydrate-json-expression.js';\nexport {\n createWorkflowExpression,\n unsafeWorkflowExpressionFromSource,\n} from './expression/create-workflow-expression.js';\nexport {\n InvalidWorkflowExpressionError,\n invalidWorkflowExpressionErrorCode,\n} from './expression/errors.js';\nexport type {\n CreateWorkflowExpressionParams,\n ExpressionScalarType,\n ExpressionType,\n ExpressionTypeEnvironment,\n ValidCelExpression,\n WorkflowExpression,\n WorkflowExpressionCheck,\n WorkflowExpressionCheckOptions,\n} from './expression/workflow-expression.js';\nexport {\n type CoerceStepOutputsResult,\n coerceStepOutputs,\n type JsonSchemaValidationResult,\n jsonSchemaToExpressionType,\n type OutputDeclarations,\n type OutputType,\n type OutputTypeDeclaration,\n outputDeclarationsToExpressionFields,\n outputDeclarationToExpressionType,\n outputTypes,\n type StepOutputCoercionError,\n type StepOutputCoercionErrorReason,\n validateJsonSchema,\n} from './outputs/index.js';\nexport {isBareContextReference} from './plan/bare-reference.js';\nexport {\n analyzeContextKeyAccess,\n analyzeContextRootKeyAccess,\n type ContextKeyAccessAnalysis,\n type ContextKeyAccessReference,\n type ContextKeyAccessViolation,\n type ContextRootKeyAccessAnalysis,\n type ContextRootKeyAccessReference,\n} from './plan/context-key-access.js';\nexport {evaluatePlannedPredicateAtSite} from './plan/evaluate-planned-predicate.js';\nexport {\n capTraceEntries,\n capTraceValue,\n EVALUATION_TRACE_MAX_ENTRIES,\n EVALUATION_TRACE_VALUE_CAP_BYTES,\n type EvaluationTraceEntry,\n type EvaluationTraceLimitEntry,\n type EvaluationTraceRowEntry,\n evaluationTraceEntry,\n predicateTraceEntry,\n} from './plan/evaluation-trace.js';\nexport {extractExactContextRoots} from './plan/extract-exact-context-roots.js';\nexport {\n type FrozenResolvedField,\n freezeResolvedFieldAtSite,\n resolveFieldAtSite,\n type SiteResolvedField,\n type WorkflowTemplateDiagnostic,\n type WorkflowTemplateFailurePolicy,\n} from './plan/freeze.js';\nexport {\n type FrozenPlannedRunCommand,\n freezePlannedRunCommandAtSite,\n} from './plan/freeze-run-command.js';\nexport {\n type FieldPlan,\n type FieldPlanResult,\n type PlanViolation,\n planInterpolationField,\n} from './plan/plan-field.js';\nexport {predicateSourceIsBooleanShaped} from './plan/predicate-shape.js';\nexport type {\n ResolvedField,\n ResolvedFieldDeferredSegment,\n ResolvedFieldLiteralSegment,\n ResolvedFieldSegment,\n} from './plan/resolved-field.js';\nexport {type RoutedExpression, routeExpression} from './plan/route-expression.js';\nexport {\n type ServerEvaluabilityResult,\n type ServerEvaluabilityViolation,\n validateServerEvaluable,\n} from './plan/validate-server-evaluable.js';\nexport {\n WorkflowTemplateResolutionError,\n workflowTemplateResolutionErrorCode,\n} from './resolver/errors.js';\nexport {\n type HoistedPlannedRunCommand,\n hoistPlannedRunCommand,\n type PlannedRunCommandBinding,\n type RunCommandHoistOptions,\n type UnsafeRunInterpolation,\n UnsafeRunInterpolationError,\n unsafeRunInterpolationErrorCode,\n} from './run/hoist-run-command.js';\nexport {\n classifyShellCodePosition,\n type ShellCodePositionAnalysis,\n type ShellCodePositionMatch,\n type ShellReevaluatingConstruct,\n} from './run/shell-code-position.js';\nexport {\n InvalidWorkflowTemplateError,\n invalidWorkflowTemplateErrorCode,\n} from './template/errors.js';\nexport {extractCelContextRoots} from './template/extract-cel-context-roots.js';\nexport {parseWorkflowTemplate} from './template/parse-workflow-template.js';\nexport type {\n WorkflowTemplateExprSegment,\n WorkflowTemplateLiteralSegment,\n WorkflowTemplateSegment,\n} from './template/template-segment.js';\nexport {\n type AvailabilitySite,\n availabilitySites,\n buildTypedRootsEnvironment,\n contextRootsForField,\n type FillTarget,\n getWorkflowContextAvailability,\n getWorkflowContextDefinition,\n getWorkflowContextHost,\n getWorkflowContextSensitivity,\n getWorkflowContextTypeEnvironment,\n getWorkflowInterpolationFieldFailurePolicy,\n getWorkflowInterpolationFieldSelfReference,\n getWorkflowPredicateContextRoots,\n getWorkflowPredicateFieldMinimumFillTarget,\n getWorkflowPredicateFieldTypeEnvironment,\n isWorkflowPredicateField,\n type OpenWorkflowContextDefinition,\n projectWorkflowPredicateContext,\n type ReservedRootDefinition,\n type RunnerWorkflowContextDefinition,\n resolveContextRootAvailability,\n resolveContextRootHost,\n rootsAvailableAt,\n runnerFillTarget,\n type TypedWorkflowContextDefinition,\n unavailableRootsAt,\n type WorkflowContextAvailabilityReferenceEntry,\n type WorkflowContextDefinition,\n type WorkflowContextHost,\n type WorkflowContextName,\n type WorkflowContextReservedRoot,\n type WorkflowContextSensitivity,\n type WorkflowContextShape,\n type WorkflowFieldFailurePolicy,\n type WorkflowInterpolationFailurePolicy,\n type WorkflowInterpolationField,\n type WorkflowInterpolationFieldPolicy,\n type WorkflowJobTypeOverlay,\n type WorkflowPredicateContextRoot,\n type WorkflowPredicateField,\n type WorkflowStepTypeOverlay,\n workflowContextAvailabilityReference,\n workflowContextDefinitions,\n workflowContextHosts,\n workflowContextNames,\n workflowContextReservedRoots,\n workflowContextRootRequiresLiteralKey,\n workflowContextSensitivities,\n workflowFieldFailurePolicies,\n workflowInterpolationFieldAcceptsHost,\n workflowInterpolationFieldPolicies,\n workflowInterpolationFields,\n workflowPredicateContextRoots,\n workflowPredicateFieldFailurePolicy,\n workflowPredicateFields,\n} from './workflow-context/workflow-context.js';\nexport {\n type WorkflowContextDoc,\n workflowContextDocs,\n} from './workflow-context/workflow-context-docs.js';\n"],"names":["WorkflowExpressionEvaluationError","workflowExpressionEvaluationErrorCode","evaluateWorkflowExpression","evaluateWorkflowExpressionWithEnvironment","evaluateWorkflowPredicate","evaluateWorkflowPredicateFailClosed","createRangeEnvironment","MAX_RANGE_ELEMENTS","rehydrateJsonExpressionRecord","rehydrateJsonExpressionValue","createWorkflowExpression","unsafeWorkflowExpressionFromSource","InvalidWorkflowExpressionError","invalidWorkflowExpressionErrorCode","coerceStepOutputs","jsonSchemaToExpressionType","outputDeclarationsToExpressionFields","outputDeclarationToExpressionType","outputTypes","validateJsonSchema","isBareContextReference","analyzeContextKeyAccess","analyzeContextRootKeyAccess","evaluatePlannedPredicateAtSite","capTraceEntries","capTraceValue","EVALUATION_TRACE_MAX_ENTRIES","EVALUATION_TRACE_VALUE_CAP_BYTES","evaluationTraceEntry","predicateTraceEntry","extractExactContextRoots","freezeResolvedFieldAtSite","resolveFieldAtSite","freezePlannedRunCommandAtSite","planInterpolationField","predicateSourceIsBooleanShaped","routeExpression","validateServerEvaluable","WorkflowTemplateResolutionError","workflowTemplateResolutionErrorCode","hoistPlannedRunCommand","UnsafeRunInterpolationError","unsafeRunInterpolationErrorCode","classifyShellCodePosition","InvalidWorkflowTemplateError","invalidWorkflowTemplateErrorCode","extractCelContextRoots","parseWorkflowTemplate","availabilitySites","buildTypedRootsEnvironment","contextRootsForField","getWorkflowContextAvailability","getWorkflowContextDefinition","getWorkflowContextHost","getWorkflowContextSensitivity","getWorkflowContextTypeEnvironment","getWorkflowInterpolationFieldFailurePolicy","getWorkflowInterpolationFieldSelfReference","getWorkflowPredicateContextRoots","getWorkflowPredicateFieldMinimumFillTarget","getWorkflowPredicateFieldTypeEnvironment","isWorkflowPredicateField","projectWorkflowPredicateContext","resolveContextRootAvailability","resolveContextRootHost","rootsAvailableAt","runnerFillTarget","unavailableRootsAt","workflowContextAvailabilityReference","workflowContextDefinitions","workflowContextHosts","workflowContextNames","workflowContextReservedRoots","workflowContextRootRequiresLiteralKey","workflowContextSensitivities","workflowFieldFailurePolicies","workflowInterpolationFieldAcceptsHost","workflowInterpolationFieldPolicies","workflowInterpolationFields","workflowPredicateContextRoots","workflowPredicateFieldFailurePolicy","workflowPredicateFields","workflowContextDocs"],"mappings":"AAAA,SACEA,iCAAiC,EAEjCC,qCAAqC,QAChC,wBAAwB;AAC/B,SACEC,0BAA0B,EAC1BC,yCAAyC,EACzCC,yBAAyB,EACzBC,mCAAmC,QAK9B,8CAA8C;AACrD,SAAQC,sBAAsB,EAAEC,kBAAkB,QAAO,uBAAuB;AAChF,SACEC,6BAA6B,EAC7BC,4BAA4B,QACvB,2CAA2C;AAClD,SACEC,wBAAwB,EACxBC,kCAAkC,QAC7B,6CAA6C;AACpD,SACEC,8BAA8B,EAC9BC,kCAAkC,QAC7B,yBAAyB;AAWhC,SAEEC,iBAAiB,EAEjBC,0BAA0B,EAI1BC,oCAAoC,EACpCC,iCAAiC,EACjCC,WAAW,EAGXC,kBAAkB,QACb,qBAAqB;AAC5B,SAAQC,sBAAsB,QAAO,2BAA2B;AAChE,SACEC,uBAAuB,EACvBC,2BAA2B,QAMtB,+BAA+B;AACtC,SAAQC,8BAA8B,QAAO,uCAAuC;AACpF,SACEC,eAAe,EACfC,aAAa,EACbC,4BAA4B,EAC5BC,gCAAgC,EAIhCC,oBAAoB,EACpBC,mBAAmB,QACd,6BAA6B;AACpC,SAAQC,wBAAwB,QAAO,wCAAwC;AAC/E,SAEEC,yBAAyB,EACzBC,kBAAkB,QAIb,mBAAmB;AAC1B,SAEEC,6BAA6B,QACxB,+BAA+B;AACtC,SAIEC,sBAAsB,QACjB,uBAAuB;AAC9B,SAAQC,8BAA8B,QAAO,4BAA4B;AAOzE,SAA+BC,eAAe,QAAO,6BAA6B;AAClF,SAGEC,uBAAuB,QAClB,sCAAsC;AAC7C,SACEC,+BAA+B,EAC/BC,mCAAmC,QAC9B,uBAAuB;AAC9B,SAEEC,sBAAsB,EAItBC,2BAA2B,EAC3BC,+BAA+B,QAC1B,6BAA6B;AACpC,SACEC,yBAAyB,QAIpB,+BAA+B;AACtC,SACEC,4BAA4B,EAC5BC,gCAAgC,QAC3B,uBAAuB;AAC9B,SAAQC,sBAAsB,QAAO,0CAA0C;AAC/E,SAAQC,qBAAqB,QAAO,wCAAwC;AAM5E,SAEEC,iBAAiB,EACjBC,0BAA0B,EAC1BC,oBAAoB,EAEpBC,8BAA8B,EAC9BC,4BAA4B,EAC5BC,sBAAsB,EACtBC,6BAA6B,EAC7BC,iCAAiC,EACjCC,0CAA0C,EAC1CC,0CAA0C,EAC1CC,gCAAgC,EAChCC,0CAA0C,EAC1CC,wCAAwC,EACxCC,wBAAwB,EAExBC,+BAA+B,EAG/BC,8BAA8B,EAC9BC,sBAAsB,EACtBC,gBAAgB,EAChBC,gBAAgB,EAEhBC,kBAAkB,EAgBlBC,oCAAoC,EACpCC,0BAA0B,EAC1BC,oBAAoB,EACpBC,oBAAoB,EACpBC,4BAA4B,EAC5BC,qCAAqC,EACrCC,4BAA4B,EAC5BC,4BAA4B,EAC5BC,qCAAqC,EACrCC,kCAAkC,EAClCC,2BAA2B,EAC3BC,6BAA6B,EAC7BC,mCAAmC,EACnCC,uBAAuB,QAClB,yCAAyC;AAChD,SAEEC,mBAAmB,QACd,8CAA8C"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n WorkflowExpressionEvaluationError,\n type WorkflowExpressionEvaluationFailureReason,\n workflowExpressionEvaluationErrorCode,\n} from './evaluator/errors.js';\nexport {\n evaluateWorkflowExpression,\n evaluateWorkflowExpressionWithEnvironment,\n evaluateWorkflowPredicate,\n evaluateWorkflowPredicateFailClosed,\n type FailClosedPredicateOutcome,\n type WorkflowExpressionEnvironment,\n type WorkflowExpressionEvaluationContext,\n type WorkflowExpressionEvaluationValue,\n} from './evaluator/evaluate-workflow-expression.js';\nexport {createRangeEnvironment, MAX_RANGE_ELEMENTS} from './evaluator/range.js';\nexport {\n rehydrateJsonExpressionRecord,\n rehydrateJsonExpressionValue,\n} from './evaluator/rehydrate-json-expression.js';\nexport {createWorkflowEnvironment} from './evaluator/workflow-environment.js';\nexport {\n createWorkflowExpression,\n unsafeWorkflowExpressionFromSource,\n} from './expression/create-workflow-expression.js';\nexport {\n InvalidWorkflowExpressionError,\n invalidWorkflowExpressionErrorCode,\n} from './expression/errors.js';\nexport type {\n CreateWorkflowExpressionParams,\n ExpressionScalarType,\n ExpressionType,\n ExpressionTypeEnvironment,\n ValidCelExpression,\n WorkflowExpression,\n WorkflowExpressionCheck,\n WorkflowExpressionCheckOptions,\n} from './expression/workflow-expression.js';\nexport {\n type CoerceStepOutputsResult,\n coerceStepOutputs,\n type JsonSchemaValidationResult,\n jsonSchemaToExpressionType,\n type OutputDeclarations,\n type OutputType,\n type OutputTypeDeclaration,\n outputDeclarationsToExpressionFields,\n outputDeclarationToExpressionType,\n outputTypes,\n type StepOutputCoercionError,\n type StepOutputCoercionErrorReason,\n validateJsonSchema,\n} from './outputs/index.js';\nexport {isBareContextReference} from './plan/bare-reference.js';\nexport {\n analyzeContextKeyAccess,\n analyzeContextRootKeyAccess,\n type ContextKeyAccessAnalysis,\n type ContextKeyAccessReference,\n type ContextKeyAccessViolation,\n type ContextRootKeyAccessAnalysis,\n type ContextRootKeyAccessReference,\n} from './plan/context-key-access.js';\nexport {evaluatePlannedPredicateAtSite} from './plan/evaluate-planned-predicate.js';\nexport {\n capTraceEntries,\n capTraceValue,\n EVALUATION_TRACE_MAX_ENTRIES,\n EVALUATION_TRACE_VALUE_CAP_BYTES,\n type EvaluationTraceEntry,\n type EvaluationTraceLimitEntry,\n type EvaluationTraceRowEntry,\n evaluationTraceEntry,\n predicateTraceEntry,\n} from './plan/evaluation-trace.js';\nexport {extractExactContextRoots} from './plan/extract-exact-context-roots.js';\nexport {\n type FrozenResolvedField,\n freezeResolvedFieldAtSite,\n resolveFieldAtSite,\n type SiteResolvedField,\n type WorkflowTemplateDiagnostic,\n type WorkflowTemplateFailurePolicy,\n} from './plan/freeze.js';\nexport {\n type FrozenPlannedRunCommand,\n freezePlannedRunCommandAtSite,\n} from './plan/freeze-run-command.js';\nexport {\n type FieldPlan,\n type FieldPlanResult,\n type PlanViolation,\n planInterpolationField,\n} from './plan/plan-field.js';\nexport {predicateSourceIsBooleanShaped} from './plan/predicate-shape.js';\nexport type {\n ResolvedField,\n ResolvedFieldDeferredSegment,\n ResolvedFieldLiteralSegment,\n ResolvedFieldSegment,\n} from './plan/resolved-field.js';\nexport {type RoutedExpression, routeExpression} from './plan/route-expression.js';\nexport {\n type ServerEvaluabilityResult,\n type ServerEvaluabilityViolation,\n validateServerEvaluable,\n} from './plan/validate-server-evaluable.js';\nexport {\n WorkflowTemplateResolutionError,\n workflowTemplateResolutionErrorCode,\n} from './resolver/errors.js';\nexport {\n type HoistedPlannedRunCommand,\n hoistPlannedRunCommand,\n type PlannedRunCommandBinding,\n type RunCommandHoistOptions,\n type UnsafeRunInterpolation,\n UnsafeRunInterpolationError,\n unsafeRunInterpolationErrorCode,\n} from './run/hoist-run-command.js';\nexport {\n classifyShellCodePosition,\n type ShellCodePositionAnalysis,\n type ShellCodePositionMatch,\n type ShellReevaluatingConstruct,\n} from './run/shell-code-position.js';\nexport {\n InvalidWorkflowTemplateError,\n invalidWorkflowTemplateErrorCode,\n} from './template/errors.js';\nexport {extractCelContextRoots} from './template/extract-cel-context-roots.js';\nexport {parseWorkflowTemplate} from './template/parse-workflow-template.js';\nexport type {\n WorkflowTemplateExprSegment,\n WorkflowTemplateLiteralSegment,\n WorkflowTemplateSegment,\n} from './template/template-segment.js';\nexport {\n type AvailabilitySite,\n availabilitySites,\n buildTypedRootsEnvironment,\n contextRootsForField,\n type FillTarget,\n getWorkflowContextAvailability,\n getWorkflowContextDefinition,\n getWorkflowContextHost,\n getWorkflowContextSensitivity,\n getWorkflowContextTypeEnvironment,\n getWorkflowInterpolationFieldFailurePolicy,\n getWorkflowInterpolationFieldSelfReference,\n getWorkflowPredicateContextRoots,\n getWorkflowPredicateFieldMinimumFillTarget,\n getWorkflowPredicateFieldTypeEnvironment,\n isWorkflowPredicateField,\n type OpenWorkflowContextDefinition,\n projectWorkflowPredicateContext,\n type ReservedRootDefinition,\n type RunnerWorkflowContextDefinition,\n resolveContextRootAvailability,\n resolveContextRootHost,\n rootsAvailableAt,\n runnerFillTarget,\n type TypedWorkflowContextDefinition,\n unavailableRootsAt,\n type WorkflowContextAvailabilityReferenceEntry,\n type WorkflowContextDefinition,\n type WorkflowContextHost,\n type WorkflowContextName,\n type WorkflowContextReservedRoot,\n type WorkflowContextSensitivity,\n type WorkflowContextShape,\n type WorkflowFieldFailurePolicy,\n type WorkflowInterpolationFailurePolicy,\n type WorkflowInterpolationField,\n type WorkflowInterpolationFieldPolicy,\n type WorkflowJobTypeOverlay,\n type WorkflowPredicateContextRoot,\n type WorkflowPredicateField,\n type WorkflowStepTypeOverlay,\n workflowContextAvailabilityReference,\n workflowContextDefinitions,\n workflowContextHosts,\n workflowContextNames,\n workflowContextReservedRoots,\n workflowContextRootRequiresLiteralKey,\n workflowContextSensitivities,\n workflowFieldFailurePolicies,\n workflowInterpolationFieldAcceptsHost,\n workflowInterpolationFieldPolicies,\n workflowInterpolationFields,\n workflowPredicateContextRoots,\n workflowPredicateFieldFailurePolicy,\n workflowPredicateFields,\n} from './workflow-context/workflow-context.js';\nexport {\n type WorkflowContextDoc,\n workflowContextDocs,\n} from './workflow-context/workflow-context-docs.js';\nexport {\n MAX_JSON_OUTPUT_BYTES,\n MAX_RANGE_FANOUT_BYTES,\n} from './workflow-function-registry.js';\n"],"names":["WorkflowExpressionEvaluationError","workflowExpressionEvaluationErrorCode","evaluateWorkflowExpression","evaluateWorkflowExpressionWithEnvironment","evaluateWorkflowPredicate","evaluateWorkflowPredicateFailClosed","createRangeEnvironment","MAX_RANGE_ELEMENTS","rehydrateJsonExpressionRecord","rehydrateJsonExpressionValue","createWorkflowEnvironment","createWorkflowExpression","unsafeWorkflowExpressionFromSource","InvalidWorkflowExpressionError","invalidWorkflowExpressionErrorCode","coerceStepOutputs","jsonSchemaToExpressionType","outputDeclarationsToExpressionFields","outputDeclarationToExpressionType","outputTypes","validateJsonSchema","isBareContextReference","analyzeContextKeyAccess","analyzeContextRootKeyAccess","evaluatePlannedPredicateAtSite","capTraceEntries","capTraceValue","EVALUATION_TRACE_MAX_ENTRIES","EVALUATION_TRACE_VALUE_CAP_BYTES","evaluationTraceEntry","predicateTraceEntry","extractExactContextRoots","freezeResolvedFieldAtSite","resolveFieldAtSite","freezePlannedRunCommandAtSite","planInterpolationField","predicateSourceIsBooleanShaped","routeExpression","validateServerEvaluable","WorkflowTemplateResolutionError","workflowTemplateResolutionErrorCode","hoistPlannedRunCommand","UnsafeRunInterpolationError","unsafeRunInterpolationErrorCode","classifyShellCodePosition","InvalidWorkflowTemplateError","invalidWorkflowTemplateErrorCode","extractCelContextRoots","parseWorkflowTemplate","availabilitySites","buildTypedRootsEnvironment","contextRootsForField","getWorkflowContextAvailability","getWorkflowContextDefinition","getWorkflowContextHost","getWorkflowContextSensitivity","getWorkflowContextTypeEnvironment","getWorkflowInterpolationFieldFailurePolicy","getWorkflowInterpolationFieldSelfReference","getWorkflowPredicateContextRoots","getWorkflowPredicateFieldMinimumFillTarget","getWorkflowPredicateFieldTypeEnvironment","isWorkflowPredicateField","projectWorkflowPredicateContext","resolveContextRootAvailability","resolveContextRootHost","rootsAvailableAt","runnerFillTarget","unavailableRootsAt","workflowContextAvailabilityReference","workflowContextDefinitions","workflowContextHosts","workflowContextNames","workflowContextReservedRoots","workflowContextRootRequiresLiteralKey","workflowContextSensitivities","workflowFieldFailurePolicies","workflowInterpolationFieldAcceptsHost","workflowInterpolationFieldPolicies","workflowInterpolationFields","workflowPredicateContextRoots","workflowPredicateFieldFailurePolicy","workflowPredicateFields","workflowContextDocs","MAX_JSON_OUTPUT_BYTES","MAX_RANGE_FANOUT_BYTES"],"mappings":"AAAA,SACEA,iCAAiC,EAEjCC,qCAAqC,QAChC,wBAAwB;AAC/B,SACEC,0BAA0B,EAC1BC,yCAAyC,EACzCC,yBAAyB,EACzBC,mCAAmC,QAK9B,8CAA8C;AACrD,SAAQC,sBAAsB,EAAEC,kBAAkB,QAAO,uBAAuB;AAChF,SACEC,6BAA6B,EAC7BC,4BAA4B,QACvB,2CAA2C;AAClD,SAAQC,yBAAyB,QAAO,sCAAsC;AAC9E,SACEC,wBAAwB,EACxBC,kCAAkC,QAC7B,6CAA6C;AACpD,SACEC,8BAA8B,EAC9BC,kCAAkC,QAC7B,yBAAyB;AAWhC,SAEEC,iBAAiB,EAEjBC,0BAA0B,EAI1BC,oCAAoC,EACpCC,iCAAiC,EACjCC,WAAW,EAGXC,kBAAkB,QACb,qBAAqB;AAC5B,SAAQC,sBAAsB,QAAO,2BAA2B;AAChE,SACEC,uBAAuB,EACvBC,2BAA2B,QAMtB,+BAA+B;AACtC,SAAQC,8BAA8B,QAAO,uCAAuC;AACpF,SACEC,eAAe,EACfC,aAAa,EACbC,4BAA4B,EAC5BC,gCAAgC,EAIhCC,oBAAoB,EACpBC,mBAAmB,QACd,6BAA6B;AACpC,SAAQC,wBAAwB,QAAO,wCAAwC;AAC/E,SAEEC,yBAAyB,EACzBC,kBAAkB,QAIb,mBAAmB;AAC1B,SAEEC,6BAA6B,QACxB,+BAA+B;AACtC,SAIEC,sBAAsB,QACjB,uBAAuB;AAC9B,SAAQC,8BAA8B,QAAO,4BAA4B;AAOzE,SAA+BC,eAAe,QAAO,6BAA6B;AAClF,SAGEC,uBAAuB,QAClB,sCAAsC;AAC7C,SACEC,+BAA+B,EAC/BC,mCAAmC,QAC9B,uBAAuB;AAC9B,SAEEC,sBAAsB,EAItBC,2BAA2B,EAC3BC,+BAA+B,QAC1B,6BAA6B;AACpC,SACEC,yBAAyB,QAIpB,+BAA+B;AACtC,SACEC,4BAA4B,EAC5BC,gCAAgC,QAC3B,uBAAuB;AAC9B,SAAQC,sBAAsB,QAAO,0CAA0C;AAC/E,SAAQC,qBAAqB,QAAO,wCAAwC;AAM5E,SAEEC,iBAAiB,EACjBC,0BAA0B,EAC1BC,oBAAoB,EAEpBC,8BAA8B,EAC9BC,4BAA4B,EAC5BC,sBAAsB,EACtBC,6BAA6B,EAC7BC,iCAAiC,EACjCC,0CAA0C,EAC1CC,0CAA0C,EAC1CC,gCAAgC,EAChCC,0CAA0C,EAC1CC,wCAAwC,EACxCC,wBAAwB,EAExBC,+BAA+B,EAG/BC,8BAA8B,EAC9BC,sBAAsB,EACtBC,gBAAgB,EAChBC,gBAAgB,EAEhBC,kBAAkB,EAgBlBC,oCAAoC,EACpCC,0BAA0B,EAC1BC,oBAAoB,EACpBC,oBAAoB,EACpBC,4BAA4B,EAC5BC,qCAAqC,EACrCC,4BAA4B,EAC5BC,4BAA4B,EAC5BC,qCAAqC,EACrCC,kCAAkC,EAClCC,2BAA2B,EAC3BC,6BAA6B,EAC7BC,mCAAmC,EACnCC,uBAAuB,QAClB,yCAAyC;AAChD,SAEEC,mBAAmB,QACd,8CAA8C;AACrD,SACEC,qBAAqB,EACrBC,sBAAsB,QACjB,kCAAkC"}
package/dist/json.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function stringifyBigint(_key: string, value: unknown): unknown;
2
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAKrE"}
package/dist/json.js ADDED
@@ -0,0 +1,7 @@
1
+ export function stringifyBigint(_key, value) {
2
+ if (typeof value !== 'bigint') return value;
3
+ const numberValue = Number(value);
4
+ return Number.isSafeInteger(numberValue) ? numberValue : value.toString();
5
+ }
6
+
7
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/json.ts"],"sourcesContent":["export function stringifyBigint(_key: string, value: unknown): unknown {\n if (typeof value !== 'bigint') return value;\n\n const numberValue = Number(value);\n return Number.isSafeInteger(numberValue) ? numberValue : value.toString();\n}\n"],"names":["stringifyBigint","_key","value","numberValue","Number","isSafeInteger","toString"],"mappings":"AAAA,OAAO,SAASA,gBAAgBC,IAAY,EAAEC,KAAc;IAC1D,IAAI,OAAOA,UAAU,UAAU,OAAOA;IAEtC,MAAMC,cAAcC,OAAOF;IAC3B,OAAOE,OAAOC,aAAa,CAACF,eAAeA,cAAcD,MAAMI,QAAQ;AACzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"coerce-workflow-value-to-string.d.ts","sourceRoot":"","sources":["../../src/resolver/coerce-workflow-value-to-string.ts"],"names":[],"mappings":"AAAA,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASlE"}
1
+ {"version":3,"file":"coerce-workflow-value-to-string.d.ts","sourceRoot":"","sources":["../../src/resolver/coerce-workflow-value-to-string.ts"],"names":[],"mappings":"AAEA,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASlE"}