ducen

0.0.3 • Public • Published

ducen

DUCEN - The Transducer Engine

npm version jest dependencies devDependencies License: MIT

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

npm install ducen

Example

Transducer recipe:

var { compile } = require('ducen');
var { seq } = require('transducers.js');
 
// Define a transducer recipe
var recipe = [
  {
    op: 'MAP',
    fn: (x) => (+ 1)
  },
  {
    op: 'FILTER',
    fn: (x) => (% 2 === 0)
  },
  {
    op: 'SORT',
    fn: (a, b) => (- 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 => (+ 1)
  },
  {
    op: 'FILTER',
    fn: (x: number): boolean => (% 2 === 0)
  },
  {
    op: 'SORT',
    fn: (a: number, b: number): number => (- 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]

Development

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

License

MIT

Package Sidebar

Install

npm i ducen

Weekly Downloads

1

Version

0.0.3

License

MIT

Unpacked Size

398 kB

Total Files

10

Last publish

Collaborators

  • applitopia