ts2workflows 0.4.0 → 0.5.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/README.md +6 -2
- package/dist/ast/expressions.d.ts.map +1 -1
- package/dist/ast/expressions.js +7 -10
- package/dist/ast/steps.d.ts.map +1 -1
- package/dist/ast/steps.js +13 -12
- package/dist/transpiler/expressions.d.ts +1 -0
- package/dist/transpiler/expressions.d.ts.map +1 -1
- package/dist/transpiler/expressions.js +6 -5
- package/dist/transpiler/statements.d.ts.map +1 -1
- package/dist/transpiler/statements.js +11 -4
- package/dist/transpiler/transformations.d.ts.map +1 -1
- package/dist/transpiler/transformations.js +191 -89
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +6 -0
- package/package.json +2 -2
- package/types/global.d.ts +9 -1
package/README.md
CHANGED
|
@@ -29,10 +29,10 @@ One benefit of writing the workflow programs in Typescript is that the sources c
|
|
|
29
29
|
This example command shows how to type check source files in the [samples](samples) directory using the standard Typescript compiler `tsc`. The command prints typing errors or finishes silently, if there are no errors.
|
|
30
30
|
|
|
31
31
|
```sh
|
|
32
|
-
npx tsc --project
|
|
32
|
+
npx tsc --project tsconfig.workflows.json
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
The file [
|
|
35
|
+
The file [tsconfig.workflows.json](tsconfig.workflows.json) contains a sample configuration for type checking workflow sources.
|
|
36
36
|
|
|
37
37
|
Type annotations for [Workflows standard library functions and expression helpers](https://cloud.google.com/workflows/docs/reference/stdlib/overview) and for some [connectors](https://cloud.google.com/workflows/docs/reference/googleapis) are provided in [types/workflowslib.d.ts](types/workflowslib.d.ts). They are also included in the published npm module. To import type annotations in a project that has ts2workflows module as a dependency, use the following import command:
|
|
38
38
|
|
|
@@ -55,6 +55,10 @@ npm run build
|
|
|
55
55
|
npm run test
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
+
## Publishing the package to npmjs.com
|
|
59
|
+
|
|
60
|
+
Update CHANGELOG.md, the version number in package.json, npm install, commit, tag with v1.2.3 and push. A Github Actions worklfow will build the package and publish it on tag pushes.
|
|
61
|
+
|
|
58
62
|
## Architecture
|
|
59
63
|
|
|
60
64
|
A transpilation using ts2workflows consists of five phases:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/ast/expressions.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AACjC,MAAM,MAAM,cAAc,GACtB,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,CAAA;AACR,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAA;AA2B7C,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,GAC1B;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;CAAE,CAAA;AAE7C,MAAM,MAAM,+BAA+B,GACvC,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,+BAA+B,EAAE,GACjC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,+BAA+B,CAAA;CAAE,CAAA;AAEtD,MAAM,MAAM,UAAU,GAClB,mBAAmB,GACnB,gBAAgB,GAChB,2BAA2B,GAC3B,4BAA4B,GAC5B,gBAAgB,GAChB,eAAe,CAAA;AAInB,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,cAAc,eAAc;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;gBAEb,KAAK,EAAE,SAAS;IAM5B,QAAQ,IAAI,MAAM;CAgBnB;AAGD,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,cAAc,YAAW;IAClC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;gBAGxB,IAAI,EAAE,UAAU,EAChB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,UAAU;IAOnB,QAAQ,IAAI,MAAM;CAwBnB;AAID,qBAAa,2BAA2B;IACtC,QAAQ,CAAC,cAAc,uBAAsB;IAC7C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;gBAEvB,YAAY,EAAE,YAAY;IAItC,QAAQ,IAAI,MAAM;CAGnB;AAGD,qBAAa,4BAA4B;IACvC,QAAQ,CAAC,cAAc,wBAAuB;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,UAAU,EAAE,CAAA;gBAEpB,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE;IAKnE,QAAQ,IAAI,MAAM;CAInB;AAGD,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,cAAc,YAAW;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAEd,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;IAMvE,QAAQ,IAAI,MAAM;CAOnB;AAED,qBAAa,eAAe;IAC1B,QAAQ,CAAC,cAAc,WAAU;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;gBAEd,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU;IAKtD,QAAQ,IAAI,MAAM;CAQnB;AAuBD,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,GAAG,IAAI,UAAU,CAE3E;AAGD,wBAAgB,2CAA2C,CACzD,EAAE,EAAE,UAAU,GACb,+BAA+B,CA2BjC;
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/ast/expressions.ts"],"names":[],"mappings":"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"}
|
package/dist/ast/expressions.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isRecord } from '../utils.js';
|
|
1
|
+
import { isRecord, mapRecordValues } from '../utils.js';
|
|
2
2
|
// Operator precendence for unary and binary operators in the Workflows language.
|
|
3
3
|
// Note that these differ somewhat from Javascript.
|
|
4
4
|
// https://cloud.google.com/workflows/docs/reference/syntax/datatypes
|
|
@@ -224,26 +224,23 @@ function primitiveExpressionToLiteralValueOrLiteralExpression(ex) {
|
|
|
224
224
|
});
|
|
225
225
|
}
|
|
226
226
|
else if (isRecord(ex.value)) {
|
|
227
|
-
return
|
|
227
|
+
return mapRecordValues(ex.value, (v) => {
|
|
228
228
|
if (isExpression(v)) {
|
|
229
|
-
return
|
|
229
|
+
return expressionToLiteralValueOrLiteralExpression(v);
|
|
230
230
|
}
|
|
231
231
|
else if (Array.isArray(v) || isRecord(v)) {
|
|
232
|
-
return
|
|
233
|
-
k,
|
|
234
|
-
primitiveExpressionToLiteralValueOrLiteralExpression(new PrimitiveExpression(v)),
|
|
235
|
-
];
|
|
232
|
+
return primitiveExpressionToLiteralValueOrLiteralExpression(new PrimitiveExpression(v));
|
|
236
233
|
}
|
|
237
234
|
else if (v === null ||
|
|
238
235
|
typeof v === 'string' ||
|
|
239
236
|
typeof v === 'number' ||
|
|
240
237
|
typeof v === 'boolean') {
|
|
241
|
-
return
|
|
238
|
+
return v;
|
|
242
239
|
}
|
|
243
240
|
else {
|
|
244
|
-
return
|
|
241
|
+
return `\${${primitiveToString(v)}}`;
|
|
245
242
|
}
|
|
246
|
-
})
|
|
243
|
+
});
|
|
247
244
|
}
|
|
248
245
|
else {
|
|
249
246
|
return `\${${ex.toString()}}`;
|
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":"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
|
|
1
|
+
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/ast/steps.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,YAAY,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC7B,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;AACpE,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;AAEjE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,CAAA;CACxC;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAA;gBAGnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,eAAe,EAAE,EACxB,MAAM,CAAC,EAAE,iBAAiB,EAAE;IAO9B,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,WAAW;CAIjE;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,WAAW,GACX,UAAU,GACV,WAAW,GACX,eAAe,GACf,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,aAAa,GACb,UAAU,GACV,aAAa,CAAA;AAEjB;;GAEG;AACH,MAAM,MAAM,8BAA8B,GACtC,aAAa,GACb,WAAW,GACX,eAAe,GACf,WAAW,GACX,oBAAoB,GACpB,YAAY,GACZ,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,eAAe,GACf,aAAa,CAAA;AAEjB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,8BAA8B,CAAA;CACrC;AAGD,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,YAAW;IACvB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;gBAGpB,WAAW,EAAE,kBAAkB,EAAE,EACjC,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM;IAOhB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa;IAQzC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa;CAG5C;AAGD,qBAAa,WAAW;IACtB,QAAQ,CAAC,GAAG,UAAS;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAA;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAGrB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,kBAAkB,EACzB,MAAM,CAAC,EAAE,YAAY,EACrB,KAAK,CAAC,EAAE,MAAM;IAQhB,WAAW,IAAI,MAAM;IAIrB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW;CAG1C;AAGD,qBAAa,UAAU;IACrB,QAAQ,CAAC,GAAG,SAAQ;IACpB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,CAAA;IACjC,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAA;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAA;IACzC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAA;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAGrB,KAAK,EAAE,eAAe,EAAE,EACxB,gBAAgB,EAAE,YAAY,EAC9B,cAAc,EAAE,UAAU,EAC1B,aAAa,CAAC,EAAE,YAAY,EAC5B,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM;IAWhB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU;CAWzC;AAED,qBAAa,eAAe;IAC1B,QAAQ,CAAC,GAAG,SAAQ;IACpB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;IACnC,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAA;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAA;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAA;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;gBAGxB,KAAK,EAAE,iBAAiB,EAAE,EAC1B,gBAAgB,EAAE,YAAY,EAC9B,cAAc,CAAC,EAAE,UAAU,EAC3B,aAAa,CAAC,EAAE,YAAY,EAC5B,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM;CASpB;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,GAAG,UAAS;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEX,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAK1C,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW;CAG1C;AAGD,qBAAa,eAAe;IAC1B,QAAQ,CAAC,GAAG,cAAa;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,UAAU,CAAA;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAGrB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,UAAU,EAClD,MAAM,CAAC,EAAE,YAAY,EAAE,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,eAAe,CAAC,EAAE,MAAM,EACxB,KAAK,CAAC,EAAE,MAAM;IAShB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe;CAS9C;AAED,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,GAAG,cAAa;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;gBAG/B,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,eAAe,EAC5D,MAAM,CAAC,EAAE,YAAY,EAAE,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,eAAe,CAAC,EAAE,MAAM;CAc3B;AAGD,qBAAa,YAAY;IACvB,QAAQ,CAAC,GAAG,WAAU;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEX,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM;IAK7C,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY;CAG3C;AAGD,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,YAAW;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEX,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM;IAKzD,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa;CAG5C;AAGD,qBAAa,YAAY;IACvB,QAAQ,CAAC,GAAG,WAAU;IACtB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEX,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM;IAKpD,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY;CAG3C;AAED,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,GAAG,WAAU;IACtB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;gBAEvB,KAAK,EAAE,iBAAiB,EAAE;CAGvC;AAGD,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,YAAW;IACvB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAAE,CAAA;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEX,QAAQ,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM;IAK3E,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa;CAG5C;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,GAAG,YAAW;IACvB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAA;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;gBAGtB,UAAU,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,EACnD,IAAI,CAAC,EAAE,QAAQ;CAKlB;AAED,MAAM,WAAW,kBAAkB,CACjC,CAAC,SAAS,eAAe,GAAG,iBAAiB;IAE7C,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAA;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CACzB;AAGD,qBAAa,UAAU;IACrB,QAAQ,CAAC,GAAG,SAAQ;IACpB,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAA;IACpC,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAA;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAGrB,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,EAAE,eAAe,EAAE,EAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,EACxC,QAAQ,CAAC,EAAE,YAAY,EACvB,KAAK,CAAC,EAAE,MAAM;IAShB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU;CASzC;AAED,qBAAa,eAAe;IAC1B,QAAQ,CAAC,GAAG,SAAQ;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAA;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;IAEhC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAEtC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAA;gBAGvC,KAAK,EAAE,iBAAiB,EAAE,EAC1B,WAAW,EAAE,iBAAiB,EAAE,EAChC,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,EACxC,QAAQ,CAAC,EAAE,YAAY;CAO1B;AAKD,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,gBAAe;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;;CAKvB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GACvC,iBAAiB,CAsCnB;AAsGD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,8BAA8B,GACnC,iBAAiB,EAAE,EAAE,CAuBvB;AA6BD;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,8BAA8B,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+DzB"}
|
package/dist/ast/steps.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isRecord } from '../utils.js';
|
|
1
|
+
import { isRecord, mapRecordValues } from '../utils.js';
|
|
2
2
|
import { expressionToLiteralValueOrLiteralExpression, } from './expressions.js';
|
|
3
3
|
import { Subworkflow } from './workflows.js';
|
|
4
4
|
export class SubworkflowAST {
|
|
@@ -35,7 +35,7 @@ export class AssignStepAST {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
withLabel(newLabel) {
|
|
38
|
-
return new AssignStepAST(this.assignments, newLabel);
|
|
38
|
+
return new AssignStepAST(this.assignments, this.next, newLabel);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
// https://cloud.google.com/workflows/docs/reference/syntax/calls
|
|
@@ -307,6 +307,7 @@ function namedStepsFor(step, generateName) {
|
|
|
307
307
|
}
|
|
308
308
|
function namedStepsParallel(step, generateName) {
|
|
309
309
|
let steps;
|
|
310
|
+
const mainLabel = step.label ?? generateName('parallel');
|
|
310
311
|
if (!isRecord(step.steps)) {
|
|
311
312
|
const forStep = namedSteps(step.steps, generateName).step;
|
|
312
313
|
if (forStep.tag !== 'for') {
|
|
@@ -315,13 +316,13 @@ function namedStepsParallel(step, generateName) {
|
|
|
315
316
|
steps = forStep;
|
|
316
317
|
}
|
|
317
318
|
else {
|
|
318
|
-
steps =
|
|
319
|
-
const named =
|
|
320
|
-
return
|
|
321
|
-
})
|
|
319
|
+
steps = mapRecordValues(step.steps, (step) => {
|
|
320
|
+
const named = step.steps.map((x) => namedSteps(x, generateName));
|
|
321
|
+
return new StepsStepASTNamed(named);
|
|
322
|
+
});
|
|
322
323
|
}
|
|
323
324
|
return {
|
|
324
|
-
name:
|
|
325
|
+
name: mainLabel,
|
|
325
326
|
step: new ParallelStepASTNamed(steps, step.shared, step.concurrencyLimit, step.exceptionPolicy),
|
|
326
327
|
};
|
|
327
328
|
}
|
|
@@ -332,21 +333,23 @@ function namedStepsSteps(step, generateName) {
|
|
|
332
333
|
};
|
|
333
334
|
}
|
|
334
335
|
function namedStepsSwitch(step, generateName) {
|
|
336
|
+
const mainLabel = step.label ?? generateName('switch');
|
|
335
337
|
const namedBranches = step.branches.map((branch) => ({
|
|
336
338
|
condition: branch.condition,
|
|
337
339
|
steps: branch.steps.map((nested) => namedSteps(nested, generateName)),
|
|
338
340
|
next: branch.next,
|
|
339
341
|
}));
|
|
340
342
|
return {
|
|
341
|
-
name:
|
|
343
|
+
name: mainLabel,
|
|
342
344
|
step: new SwitchStepASTNamed(namedBranches),
|
|
343
345
|
};
|
|
344
346
|
}
|
|
345
347
|
function namedStepsTry(step, generateName) {
|
|
348
|
+
const mainLabel = step.label ?? generateName('try');
|
|
346
349
|
const namedTrySteps = step.trySteps.map((nested) => namedSteps(nested, generateName));
|
|
347
350
|
const namedExceptSteps = step.exceptSteps.map((nested) => namedSteps(nested, generateName));
|
|
348
351
|
return {
|
|
349
|
-
name:
|
|
352
|
+
name: mainLabel,
|
|
350
353
|
step: new TryStepASTNamed(namedTrySteps, namedExceptSteps, step.retryPolicy, step.errorMap),
|
|
351
354
|
};
|
|
352
355
|
}
|
|
@@ -463,9 +466,7 @@ function renderSwitchCondition(cond) {
|
|
|
463
466
|
function renderCallStep(step) {
|
|
464
467
|
let args = undefined;
|
|
465
468
|
if (step.args) {
|
|
466
|
-
args =
|
|
467
|
-
return [k, expressionToLiteralValueOrLiteralExpression(v)];
|
|
468
|
-
}));
|
|
469
|
+
args = mapRecordValues(step.args, (v) => expressionToLiteralValueOrLiteralExpression(v));
|
|
469
470
|
}
|
|
470
471
|
return {
|
|
471
472
|
call: step.call,
|
|
@@ -5,5 +5,6 @@ export declare function convertObjectExpression(node: TSESTree.ObjectExpression)
|
|
|
5
5
|
export declare function convertObjectAsExpressionValues(node: TSESTree.ObjectExpression): Record<string, Expression>;
|
|
6
6
|
export declare function convertMemberExpression(node: TSESTree.MemberExpression): Expression;
|
|
7
7
|
export declare function isMagicFunction(calleeName: string): boolean;
|
|
8
|
+
export declare function isMagicFunctionStatmentOnly(calleeName: string): boolean;
|
|
8
9
|
export declare function throwIfSpread<T extends TSESTree.Expression | TSESTree.Property | TSESTree.SpreadElement | null>(nodes: T[]): Exclude<T, TSESTree.SpreadElement>[];
|
|
9
10
|
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/transpiler/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAGL,UAAU,EAGV,SAAS,EAMV,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/transpiler/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAGL,UAAU,EAGV,SAAS,EAMV,MAAM,uBAAuB,CAAA;AAI9B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,GAAG,UAAU,CAO3E;AAED,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,CAK5B;AAsMD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAC9B,UAAU,CAcZ;AA0JD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAGvE;AA8CD,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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AST_NODE_TYPES } from '@typescript-eslint/typescript-estree';
|
|
2
2
|
import { BinaryExpression, FunctionInvocationExpression, MemberExpression, PrimitiveExpression, UnaryExpression, VariableReferenceExpression, isExpression, isFullyQualifiedName, } from '../ast/expressions.js';
|
|
3
3
|
import { InternalTranspilingError, WorkflowSyntaxError } from '../errors.js';
|
|
4
|
+
import { mapRecordValues } from '../utils.js';
|
|
4
5
|
export function convertExpression(instance) {
|
|
5
6
|
const expOrPrimitive = convertExpressionOrPrimitive(instance);
|
|
6
7
|
if (isExpression(expOrPrimitive)) {
|
|
@@ -35,12 +36,8 @@ export function convertObjectExpression(node) {
|
|
|
35
36
|
}));
|
|
36
37
|
}
|
|
37
38
|
export function convertObjectAsExpressionValues(node) {
|
|
38
|
-
const primitiveOrExpArguments = convertObjectExpression(node);
|
|
39
39
|
// Convert Primitive values to PrimitiveExpressions
|
|
40
|
-
return
|
|
41
|
-
const valEx = isExpression(val) ? val : new PrimitiveExpression(val);
|
|
42
|
-
return [key, valEx];
|
|
43
|
-
}));
|
|
40
|
+
return mapRecordValues(convertObjectExpression(node), (val) => isExpression(val) ? val : new PrimitiveExpression(val));
|
|
44
41
|
}
|
|
45
42
|
function convertExpressionOrPrimitive(instance) {
|
|
46
43
|
switch (instance.type) {
|
|
@@ -296,6 +293,10 @@ export function isMagicFunction(calleeName) {
|
|
|
296
293
|
const magicFunctions = ['parallel', 'retry_policy', 'call_step'];
|
|
297
294
|
return magicFunctions.includes(calleeName);
|
|
298
295
|
}
|
|
296
|
+
export function isMagicFunctionStatmentOnly(calleeName) {
|
|
297
|
+
const statementNames = ['parallel', 'retry_policy'];
|
|
298
|
+
return statementNames.includes(calleeName);
|
|
299
|
+
}
|
|
299
300
|
function convertConditionalExpression(node) {
|
|
300
301
|
const test = convertExpression(node.test);
|
|
301
302
|
const consequent = convertExpression(node.consequent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/transpiler/statements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EASL,QAAQ,EAMR,eAAe,EAChB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/transpiler/statements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EASL,QAAQ,EAMR,eAAe,EAChB,MAAM,iBAAiB,CAAA;AA2BxB,MAAM,WAAW,cAAc;IAE7B,WAAW,CAAC,EAAE,QAAQ,CAAA;IAEtB,cAAc,CAAC,EAAE,QAAQ,CAAA;CAC1B;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,SAAS,EACxB,GAAG,EAAE,cAAc,EACnB,SAAS,CAAC,EAAE,eAAe,EAAE,GAC5B,eAAe,EAAE,CAGnB"}
|
|
@@ -4,7 +4,7 @@ import { BinaryExpression, FunctionInvocationExpression, PrimitiveExpression, Va
|
|
|
4
4
|
import { InternalTranspilingError, WorkflowSyntaxError } from '../errors.js';
|
|
5
5
|
import { isRecord } from '../utils.js';
|
|
6
6
|
import { transformAST } from './transformations.js';
|
|
7
|
-
import { convertExpression, convertMemberExpression, convertObjectExpression, convertObjectAsExpressionValues, isMagicFunction, throwIfSpread, } from './expressions.js';
|
|
7
|
+
import { convertExpression, convertMemberExpression, convertObjectExpression, convertObjectAsExpressionValues, isMagicFunction, throwIfSpread, isMagicFunctionStatmentOnly, } from './expressions.js';
|
|
8
8
|
import { blockingFunctions } from './generated/functionMetadata.js';
|
|
9
9
|
export function parseStatement(node, ctx, postSteps) {
|
|
10
10
|
const steps = parseStatementRecursively(node, ctx);
|
|
@@ -65,14 +65,17 @@ function parseStatementRecursively(node, ctx) {
|
|
|
65
65
|
}
|
|
66
66
|
function convertVariableDeclarations(declarations, ctx) {
|
|
67
67
|
return declarations.map((decl) => {
|
|
68
|
-
if (decl.type !== AST_NODE_TYPES.VariableDeclarator) {
|
|
69
|
-
throw new WorkflowSyntaxError('Not a VariableDeclarator', decl.loc);
|
|
70
|
-
}
|
|
71
68
|
if (decl.id.type !== AST_NODE_TYPES.Identifier) {
|
|
72
69
|
throw new WorkflowSyntaxError('Expected Identifier', decl.loc);
|
|
73
70
|
}
|
|
74
71
|
const targetName = decl.id.name;
|
|
75
72
|
if (decl.init?.type === AST_NODE_TYPES.CallExpression) {
|
|
73
|
+
const calleeName = decl.init.callee.type === AST_NODE_TYPES.Identifier
|
|
74
|
+
? decl.init.callee.name
|
|
75
|
+
: undefined;
|
|
76
|
+
if (calleeName && isMagicFunctionStatmentOnly(calleeName)) {
|
|
77
|
+
throw new WorkflowSyntaxError(`"${calleeName}" can't be called as part of an expression`, decl.init.callee.loc);
|
|
78
|
+
}
|
|
76
79
|
return callExpressionToStep(decl.init, targetName, ctx);
|
|
77
80
|
}
|
|
78
81
|
else {
|
|
@@ -123,6 +126,10 @@ function assignmentExpressionToSteps(node, ctx) {
|
|
|
123
126
|
if (node.right.type === AST_NODE_TYPES.CallExpression &&
|
|
124
127
|
node.right.callee.type === AST_NODE_TYPES.Identifier &&
|
|
125
128
|
isMagicFunction(node.right.callee.name)) {
|
|
129
|
+
const calleeName = node.right.callee.name;
|
|
130
|
+
if (isMagicFunctionStatmentOnly(calleeName)) {
|
|
131
|
+
throw new WorkflowSyntaxError(`"${calleeName}" can't be called as part of an expression`, node.right.callee.loc);
|
|
132
|
+
}
|
|
126
133
|
const needsTempVariable = compoundOperator === undefined ||
|
|
127
134
|
node.left.type !== AST_NODE_TYPES.Identifier;
|
|
128
135
|
const resultVariable = needsTempVariable ? '__temp' : targetName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformations.d.ts","sourceRoot":"","sources":["../../src/transpiler/transformations.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"transformations.d.ts","sourceRoot":"","sources":["../../src/transpiler/transformations.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAwBxB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAUxE;AA6JD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EAAE,GACvB,eAAe,EAAE,CAqBnB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AssignStepAST, CallStepAST, ForStepAST, RaiseStepAST, ReturnStepAST, SwitchStepAST, TryStepAST, } from '../ast/steps.js';
|
|
2
2
|
import { InternalTranspilingError } from '../errors.js';
|
|
3
|
-
import { isRecord } from '../utils.js';
|
|
3
|
+
import { isRecord, mapRecordValues } from '../utils.js';
|
|
4
4
|
import { BinaryExpression, FunctionInvocationExpression, MemberExpression, PrimitiveExpression, UnaryExpression, VariableReferenceExpression, expressionToLiteralValueOrLiteralExpression, isExpression, isFullyQualifiedName, isLiteral, } from '../ast/expressions.js';
|
|
5
5
|
import { blockingFunctions } from './generated/functionMetadata.js';
|
|
6
6
|
const Unmodified = Symbol();
|
|
@@ -25,7 +25,7 @@ function mergeAssignSteps(steps) {
|
|
|
25
25
|
prev?.tag === 'assign' &&
|
|
26
26
|
prev.assignments.length < 50 &&
|
|
27
27
|
!prev.next) {
|
|
28
|
-
const merged = new AssignStepAST(prev.assignments.concat(current.assignments), current.next);
|
|
28
|
+
const merged = new AssignStepAST(prev.assignments.concat(current.assignments), current.next, prev.label ?? current.label);
|
|
29
29
|
acc.pop();
|
|
30
30
|
acc.push(merged);
|
|
31
31
|
}
|
|
@@ -301,11 +301,11 @@ function transformExpressionsAssign(step, transform) {
|
|
|
301
301
|
function transformExpressionsCall(step, transform) {
|
|
302
302
|
if (step.args) {
|
|
303
303
|
const newSteps = [];
|
|
304
|
-
const newArgs =
|
|
304
|
+
const newArgs = mapRecordValues(step.args, (ex) => {
|
|
305
305
|
const [steps2, ex2] = transform(ex);
|
|
306
306
|
newSteps.push(...steps2);
|
|
307
|
-
return
|
|
308
|
-
})
|
|
307
|
+
return ex2;
|
|
308
|
+
});
|
|
309
309
|
newSteps.push(new CallStepAST(step.call, newArgs, step.result, step.label));
|
|
310
310
|
return newSteps;
|
|
311
311
|
}
|
|
@@ -357,8 +357,8 @@ function transformExpressionsSwitch(step, transform) {
|
|
|
357
357
|
newSteps.push(new SwitchStepAST(newBranches, step.label));
|
|
358
358
|
return newSteps;
|
|
359
359
|
}
|
|
360
|
-
function transformExpression(ex,
|
|
361
|
-
const transformed =
|
|
360
|
+
function transformExpression(ex, transform) {
|
|
361
|
+
const transformed = transform(ex);
|
|
362
362
|
if (transformed !== Unmodified) {
|
|
363
363
|
// Use the transformed version of this term
|
|
364
364
|
return transformed;
|
|
@@ -367,28 +367,76 @@ function transformExpression(ex, transformer) {
|
|
|
367
367
|
// Otherwise, recurse into the nested expression
|
|
368
368
|
switch (ex.expressionType) {
|
|
369
369
|
case 'primitive':
|
|
370
|
-
|
|
371
|
-
|
|
370
|
+
if (isLiteral(ex)) {
|
|
371
|
+
return ex;
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
const newPrimitive = transformPrimitive(ex.value, transform);
|
|
375
|
+
return newPrimitive === ex.value
|
|
376
|
+
? ex
|
|
377
|
+
: new PrimitiveExpression(newPrimitive);
|
|
378
|
+
}
|
|
372
379
|
case 'binary':
|
|
373
|
-
return transformBinaryExpression(ex,
|
|
380
|
+
return transformBinaryExpression(ex, transform);
|
|
374
381
|
case 'functionInvocation':
|
|
375
|
-
return transformFunctionInvocationExpression(ex,
|
|
382
|
+
return transformFunctionInvocationExpression(ex, transform);
|
|
376
383
|
case 'member':
|
|
377
|
-
return
|
|
384
|
+
return transformMemberExpression(ex, transform);
|
|
378
385
|
case 'unary':
|
|
379
|
-
return
|
|
386
|
+
return transformUnaryExpression(ex, transform);
|
|
387
|
+
case 'variableReference':
|
|
388
|
+
return ex;
|
|
380
389
|
}
|
|
381
390
|
}
|
|
382
391
|
}
|
|
383
|
-
function
|
|
392
|
+
function transformPrimitive(val, transform) {
|
|
393
|
+
if (Array.isArray(val)) {
|
|
394
|
+
return val.map((x) => isExpression(x)
|
|
395
|
+
? transformExpression(x, transform)
|
|
396
|
+
: transformPrimitive(x, transform));
|
|
397
|
+
}
|
|
398
|
+
else if (isRecord(val)) {
|
|
399
|
+
return mapRecordValues(val, (x) => isExpression(x)
|
|
400
|
+
? transformExpression(x, transform)
|
|
401
|
+
: transformPrimitive(x, transform));
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
return val;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
function transformBinaryExpression(ex, transform) {
|
|
384
408
|
// Transform left first to keep the correct order of execution of sub-expressions
|
|
385
|
-
const newLeft = transformExpression(ex.left,
|
|
386
|
-
const newRight = transformExpression(ex.right,
|
|
387
|
-
|
|
409
|
+
const newLeft = transformExpression(ex.left, transform);
|
|
410
|
+
const newRight = transformExpression(ex.right, transform);
|
|
411
|
+
if (newLeft === ex.left && newRight === ex.right) {
|
|
412
|
+
return ex;
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
return new BinaryExpression(newLeft, ex.binaryOperator, newRight);
|
|
416
|
+
}
|
|
388
417
|
}
|
|
389
|
-
function transformFunctionInvocationExpression(ex,
|
|
390
|
-
const newArguments = ex.arguments.map((x) => transformExpression(x,
|
|
391
|
-
|
|
418
|
+
function transformFunctionInvocationExpression(ex, transform) {
|
|
419
|
+
const newArguments = ex.arguments.map((x) => transformExpression(x, transform));
|
|
420
|
+
if (newArguments.every((x, i) => x === ex.arguments[i])) {
|
|
421
|
+
return ex;
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
return new FunctionInvocationExpression(ex.functionName, newArguments);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
function transformMemberExpression(ex, transform) {
|
|
428
|
+
const newObject = transformExpression(ex.object, transform);
|
|
429
|
+
const newProperty = transformExpression(ex.property, transform);
|
|
430
|
+
if (newObject === ex.object && newProperty === ex.property) {
|
|
431
|
+
return ex;
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
return new MemberExpression(newObject, newProperty, ex.computed);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
function transformUnaryExpression(ex, transform) {
|
|
438
|
+
const newValue = transformExpression(ex.value, transform);
|
|
439
|
+
return newValue === ex.value ? ex : new UnaryExpression(ex.operator, newValue);
|
|
392
440
|
}
|
|
393
441
|
/**
|
|
394
442
|
* Search for map literals in expressions and replace them with assign step + variable.
|
|
@@ -410,89 +458,143 @@ function transformFunctionInvocationExpression(ex, transformer) {
|
|
|
410
458
|
* return: ${__temp0.value}
|
|
411
459
|
*/
|
|
412
460
|
function mapLiteralsAsAssignSteps(steps) {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
// These steps are allowed to contain map literals if the map is the
|
|
421
|
-
// main expression
|
|
422
|
-
if (current.tag === 'assign') {
|
|
423
|
-
// This does the transformation a bit too eagerly: If any of the
|
|
424
|
-
// assignments need the map literal extraction, it is done on all of
|
|
425
|
-
// the variables.
|
|
426
|
-
needsTransformation = !current.assignments.every(([, value]) => {
|
|
427
|
-
return value.expressionType === 'primitive';
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
else if (current.tag === 'raise' || current.tag === 'return') {
|
|
431
|
-
needsTransformation =
|
|
432
|
-
current.value !== undefined &&
|
|
433
|
-
includesExtractableMapLiteral(current.value, true);
|
|
434
|
-
}
|
|
435
|
-
else if (current.tag === 'call') {
|
|
436
|
-
if (current.args) {
|
|
437
|
-
needsTransformation = Object.values(current.args).some((ex) => includesExtractableMapLiteral(ex, true));
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
if (needsTransformation) {
|
|
441
|
-
const transformedSteps = transformStepExpressions(current, transformer);
|
|
442
|
-
acc.push(...transformedSteps);
|
|
443
|
-
}
|
|
444
|
-
else {
|
|
445
|
-
acc.push(current);
|
|
446
|
-
}
|
|
447
|
-
return acc;
|
|
448
|
-
}, []);
|
|
461
|
+
return steps.flatMap((step) => transformStepExpressions(step, transformNestedMaps));
|
|
462
|
+
}
|
|
463
|
+
function transformNestedMaps(ex) {
|
|
464
|
+
const generateTemporaryVariableName = createTempVariableGenerator();
|
|
465
|
+
const { transformedExpression, tempVariables } = extractNestedMaps(ex, generateTemporaryVariableName, 0);
|
|
466
|
+
const assignments = tempVariables.length > 0 ? [new AssignStepAST(tempVariables)] : [];
|
|
467
|
+
return [assignments, transformedExpression];
|
|
449
468
|
}
|
|
450
|
-
|
|
451
|
-
function includesExtractableMapLiteral(ex, parentAllowsMaps) {
|
|
469
|
+
function extractNestedMaps(ex, generateName, nestingLevel) {
|
|
452
470
|
switch (ex.expressionType) {
|
|
453
471
|
case 'primitive':
|
|
454
|
-
|
|
455
|
-
return (!parentAllowsMaps ||
|
|
456
|
-
Object.values(ex.value).some((x) => isExpression(x) &&
|
|
457
|
-
includesExtractableMapLiteral(x, parentAllowsMaps)));
|
|
458
|
-
}
|
|
459
|
-
else if (Array.isArray(ex.value)) {
|
|
460
|
-
return ex.value.some((x) => isExpression(x) &&
|
|
461
|
-
includesExtractableMapLiteral(x, parentAllowsMaps));
|
|
462
|
-
}
|
|
463
|
-
else {
|
|
464
|
-
return false;
|
|
465
|
-
}
|
|
472
|
+
return extractNestedMapPrimitive(ex.value, generateName, nestingLevel);
|
|
466
473
|
case 'binary':
|
|
467
|
-
return (
|
|
468
|
-
includesExtractableMapLiteral(ex.right, parentAllowsMaps));
|
|
474
|
+
return extractNestedMapBinary(ex, generateName, nestingLevel);
|
|
469
475
|
case 'variableReference':
|
|
470
|
-
return
|
|
471
|
-
case 'unary':
|
|
472
|
-
return includesExtractableMapLiteral(ex.value, parentAllowsMaps);
|
|
476
|
+
return { transformedExpression: ex, tempVariables: [] };
|
|
473
477
|
case 'functionInvocation':
|
|
474
|
-
return ex
|
|
478
|
+
return extractNestedMapFunctionInvocation(ex, generateName, nestingLevel);
|
|
475
479
|
case 'member':
|
|
476
|
-
return (
|
|
477
|
-
|
|
480
|
+
return extractNestedMapMember(ex, generateName, nestingLevel);
|
|
481
|
+
case 'unary':
|
|
482
|
+
return extractNestedMapUnary(ex, generateName, nestingLevel);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
function extractNestedMapPrimitive(primitiveEx, generateName, nestingLevel) {
|
|
486
|
+
const { transformed, tempVariables } = extractNestedMapPrimitiveRecursive(primitiveEx, generateName, nestingLevel);
|
|
487
|
+
const ex = isExpression(transformed)
|
|
488
|
+
? transformed
|
|
489
|
+
: new PrimitiveExpression(transformed);
|
|
490
|
+
return {
|
|
491
|
+
transformedExpression: ex,
|
|
492
|
+
tempVariables,
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
function extractNestedMapPrimitiveRecursive(primitiveEx, generateName, nestingLevel) {
|
|
496
|
+
if (typeof primitiveEx === 'string' ||
|
|
497
|
+
typeof primitiveEx === 'number' ||
|
|
498
|
+
typeof primitiveEx === 'boolean' ||
|
|
499
|
+
primitiveEx === null) {
|
|
500
|
+
return {
|
|
501
|
+
transformed: primitiveEx,
|
|
502
|
+
tempVariables: [],
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
else if (Array.isArray(primitiveEx)) {
|
|
506
|
+
return extractMapsInList(primitiveEx, generateName, nestingLevel);
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
return extractMapsInMap(primitiveEx, generateName, nestingLevel);
|
|
478
510
|
}
|
|
479
511
|
}
|
|
480
|
-
function
|
|
481
|
-
|
|
482
|
-
if (
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
return new VariableReferenceExpression(tempVariable);
|
|
512
|
+
function extractMapsInList(primitiveEx, generateName, nestingLevel) {
|
|
513
|
+
const { tempVariables, elements } = primitiveEx.reduce((acc, val) => {
|
|
514
|
+
if (isExpression(val)) {
|
|
515
|
+
const { transformedExpression, tempVariables: temps } = extractNestedMaps(val, generateName, nestingLevel);
|
|
516
|
+
acc.tempVariables.push(...temps);
|
|
517
|
+
acc.elements.push(transformedExpression);
|
|
487
518
|
}
|
|
488
519
|
else {
|
|
489
|
-
|
|
520
|
+
const { transformed, tempVariables: temps } = extractNestedMapPrimitiveRecursive(val, generateName, nestingLevel);
|
|
521
|
+
acc.tempVariables.push(...temps);
|
|
522
|
+
acc.elements.push(transformed);
|
|
523
|
+
}
|
|
524
|
+
return acc;
|
|
525
|
+
}, {
|
|
526
|
+
tempVariables: [],
|
|
527
|
+
elements: [],
|
|
528
|
+
});
|
|
529
|
+
return {
|
|
530
|
+
tempVariables,
|
|
531
|
+
transformed: elements,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
function extractMapsInMap(primitiveEx, generateName, nestingLevel) {
|
|
535
|
+
const { tempVariables, properties } = Object.entries(primitiveEx).reduce((acc, [key, val]) => {
|
|
536
|
+
if (isExpression(val)) {
|
|
537
|
+
const { transformedExpression, tempVariables: temps } = extractNestedMaps(val, generateName, 0);
|
|
538
|
+
acc.tempVariables.push(...temps);
|
|
539
|
+
acc.properties[key] = transformedExpression;
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
const { transformed, tempVariables: temps } = extractNestedMapPrimitiveRecursive(val, generateName, 0);
|
|
543
|
+
acc.tempVariables.push(...temps);
|
|
544
|
+
acc.properties[key] = transformed;
|
|
490
545
|
}
|
|
546
|
+
return acc;
|
|
547
|
+
}, {
|
|
548
|
+
tempVariables: [],
|
|
549
|
+
properties: {},
|
|
550
|
+
});
|
|
551
|
+
let newValue;
|
|
552
|
+
if (nestingLevel === 0) {
|
|
553
|
+
newValue = properties;
|
|
491
554
|
}
|
|
492
|
-
|
|
555
|
+
else {
|
|
556
|
+
const name = generateName();
|
|
557
|
+
tempVariables.push([name, new PrimitiveExpression(properties)]);
|
|
558
|
+
newValue = new VariableReferenceExpression(name);
|
|
559
|
+
}
|
|
560
|
+
return {
|
|
561
|
+
transformed: newValue,
|
|
562
|
+
tempVariables,
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
function extractNestedMapFunctionInvocation(ex, generateName, nestingLevel) {
|
|
566
|
+
const { expressions, temps } = ex.arguments.reduce((acc, arg) => {
|
|
567
|
+
const { transformedExpression, tempVariables } = extractNestedMaps(arg, generateName, nestingLevel + 1);
|
|
568
|
+
acc.expressions.push(transformedExpression);
|
|
569
|
+
acc.temps.push(...tempVariables);
|
|
570
|
+
return acc;
|
|
571
|
+
}, { expressions: [], temps: [] });
|
|
572
|
+
return {
|
|
573
|
+
transformedExpression: new FunctionInvocationExpression(ex.functionName, expressions),
|
|
574
|
+
tempVariables: temps,
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
function extractNestedMapBinary(ex, generateName, nestingLevel) {
|
|
578
|
+
const left = extractNestedMaps(ex.left, generateName, nestingLevel + 1);
|
|
579
|
+
const right = extractNestedMaps(ex.right, generateName, nestingLevel + 1);
|
|
580
|
+
return {
|
|
581
|
+
transformedExpression: new BinaryExpression(left.transformedExpression, ex.binaryOperator, right.transformedExpression),
|
|
582
|
+
tempVariables: left.tempVariables.concat(right.tempVariables),
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
function extractNestedMapMember(ex, generateName, nestingLevel) {
|
|
586
|
+
const obj = extractNestedMaps(ex.object, generateName, nestingLevel + 1);
|
|
587
|
+
const pr = extractNestedMaps(ex.property, generateName, nestingLevel + 1);
|
|
588
|
+
return {
|
|
589
|
+
transformedExpression: new MemberExpression(obj.transformedExpression, pr.transformedExpression, ex.computed),
|
|
590
|
+
tempVariables: obj.tempVariables.concat(pr.tempVariables),
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
function extractNestedMapUnary(ex, generateName, nestingLevel) {
|
|
594
|
+
const { transformedExpression, tempVariables } = extractNestedMaps(ex.value, generateName, nestingLevel);
|
|
493
595
|
return {
|
|
494
|
-
transformedExpression:
|
|
495
|
-
|
|
596
|
+
transformedExpression: new UnaryExpression(ex.operator, transformedExpression),
|
|
597
|
+
tempVariables,
|
|
496
598
|
};
|
|
497
599
|
}
|
|
498
600
|
/**
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
export declare function isRecord(object: unknown): object is Record<keyof never, unknown>;
|
|
2
|
+
/**
|
|
3
|
+
* Apply f to values of obj and return the result
|
|
4
|
+
*/
|
|
5
|
+
export declare function mapRecordValues<T, U>(obj: Record<string, T>, f: (t: T) => U): Record<string, U>;
|
|
2
6
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CACtB,MAAM,EAAE,OAAO,GACd,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,OAAO,CAAC,CAExC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CACtB,MAAM,EAAE,OAAO,GACd,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,OAAO,CAAC,CAExC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EACtB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GACb,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAEnB"}
|
package/dist/utils.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export function isRecord(object) {
|
|
2
2
|
return object instanceof Object && object.constructor === Object;
|
|
3
3
|
}
|
|
4
|
+
/**
|
|
5
|
+
* Apply f to values of obj and return the result
|
|
6
|
+
*/
|
|
7
|
+
export function mapRecordValues(obj, f) {
|
|
8
|
+
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, f(v)]));
|
|
9
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts2workflows",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Transpile Typescript code to GCP Workflows programs",
|
|
5
5
|
"homepage": "https://github.com/aajanki/ts2workflows",
|
|
6
6
|
"repository": {
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
],
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@eslint/js": "^9.10.0",
|
|
60
|
-
"@types/chai": "^
|
|
60
|
+
"@types/chai": "^5.0.1",
|
|
61
61
|
"@types/mocha": "^10.0.6",
|
|
62
62
|
"@types/node": "^18",
|
|
63
63
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
package/types/global.d.ts
CHANGED
|
@@ -10,7 +10,15 @@ declare global {
|
|
|
10
10
|
|
|
11
11
|
var Symbol: SymbolConstructor
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Iterator types copied from lib.es2015.iterable.d.ts
|
|
15
|
+
*/
|
|
16
|
+
interface Iterator<T, TReturn = any, TNext = undefined> {
|
|
17
|
+
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
|
|
18
|
+
next(...args: [] | [TNext]): IteratorResult<T, TReturn>
|
|
19
|
+
return?(value?: TReturn): IteratorResult<T, TReturn>
|
|
20
|
+
throw?(e?: any): IteratorResult<T, TReturn>
|
|
21
|
+
}
|
|
14
22
|
|
|
15
23
|
interface Iterable<T> {
|
|
16
24
|
[Symbol.iterator](): Iterator<T>
|