@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.
Files changed (288) hide show
  1. package/LICENSE +201 -0
  2. package/dist/deliverable-spec/index.d.ts +3 -0
  3. package/dist/deliverable-spec/index.d.ts.map +1 -0
  4. package/dist/deliverable-spec/index.js +19 -0
  5. package/dist/deliverable-spec/index.js.map +1 -0
  6. package/dist/deliverable-spec/lib/schema.d.ts +151 -0
  7. package/dist/deliverable-spec/lib/schema.d.ts.map +1 -0
  8. package/dist/deliverable-spec/lib/schema.js +139 -0
  9. package/dist/deliverable-spec/lib/schema.js.map +1 -0
  10. package/dist/deliverable-spec/lib/types.d.ts +8 -0
  11. package/dist/deliverable-spec/lib/types.d.ts.map +1 -0
  12. package/dist/deliverable-spec/lib/types.js +3 -0
  13. package/dist/deliverable-spec/lib/types.js.map +1 -0
  14. package/dist/payload-codec/index.d.ts +8 -0
  15. package/dist/payload-codec/index.d.ts.map +1 -0
  16. package/dist/payload-codec/index.js +27 -0
  17. package/dist/payload-codec/index.js.map +1 -0
  18. package/dist/payload-codec/lib/blob-store.d.ts +37 -0
  19. package/dist/payload-codec/lib/blob-store.d.ts.map +1 -0
  20. package/dist/payload-codec/lib/blob-store.js +0 -0
  21. package/dist/payload-codec/lib/blob-store.js.map +1 -0
  22. package/dist/payload-codec/lib/codec-context.d.ts +6 -0
  23. package/dist/payload-codec/lib/codec-context.d.ts.map +1 -0
  24. package/dist/payload-codec/lib/codec-context.js +16 -0
  25. package/dist/payload-codec/lib/codec-context.js.map +1 -0
  26. package/dist/payload-codec/lib/codec.d.ts +51 -0
  27. package/dist/payload-codec/lib/codec.d.ts.map +1 -0
  28. package/dist/payload-codec/lib/codec.js +330 -0
  29. package/dist/payload-codec/lib/codec.js.map +1 -0
  30. package/dist/payload-codec/lib/enums.d.ts +18 -0
  31. package/dist/payload-codec/lib/enums.d.ts.map +1 -0
  32. package/dist/payload-codec/lib/enums.js +23 -0
  33. package/dist/payload-codec/lib/enums.js.map +1 -0
  34. package/dist/payload-codec/lib/errors.d.ts +18 -0
  35. package/dist/payload-codec/lib/errors.d.ts.map +1 -0
  36. package/dist/payload-codec/lib/errors.js +39 -0
  37. package/dist/payload-codec/lib/errors.js.map +1 -0
  38. package/dist/payload-codec/lib/http-blob-store.d.ts +21 -0
  39. package/dist/payload-codec/lib/http-blob-store.d.ts.map +1 -0
  40. package/dist/payload-codec/lib/http-blob-store.js +139 -0
  41. package/dist/payload-codec/lib/http-blob-store.js.map +1 -0
  42. package/dist/payload-codec/lib/lru-cache.d.ts +12 -0
  43. package/dist/payload-codec/lib/lru-cache.d.ts.map +1 -0
  44. package/dist/payload-codec/lib/lru-cache.js +59 -0
  45. package/dist/payload-codec/lib/lru-cache.js.map +1 -0
  46. package/dist/schema/action.schema.json +181 -0
  47. package/dist/schema/reusable-workflow.schema.json +46 -0
  48. package/dist/schema/workflow.schema.json +373 -0
  49. package/dist/workflow/index.d.ts +14 -0
  50. package/dist/workflow/index.d.ts.map +1 -0
  51. package/dist/workflow/index.js +49 -0
  52. package/dist/workflow/index.js.map +1 -0
  53. package/dist/workflow/lib/action-input-validator.d.ts +10 -0
  54. package/dist/workflow/lib/action-input-validator.d.ts.map +1 -0
  55. package/dist/workflow/lib/action-input-validator.js +69 -0
  56. package/dist/workflow/lib/action-input-validator.js.map +1 -0
  57. package/dist/workflow/lib/compiler/action-shape.d.ts +5 -0
  58. package/dist/workflow/lib/compiler/action-shape.d.ts.map +1 -0
  59. package/dist/workflow/lib/compiler/action-shape.js +43 -0
  60. package/dist/workflow/lib/compiler/action-shape.js.map +1 -0
  61. package/dist/workflow/lib/compiler/canonical-json.d.ts +3 -0
  62. package/dist/workflow/lib/compiler/canonical-json.d.ts.map +1 -0
  63. package/dist/workflow/lib/compiler/canonical-json.js +45 -0
  64. package/dist/workflow/lib/compiler/canonical-json.js.map +1 -0
  65. package/dist/workflow/lib/compiler/compile.d.ts +4 -0
  66. package/dist/workflow/lib/compiler/compile.d.ts.map +1 -0
  67. package/dist/workflow/lib/compiler/compile.js +794 -0
  68. package/dist/workflow/lib/compiler/compile.js.map +1 -0
  69. package/dist/workflow/lib/compiler/concurrency.d.ts +5 -0
  70. package/dist/workflow/lib/compiler/concurrency.d.ts.map +1 -0
  71. package/dist/workflow/lib/compiler/concurrency.js +104 -0
  72. package/dist/workflow/lib/compiler/concurrency.js.map +1 -0
  73. package/dist/workflow/lib/compiler/dag.d.ts +10 -0
  74. package/dist/workflow/lib/compiler/dag.d.ts.map +1 -0
  75. package/dist/workflow/lib/compiler/dag.js +74 -0
  76. package/dist/workflow/lib/compiler/dag.js.map +1 -0
  77. package/dist/workflow/lib/compiler/index.d.ts +6 -0
  78. package/dist/workflow/lib/compiler/index.d.ts.map +1 -0
  79. package/dist/workflow/lib/compiler/index.js +14 -0
  80. package/dist/workflow/lib/compiler/index.js.map +1 -0
  81. package/dist/workflow/lib/compiler/inputs.d.ts +4 -0
  82. package/dist/workflow/lib/compiler/inputs.d.ts.map +1 -0
  83. package/dist/workflow/lib/compiler/inputs.js +108 -0
  84. package/dist/workflow/lib/compiler/inputs.js.map +1 -0
  85. package/dist/workflow/lib/compiler/installation-resource-validator.d.ts +9 -0
  86. package/dist/workflow/lib/compiler/installation-resource-validator.d.ts.map +1 -0
  87. package/dist/workflow/lib/compiler/installation-resource-validator.js +76 -0
  88. package/dist/workflow/lib/compiler/installation-resource-validator.js.map +1 -0
  89. package/dist/workflow/lib/compiler/manifest-source.d.ts +4 -0
  90. package/dist/workflow/lib/compiler/manifest-source.d.ts.map +1 -0
  91. package/dist/workflow/lib/compiler/manifest-source.js +100 -0
  92. package/dist/workflow/lib/compiler/manifest-source.js.map +1 -0
  93. package/dist/workflow/lib/compiler/matrix.d.ts +4 -0
  94. package/dist/workflow/lib/compiler/matrix.d.ts.map +1 -0
  95. package/dist/workflow/lib/compiler/matrix.js +76 -0
  96. package/dist/workflow/lib/compiler/matrix.js.map +1 -0
  97. package/dist/workflow/lib/compiler/mount-plan.d.ts +4 -0
  98. package/dist/workflow/lib/compiler/mount-plan.d.ts.map +1 -0
  99. package/dist/workflow/lib/compiler/mount-plan.js +96 -0
  100. package/dist/workflow/lib/compiler/mount-plan.js.map +1 -0
  101. package/dist/workflow/lib/compiler/payload-reach-in.d.ts +14 -0
  102. package/dist/workflow/lib/compiler/payload-reach-in.d.ts.map +1 -0
  103. package/dist/workflow/lib/compiler/payload-reach-in.js +273 -0
  104. package/dist/workflow/lib/compiler/payload-reach-in.js.map +1 -0
  105. package/dist/workflow/lib/compiler/permissions.d.ts +6 -0
  106. package/dist/workflow/lib/compiler/permissions.d.ts.map +1 -0
  107. package/dist/workflow/lib/compiler/permissions.js +43 -0
  108. package/dist/workflow/lib/compiler/permissions.js.map +1 -0
  109. package/dist/workflow/lib/compiler/retry-timeout.d.ts +6 -0
  110. package/dist/workflow/lib/compiler/retry-timeout.d.ts.map +1 -0
  111. package/dist/workflow/lib/compiler/retry-timeout.js +64 -0
  112. package/dist/workflow/lib/compiler/retry-timeout.js.map +1 -0
  113. package/dist/workflow/lib/compiler/review-step.d.ts +18 -0
  114. package/dist/workflow/lib/compiler/review-step.d.ts.map +1 -0
  115. package/dist/workflow/lib/compiler/review-step.js +247 -0
  116. package/dist/workflow/lib/compiler/review-step.js.map +1 -0
  117. package/dist/workflow/lib/compiler/types.d.ts +42 -0
  118. package/dist/workflow/lib/compiler/types.d.ts.map +1 -0
  119. package/dist/workflow/lib/compiler/types.js +3 -0
  120. package/dist/workflow/lib/compiler/types.js.map +1 -0
  121. package/dist/workflow/lib/compiler/variable-requirements.d.ts +5 -0
  122. package/dist/workflow/lib/compiler/variable-requirements.d.ts.map +1 -0
  123. package/dist/workflow/lib/compiler/variable-requirements.js +119 -0
  124. package/dist/workflow/lib/compiler/variable-requirements.js.map +1 -0
  125. package/dist/workflow/lib/deliverable-spec-keys.d.ts +3 -0
  126. package/dist/workflow/lib/deliverable-spec-keys.d.ts.map +1 -0
  127. package/dist/workflow/lib/deliverable-spec-keys.js +90 -0
  128. package/dist/workflow/lib/deliverable-spec-keys.js.map +1 -0
  129. package/dist/workflow/lib/dispatch-inputs/index.d.ts +23 -0
  130. package/dist/workflow/lib/dispatch-inputs/index.d.ts.map +1 -0
  131. package/dist/workflow/lib/dispatch-inputs/index.js +106 -0
  132. package/dist/workflow/lib/dispatch-inputs/index.js.map +1 -0
  133. package/dist/workflow/lib/dispatch-inputs/to-json-schema.d.ts +3 -0
  134. package/dist/workflow/lib/dispatch-inputs/to-json-schema.d.ts.map +1 -0
  135. package/dist/workflow/lib/dispatch-inputs/to-json-schema.js +43 -0
  136. package/dist/workflow/lib/dispatch-inputs/to-json-schema.js.map +1 -0
  137. package/dist/workflow/lib/duration.d.ts +2 -0
  138. package/dist/workflow/lib/duration.d.ts.map +1 -0
  139. package/dist/workflow/lib/duration.js +26 -0
  140. package/dist/workflow/lib/duration.js.map +1 -0
  141. package/dist/workflow/lib/errors.d.ts +9 -0
  142. package/dist/workflow/lib/errors.d.ts.map +1 -0
  143. package/dist/workflow/lib/errors.js +28 -0
  144. package/dist/workflow/lib/errors.js.map +1 -0
  145. package/dist/workflow/lib/expression/ast.d.ts +61 -0
  146. package/dist/workflow/lib/expression/ast.d.ts.map +1 -0
  147. package/dist/workflow/lib/expression/ast.js +34 -0
  148. package/dist/workflow/lib/expression/ast.js.map +1 -0
  149. package/dist/workflow/lib/expression/context.d.ts +63 -0
  150. package/dist/workflow/lib/expression/context.d.ts.map +1 -0
  151. package/dist/workflow/lib/expression/context.js +32 -0
  152. package/dist/workflow/lib/expression/context.js.map +1 -0
  153. package/dist/workflow/lib/expression/evaluator.d.ts +5 -0
  154. package/dist/workflow/lib/expression/evaluator.d.ts.map +1 -0
  155. package/dist/workflow/lib/expression/evaluator.js +291 -0
  156. package/dist/workflow/lib/expression/evaluator.js.map +1 -0
  157. package/dist/workflow/lib/expression/index.d.ts +9 -0
  158. package/dist/workflow/lib/expression/index.d.ts.map +1 -0
  159. package/dist/workflow/lib/expression/index.js +26 -0
  160. package/dist/workflow/lib/expression/index.js.map +1 -0
  161. package/dist/workflow/lib/expression/interpolation.d.ts +9 -0
  162. package/dist/workflow/lib/expression/interpolation.d.ts.map +1 -0
  163. package/dist/workflow/lib/expression/interpolation.js +51 -0
  164. package/dist/workflow/lib/expression/interpolation.js.map +1 -0
  165. package/dist/workflow/lib/expression/parser.d.ts +4 -0
  166. package/dist/workflow/lib/expression/parser.d.ts.map +1 -0
  167. package/dist/workflow/lib/expression/parser.js +203 -0
  168. package/dist/workflow/lib/expression/parser.js.map +1 -0
  169. package/dist/workflow/lib/expression/template.d.ts +18 -0
  170. package/dist/workflow/lib/expression/template.d.ts.map +1 -0
  171. package/dist/workflow/lib/expression/template.js +63 -0
  172. package/dist/workflow/lib/expression/template.js.map +1 -0
  173. package/dist/workflow/lib/expression/tokenizer.d.ts +3 -0
  174. package/dist/workflow/lib/expression/tokenizer.d.ts.map +1 -0
  175. package/dist/workflow/lib/expression/tokenizer.js +153 -0
  176. package/dist/workflow/lib/expression/tokenizer.js.map +1 -0
  177. package/dist/workflow/lib/expression/tokens.d.ts +25 -0
  178. package/dist/workflow/lib/expression/tokens.d.ts.map +1 -0
  179. package/dist/workflow/lib/expression/tokens.js +24 -0
  180. package/dist/workflow/lib/expression/tokens.js.map +1 -0
  181. package/dist/workflow/lib/expression/walk-artifact-refs.d.ts +5 -0
  182. package/dist/workflow/lib/expression/walk-artifact-refs.d.ts.map +1 -0
  183. package/dist/workflow/lib/expression/walk-artifact-refs.js +138 -0
  184. package/dist/workflow/lib/expression/walk-artifact-refs.js.map +1 -0
  185. package/dist/workflow/lib/installation-resource-kind.d.ts +14 -0
  186. package/dist/workflow/lib/installation-resource-kind.d.ts.map +1 -0
  187. package/dist/workflow/lib/installation-resource-kind.js +59 -0
  188. package/dist/workflow/lib/installation-resource-kind.js.map +1 -0
  189. package/dist/workflow/lib/schemas-loader.d.ts +4 -0
  190. package/dist/workflow/lib/schemas-loader.d.ts.map +1 -0
  191. package/dist/workflow/lib/schemas-loader.js +36 -0
  192. package/dist/workflow/lib/schemas-loader.js.map +1 -0
  193. package/dist/workflow/lib/serializer.d.ts +3 -0
  194. package/dist/workflow/lib/serializer.d.ts.map +1 -0
  195. package/dist/workflow/lib/serializer.js +15 -0
  196. package/dist/workflow/lib/serializer.js.map +1 -0
  197. package/dist/workflow/lib/types.d.ts +179 -0
  198. package/dist/workflow/lib/types.d.ts.map +1 -0
  199. package/dist/workflow/lib/types.js +3 -0
  200. package/dist/workflow/lib/types.js.map +1 -0
  201. package/dist/workflow/lib/validate.d.ts +8 -0
  202. package/dist/workflow/lib/validate.d.ts.map +1 -0
  203. package/dist/workflow/lib/validate.js +119 -0
  204. package/dist/workflow/lib/validate.js.map +1 -0
  205. package/dist/workspace-manifest/index.d.ts +6 -0
  206. package/dist/workspace-manifest/index.d.ts.map +1 -0
  207. package/dist/workspace-manifest/index.js +22 -0
  208. package/dist/workspace-manifest/index.js.map +1 -0
  209. package/dist/workspace-manifest/lib/compile.d.ts +8 -0
  210. package/dist/workspace-manifest/lib/compile.d.ts.map +1 -0
  211. package/dist/workspace-manifest/lib/compile.js +439 -0
  212. package/dist/workspace-manifest/lib/compile.js.map +1 -0
  213. package/dist/workspace-manifest/lib/interpolate.d.ts +12 -0
  214. package/dist/workspace-manifest/lib/interpolate.d.ts.map +1 -0
  215. package/dist/workspace-manifest/lib/interpolate.js +81 -0
  216. package/dist/workspace-manifest/lib/interpolate.js.map +1 -0
  217. package/dist/workspace-manifest/lib/resolve-extends.d.ts +10 -0
  218. package/dist/workspace-manifest/lib/resolve-extends.d.ts.map +1 -0
  219. package/dist/workspace-manifest/lib/resolve-extends.js +108 -0
  220. package/dist/workspace-manifest/lib/resolve-extends.js.map +1 -0
  221. package/dist/workspace-manifest/lib/schema.d.ts +710 -0
  222. package/dist/workspace-manifest/lib/schema.d.ts.map +1 -0
  223. package/dist/workspace-manifest/lib/schema.js +355 -0
  224. package/dist/workspace-manifest/lib/schema.js.map +1 -0
  225. package/dist/workspace-manifest/lib/types.d.ts +153 -0
  226. package/dist/workspace-manifest/lib/types.d.ts.map +1 -0
  227. package/dist/workspace-manifest/lib/types.js +10 -0
  228. package/dist/workspace-manifest/lib/types.js.map +1 -0
  229. package/package.json +79 -0
  230. package/schema/action.schema.json +181 -0
  231. package/schema/reusable-workflow.schema.json +46 -0
  232. package/schema/workflow.schema.json +373 -0
  233. package/src/deliverable-spec/index.ts +19 -0
  234. package/src/deliverable-spec/lib/schema.ts +248 -0
  235. package/src/deliverable-spec/lib/types.ts +26 -0
  236. package/src/payload-codec/index.ts +40 -0
  237. package/src/payload-codec/lib/blob-store.ts +0 -0
  238. package/src/payload-codec/lib/codec-context.ts +38 -0
  239. package/src/payload-codec/lib/codec.ts +593 -0
  240. package/src/payload-codec/lib/enums.ts +58 -0
  241. package/src/payload-codec/lib/errors.ts +54 -0
  242. package/src/payload-codec/lib/http-blob-store.ts +257 -0
  243. package/src/payload-codec/lib/lru-cache.ts +81 -0
  244. package/src/workflow/index.ts +98 -0
  245. package/src/workflow/lib/action-input-validator.ts +160 -0
  246. package/src/workflow/lib/compiler/action-shape.ts +71 -0
  247. package/src/workflow/lib/compiler/canonical-json.ts +53 -0
  248. package/src/workflow/lib/compiler/compile.ts +1518 -0
  249. package/src/workflow/lib/compiler/concurrency.ts +223 -0
  250. package/src/workflow/lib/compiler/dag.ts +108 -0
  251. package/src/workflow/lib/compiler/index.ts +10 -0
  252. package/src/workflow/lib/compiler/inputs.ts +199 -0
  253. package/src/workflow/lib/compiler/installation-resource-validator.ts +114 -0
  254. package/src/workflow/lib/compiler/manifest-source.ts +176 -0
  255. package/src/workflow/lib/compiler/matrix.ts +135 -0
  256. package/src/workflow/lib/compiler/mount-plan.ts +202 -0
  257. package/src/workflow/lib/compiler/payload-reach-in.ts +497 -0
  258. package/src/workflow/lib/compiler/permissions.ts +64 -0
  259. package/src/workflow/lib/compiler/retry-timeout.ts +105 -0
  260. package/src/workflow/lib/compiler/review-step.ts +517 -0
  261. package/src/workflow/lib/compiler/types.ts +170 -0
  262. package/src/workflow/lib/compiler/variable-requirements.ts +208 -0
  263. package/src/workflow/lib/deliverable-spec-keys.ts +109 -0
  264. package/src/workflow/lib/dispatch-inputs/index.ts +160 -0
  265. package/src/workflow/lib/dispatch-inputs/to-json-schema.ts +60 -0
  266. package/src/workflow/lib/duration.ts +48 -0
  267. package/src/workflow/lib/errors.ts +37 -0
  268. package/src/workflow/lib/expression/ast.ts +108 -0
  269. package/src/workflow/lib/expression/context.ts +148 -0
  270. package/src/workflow/lib/expression/evaluator.ts +492 -0
  271. package/src/workflow/lib/expression/index.ts +28 -0
  272. package/src/workflow/lib/expression/interpolation.ts +84 -0
  273. package/src/workflow/lib/expression/parser.ts +264 -0
  274. package/src/workflow/lib/expression/template.ts +117 -0
  275. package/src/workflow/lib/expression/tokenizer.ts +200 -0
  276. package/src/workflow/lib/expression/tokens.ts +30 -0
  277. package/src/workflow/lib/expression/walk-artifact-refs.ts +232 -0
  278. package/src/workflow/lib/installation-resource-kind.ts +107 -0
  279. package/src/workflow/lib/schemas-loader.ts +64 -0
  280. package/src/workflow/lib/serializer.ts +30 -0
  281. package/src/workflow/lib/types.ts +361 -0
  282. package/src/workflow/lib/validate.ts +199 -0
  283. package/src/workspace-manifest/index.ts +27 -0
  284. package/src/workspace-manifest/lib/compile.ts +608 -0
  285. package/src/workspace-manifest/lib/interpolate.ts +140 -0
  286. package/src/workspace-manifest/lib/resolve-extends.ts +260 -0
  287. package/src/workspace-manifest/lib/schema.ts +612 -0
  288. 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;