UNPKG

19.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"funprog.umd.js","sources":["../src/operators.js","../src/functionalprogramming.js","../src/reducer.js","../src/transducer.js","../src/transformer.js","../src/iterator.js"],"sourcesContent":["const not = async (x) => {\r\n var operand = await x\r\n return !operand\r\n }\r\n\r\nconst identity = x => x\r\n\r\n// predicates\r\nconst isEven = x => x % 2 === 0\r\nconst isOdd = x => !isEven(x)\r\nconst isGreaterThan = x => y => y > x ? y : 0\r\nconst digitize = x => x ? 1 : 0\r\n\r\nconst modulus = val => x => x % val\r\n\r\nconst select = property => x => x[property]\r\n\r\nexport {\r\n isEven,\r\n modulus,\r\n isOdd,\r\n isGreaterThan,\r\n identity,\r\n not,\r\n digitize,\r\n select\r\n}\r\n","\nfunction apply (x, f) {\n return f(x)\n}\n\nfunction compose (...funcs) {\n return x => funcs.reduceRight(apply, x)\n}\n\nexport {\n compose\n}\n","\nfunction concat (accumlator, val) {\n return accumlator.concat(val)\n}\n\nfunction latest (accumlator, val) {\n return val\n}\n\nexport {\n concat,\n latest\n}\n","\nasync function transduceAsyncIterator (transform, reducerfunction, init, asynciterator) {\n var reducer = transform(reducerfunction)\n var n = null\n do {\n n = await asynciterator.next()\n if (!n.done) {\n var v = n.value\n init = await reducer(init, v)\n }\n } while (!n.done)\n return init\n}\n\nasync function transduceAsyncHasNextIterator (transform, reducerfunction, init, asynchasnextiterator) {\n var reducer = transform(reducerfunction)\n var n = null\n var r = null\n do {\n n = await asynchasnextiterator.hasNext()\n if (n) {\n var v = await asynchasnextiterator.next()\n r = await reducer(init, v)\n if (r.hasOwnProperty('reduced')) {\n if (r.reduced) {\n init = r.reduced\n }\n } else if (r) {\n init = r\n }\n }\n } while (r && n)\n return init\n}\n\nasync function transduceArray (xf, rf, init, xs) {\n // call reduce on the data structure internally (abstract it away)\n // pass the rf to the composed transformation\n // pass in the initial value\n var xrf = await xf(rf)\n return xs.reduce(xrf, init)\n}\n\nasync function * transduceGenerator (transform, reducerfunction, init, streamgenerator) {\n var reducer = transform(reducerfunction)\n for await (const value of streamgenerator) {\n var newinit = await reducer(init, value)\n // Here we checked if there is new a 'reduced' value and only generate a new value when this is the case\n if (!newinit) {\n } else if (newinit === init) {\n } else {\n if (newinit.hasOwnProperty('reduced')) {\n if (Array.isArray(newinit.reduced)) {\n for (var i = 0; i < newinit.reduced.length; i++) {\n init = newinit.reduced[i]\n yield newinit.reduced[i]\n }\n }\n } else {\n init = newinit\n yield newinit\n }\n }\n }\n}\n\nexport {\n transduceAsyncIterator,\n transduceAsyncHasNextIterator,\n transduceArray,\n transduceGenerator\n}\n","\n/**\n * Passes all events\n */\nfunction passthrough () {\n return function (rf) {\n // this takes 2 things and makes them 1\n return async (acc, val) => {\n return rf(acc, val) // <-- rf replaces 'concat'\n }\n }\n}\n\n/**\n * Performs a mapping operation on each record in the stream\n * @param {*} f\n */function mapping (f) {\n return function (rf) {\n // this takes 2 things and makes them 1\n return async (acc, val) => {\n var m = await f(val)\n var r = await rf(acc, m) // <-- rf replaces 'concat'\n if (r.hasOwnProperty('reduced')) {\n if (r.reduced) {\n return r\n } else {\n return acc\n }\n } else {\n return r\n }\n }\n }\n }\n\n /**\n * Removes records from the stream if the dont match the predicate\n * @param {*} p\n */\n function filtering (p) {\n return function (rf) {\n // this takes 2 things and makes them 1\n return async (acc, val) => {\n var pred = (await p(val))\n return pred ? rf(acc, val) : { reduced: null } // <-- rf replaces 'concat'\n }\n }\n }\n\n /**\n * Takes toTake records from the stream\n * @param {*} toTake\n */\nfunction take (toTake) {\n // assert(toTake && cnt > 0)\n var count = toTake\n return function (rf) {\n // this takes 2 things and makes them 1\n return async (acc, val) => {\n if ((--count) < 0) {\n return {\n reduced: null\n }\n } else {\n return rf(acc, val)\n }\n }\n }\n}\n\n/**\n * Skips forward in a stream by the toSkip records\n * @param {*} toSkip\n */\nfunction skip (toSkip) {\n // assertMod(toSkip && toSkip >= 0)\n var count = 0\n return function (rf) {\n // this takes 2 things and makes them 1\n return async (acc, val) => {\n if (count++ < toSkip) {\n return { reduced: null }\n } else {\n return rf(acc, val)\n }\n }\n }\n}\n\n/**\n * Samples from a stream at a particular frequency.\n * sample(1000) will sample a value once every second\n * @param {*} period\n */\nfunction sampling (period) {\n // assertMod(cnt && cnt >= 0)\n var last = 0\n return function (rf) {\n return async (acc, val) => {\n var nw = Date.now()\n var diff = nw - last\n // console.log(diff)\n if (diff < period) {\n // console.log('Skip' + val)\n return { reduced: null }\n } else {\n last = nw\n // console.log('Accept' + val)\n return rf(acc, val)\n }\n }\n }\n}\n\n/**\n * Transforms a series of measurements into events. The predicate determines when the measurements continue the event or non-event\n * @param {*} predicate\n */\nfunction eventing (predicate) {\n var latest = null\n var sequence = -1\n return function (rf) {\n return async (acc, val) => {\n sequence++\n var pred = (await predicate(val))\n if (pred && !latest) {\n latest = {\n start: val.time ? val.time : sequence,\n end: val.time ? val.time : sequence\n }\n return { reduced: null }\n } else if (pred && latest) {\n latest.end = val.time ? val.time : sequence\n return { reduced: null }\n } else if (!pred && latest) {\n var next = latest\n latest = null\n return rf(acc, next)\n } else {\n return { reduced: null }\n }\n }\n }\n}\n\n/**\n * Split one event into multiple\n * splitter is a function which maps a value to an array\n */\nfunction split (splitter) {\n return function (rf) {\n // this takes 2 things and makes them 1\n return async (acc, val) => {\n var rs = await splitter(val)\n var reduction = { reduced: [] }\n try {\n var acc2 = acc\n for (var i = 0; i < rs.length; i++) {\n var r = rs[i]\n acc2 = await rf(acc2, r)\n if (acc2.hasOwnProperty('reduced')) {\n if (acc2.reduced) {\n reduction.reduced.push(acc2.reduced)\n }\n } else {\n reduction.reduced.push(acc2)\n }\n }\n return reduction\n } catch (ex) {\n console.log(ex)\n }\n }\n }\n}\n\n/**\n * Randomly samples from a stream with a target frequency.\n * randomFilter(100) will target to sample one value in every 100\n * @param {*} countFrequency - a number\n */\nfunction randomFilter (countFrequency) {\n // assertMod(cnt && cnt >= 0\n return function (rf) {\n return async (acc, val) => {\n var rand = Math.floor((Math.random() * countFrequency))\n if (rand === 0) {\n return rf(acc, val)\n } else {\n return { reduced: null }\n }\n }\n }\n}\n\n /**\n * Make n neighbors available as each stream record is processed.\n * @param {*} numberOfNeighbors\n */\n function neighbors (numNeighbors = 10) {\n var neighbors = []\n\n return function (rf) {\n return async (acc, val) => {\n neighbors.push(val)\n if ((neighbors.length) < numNeighbors) {\n return {\n reduced: null\n }\n } else {\n let first = neighbors[0]\n let enriched = Object.assign({}, first)\n enriched.neighbors = neighbors\n enriched.data = first\n let res = rf(acc, enriched)\n neighbors.shift()\n return res\n }\n }\n }\n }\n\nexport {\n passthrough,\n mapping,\n filtering,\n take,\n skip,\n eventing,\n sampling,\n split,\n randomFilter,\n neighbors\n}\n","\nasync function * makeAsyncRangeIterator (start = 0, end = Infinity, step = 1, delay = 10) {\n let iterationCount = 0\n for (let i = start; i < end; i += step) {\n iterationCount++\n yield new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(i)\n }, delay)\n })\n }\n return iterationCount\n }\n\nfunction makeAsyncHasNextRangeIterator (start = 0, end = Infinity, step = 1) {\n let iterationCount = start\n return {\n hasNext: function () {\n return iterationCount < end\n },\n next: function () {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(iterationCount++)\n }, 10)\n })\n }\n }\n}\n\nfunction makeArrayIterator (dataArray) {\n let iterationCount = 0\n return {\n hasNext: function () {\n return iterationCount < dataArray.length\n },\n next: function () {\n return dataArray[iterationCount++]\n }\n }\n }\n\nexport {\n makeArrayIterator,\n makeAsyncRangeIterator,\n makeAsyncHasNextRangeIterator\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file