<img src="logo.svg" width="350" alt="runly.js" />

> Easy multi-threaded batch processing for Node.js

![terminal](hello.svg)

## :rocket: Get Started

Install with npm:

```
$ npm install @runly/core
```

Create a job, `jobs/hello.js`:

```js
exports.getItems = ({ names }) => names;

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

exports.process = async (name, { greeting = "Hello" }) => {
	await delay(1500); // simulate some long-running work

	console.log(`${greeting}, ${name}`);
};
```

Add an `index.js` entry point for your app:

```js
const run = require("@runly/core");

run();
```

This gives you a CLI for your job for free and allows you to easily run your job multi-threaded without changing your code:

```
node index.js run hello --names Rick --names Morty --names Summer
```

This will reproduce the terminal animation above.

## :gear: How It Works

Job:
* config (input params)
  * from json file
* `getItems` async
* `process`
* `init`
* `finalize`

Job discovery:
* from jobs folder, show how to override
* show list command

## Examples

* csv parsing with async generator function
* sending emails

## Reference


## Publishing to your Runly Organization

1. In your `package.json` file, use the org name in the name of the package:
```json
{
  "name": "@orgname/pkgname"
}
```

2. Create a `.npmrc` file in package root, with the following contents, replacing `orgname` with the name of your org:
```
@orgname:registry=https://api.runly.io/npm/
```

3. On the [dashboard](https://www.runly.io/dashboard/), go to your [apps](https://www.runly.io/dashboard/account/apps) and create a new app named `npm` (or any name not in use), and copy the secret key.

4. Run the following command in a terminal:

```
npm login --registry=https://api.runly.io/npm/
```

Enter any value for the username and email and paste the secret key copied above for the password.

5. Run `npm publish` to publish your package to your Runly org.

## :ledger: Release Notes

See the [Releases](https://github.com/runlyio/corejs/releases).

## :memo: License

Licensed under the [MIT License](./LICENSE).
