js-transducers

0.1.3 • Public • Published

xform

Transducers for javascript

Docs

https://boogie666.gitlab.io/js-transducers/#js-transducers

Install

npm install --save js-tranducers

Usage

require("js-transducers/array"); // when using into on js arrays
require("js-transducers/immutable") // when using into on immutable.js collections
const into = require("js-transducers/into");

const xf = require("js-transducers");
const { comp } = require("js-transducers/util");

const process = comp(
  xf.map(x => x + 1),
  xf.filter(x => x % 2 === 0)
);

into([], process, [1, 2, 3]);

util.comp is more or less useless

But it's needed internaly in order to not have any dependencies...

Basically any propper compose implementation will work just fine...

for example Rambda.js:

const process = R.compose(
  xf.map(x => x + 1), 
  xf.filter(x => x % 2 === 0)
);

is identical to:

const process = util.comp(
  xf.map(x => x + 1), 
  xf.filter(x => x % 2 === 0)
);

So feel free to use any compose function you are comfortable with.

lodash compose works in the exact same way.

const process = _.compose(
  xf.map(x => x + 1), 
  xf.filter(x => x % 2 === 0)
);

any other implementation of compose will work in the exact same way, as long as it applies the functions in reverse order

such that if you compose these 3 functions:

function a(x){
  console.log("a");
  return x;
}
function b(x){
  console.log("b");
  return x;
}

function c(x){
  console.log("c");
  return x;
}

the output of the console logs will be "c,b,a".

if the result is "a,b,c" then the transducers need to be used in reverse order.

So with Rambda.js' pipe function the equivalent is:

const process = R.pipe(
  xf.filter(x => x % 2 === 0), // first the filter
  xf.map(x => x + 1) // then the map
);

How the lib is built

Check out (if you know romanian) my talk about this lib and how to build it from scratch here:

https://www.youtube.com/watch?v=z9iuqCsOghc

FAQ

What's with the require("js-transducers/array") or require("js-transducers/immutable")?

js-transducers used a controled from monkey patching in order to add a better version of 'reduce' in order to enable tranducers.

the into tranductions context needs to be have some caracteristics in order to be a propper transduction context.

see https://clojure.org/reference/transducers the 'Creating Transducers' section.

Package Sidebar

Install

npm i js-transducers

Weekly Downloads

3

Version

0.1.3

License

MIT

Unpacked Size

53 kB

Total Files

66

Last publish

Collaborators

  • boogie666