https://github.com/applitopia/ducen
Transducers engine for javascript
https://github.com/applitopia/ducen
Last synced: about 1 month ago
JSON representation
Transducers engine for javascript
- Host: GitHub
- URL: https://github.com/applitopia/ducen
- Owner: applitopia
- License: mit
- Created: 2018-04-29T00:01:54.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-04-29T08:20:51.000Z (about 8 years ago)
- Last Synced: 2025-12-30T07:31:20.254Z (5 months ago)
- Language: JavaScript
- Size: 145 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

DUCEN - The Transducer Engine
=====
[](https://badge.fury.io/js/ducen)
[](https://facebook.github.io/jest/)
[](https://david-dm.org/applitopia/ducen)
[](https://david-dm.org/applitopia/ducen?type=dev)
[](https://opensource.org/licenses/MIT)
This package is an extension of [transducers.js](https://github.com/jlongster/transducers.js) library. The following features have been added:
1. flow types
2. additional transducers: sort, group, groupBy
3. additional utility functions: reducer, transducer, process
4. transducer recipes
5. incremental processing of updates
Installation
------------
```shell
npm install ducen
```
Example
-------
Transducer recipe:
```js
var { compile } = require('ducen');
var { seq } = require('transducers.js');
// Define a transducer recipe
var recipe = [
{
op: 'MAP',
fn: (x) => (x + 1)
},
{
op: 'FILTER',
fn: (x) => (x % 2 === 0)
},
{
op: 'SORT',
fn: (a, b) => (a - b)
},
{
op: 'TAKE',
cntFn: () => 5
},
{
op: 'REDUCE',
init: () => 0,
step: (total, input) => (total + input),
result: (total) => total,
}
];
// Compile the recipe into a tranducer
var xf = compile(recipe);
// Transform input with the compiled transducer
var input = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
var output = seq(input, xf);
// [30]
```
With flow types:
```js
import { compile } from 'ducen';
import type { TransducerRecipe } from 'ducen';
import { seq } from 'transducers.js';
import type { Transducer } from 'transducers.js';
// Define a transducer recipe
let recipe: TransducerRecipe = [
{
op: 'MAP',
fn: (x: number): number => (x + 1)
},
{
op: 'FILTER',
fn: (x: number): boolean => (x % 2 === 0)
},
{
op: 'SORT',
fn: (a: number, b: number): number => (a - b)
},
{
op: 'TAKE',
cntFn: () => 5
},
{
op: 'REDUCE',
init: () => 0,
step: (total: number, input: number) => (total + input),
result: (total: number) => total,
}
];
// Compile the recipe into a tranducer
const xf: Transducer> = compile(recipe);
// Transform input with the compiled transducer
const input: Array = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
const output: Array = seq(input, xf);
// [30]
```
Development
-----------
Setup:
```shell
git clone https://github.com/applitopia/ducen.git
cd ducen
npm install
```
Lint:
```shell
npm run lint
```
Build:
```shell
npm run build
```
Test:
```shell
npm test
```
Lint, Build, & Test:
```shell
npm run all
```
Update Dependencies:
```shell
npm update --save
```
License
-------
MIT