ts2workflows 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +117 -0
- package/README.md +17 -7
- package/dist/ast/expressions.d.ts +37 -41
- package/dist/ast/expressions.d.ts.map +1 -1
- package/dist/ast/expressions.js +124 -255
- package/dist/ast/statements.d.ts +132 -0
- package/dist/ast/statements.d.ts.map +1 -0
- package/dist/ast/statements.js +197 -0
- package/dist/ast/steps.d.ts +82 -194
- package/dist/ast/steps.d.ts.map +1 -1
- package/dist/ast/steps.js +862 -523
- package/dist/ast/workflows.d.ts +14 -7
- package/dist/ast/workflows.d.ts.map +1 -1
- package/dist/ast/workflows.js +19 -10
- package/dist/cli.js +45 -32
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -0
- package/dist/transpiler/index.d.ts +14 -1
- package/dist/transpiler/index.d.ts.map +1 -1
- package/dist/transpiler/index.js +150 -31
- package/dist/transpiler/linker.d.ts +3 -0
- package/dist/transpiler/linker.d.ts.map +1 -0
- package/dist/transpiler/linker.js +45 -0
- package/dist/transpiler/parseexpressions.d.ts +11 -0
- package/dist/transpiler/parseexpressions.d.ts.map +1 -0
- package/dist/transpiler/{expressions.js → parseexpressions.js} +90 -103
- package/dist/transpiler/parsestatement.d.ts +7 -0
- package/dist/transpiler/parsestatement.d.ts.map +1 -0
- package/dist/transpiler/parsestatement.js +862 -0
- package/dist/transpiler/stepnames.d.ts +3 -0
- package/dist/transpiler/stepnames.d.ts.map +1 -0
- package/dist/transpiler/stepnames.js +17 -0
- package/dist/transpiler/transformations.d.ts +3 -19
- package/dist/transpiler/transformations.d.ts.map +1 -1
- package/dist/transpiler/transformations.js +267 -322
- package/language_reference.md +8 -2
- package/package.json +13 -7
- package/types/workflowslib.d.ts +26 -13
- package/dist/ast/stepnames.d.ts +0 -9
- package/dist/ast/stepnames.d.ts.map +0 -1
- package/dist/ast/stepnames.js +0 -280
- package/dist/transpiler/expressions.d.ts +0 -11
- package/dist/transpiler/expressions.d.ts.map +0 -1
- package/dist/transpiler/statements.d.ts +0 -10
- package/dist/transpiler/statements.d.ts.map +0 -1
- package/dist/transpiler/statements.js +0 -1098
- package/dist/utils.d.ts +0 -2
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -3
package/dist/ast/expressions.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as R from 'ramda';
|
|
2
|
-
import { isRecord } from '../utils.js';
|
|
3
2
|
// Operator precendence for unary and binary operators in the Workflows language.
|
|
4
3
|
// Note that these differ somewhat from Javascript.
|
|
5
4
|
// https://cloud.google.com/workflows/docs/reference/syntax/datatypes
|
|
@@ -24,171 +23,130 @@ const operatorPrecedenceValue = new Map([
|
|
|
24
23
|
['and', 2],
|
|
25
24
|
['or', 1],
|
|
26
25
|
]);
|
|
27
|
-
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
26
|
+
export const nullEx = { tag: 'null', value: null };
|
|
27
|
+
export function stringEx(value) {
|
|
28
|
+
return { tag: 'string', value };
|
|
29
|
+
}
|
|
30
|
+
export function numberEx(value) {
|
|
31
|
+
return { tag: 'number', value };
|
|
32
|
+
}
|
|
33
|
+
export function booleanEx(value) {
|
|
34
|
+
return { tag: 'boolean', value };
|
|
35
|
+
}
|
|
36
|
+
export const trueEx = booleanEx(true);
|
|
37
|
+
export const falseEx = booleanEx(false);
|
|
38
|
+
export function listEx(value) {
|
|
39
|
+
return { tag: 'list', value };
|
|
40
|
+
}
|
|
41
|
+
export function mapEx(value) {
|
|
42
|
+
return { tag: 'map', value };
|
|
43
|
+
}
|
|
44
|
+
export function binaryEx(left, binaryOperator, right) {
|
|
45
|
+
return {
|
|
46
|
+
tag: 'binary',
|
|
47
|
+
binaryOperator,
|
|
48
|
+
left,
|
|
49
|
+
right,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function variableReferenceEx(variableName) {
|
|
53
|
+
return { tag: 'variableReference', variableName };
|
|
54
|
+
}
|
|
55
|
+
export function functionInvocationEx(functionName, argumentExpressions) {
|
|
56
|
+
return {
|
|
57
|
+
tag: 'functionInvocation',
|
|
58
|
+
functionName,
|
|
59
|
+
arguments: argumentExpressions,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function memberEx(object, property, computed) {
|
|
63
|
+
return { tag: 'member', object, property, computed };
|
|
64
|
+
}
|
|
65
|
+
export function unaryEx(operator, value) {
|
|
66
|
+
return { tag: 'unary', operator, value };
|
|
67
|
+
}
|
|
68
|
+
// Returns a string representation of ex, not enclosed in ${}
|
|
69
|
+
export function expressionToString(ex) {
|
|
70
|
+
switch (ex.tag) {
|
|
71
|
+
case 'string':
|
|
72
|
+
return JSON.stringify(ex.value);
|
|
73
|
+
case 'number':
|
|
74
|
+
return ex.value.toString();
|
|
75
|
+
case 'boolean':
|
|
76
|
+
return ex.value ? 'true' : 'false';
|
|
77
|
+
case 'null':
|
|
78
|
+
return 'null';
|
|
79
|
+
case 'list':
|
|
80
|
+
return '[' + ex.value.map(expressionToString).join(', ') + ']';
|
|
81
|
+
case 'map':
|
|
82
|
+
return ('{' +
|
|
83
|
+
Object.entries(ex.value)
|
|
84
|
+
.map(([key, val]) => JSON.stringify(key) + ': ' + expressionToString(val))
|
|
85
|
+
.join(', ') +
|
|
86
|
+
'}');
|
|
87
|
+
case 'binary':
|
|
88
|
+
return binaryExpressionToString(ex);
|
|
89
|
+
case 'variableReference':
|
|
90
|
+
return ex.variableName;
|
|
91
|
+
case 'functionInvocation':
|
|
92
|
+
return `${ex.functionName}(${ex.arguments.map(expressionToString).join(', ')})`;
|
|
93
|
+
case 'member':
|
|
94
|
+
if (ex.computed) {
|
|
95
|
+
return `${expressionToString(ex.object)}[${expressionToString(ex.property)}]`;
|
|
77
96
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const rightOpValue = operatorPrecedenceValue.get(this.right.binaryOperator) ?? 0;
|
|
81
|
-
const thisOpValue = operatorPrecedenceValue.get(this.binaryOperator) ?? 0;
|
|
82
|
-
if (rightOpValue < thisOpValue) {
|
|
83
|
-
rightString = `(${rightString})`;
|
|
97
|
+
else {
|
|
98
|
+
return `${expressionToString(ex.object)}.${expressionToString(ex.property)}`;
|
|
84
99
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Variable name: a plain identifier (y, year) or a list
|
|
90
|
-
// element accessor (names[3])
|
|
91
|
-
export class VariableReferenceExpression {
|
|
92
|
-
expressionType = 'variableReference';
|
|
93
|
-
variableName;
|
|
94
|
-
constructor(variableName) {
|
|
95
|
-
this.variableName = variableName;
|
|
96
|
-
}
|
|
97
|
-
toString() {
|
|
98
|
-
return this.variableName;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Function invocation with anonymous parameters: sys.get_env("GOOGLE_CLOUD_PROJECT_ID")
|
|
102
|
-
export class FunctionInvocationExpression {
|
|
103
|
-
expressionType = 'functionInvocation';
|
|
104
|
-
functionName;
|
|
105
|
-
arguments;
|
|
106
|
-
constructor(functionName, argumentExpressions) {
|
|
107
|
-
this.functionName = functionName;
|
|
108
|
-
this.arguments = argumentExpressions;
|
|
109
|
-
}
|
|
110
|
-
toString() {
|
|
111
|
-
const argumentStrings = this.arguments.map((x) => x.toString());
|
|
112
|
-
return `${this.functionName}(${argumentStrings.join(', ')})`;
|
|
100
|
+
case 'unary':
|
|
101
|
+
return unaryExpressionToString(ex);
|
|
113
102
|
}
|
|
114
103
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this.property = property;
|
|
124
|
-
this.computed = computed;
|
|
125
|
-
}
|
|
126
|
-
toString() {
|
|
127
|
-
if (this.computed) {
|
|
128
|
-
return `${this.object.toString()}[${this.property.toString()}]`;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
return `${this.object.toString()}.${this.property.toString()}`;
|
|
104
|
+
function binaryExpressionToString(ex) {
|
|
105
|
+
let leftString = expressionToString(ex.left);
|
|
106
|
+
let rightString = expressionToString(ex.right);
|
|
107
|
+
if (ex.left.tag === 'binary') {
|
|
108
|
+
const leftOpValue = operatorPrecedenceValue.get(ex.left.binaryOperator) ?? 0;
|
|
109
|
+
const thisOpValue = operatorPrecedenceValue.get(ex.binaryOperator) ?? 0;
|
|
110
|
+
if (leftOpValue < thisOpValue) {
|
|
111
|
+
leftString = `(${leftString})`;
|
|
132
112
|
}
|
|
133
113
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
constructor(operator, value) {
|
|
140
|
-
this.operator = operator;
|
|
141
|
-
this.value = value;
|
|
142
|
-
}
|
|
143
|
-
toString() {
|
|
144
|
-
const separator = this.operator === 'not' ? ' ' : '';
|
|
145
|
-
let valueString = this.value.toString();
|
|
146
|
-
if (this.value.expressionType === 'binary') {
|
|
147
|
-
valueString = `(${valueString})`;
|
|
114
|
+
if (ex.right.tag === 'binary') {
|
|
115
|
+
const rightOpValue = operatorPrecedenceValue.get(ex.right.binaryOperator) ?? 0;
|
|
116
|
+
const thisOpValue = operatorPrecedenceValue.get(ex.binaryOperator) ?? 0;
|
|
117
|
+
if (rightOpValue < thisOpValue) {
|
|
118
|
+
rightString = `(${rightString})`;
|
|
148
119
|
}
|
|
149
|
-
return `${this.operator}${separator}${valueString}`;
|
|
150
120
|
}
|
|
121
|
+
return `${leftString} ${ex.binaryOperator} ${rightString}`;
|
|
151
122
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
function primitiveToString(val) {
|
|
158
|
-
const valuesToString = R.map(expressionOrPrimitiveToString);
|
|
159
|
-
if (Array.isArray(val)) {
|
|
160
|
-
return `[${valuesToString(val).join(', ')}]`;
|
|
123
|
+
function unaryExpressionToString(ex) {
|
|
124
|
+
const separator = ex.operator === 'not' ? ' ' : '';
|
|
125
|
+
let valueString = expressionToString(ex.value);
|
|
126
|
+
if (ex.value.tag === 'binary') {
|
|
127
|
+
valueString = `(${valueString})`;
|
|
161
128
|
}
|
|
162
|
-
|
|
163
|
-
const elements = Object.values(valuesToString(val)).map(([k, v]) => `"${k}":${v}`);
|
|
164
|
-
return `{${elements.join(',')}}`;
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
return JSON.stringify(val);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
export function isExpression(val) {
|
|
171
|
-
return val instanceof Object && 'expressionType' in val && !isRecord(val);
|
|
172
|
-
}
|
|
173
|
-
export function asExpression(x) {
|
|
174
|
-
return isExpression(x) ? x : new PrimitiveExpression(x);
|
|
175
|
-
}
|
|
176
|
-
export function safeAsExpression(x) {
|
|
177
|
-
return x === undefined ? undefined : asExpression(x);
|
|
129
|
+
return `${ex.operator}${separator}${valueString}`;
|
|
178
130
|
}
|
|
179
131
|
// Returns a literal for simple terms and a literal expression enclosed in ${} for complex terms.
|
|
180
132
|
export function expressionToLiteralValueOrLiteralExpression(ex) {
|
|
181
|
-
switch (ex.
|
|
182
|
-
case '
|
|
183
|
-
|
|
133
|
+
switch (ex.tag) {
|
|
134
|
+
case 'string':
|
|
135
|
+
case 'number':
|
|
136
|
+
case 'boolean':
|
|
137
|
+
case 'null':
|
|
138
|
+
return ex.value;
|
|
139
|
+
case 'list':
|
|
140
|
+
return R.map(expressionToLiteralValueOrLiteralExpression, ex.value);
|
|
141
|
+
case 'map':
|
|
142
|
+
return R.map(expressionToLiteralValueOrLiteralExpression, ex.value);
|
|
184
143
|
case 'binary':
|
|
185
144
|
case 'variableReference':
|
|
186
145
|
case 'functionInvocation':
|
|
187
146
|
case 'member':
|
|
188
|
-
return `\${${ex
|
|
147
|
+
return `\${${expressionToString(ex)}}`;
|
|
189
148
|
case 'unary':
|
|
190
|
-
if (ex.value.
|
|
191
|
-
typeof ex.value.value === 'number') {
|
|
149
|
+
if (ex.value.tag === 'number') {
|
|
192
150
|
if (ex.operator === '+') {
|
|
193
151
|
return ex.value.value;
|
|
194
152
|
}
|
|
@@ -196,98 +154,22 @@ export function expressionToLiteralValueOrLiteralExpression(ex) {
|
|
|
196
154
|
return -ex.value.value;
|
|
197
155
|
}
|
|
198
156
|
else {
|
|
199
|
-
return `\${${ex
|
|
157
|
+
return `\${${expressionToString(ex)}}`;
|
|
200
158
|
}
|
|
201
159
|
}
|
|
202
160
|
else {
|
|
203
|
-
return `\${${ex
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
function primitiveExpressionToLiteralValueOrLiteralExpression(ex) {
|
|
208
|
-
if (typeof ex.value === 'number' ||
|
|
209
|
-
typeof ex.value === 'string' ||
|
|
210
|
-
typeof ex.value === 'boolean' ||
|
|
211
|
-
ex.value === null) {
|
|
212
|
-
return ex.value;
|
|
213
|
-
}
|
|
214
|
-
else if (Array.isArray(ex.value)) {
|
|
215
|
-
return ex.value.map((x) => {
|
|
216
|
-
if (isExpression(x)) {
|
|
217
|
-
return expressionToLiteralValueOrLiteralExpression(x);
|
|
218
|
-
}
|
|
219
|
-
else if (Array.isArray(x) || isRecord(x)) {
|
|
220
|
-
return primitiveExpressionToLiteralValueOrLiteralExpression(new PrimitiveExpression(x));
|
|
221
|
-
}
|
|
222
|
-
else if (x === null ||
|
|
223
|
-
typeof x === 'string' ||
|
|
224
|
-
typeof x === 'number' ||
|
|
225
|
-
typeof x === 'boolean') {
|
|
226
|
-
return x;
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
return `\${${primitiveToString(x)}}`;
|
|
161
|
+
return `\${${expressionToString(ex)}}`;
|
|
230
162
|
}
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
else if (isRecord(ex.value)) {
|
|
234
|
-
const mapRecord = R.map((v) => {
|
|
235
|
-
if (isExpression(v)) {
|
|
236
|
-
return expressionToLiteralValueOrLiteralExpression(v);
|
|
237
|
-
}
|
|
238
|
-
else if (Array.isArray(v) || isRecord(v)) {
|
|
239
|
-
return primitiveExpressionToLiteralValueOrLiteralExpression(new PrimitiveExpression(v));
|
|
240
|
-
}
|
|
241
|
-
else if (v === null ||
|
|
242
|
-
typeof v === 'string' ||
|
|
243
|
-
typeof v === 'number' ||
|
|
244
|
-
typeof v === 'boolean') {
|
|
245
|
-
return v;
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
return `\${${primitiveToString(v)}}`;
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
return mapRecord(ex.value);
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
return `\${${ex.toString()}}`;
|
|
255
163
|
}
|
|
256
164
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
case '
|
|
263
|
-
|
|
264
|
-
case '
|
|
265
|
-
return isLiteral(ex.value);
|
|
266
|
-
case 'binary':
|
|
267
|
-
case 'variableReference':
|
|
268
|
-
case 'functionInvocation':
|
|
269
|
-
case 'member':
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
const expressionOrPrimitiveIsLiteral = R.ifElse(isExpression, isLiteral, primitiveIsLiteral);
|
|
274
|
-
function primitiveIsLiteral(value) {
|
|
275
|
-
if (Array.isArray(value)) {
|
|
276
|
-
return value.every(expressionOrPrimitiveIsLiteral);
|
|
277
|
-
}
|
|
278
|
-
else if (isRecord(value)) {
|
|
279
|
-
return Object.values(value).every(expressionOrPrimitiveIsLiteral);
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
return (typeof value === 'string' ||
|
|
283
|
-
typeof value === 'number' ||
|
|
284
|
-
typeof value === 'boolean' ||
|
|
285
|
-
value === null);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
export function isFullyQualifiedName(ex) {
|
|
289
|
-
switch (ex.expressionType) {
|
|
290
|
-
case 'primitive':
|
|
165
|
+
export function isQualifiedName(ex) {
|
|
166
|
+
switch (ex.tag) {
|
|
167
|
+
case 'string':
|
|
168
|
+
case 'number':
|
|
169
|
+
case 'boolean':
|
|
170
|
+
case 'null':
|
|
171
|
+
case 'list':
|
|
172
|
+
case 'map':
|
|
291
173
|
case 'binary':
|
|
292
174
|
case 'functionInvocation':
|
|
293
175
|
case 'unary':
|
|
@@ -295,27 +177,14 @@ export function isFullyQualifiedName(ex) {
|
|
|
295
177
|
case 'variableReference':
|
|
296
178
|
return true;
|
|
297
179
|
case 'member':
|
|
298
|
-
return (
|
|
299
|
-
(
|
|
300
|
-
(ex.computed && ex.property
|
|
180
|
+
return (isQualifiedName(ex.object) &&
|
|
181
|
+
(isQualifiedName(ex.property) ||
|
|
182
|
+
(ex.computed && isPrimitive(ex.property))));
|
|
301
183
|
}
|
|
302
184
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
case 'primitive':
|
|
309
|
-
return true;
|
|
310
|
-
case 'binary':
|
|
311
|
-
return isPure(ex.left) && isPure(ex.right);
|
|
312
|
-
case 'functionInvocation':
|
|
313
|
-
return false;
|
|
314
|
-
case 'variableReference':
|
|
315
|
-
return true;
|
|
316
|
-
case 'member':
|
|
317
|
-
return isPure(ex.object) && isPure(ex.property);
|
|
318
|
-
case 'unary':
|
|
319
|
-
return isPure(ex.value);
|
|
320
|
-
}
|
|
185
|
+
export function isPrimitive(ex) {
|
|
186
|
+
return (ex.tag === 'string' ||
|
|
187
|
+
ex.tag === 'number' ||
|
|
188
|
+
ex.tag === 'boolean' ||
|
|
189
|
+
ex.tag === 'null');
|
|
321
190
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Expression, MemberExpression, VariableName, VariableReferenceExpression } from './expressions.js';
|
|
2
|
+
import { StepName } from './steps.js';
|
|
3
|
+
export type WorkflowParameters = Record<VariableName, Expression>;
|
|
4
|
+
export interface VariableAssignment {
|
|
5
|
+
name: VariableReferenceExpression | MemberExpression;
|
|
6
|
+
value: Expression;
|
|
7
|
+
}
|
|
8
|
+
export interface CustomRetryPolicy {
|
|
9
|
+
predicate?: string;
|
|
10
|
+
maxRetries: Expression;
|
|
11
|
+
backoff: {
|
|
12
|
+
initialDelay?: Expression;
|
|
13
|
+
maxDelay?: Expression;
|
|
14
|
+
multiplier?: Expression;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare class AssignStatement {
|
|
18
|
+
readonly assignments: VariableAssignment[];
|
|
19
|
+
readonly tag = "assign";
|
|
20
|
+
constructor(assignments: VariableAssignment[]);
|
|
21
|
+
}
|
|
22
|
+
export declare class BreakStatement {
|
|
23
|
+
readonly label?: string | undefined;
|
|
24
|
+
readonly tag = "break";
|
|
25
|
+
constructor(label?: string | undefined);
|
|
26
|
+
}
|
|
27
|
+
export declare class ContinueStatement {
|
|
28
|
+
readonly label?: string | undefined;
|
|
29
|
+
readonly tag = "continue";
|
|
30
|
+
constructor(label?: string | undefined);
|
|
31
|
+
}
|
|
32
|
+
export declare class ForStatement {
|
|
33
|
+
readonly body: WorkflowStatement[];
|
|
34
|
+
readonly loopVariableName: VariableName;
|
|
35
|
+
readonly listExpression: Expression;
|
|
36
|
+
readonly indexVariableName?: VariableName | undefined;
|
|
37
|
+
readonly tag = "for";
|
|
38
|
+
constructor(body: WorkflowStatement[], loopVariableName: VariableName, listExpression: Expression, indexVariableName?: VariableName | undefined);
|
|
39
|
+
}
|
|
40
|
+
export declare class ForRangeStatement {
|
|
41
|
+
readonly body: WorkflowStatement[];
|
|
42
|
+
readonly loopVariableName: VariableName;
|
|
43
|
+
readonly rangeStart: number | Expression;
|
|
44
|
+
readonly rangeEnd: number | Expression;
|
|
45
|
+
readonly tag = "for-range";
|
|
46
|
+
constructor(body: WorkflowStatement[], loopVariableName: VariableName, rangeStart: number | Expression, rangeEnd: number | Expression);
|
|
47
|
+
}
|
|
48
|
+
export declare class FunctionInvocationStatement {
|
|
49
|
+
readonly callee: string;
|
|
50
|
+
readonly args?: WorkflowParameters | undefined;
|
|
51
|
+
readonly result?: VariableName | undefined;
|
|
52
|
+
readonly tag = "function-invocation";
|
|
53
|
+
constructor(callee: string, args?: WorkflowParameters | undefined, result?: VariableName | undefined);
|
|
54
|
+
}
|
|
55
|
+
export interface IfBranch {
|
|
56
|
+
readonly condition: Expression;
|
|
57
|
+
readonly body: WorkflowStatement[];
|
|
58
|
+
}
|
|
59
|
+
export interface IfNextBranch {
|
|
60
|
+
readonly condition: Expression;
|
|
61
|
+
readonly next: StepName;
|
|
62
|
+
}
|
|
63
|
+
export declare class IfStatement {
|
|
64
|
+
readonly branches: (IfBranch | IfNextBranch)[];
|
|
65
|
+
readonly tag = "if";
|
|
66
|
+
constructor(branches: (IfBranch | IfNextBranch)[]);
|
|
67
|
+
}
|
|
68
|
+
export interface ParallelBranch {
|
|
69
|
+
readonly name: string;
|
|
70
|
+
readonly body: WorkflowStatement[];
|
|
71
|
+
}
|
|
72
|
+
export declare class ParallelStatement {
|
|
73
|
+
readonly branches: ParallelBranch[];
|
|
74
|
+
readonly shared?: VariableName[] | undefined;
|
|
75
|
+
readonly concurrencyLimit?: number | undefined;
|
|
76
|
+
readonly exceptionPolicy?: string | undefined;
|
|
77
|
+
readonly tag = "parallel";
|
|
78
|
+
constructor(branches: ParallelBranch[], shared?: VariableName[] | undefined, concurrencyLimit?: number | undefined, exceptionPolicy?: string | undefined);
|
|
79
|
+
}
|
|
80
|
+
export declare class ParallelForStatement {
|
|
81
|
+
readonly forStep: ForStatement | ForRangeStatement;
|
|
82
|
+
readonly shared?: VariableName[] | undefined;
|
|
83
|
+
readonly concurrencyLimit?: number | undefined;
|
|
84
|
+
readonly exceptionPolicy?: string | undefined;
|
|
85
|
+
readonly tag = "parallel-for";
|
|
86
|
+
constructor(forStep: ForStatement | ForRangeStatement, shared?: VariableName[] | undefined, concurrencyLimit?: number | undefined, exceptionPolicy?: string | undefined);
|
|
87
|
+
}
|
|
88
|
+
export declare class RaiseStatement {
|
|
89
|
+
readonly value: Expression;
|
|
90
|
+
readonly tag = "raise";
|
|
91
|
+
constructor(value: Expression);
|
|
92
|
+
}
|
|
93
|
+
export declare class ReturnStatement {
|
|
94
|
+
readonly value: Expression | undefined;
|
|
95
|
+
readonly tag = "return";
|
|
96
|
+
constructor(value: Expression | undefined);
|
|
97
|
+
}
|
|
98
|
+
export declare class SwitchStatement {
|
|
99
|
+
readonly branches: IfBranch[];
|
|
100
|
+
readonly tag = "switch";
|
|
101
|
+
constructor(branches: IfBranch[]);
|
|
102
|
+
}
|
|
103
|
+
export declare class TryStatement {
|
|
104
|
+
readonly tryBody: WorkflowStatement[];
|
|
105
|
+
readonly exceptBody?: WorkflowStatement[] | undefined;
|
|
106
|
+
readonly retryPolicy?: (string | CustomRetryPolicy) | undefined;
|
|
107
|
+
readonly errorMap?: VariableName | undefined;
|
|
108
|
+
readonly finalizerBody?: WorkflowStatement[] | undefined;
|
|
109
|
+
readonly tag = "try";
|
|
110
|
+
constructor(tryBody: WorkflowStatement[], exceptBody?: WorkflowStatement[] | undefined, retryPolicy?: (string | CustomRetryPolicy) | undefined, errorMap?: VariableName | undefined, finalizerBody?: WorkflowStatement[] | undefined);
|
|
111
|
+
}
|
|
112
|
+
export declare class WhileStatement {
|
|
113
|
+
readonly condition: Expression;
|
|
114
|
+
readonly body: WorkflowStatement[];
|
|
115
|
+
readonly tag = "while";
|
|
116
|
+
constructor(condition: Expression, body: WorkflowStatement[]);
|
|
117
|
+
}
|
|
118
|
+
export declare class DoWhileStatement {
|
|
119
|
+
readonly condition: Expression;
|
|
120
|
+
readonly body: WorkflowStatement[];
|
|
121
|
+
readonly tag = "do-while";
|
|
122
|
+
constructor(condition: Expression, body: WorkflowStatement[]);
|
|
123
|
+
}
|
|
124
|
+
export declare class LabelledStatement {
|
|
125
|
+
readonly label: string;
|
|
126
|
+
readonly statements: WorkflowStatement[];
|
|
127
|
+
readonly tag = "label";
|
|
128
|
+
constructor(label: string, statements: WorkflowStatement[]);
|
|
129
|
+
}
|
|
130
|
+
export type WorkflowStatement = AssignStatement | BreakStatement | ContinueStatement | DoWhileStatement | ForStatement | ForRangeStatement | FunctionInvocationStatement | IfStatement | LabelledStatement | ParallelForStatement | ParallelStatement | RaiseStatement | ReturnStatement | SwitchStatement | TryStatement | WhileStatement;
|
|
131
|
+
export declare function applyNested(fn: (x: WorkflowStatement[]) => WorkflowStatement[], s: WorkflowStatement): WorkflowStatement;
|
|
132
|
+
//# sourceMappingURL=statements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/ast/statements.ts"],"names":[],"mappings":"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"}
|