@xemahq/dsl 0.1.1
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/LICENSE +201 -0
- package/dist/deliverable-spec/index.d.ts +3 -0
- package/dist/deliverable-spec/index.d.ts.map +1 -0
- package/dist/deliverable-spec/index.js +19 -0
- package/dist/deliverable-spec/index.js.map +1 -0
- package/dist/deliverable-spec/lib/schema.d.ts +151 -0
- package/dist/deliverable-spec/lib/schema.d.ts.map +1 -0
- package/dist/deliverable-spec/lib/schema.js +139 -0
- package/dist/deliverable-spec/lib/schema.js.map +1 -0
- package/dist/deliverable-spec/lib/types.d.ts +8 -0
- package/dist/deliverable-spec/lib/types.d.ts.map +1 -0
- package/dist/deliverable-spec/lib/types.js +3 -0
- package/dist/deliverable-spec/lib/types.js.map +1 -0
- package/dist/payload-codec/index.d.ts +8 -0
- package/dist/payload-codec/index.d.ts.map +1 -0
- package/dist/payload-codec/index.js +27 -0
- package/dist/payload-codec/index.js.map +1 -0
- package/dist/payload-codec/lib/blob-store.d.ts +37 -0
- package/dist/payload-codec/lib/blob-store.d.ts.map +1 -0
- package/dist/payload-codec/lib/blob-store.js +0 -0
- package/dist/payload-codec/lib/blob-store.js.map +1 -0
- package/dist/payload-codec/lib/codec-context.d.ts +6 -0
- package/dist/payload-codec/lib/codec-context.d.ts.map +1 -0
- package/dist/payload-codec/lib/codec-context.js +16 -0
- package/dist/payload-codec/lib/codec-context.js.map +1 -0
- package/dist/payload-codec/lib/codec.d.ts +51 -0
- package/dist/payload-codec/lib/codec.d.ts.map +1 -0
- package/dist/payload-codec/lib/codec.js +330 -0
- package/dist/payload-codec/lib/codec.js.map +1 -0
- package/dist/payload-codec/lib/enums.d.ts +18 -0
- package/dist/payload-codec/lib/enums.d.ts.map +1 -0
- package/dist/payload-codec/lib/enums.js +23 -0
- package/dist/payload-codec/lib/enums.js.map +1 -0
- package/dist/payload-codec/lib/errors.d.ts +18 -0
- package/dist/payload-codec/lib/errors.d.ts.map +1 -0
- package/dist/payload-codec/lib/errors.js +39 -0
- package/dist/payload-codec/lib/errors.js.map +1 -0
- package/dist/payload-codec/lib/http-blob-store.d.ts +21 -0
- package/dist/payload-codec/lib/http-blob-store.d.ts.map +1 -0
- package/dist/payload-codec/lib/http-blob-store.js +139 -0
- package/dist/payload-codec/lib/http-blob-store.js.map +1 -0
- package/dist/payload-codec/lib/lru-cache.d.ts +12 -0
- package/dist/payload-codec/lib/lru-cache.d.ts.map +1 -0
- package/dist/payload-codec/lib/lru-cache.js +59 -0
- package/dist/payload-codec/lib/lru-cache.js.map +1 -0
- package/dist/schema/action.schema.json +181 -0
- package/dist/schema/reusable-workflow.schema.json +46 -0
- package/dist/schema/workflow.schema.json +373 -0
- package/dist/workflow/index.d.ts +14 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +49 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/lib/action-input-validator.d.ts +10 -0
- package/dist/workflow/lib/action-input-validator.d.ts.map +1 -0
- package/dist/workflow/lib/action-input-validator.js +69 -0
- package/dist/workflow/lib/action-input-validator.js.map +1 -0
- package/dist/workflow/lib/compiler/action-shape.d.ts +5 -0
- package/dist/workflow/lib/compiler/action-shape.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/action-shape.js +43 -0
- package/dist/workflow/lib/compiler/action-shape.js.map +1 -0
- package/dist/workflow/lib/compiler/canonical-json.d.ts +3 -0
- package/dist/workflow/lib/compiler/canonical-json.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/canonical-json.js +45 -0
- package/dist/workflow/lib/compiler/canonical-json.js.map +1 -0
- package/dist/workflow/lib/compiler/compile.d.ts +4 -0
- package/dist/workflow/lib/compiler/compile.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/compile.js +794 -0
- package/dist/workflow/lib/compiler/compile.js.map +1 -0
- package/dist/workflow/lib/compiler/concurrency.d.ts +5 -0
- package/dist/workflow/lib/compiler/concurrency.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/concurrency.js +104 -0
- package/dist/workflow/lib/compiler/concurrency.js.map +1 -0
- package/dist/workflow/lib/compiler/dag.d.ts +10 -0
- package/dist/workflow/lib/compiler/dag.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/dag.js +74 -0
- package/dist/workflow/lib/compiler/dag.js.map +1 -0
- package/dist/workflow/lib/compiler/index.d.ts +6 -0
- package/dist/workflow/lib/compiler/index.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/index.js +14 -0
- package/dist/workflow/lib/compiler/index.js.map +1 -0
- package/dist/workflow/lib/compiler/inputs.d.ts +4 -0
- package/dist/workflow/lib/compiler/inputs.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/inputs.js +108 -0
- package/dist/workflow/lib/compiler/inputs.js.map +1 -0
- package/dist/workflow/lib/compiler/installation-resource-validator.d.ts +9 -0
- package/dist/workflow/lib/compiler/installation-resource-validator.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/installation-resource-validator.js +76 -0
- package/dist/workflow/lib/compiler/installation-resource-validator.js.map +1 -0
- package/dist/workflow/lib/compiler/manifest-source.d.ts +4 -0
- package/dist/workflow/lib/compiler/manifest-source.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/manifest-source.js +100 -0
- package/dist/workflow/lib/compiler/manifest-source.js.map +1 -0
- package/dist/workflow/lib/compiler/matrix.d.ts +4 -0
- package/dist/workflow/lib/compiler/matrix.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/matrix.js +76 -0
- package/dist/workflow/lib/compiler/matrix.js.map +1 -0
- package/dist/workflow/lib/compiler/mount-plan.d.ts +4 -0
- package/dist/workflow/lib/compiler/mount-plan.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/mount-plan.js +96 -0
- package/dist/workflow/lib/compiler/mount-plan.js.map +1 -0
- package/dist/workflow/lib/compiler/payload-reach-in.d.ts +14 -0
- package/dist/workflow/lib/compiler/payload-reach-in.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/payload-reach-in.js +273 -0
- package/dist/workflow/lib/compiler/payload-reach-in.js.map +1 -0
- package/dist/workflow/lib/compiler/permissions.d.ts +6 -0
- package/dist/workflow/lib/compiler/permissions.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/permissions.js +43 -0
- package/dist/workflow/lib/compiler/permissions.js.map +1 -0
- package/dist/workflow/lib/compiler/retry-timeout.d.ts +6 -0
- package/dist/workflow/lib/compiler/retry-timeout.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/retry-timeout.js +64 -0
- package/dist/workflow/lib/compiler/retry-timeout.js.map +1 -0
- package/dist/workflow/lib/compiler/review-step.d.ts +18 -0
- package/dist/workflow/lib/compiler/review-step.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/review-step.js +247 -0
- package/dist/workflow/lib/compiler/review-step.js.map +1 -0
- package/dist/workflow/lib/compiler/types.d.ts +42 -0
- package/dist/workflow/lib/compiler/types.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/types.js +3 -0
- package/dist/workflow/lib/compiler/types.js.map +1 -0
- package/dist/workflow/lib/compiler/variable-requirements.d.ts +5 -0
- package/dist/workflow/lib/compiler/variable-requirements.d.ts.map +1 -0
- package/dist/workflow/lib/compiler/variable-requirements.js +119 -0
- package/dist/workflow/lib/compiler/variable-requirements.js.map +1 -0
- package/dist/workflow/lib/deliverable-spec-keys.d.ts +3 -0
- package/dist/workflow/lib/deliverable-spec-keys.d.ts.map +1 -0
- package/dist/workflow/lib/deliverable-spec-keys.js +90 -0
- package/dist/workflow/lib/deliverable-spec-keys.js.map +1 -0
- package/dist/workflow/lib/dispatch-inputs/index.d.ts +23 -0
- package/dist/workflow/lib/dispatch-inputs/index.d.ts.map +1 -0
- package/dist/workflow/lib/dispatch-inputs/index.js +106 -0
- package/dist/workflow/lib/dispatch-inputs/index.js.map +1 -0
- package/dist/workflow/lib/dispatch-inputs/to-json-schema.d.ts +3 -0
- package/dist/workflow/lib/dispatch-inputs/to-json-schema.d.ts.map +1 -0
- package/dist/workflow/lib/dispatch-inputs/to-json-schema.js +43 -0
- package/dist/workflow/lib/dispatch-inputs/to-json-schema.js.map +1 -0
- package/dist/workflow/lib/duration.d.ts +2 -0
- package/dist/workflow/lib/duration.d.ts.map +1 -0
- package/dist/workflow/lib/duration.js +26 -0
- package/dist/workflow/lib/duration.js.map +1 -0
- package/dist/workflow/lib/errors.d.ts +9 -0
- package/dist/workflow/lib/errors.d.ts.map +1 -0
- package/dist/workflow/lib/errors.js +28 -0
- package/dist/workflow/lib/errors.js.map +1 -0
- package/dist/workflow/lib/expression/ast.d.ts +61 -0
- package/dist/workflow/lib/expression/ast.d.ts.map +1 -0
- package/dist/workflow/lib/expression/ast.js +34 -0
- package/dist/workflow/lib/expression/ast.js.map +1 -0
- package/dist/workflow/lib/expression/context.d.ts +63 -0
- package/dist/workflow/lib/expression/context.d.ts.map +1 -0
- package/dist/workflow/lib/expression/context.js +32 -0
- package/dist/workflow/lib/expression/context.js.map +1 -0
- package/dist/workflow/lib/expression/evaluator.d.ts +5 -0
- package/dist/workflow/lib/expression/evaluator.d.ts.map +1 -0
- package/dist/workflow/lib/expression/evaluator.js +291 -0
- package/dist/workflow/lib/expression/evaluator.js.map +1 -0
- package/dist/workflow/lib/expression/index.d.ts +9 -0
- package/dist/workflow/lib/expression/index.d.ts.map +1 -0
- package/dist/workflow/lib/expression/index.js +26 -0
- package/dist/workflow/lib/expression/index.js.map +1 -0
- package/dist/workflow/lib/expression/interpolation.d.ts +9 -0
- package/dist/workflow/lib/expression/interpolation.d.ts.map +1 -0
- package/dist/workflow/lib/expression/interpolation.js +51 -0
- package/dist/workflow/lib/expression/interpolation.js.map +1 -0
- package/dist/workflow/lib/expression/parser.d.ts +4 -0
- package/dist/workflow/lib/expression/parser.d.ts.map +1 -0
- package/dist/workflow/lib/expression/parser.js +203 -0
- package/dist/workflow/lib/expression/parser.js.map +1 -0
- package/dist/workflow/lib/expression/template.d.ts +18 -0
- package/dist/workflow/lib/expression/template.d.ts.map +1 -0
- package/dist/workflow/lib/expression/template.js +63 -0
- package/dist/workflow/lib/expression/template.js.map +1 -0
- package/dist/workflow/lib/expression/tokenizer.d.ts +3 -0
- package/dist/workflow/lib/expression/tokenizer.d.ts.map +1 -0
- package/dist/workflow/lib/expression/tokenizer.js +153 -0
- package/dist/workflow/lib/expression/tokenizer.js.map +1 -0
- package/dist/workflow/lib/expression/tokens.d.ts +25 -0
- package/dist/workflow/lib/expression/tokens.d.ts.map +1 -0
- package/dist/workflow/lib/expression/tokens.js +24 -0
- package/dist/workflow/lib/expression/tokens.js.map +1 -0
- package/dist/workflow/lib/expression/walk-artifact-refs.d.ts +5 -0
- package/dist/workflow/lib/expression/walk-artifact-refs.d.ts.map +1 -0
- package/dist/workflow/lib/expression/walk-artifact-refs.js +138 -0
- package/dist/workflow/lib/expression/walk-artifact-refs.js.map +1 -0
- package/dist/workflow/lib/installation-resource-kind.d.ts +14 -0
- package/dist/workflow/lib/installation-resource-kind.d.ts.map +1 -0
- package/dist/workflow/lib/installation-resource-kind.js +59 -0
- package/dist/workflow/lib/installation-resource-kind.js.map +1 -0
- package/dist/workflow/lib/schemas-loader.d.ts +4 -0
- package/dist/workflow/lib/schemas-loader.d.ts.map +1 -0
- package/dist/workflow/lib/schemas-loader.js +36 -0
- package/dist/workflow/lib/schemas-loader.js.map +1 -0
- package/dist/workflow/lib/serializer.d.ts +3 -0
- package/dist/workflow/lib/serializer.d.ts.map +1 -0
- package/dist/workflow/lib/serializer.js +15 -0
- package/dist/workflow/lib/serializer.js.map +1 -0
- package/dist/workflow/lib/types.d.ts +179 -0
- package/dist/workflow/lib/types.d.ts.map +1 -0
- package/dist/workflow/lib/types.js +3 -0
- package/dist/workflow/lib/types.js.map +1 -0
- package/dist/workflow/lib/validate.d.ts +8 -0
- package/dist/workflow/lib/validate.d.ts.map +1 -0
- package/dist/workflow/lib/validate.js +119 -0
- package/dist/workflow/lib/validate.js.map +1 -0
- package/dist/workspace-manifest/index.d.ts +6 -0
- package/dist/workspace-manifest/index.d.ts.map +1 -0
- package/dist/workspace-manifest/index.js +22 -0
- package/dist/workspace-manifest/index.js.map +1 -0
- package/dist/workspace-manifest/lib/compile.d.ts +8 -0
- package/dist/workspace-manifest/lib/compile.d.ts.map +1 -0
- package/dist/workspace-manifest/lib/compile.js +439 -0
- package/dist/workspace-manifest/lib/compile.js.map +1 -0
- package/dist/workspace-manifest/lib/interpolate.d.ts +12 -0
- package/dist/workspace-manifest/lib/interpolate.d.ts.map +1 -0
- package/dist/workspace-manifest/lib/interpolate.js +81 -0
- package/dist/workspace-manifest/lib/interpolate.js.map +1 -0
- package/dist/workspace-manifest/lib/resolve-extends.d.ts +10 -0
- package/dist/workspace-manifest/lib/resolve-extends.d.ts.map +1 -0
- package/dist/workspace-manifest/lib/resolve-extends.js +108 -0
- package/dist/workspace-manifest/lib/resolve-extends.js.map +1 -0
- package/dist/workspace-manifest/lib/schema.d.ts +710 -0
- package/dist/workspace-manifest/lib/schema.d.ts.map +1 -0
- package/dist/workspace-manifest/lib/schema.js +355 -0
- package/dist/workspace-manifest/lib/schema.js.map +1 -0
- package/dist/workspace-manifest/lib/types.d.ts +153 -0
- package/dist/workspace-manifest/lib/types.d.ts.map +1 -0
- package/dist/workspace-manifest/lib/types.js +10 -0
- package/dist/workspace-manifest/lib/types.js.map +1 -0
- package/package.json +79 -0
- package/schema/action.schema.json +181 -0
- package/schema/reusable-workflow.schema.json +46 -0
- package/schema/workflow.schema.json +373 -0
- package/src/deliverable-spec/index.ts +19 -0
- package/src/deliverable-spec/lib/schema.ts +248 -0
- package/src/deliverable-spec/lib/types.ts +26 -0
- package/src/payload-codec/index.ts +40 -0
- package/src/payload-codec/lib/blob-store.ts +0 -0
- package/src/payload-codec/lib/codec-context.ts +38 -0
- package/src/payload-codec/lib/codec.ts +593 -0
- package/src/payload-codec/lib/enums.ts +58 -0
- package/src/payload-codec/lib/errors.ts +54 -0
- package/src/payload-codec/lib/http-blob-store.ts +257 -0
- package/src/payload-codec/lib/lru-cache.ts +81 -0
- package/src/workflow/index.ts +98 -0
- package/src/workflow/lib/action-input-validator.ts +160 -0
- package/src/workflow/lib/compiler/action-shape.ts +71 -0
- package/src/workflow/lib/compiler/canonical-json.ts +53 -0
- package/src/workflow/lib/compiler/compile.ts +1518 -0
- package/src/workflow/lib/compiler/concurrency.ts +223 -0
- package/src/workflow/lib/compiler/dag.ts +108 -0
- package/src/workflow/lib/compiler/index.ts +10 -0
- package/src/workflow/lib/compiler/inputs.ts +199 -0
- package/src/workflow/lib/compiler/installation-resource-validator.ts +114 -0
- package/src/workflow/lib/compiler/manifest-source.ts +176 -0
- package/src/workflow/lib/compiler/matrix.ts +135 -0
- package/src/workflow/lib/compiler/mount-plan.ts +202 -0
- package/src/workflow/lib/compiler/payload-reach-in.ts +497 -0
- package/src/workflow/lib/compiler/permissions.ts +64 -0
- package/src/workflow/lib/compiler/retry-timeout.ts +105 -0
- package/src/workflow/lib/compiler/review-step.ts +517 -0
- package/src/workflow/lib/compiler/types.ts +170 -0
- package/src/workflow/lib/compiler/variable-requirements.ts +208 -0
- package/src/workflow/lib/deliverable-spec-keys.ts +109 -0
- package/src/workflow/lib/dispatch-inputs/index.ts +160 -0
- package/src/workflow/lib/dispatch-inputs/to-json-schema.ts +60 -0
- package/src/workflow/lib/duration.ts +48 -0
- package/src/workflow/lib/errors.ts +37 -0
- package/src/workflow/lib/expression/ast.ts +108 -0
- package/src/workflow/lib/expression/context.ts +148 -0
- package/src/workflow/lib/expression/evaluator.ts +492 -0
- package/src/workflow/lib/expression/index.ts +28 -0
- package/src/workflow/lib/expression/interpolation.ts +84 -0
- package/src/workflow/lib/expression/parser.ts +264 -0
- package/src/workflow/lib/expression/template.ts +117 -0
- package/src/workflow/lib/expression/tokenizer.ts +200 -0
- package/src/workflow/lib/expression/tokens.ts +30 -0
- package/src/workflow/lib/expression/walk-artifact-refs.ts +232 -0
- package/src/workflow/lib/installation-resource-kind.ts +107 -0
- package/src/workflow/lib/schemas-loader.ts +64 -0
- package/src/workflow/lib/serializer.ts +30 -0
- package/src/workflow/lib/types.ts +361 -0
- package/src/workflow/lib/validate.ts +199 -0
- package/src/workspace-manifest/index.ts +27 -0
- package/src/workspace-manifest/lib/compile.ts +608 -0
- package/src/workspace-manifest/lib/interpolate.ts +140 -0
- package/src/workspace-manifest/lib/resolve-extends.ts +260 -0
- package/src/workspace-manifest/lib/schema.ts +612 -0
- package/src/workspace-manifest/lib/types.ts +392 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST node kinds for parsed expressions. Closed set.
|
|
3
|
+
*/
|
|
4
|
+
export enum ExpressionNodeKind {
|
|
5
|
+
LITERAL = 'literal',
|
|
6
|
+
IDENTIFIER = 'identifier',
|
|
7
|
+
MEMBER = 'member',
|
|
8
|
+
INDEX = 'index',
|
|
9
|
+
CALL = 'call',
|
|
10
|
+
UNARY_NOT = 'unary-not',
|
|
11
|
+
BINARY_EQ = 'binary-eq',
|
|
12
|
+
BINARY_NEQ = 'binary-neq',
|
|
13
|
+
BINARY_AND = 'binary-and',
|
|
14
|
+
BINARY_OR = 'binary-or',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Closed set of root identifier bindings allowed in expressions. */
|
|
18
|
+
export enum ExpressionRoot {
|
|
19
|
+
NEEDS = 'needs',
|
|
20
|
+
MATRIX = 'matrix',
|
|
21
|
+
INPUTS = 'inputs',
|
|
22
|
+
VARS = 'vars',
|
|
23
|
+
/**
|
|
24
|
+
* Project / org secret variables resolved at dispatch from the
|
|
25
|
+
* project-registry-api variable store, declared by the workflow under
|
|
26
|
+
* `requires.variables[*].secret: true`. Values are strings; expressions
|
|
27
|
+
* reading this namespace are subject to log redaction by the runtime.
|
|
28
|
+
*/
|
|
29
|
+
SECRETS = 'secrets',
|
|
30
|
+
TRIGGER = 'trigger',
|
|
31
|
+
JOB = 'job',
|
|
32
|
+
/**
|
|
33
|
+
* System-managed canonical context for the run. Mirrors GitHub
|
|
34
|
+
* Actions' `github.*` namespace: stable, system-populated, available
|
|
35
|
+
* in every expression. Exposes org/project/run/workflow/job/actor
|
|
36
|
+
* fields so authors don't have to reach into trigger metadata for
|
|
37
|
+
* what is really run-level state.
|
|
38
|
+
*/
|
|
39
|
+
XEMA = 'xema',
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Closed set of built-in function names. Any other identifier-call fails. */
|
|
43
|
+
export enum ExpressionFunction {
|
|
44
|
+
FROM_JSON = 'fromJSON',
|
|
45
|
+
TO_JSON = 'toJSON',
|
|
46
|
+
/**
|
|
47
|
+
* `format(template, ...args)` — GitHub-Actions-style positional
|
|
48
|
+
* interpolation. The template is a literal string with `{0}`, `{1}`,
|
|
49
|
+
* ... placeholders; each is replaced with the stringified arg at that
|
|
50
|
+
* index. Authors use this when they need to combine an expression
|
|
51
|
+
* value with surrounding literal text — partial `${{ ... }}`
|
|
52
|
+
* interpolation in YAML is intentionally rejected, so `format` is the
|
|
53
|
+
* supported way to build composed strings.
|
|
54
|
+
*/
|
|
55
|
+
FORMAT = 'format',
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type ExpressionNode =
|
|
59
|
+
| LiteralNode
|
|
60
|
+
| IdentifierNode
|
|
61
|
+
| MemberNode
|
|
62
|
+
| IndexNode
|
|
63
|
+
| CallNode
|
|
64
|
+
| UnaryNotNode
|
|
65
|
+
| BinaryNode;
|
|
66
|
+
|
|
67
|
+
export interface LiteralNode {
|
|
68
|
+
readonly kind: ExpressionNodeKind.LITERAL;
|
|
69
|
+
readonly value: string | number | boolean | null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface IdentifierNode {
|
|
73
|
+
readonly kind: ExpressionNodeKind.IDENTIFIER;
|
|
74
|
+
readonly name: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface MemberNode {
|
|
78
|
+
readonly kind: ExpressionNodeKind.MEMBER;
|
|
79
|
+
readonly target: ExpressionNode;
|
|
80
|
+
readonly property: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface IndexNode {
|
|
84
|
+
readonly kind: ExpressionNodeKind.INDEX;
|
|
85
|
+
readonly target: ExpressionNode;
|
|
86
|
+
readonly index: ExpressionNode;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface CallNode {
|
|
90
|
+
readonly kind: ExpressionNodeKind.CALL;
|
|
91
|
+
readonly callee: ExpressionFunction;
|
|
92
|
+
readonly args: readonly ExpressionNode[];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface UnaryNotNode {
|
|
96
|
+
readonly kind: ExpressionNodeKind.UNARY_NOT;
|
|
97
|
+
readonly operand: ExpressionNode;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface BinaryNode {
|
|
101
|
+
readonly kind:
|
|
102
|
+
| ExpressionNodeKind.BINARY_EQ
|
|
103
|
+
| ExpressionNodeKind.BINARY_NEQ
|
|
104
|
+
| ExpressionNodeKind.BINARY_AND
|
|
105
|
+
| ExpressionNodeKind.BINARY_OR;
|
|
106
|
+
readonly left: ExpressionNode;
|
|
107
|
+
readonly right: ExpressionNode;
|
|
108
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type { TriggerPayload } from '@xemahq/kernel-contracts/workflow';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Per-run, read-only cache of pre-fetched artifact payloads keyed by
|
|
5
|
+
* `versionId`. Populated by the workflow runtime BEFORE each step's
|
|
6
|
+
* expressions are evaluated — see `biomes/workflow-runtime/api/workflow-runtime-worker` for the
|
|
7
|
+
* fetch + cache plumbing. The evaluator only ever reads from this map;
|
|
8
|
+
* concurrent reads are safe by construction (no writes once frozen for a
|
|
9
|
+
* step). Empty when no expression in scope reaches into a typed
|
|
10
|
+
* payload or invokes `fromJSON(ref)`.
|
|
11
|
+
*
|
|
12
|
+
* Values are the parsed payload (any JSON-shaped value). The runtime is
|
|
13
|
+
* responsible for parse-time validation; the evaluator surfaces a
|
|
14
|
+
* missing-key as `DSL_PAYLOAD_PARSE_ERROR` so authors get a clear
|
|
15
|
+
* "this ref was never resolved" signal rather than a generic null
|
|
16
|
+
* dereference.
|
|
17
|
+
*/
|
|
18
|
+
export type PayloadCache = ReadonlyMap<string, unknown>;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Runtime binding context passed to the evaluator. Every entry is a plain
|
|
22
|
+
* JSON value — no closures, no functions — so evaluation is pure and
|
|
23
|
+
* deterministic for any given input.
|
|
24
|
+
*/
|
|
25
|
+
export interface ExpressionContext {
|
|
26
|
+
readonly needs: Readonly<Record<string, NeedsEntry>>;
|
|
27
|
+
readonly matrix: Readonly<Record<string, unknown>>;
|
|
28
|
+
readonly inputs: Readonly<Record<string, unknown>>;
|
|
29
|
+
readonly vars: Readonly<Record<string, unknown>>;
|
|
30
|
+
/**
|
|
31
|
+
* Project / org secret variables, populated at dispatch from
|
|
32
|
+
* `requires.variables[*].secret: true` entries. Always present; empty
|
|
33
|
+
* when the workflow declares no secret requirements.
|
|
34
|
+
*/
|
|
35
|
+
readonly secrets: Readonly<Record<string, string>>;
|
|
36
|
+
/**
|
|
37
|
+
* The trigger that started this run. Readers access via `trigger.kind`,
|
|
38
|
+
* `trigger.inputs`, etc. as defined by {@link TriggerPayload}.
|
|
39
|
+
*/
|
|
40
|
+
readonly trigger: TriggerPayload;
|
|
41
|
+
/**
|
|
42
|
+
* Outputs of the current job (if an expression is evaluated at job-level,
|
|
43
|
+
* e.g. inside `job.outputs`). Empty when evaluating matrix/needs/if.
|
|
44
|
+
*/
|
|
45
|
+
readonly job: { readonly outputs: Readonly<Record<string, unknown>> };
|
|
46
|
+
/**
|
|
47
|
+
* System-managed canonical context for the run — see {@link XemaContext}.
|
|
48
|
+
* Always present. Authors reach for `${{ xema.project.id }}` instead of
|
|
49
|
+
* `${{ trigger.projectId }}` because project id is run-level state, not
|
|
50
|
+
* trigger metadata.
|
|
51
|
+
*/
|
|
52
|
+
readonly xema: XemaContext;
|
|
53
|
+
/**
|
|
54
|
+
* Pre-fetched artifact payloads for the current step, keyed by
|
|
55
|
+
* `ArtifactRef.versionId`. Used by `fromJSON(ref)` to return the
|
|
56
|
+
* already-parsed payload without a runtime fetch. Empty map when the
|
|
57
|
+
* step has no payload-reaching expressions. Always present so the
|
|
58
|
+
* evaluator can distinguish "ref not resolved" (missing key →
|
|
59
|
+
* `DSL_PAYLOAD_PARSE_ERROR`) from "no cache at all".
|
|
60
|
+
*/
|
|
61
|
+
readonly payloadCache: PayloadCache;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface NeedsEntry {
|
|
65
|
+
readonly outputs: Readonly<Record<string, unknown>>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Canonical system-managed context. Modelled after GitHub Actions'
|
|
70
|
+
* `github.*` so authors reach for an obvious, stable namespace rather
|
|
71
|
+
* than digging into `trigger.*` metadata for run-level state.
|
|
72
|
+
*
|
|
73
|
+
* Every nested record is a plain JSON object — evaluator-safe.
|
|
74
|
+
*/
|
|
75
|
+
export interface XemaContext {
|
|
76
|
+
readonly org: { readonly id: string };
|
|
77
|
+
readonly project: { readonly id: string };
|
|
78
|
+
readonly run: {
|
|
79
|
+
readonly id: string;
|
|
80
|
+
readonly attempt: number;
|
|
81
|
+
/** ISO-8601 wall-clock at trigger dispatch (mirrors `trigger.triggeredAt`). */
|
|
82
|
+
readonly startedAtIso: string;
|
|
83
|
+
readonly correlationId: string;
|
|
84
|
+
readonly actor: XemaActor;
|
|
85
|
+
};
|
|
86
|
+
readonly workflow: {
|
|
87
|
+
readonly key: string;
|
|
88
|
+
readonly version: string;
|
|
89
|
+
};
|
|
90
|
+
readonly job: {
|
|
91
|
+
readonly key: string;
|
|
92
|
+
readonly attempt: number;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface XemaActor {
|
|
97
|
+
/** Subject id of the user who initiated the run; null for scheduled / webhook triggers. */
|
|
98
|
+
readonly subject: string | null;
|
|
99
|
+
readonly kind: XemaActorKind;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Closed set of run-actor kinds. `user` is set whenever a subject id is
|
|
104
|
+
* present; `webhook` / `schedule` come from the trigger discriminator
|
|
105
|
+
* for unattended runs; `system` is the fallback for engine-initiated
|
|
106
|
+
* dispatches with no actor (e.g. internal recovery).
|
|
107
|
+
*/
|
|
108
|
+
export enum XemaActorKind {
|
|
109
|
+
User = 'user',
|
|
110
|
+
System = 'system',
|
|
111
|
+
Webhook = 'webhook',
|
|
112
|
+
Schedule = 'schedule',
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Empty-but-typed seeds for contexts where an axis doesn't apply yet. */
|
|
116
|
+
export const EMPTY_CONTEXT_SEEDS = {
|
|
117
|
+
needs: Object.freeze({}) as Readonly<Record<string, NeedsEntry>>,
|
|
118
|
+
matrix: Object.freeze({}) as Readonly<Record<string, unknown>>,
|
|
119
|
+
vars: Object.freeze({}) as Readonly<Record<string, unknown>>,
|
|
120
|
+
secrets: Object.freeze({}) as Readonly<Record<string, string>>,
|
|
121
|
+
job: Object.freeze({ outputs: Object.freeze({}) }) as {
|
|
122
|
+
readonly outputs: Readonly<Record<string, unknown>>;
|
|
123
|
+
},
|
|
124
|
+
/**
|
|
125
|
+
* Empty payload cache for compile-time / static contexts where no
|
|
126
|
+
* artifact resolution has been performed. The runtime replaces this
|
|
127
|
+
* with the per-step populated map.
|
|
128
|
+
*/
|
|
129
|
+
payloadCache: new Map<string, unknown>() as PayloadCache,
|
|
130
|
+
/**
|
|
131
|
+
* Seed `xema` for compile-time evaluation contexts (concurrency,
|
|
132
|
+
* static workflow checks) where the canonical fields aren't available
|
|
133
|
+
* yet. Runtime callers always replace this with the populated shape.
|
|
134
|
+
*/
|
|
135
|
+
xema: Object.freeze({
|
|
136
|
+
org: Object.freeze({ id: '' }),
|
|
137
|
+
project: Object.freeze({ id: '' }),
|
|
138
|
+
run: Object.freeze({
|
|
139
|
+
id: '',
|
|
140
|
+
attempt: 0,
|
|
141
|
+
startedAtIso: '',
|
|
142
|
+
correlationId: '',
|
|
143
|
+
actor: Object.freeze({ subject: null, kind: XemaActorKind.System }),
|
|
144
|
+
}),
|
|
145
|
+
workflow: Object.freeze({ key: '', version: '' }),
|
|
146
|
+
job: Object.freeze({ key: '', attempt: 0 }),
|
|
147
|
+
}) as XemaContext,
|
|
148
|
+
} as const;
|