Transducer engine in Javascript that provides flow-typed support transducer recipes
npm install ducenDUCEN - The Transducer Engine
=====





This package is an extension of 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
// Transform input with the compiled transducer
const input: Array
const output: Array
// [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