Skip to content

senecajs/SenecaBatchProcessor

Repository files navigation

@seneca/batch-processor

Seneca BatchProcessor is a plugin for Seneca

INTRO

npm version build Coverage Status Known Vulnerabilities DeepScan grade Maintainability

Voxgig This open source module is sponsored and supported by Voxgig.

Install

$ npm install @seneca/batch-processor

Quick Example

// Seneca setup script:

seneca.use('BatchProcessor', {
  send: {  
    mode: 'async', // wait for transition, global setting
  },
  where: {
    'aim:foo,color:red': {
      match: { // on out
        'ok:true': {
          send: [  // zero or more next messages
            {
              msg: {
                aim: 'bar',
                color: 'blue',
                planet: 'out~planet' // dot path ref (see npm package `inks` .evaluate)
                order: 'ctx~place.order~Number' // Gubu validation expression
              }   
            },
            {
              mode: 'sync', // use .act, don't await
              msg: 'aim:bar,color:green,planet:out~planet',
              body: { // msg has precedence
                order: 'ctx~place.order~Number'
              }
            }
          ]
        }
      }
    }
  }
})


// Within aim:foo,color:red action script:

const process = seneca.export('BatchProcessor/process')

let out = {ok:true,planet:'mars'}
let ctx = {place:{order:1}} // for data not returned by message action
out = await process(seneca, ctx, out)
// send = [{aim:bar,color:blue,planet:mars,order:1}, {aim:bar,color:green,planet:mars,order:1}]
// out = {ok:true,planet:'mars',batch:BATCHID,run:RUNID}

The message send operations are executed by the plugin with code equivalent to:

await seneca.post({aim:'bar',color:'blue',planet:'mars',order:1})
seneca.act({aim:bar,color:green,planet:mars,order:1})

More Examples

// Seneca setup script:

seneca
.use('BatchMonitor', {...})
.use('BatchProcessor', {
  send: {  
    mode: 'async', // wait for transition, global setting
  },
  where: {
    'aim:foo,color:red': {
      match: {
        '*': { // catch all if no other patterns match
          // Create BatchMonitor entry if ctx.BatchMonitorEntry$ defined 
          entry: 'fail' // entry state, entry.info={why:'batch-process-no-match'}
        },
        'ok:false': {
          entry: { state: 'fail', info: { why: 'out~why' } },
          send: { // if single msg, no array needed
            // ctx has original message in msg$
            // out~ means entire contents of out object
            msg: 'aim:monitor,fail:msg,msg:ctx~msg$,out:out~'
          } 
        },
        'ok:true': { // matches are in same Patrun set, so usual Seneca pattern rules apply
          entry: 'done', // only created after all msgs sent
          send: [  // zero or more next messages
            {
              msg: {
                aim: 'bar',
                color: 'blue',
                planet: 'out~planet' // dot path ref
                order: 'ctx~place.order~Number' // Gubu validation expression
              }   
            },
            {
              mode: 'sync', // use .act, don't await
              msg: 'aim:bar,color:green,planet:out~planet',
              body: { // msg has precedence
                order: 'ctx~place.order~Number'
              }
            }
          ]
        }
      }
    }
  }
})


// Within aim:foo,color:red action script:

const process = seneca.export('BatchProcessor/process')
const bme = seneca.BatchMonitor(...).entry(...)

let out = {ok:true,planet:'mars'}
let ctx = {place:{order:1},BatchMonitorEntry$:bme}
out = await process(seneca, ctx, out)
// send = [{aim:bar,color:blue,planet:mars,order:1}, {aim:bar,color:green,planet:mars,order:1}]
// out = {ok:true,planet:'mars',batch:BATCHID,run:RUNID}

// The ctx object is used for returning additional information, such as send msg results.
// ctx = {place:{order:1}, result$:[{msg:,out:,bgn:,end:,dur:},...]}

Review the unit tests for more examples.

Motivation

Support

API

Contributing

Background

About

Seneca Batch Processor

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published