radashi 12.1.0 → 12.2.0-beta.0dc9c8a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE.md +2 -1
  2. package/README.md +124 -17
  3. package/dist/radashi.cjs +1589 -0
  4. package/dist/radashi.d.cts +1212 -0
  5. package/dist/radashi.d.ts +1212 -0
  6. package/dist/radashi.js +1452 -0
  7. package/package.json +51 -40
  8. package/dist/cjs/array.cjs +0 -281
  9. package/dist/cjs/array.cjs.map +0 -1
  10. package/dist/cjs/async.cjs +0 -169
  11. package/dist/cjs/async.cjs.map +0 -1
  12. package/dist/cjs/curry.cjs +0 -113
  13. package/dist/cjs/curry.cjs.map +0 -1
  14. package/dist/cjs/index.cjs +0 -109
  15. package/dist/cjs/index.cjs.map +0 -1
  16. package/dist/cjs/number.cjs +0 -34
  17. package/dist/cjs/number.cjs.map +0 -1
  18. package/dist/cjs/object.cjs +0 -204
  19. package/dist/cjs/object.cjs.map +0 -1
  20. package/dist/cjs/random.cjs +0 -34
  21. package/dist/cjs/random.cjs.map +0 -1
  22. package/dist/cjs/series.cjs +0 -62
  23. package/dist/cjs/series.cjs.map +0 -1
  24. package/dist/cjs/string.cjs +0 -72
  25. package/dist/cjs/string.cjs.map +0 -1
  26. package/dist/cjs/typed.cjs +0 -104
  27. package/dist/cjs/typed.cjs.map +0 -1
  28. package/dist/esm/array.mjs +0 -251
  29. package/dist/esm/array.mjs.map +0 -1
  30. package/dist/esm/async.mjs +0 -158
  31. package/dist/esm/async.mjs.map +0 -1
  32. package/dist/esm/curry.mjs +0 -103
  33. package/dist/esm/curry.mjs.map +0 -1
  34. package/dist/esm/index.mjs +0 -10
  35. package/dist/esm/index.mjs.map +0 -1
  36. package/dist/esm/number.mjs +0 -30
  37. package/dist/esm/number.mjs.map +0 -1
  38. package/dist/esm/object.mjs +0 -186
  39. package/dist/esm/object.mjs.map +0 -1
  40. package/dist/esm/random.mjs +0 -29
  41. package/dist/esm/random.mjs.map +0 -1
  42. package/dist/esm/series.mjs +0 -60
  43. package/dist/esm/series.mjs.map +0 -1
  44. package/dist/esm/string.mjs +0 -63
  45. package/dist/esm/string.mjs.map +0 -1
  46. package/dist/esm/typed.mjs +0 -90
  47. package/dist/esm/typed.mjs.map +0 -1
  48. package/dist/index.d.ts +0 -682
