pure-fun
Version:
A collection of pure functions/helpers with 0 dependencies
1 lines • 41.7 kB
Source Map (JSON)
{"version":3,"file":"pure-fun.mjs","sources":["../src/arrays/diff/index.ts","../src/arrays/flatten/index.ts","../src/async/forEach/index.ts","../src/async/isPromise/index.ts","../src/dates/isDate/index.ts","../src/objects/deepCopy/index.ts","../src/objects/isObject/index.ts","../src/objects/makeImmutable/index.ts","../src/index.ts","../src/arrays/duplicates/index.ts","../src/arrays/filterEven/index.ts","../src/arrays/filterFalsies/index.ts","../src/arrays/groupBy/index.ts","../src/arrays/head/index.ts","../src/arrays/initial/index.ts","../src/arrays/intersect/index.ts","../src/arrays/isEmpty/index.ts","../src/arrays/join/index.ts","../src/arrays/last/index.ts","../src/arrays/median/index.ts","../src/arrays/pickRandom/index.ts","../src/arrays/randomize/index.ts","../src/arrays/sortBy/index.ts","../src/arrays/tail/index.ts","../src/arrays/total/index.ts","../src/arrays/unique/index.ts","../src/arrays/without/index.ts","../src/arrays/zip/index.ts","../src/async/fetchJSON/index.ts","../src/async/mapPromise/index.ts","../src/async/sleep/index.ts","../src/async/throttle/index.ts","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/dates/convertToDateIfNeeded/index.ts","../src/dates/getDays/index.ts","../src/dates/getMonths/index.ts","../src/functions/always/index.ts","../src/functions/compose/index.ts","../src/functions/isFunction/index.ts","../src/functions/merge/index.ts","../src/functions/requireArgs/index.ts","../src/maps/deepClone/index.ts","../src/maps/isMap/index.ts","../src/objects/deepMerge/index.ts","../src/objects/getMappedArray/index.ts","../src/objects/getQueryString/index.ts","../src/objects/isEmpty/index.ts","../src/objects/makeIterable/index.js","../src/objects/parseJSON/index.ts","../src/objects/pluckDeep/index.ts"],"sourcesContent":["/**\n * Returns the difference between 2 arrays\n */\nconst diff = (a: any[], b: any[]) => [...new Set(a.filter(i => !new Set(b).has(i)))];\nexport default diff;\n","/**\n * Returns a new flat array\n */\nconst flatten = (arr: any[]) =>\n arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);\n\nexport default flatten;\n","/**\n * Performs synchronous-like Array.forEach() on an array of promises.\n */\nconst forEach = (arr: Promise<any>[], fn: Function, cb: Function, i = 0) => {\n if (arr[i]) {\n fn(arr[i], () => {\n forEach(arr, fn, cb, i + 1);\n });\n } else {\n cb(false);\n }\n}\nexport default forEach;\n","/**\n * Checks if the given input is an instance of the Promise object\n */\nconst isPromise = (prom: any) => prom instanceof Promise;\nexport default isPromise;\n","/**\n * Checks if the given input is a Date object\n */\nexport default (date: any) => typeof date === 'object' && typeof date.getMonth === `function`;\n","/**\n * Performs a deep-copy for given object\n */\nconst deepCopy = (obj: Object | any[]): Object | any[] => {\n if (typeof obj === `object` && !Array.isArray(obj)) {\n return Object.keys(obj)\n .map(k => ({ [k]: deepCopy(obj[k]) }))\n .reduce((a, b) => Object.assign(a, b), {});\n } else if (Array.isArray(obj)) {\n return obj.map(deepCopy);\n }\n\n return obj;\n};\n\nexport default deepCopy;\n","/**\n * Checks if the given input is an Object object (haha)\n */\nconst isObject = (obj: any) => {\n return Object(obj) === obj &&\n Object.prototype.toString.call(obj) === '[object Object]';\n};\nexport default isObject;\n","import isObject from \"../isObject\";\n\nconst getValue = (obj: Object) => (key: string) => obj[key];\nconst isMutable = (obj: any) => isObject(obj) && !Object.isFrozen(obj);\n\nconst immutable = (\n () => {\n return obj => {\n Object.keys(obj)\n .map(getValue(obj))\n .filter(isMutable)\n .forEach(immutable);\n\n return Object.freeze(obj);\n };\n }\n)();\n\n/**\n * Returns a new immutable object from the original;\n */\nexport default immutable;\n","import * as arrays from './arrays';\nimport * as async from './async';\nimport * as dates from './dates';\nimport * as functions from './functions';\nimport * as maps from './maps';\nimport * as objects from './objects';\n\nexport default {\n arrays,\n async,\n dates,\n functions,\n maps,\n objects,\n};\n","const _count = names => names.reduce((acc, name) => Object.assign(acc, { [name]: (acc[name] || 0) + 1 }), {});\nconst _duplicates = dict => Object.keys(dict).filter(a => dict[a] > 1);\n\n/**\n * Returns an array of values that are duplicate in the input array.\n */\nconst duplicates = (arr: any[]) => _duplicates(_count(arr));\nexport default duplicates;\n","/**\n * Returns an array with only even numbers\n */\nconst filterEven = (arr: number[]) => arr.filter(x => !(typeof x === `string`) && x % 2 === 0);\nexport default filterEven;\n","type TruthyValues = object | string | number | true;\n\n/**\n * Returns an array with only truthy values.\n * Considered falsy values: false, undefined, null, 0, NaN, ''\n */\nconst filterFalsies = (arr: any[]): TruthyValues[] => arr.filter(id => id);\nexport default filterFalsies;\n","/**\n * Groups an array of objects by the given key\n */\nconst groupBy = (arr: Object[], key: string) => (arr || []).reduce((acc, x = {}) => ({\n ...acc,\n [x[key]]: [...acc[x[key]] || [], x],\n}), {});\n\nexport default groupBy;\n","/**\n * Returns the head (everything but the list item) items in the array.\n */\nconst head = (arr: any[]) => arr.slice(0, - 1);\nexport default head;\n","/**\n * Returns the initial (first) item in the input array\n */\nconst initial = (arr: any[]) => arr[0];\nexport default initial;\n","/**\n * Returns the intersection between the two input arrays\n */\nconst intersect = (a: any[], b: any[]) => [...new Set(a.filter(i => new Set(b).has(i)))];\nexport default intersect;\n","/**\n * Checks if the array is empty\n */\nconst isEmpty = (arr: any[]) => arr.length < 1;\nexport default isEmpty;\n","/**\n * Join together all input arrays into one new array.\n * This will created nested array structure!\n * For flat array structure use pure-fun/arrays/flatten\n */\nconst join = (...arrs: any[]) => [...arrs];\nexport default join;\n","// TODO: doc!\nconst last = (arr: any[]): any => arr.slice(- 1)[0];\nexport default last\n","/**\n * Get the median from an array of numbers\n */\nconst median = (arr: number[]) => {\n const a = [...arr.sort()];\n const idx = parseInt((a.length / 2).toFixed(0));\n\n return (a.length > 1) ? a[idx] : a[0];\n};\nexport default median;\n","/**\n * Returns a random item from the input array\n */\nconst pickRandom = (arr: any[]) => arr[Math.floor(Math.random() * arr.length)];\nexport default pickRandom;\n","/**\n * Returns a random section from the input array.\n * Not passing 2nd argument: `limit` will return the original array\n */\nconst randomize = (arr: any[], limit = 0) => [\n ...arr\n .sort(() => (Math.random() * 10) % 2)\n .slice(- limit),\n];\nexport default randomize;\n","type Order = 'ASC' | 'DESC';\n\n/**\n * Sort an array of objects by the given key.\n * Supports an order parameter `order` as 3rd argument.\n */\nconst sortBy = (arr: Object[], key: string, order: Order = `ASC`) => {\n if (arr && arr != null && arr.length > 0) {\n const sortedArr = [...arr.sort((a, b) => {\n if (a[key] < b[key]) return - 1;\n if (a[key] > b[key]) return 1;\n return 0;\n })];\n\n return order.toUpperCase() === `ASC` ? sortedArr : [...sortedArr.reverse()];\n }\n\n return arr;\n};\nexport default sortBy;\n","/**\n * Returns the last item (tail) in an array\n */\nconst tail = (arr: any[]) => arr.slice(1);\nexport default tail;\n","/**\n * Returns the sum/total for an array of numbers\n */\nconst total = (arr: number[]) => arr.reduce((a, b) => a + b);\nexport default total;\n","/**\n * Returns only the unique elements in array.\n * If you want the duplicates use: pure-fun/arrays/duplicates.ts\n */\nconst unique = (arr: any[]): any[] => [...new Set(arr)];\nexport default unique;\n","/**\n * Returns all items in the input array except those specified in the second parameter.\n */\nconst without = (arr: any[], ...values: any[]) => arr.filter(el => !values.some(excl => el === excl));\nexport default without;\n","/**\n * Zips together 2 input arrays via either the provided zipper function,\n * or by performing a standard zipping operation.\n */\nconst zip = (arr1: any[], arr2: any[], zipper: Function) => zipper\n ? arr1.map((val, i) => zipper(val, arr2[i]))\n : arr1.map((val, i) => [val, arr2[i]]);\nexport default zip;\n","/**\n * A simplified wrapper around global.fetch() that returns JSON by default\n * and sets the Content-Type to `application/json`\n */\nconst fetchJSON = async (url: string, options: RequestInit = {}) => {\n const response = await fetch(url, {\n headers: {\n Accept: `application/json, text/plain, */*`,\n 'Content-Type': `application/json`,\n },\n ...options,\n });\n return response.json();\n};\nexport default fetchJSON;\n","import isPromise from '../isPromise';\n\ntype MappingFunction = (i: Promise<any>) => void;\n\n/**\n * Maps over an array of promises like Array.map()\n * If the input array is not one of promises, the mapper function can be used\n * to map them first before mapping over them using Promise.all()\n */\nconst mapPromise = (inputs: any[], mapper: MappingFunction) => {\n const promises = [];\n\n inputs.forEach(\n i => isPromise(i)\n ? promises.push(i)\n : promises.push(mapper(i))\n );\n\n return Promise.all(promises);\n};\nexport default mapPromise;\n","/**\n * Performs a sleep/delay/wait for a given amount of miliseconds.\n */\nconst sleep = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms));\nexport default sleep;\n","/**\n * Throttles the input promise for a given amount of miliseconds\n */\nconst throttle = (ms: number, promise: Promise<any>) => new Promise(\n async (resolve, reject) => {\n const sleep = new Promise(resolve => setTimeout(resolve, ms));\n\n if (!promise) return resolve(await sleep);\n\n try {\n const [res] = await Promise.all([promise, sleep]);\n return resolve(res);\n } catch (err) {\n return reject(err);\n }\n }\n);\n\nexport default throttle;\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tvar iteratorSymbol = Symbol.iterator;\n\t\tif (iteratorSymbol && (iteratorSymbol in target)) {\n\t\t\tvar iterator = target[iteratorSymbol](), step, pact, reject;\n\t\t\tfunction _cycle(result) {\n\t\t\t\ttry {\n\t\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (pact) {\n\t\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpact = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(pact || (pact = new Pact()), 2, e);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_cycle();\n\t\t\tif (iterator.return) {\n\t\t\t\tvar _fixup = function(value) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\t\titerator.return();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t\tif (pact && pact.then) {\n\t\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t_fixup();\n\t\t\t}\n\t\t\treturn pact;\n\t\t}\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"value is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tvar asyncIteratorSymbol = Symbol.asyncIterator;\n\t\tif (asyncIteratorSymbol && (asyncIteratorSymbol in target)) {\n\t\t\tvar pact = new _Pact();\n\t\t\tvar iterator = target[asyncIteratorSymbol]();\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t\treturn pact;\n\t\t\tfunction _resumeAfterBody(result) {\n\t\t\t\tif (check && !check()) {\n\t\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t\t}\n\t\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t\t}\n\t\t\tfunction _resumeAfterNext(step) {\n\t\t\t\tif (step.done) {\n\t\t\t\t\t_settle(pact, 1);\n\t\t\t\t} else {\n\t\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction _reject(error) {\n\t\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t\t}\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, value);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t\tthis[Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))] = function() {\n\t\t\treturn this;\n\t\t};\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\t_entry(_this).then(returnValue, function(error) {\n\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import isDate from \"../isDate\";\n\n/**\n * Checks if the given input is a Date object, otherwise converts it to one\n */\nconst convertToDateIfNeeded = (date: Date | string) => {\n if (isDate(date)) return date;\n\n if (typeof date === 'string') return Date.parse(date);\n};\nexport default convertToDateIfNeeded;\n","type FormatOptions = 'long' | 'short' | 'narrow';\n\n/**\n * Returns the days for the given locale and format.\n * Defaults to en-US/long\n */\nconst getDays = (locale: string = `en-US`, format: FormatOptions = `long`) => Array.from(\n { length: 7 },\n (_, idx) => (new Date(0, 0, idx).toLocaleDateString(locale, { weekday: format }))\n);\nexport default getDays;\n","type FormatOptions = '2-digit' | 'long' | 'short' | 'narrow';\n\n/**\n * Returns the months for the given locale and format.\n * Defaults to en-US/long\n */\nconst getMonths = (locale: string = `en-US`, format: FormatOptions = `long`) => Array.from(\n { length: 12 },\n (_, idx) => (new Date(0, idx).toLocaleDateString(locale, { month: format }))\n);\nexport default getMonths;\n","/**\n * Always return a given input value\n */\nconst always = (val: any) => () => val;\nexport default always;\n","/**\n * Compose together an array of functions into a higher-order function.\n */\nconst compose = (...fns: Function[]) => res => fns.reduce((acc, next) => next(acc), res);\nexport default compose;\n","/**\n * Validate if given input is a callable function\n */\nconst isFunction = (fn: any) => fn instanceof Function;\nexport default isFunction;\n","/**\n * Merge together functions into a combined output: fn(f(), g())\n */\nconst merge = (fn: Function, f: Function, g: Function) => (...args: any[]) => fn(f(...args), g(...args));\nexport default merge;\n","/**\n * Require a given number of arguments for a function\n */\nexport default (fn: Function) => (...args: any[]) => args.length < fn.length ? undefined : fn(...args);\n","/**\n * Perform a deep-clone on a map of Objects\n */\nconst deepClone = (map: Map<{}, {}>) => new Map(JSON.parse(JSON.stringify([...map])));\nexport default deepClone;\n","/**\n * Checks if the given input is a valid Map\n */\nconst isMap = (map: any) => map instanceof Map;\nexport default isMap;\n","/**\n * Performs a deep-merge on a given input of objects\n */\nconst deepMerge = (() => (...objs: Object[]) => {\n return Object.assign(\n // @ts-ignore\n ...objs.map((o) => JSON.parse(JSON.stringify(o))),\n );\n})();\nexport default deepMerge;\n","/**\n * Returns a iterable array of tuples from an input object.\n */\nconst getMappedArray = (obj: Object) => [...new Map(Object.entries(obj))];\nexport default getMappedArray;\n","/**\n * Returns an a querystring from an object\n */\nconst getQueryString = (obj: Object) => {\n const queries = Object.keys(obj)\n .map(param => {\n if (Array.isArray(obj[param])) {\n return obj[param]\n .map(val => `${encodeURIComponent(param)}[]=${encodeURIComponent(val)}`)\n .join(`&`);\n }\n\n return `${encodeURIComponent(param)}=${encodeURIComponent(obj[param])}`\n });\n\n return queries.join('&');\n};\nexport default getQueryString;\n","/**\n * Checks if an object is empty\n */\nconst isEmpty = (obj: Object) => Object.entries(obj).length < 1;\nexport default isEmpty;\n","/**\n * Creates a new IterableIterator object from the original\n */\n// export default function* (obj) {\n// yield* Object.keys(obj).map(key => [key, obj[key]]);\n// return obj;\n// }\nconst makeIterable = obj => {\n console.log(`\n This function is currently not implemented and will just return the original object.\n https://github.com/developit/microbundle/issues/319\n `);\n return obj;\n};\nexport default makeIterable;\n","import isObject from \"../isObject\";\n\n/**\n * Safe wrapper around JSON.parse() which tries to parse stringified JSON,\n * returns the default if an object was passed or empty object if an error is thrown\n */\nconst parseJSON = (json: string | any): {} => {\n try {\n return JSON.parse(json);\n } catch (e) {\n return isObject(json) ? json : {};\n }\n};\nexport default parseJSON;\n","/**\n * Pluck an object via dot-notation from an object\n */\nconst pluckDeep = (key: string) => (obj: Object) => key.split(`.`).reduce((acc, key) => acc[key], obj);\nexport default pluckDeep;\n"],"names":["const","flatten","arr","reduce","a","b","concat","Array","isArray","forEach","fn","cb","i","isPromise","prom","Promise","date","getMonth","deepCopy","obj","map","Object","keys","k","assign","isObject","prototype","toString","call","isMutable","isFrozen","immutable","key","getValue","filter","freeze","Set","has","dict","acc","name","x","id","slice","length","arrs","sort","idx","parseInt","toFixed","Math","floor","random","limit","order","sortedArr","toUpperCase","reverse","el","values","some","excl","arr1","arr2","zipper","val","url","options","fetch","headers","Accept","response","json","inputs","mapper","promises","push","all","ms","resolve","setTimeout","promise","reject","body","recover","result","sleep","ref","e","then","err","isDate","Date","parse","locale","format","from","_","toLocaleDateString","weekday","month","res","fns","next","Function","f","g","args","undefined","Map","JSON","stringify","objs","o","entries","param","encodeURIComponent","join","console","log","split"],"mappings":"AAGAA,ICAMC,WAAWC,UACfA,EAAIC,gBAAQC,EAAGC,UAAMD,EAAEE,OAAOC,MAAMC,QAAQH,GAAKJ,EAAQI,GAAKA,IAAI,KCD9DI,WAAWP,EAAqBQ,EAAcC,EAAcC,kBAAI,GAChEV,EAAIU,GACNF,EAAGR,EAAIU,cACLH,EAAQP,EAAKQ,EAAIC,EAAIC,EAAI,KAG3BD,GAAG,ICNDE,WAAaC,UAAcA,aAAgBC,oBCAjCC,SAA8B,iBAATA,sBAA4BA,EAAKC,UCAhEC,WAAYC,0BACLA,GAAqBZ,MAAMC,QAAQW,GAInCZ,MAAMC,QAAQW,GAChBA,EAAIC,IAAIF,GAGVC,EAPEE,OAAOC,KAAKH,GAChBC,aAAIG,kBAAM,IAAGA,GAAIL,EAASC,EAAII,QAC9BpB,gBAAQC,EAAGC,UAAMgB,OAAOG,OAAOpB,EAAGC,IAAI,KCJvCoB,WAAYN,UACTE,OAAOF,KAASA,GACmB,oBAAxCE,OAAOK,UAAUC,SAASC,KAAKT,ICF7BU,WAAaV,UAAaM,EAASN,KAASE,OAAOS,SAASX,IAE5DY,WAEGZ,UACLE,OAAOC,KAAKH,GACTC,aAPWD,mBAAiBa,UAAgBb,EAAIa,IAO5CC,CAASd,IACbe,OAAOL,GACPpB,QAAQsB,GAEJV,OAAOc,OAAOhB,kBCNV,uBRJDf,EAAUC,SAAa,UAAI,IAAI+B,IAAIhC,EAAE8B,gBAAOtB,UAAM,IAAIwB,IAAI/B,GAAGgC,IAAIzB,4BSG3DV,UALAoC,EAKkCpC,EANxBC,gBAAQoC,EAAKC,gBAASnB,OAAOG,OAAOe,MAAK,IAAIC,IAAQD,EAAIC,IAAS,GAAK,OAAO,IAChFnB,OAAOC,KAAKgB,GAAMJ,gBAAO9B,UAAKkC,EAAKlC,GAAK,QAAhDkC,uBCEApC,UAAkBA,EAAIgC,gBAAOO,4BAAcA,IAAmBA,EAAI,GAAM,4BCGrEvC,UAA+BA,EAAIgC,gBAAOQ,UAAMA,gCCHtDxC,EAAe8B,UAAiB9B,GAAO,IAAIC,gBAAQoC,EAAKE,+BAAI,IAAQpB,iBAChFkB,UACFE,EAAET,KAAWO,EAAIE,EAAET,KAAS,YAAIS,SAC/B,mBCHUvC,UAAeA,EAAIyC,MAAM,GAAK,qBCA3BzC,UAAeA,EAAI,uBCAjBE,EAAUC,SAAa,UAAI,IAAI+B,IAAIhC,EAAE8B,gBAAOtB,UAAK,IAAIwB,IAAI/B,GAAGgC,IAAIzB,yBCAlEV,UAAeA,EAAI0C,OAAS,gFCEZ,UAAIC,kBCJvB3C,UAAoBA,EAAIyC,OAAQ,GAAG,oBCEjCzC,OACRE,EAAI,UAAIF,EAAI4C,QACZC,EAAMC,UAAU5C,EAAEwC,OAAS,GAAGK,QAAQ,WAEpC7C,EAAEwC,OAAS,EAAKxC,EAAE2C,GAAO3C,EAAE,wBCJjBF,UAAeA,EAAIgD,KAAKC,MAAMD,KAAKE,SAAWlD,EAAI0C,6BCCnD1C,EAAYmD,yBAAQ,GAAM,UACxCnD,EACA4C,uBAA4B,GAAhBI,KAAKE,SAAiB,IAClCT,OAAQU,qBCDGnD,EAAe8B,EAAasB,4BACtCpD,GAAc,MAAPA,GAAeA,EAAI0C,OAAS,EAAG,KAClCW,EAAY,UAAIrD,EAAI4C,cAAM1C,EAAGC,UAC7BD,EAAE4B,GAAO3B,EAAE2B,IAAe,EAC1B5B,EAAE4B,GAAO3B,EAAE2B,GAAa,EACrB,mBAGFsB,EAAME,cAA0BD,EAAY,UAAIA,EAAUE,kBAG5DvD,iBCdKA,UAAeA,EAAIyC,MAAM,mBCAxBzC,UAAkBA,EAAIC,gBAAQC,EAAGC,UAAMD,EAAIC,qBCC1CH,SAAsB,UAAI,IAAIkC,IAAIlC,sBCDjCA,wEAAiCA,EAAIgC,gBAAOwB,UAAOC,EAAOC,cAAKC,UAAQH,IAAOG,oBCClFC,EAAaC,EAAaC,UACnCF,EAAK1C,IADmD4C,WAC9CC,EAAKrD,UAAMoD,EAAOC,EAAKF,EAAKnD,cAC5BqD,EAAKrD,SAAM,CAACqD,EAAKF,EAAKnD,kCCFXsD,EAAaC,kBAAuB,+BACpCC,MAAMF,EAAK7C,kBAChCgD,QAAS,CACPC,kGAFEC,UAOCA,EAASC,gFCHEC,EAAeC,OAC3BC,EAAW,UAEjBF,EAAOhE,iBACLG,UAAKC,EAAUD,GACX+D,EAASC,KAAKhE,GACd+D,EAASC,KAAKF,EAAO9D,MAGpBG,QAAQ8D,IAAIF,mBCfNG,yBAAK,GAAM,IAAI/D,iBAAQgE,UAAWC,WAAWD,EAASD,wBCAnDA,EAAYG,UAA0B,IAAIlE,iBACnDgE,EAASG,yCCgjBX,SAAgBC,EAAMC,GAC5B,IACC,IAAIC,kBD5iBoBtE,QAAQ8D,IAAI,CAACI,EAASK,mBAApCC,UACCR,UC4iBV,MAAMS,GACP,OAAOJ,EAAQI,GAEhB,OAAIH,GAAUA,EAAOI,KACbJ,EAAOI,UAAK,EAAQL,GAErBC,cDjjBKK,UACAR,EAAOQ,SARVJ,EAAQ,IAAIvE,iBAAQgE,UAAWC,WAAWD,EAASD,sBAEpDG,8BAA8BK,QAAdP,oIEFM/D,UACzB2E,EAAO3E,GAAcA,EAEL,iBAATA,EAA0B4E,KAAKC,MAAM7E,4BCFjC8E,EAA0BC,yDAAmCxF,MAAMyF,KAClF,CAAEpD,OAAQ,YACTqD,EAAGlD,UAAS,IAAI6C,KAAK,EAAG,EAAG7C,GAAKmD,mBAAmBJ,EAAQ,CAAEK,QAASJ,0BCFtDD,EAA0BC,yDAAmCxF,MAAMyF,KACpF,CAAEpD,OAAQ,aACTqD,EAAGlD,UAAS,IAAI6C,KAAK,EAAG7C,GAAKmD,mBAAmBJ,EAAQ,CAAEM,MAAOL,4CCLpD9B,4BAAmBA,8FCAKoC,UAAOC,EAAInG,gBAAQoC,EAAKgE,UAASA,EAAKhE,IAAM8D,yBCAhE3F,UAAYA,aAAc8F,yBCA/B9F,EAAc+F,EAAaC,mFAAoChG,EAAG+F,aAAE,EAAGE,GAAOD,aAAE,EAAGC,2BCAlFjG,mFAAqCiG,EAAK/D,OAASlC,EAAGkC,YAASgE,EAAYlG,aAAG,EAAGiG,+BCA9EvF,UAAqB,IAAIyF,IAAIC,KAAKjB,MAAMiB,KAAKC,UAAU,UAAI3F,sBCA/DA,UAAaA,aAAeyF,6GCClCxF,OAAOG,oBAETwF,EAAK5F,aAAK6F,UAAMH,KAAKjB,MAAMiB,KAAKC,UAAUE,gCCHzB9F,SAAgB,UAAI,IAAI0F,IAAIxF,OAAO6F,QAAQ/F,8BCA3CA,UACNE,OAAOC,KAAKH,GACzBC,aAAI+F,UACC5G,MAAMC,QAAQW,EAAIgG,IACbhG,EAAIgG,GACR/F,aAAI6C,UAAUmD,mBAAmBD,SAAYC,mBAAmBnD,KAChEoD,UAGKD,mBAAmBD,OAAUC,mBAAmBjG,EAAIgG,MAGnDE,KAAK,uBCZLlG,UAAgBE,OAAO6F,QAAQ/F,GAAKyB,OAAS,oDCIzCzB,UACnBmG,QAAQC,IAAK,2JAINpG,sBCNUqD,cAERsC,KAAKjB,MAAMrB,GAClB,MAAOgB,UACA/D,EAAS+C,GAAQA,EAAO,wBCPhBxC,mBAAiBb,UAAgBa,EAAIwF,WAAWrH,gBAAQoC,EAAKP,UAAQO,EAAIP,IAAMb"}