A seriously functional workflow library, that lets you build composable and configurable process definitions for various reasons.
npm i worksmith --save
For a step by step tutorial click here
##Worksmith activities / task types
Worksmith comes with an extensible task library built up from the core and the extension modules.
| group | activities | description |
|---|
- Control flow:
sequence,parallelandwarezSequence - IO:
log,sql/pg - Tansformation:
map,regex,set - Extensibitly:
codeactivity , create custom task types by creating files in the tasks folder
| name | description |
|---|---|
| worksmith_salesforce | Interact with salesforce in a workflow |
| worksmith_etcd | Use network based locking via etcd service |
| coming | soon |
| worksmith_postgres | Execute SQL statements as part of the workflow, supports transactions |
| worksmith_assert | An assertion library to be used conventional workflows or workflows built for testing |
| worksmith_fs | Read/write files from a workflow |
- with worksmith you can build a complex async process chain from functional steps (tasks) - yet keep the application easy to understand and each functional step easy to developer and maintain. forget
if(err) return next(err) - workflow steps are unaware about each other - they communicate over a shared context. WorkSmith provides an intuitive expression syntax for working with the context in a workflow definitions
This can be in a config file, or as part of your js code as a variable.
{ "task": "sequence",
"items": [
{
task:"log", message:"hello workflow"
},
{
task: "map",
">insertParams": ["@req.params.id", 1, 1]
},
{
task:"sql/pg",
connection: "@connection",
command: "insert into order (order_id, version, type) \
values ($1, $2, $3) returning id",
params: "@insertParams",
resultTo: "insertResult"
},
{...}
]
}var worksmith = require('worksmith')
var workflow = worksmith('./workflow.json')
var context = {
connection:"postgres://login:pw@host/db",
other:"data"
}
workflow(context, function(err, result) {
console.log("workflow completed, %", context.insertResult)
})
worksmith lets you build your activities on a super easy way
Place the following code as "hello-world.js" in the tasks folder
var utils = require('worksmith')
module.exports = function (node) {
//use the node variable to access workflow params
return function(context) {
//use the context to access workflow execution state
return function(done) {
//set done when your acitivity finished its job
//read and write data from the context
console.log("Hello world", context.get(node.inParam))
context.set("myresult","myvalue")
done();
}
}
}Now you can use it the same way as the core activities
var wf = workflow( {"task":"hello-world", "inParam":"some thing"} );
var ctx = {"some":"value"};
wf(ctx, function(err) {
console.log(ctx)
})Write a log to the console
message
Waits a bit
duration
Like the name suggests
table data connection resultTo
Execute sub tasks in parallel
items array
Execute sub tasks in sequence
items array
Define a sequence on a patching compatible way
items array
Set variable on the workflow context
name value