This package is an extension of transducers.js library. The following features have been added:
- flow types
- additional transducers: sort, group, groupBy
- additional utility functions: reducer, transducer, process
- transducer recipes
- incremental processing of updates
npm install ducen
Transducer recipe:
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:
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<number, number> = [
{
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<number, number, Array<number>> = compile(recipe);
// Transform input with the compiled transducer
const input: Array<number> = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
const output: Array<number> = seq(input, xf);
// [30]
Setup:
git clone https://github.com/applitopia/ducen.git
cd ducen
npm install
Lint:
npm run lint
Build:
npm run build
Test:
npm test
Lint, Build, & Test:
npm run all
Update Dependencies:
npm update --save
MIT