@@ -1 +0,0 @@
1
- {"version":3,"file":"series.cjs","sources":["../../src/series.ts"],"sourcesContent":["import { list } from './array'\n\n/**\n * Creates a series object around a list of values\n * that should be treated with order.\n */\nexport const series = <T>(\n items: T[],\n toKey: (item: T) => string | symbol = item => `${item}`\n) => {\n const { indexesByKey, itemsByIndex } = items.reduce(\n (acc, item, idx) => ({\n indexesByKey: {\n ...acc.indexesByKey,\n [toKey(item)]: idx\n },\n itemsByIndex: {\n ...acc.itemsByIndex,\n [idx]: item\n }\n }),\n {\n indexesByKey: {} as Record<string | symbol, number>,\n itemsByIndex: {} as Record<number, T>\n }\n )\n /**\n * Given two values in the series, returns the\n * value that occurs earlier in the series\n */\n const min = (a: T, b: T): T => {\n return indexesByKey[toKey(a)] < indexesByKey[toKey(b)] ? a : b\n }\n /**\n * Given two values in the series, returns the\n * value that occurs later in the series\n */\n const max = (a: T, b: T): T => {\n return indexesByKey[toKey(a)] > indexesByKey[toKey(b)] ? a : b\n }\n /**\n * Returns the first item from the series\n */\n const first = (): T => {\n return itemsByIndex[0]\n }\n /**\n * Returns the last item in the series\n */\n const last = (): T => {\n return itemsByIndex[items.length - 1]\n }\n /**\n * Given an item in the series returns the next item\n * in the series or default if the given value is\n * the last item in the series\n */\n const next = (current: T, defaultValue?: T): T => {\n return (\n itemsByIndex[indexesByKey[toKey(current)] + 1] ?? defaultValue ?? first()\n )\n }\n /**\n * Given an item in the series returns the previous item\n * in the series or default if the given value is\n * the first item in the series\n */\n const previous = (current: T, defaultValue?: T): T => {\n return (\n itemsByIndex[indexesByKey[toKey(current)] - 1] ?? defaultValue ?? last()\n )\n }\n /**\n * A more dynamic method than next and previous that\n * lets you move many times in either direction.\n * @example series(weekdays).spin('wednesday', 3) => 'monday'\n * @example series(weekdays).spin('wednesday', -3) => 'friday'\n */\n const spin = (current: T, num: number): T => {\n if (num === 0) return current\n const abs = Math.abs(num)\n const rel = abs > items.length ? abs % items.length : abs\n return list(0, rel - 1).reduce(\n acc => (num > 0 ? next(acc) : previous(acc)),\n current\n )\n }\n return {\n min,\n max,\n first,\n last,\n next,\n previous,\n spin\n }\n}\n"],"names":["list"],"mappings":";;;;AAMO,MAAM,SAAS,CACpB,KAAA,EACA,KAAsC,GAAA,CAAA,IAAA,KAAQ,GAAG,IAC9C,CAAA,CAAA,KAAA;AACH,EAAA,MAAM,EAAE,YAAA,EAAc,YAAa,EAAA,GAAI,KAAM,CAAA,MAAA;AAAA,IAC3C,CAAC,GAAK,EAAA,IAAA,EAAM,GAAS,MAAA;AAAA,MACnB,YAAc,EAAA;AAAA,QACZ,GAAG,GAAI,CAAA,YAAA;AAAA,QACP,CAAC,KAAA,CAAM,IAAI,CAAC,GAAG,GAAA;AAAA,OACjB;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,GAAG,GAAI,CAAA,YAAA;AAAA,QACP,CAAC,GAAG,GAAG,IAAA;AAAA,OACT;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,cAAc,EAAC;AAAA,MACf,cAAc,EAAC;AAAA,KACjB;AAAA,GACF,CAAA;AAKA,EAAM,MAAA,GAAA,GAAM,CAAC,CAAA,EAAM,CAAY,KAAA;AAC7B,IAAO,OAAA,YAAA,CAAa,KAAM,CAAA,CAAC,CAAC,CAAA,GAAI,aAAa,KAAM,CAAA,CAAC,CAAC,CAAA,GAAI,CAAI,GAAA,CAAA,CAAA;AAAA,GAC/D,CAAA;AAKA,EAAM,MAAA,GAAA,GAAM,CAAC,CAAA,EAAM,CAAY,KAAA;AAC7B,IAAO,OAAA,YAAA,CAAa,KAAM,CAAA,CAAC,CAAC,CAAA,GAAI,aAAa,KAAM,CAAA,CAAC,CAAC,CAAA,GAAI,CAAI,GAAA,CAAA,CAAA;AAAA,GAC/D,CAAA;AAIA,EAAA,MAAM,QAAQ,MAAS;AACrB,IAAA,OAAO,aAAa,CAAC,CAAA,CAAA;AAAA,GACvB,CAAA;AAIA,EAAA,MAAM,OAAO,MAAS;AACpB,IAAO,OAAA,YAAA,CAAa,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,GACtC,CAAA;AAMA,EAAM,MAAA,IAAA,GAAO,CAAC,OAAA,EAAY,YAAwB,KAAA;AAChD,IACE,OAAA,YAAA,CAAa,aAAa,KAAM,CAAA,OAAO,CAAC,CAAI,GAAA,CAAC,CAAK,IAAA,YAAA,IAAgB,KAAM,EAAA,CAAA;AAAA,GAE5E,CAAA;AAMA,EAAM,MAAA,QAAA,GAAW,CAAC,OAAA,EAAY,YAAwB,KAAA;AACpD,IACE,OAAA,YAAA,CAAa,aAAa,KAAM,CAAA,OAAO,CAAC,CAAI,GAAA,CAAC,CAAK,IAAA,YAAA,IAAgB,IAAK,EAAA,CAAA;AAAA,GAE3E,CAAA;AAOA,EAAM,MAAA,IAAA,GAAO,CAAC,OAAA,EAAY,GAAmB,KAAA;AAC3C,IAAA,IAAI,GAAQ,KAAA,CAAA;AAAG,MAAO,OAAA,OAAA,CAAA;AACtB,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACxB,IAAA,MAAM,MAAM,GAAM,GAAA,KAAA,CAAM,MAAS,GAAA,GAAA,GAAM,MAAM,MAAS,GAAA,GAAA,CAAA;AACtD,IAAA,OAAOA,UAAK,CAAA,CAAA,EAAG,GAAM,GAAA,CAAC,CAAE,CAAA,MAAA;AAAA,MACtB,SAAQ,GAAM,GAAA,CAAA,GAAI,KAAK,GAAG,CAAA,GAAI,SAAS,GAAG,CAAA;AAAA,MAC1C,OAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AACA,EAAO,OAAA;AAAA,IACL,GAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,GACF,CAAA;AACF;;;;"}
@@ -1,72 +0,0 @@
1
- 'use strict';
2
-
3
- const capitalize = (str) => {
4
- if (!str || str.length === 0)
5
- return "";
6
- const lower = str.toLowerCase();
7
- return lower.substring(0, 1).toUpperCase() + lower.substring(1, lower.length);
8
- };
9
- const camel = (str) => {
10
- const parts = str?.replace(/([A-Z])+/g, capitalize)?.split(/(?=[A-Z])|[\.\-\s_]/).map((x) => x.toLowerCase()) ?? [];
11
- if (parts.length === 0)
12
- return "";
13
- if (parts.length === 1)
14
- return parts[0];
15
- return parts.reduce((acc, part) => {
16
- return `${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}`;
17
- });
18
- };
19
- const snake = (str, options) => {
20
- const parts = str?.replace(/([A-Z])+/g, capitalize).split(/(?=[A-Z])|[\.\-\s_]/).map((x) => x.toLowerCase()) ?? [];
21
- if (parts.length === 0)
22
- return "";
23
- if (parts.length === 1)
24
- return parts[0];
25
- const result = parts.reduce((acc, part) => {
26
- return `${acc}_${part.toLowerCase()}`;
27
- });
28
- return options?.splitOnNumber === false ? result : result.replace(/([A-Za-z]{1}[0-9]{1})/, (val) => `${val[0]}_${val[1]}`);
29
- };
30
- const dash = (str) => {
31
- const parts = str?.replace(/([A-Z])+/g, capitalize)?.split(/(?=[A-Z])|[\.\-\s_]/).map((x) => x.toLowerCase()) ?? [];
32
- if (parts.length === 0)
33
- return "";
34
- if (parts.length === 1)
35
- return parts[0];
36
- return parts.reduce((acc, part) => {
37
- return `${acc}-${part.toLowerCase()}`;
38
- });
39
- };
40
- const pascal = (str) => {
41
- const parts = str?.split(/[\.\-\s_]/).map((x) => x.toLowerCase()) ?? [];
42
- if (parts.length === 0)
43
- return "";
44
- return parts.map((str2) => str2.charAt(0).toUpperCase() + str2.slice(1)).join("");
45
- };
46
- const title = (str) => {
47
- if (!str)
48
- return "";
49
- return str.split(/(?=[A-Z])|[\.\-\s_]/).map((s) => s.trim()).filter((s) => !!s).map((s) => capitalize(s.toLowerCase())).join(" ");
50
- };
51
- const template = (str, data, regex = /\{\{(.+?)\}\}/g) => {
52
- return Array.from(str.matchAll(regex)).reduce((acc, match) => {
53
- return acc.replace(match[0], data[match[1]]);
54
- }, str);
55
- };
56
- const trim = (str, charsToTrim = " ") => {
57
- if (!str)
58
- return "";
59
- const toTrim = charsToTrim.replace(/[\W]{1}/g, "\\$&");
60
- const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, "g");
61
- return str.replace(regex, "");
62
- };
63
-
64
- exports.camel = camel;
65
- exports.capitalize = capitalize;
66
- exports.dash = dash;
67
- exports.pascal = pascal;
68
- exports.snake = snake;
69
- exports.template = template;
70
- exports.title = title;
71
- exports.trim = trim;
72
- //# sourceMappingURL=string.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"string.cjs","sources":["../../src/string.ts"],"sourcesContent":["/**\n * Capitalize the first word of the string\n *\n * capitalize('hello') -> 'Hello'\n * capitalize('va va voom') -> 'Va va voom'\n */\nexport const capitalize = (str: string): string => {\n if (!str || str.length === 0) return ''\n const lower = str.toLowerCase()\n return lower.substring(0, 1).toUpperCase() + lower.substring(1, lower.length)\n}\n\n/**\n * Formats the given string in camel case fashion\n *\n * camel('hello world') -> 'helloWorld'\n * camel('va va-VOOM') -> 'vaVaVoom'\n * camel('helloWorld') -> 'helloWorld'\n */\nexport const camel = (str: string): string => {\n const parts =\n str\n ?.replace(/([A-Z])+/g, capitalize)\n ?.split(/(?=[A-Z])|[\\.\\-\\s_]/)\n .map(x => x.toLowerCase()) ?? []\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0]\n return parts.reduce((acc, part) => {\n return `${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}`\n })\n}\n\n/**\n * Formats the given string in snake case fashion\n *\n * snake('hello world') -> 'hello_world'\n * snake('va va-VOOM') -> 'va_va_voom'\n * snake('helloWord') -> 'hello_world'\n */\nexport const snake = (\n str: string,\n options?: {\n splitOnNumber?: boolean\n }\n): string => {\n const parts =\n str\n ?.replace(/([A-Z])+/g, capitalize)\n .split(/(?=[A-Z])|[\\.\\-\\s_]/)\n .map(x => x.toLowerCase()) ?? []\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0]\n const result = parts.reduce((acc, part) => {\n return `${acc}_${part.toLowerCase()}`\n })\n return options?.splitOnNumber === false\n ? result\n : result.replace(/([A-Za-z]{1}[0-9]{1})/, val => `${val[0]!}_${val[1]!}`)\n}\n\n/**\n * Formats the given string in dash case fashion\n *\n * dash('hello world') -> 'hello-world'\n * dash('va va_VOOM') -> 'va-va-voom'\n * dash('helloWord') -> 'hello-word'\n */\nexport const dash = (str: string): string => {\n const parts =\n str\n ?.replace(/([A-Z])+/g, capitalize)\n ?.split(/(?=[A-Z])|[\\.\\-\\s_]/)\n .map(x => x.toLowerCase()) ?? []\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0]\n return parts.reduce((acc, part) => {\n return `${acc}-${part.toLowerCase()}`\n })\n}\n\n/**\n * Formats the given string in pascal case fashion\n *\n * pascal('hello world') -> 'HelloWorld'\n * pascal('va va boom') -> 'VaVaBoom'\n */\nexport const pascal = (str: string): string => {\n const parts = str?.split(/[\\.\\-\\s_]/).map(x => x.toLowerCase()) ?? []\n if (parts.length === 0) return ''\n return parts.map(str => str.charAt(0).toUpperCase() + str.slice(1)).join('')\n}\n\n/**\n * Formats the given string in title case fashion\n *\n * title('hello world') -> 'Hello World'\n * title('va_va_boom') -> 'Va Va Boom'\n * title('root-hook') -> 'Root Hook'\n * title('queryItems') -> 'Query Items'\n */\nexport const title = (str: string | null | undefined): string => {\n if (!str) return ''\n return str\n .split(/(?=[A-Z])|[\\.\\-\\s_]/)\n .map(s => s.trim())\n .filter(s => !!s)\n .map(s => capitalize(s.toLowerCase()))\n .join(' ')\n}\n\n/**\n * template is used to replace data by name in template strings.\n * The default expression looks for {{name}} to identify names.\n *\n * Ex. template('Hello, {{name}}', { name: 'ray' })\n * Ex. template('Hello, <name>', { name: 'ray' }, /<(.+?)>/g)\n */\nexport const template = (\n str: string,\n data: Record<string, any>,\n regex = /\\{\\{(.+?)\\}\\}/g\n) => {\n return Array.from(str.matchAll(regex)).reduce((acc, match) => {\n return acc.replace(match[0], data[match[1]])\n }, str)\n}\n\n/**\n * Trims all prefix and suffix characters from the given\n * string. Like the builtin trim function but accepts\n * other characters you would like to trim and trims\n * multiple characters.\n *\n * ```typescript\n * trim(' hello ') // => 'hello'\n * trim('__hello__', '_') // => 'hello'\n * trim('/repos/:owner/:repo/', '/') // => 'repos/:owner/:repo'\n * trim('222222__hello__1111111', '12_') // => 'hello'\n * ```\n */\nexport const trim = (\n str: string | null | undefined,\n charsToTrim: string = ' '\n) => {\n if (!str) return ''\n const toTrim = charsToTrim.replace(/[\\W]{1}/g, '\\\\$&')\n const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, 'g')\n return str.replace(regex, '')\n}\n"],"names":["str"],"mappings":"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"}
@@ -1,104 +0,0 @@
1
- 'use strict';
2
-
3
- const isSymbol = (value) => {
4
- return !!value && value.constructor === Symbol;
5
- };
6
- const isArray = Array.isArray;
7
- const isObject = (value) => {
8
- return !!value && value.constructor === Object;
9
- };
10
- const isPrimitive = (value) => {
11
- return value === void 0 || value === null || typeof value !== "object" && typeof value !== "function";
12
- };
13
- const isFunction = (value) => {
14
- return !!(value && value.constructor && value.call && value.apply);
15
- };
16
- const isString = (value) => {
17
- return typeof value === "string" || value instanceof String;
18
- };
19
- const isInt = (value) => {
20
- return isNumber(value) && value % 1 === 0;
21
- };
22
- const isFloat = (value) => {
23
- return isNumber(value) && value % 1 !== 0;
24
- };
25
- const isNumber = (value) => {
26
- try {
27
- return Number(value) === value;
28
- } catch {
29
- return false;
30
- }
31
- };
32
- const isDate = (value) => {
33
- return Object.prototype.toString.call(value) === "[object Date]";
34
- };
35
- const isPromise = (value) => {
36
- if (!value)
37
- return false;
38
- if (!value.then)
39
- return false;
40
- if (!isFunction(value.then))
41
- return false;
42
- return true;
43
- };
44
- const isEmpty = (value) => {
45
- if (value === true || value === false)
46
- return true;
47
- if (value === null || value === void 0)
48
- return true;
49
- if (isNumber(value))
50
- return value === 0;
51
- if (isDate(value))
52
- return isNaN(value.getTime());
53
- if (isFunction(value))
54
- return false;
55
- if (isSymbol(value))
56
- return false;
57
- const length = value.length;
58
- if (isNumber(length))
59
- return length === 0;
60
- const size = value.size;
61
- if (isNumber(size))
62
- return size === 0;
63
- const keys = Object.keys(value).length;
64
- return keys === 0;
65
- };
66
- const isEqual = (x, y) => {
67
- if (Object.is(x, y))
68
- return true;
69
- if (x instanceof Date && y instanceof Date) {
70
- return x.getTime() === y.getTime();
71
- }
72
- if (x instanceof RegExp && y instanceof RegExp) {
73
- return x.toString() === y.toString();
74
- }
75
- if (typeof x !== "object" || x === null || typeof y !== "object" || y === null) {
76
- return false;
77
- }
78
- const keysX = Reflect.ownKeys(x);
79
- const keysY = Reflect.ownKeys(y);
80
- if (keysX.length !== keysY.length)
81
- return false;
82
- for (let i = 0; i < keysX.length; i++) {
83
- if (!Reflect.has(y, keysX[i]))
84
- return false;
85
- if (!isEqual(x[keysX[i]], y[keysX[i]]))
86
- return false;
87
- }
88
- return true;
89
- };
90
-
91
- exports.isArray = isArray;
92
- exports.isDate = isDate;
93
- exports.isEmpty = isEmpty;
94
- exports.isEqual = isEqual;
95
- exports.isFloat = isFloat;
96
- exports.isFunction = isFunction;
97
- exports.isInt = isInt;
98
- exports.isNumber = isNumber;
99
- exports.isObject = isObject;
100
- exports.isPrimitive = isPrimitive;
101
- exports.isPromise = isPromise;
102
- exports.isString = isString;
103
- exports.isSymbol = isSymbol;
104
- //# sourceMappingURL=typed.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typed.cjs","sources":["../../src/typed.ts"],"sourcesContent":["export const isSymbol = (value: any): value is symbol => {\n return !!value && value.constructor === Symbol\n}\n\nexport const isArray = Array.isArray\n\nexport const isObject = (value: any): value is object => {\n return !!value && value.constructor === Object\n}\n\n/**\n * Checks if the given value is primitive.\n *\n * Primitive Types: number , string , boolean , symbol, bigint, undefined, null\n *\n * @param {*} value value to check\n * @returns {boolean} result\n */\nexport const isPrimitive = (value: any): boolean => {\n return (\n value === undefined ||\n value === null ||\n (typeof value !== 'object' && typeof value !== 'function')\n )\n}\n\nexport const isFunction = (value: any): value is Function => {\n return !!(value && value.constructor && value.call && value.apply)\n}\n\nexport const isString = (value: any): value is string => {\n return typeof value === 'string' || value instanceof String\n}\n\nexport const isInt = (value: any): value is number => {\n return isNumber(value) && value % 1 === 0\n}\n\nexport const isFloat = (value: any): value is number => {\n return isNumber(value) && value % 1 !== 0\n}\n\nexport const isNumber = (value: any): value is number => {\n try {\n return Number(value) === value\n } catch {\n return false\n }\n}\n\nexport const isDate = (value: any): value is Date => {\n return Object.prototype.toString.call(value) === '[object Date]'\n}\n\n/**\n * This is really a _best guess_ promise checking. You\n * should probably use Promise.resolve(value) to be 100%\n * sure you're handling it correctly.\n */\nexport const isPromise = (value: any): value is Promise<any> => {\n if (!value) return false\n if (!value.then) return false\n if (!isFunction(value.then)) return false\n return true\n}\n\nexport const isEmpty = (value: any) => {\n if (value === true || value === false) return true\n if (value === null || value === undefined) return true\n if (isNumber(value)) return value === 0\n if (isDate(value)) return isNaN(value.getTime())\n if (isFunction(value)) return false\n if (isSymbol(value)) return false\n const length = (value as any).length\n if (isNumber(length)) return length === 0\n const size = (value as any).size\n if (isNumber(size)) return size === 0\n const keys = Object.keys(value).length\n return keys === 0\n}\n\nexport const isEqual = <TType>(x: TType, y: TType): boolean => {\n if (Object.is(x, y)) return true\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime()\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString()\n }\n if (\n typeof x !== 'object' ||\n x === null ||\n typeof y !== 'object' ||\n y === null\n ) {\n return false\n }\n const keysX = Reflect.ownKeys(x as unknown as object) as (keyof typeof x)[]\n const keysY = Reflect.ownKeys(y as unknown as object)\n if (keysX.length !== keysY.length) return false\n for (let i = 0; i < keysX.length; i++) {\n if (!Reflect.has(y as unknown as object, keysX[i])) return false\n if (!isEqual(x[keysX[i]], y[keysX[i]])) return false\n }\n return true\n}\n"],"names":[],"mappings":"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"}
@@ -1,251 +0,0 @@
1
- import { isFunction, isArray } from './typed.mjs';
2
-
3
- const group = (array, getGroupId) => {
4
- return array.reduce((acc, item) => {
5
- const groupId = getGroupId(item);
6
- if (!acc[groupId])
7
- acc[groupId] = [];
8
- acc[groupId].push(item);
9
- return acc;
10
- }, {});
11
- };
12
- function zip(...arrays) {
13
- if (!arrays || !arrays.length)
14
- return [];
15
- return new Array(Math.max(...arrays.map(({ length }) => length))).fill([]).map((_, idx) => arrays.map((array) => array[idx]));
16
- }
17
- function zipToObject(keys, values) {
18
- if (!keys || !keys.length) {
19
- return {};
20
- }
21
- const getValue = isFunction(values) ? values : isArray(values) ? (_k, i) => values[i] : (_k, _i) => values;
22
- return keys.reduce((acc, key, idx) => {
23
- acc[key] = getValue(key, idx);
24
- return acc;
25
- }, {});
26
- }
27
- const boil = (array, compareFunc) => {
28
- if (!array || (array.length ?? 0) === 0)
29
- return null;
30
- return array.reduce(compareFunc);
31
- };
32
- function sum(array, fn) {
33
- return (array || []).reduce((acc, item) => acc + (fn ? fn(item) : item), 0);
34
- }
35
- const first = (array, defaultValue = void 0) => {
36
- return array?.length > 0 ? array[0] : defaultValue;
37
- };
38
- const last = (array, defaultValue = void 0) => {
39
- return array?.length > 0 ? array[array.length - 1] : defaultValue;
40
- };
41
- const sort = (array, getter, desc = false) => {
42
- if (!array)
43
- return [];
44
- const asc = (a, b) => getter(a) - getter(b);
45
- const dsc = (a, b) => getter(b) - getter(a);
46
- return array.slice().sort(desc === true ? dsc : asc);
47
- };
48
- const alphabetical = (array, getter, dir = "asc") => {
49
- if (!array)
50
- return [];
51
- const asc = (a, b) => `${getter(a)}`.localeCompare(getter(b));
52
- const dsc = (a, b) => `${getter(b)}`.localeCompare(getter(a));
53
- return array.slice().sort(dir === "desc" ? dsc : asc);
54
- };
55
- const counting = (list2, identity) => {
56
- if (!list2)
57
- return {};
58
- return list2.reduce((acc, item) => {
59
- const id = identity(item);
60
- acc[id] = (acc[id] ?? 0) + 1;
61
- return acc;
62
- }, {});
63
- };
64
- const replace = (list2, newItem, match) => {
65
- if (!list2)
66
- return [];
67
- if (newItem === void 0)
68
- return [...list2];
69
- for (let idx = 0; idx < list2.length; idx++) {
70
- const item = list2[idx];
71
- if (match(item, idx)) {
72
- return [
73
- ...list2.slice(0, idx),
74
- newItem,
75
- ...list2.slice(idx + 1, list2.length)
76
- ];
77
- }
78
- }
79
- return [...list2];
80
- };
81
- const objectify = (array, getKey, getValue = (item) => item) => {
82
- return array.reduce((acc, item) => {
83
- acc[getKey(item)] = getValue(item);
84
- return acc;
85
- }, {});
86
- };
87
- const select = (array, mapper, condition) => {
88
- if (!array)
89
- return [];
90
- return array.reduce((acc, item, index) => {
91
- if (!condition(item, index))
92
- return acc;
93
- acc.push(mapper(item, index));
94
- return acc;
95
- }, []);
96
- };
97
- function max(array, getter) {
98
- const get = getter ?? ((v) => v);
99
- return boil(array, (a, b) => get(a) > get(b) ? a : b);
100
- }
101
- function min(array, getter) {
102
- const get = getter ?? ((v) => v);
103
- return boil(array, (a, b) => get(a) < get(b) ? a : b);
104
- }
105
- const cluster = (list2, size = 2) => {
106
- const clusterCount = Math.ceil(list2.length / size);
107
- return new Array(clusterCount).fill(null).map((_c, i) => {
108
- return list2.slice(i * size, i * size + size);
109
- });
110
- };
111
- const unique = (array, toKey) => {
112
- const valueMap = array.reduce((acc, item) => {
113
- const key = toKey ? toKey(item) : item;
114
- if (acc[key])
115
- return acc;
116
- acc[key] = item;
117
- return acc;
118
- }, {});
119
- return Object.values(valueMap);
120
- };
121
- function* range(startOrLength, end, valueOrMapper = (i) => i, step = 1) {
122
- const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper;
123
- const start = end ? startOrLength : 0;
124
- const final = end ?? startOrLength;
125
- for (let i = start; i <= final; i += step) {
126
- yield mapper(i);
127
- if (i + step > final)
128
- break;
129
- }
130
- }
131
- const list = (startOrLength, end, valueOrMapper, step) => {
132
- return Array.from(range(startOrLength, end, valueOrMapper, step));
133
- };
134
- const flat = (lists) => {
135
- return lists.reduce((acc, list2) => {
136
- acc.push(...list2);
137
- return acc;
138
- }, []);
139
- };
140
- const intersects = (listA, listB, identity) => {
141
- if (!listA || !listB)
142
- return false;
143
- const ident = identity ?? ((x) => x);
144
- const dictB = listB.reduce((acc, item) => {
145
- acc[ident(item)] = true;
146
- return acc;
147
- }, {});
148
- return listA.some((value) => dictB[ident(value)]);
149
- };
150
- const fork = (list2, condition) => {
151
- if (!list2)
152
- return [[], []];
153
- return list2.reduce(
154
- (acc, item) => {
155
- const [a, b] = acc;
156
- if (condition(item)) {
157
- return [[...a, item], b];
158
- } else {
159
- return [a, [...b, item]];
160
- }
161
- },
162
- [[], []]
163
- );
164
- };
165
- const merge = (root, others, matcher) => {
166
- if (!others && !root)
167
- return [];
168
- if (!others)
169
- return root;
170
- if (!root)
171
- return [];
172
- if (!matcher)
173
- return root;
174
- return root.reduce((acc, r) => {
175
- const matched = others.find((o) => matcher(r) === matcher(o));
176
- if (matched)
177
- acc.push(matched);
178
- else
179
- acc.push(r);
180
- return acc;
181
- }, []);
182
- };
183
- const replaceOrAppend = (list2, newItem, match) => {
184
- if (!list2 && !newItem)
185
- return [];
186
- if (!newItem)
187
- return [...list2];
188
- if (!list2)
189
- return [newItem];
190
- for (let idx = 0; idx < list2.length; idx++) {
191
- const item = list2[idx];
192
- if (match(item, idx)) {
193
- return [
194
- ...list2.slice(0, idx),
195
- newItem,
196
- ...list2.slice(idx + 1, list2.length)
197
- ];
198
- }
199
- }
200
- return [...list2, newItem];
201
- };
202
- const toggle = (list2, item, toKey, options) => {
203
- if (!list2 && !item)
204
- return [];
205
- if (!list2)
206
- return [item];
207
- if (!item)
208
- return [...list2];
209
- const matcher = toKey ? (x, idx) => toKey(x, idx) === toKey(item, idx) : (x) => x === item;
210
- const existing = list2.find(matcher);
211
- if (existing)
212
- return list2.filter((x, idx) => !matcher(x, idx));
213
- const strategy = options?.strategy ?? "append";
214
- if (strategy === "append")
215
- return [...list2, item];
216
- return [item, ...list2];
217
- };
218
- const sift = (list2) => {
219
- return list2?.filter((x) => !!x) ?? [];
220
- };
221
- const iterate = (count, func, initValue) => {
222
- let value = initValue;
223
- for (let i = 1; i <= count; i++) {
224
- value = func(value, i);
225
- }
226
- return value;
227
- };
228
- const diff = (root, other, identity = (t) => t) => {
229
- if (!root?.length && !other?.length)
230
- return [];
231
- if (root?.length === void 0)
232
- return [...other];
233
- if (!other?.length)
234
- return [...root];
235
- const bKeys = other.reduce((acc, item) => {
236
- acc[identity(item)] = true;
237
- return acc;
238
- }, {});
239
- return root.filter((a) => !bKeys[identity(a)]);
240
- };
241
- function shift(arr, n) {
242
- if (arr.length === 0)
243
- return arr;
244
- const shiftNumber = n % arr.length;
245
- if (shiftNumber === 0)
246
- return arr;
247
- return [...arr.slice(-shiftNumber, arr.length), ...arr.slice(0, -shiftNumber)];
248
- }
249
-
250
- export { alphabetical, boil, cluster, counting, diff, first, flat, fork, group, intersects, iterate, last, list, max, merge, min, objectify, range, replace, replaceOrAppend, select, shift, sift, sort, sum, toggle, unique, zip, zipToObject };
251
- //# sourceMappingURL=array.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"array.mjs","sources":["../../src/array.ts"],"sourcesContent":["import { isArray, isFunction } from './typed'\n\n/**\n * Sorts an array of items into groups. The return value is a map where the keys are\n * the group ids the given getGroupId function produced and the value is an array of\n * each item in that group.\n */\nexport const group = <T, Key extends string | number | symbol>(\n array: readonly T[],\n getGroupId: (item: T) => Key\n): Partial<Record<Key, T[]>> => {\n return array.reduce((acc, item) => {\n const groupId = getGroupId(item)\n if (!acc[groupId]) acc[groupId] = []\n acc[groupId].push(item)\n return acc\n }, {} as Record<Key, T[]>)\n}\n\n/**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * Ex. const zipped = zip(['a', 'b'], [1, 2], [true, false]) // [['a', 1, true], ['b', 2, false]]\n */\nexport function zip<T1, T2, T3, T4, T5>(\n array1: T1[],\n array2: T2[],\n array3: T3[],\n array4: T4[],\n array5: T5[]\n): [T1, T2, T3, T4, T5][]\nexport function zip<T1, T2, T3, T4>(\n array1: T1[],\n array2: T2[],\n array3: T3[],\n array4: T4[]\n): [T1, T2, T3, T4][]\nexport function zip<T1, T2, T3>(\n array1: T1[],\n array2: T2[],\n array3: T3[]\n): [T1, T2, T3][]\nexport function zip<T1, T2>(array1: T1[], array2: T2[]): [T1, T2][]\nexport function zip<T>(...arrays: T[][]): T[][] {\n if (!arrays || !arrays.length) return []\n return new Array(Math.max(...arrays.map(({ length }) => length)))\n .fill([])\n .map((_, idx) => arrays.map(array => array[idx]))\n}\n\n/**\n * Creates an object mapping the specified keys to their corresponding values\n *\n * Ex. const zipped = zipToObject(['a', 'b'], [1, 2]) // { a: 1, b: 2 }\n * Ex. const zipped = zipToObject(['a', 'b'], (k, i) => k + i) // { a: 'a0', b: 'b1' }\n * Ex. const zipped = zipToObject(['a', 'b'], 1) // { a: 1, b: 1 }\n */\nexport function zipToObject<K extends string | number | symbol, V>(\n keys: K[],\n values: V | ((key: K, idx: number) => V) | V[]\n): Record<K, V> {\n if (!keys || !keys.length) {\n return {} as Record<K, V>\n }\n\n const getValue = isFunction(values)\n ? values\n : isArray(values)\n ? (_k: K, i: number) => values[i]\n : (_k: K, _i: number) => values\n\n return keys.reduce((acc, key, idx) => {\n acc[key] = getValue(key, idx)\n return acc\n }, {} as Record<K, V>)\n}\n\n/**\n * Go through a list of items, starting with the first item,\n * and comparing with the second. Keep the one you want then\n * compare that to the next item in the list with the same\n *\n * Ex. const greatest = () => boil(numbers, (a, b) => a > b)\n */\nexport const boil = <T>(\n array: readonly T[],\n compareFunc: (a: T, b: T) => T\n) => {\n if (!array || (array.length ?? 0) === 0) return null\n return array.reduce(compareFunc)\n}\n\n/**\n * Sum all numbers in an array. Optionally provide a function\n * to convert objects in the array to number values.\n */\nexport function sum<T extends number>(array: readonly T[]): number\nexport function sum<T extends object>(\n array: readonly T[],\n fn: (item: T) => number\n): number\nexport function sum<T extends object | number>(\n array: readonly any[],\n fn?: (item: T) => number\n): number {\n return (array || []).reduce((acc, item) => acc + (fn ? fn(item) : item), 0)\n}\n\n/**\n * Get the first item in an array or a default value\n */\nexport const first = <T>(\n array: readonly T[],\n defaultValue: T | null | undefined = undefined\n) => {\n return array?.length > 0 ? array[0] : defaultValue\n}\n\n/**\n * Get the last item in an array or a default value\n */\nexport const last = <T>(\n array: readonly T[],\n defaultValue: T | null | undefined = undefined\n) => {\n return array?.length > 0 ? array[array.length - 1] : defaultValue\n}\n\n/**\n * Sort an array without modifying it and return\n * the newly sorted value\n */\nexport const sort = <T>(\n array: readonly T[],\n getter: (item: T) => number,\n desc = false\n) => {\n if (!array) return []\n const asc = (a: T, b: T) => getter(a) - getter(b)\n const dsc = (a: T, b: T) => getter(b) - getter(a)\n return array.slice().sort(desc === true ? dsc : asc)\n}\n\n/**\n * Sort an array without modifying it and return\n * the newly sorted value. Allows for a string\n * sorting value.\n */\nexport const alphabetical = <T>(\n array: readonly T[],\n getter: (item: T) => string,\n dir: 'asc' | 'desc' = 'asc'\n) => {\n if (!array) return []\n const asc = (a: T, b: T) => `${getter(a)}`.localeCompare(getter(b))\n const dsc = (a: T, b: T) => `${getter(b)}`.localeCompare(getter(a))\n return array.slice().sort(dir === 'desc' ? dsc : asc)\n}\n\nexport const counting = <T, TId extends string | number | symbol>(\n list: readonly T[],\n identity: (item: T) => TId\n): Record<TId, number> => {\n if (!list) return {} as Record<TId, number>\n return list.reduce((acc, item) => {\n const id = identity(item)\n acc[id] = (acc[id] ?? 0) + 1\n return acc\n }, {} as Record<TId, number>)\n}\n\n/**\n * Replace an element in an array with a new\n * item without modifying the array and return\n * the new value\n */\nexport const replace = <T>(\n list: readonly T[],\n newItem: T,\n match: (item: T, idx: number) => boolean\n): T[] => {\n if (!list) return []\n if (newItem === undefined) return [...list]\n for (let idx = 0; idx < list.length; idx++) {\n const item = list[idx]\n if (match(item, idx)) {\n return [\n ...list.slice(0, idx),\n newItem,\n ...list.slice(idx + 1, list.length)\n ]\n }\n }\n return [...list]\n}\n\n/**\n * Convert an array to a dictionary by mapping each item\n * into a dictionary key & value\n */\nexport const objectify = <T, Key extends string | number | symbol, Value = T>(\n array: readonly T[],\n getKey: (item: T) => Key,\n getValue: (item: T) => Value = item => item as unknown as Value\n): Record<Key, Value> => {\n return array.reduce((acc, item) => {\n acc[getKey(item)] = getValue(item)\n return acc\n }, {} as Record<Key, Value>)\n}\n\n/**\n * Select performs a filter and a mapper inside of a reduce,\n * only iterating the list one time.\n *\n * @example\n * select([1, 2, 3, 4], x => x*x, x > 2) == [9, 16]\n */\nexport const select = <T, K>(\n array: readonly T[],\n mapper: (item: T, index: number) => K,\n condition: (item: T, index: number) => boolean\n) => {\n if (!array) return []\n return array.reduce((acc, item, index) => {\n if (!condition(item, index)) return acc\n acc.push(mapper(item, index))\n return acc\n }, [] as K[])\n}\n\n/**\n * Max gets the greatest value from a list\n *\n * @example\n * max([ 2, 3, 5]) == 5\n * max([{ num: 1 }, { num: 2 }], x => x.num) == { num: 2 }\n */\nexport function max(array: readonly [number, ...number[]]): number\nexport function max(array: readonly number[]): number | null\nexport function max<T>(\n array: readonly T[],\n getter: (item: T) => number\n): T | null\nexport function max<T>(\n array: readonly T[],\n getter?: (item: T) => number\n): T | null {\n const get = getter ?? ((v: any) => v)\n return boil(array, (a, b) => (get(a) > get(b) ? a : b))\n}\n\n/**\n * Min gets the smallest value from a list\n *\n * @example\n * min([1, 2, 3, 4]) == 1\n * min([{ num: 1 }, { num: 2 }], x => x.num) == { num: 1 }\n */\nexport function min(array: readonly [number, ...number[]]): number\nexport function min(array: readonly number[]): number | null\nexport function min<T>(\n array: readonly T[],\n getter: (item: T) => number\n): T | null\nexport function min<T>(\n array: readonly T[],\n getter?: (item: T) => number\n): T | null {\n const get = getter ?? ((v: any) => v)\n return boil(array, (a, b) => (get(a) < get(b) ? a : b))\n}\n\n/**\n * Splits a single list into many lists of the desired size. If\n * given a list of 10 items and a size of 2, it will return 5\n * lists with 2 items each\n */\nexport const cluster = <T>(list: readonly T[], size: number = 2): T[][] => {\n const clusterCount = Math.ceil(list.length / size)\n return new Array(clusterCount).fill(null).map((_c: null, i: number) => {\n return list.slice(i * size, i * size + size)\n })\n}\n\n/**\n * Given a list of items returns a new list with only\n * unique items. Accepts an optional identity function\n * to convert each item in the list to a comparable identity\n * value\n */\nexport const unique = <T, K extends string | number | symbol>(\n array: readonly T[],\n toKey?: (item: T) => K\n): T[] => {\n const valueMap = array.reduce((acc, item) => {\n const key = toKey ? toKey(item) : (item as any as string | number | symbol)\n if (acc[key]) return acc\n acc[key] = item\n return acc\n }, {} as Record<string | number | symbol, T>)\n return Object.values(valueMap)\n}\n\n/**\n * Creates a generator that will produce an iteration through\n * the range of number as requested.\n *\n * @example\n * range(3) // yields 0, 1, 2, 3\n * range(0, 3) // yields 0, 1, 2, 3\n * range(0, 3, 'y') // yields y, y, y, y\n * range(0, 3, () => 'y') // yields y, y, y, y\n * range(0, 3, i => i) // yields 0, 1, 2, 3\n * range(0, 3, i => `y${i}`) // yields y0, y1, y2, y3\n * range(0, 3, obj) // yields obj, obj, obj, obj\n * range(0, 6, i => i, 2) // yields 0, 2, 4, 6\n */\nexport function* range<T = number>(\n startOrLength: number,\n end?: number,\n valueOrMapper: T | ((i: number) => T) = i => i as T,\n step: number = 1\n): Generator<T> {\n const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper\n const start = end ? startOrLength : 0\n const final = end ?? startOrLength\n for (let i = start; i <= final; i += step) {\n yield mapper(i)\n if (i + step > final) break\n }\n}\n\n/**\n * Creates a list of given start, end, value, and\n * step parameters.\n *\n * @example\n * list(3) // 0, 1, 2, 3\n * list(0, 3) // 0, 1, 2, 3\n * list(0, 3, 'y') // y, y, y, y\n * list(0, 3, () => 'y') // y, y, y, y\n * list(0, 3, i => i) // 0, 1, 2, 3\n * list(0, 3, i => `y${i}`) // y0, y1, y2, y3\n * list(0, 3, obj) // obj, obj, obj, obj\n * list(0, 6, i => i, 2) // 0, 2, 4, 6\n */\nexport const list = <T = number>(\n startOrLength: number,\n end?: number,\n valueOrMapper?: T | ((i: number) => T),\n step?: number\n): T[] => {\n return Array.from(range(startOrLength, end, valueOrMapper, step))\n}\n\n/**\n * Given an array of arrays, returns a single\n * dimentional array with all items in it.\n */\nexport const flat = <T>(lists: readonly T[][]): T[] => {\n return lists.reduce((acc, list) => {\n acc.push(...list)\n return acc\n }, [])\n}\n\n/**\n * Given two arrays, returns true if any\n * elements intersect\n */\nexport const intersects = <T, K extends string | number | symbol>(\n listA: readonly T[],\n listB: readonly T[],\n identity?: (t: T) => K\n): boolean => {\n if (!listA || !listB) return false\n const ident = identity ?? ((x: T) => x as unknown as K)\n const dictB = listB.reduce((acc, item) => {\n acc[ident(item)] = true\n return acc\n }, {} as Record<string | number | symbol, boolean>)\n return listA.some(value => dictB[ident(value)])\n}\n\n/**\n * Split an array into two array based on\n * a true/false condition function\n */\nexport const fork = <T>(\n list: readonly T[],\n condition: (item: T) => boolean\n): [T[], T[]] => {\n if (!list) return [[], []]\n return list.reduce(\n (acc, item) => {\n const [a, b] = acc\n if (condition(item)) {\n return [[...a, item], b]\n } else {\n return [a, [...b, item]]\n }\n },\n [[], []] as [T[], T[]]\n )\n}\n\n/**\n * Given two lists of the same type, iterate the first list\n * and replace items matched by the matcher func in the\n * first place.\n */\nexport const merge = <T>(\n root: readonly T[],\n others: readonly T[],\n matcher: (item: T) => any\n) => {\n if (!others && !root) return []\n if (!others) return root\n if (!root) return []\n if (!matcher) return root\n return root.reduce((acc, r) => {\n const matched = others.find(o => matcher(r) === matcher(o))\n if (matched) acc.push(matched)\n else acc.push(r)\n return acc\n }, [] as T[])\n}\n\n/**\n * Replace an item in an array by a match function condition. If\n * no items match the function condition, appends the new item to\n * the end of the list.\n */\nexport const replaceOrAppend = <T>(\n list: readonly T[],\n newItem: T,\n match: (a: T, idx: number) => boolean\n) => {\n if (!list && !newItem) return []\n if (!newItem) return [...list]\n if (!list) return [newItem]\n for (let idx = 0; idx < list.length; idx++) {\n const item = list[idx]\n if (match(item, idx)) {\n return [\n ...list.slice(0, idx),\n newItem,\n ...list.slice(idx + 1, list.length)\n ]\n }\n }\n return [...list, newItem]\n}\n\n/**\n * If the item matching the condition already exists\n * in the list it will be removed. If it does not it\n * will be added.\n */\nexport const toggle = <T>(\n list: readonly T[],\n item: T,\n /**\n * Converts an item of type T item into a value that\n * can be checked for equality\n */\n toKey?: null | ((item: T, idx: number) => number | string | symbol),\n options?: {\n strategy?: 'prepend' | 'append'\n }\n) => {\n if (!list && !item) return []\n if (!list) return [item]\n if (!item) return [...list]\n const matcher = toKey\n ? (x: T, idx: number) => toKey(x, idx) === toKey(item, idx)\n : (x: T) => x === item\n const existing = list.find(matcher)\n if (existing) return list.filter((x, idx) => !matcher(x, idx))\n const strategy = options?.strategy ?? 'append'\n if (strategy === 'append') return [...list, item]\n return [item, ...list]\n}\n\ntype Falsy = null | undefined | false | '' | 0 | 0n\n\n/**\n * Given a list returns a new list with\n * only truthy values\n */\nexport const sift = <T>(list: readonly (T | Falsy)[]): T[] => {\n return (list?.filter(x => !!x) as T[]) ?? []\n}\n\n/**\n * Like a reduce but does not require an array.\n * Only need a number and will iterate the function\n * as many times as specified.\n *\n * NOTE: This is NOT zero indexed. If you pass count=5\n * you will get 1, 2, 3, 4, 5 iteration in the callback\n * function\n */\nexport const iterate = <T>(\n count: number,\n func: (currentValue: T, iteration: number) => T,\n initValue: T\n) => {\n let value = initValue\n for (let i = 1; i <= count; i++) {\n value = func(value, i)\n }\n return value\n}\n\n/**\n * Returns all items from the first list that\n * do not exist in the second list.\n */\nexport const diff = <T>(\n root: readonly T[],\n other: readonly T[],\n identity: (item: T) => string | number | symbol = (t: T) =>\n t as unknown as string | number | symbol\n): T[] => {\n if (!root?.length && !other?.length) return []\n if (root?.length === undefined) return [...other]\n if (!other?.length) return [...root]\n const bKeys = other.reduce((acc, item) => {\n acc[identity(item)] = true\n return acc\n }, {} as Record<string | number | symbol, boolean>)\n return root.filter(a => !bKeys[identity(a)])\n}\n\n/**\n * Shift array items by n steps\n * If n > 0 items will shift n steps to the right\n * If n < 0 items will shift n steps to the left\n */\nexport function shift<T>(arr: Array<T>, n: number) {\n if (arr.length === 0) return arr\n\n const shiftNumber = n % arr.length\n\n if (shiftNumber === 0) return arr\n\n return [...arr.slice(-shiftNumber, arr.length), ...arr.slice(0, -shiftNumber)]\n}\n"],"names":["list"],"mappings":"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"}