Skip to content

applitopia/ducen

Repository files navigation

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) => (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]

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

About

Transducers engine for javascript

Resources

License

Stars

Watchers

Forks

Packages

No packages published