ts2workflows 0.9.0 → 0.11.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/LICENSE +1 -1
- package/README.md +20 -7
- package/dist/ast/stepnames.js +3 -3
- package/dist/ast/steps.d.ts +10 -7
- package/dist/ast/steps.d.ts.map +1 -1
- package/dist/ast/steps.js +16 -12
- package/dist/ast/workflows.d.ts +0 -5
- package/dist/ast/workflows.d.ts.map +1 -1
- package/dist/ast/workflows.js +1 -25
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -0
- package/dist/transpiler/expressions.d.ts +4 -3
- package/dist/transpiler/expressions.d.ts.map +1 -1
- package/dist/transpiler/expressions.js +15 -7
- package/dist/transpiler/index.d.ts +5 -0
- package/dist/transpiler/index.d.ts.map +1 -1
- package/dist/transpiler/index.js +12 -1
- package/dist/transpiler/statements.d.ts.map +1 -1
- package/dist/transpiler/statements.js +235 -116
- package/dist/transpiler/transformations.js +14 -6
- package/dist/utils.d.ts +0 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +0 -10
- package/language_reference.md +45 -15
- package/package.json +11 -9
- package/types/workflowslib.d.ts +58 -74
- package/dist/ast/validation.d.ts +0 -20
- package/dist/ast/validation.d.ts.map +0 -1
- package/dist/ast/validation.js +0 -214
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright © 2024 Antti Ajanki, <antti.ajanki@iki.fi>
|
|
3
|
+
Copyright © 2024-2025 Antti Ajanki, <antti.ajanki@iki.fi>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
6
|
a copy of this software and associated documentation files (the
|
package/README.md
CHANGED
|
@@ -2,13 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
ts2workflows converts Typescript code to a [GCP Workflows](https://cloud.google.com/workflows/docs/apis) program.
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+
|
|
5
8
|
Only a subset of Typescript features are supported. The [language reference](language_reference.md) describes the supported Typescript features.
|
|
6
9
|
|
|
7
10
|
See the [samples](samples) directory for code examples.
|
|
8
11
|
|
|
9
12
|
Project status: It's possible to write Workflows programs, but the transpiler has not been extensively tested. Expect some rough edges!
|
|
10
13
|
|
|
11
|
-
##
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
npm install ts2workflows
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
12
21
|
|
|
13
22
|
Converting Typescript code in a file samples/sample1.ts into GCP Workflows YAML syntax on stdout:
|
|
14
23
|
|
|
@@ -28,7 +37,7 @@ When developing ts2workflows, you can run the transpiler directly from the sourc
|
|
|
28
37
|
npx tsx src/cli.ts samples/sample1.ts
|
|
29
38
|
```
|
|
30
39
|
|
|
31
|
-
## Type checking
|
|
40
|
+
## Type checking workflow sources
|
|
32
41
|
|
|
33
42
|
One benefit of writing the workflow programs in Typescript is that the sources can be type checked.
|
|
34
43
|
|
|
@@ -48,24 +57,28 @@ import { http, retry_policy } from 'ts2workflows/types/workflowslib'
|
|
|
48
57
|
|
|
49
58
|
Type checking step is completely separate from the transpiling. The ts2workflows command ignores type annotations.
|
|
50
59
|
|
|
51
|
-
##
|
|
60
|
+
## Development
|
|
61
|
+
|
|
62
|
+
### Build
|
|
52
63
|
|
|
53
64
|
```
|
|
54
65
|
npm install
|
|
55
66
|
npm run build
|
|
56
67
|
```
|
|
57
68
|
|
|
58
|
-
|
|
69
|
+
### Run unit tests
|
|
59
70
|
|
|
60
71
|
```
|
|
61
72
|
npm run test
|
|
62
73
|
```
|
|
63
74
|
|
|
64
|
-
|
|
75
|
+
Run tests and print the test coverage:
|
|
65
76
|
|
|
66
|
-
|
|
77
|
+
```
|
|
78
|
+
npm run test-coverage
|
|
79
|
+
```
|
|
67
80
|
|
|
68
|
-
|
|
81
|
+
### Architecture
|
|
69
82
|
|
|
70
83
|
A transpilation using ts2workflows consists of five phases:
|
|
71
84
|
|
package/dist/ast/stepnames.js
CHANGED
|
@@ -12,9 +12,9 @@ export class StepNameGenerator {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
export function generateStepNames(ast) {
|
|
15
|
-
const stepNameGenerator = new StepNameGenerator();
|
|
16
15
|
const subworkflows = ast.subworkflows
|
|
17
16
|
.map((subworkflow) => {
|
|
17
|
+
const stepNameGenerator = new StepNameGenerator();
|
|
18
18
|
return subworkflow.withStepNames((x) => stepNameGenerator.generate(x));
|
|
19
19
|
})
|
|
20
20
|
.map(fixJumpLabels);
|
|
@@ -150,7 +150,7 @@ function removeJumpTargetsParallel(step) {
|
|
|
150
150
|
return new ParallelStepASTNamed(transformedSteps, step.shared, step.concurrenceLimit, step.exceptionPolicy);
|
|
151
151
|
}
|
|
152
152
|
function removeJumpTargetsSwitch(step) {
|
|
153
|
-
const transformedConditions = step.
|
|
153
|
+
const transformedConditions = step.branches.map((cond) => {
|
|
154
154
|
return {
|
|
155
155
|
condition: cond.condition,
|
|
156
156
|
steps: removeJumpTargetSteps(cond.steps),
|
|
@@ -250,7 +250,7 @@ function renameJumpTargetsSwitch(step, replaceLabels) {
|
|
|
250
250
|
if (step.next) {
|
|
251
251
|
updatedNext = replaceLabels.get(step.next) ?? step.next;
|
|
252
252
|
}
|
|
253
|
-
const updatedConditions = step.
|
|
253
|
+
const updatedConditions = step.branches.map((cond) => {
|
|
254
254
|
let updatedCondNext = undefined;
|
|
255
255
|
if (cond.next) {
|
|
256
256
|
updatedCondNext = replaceLabels.get(cond.next) ?? cond.next;
|
package/dist/ast/steps.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { Expression, VariableName } from './expressions.js';
|
|
1
|
+
import { Expression, MemberExpression, VariableName, VariableReferenceExpression } from './expressions.js';
|
|
2
2
|
import { Subworkflow, WorkflowParameter } from './workflows.js';
|
|
3
3
|
export type StepName = string;
|
|
4
|
-
export
|
|
4
|
+
export interface VariableAssignment {
|
|
5
|
+
name: VariableReferenceExpression | MemberExpression;
|
|
6
|
+
value: Expression;
|
|
7
|
+
}
|
|
5
8
|
export type WorkflowParameters = Record<VariableName, Expression>;
|
|
6
9
|
export interface CustomRetryPolicy {
|
|
7
10
|
predicate?: string;
|
|
@@ -154,9 +157,9 @@ export declare class SwitchStepAST {
|
|
|
154
157
|
}
|
|
155
158
|
export declare class SwitchStepASTNamed {
|
|
156
159
|
readonly tag = "switch";
|
|
157
|
-
readonly
|
|
160
|
+
readonly branches: SwitchConditionAST<NamedWorkflowStep>[];
|
|
158
161
|
readonly next?: StepName;
|
|
159
|
-
constructor(
|
|
162
|
+
constructor(branches: SwitchConditionAST<NamedWorkflowStep>[], next?: StepName);
|
|
160
163
|
}
|
|
161
164
|
export interface SwitchConditionAST<T extends WorkflowStepAST | NamedWorkflowStep> {
|
|
162
165
|
readonly condition: Expression;
|
|
@@ -176,11 +179,11 @@ export declare class TryStepAST {
|
|
|
176
179
|
}
|
|
177
180
|
export declare class TryStepASTNamed {
|
|
178
181
|
readonly tag = "try";
|
|
179
|
-
readonly retryPolicy?: string | CustomRetryPolicy;
|
|
180
|
-
readonly errorMap?: VariableName;
|
|
181
182
|
readonly trySteps: NamedWorkflowStep[];
|
|
182
183
|
readonly exceptSteps?: NamedWorkflowStep[];
|
|
183
|
-
|
|
184
|
+
readonly retryPolicy?: string | CustomRetryPolicy;
|
|
185
|
+
readonly errorMap?: VariableName;
|
|
186
|
+
constructor(trySteps: NamedWorkflowStep[], exceptSteps?: NamedWorkflowStep[], retryPolicy?: string | CustomRetryPolicy, errorMap?: VariableName);
|
|
184
187
|
}
|
|
185
188
|
export declare class JumpTargetAST {
|
|
186
189
|
readonly tag = "jumptarget";
|
package/dist/ast/steps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/ast/steps.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EAEV,YAAY,
|
|
1
|
+
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/ast/steps.ts"],"names":[],"mappings":"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"}
|
package/dist/ast/steps.js
CHANGED
|
@@ -267,17 +267,19 @@ export class SwitchStepAST {
|
|
|
267
267
|
}
|
|
268
268
|
export class SwitchStepASTNamed {
|
|
269
269
|
tag = 'switch';
|
|
270
|
-
|
|
270
|
+
branches;
|
|
271
271
|
next;
|
|
272
|
-
constructor(
|
|
273
|
-
this.
|
|
272
|
+
constructor(branches, next) {
|
|
273
|
+
this.branches = branches;
|
|
274
274
|
this.next = next;
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
// https://cloud.google.com/workflows/docs/reference/syntax/catching-errors
|
|
278
278
|
export class TryStepAST {
|
|
279
279
|
tag = 'try';
|
|
280
|
+
// Steps in the try block
|
|
280
281
|
trySteps;
|
|
282
|
+
// Steps in the except block
|
|
281
283
|
exceptSteps;
|
|
282
284
|
retryPolicy;
|
|
283
285
|
errorMap;
|
|
@@ -298,14 +300,14 @@ export class TryStepAST {
|
|
|
298
300
|
}
|
|
299
301
|
export class TryStepASTNamed {
|
|
300
302
|
tag = 'try';
|
|
301
|
-
retryPolicy;
|
|
302
|
-
errorMap;
|
|
303
303
|
// Steps in the try block
|
|
304
304
|
trySteps;
|
|
305
305
|
// Steps in the except block
|
|
306
306
|
exceptSteps;
|
|
307
|
-
|
|
308
|
-
|
|
307
|
+
retryPolicy;
|
|
308
|
+
errorMap;
|
|
309
|
+
constructor(trySteps, exceptSteps, retryPolicy, errorMap) {
|
|
310
|
+
this.trySteps = trySteps;
|
|
309
311
|
this.retryPolicy = retryPolicy;
|
|
310
312
|
this.errorMap = errorMap;
|
|
311
313
|
this.exceptSteps = exceptSteps;
|
|
@@ -443,7 +445,7 @@ export function nestedSteps(step) {
|
|
|
443
445
|
case 'parallel':
|
|
444
446
|
return nestedStepsParallel(step);
|
|
445
447
|
case 'switch':
|
|
446
|
-
return step.
|
|
448
|
+
return step.branches.map((x) => x.steps);
|
|
447
449
|
case 'try':
|
|
448
450
|
return nestedStepsTry(step);
|
|
449
451
|
}
|
|
@@ -476,8 +478,10 @@ export function renderStep(step) {
|
|
|
476
478
|
switch (step.tag) {
|
|
477
479
|
case 'assign':
|
|
478
480
|
return {
|
|
479
|
-
assign: step.assignments.map((
|
|
480
|
-
return {
|
|
481
|
+
assign: step.assignments.map(({ name, value }) => {
|
|
482
|
+
return {
|
|
483
|
+
[name.toString()]: expressionToLiteralValueOrLiteralExpression(value),
|
|
484
|
+
};
|
|
481
485
|
}),
|
|
482
486
|
...(step.next && { next: step.next }),
|
|
483
487
|
};
|
|
@@ -517,7 +521,7 @@ export function renderStep(step) {
|
|
|
517
521
|
};
|
|
518
522
|
case 'switch':
|
|
519
523
|
return {
|
|
520
|
-
switch: step.
|
|
524
|
+
switch: step.branches.map(renderSwitchCondition),
|
|
521
525
|
...(step.next && { next: step.next }),
|
|
522
526
|
};
|
|
523
527
|
case 'try':
|
|
@@ -540,7 +544,7 @@ function renderCallStep(step) {
|
|
|
540
544
|
}
|
|
541
545
|
return {
|
|
542
546
|
call: step.call,
|
|
543
|
-
...(args
|
|
547
|
+
...(args && Object.keys(args).length > 0 && { args }),
|
|
544
548
|
...(step.result !== undefined && { result: step.result }),
|
|
545
549
|
};
|
|
546
550
|
}
|
package/dist/ast/workflows.d.ts
CHANGED
|
@@ -19,10 +19,5 @@ export declare class Subworkflow {
|
|
|
19
19
|
constructor(name: string, steps: NamedWorkflowStep[], params?: WorkflowParameter[]);
|
|
20
20
|
render(): Record<string, unknown>;
|
|
21
21
|
renderBody(): Record<string, unknown>;
|
|
22
|
-
iterateStepsDepthFirst(): IterableIterator<NamedWorkflowStep>;
|
|
23
22
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Print the workflow as a YAML string.
|
|
26
|
-
*/
|
|
27
|
-
export declare function toYAMLString(workflow: WorkflowApp): string;
|
|
28
23
|
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/ast/workflows.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/ast/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAc,MAAM,YAAY,CAAA;AAE1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,CAAC,EAAE,+BAA+B,CAAA;CAC1C;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAAA;gBAExB,YAAY,GAAE,WAAW,EAAO;IAI5C,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKlC;AAGD,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAA;gBAGnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,iBAAiB,EAAE,EAC1B,MAAM,CAAC,EAAE,iBAAiB,EAAE;IAO9B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAMjC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAsBtC"}
|
package/dist/ast/workflows.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { nestedSteps, renderStep } from './steps.js';
|
|
1
|
+
import { renderStep } from './steps.js';
|
|
3
2
|
/**
|
|
4
3
|
* This is the main container class that brings together all subworkflows in a program
|
|
5
4
|
*/
|
|
@@ -48,27 +47,4 @@ export class Subworkflow {
|
|
|
48
47
|
});
|
|
49
48
|
return body;
|
|
50
49
|
}
|
|
51
|
-
*iterateStepsDepthFirst() {
|
|
52
|
-
const visited = new Set();
|
|
53
|
-
function* visitPreOrder(step) {
|
|
54
|
-
if (!visited.has(step)) {
|
|
55
|
-
visited.add(step);
|
|
56
|
-
yield step;
|
|
57
|
-
for (const x of nestedSteps(step.step).flat()) {
|
|
58
|
-
yield* visitPreOrder(x);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
for (const step of this.steps) {
|
|
63
|
-
yield* visitPreOrder(step);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Print the workflow as a YAML string.
|
|
69
|
-
*/
|
|
70
|
-
export function toYAMLString(workflow) {
|
|
71
|
-
return YAML.stringify(workflow.render(), {
|
|
72
|
-
lineWidth: 100,
|
|
73
|
-
});
|
|
74
50
|
}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CACtC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CACtC;AAID,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,EAAE,kBAAkB,CAAA;gBAEhB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB;CAI1D;AAID,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAG5B"}
|
package/dist/errors.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// WorkflowSyntaxError is thrown when the input contains a syntax error.
|
|
2
|
+
// The error is in user's input.
|
|
1
3
|
export class WorkflowSyntaxError extends Error {
|
|
2
4
|
location;
|
|
3
5
|
constructor(message, location) {
|
|
@@ -5,6 +7,8 @@ export class WorkflowSyntaxError extends Error {
|
|
|
5
7
|
this.location = location;
|
|
6
8
|
}
|
|
7
9
|
}
|
|
10
|
+
// InternalTranspilingError is thrown when ts2workflow ends up in an unexpected state.
|
|
11
|
+
// The error is in ts2workflow.
|
|
8
12
|
export class InternalTranspilingError extends Error {
|
|
9
13
|
constructor(message) {
|
|
10
14
|
super(`Internal error: ${message}`);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { TSESTree } from '@typescript-eslint/typescript-estree';
|
|
2
|
-
import { Expression, Primitive } from '../ast/expressions.js';
|
|
2
|
+
import { Expression, MemberExpression, Primitive, VariableReferenceExpression } from '../ast/expressions.js';
|
|
3
3
|
export declare function convertExpression(instance: TSESTree.Expression): Expression;
|
|
4
4
|
export declare function convertObjectExpression(node: TSESTree.ObjectExpression): Record<string, Primitive | Expression>;
|
|
5
5
|
export declare function convertObjectAsExpressionValues(node: TSESTree.ObjectExpression): Record<string, Expression>;
|
|
6
6
|
export declare function convertMemberExpression(node: TSESTree.MemberExpression): Expression;
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
7
|
+
export declare function isIntrinsic(calleeName: string): boolean;
|
|
8
|
+
export declare function isIntrinsicStatment(calleeName: string): boolean;
|
|
9
9
|
export declare function throwIfSpread<T extends TSESTree.Expression | TSESTree.Property | TSESTree.SpreadElement | null>(nodes: T[]): Exclude<T, TSESTree.SpreadElement>[];
|
|
10
|
+
export declare function convertVariableNameExpression(instance: TSESTree.Expression): VariableReferenceExpression | MemberExpression;
|
|
10
11
|
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/transpiler/expressions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkB,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAGL,UAAU,
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/transpiler/expressions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkB,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAGL,UAAU,EAEV,gBAAgB,EAChB,SAAS,EAGT,2BAA2B,EAI5B,MAAM,uBAAuB,CAAA;AAG9B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,GAAG,UAAU,CAiE3E;AAcD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAC9B,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC,CAgCxC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAC9B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAG5B;AAwJD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAC9B,UAAU,CAcZ;AA0JD,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG/D;AAoDD,wBAAgB,aAAa,CAC3B,CAAC,SACG,QAAQ,CAAC,UAAU,GACnB,QAAQ,CAAC,QAAQ,GACjB,QAAQ,CAAC,aAAa,GACtB,IAAI,EACR,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAgBlD;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,CAAC,UAAU,GAC5B,2BAA2B,GAAG,gBAAgB,CAchD"}
|
|
@@ -201,7 +201,7 @@ export function convertMemberExpression(node) {
|
|
|
201
201
|
}
|
|
202
202
|
function convertChainExpression(node) {
|
|
203
203
|
const properties = chainExpressionToFlatArray(node.expression);
|
|
204
|
-
const args =
|
|
204
|
+
const args = optionalChainToMapGetArguments(properties);
|
|
205
205
|
return new FunctionInvocationExpression('map.get', args);
|
|
206
206
|
}
|
|
207
207
|
function chainExpressionToFlatArray(node) {
|
|
@@ -226,7 +226,7 @@ function chainExpressionToFlatArray(node) {
|
|
|
226
226
|
];
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
|
-
function
|
|
229
|
+
function optionalChainToMapGetArguments(properties) {
|
|
230
230
|
if (properties.length <= 0) {
|
|
231
231
|
// this shouldn't happen
|
|
232
232
|
return [];
|
|
@@ -290,7 +290,7 @@ function convertCallExpression(node) {
|
|
|
290
290
|
const calleeExpression = convertExpression(node.callee);
|
|
291
291
|
if (isFullyQualifiedName(calleeExpression)) {
|
|
292
292
|
const calleeName = calleeExpression.toString();
|
|
293
|
-
if (
|
|
293
|
+
if (isIntrinsic(calleeName)) {
|
|
294
294
|
let msg;
|
|
295
295
|
if (calleeName === 'call_step') {
|
|
296
296
|
msg =
|
|
@@ -308,11 +308,11 @@ function convertCallExpression(node) {
|
|
|
308
308
|
throw new WorkflowSyntaxError('Callee should be a qualified name', node.loc);
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
|
-
export function
|
|
312
|
-
const
|
|
313
|
-
return
|
|
311
|
+
export function isIntrinsic(calleeName) {
|
|
312
|
+
const intrinsics = ['parallel', 'retry_policy', 'call_step'];
|
|
313
|
+
return intrinsics.includes(calleeName);
|
|
314
314
|
}
|
|
315
|
-
export function
|
|
315
|
+
export function isIntrinsicStatment(calleeName) {
|
|
316
316
|
const statementNames = ['parallel', 'retry_policy'];
|
|
317
317
|
return statementNames.includes(calleeName);
|
|
318
318
|
}
|
|
@@ -360,3 +360,11 @@ export function throwIfSpread(nodes) {
|
|
|
360
360
|
const argumentExpressions = nodes.filter((x) => x?.type !== AST_NODE_TYPES.SpreadElement);
|
|
361
361
|
return argumentExpressions;
|
|
362
362
|
}
|
|
363
|
+
export function convertVariableNameExpression(instance) {
|
|
364
|
+
const ex = convertExpression(instance);
|
|
365
|
+
if (ex.expressionType !== 'variableReference' &&
|
|
366
|
+
ex.expressionType !== 'member') {
|
|
367
|
+
throw new WorkflowSyntaxError('The left-hand side of an assignment must be a variable or member expression', instance.loc);
|
|
368
|
+
}
|
|
369
|
+
return ex;
|
|
370
|
+
}
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
+
import { WorkflowApp } from '../ast/workflows.js';
|
|
1
2
|
export declare function transpile(code: string, inputFile?: string, tsconfigPath?: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Print the workflow as a YAML string.
|
|
5
|
+
*/
|
|
6
|
+
export declare function toYAMLString(workflow: WorkflowApp): string;
|
|
2
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transpiler/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transpiler/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAqB,MAAM,qBAAqB,CAAA;AAKpE,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAkBR;AAuID;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAI1D"}
|
package/dist/transpiler/index.js
CHANGED
|
@@ -20,7 +20,7 @@ export function transpile(code, inputFile, tsconfigPath) {
|
|
|
20
20
|
const { ast } = parseAndGenerateServices(code, parserOptions);
|
|
21
21
|
const workflowAst = { subworkflows: ast.body.flatMap(parseTopLevelStatement) };
|
|
22
22
|
const workflow = generateStepNames(workflowAst);
|
|
23
|
-
return
|
|
23
|
+
return toYAMLString(workflow);
|
|
24
24
|
}
|
|
25
25
|
function parseTopLevelStatement(node) {
|
|
26
26
|
switch (node.type) {
|
|
@@ -54,6 +54,9 @@ function parseTopLevelStatement(node) {
|
|
|
54
54
|
function parseSubworkflows(node) {
|
|
55
55
|
const workflowParams = parseWorkflowParams(node.params);
|
|
56
56
|
const steps = transformAST(parseStatement(node.body, {}));
|
|
57
|
+
if (steps.length === 0) {
|
|
58
|
+
throw new WorkflowSyntaxError('Empty subworkflow body is not allowed on GCP Workflows', node.body.loc);
|
|
59
|
+
}
|
|
57
60
|
return new SubworkflowAST(node.id.name, steps, workflowParams);
|
|
58
61
|
}
|
|
59
62
|
function parseWorkflowParams(nodeParams) {
|
|
@@ -101,3 +104,11 @@ function parseSubworkflowDefaultArgument(param) {
|
|
|
101
104
|
default: defaultValue,
|
|
102
105
|
};
|
|
103
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Print the workflow as a YAML string.
|
|
109
|
+
*/
|
|
110
|
+
export function toYAMLString(workflow) {
|
|
111
|
+
return YAML.stringify(workflow.render(), {
|
|
112
|
+
lineWidth: 100,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/transpiler/statements.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,QAAQ,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAWL,QAAQ,EAOR,eAAe,EAChB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/transpiler/statements.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,QAAQ,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAWL,QAAQ,EAOR,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAkCxB,MAAM,WAAW,cAAc;IAE7B,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAA;IAE/B,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAA;IAGlC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAKtC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC9B;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,SAAS,EACxB,GAAG,EAAE,cAAc,GAClB,eAAe,EAAE,CA6EnB"}
|