{"version":3,"sources":["jsdelivr-header.js","/npm/funprog@1.18.3/src/operators.js","/npm/funprog@1.18.3/src/functionalprogramming.js","/npm/funprog@1.18.3/src/reducer.js","/npm/funprog@1.18.3/src/transducer.js","/npm/funprog@1.18.3/src/transformer.js","/npm/funprog@1.18.3/src/iterator.js","/npm/funprog@1.18.3/index.js"],"names":[],"mappings":"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","file":"/npm/funprog@1.18.3/dist/funprog.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/funprog@1.18.3/dist/funprog.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","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\nconst asyncCompose = (...fns) => x => (\n    fns.reduce(async (y, f) => f(await y), x)\n)\n\nexport {\n    apply,\n    compose,\n    asyncCompose\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    let r = await xs.reduce(xrf, init)\n    if (r.hasOwnProperty('reduced')) {\n        return r.reduced\n    } else {\n        return r\n    }\n}\n\nasync function transduceArray2 (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 reducer = await xf(rf)\n    let accumulated = init\n    for (var j = 0; j < xs.length; j++) {\n        let value = xs[j]\n        accumulated = await reducer(accumulated, value)\n    }\n    return accumulated\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    transduceArray2,\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)\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 * Performs an Object.assign operation on each record in the stream\n * @param {*} f\n */function assign (f) {\n  return function (rf) {\n    return async (acc, val) => {\n      var ac = await acc\n      var m = await f(val)\n      var m2 = Object.assign({}, val)\n      var assigned = Object.assign(m2, m)\n      var r = await rf(ac, assigned)\n      if (r.hasOwnProperty('reduced')) {\n        if (r.reduced) {\n          return r\n        } else {\n          return ac\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 = await rf(acc, enriched)\n          neighbors.shift()\n          return res\n        }\n      }\n    }\n  }\n\nexport {\n  passthrough,\n  mapping,\n  assign,\n  filtering,\n  take,\n  skip,\n  eventing,\n  sampling,\n  split,\n  randomFilter,\n  neighbors\n}\n","import Debug from 'debug'\nlet debug = Debug('iterator')\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\nfunction * makeAsyncArrayGenerator (dataArray = [], {\n    delay = 10,\n    callback = null\n}) {\n    debug(`Making Async Array Generator from array of length ${dataArray.length}`)\n    let iterationCount = 0\n    for (let i = 0; i < dataArray.length; i++) {\n        iterationCount++\n        yield new Promise((resolve, reject) => {\n            setTimeout(() => {\n                let next = dataArray[i]\n                if (callback) { callback(next) }\n                debug(next)\n                resolve(next)\n            }, delay)\n        })\n    }\n}\n\nexport {\n  makeArrayIterator,\n  makeAsyncRangeIterator,\n  makeAsyncHasNextRangeIterator,\n  makeAsyncArrayGenerator\n}\n","import { not, identity, isEven, isGreaterThan, digitize, modulus, select } from './src/operators.js'\r\n\r\nimport { compose, asyncCompose, apply } from './src/functionalprogramming.js'\r\n\r\nimport { concat, latest } from './src/reducer.js'\r\n\r\nimport { transduceAsyncIterator, transduceAsyncHasNextIterator, transduceArray, transduceArray2, transduceGenerator } from './src/transducer.js'\r\n\r\nimport { mapping, assign, filtering, take, skip, eventing, sampling, passthrough, split, randomFilter, neighbors } from './src/transformer.js'\r\n\r\nimport { makeArrayIterator, makeAsyncRangeIterator, makeAsyncHasNextRangeIterator, makeAsyncArrayGenerator } from './src/iterator.js'\r\n\r\nexport default {\r\n\r\n    not,\r\n    identity,\r\n    isEven,\r\n    isGreaterThan,\r\n    digitize,\r\n    modulus,\r\n    select,\r\n    assign,\r\n\r\n    compose,\r\n    asyncCompose,\r\n    apply,\r\n\r\n    concat,\r\n    latest,\r\n\r\n    transduceAsyncIterator,\r\n    transduceAsyncHasNextIterator,\r\n    transduceArray,\r\n    transduceArray2,\r\n    transduceGenerator,\r\n\r\n    mapping,\r\n    filtering,\r\n    take,\r\n    skip,\r\n    eventing,\r\n    sampling,\r\n    passthrough,\r\n    split,\r\n    randomFilter,\r\n    neighbors,\r\n\r\n    makeArrayIterator,\r\n    makeAsyncRangeIterator,\r\n    makeAsyncHasNextRangeIterator,\r\n    makeAsyncArrayGenerator\r\n}\r\n"]}