workflowscript-compiler
TypeScript icon, indicating that this package has built-in type declarations

0.2.0 • Public • Published

WorkflowScript - a JavaScript-inspired programming language for writing GCP Workflows programs

WorkflowScript is a programming language for writing GCP Workflows programs in a Javascript-like syntax. This project is a compiler that compiles WorkflowScript source code into GCP Workflows native YAML syntax.

WorkflowScript syntax and sample programs

A sample program in WorkflowScript:

workflow main() {
  name = "workflows"

  sys.log(text="Hello, " + name)
}

The examples directory contains more sample programs.

WorkflowScript language reference documents the valid WorkflowScript syntax.

Installation

npm install workflowscript-compiler

Using the compiler

Compiling a sample program in the file examples/hello.wfs:

npx wfscompile examples/hello.wfs

The source can also be piped to the compiler:

cat examples/hello.wfs | npx wfscompile

The compiler will output the workflows YAML on stdout.

Command line options

The wfscompile command can take the following optional arguments:

  • --disableValidators <VALIDATOR>: disable a named source code validator. See below for validator names. Can be given multiple times.

Run npx wfscompile -h to see all options.

Error handling

If the compiler encounters parsing errors or detects invalid syntax, it prints an error message and quits with a non-zero exit code.

Some error checks can be disabled with the --disableValidators command line option. This might be handy, for example, if a error check is buggy and rejects a valid program. The names and functionality of checks that can be disabled:

  • duplicatedStepName checks that there are no duplicated step names in the workflow
  • duplicatedSubworkflowName checks that there are not duplicated subworkflow names
  • invalidWorkflowName checks that the workflow names are valid
  • missingJumpTarget checks that call and next steps targets exist
  • wrongNumberOfCallArguments checks that a correct number of arguments is provided in subworkflow calls

Build

npm install
npm run build

Test

npm run test

Compiler API

Calling the Workflow compiler from a Javascript application:

import { compile } from 'workflowscript-compiler'

const sourcecode = `workflow main() {
  sys.log(text="Hello workflows!")
}`

console.log(compile(sourcecode))

Compiling a source code file:

import { compileFile } from 'workflowscript-compiler'

console.log(compileFile('examples/hello.wfs'))

It is possible to disable some validators by listing the names of validators-to-be-disabled as the second argument of the compile() or compileFile() function invocation.

import { compile } from 'workflowscript-compiler'

const workflowSource = 'workflow main() {}'
const disabled = ['missingJumpTarget']

compile(workflowSource, disabled)

Syntax diagram

Draw WorkflowScript grammar's syntax diagrams to grammar.html:

npm run diagram

Roadmap

(not prioritized)

  • Fix bugs. This is beta quality software! Expect at least some bugs.
  • while loop
  • Javascriptlike non-quoted object keys: {firstKey: 1, second: 2}
  • finally block in try?
  • index variable in a for loop
  • floor division: x // 2. Comments?
  • Detect uninitialized variables
  • Dead code elimination (or at least dead subworkflow elimination)

License

The MIT License

Package Sidebar

Install

npm i workflowscript-compiler

Weekly Downloads

45

Version

0.2.0

License

MIT

Unpacked Size

422 kB

Total Files

82

Last publish

Collaborators

  • aajanki