@xlink-network/xlink-sdk
Version:
1 lines • 7.33 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils/arrayHelpers.ts"],"sourcesContent":["import { OneOrMore } from \"./typeHelpers\"\n\nexport function hasAny<T>(ary: T[]): ary is [T, ...T[]]\nexport function hasAny<T>(ary: readonly T[]): ary is readonly [T, ...T[]]\nexport function hasAny<T>(ary: readonly T[]): ary is readonly [T, ...T[]] {\n return ary.length > 0\n}\n\nexport function hasLength<T>(input: readonly T[], length: 0): input is []\nexport function hasLength<T>(input: readonly T[], length: 1): input is [T]\nexport function hasLength<T>(input: readonly T[], length: 2): input is [T, T]\nexport function hasLength<T>(input: readonly T[], length: 3): input is [T, T, T]\nexport function hasLength<T>(\n input: readonly T[],\n length: 4,\n): input is [T, T, T, T]\nexport function hasLength<T>(\n input: readonly T[],\n length: 5,\n): input is [T, T, T, T, T]\nexport function hasLength<T>(\n input: readonly T[],\n length: number,\n): input is OneOrMore<T> {\n return input.length === length\n}\n\nexport function first<T>(ary: readonly [T, ...T[]]): T\nexport function first<T>(ary: readonly [...T[], T]): T\nexport function first<T>(ary: readonly T[]): undefined | T\nexport function first<T>(ary: readonly T[]): undefined | T {\n return ary[0]\n}\n\nexport function last<T>(ary: readonly [T, ...T[]]): T\nexport function last<T>(ary: readonly [...T[], T]): T\nexport function last<T>(ary: readonly T[]): undefined | T\nexport function last<T>(ary: readonly T[]): undefined | T {\n return ary[ary.length - 1]\n}\n\nconst _concat = [].concat\nexport function concat<Ts extends any[]>(\n ...inputArrays: Ts[]\n): Ts[number] extends (infer U)[] ? U[] : never {\n return _concat.apply([], inputArrays as any) as any\n}\n\nconst _reduce = [].reduce\nexport function reduce<Ts extends readonly any[], U>(\n fn: (acc: U, item: Ts[number], index: number, items: Ts) => U,\n initialValue: U,\n inputArray: Ts,\n): U {\n return _reduce.call(inputArray, fn as any, initialValue) as any\n}\n\nexport function range(start: number, end: number): number[] {\n return Array.from({ length: end - start }, (_, i) => i + start)\n}\n\nexport function reverse<T>(ary: T[]): T[] {\n const newAry = [...ary]\n newAry.reverse()\n return newAry\n}\n\nexport function uniq<T>(\n ary: T[],\n iteratee: (item: T) => any = item => item,\n): T[] {\n const seen = new Set<any>()\n return ary.filter(item => {\n const key = iteratee(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n\nexport function oneOf<T extends string[]>(\n ...coll: T\n): (input: unknown) => input is T[number]\nexport function oneOf<T extends any[]>(\n ...coll: T\n): (input: unknown) => input is T[number]\nexport function oneOf<T extends any[]>(\n ...coll: T\n): (input: unknown) => input is T[number] {\n return ((input: unknown) => coll.includes(input)) as any\n}\n\nexport type SortByIteratee<T> = (\n item: T,\n index: number,\n ary: T[],\n) => number | bigint\n/**\n * https://github.com/jashkenas/underscore/blob/1abc36c169947c54c97e266513b1d763d0198f46/modules/sortBy.js\n */\nexport function sortBy<T>(\n iteratee: SortByIteratee<T> | SortByIteratee<T>[],\n ary: T[],\n): T[] {\n const _iteratee = Array.isArray(iteratee) ? iteratee : [iteratee]\n\n return ary\n .map((value, index, ary) => ({\n value: value,\n index: index,\n criteria: _iteratee.map(f => f(value, index, ary)),\n }))\n .sort((left, right) => compareMultiple(left, right))\n .map(v => v.value)\n}\ninterface CompareMultipleItem<T> {\n value: T\n index: number\n criteria: (number | bigint)[]\n}\n/**\n * https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L4632-L4657\n */\nfunction compareMultiple<T>(\n obj: CompareMultipleItem<T>,\n oth: CompareMultipleItem<T>,\n): number {\n const objCriteria = obj.criteria\n const othCriteria = oth.criteria\n const length = objCriteria.length\n\n let index = -1\n while (++index < length) {\n const objCri = objCriteria[index]\n const othCri = othCriteria[index]\n\n let result = 0\n if (typeof objCri === typeof othCri) {\n result = Number((objCri as bigint) - (othCri as bigint))\n } else {\n result = Number(objCri) - Number(othCri)\n }\n if (result) return result\n }\n\n return obj.index - oth.index\n}\n\nexport interface CurriedMapFindFn {\n <T, U>(fn: (input: T) => U | undefined, input: readonly T[]): U | undefined\n <T, U>(\n fn: (input: T) => U | undefined,\n ): (input: readonly T[]) => U | undefined\n}\nexport const mapFind: CurriedMapFindFn = (<T, U>(\n fn: (input: T) => U | undefined,\n input: readonly T[],\n): U | undefined => {\n for (const item of input) {\n const result = fn(item)\n if (result != null) {\n return result\n }\n }\n return undefined\n}) as any\n\nexport interface CurriedMapFindPFn {\n <T, U>(\n fn: (input: T) => Promise<U | undefined> | U | undefined,\n input: readonly T[],\n ): Promise<U | undefined>\n <T, U>(\n fn: (input: T) => Promise<U | undefined> | U | undefined,\n ): (input: readonly T[]) => Promise<U | undefined>\n}\nexport const mapFindP: CurriedMapFindPFn = (async <T, U>(\n fn: (input: T) => Promise<U | undefined> | U | undefined,\n input: readonly T[],\n): Promise<U | undefined> => {\n for (const item of input) {\n const result = await fn(item)\n if (result != null) {\n return result\n }\n }\n return undefined\n}) as any\n"],"mappings":";AAIO,SAAS,OAAU,KAAgD;AACxE,SAAO,IAAI,SAAS;AACtB;AAcO,SAAS,UACd,OACA,QACuB;AACvB,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,MAAS,KAAkC;AACzD,SAAO,IAAI,CAAC;AACd;AAKO,SAAS,KAAQ,KAAkC;AACxD,SAAO,IAAI,IAAI,SAAS,CAAC;AAC3B;AAEA,IAAM,UAAU,CAAC,EAAE;AACZ,SAAS,UACX,aAC2C;AAC9C,SAAO,QAAQ,MAAM,CAAC,GAAG,WAAkB;AAC7C;AAEA,IAAM,UAAU,CAAC,EAAE;AACZ,SAAS,OACd,IACA,cACA,YACG;AACH,SAAO,QAAQ,KAAK,YAAY,IAAW,YAAY;AACzD;AAEO,SAAS,MAAM,OAAe,KAAuB;AAC1D,SAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK;AAChE;AAEO,SAAS,QAAW,KAAe;AACxC,QAAM,SAAS,CAAC,GAAG,GAAG;AACtB,SAAO,QAAQ;AACf,SAAO;AACT;AAEO,SAAS,KACd,KACA,WAA6B,UAAQ,MAChC;AACL,QAAM,OAAO,oBAAI,IAAS;AAC1B,SAAO,IAAI,OAAO,UAAQ;AACxB,UAAM,MAAM,SAAS,IAAI;AACzB,QAAI,KAAK,IAAI,GAAG,GAAG;AACjB,aAAO;AAAA,IACT;AACA,SAAK,IAAI,GAAG;AACZ,WAAO;AAAA,EACT,CAAC;AACH;AAQO,SAAS,SACX,MACqC;AACxC,SAAQ,CAAC,UAAmB,KAAK,SAAS,KAAK;AACjD;AAUO,SAAS,OACd,UACA,KACK;AACL,QAAM,YAAY,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAEhE,SAAO,IACJ,IAAI,CAAC,OAAO,OAAOA,UAAS;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,UAAU,UAAU,IAAI,OAAK,EAAE,OAAO,OAAOA,IAAG,CAAC;AAAA,EACnD,EAAE,EACD,KAAK,CAAC,MAAM,UAAU,gBAAgB,MAAM,KAAK,CAAC,EAClD,IAAI,OAAK,EAAE,KAAK;AACrB;AASA,SAAS,gBACP,KACA,KACQ;AACR,QAAM,cAAc,IAAI;AACxB,QAAM,cAAc,IAAI;AACxB,QAAM,SAAS,YAAY;AAE3B,MAAI,QAAQ;AACZ,SAAO,EAAE,QAAQ,QAAQ;AACvB,UAAM,SAAS,YAAY,KAAK;AAChC,UAAM,SAAS,YAAY,KAAK;AAEhC,QAAI,SAAS;AACb,QAAI,OAAO,WAAW,OAAO,QAAQ;AACnC,eAAS,OAAQ,SAAqB,MAAiB;AAAA,IACzD,OAAO;AACL,eAAS,OAAO,MAAM,IAAI,OAAO,MAAM;AAAA,IACzC;AACA,QAAI,OAAQ,QAAO;AAAA,EACrB;AAEA,SAAO,IAAI,QAAQ,IAAI;AACzB;AAQO,IAAM,UAA6B,CACxC,IACA,UACkB;AAClB,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,GAAG,IAAI;AACtB,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAWO,IAAM,WAA+B,OAC1C,IACA,UAC2B;AAC3B,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,MAAM,GAAG,IAAI;AAC5B,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;","names":["ary"]}