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 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 samples/tsconfig.workflows.json
32
+ npx tsc --project tsconfig.workflows.json
33
33
  ```
34
34
 
35
- The file [samples/tsconfig.workflows.json](samples/tsconfig.workflows.json) contains a sample configuration for type checking workflow sources.
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":"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"}
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/ast/expressions.ts"],"names":[],"mappings":"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"}
@@ -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 Object.fromEntries(Object.entries(ex.value).map(([k, v]) => {
227
+ return mapRecordValues(ex.value, (v) => {
228
228
  if (isExpression(v)) {
229
- return [k, expressionToLiteralValueOrLiteralExpression(v)];
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 [k, v];
238
+ return v;
242
239
  }
243
240
  else {
244
- return [k, `\${${primitiveToString(v)}}`];
241
+ return `\${${primitiveToString(v)}}`;
245
242
  }
246
- }));
243
+ });
247
244
  }
248
245
  else {
249
246
  return `\${${ex.toString()}}`;
@@ -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":"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"}
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 = Object.fromEntries(Object.entries(step.steps).map(([name, nested]) => {
319
- const named = nested.steps.map((x) => namedSteps(x, generateName));
320
- return [name, new StepsStepASTNamed(named)];
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: step.label ?? generateName('parallel'),
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: step.label ?? generateName('switch'),
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: step.label ?? generateName('try'),
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 = Object.fromEntries(Object.entries(step.args).map(([k, v]) => {
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;AAG9B,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,CAU5B;AAsMD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAC9B,UAAU,CAcZ;AA0JD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG3D;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
+ {"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 Object.fromEntries(Object.entries(primitiveOrExpArguments).map(([key, val]) => {
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;AA0BxB,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"}
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,EAUL,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAuBxB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAUxE;AA4JD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EAAE,GACvB,eAAe,EAAE,CAqBnB"}
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 = Object.fromEntries(Object.entries(step.args).map(([name, ex]) => {
304
+ const newArgs = mapRecordValues(step.args, (ex) => {
305
305
  const [steps2, ex2] = transform(ex);
306
306
  newSteps.push(...steps2);
307
- return [name, ex2];
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, transformer) {
361
- const transformed = transformer(ex);
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
- case 'variableReference':
371
- return ex;
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, transformer);
380
+ return transformBinaryExpression(ex, transform);
374
381
  case 'functionInvocation':
375
- return transformFunctionInvocationExpression(ex, transformer);
382
+ return transformFunctionInvocationExpression(ex, transform);
376
383
  case 'member':
377
- return new MemberExpression(transformExpression(ex.object, transformer), transformExpression(ex.property, transformer), ex.computed);
384
+ return transformMemberExpression(ex, transform);
378
385
  case 'unary':
379
- return new UnaryExpression(ex.operator, transformExpression(ex.value, transformer));
386
+ return transformUnaryExpression(ex, transform);
387
+ case 'variableReference':
388
+ return ex;
380
389
  }
381
390
  }
382
391
  }
383
- function transformBinaryExpression(ex, transformer) {
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, transformer);
386
- const newRight = transformExpression(ex.right, transformer);
387
- return new BinaryExpression(newLeft, ex.binaryOperator, newRight);
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, transformer) {
390
- const newArguments = ex.arguments.map((x) => transformExpression(x, transformer));
391
- return new FunctionInvocationExpression(ex.functionName, newArguments);
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
- function transformer(ex) {
414
- const generateTemporaryVariableName = createTempVariableGenerator();
415
- const { transformedExpression, assignSteps } = replaceMapLiterals(ex, generateTemporaryVariableName);
416
- return [assignSteps, transformedExpression];
417
- }
418
- return steps.reduce((acc, current) => {
419
- let needsTransformation = true;
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
- // Return true if the string representation of ex would include {}
451
- function includesExtractableMapLiteral(ex, parentAllowsMaps) {
469
+ function extractNestedMaps(ex, generateName, nestingLevel) {
452
470
  switch (ex.expressionType) {
453
471
  case 'primitive':
454
- if (isRecord(ex.value)) {
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 (includesExtractableMapLiteral(ex.left, parentAllowsMaps) ||
468
- includesExtractableMapLiteral(ex.right, parentAllowsMaps));
474
+ return extractNestedMapBinary(ex, generateName, nestingLevel);
469
475
  case 'variableReference':
470
- return false;
471
- case 'unary':
472
- return includesExtractableMapLiteral(ex.value, parentAllowsMaps);
476
+ return { transformedExpression: ex, tempVariables: [] };
473
477
  case 'functionInvocation':
474
- return ex.arguments.some((x) => includesExtractableMapLiteral(x, false));
478
+ return extractNestedMapFunctionInvocation(ex, generateName, nestingLevel);
475
479
  case 'member':
476
- return (includesExtractableMapLiteral(ex.object, false) ||
477
- includesExtractableMapLiteral(ex.property, false));
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 replaceMapLiterals(expression, generateName) {
481
- function replace(ex) {
482
- if (ex.expressionType === 'primitive' && isRecord(ex.value)) {
483
- const tempVariable = generateName();
484
- assignSteps.push(new AssignStepAST([[tempVariable, new PrimitiveExpression(ex.value)]]));
485
- // replace the map literal with a reference to the temporary variable
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
- return Unmodified;
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
- const assignSteps = [];
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: transformExpression(expression, replace),
495
- assignSteps,
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
@@ -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.4.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": "^4.3.16",
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
- interface Iterator<T> {}
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>