Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
version: 2.0

references:

workspace_root: &workspace_root
./

node_container: &node_container
docker:
- image: circleci/node:8

attach_workspace: &attach_workspace
attach_workspace:
at: *workspace_root

run_on_master: &run_on_master
filters:
branches:
only: master

jobs:
dependencies:
<<: *node_container
steps:
- checkout
- run: npm install
- persist_to_workspace:
root: *workspace_root
paths:
- node_modules
test:
<<: *node_container
steps:
- checkout
- *attach_workspace
- run: npm run test
- run: npm run coverage
publish:
<<: *node_container
steps:
- checkout
- *attach_workspace
- run: npx publish

workflows:
version: 2
default:
jobs:
- dependencies
- test:
requires: [ 'dependencies' ]
- publish:
context: ci-publish
requires: [ 'dependencies', 'test' ]
<<: *run_on_master
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules/
coverage/
11 changes: 11 additions & 0 deletions .eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
root: true

env:
node: true
es6: true

parserOptions:
ecmaVersion: 8

extends:
"eslint:recommended"
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
node_modules/
.nyc_output/
coverage/
.serverless/

.vscode

.DS_Store

*.swp
*.log

.localalias
.npmrc
sonar-coverage.info
14 changes: 14 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
test/
.nyc_output/
coverage/
docs/
examples/
.circleci/

.gitignore
.eslintrc
.eslintrc.yml
.eslintignore
.editorconfig
.npmignore
.travis.yml
61 changes: 61 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# @alpha-lambda/tasks

This is a simple task management library, for use in Lambda, connected to SQS and maybe Kinesis.

## Usage

First, define tasks:

> tasks.js

```js
const tasks = require('@alpha-lambda/tasks');

module.exports = tasks([
{
type: 'foo',
schedule(context, tasks) {
// call SQS, Kinesis, etc.
},
execute(context, tasks, Task) {
// perform the work that the task defines
// Task is provided so you can schedule new sub-tasks if needed
},
validate(task) {
// optional, verify that the task details match some schema you have
},
format(detail) {
// optional, called before validate
},
},
]);
```

Schedule some tasks:

```js
const Task = require('./tasks');

module.exports.scheduleTasks = async (event, context) => {
// context is passed forward schedule() in each definition
await Task.schedule(context, [
new Task('foo'),
// this would throw, because 'bar' is not defined above
new Task('bar', { foo: true }),
]);
};
```

Then, in some other code, such as a Lambda hooked up to SQS as an event source:

```js
module.exports.handler = async (event, context) => {
const messages = ...
const tasks = messages.map(message => {
const parsed = JSON.parse(message);
return Task.fromJSON(parsed);
});

await Task.execute(context, tasks);
};
```
Loading