1.105.0 • Published 5 months ago

@wmfs/statebox v1.105.0

Weekly downloads
290
License
MIT
Repository
github
Last release
5 months ago

Statebox Logo

Tymly Package npm (scoped) CircleCI codecov CodeFactor Dependabot badge Commitizen friendly JavaScript Style Guide license

Orchestrate Node functions using Amazon States Language

Useful links

Install

$ npm install @wmfs/statebox --save

Usage

const Statebox = require('@wmfs/statebox')
const statebox = new Statebox({})

const main = async

function() {

  // STEP 1:
  // Create some 'module' resources (i.e. Javascript
  // classes with 'run' and optional 'init' methods)
  // that state machines can then refer to...
  // -------------------------------------------------
  await statebox.ready
  statebox.createModuleResources({
    // Simple module to add two numbers together
    add: class Add {
      run(event, context) {
        context.sendTaskSuccess(event.number1 + event.number2)
      }
    },
    // Simple module to subtract one number from another
    subtract: class Subtract {
      // Init methods are optional, but all allow
      // resource-instances to be configured...
      init(resourceConfig, env, callback) {
        callback(null)
      }
      run(event, context) {
        context.sendTaskSuccess(event.number1 - event.number2)
      }
    }
  })

  // STEP 2:
  // Next create a new 'calculator' state
  // machine using Amazon States Language...
  // ---------------------------------------
  await statebox.createStateMachines({
      'calculator': {
        Comment: 'A simple calculator',
        StartAt: 'OperatorChoice',
        States: {
          OperatorChoice: {
            Type: 'Choice',
            Choices: [{
              Variable: '$.operator',
              StringEquals: '+',
              Next: 'Add'
            }, {
              Variable: '$.operator',
              StringEquals: '-',
              Next: 'Subtract'
            }]
          },
          Add: {
            Type: 'Task',
            InputPath: '$.numbers',
            Resource: 'module:add', // See createModuleResources()
            ResultPath: '$.result',
            End: true
          },
          Subtract: {
            Type: 'Task',
            InputPath: '$.numbers',
            Resource: 'module:subtract',
            ResultPath: '$.result',
            End: true
          }
        }
      }
    }, {}, // 'env': An environment/context/sandbox
  )

  // STEP 3:
  // Start a new execution on a state machine
  // ----------------------------------------
  const executionDescription = await statebox.startExecution({
      numbers: {
        number1: 3,
        number2: 2
      },
      operator: '-'
    }, // input
    'calculator', // state machine name
    {} // options
  )

  // STEP 4:
  // Look at the results...
  // ----------------------
  console.log(executionDescription)
  //  Result object
  //  -------------
  // {
  //   executionName: '...',
  //   ctx: {
  //     numbers': {
  //       number1: 3,
  //       number2: 2
  //     },
  //     operator: '-',
  //     result: 1 <--- The important bit :-)
  //   },
  //   currentStateName:'Subtract',
  //   currentResource:'module:subtract',
  //   stateMachineName:'calculator',
  //   startDate: '2018-09-03T21:58:04.287Z'
  // }
}

if (require.main === module) {
  main();
}

Testing

$ npm test

License

MIT

1.105.0

5 months ago

1.103.0

11 months ago

1.104.0

11 months ago

1.102.0

1 year ago

1.101.0

1 year ago

1.100.0

1 year ago

1.98.0

1 year ago

1.94.2

2 years ago

1.94.1

2 years ago

1.97.0

1 year ago

1.96.0

1 year ago

1.99.0

1 year ago

1.95.0

2 years ago

1.94.0

2 years ago

1.93.2

3 years ago

1.93.1

3 years ago

1.93.0

3 years ago

1.90.0

3 years ago

1.87.0

3 years ago

1.92.0

3 years ago

1.89.0

3 years ago

1.88.0

3 years ago

1.91.0

3 years ago

1.86.0

3 years ago

1.86.1

3 years ago

1.84.0

3 years ago

1.85.0

3 years ago

1.83.0

3 years ago

1.82.0

3 years ago

1.81.0

3 years ago

1.80.0

3 years ago

1.79.0

3 years ago

1.78.0

3 years ago

1.77.0

3 years ago

1.76.0

3 years ago

1.75.0

3 years ago

1.74.0

3 years ago

1.72.0

4 years ago

1.73.0

4 years ago

1.71.0

4 years ago

1.70.0

4 years ago

1.69.0

4 years ago

1.68.0

4 years ago

1.67.0

4 years ago

1.66.0

4 years ago

1.65.0

4 years ago

1.64.2

4 years ago

1.64.1

4 years ago

1.64.0

4 years ago

1.63.0

4 years ago

1.62.0

4 years ago

1.61.1

4 years ago

1.61.0

4 years ago

1.59.0

4 years ago

1.60.0

4 years ago

1.58.0

4 years ago

1.57.0

4 years ago

1.56.0

4 years ago

1.55.0

4 years ago

1.54.4

4 years ago

1.54.3

4 years ago

1.54.2

4 years ago

1.54.1

4 years ago

1.54.0

5 years ago

1.53.0

5 years ago

1.52.0

5 years ago

1.51.0

5 years ago

1.50.0

5 years ago

1.49.0

5 years ago

1.48.1

5 years ago

1.48.0

5 years ago

1.47.3

5 years ago

1.47.2

5 years ago

1.47.1

5 years ago

1.47.0

5 years ago

1.46.0

5 years ago

1.45.0

5 years ago

1.44.2

5 years ago

1.44.1

5 years ago

1.44.0

5 years ago

1.43.0

5 years ago

1.42.0

5 years ago

1.41.0

5 years ago

1.40.0

5 years ago

1.39.1

5 years ago

1.39.0

5 years ago

1.38.0

5 years ago

1.37.3

5 years ago

1.37.2

5 years ago

1.37.1

5 years ago

1.37.0

5 years ago

1.36.0

5 years ago

1.35.0

5 years ago

1.34.3

5 years ago

1.34.2

5 years ago

1.34.1

5 years ago

1.34.0

5 years ago

1.33.0

5 years ago

1.32.0

5 years ago

1.31.0

5 years ago

1.30.0

5 years ago

1.29.0

5 years ago

1.28.0

5 years ago

1.27.0

6 years ago

1.26.0

6 years ago

1.25.0

6 years ago

1.24.0

6 years ago

1.23.1

6 years ago

1.23.0

6 years ago

1.22.0

6 years ago

1.21.0

6 years ago

1.20.0

6 years ago

1.19.0

6 years ago

1.18.0

6 years ago

1.17.0

6 years ago

1.16.0

6 years ago

1.15.0

6 years ago

1.14.0

6 years ago

1.13.0

6 years ago

1.12.0

6 years ago

1.11.0

6 years ago

1.10.0

6 years ago

1.9.0

6 years ago

1.8.0

6 years ago

1.7.0

6 years ago

1.6.0

6 years ago

1.5.0

6 years ago

1.4.1

6 years ago

1.4.0

6 years ago

1.3.2

6 years ago

1.3.1

6 years ago

1.3.0

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.0

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago