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.
- package/LICENSE.md +2 -1
- package/README.md +124 -17
- package/dist/radashi.cjs +1589 -0
- package/dist/radashi.d.cts +1212 -0
- package/dist/radashi.d.ts +1212 -0
- package/dist/radashi.js +1452 -0
- package/package.json +51 -40
- package/dist/cjs/array.cjs +0 -281
- package/dist/cjs/array.cjs.map +0 -1
- package/dist/cjs/async.cjs +0 -169
- package/dist/cjs/async.cjs.map +0 -1
- package/dist/cjs/curry.cjs +0 -113
- package/dist/cjs/curry.cjs.map +0 -1
- package/dist/cjs/index.cjs +0 -109
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/number.cjs +0 -34
- package/dist/cjs/number.cjs.map +0 -1
- package/dist/cjs/object.cjs +0 -204
- package/dist/cjs/object.cjs.map +0 -1
- package/dist/cjs/random.cjs +0 -34
- package/dist/cjs/random.cjs.map +0 -1
- package/dist/cjs/series.cjs +0 -62
- package/dist/cjs/series.cjs.map +0 -1
- package/dist/cjs/string.cjs +0 -72
- package/dist/cjs/string.cjs.map +0 -1
- package/dist/cjs/typed.cjs +0 -104
- package/dist/cjs/typed.cjs.map +0 -1
- package/dist/esm/array.mjs +0 -251
- package/dist/esm/array.mjs.map +0 -1
- package/dist/esm/async.mjs +0 -158
- package/dist/esm/async.mjs.map +0 -1
- package/dist/esm/curry.mjs +0 -103
- package/dist/esm/curry.mjs.map +0 -1
- package/dist/esm/index.mjs +0 -10
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/number.mjs +0 -30
- package/dist/esm/number.mjs.map +0 -1
- package/dist/esm/object.mjs +0 -186
- package/dist/esm/object.mjs.map +0 -1
- package/dist/esm/random.mjs +0 -29
- package/dist/esm/random.mjs.map +0 -1
- package/dist/esm/series.mjs +0 -60
- package/dist/esm/series.mjs.map +0 -1
- package/dist/esm/string.mjs +0 -63
- package/dist/esm/string.mjs.map +0 -1
- package/dist/esm/typed.mjs +0 -90
- package/dist/esm/typed.mjs.map +0 -1
- package/dist/index.d.ts +0 -682
package/dist/esm/async.mjs
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { list, fork, sort, range } from './array.mjs';
|
|
2
|
-
import { isArray, isPromise } from './typed.mjs';
|
|
3
|
-
|
|
4
|
-
const reduce = async (array, asyncReducer, initValue) => {
|
|
5
|
-
const initProvided = initValue !== void 0;
|
|
6
|
-
if (!initProvided && array?.length < 1) {
|
|
7
|
-
throw new Error("Cannot reduce empty array with no init value");
|
|
8
|
-
}
|
|
9
|
-
const iter = initProvided ? array : array.slice(1);
|
|
10
|
-
let value = initProvided ? initValue : array[0];
|
|
11
|
-
for (const [i, item] of iter.entries()) {
|
|
12
|
-
value = await asyncReducer(value, item, i);
|
|
13
|
-
}
|
|
14
|
-
return value;
|
|
15
|
-
};
|
|
16
|
-
const map = async (array, asyncMapFunc) => {
|
|
17
|
-
if (!array)
|
|
18
|
-
return [];
|
|
19
|
-
let result = [];
|
|
20
|
-
let index = 0;
|
|
21
|
-
for (const value of array) {
|
|
22
|
-
const newValue = await asyncMapFunc(value, index++);
|
|
23
|
-
result.push(newValue);
|
|
24
|
-
}
|
|
25
|
-
return result;
|
|
26
|
-
};
|
|
27
|
-
const defer = async (func) => {
|
|
28
|
-
const callbacks = [];
|
|
29
|
-
const register = (fn, options) => callbacks.push({
|
|
30
|
-
fn,
|
|
31
|
-
rethrow: options?.rethrow ?? false
|
|
32
|
-
});
|
|
33
|
-
const [err, response] = await tryit(func)(register);
|
|
34
|
-
for (const { fn, rethrow } of callbacks) {
|
|
35
|
-
const [rethrown] = await tryit(fn)(err);
|
|
36
|
-
if (rethrown && rethrow)
|
|
37
|
-
throw rethrown;
|
|
38
|
-
}
|
|
39
|
-
if (err)
|
|
40
|
-
throw err;
|
|
41
|
-
return response;
|
|
42
|
-
};
|
|
43
|
-
class AggregateError extends Error {
|
|
44
|
-
constructor(errors = []) {
|
|
45
|
-
super();
|
|
46
|
-
const name = errors.find((e) => e.name)?.name ?? "";
|
|
47
|
-
this.name = `AggregateError(${name}...)`;
|
|
48
|
-
this.message = `AggregateError with ${errors.length} errors`;
|
|
49
|
-
this.stack = errors.find((e) => e.stack)?.stack ?? this.stack;
|
|
50
|
-
this.errors = errors;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const parallel = async (limit, array, func) => {
|
|
54
|
-
const work = array.map((item, index) => ({
|
|
55
|
-
index,
|
|
56
|
-
item
|
|
57
|
-
}));
|
|
58
|
-
const processor = async (res) => {
|
|
59
|
-
const results2 = [];
|
|
60
|
-
while (true) {
|
|
61
|
-
const next = work.pop();
|
|
62
|
-
if (!next)
|
|
63
|
-
return res(results2);
|
|
64
|
-
const [error, result] = await tryit(func)(next.item);
|
|
65
|
-
results2.push({
|
|
66
|
-
error,
|
|
67
|
-
result,
|
|
68
|
-
index: next.index
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
const queues = list(1, limit).map(() => new Promise(processor));
|
|
73
|
-
const itemResults = await Promise.all(queues);
|
|
74
|
-
const [errors, results] = fork(
|
|
75
|
-
sort(itemResults.flat(), (r) => r.index),
|
|
76
|
-
(x) => !!x.error
|
|
77
|
-
);
|
|
78
|
-
if (errors.length > 0) {
|
|
79
|
-
throw new AggregateError(errors.map((error) => error.error));
|
|
80
|
-
}
|
|
81
|
-
return results.map((r) => r.result);
|
|
82
|
-
};
|
|
83
|
-
async function all(promises) {
|
|
84
|
-
const entries = isArray(promises) ? promises.map((p) => [null, p]) : Object.entries(promises);
|
|
85
|
-
const results = await Promise.all(
|
|
86
|
-
entries.map(
|
|
87
|
-
([key, value]) => value.then((result) => ({ result, exc: null, key })).catch((exc) => ({ result: null, exc, key }))
|
|
88
|
-
)
|
|
89
|
-
);
|
|
90
|
-
const exceptions = results.filter((r) => r.exc);
|
|
91
|
-
if (exceptions.length > 0) {
|
|
92
|
-
throw new AggregateError(exceptions.map((e) => e.exc));
|
|
93
|
-
}
|
|
94
|
-
if (isArray(promises)) {
|
|
95
|
-
return results.map((r) => r.result);
|
|
96
|
-
}
|
|
97
|
-
return results.reduce(
|
|
98
|
-
(acc, item) => ({
|
|
99
|
-
...acc,
|
|
100
|
-
[item.key]: item.result
|
|
101
|
-
}),
|
|
102
|
-
{}
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
const retry = async (options, func) => {
|
|
106
|
-
const times = options?.times ?? 3;
|
|
107
|
-
const delay = options?.delay;
|
|
108
|
-
const backoff = options?.backoff ?? null;
|
|
109
|
-
for (const i of range(1, times)) {
|
|
110
|
-
const [err, result] = await tryit(func)((err2) => {
|
|
111
|
-
throw { _exited: err2 };
|
|
112
|
-
});
|
|
113
|
-
if (!err)
|
|
114
|
-
return result;
|
|
115
|
-
if (err._exited)
|
|
116
|
-
throw err._exited;
|
|
117
|
-
if (i === times)
|
|
118
|
-
throw err;
|
|
119
|
-
if (delay)
|
|
120
|
-
await sleep(delay);
|
|
121
|
-
if (backoff)
|
|
122
|
-
await sleep(backoff(i));
|
|
123
|
-
}
|
|
124
|
-
return void 0;
|
|
125
|
-
};
|
|
126
|
-
const sleep = (milliseconds) => {
|
|
127
|
-
return new Promise((res) => setTimeout(res, milliseconds));
|
|
128
|
-
};
|
|
129
|
-
const tryit = (func) => {
|
|
130
|
-
return (...args) => {
|
|
131
|
-
try {
|
|
132
|
-
const result = func(...args);
|
|
133
|
-
if (isPromise(result)) {
|
|
134
|
-
return result.then((value) => [void 0, value]).catch((err) => [err, void 0]);
|
|
135
|
-
}
|
|
136
|
-
return [void 0, result];
|
|
137
|
-
} catch (err) {
|
|
138
|
-
return [err, void 0];
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
};
|
|
142
|
-
const guard = (func, shouldGuard) => {
|
|
143
|
-
const _guard = (err) => {
|
|
144
|
-
if (shouldGuard && !shouldGuard(err))
|
|
145
|
-
throw err;
|
|
146
|
-
return void 0;
|
|
147
|
-
};
|
|
148
|
-
const isPromise2 = (result) => result instanceof Promise;
|
|
149
|
-
try {
|
|
150
|
-
const result = func();
|
|
151
|
-
return isPromise2(result) ? result.catch(_guard) : result;
|
|
152
|
-
} catch (err) {
|
|
153
|
-
return _guard(err);
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
export { AggregateError, all, defer, guard, map, parallel, reduce, retry, sleep, tryit };
|
|
158
|
-
//# sourceMappingURL=async.mjs.map
|
package/dist/esm/async.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"async.mjs","sources":["../../src/async.ts"],"sourcesContent":["import { fork, list, range, sort } from './array'\nimport { isArray, isPromise } from './typed'\n\ndeclare const setTimeout: (fn: () => void, ms: number) => unknown\n\n/**\n * An async reduce function. Works like the\n * built-in Array.reduce function but handles\n * an async reducer function\n */\nexport const reduce = async <T, K>(\n array: readonly T[],\n asyncReducer: (acc: K, item: T, index: number) => Promise<K>,\n initValue?: K\n): Promise<K> => {\n const initProvided = initValue !== undefined\n if (!initProvided && array?.length < 1) {\n throw new Error('Cannot reduce empty array with no init value')\n }\n const iter = initProvided ? array : array.slice(1)\n let value: any = initProvided ? initValue : array[0]\n for (const [i, item] of iter.entries()) {\n value = await asyncReducer(value, item, i)\n }\n return value\n}\n\n/**\n * An async map function. Works like the\n * built-in Array.map function but handles\n * an async mapper function\n */\nexport const map = async <T, K>(\n array: readonly T[],\n asyncMapFunc: (item: T, index: number) => Promise<K>\n): Promise<K[]> => {\n if (!array) return []\n let result = []\n let index = 0\n for (const value of array) {\n const newValue = await asyncMapFunc(value, index++)\n result.push(newValue)\n }\n return result\n}\n\n/**\n * Useful when for script like things where cleanup\n * should be done on fail or sucess no matter.\n *\n * You can call defer many times to register many\n * defered functions that will all be called when\n * the function exits in any state.\n */\nexport const defer = async <TResponse>(\n func: (\n register: (\n fn: (error?: any) => any,\n options?: { rethrow?: boolean }\n ) => void\n ) => Promise<TResponse>\n): Promise<TResponse> => {\n const callbacks: {\n fn: (error?: any) => any\n rethrow: boolean\n }[] = []\n const register = (\n fn: (error?: any) => any,\n options?: { rethrow?: boolean }\n ) =>\n callbacks.push({\n fn,\n rethrow: options?.rethrow ?? false\n })\n const [err, response] = await tryit(func)(register)\n for (const { fn, rethrow } of callbacks) {\n const [rethrown] = await tryit(fn)(err)\n if (rethrown && rethrow) throw rethrown\n }\n if (err) throw err\n return response\n}\n\ntype WorkItemResult<K> = {\n index: number\n result: K\n error: any\n}\n\n/**\n * Support for the built-in AggregateError\n * is still new. Node < 15 doesn't have it\n * so patching here.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError#browser_compatibility\n */\nexport class AggregateError extends Error {\n errors: Error[]\n constructor(errors: Error[] = []) {\n super()\n const name = errors.find(e => e.name)?.name ?? ''\n this.name = `AggregateError(${name}...)`\n this.message = `AggregateError with ${errors.length} errors`\n this.stack = errors.find(e => e.stack)?.stack ?? this.stack\n this.errors = errors\n }\n}\n\n/**\n * Executes many async functions in parallel. Returns the\n * results from all functions as an array. After all functions\n * have resolved, if any errors were thrown, they are rethrown\n * in an instance of AggregateError\n */\nexport const parallel = async <T, K>(\n limit: number,\n array: readonly T[],\n func: (item: T) => Promise<K>\n): Promise<K[]> => {\n const work = array.map((item, index) => ({\n index,\n item\n }))\n // Process array items\n const processor = async (res: (value: WorkItemResult<K>[]) => void) => {\n const results: WorkItemResult<K>[] = []\n while (true) {\n const next = work.pop()\n if (!next) return res(results)\n const [error, result] = await tryit(func)(next.item)\n results.push({\n error,\n result: result as K,\n index: next.index\n })\n }\n }\n // Create queues\n const queues = list(1, limit).map(() => new Promise(processor))\n // Wait for all queues to complete\n const itemResults = (await Promise.all(queues)) as WorkItemResult<K>[][]\n const [errors, results] = fork(\n sort(itemResults.flat(), r => r.index),\n x => !!x.error\n )\n if (errors.length > 0) {\n throw new AggregateError(errors.map(error => error.error))\n }\n return results.map(r => r.result)\n}\n\ntype PromiseValues<T extends Promise<any>[]> = {\n [K in keyof T]: T[K] extends Promise<infer U> ? U : never\n}\n\n/**\n * Functionally similar to Promise.all or Promise.allSettled. If any\n * errors are thrown, all errors are gathered and thrown in an\n * AggregateError.\n *\n * @example\n * const [user] = await all([\n * api.users.create(...),\n * s3.buckets.create(...),\n * slack.customerSuccessChannel.sendMessage(...)\n * ])\n */\nexport async function all<T extends [Promise<any>, ...Promise<any>[]]>(\n promises: T\n): Promise<PromiseValues<T>>\nexport async function all<T extends Promise<any>[]>(\n promises: T\n): Promise<PromiseValues<T>>\n/**\n * Functionally similar to Promise.all or Promise.allSettled. If any\n * errors are thrown, all errors are gathered and thrown in an\n * AggregateError.\n *\n * @example\n * const { user } = await all({\n * user: api.users.create(...),\n * bucket: s3.buckets.create(...),\n * message: slack.customerSuccessChannel.sendMessage(...)\n * })\n */\nexport async function all<T extends Record<string, Promise<any>>>(\n promises: T\n): Promise<{ [K in keyof T]: Awaited<T[K]> }>\nexport async function all<\n T extends Record<string, Promise<any>> | Promise<any>[]\n>(promises: T) {\n const entries = isArray(promises)\n ? promises.map(p => [null, p] as [null, Promise<any>])\n : Object.entries(promises)\n\n const results = await Promise.all(\n entries.map(([key, value]) =>\n value\n .then(result => ({ result, exc: null, key }))\n .catch(exc => ({ result: null, exc, key }))\n )\n )\n\n const exceptions = results.filter(r => r.exc)\n if (exceptions.length > 0) {\n throw new AggregateError(exceptions.map(e => e.exc))\n }\n\n if (isArray(promises)) {\n return results.map(r => r.result) as T extends Promise<any>[]\n ? PromiseValues<T>\n : unknown\n }\n\n return results.reduce(\n (acc, item) => ({\n ...acc,\n [item.key!]: item.result\n }),\n {} as { [K in keyof T]: Awaited<T[K]> }\n )\n}\n\n/**\n * Retries the given function the specified number\n * of times.\n */\nexport const retry = async <TResponse>(\n options: {\n times?: number\n delay?: number | null\n backoff?: (count: number) => number\n },\n func: (exit: (err: any) => void) => Promise<TResponse>\n): Promise<TResponse> => {\n const times = options?.times ?? 3\n const delay = options?.delay\n const backoff = options?.backoff ?? null\n for (const i of range(1, times)) {\n const [err, result] = (await tryit(func)((err: any) => {\n throw { _exited: err }\n })) as [any, TResponse]\n if (!err) return result\n if (err._exited) throw err._exited\n if (i === times) throw err\n if (delay) await sleep(delay)\n if (backoff) await sleep(backoff(i))\n }\n // Logically, we should never reach this\n // code path. It makes the function meet\n // strict mode requirements.\n /* istanbul ignore next */\n return undefined as unknown as TResponse\n}\n\n/**\n * Async wait\n */\nexport const sleep = (milliseconds: number) => {\n return new Promise<void>(res => setTimeout(res, milliseconds))\n}\n\n/**\n * A helper to try an async function without forking\n * the control flow. Returns an error first callback _like_\n * array response as [Error, result]\n */\nexport const tryit = <Args extends any[], Return>(\n func: (...args: Args) => Return\n) => {\n return (\n ...args: Args\n ): Return extends Promise<any>\n ? Promise<[Error, undefined] | [undefined, Awaited<Return>]>\n : [Error, undefined] | [undefined, Return] => {\n try {\n const result = func(...args)\n if (isPromise(result)) {\n return result\n .then(value => [undefined, value])\n .catch(err => [err, undefined]) as Return extends Promise<any>\n ? Promise<[Error, undefined] | [undefined, Awaited<Return>]>\n : [Error, undefined] | [undefined, Return]\n }\n return [undefined, result] as Return extends Promise<any>\n ? Promise<[Error, undefined] | [undefined, Awaited<Return>]>\n : [Error, undefined] | [undefined, Return]\n } catch (err) {\n return [err as any, undefined] as Return extends Promise<any>\n ? Promise<[Error, undefined] | [undefined, Awaited<Return>]>\n : [Error, undefined] | [undefined, Return]\n }\n }\n}\n\n/**\n * A helper to try an async function that returns undefined\n * if it fails.\n *\n * e.g. const result = await guard(fetchUsers)() ?? [];\n */\nexport const guard = <TFunction extends () => any>(\n func: TFunction,\n shouldGuard?: (err: any) => boolean\n): ReturnType<TFunction> extends Promise<any>\n ? Promise<Awaited<ReturnType<TFunction>> | undefined>\n : ReturnType<TFunction> | undefined => {\n const _guard = (err: any) => {\n if (shouldGuard && !shouldGuard(err)) throw err\n return undefined as any\n }\n const isPromise = (result: any): result is Promise<any> =>\n result instanceof Promise\n try {\n const result = func()\n return isPromise(result) ? result.catch(_guard) : result\n } catch (err) {\n return _guard(err)\n }\n}\n"],"names":["results","err","isPromise"],"mappings":";;;AAUO,MAAM,MAAS,GAAA,OACpB,KACA,EAAA,YAAA,EACA,SACe,KAAA;AACf,EAAA,MAAM,eAAe,SAAc,KAAA,KAAA,CAAA,CAAA;AACnC,EAAA,IAAI,CAAC,YAAA,IAAgB,KAAO,EAAA,MAAA,GAAS,CAAG,EAAA;AACtC,IAAM,MAAA,IAAI,MAAM,8CAA8C,CAAA,CAAA;AAAA,GAChE;AACA,EAAA,MAAM,IAAO,GAAA,YAAA,GAAe,KAAQ,GAAA,KAAA,CAAM,MAAM,CAAC,CAAA,CAAA;AACjD,EAAA,IAAI,KAAa,GAAA,YAAA,GAAe,SAAY,GAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AACnD,EAAA,KAAA,MAAW,CAAC,CAAG,EAAA,IAAI,CAAK,IAAA,IAAA,CAAK,SAAW,EAAA;AACtC,IAAA,KAAA,GAAQ,MAAM,YAAA,CAAa,KAAO,EAAA,IAAA,EAAM,CAAC,CAAA,CAAA;AAAA,GAC3C;AACA,EAAO,OAAA,KAAA,CAAA;AACT,EAAA;AAOa,MAAA,GAAA,GAAM,OACjB,KAAA,EACA,YACiB,KAAA;AACjB,EAAA,IAAI,CAAC,KAAA;AAAO,IAAA,OAAO,EAAC,CAAA;AACpB,EAAA,IAAI,SAAS,EAAC,CAAA;AACd,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,EAAA,KAAA,MAAW,SAAS,KAAO,EAAA;AACzB,IAAA,MAAM,QAAW,GAAA,MAAM,YAAa,CAAA,KAAA,EAAO,KAAO,EAAA,CAAA,CAAA;AAClD,IAAA,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAA;AAAA,GACtB;AACA,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAUa,MAAA,KAAA,GAAQ,OACnB,IAMuB,KAAA;AACvB,EAAA,MAAM,YAGA,EAAC,CAAA;AACP,EAAA,MAAM,QAAW,GAAA,CACf,EACA,EAAA,OAAA,KAEA,UAAU,IAAK,CAAA;AAAA,IACb,EAAA;AAAA,IACA,OAAA,EAAS,SAAS,OAAW,IAAA,KAAA;AAAA,GAC9B,CAAA,CAAA;AACH,EAAM,MAAA,CAAC,KAAK,QAAQ,CAAA,GAAI,MAAM,KAAM,CAAA,IAAI,EAAE,QAAQ,CAAA,CAAA;AAClD,EAAA,KAAA,MAAW,EAAE,EAAA,EAAI,OAAQ,EAAA,IAAK,SAAW,EAAA;AACvC,IAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,MAAM,KAAM,CAAA,EAAE,EAAE,GAAG,CAAA,CAAA;AACtC,IAAA,IAAI,QAAY,IAAA,OAAA;AAAS,MAAM,MAAA,QAAA,CAAA;AAAA,GACjC;AACA,EAAI,IAAA,GAAA;AAAK,IAAM,MAAA,GAAA,CAAA;AACf,EAAO,OAAA,QAAA,CAAA;AACT,EAAA;AAcO,MAAM,uBAAuB,KAAM,CAAA;AAAA,EAExC,WAAA,CAAY,MAAkB,GAAA,EAAI,EAAA;AAChC,IAAM,KAAA,EAAA,CAAA;AACN,IAAA,MAAM,OAAO,MAAO,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,IAAI,GAAG,IAAQ,IAAA,EAAA,CAAA;AAC/C,IAAA,IAAA,CAAK,OAAO,CAAkB,eAAA,EAAA,IAAA,CAAA,IAAA,CAAA,CAAA;AAC9B,IAAK,IAAA,CAAA,OAAA,GAAU,uBAAuB,MAAO,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA;AAC7C,IAAK,IAAA,CAAA,KAAA,GAAQ,OAAO,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,EAAG,SAAS,IAAK,CAAA,KAAA,CAAA;AACtD,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAA;AAAA,GAChB;AACF,CAAA;AAQO,MAAM,QAAW,GAAA,OACtB,KACA,EAAA,KAAA,EACA,IACiB,KAAA;AACjB,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,KAAW,MAAA;AAAA,IACvC,KAAA;AAAA,IACA,IAAA;AAAA,GACA,CAAA,CAAA,CAAA;AAEF,EAAM,MAAA,SAAA,GAAY,OAAO,GAA8C,KAAA;AACrE,IAAA,MAAMA,WAA+B,EAAC,CAAA;AACtC,IAAA,OAAO,IAAM,EAAA;AACX,MAAM,MAAA,IAAA,GAAO,KAAK,GAAI,EAAA,CAAA;AACtB,MAAA,IAAI,CAAC,IAAA;AAAM,QAAA,OAAO,IAAIA,QAAO,CAAA,CAAA;AAC7B,MAAM,MAAA,CAAC,OAAO,MAAM,CAAA,GAAI,MAAM,KAAM,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AACnD,MAAAA,SAAQ,IAAK,CAAA;AAAA,QACX,KAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAO,IAAK,CAAA,KAAA;AAAA,OACb,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,MAAA,GAAS,IAAK,CAAA,CAAA,EAAG,KAAK,CAAA,CAAE,IAAI,MAAM,IAAI,OAAQ,CAAA,SAAS,CAAC,CAAA,CAAA;AAE9D,EAAA,MAAM,WAAe,GAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAC7C,EAAM,MAAA,CAAC,MAAQ,EAAA,OAAO,CAAI,GAAA,IAAA;AAAA,IACxB,KAAK,WAAY,CAAA,IAAA,EAAQ,EAAA,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA;AAAA,IACrC,CAAA,CAAA,KAAK,CAAC,CAAC,CAAE,CAAA,KAAA;AAAA,GACX,CAAA;AACA,EAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,IAAA,MAAM,IAAI,cAAe,CAAA,MAAA,CAAO,IAAI,CAAS,KAAA,KAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3D;AACA,EAAA,OAAO,OAAQ,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,MAAM,CAAA,CAAA;AAClC,EAAA;AAuCA,eAAsB,IAEpB,QAAa,EAAA;AACb,EAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,QAAQ,CAAA,GAC5B,SAAS,GAAI,CAAA,CAAA,CAAA,KAAK,CAAC,IAAA,EAAM,CAAC,CAAyB,CACnD,GAAA,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAA;AAE3B,EAAM,MAAA,OAAA,GAAU,MAAM,OAAQ,CAAA,GAAA;AAAA,IAC5B,OAAQ,CAAA,GAAA;AAAA,MAAI,CAAC,CAAC,GAAK,EAAA,KAAK,MACtB,KACG,CAAA,IAAA,CAAK,CAAW,MAAA,MAAA,EAAE,MAAQ,EAAA,GAAA,EAAK,MAAM,GAAI,EAAA,CAAE,EAC3C,KAAM,CAAA,CAAA,GAAA,MAAQ,EAAE,MAAQ,EAAA,IAAA,EAAM,GAAK,EAAA,GAAA,EAAM,CAAA,CAAA;AAAA,KAC9C;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,GAAG,CAAA,CAAA;AAC5C,EAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,IAAA,MAAM,IAAI,cAAe,CAAA,UAAA,CAAW,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,GAAG,CAAC,CAAA,CAAA;AAAA,GACrD;AAEA,EAAI,IAAA,OAAA,CAAQ,QAAQ,CAAG,EAAA;AACrB,IAAA,OAAO,OAAQ,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,MAAM,CAAA,CAAA;AAAA,GAGlC;AAEA,EAAA,OAAO,OAAQ,CAAA,MAAA;AAAA,IACb,CAAC,KAAK,IAAU,MAAA;AAAA,MACd,GAAG,GAAA;AAAA,MACH,CAAC,IAAA,CAAK,GAAI,GAAG,IAAK,CAAA,MAAA;AAAA,KACpB,CAAA;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AACF,CAAA;AAMa,MAAA,KAAA,GAAQ,OACnB,OAAA,EAKA,IACuB,KAAA;AACvB,EAAM,MAAA,KAAA,GAAQ,SAAS,KAAS,IAAA,CAAA,CAAA;AAChC,EAAA,MAAM,QAAQ,OAAS,EAAA,KAAA,CAAA;AACvB,EAAM,MAAA,OAAA,GAAU,SAAS,OAAW,IAAA,IAAA,CAAA;AACpC,EAAA,KAAA,MAAW,CAAK,IAAA,KAAA,CAAM,CAAG,EAAA,KAAK,CAAG,EAAA;AAC/B,IAAM,MAAA,CAAC,KAAK,MAAM,CAAA,GAAK,MAAM,KAAM,CAAA,IAAI,CAAE,CAAA,CAACC,IAAa,KAAA;AACrD,MAAM,MAAA,EAAE,SAASA,IAAI,EAAA,CAAA;AAAA,KACtB,CAAA,CAAA;AACD,IAAA,IAAI,CAAC,GAAA;AAAK,MAAO,OAAA,MAAA,CAAA;AACjB,IAAA,IAAI,GAAI,CAAA,OAAA;AAAS,MAAA,MAAM,GAAI,CAAA,OAAA,CAAA;AAC3B,IAAA,IAAI,CAAM,KAAA,KAAA;AAAO,MAAM,MAAA,GAAA,CAAA;AACvB,IAAI,IAAA,KAAA;AAAO,MAAA,MAAM,MAAM,KAAK,CAAA,CAAA;AAC5B,IAAI,IAAA,OAAA;AAAS,MAAM,MAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GACrC;AAKA,EAAO,OAAA,KAAA,CAAA,CAAA;AACT,EAAA;AAKa,MAAA,KAAA,GAAQ,CAAC,YAAyB,KAAA;AAC7C,EAAA,OAAO,IAAI,OAAc,CAAA,CAAA,GAAA,KAAO,UAAW,CAAA,GAAA,EAAK,YAAY,CAAC,CAAA,CAAA;AAC/D,EAAA;AAOa,MAAA,KAAA,GAAQ,CACnB,IACG,KAAA;AACH,EAAA,OAAO,IACF,IAG2C,KAAA;AAC9C,IAAI,IAAA;AACF,MAAM,MAAA,MAAA,GAAS,IAAK,CAAA,GAAG,IAAI,CAAA,CAAA;AAC3B,MAAI,IAAA,SAAA,CAAU,MAAM,CAAG,EAAA;AACrB,QAAA,OAAO,MACJ,CAAA,IAAA,CAAK,CAAS,KAAA,KAAA,CAAC,KAAW,CAAA,EAAA,KAAK,CAAC,CAAA,CAChC,KAAM,CAAA,CAAA,GAAA,KAAO,CAAC,GAAA,EAAK,MAAS,CAAC,CAAA,CAAA;AAAA,OAGlC;AACA,MAAO,OAAA,CAAC,QAAW,MAAM,CAAA,CAAA;AAAA,aAGlB,GAAP,EAAA;AACA,MAAO,OAAA,CAAC,KAAY,KAAS,CAAA,CAAA,CAAA;AAAA,KAG/B;AAAA,GACF,CAAA;AACF,EAAA;AAQa,MAAA,KAAA,GAAQ,CACnB,IAAA,EACA,WAGuC,KAAA;AACvC,EAAM,MAAA,MAAA,GAAS,CAAC,GAAa,KAAA;AAC3B,IAAI,IAAA,WAAA,IAAe,CAAC,WAAA,CAAY,GAAG,CAAA;AAAG,MAAM,MAAA,GAAA,CAAA;AAC5C,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT,CAAA;AACA,EAAMC,MAAAA,UAAAA,GAAY,CAAC,MAAA,KACjB,MAAkB,YAAA,OAAA,CAAA;AACpB,EAAI,IAAA;AACF,IAAA,MAAM,SAAS,IAAK,EAAA,CAAA;AACpB,IAAA,OAAOA,WAAU,MAAM,CAAA,GAAI,MAAO,CAAA,KAAA,CAAM,MAAM,CAAI,GAAA,MAAA,CAAA;AAAA,WAC3C,GAAP,EAAA;AACA,IAAA,OAAO,OAAO,GAAG,CAAA,CAAA;AAAA,GACnB;AACF;;;;"}
|
package/dist/esm/curry.mjs
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
function chain(...funcs) {
|
|
2
|
-
return (...args) => {
|
|
3
|
-
return funcs.slice(1).reduce((acc, fn) => fn(acc), funcs[0](...args));
|
|
4
|
-
};
|
|
5
|
-
}
|
|
6
|
-
function compose(...funcs) {
|
|
7
|
-
return funcs.reverse().reduce((acc, fn) => fn(acc));
|
|
8
|
-
}
|
|
9
|
-
const partial = (fn, ...args) => {
|
|
10
|
-
return (...rest) => fn(...[...args, ...rest]);
|
|
11
|
-
};
|
|
12
|
-
const partob = (fn, argobj) => {
|
|
13
|
-
return (restobj) => fn({
|
|
14
|
-
...argobj,
|
|
15
|
-
...restobj
|
|
16
|
-
});
|
|
17
|
-
};
|
|
18
|
-
const proxied = (handler) => {
|
|
19
|
-
return new Proxy(
|
|
20
|
-
{},
|
|
21
|
-
{
|
|
22
|
-
get: (target, propertyName) => handler(propertyName)
|
|
23
|
-
}
|
|
24
|
-
);
|
|
25
|
-
};
|
|
26
|
-
const memoize = (cache, func, keyFunc, ttl) => {
|
|
27
|
-
return function callWithMemo(...args) {
|
|
28
|
-
const key = keyFunc ? keyFunc(...args) : JSON.stringify({ args });
|
|
29
|
-
const existing = cache[key];
|
|
30
|
-
if (existing !== void 0) {
|
|
31
|
-
if (!existing.exp)
|
|
32
|
-
return existing.value;
|
|
33
|
-
if (existing.exp > new Date().getTime()) {
|
|
34
|
-
return existing.value;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const result = func(...args);
|
|
38
|
-
cache[key] = {
|
|
39
|
-
exp: ttl ? new Date().getTime() + ttl : null,
|
|
40
|
-
value: result
|
|
41
|
-
};
|
|
42
|
-
return result;
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
const memo = (func, options = {}) => {
|
|
46
|
-
return memoize({}, func, options.key ?? null, options.ttl ?? null);
|
|
47
|
-
};
|
|
48
|
-
const debounce = ({ delay }, func) => {
|
|
49
|
-
let timer = void 0;
|
|
50
|
-
let active = true;
|
|
51
|
-
const debounced = (...args) => {
|
|
52
|
-
if (active) {
|
|
53
|
-
clearTimeout(timer);
|
|
54
|
-
timer = setTimeout(() => {
|
|
55
|
-
active && func(...args);
|
|
56
|
-
timer = void 0;
|
|
57
|
-
}, delay);
|
|
58
|
-
} else {
|
|
59
|
-
func(...args);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
debounced.isPending = () => {
|
|
63
|
-
return timer !== void 0;
|
|
64
|
-
};
|
|
65
|
-
debounced.cancel = () => {
|
|
66
|
-
active = false;
|
|
67
|
-
};
|
|
68
|
-
debounced.flush = (...args) => func(...args);
|
|
69
|
-
return debounced;
|
|
70
|
-
};
|
|
71
|
-
const throttle = ({ interval }, func) => {
|
|
72
|
-
let ready = true;
|
|
73
|
-
let timer = void 0;
|
|
74
|
-
const throttled = (...args) => {
|
|
75
|
-
if (!ready)
|
|
76
|
-
return;
|
|
77
|
-
func(...args);
|
|
78
|
-
ready = false;
|
|
79
|
-
timer = setTimeout(() => {
|
|
80
|
-
ready = true;
|
|
81
|
-
timer = void 0;
|
|
82
|
-
}, interval);
|
|
83
|
-
};
|
|
84
|
-
throttled.isThrottled = () => {
|
|
85
|
-
return timer !== void 0;
|
|
86
|
-
};
|
|
87
|
-
return throttled;
|
|
88
|
-
};
|
|
89
|
-
const callable = (obj, fn) => {
|
|
90
|
-
const FUNC = () => {
|
|
91
|
-
};
|
|
92
|
-
return new Proxy(Object.assign(FUNC, obj), {
|
|
93
|
-
get: (target, key) => target[key],
|
|
94
|
-
set: (target, key, value) => {
|
|
95
|
-
target[key] = value;
|
|
96
|
-
return true;
|
|
97
|
-
},
|
|
98
|
-
apply: (target, self, args) => fn(Object.assign({}, target))(...args)
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
export { callable, chain, compose, debounce, memo, partial, partob, proxied, throttle };
|
|
103
|
-
//# sourceMappingURL=curry.mjs.map
|
package/dist/esm/curry.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"curry.mjs","sources":["../../src/curry.ts"],"sourcesContent":["declare const setTimeout: (fn: () => void, ms: number) => unknown\ndeclare const clearTimeout: (timer: unknown) => void\n\nexport function chain<T1 extends any[], T2, T3>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3\n): (...arg: T1) => T3\nexport function chain<T1 extends any[], T2, T3, T4>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4\n): (...arg: T1) => T4\nexport function chain<T1 extends any[], T2, T3, T4, T5>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4,\n f4: (arg: T3) => T5\n): (...arg: T1) => T5\nexport function chain<T1 extends any[], T2, T3, T4, T5, T6>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4,\n f4: (arg: T3) => T5,\n f5: (arg: T3) => T6\n): (...arg: T1) => T6\nexport function chain<T1 extends any[], T2, T3, T4, T5, T6, T7>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4,\n f4: (arg: T3) => T5,\n f5: (arg: T3) => T6,\n f6: (arg: T3) => T7\n): (...arg: T1) => T7\nexport function chain<T1 extends any[], T2, T3, T4, T5, T6, T7, T8>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4,\n f4: (arg: T3) => T5,\n f5: (arg: T3) => T6,\n f6: (arg: T3) => T7,\n f7: (arg: T3) => T8\n): (...arg: T1) => T8\nexport function chain<T1 extends any[], T2, T3, T4, T5, T6, T7, T8, T9>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4,\n f4: (arg: T3) => T5,\n f5: (arg: T3) => T6,\n f6: (arg: T3) => T7,\n f7: (arg: T3) => T8,\n f8: (arg: T3) => T9\n): (...arg: T1) => T9\nexport function chain<T1 extends any[], T2, T3, T4, T5, T6, T7, T8, T9, T10>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4,\n f4: (arg: T3) => T5,\n f5: (arg: T3) => T6,\n f6: (arg: T3) => T7,\n f7: (arg: T3) => T8,\n f8: (arg: T3) => T9,\n f9: (arg: T3) => T10\n): (...arg: T1) => T10\nexport function chain<\n T1 extends any[],\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11\n>(\n f1: (...arg: T1) => T2,\n f2: (arg: T2) => T3,\n f3: (arg: T3) => T4,\n f4: (arg: T3) => T5,\n f5: (arg: T3) => T6,\n f6: (arg: T3) => T7,\n f7: (arg: T3) => T8,\n f8: (arg: T3) => T9,\n f9: (arg: T3) => T10,\n f10: (arg: T3) => T11\n): (...arg: T1) => T11\nexport function chain(...funcs: ((...args: any[]) => any)[]) {\n return (...args: any[]) => {\n return funcs.slice(1).reduce((acc, fn) => fn(acc), funcs[0](...args))\n }\n}\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => LastResult\n ) => (...args: F1Args) => F1Result,\n last: (...args: F1NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2Result,\n F2NextArgs extends any[],\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => LastResult\n ) => (...args: F1NextArgs) => F2Result,\n last: (...args: F2NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2NextArgs extends any[],\n F2Result,\n F3NextArgs extends any[],\n F3Result,\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => F3Result\n ) => (...args: F1NextArgs) => F2Result,\n f3: (\n next: (...args: F3NextArgs) => LastResult\n ) => (...args: F2NextArgs) => F3Result,\n last: (...args: F3NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2NextArgs extends any[],\n F2Result,\n F3NextArgs extends any[],\n F3Result,\n F4NextArgs extends any[],\n F4Result,\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => F3Result\n ) => (...args: F1NextArgs) => F2Result,\n f3: (\n next: (...args: F3NextArgs) => F4Result\n ) => (...args: F2NextArgs) => F3Result,\n f4: (\n next: (...args: F4NextArgs) => LastResult\n ) => (...args: F3NextArgs) => F4Result,\n last: (...args: F4NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2NextArgs extends any[],\n F2Result,\n F3NextArgs extends any[],\n F3Result,\n F4NextArgs extends any[],\n F4Result,\n F5NextArgs extends any[],\n F5Result,\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => F3Result\n ) => (...args: F1NextArgs) => F2Result,\n f3: (\n next: (...args: F3NextArgs) => F4Result\n ) => (...args: F2NextArgs) => F3Result,\n f4: (\n next: (...args: F4NextArgs) => F5Result\n ) => (...args: F3NextArgs) => F4Result,\n f5: (\n next: (...args: F5NextArgs) => LastResult\n ) => (...args: F4NextArgs) => F5Result,\n last: (...args: F5NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2NextArgs extends any[],\n F2Result,\n F3NextArgs extends any[],\n F3Result,\n F4NextArgs extends any[],\n F4Result,\n F5NextArgs extends any[],\n F5Result,\n F6NextArgs extends any[],\n F6Result,\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => F3Result\n ) => (...args: F1NextArgs) => F2Result,\n f3: (\n next: (...args: F3NextArgs) => F4Result\n ) => (...args: F2NextArgs) => F3Result,\n f4: (\n next: (...args: F4NextArgs) => F5Result\n ) => (...args: F3NextArgs) => F4Result,\n f5: (\n next: (...args: F5NextArgs) => F6Result\n ) => (...args: F4NextArgs) => F5Result,\n f6: (\n next: (...args: F6NextArgs) => LastResult\n ) => (...args: F5NextArgs) => F6Result,\n last: (...args: F6NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2NextArgs extends any[],\n F2Result,\n F3NextArgs extends any[],\n F3Result,\n F4NextArgs extends any[],\n F4Result,\n F5NextArgs extends any[],\n F5Result,\n F6NextArgs extends any[],\n F6Result,\n F7NextArgs extends any[],\n F7Result,\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => F3Result\n ) => (...args: F1NextArgs) => F2Result,\n f3: (\n next: (...args: F3NextArgs) => F4Result\n ) => (...args: F2NextArgs) => F3Result,\n f4: (\n next: (...args: F4NextArgs) => F5Result\n ) => (...args: F3NextArgs) => F4Result,\n f5: (\n next: (...args: F5NextArgs) => F6Result\n ) => (...args: F4NextArgs) => F5Result,\n f6: (\n next: (...args: F6NextArgs) => F7Result\n ) => (...args: F5NextArgs) => F6Result,\n f7: (\n next: (...args: F7NextArgs) => LastResult\n ) => (...args: F6NextArgs) => F7Result,\n last: (...args: F7NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2NextArgs extends any[],\n F2Result,\n F3NextArgs extends any[],\n F3Result,\n F4NextArgs extends any[],\n F4Result,\n F5NextArgs extends any[],\n F5Result,\n F6NextArgs extends any[],\n F6Result,\n F7NextArgs extends any[],\n F7Result,\n F8NextArgs extends any[],\n F8Result,\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => F3Result\n ) => (...args: F1NextArgs) => F2Result,\n f3: (\n next: (...args: F3NextArgs) => F4Result\n ) => (...args: F2NextArgs) => F3Result,\n f4: (\n next: (...args: F4NextArgs) => F5Result\n ) => (...args: F3NextArgs) => F4Result,\n f5: (\n next: (...args: F5NextArgs) => F6Result\n ) => (...args: F4NextArgs) => F5Result,\n f6: (\n next: (...args: F6NextArgs) => F7Result\n ) => (...args: F5NextArgs) => F6Result,\n f7: (\n next: (...args: F7NextArgs) => LastResult\n ) => (...args: F6NextArgs) => F7Result,\n f8: (\n next: (...args: F8NextArgs) => LastResult\n ) => (...args: F7NextArgs) => F8Result,\n last: (...args: F8NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose<\n F1Result,\n F1Args extends any[],\n F1NextArgs extends any[],\n F2NextArgs extends any[],\n F2Result,\n F3NextArgs extends any[],\n F3Result,\n F4NextArgs extends any[],\n F4Result,\n F5NextArgs extends any[],\n F5Result,\n F6NextArgs extends any[],\n F6Result,\n F7NextArgs extends any[],\n F7Result,\n F8NextArgs extends any[],\n F8Result,\n F9NextArgs extends any[],\n F9Result,\n LastResult\n>(\n f1: (\n next: (...args: F1NextArgs) => F2Result\n ) => (...args: F1Args) => F1Result,\n f2: (\n next: (...args: F2NextArgs) => F3Result\n ) => (...args: F1NextArgs) => F2Result,\n f3: (\n next: (...args: F3NextArgs) => F4Result\n ) => (...args: F2NextArgs) => F3Result,\n f4: (\n next: (...args: F4NextArgs) => F5Result\n ) => (...args: F3NextArgs) => F4Result,\n f5: (\n next: (...args: F5NextArgs) => F6Result\n ) => (...args: F4NextArgs) => F5Result,\n f6: (\n next: (...args: F6NextArgs) => F7Result\n ) => (...args: F5NextArgs) => F6Result,\n f7: (\n next: (...args: F7NextArgs) => LastResult\n ) => (...args: F6NextArgs) => F7Result,\n f8: (\n next: (...args: F8NextArgs) => LastResult\n ) => (...args: F7NextArgs) => F8Result,\n f9: (\n next: (...args: F9NextArgs) => LastResult\n ) => (...args: F8NextArgs) => F9Result,\n last: (...args: F9NextArgs) => LastResult\n): (...args: F1Args) => F1Result\n\nexport function compose(...funcs: ((...args: any[]) => any)[]) {\n return funcs.reverse().reduce((acc, fn) => fn(acc))\n}\n\n/**\n * This type produces the type array of TItems with all the type items\n * in TItemsToRemove removed from the start of the array type.\n *\n * @example\n * ```\n * RemoveItemsInFront<[number, number], [number]> = [number]\n * RemoveItemsInFront<[File, number, string], [File, number]> = [string]\n * ```\n */\ntype RemoveItemsInFront<\n TItems extends any[],\n TItemsToRemove extends any[]\n> = TItems extends [...TItemsToRemove, ...infer TRest] ? TRest : TItems\n\nexport const partial = <T extends any[], TA extends Partial<T>, R>(\n fn: (...args: T) => R,\n ...args: TA\n) => {\n return (...rest: RemoveItemsInFront<T, TA>) =>\n fn(...([...args, ...rest] as T))\n}\n/**\n * Like partial but for unary functions that accept\n * a single object argument\n */\nexport const partob = <T, K, PartialArgs extends Partial<T>>(\n fn: (args: T) => K,\n argobj: PartialArgs\n) => {\n return (restobj: Omit<T, keyof PartialArgs>): K =>\n fn({\n ...(argobj as Partial<T>),\n ...(restobj as Partial<T>)\n } as T)\n}\n\n/**\n * Creates a Proxy object that will dynamically\n * call the handler argument when attributes are\n * accessed\n */\nexport const proxied = <T, K>(\n handler: (propertyName: T) => K\n): Record<string, K> => {\n return new Proxy(\n {},\n {\n get: (target, propertyName: any) => handler(propertyName)\n }\n )\n}\n\ntype Cache<T> = Record<string, { exp: number | null; value: T }>\n\nconst memoize = <TArgs extends any[], TResult>(\n cache: Cache<TResult>,\n func: (...args: TArgs) => TResult,\n keyFunc: ((...args: TArgs) => string) | null,\n ttl: number | null\n) => {\n return function callWithMemo(...args: any): TResult {\n const key = keyFunc ? keyFunc(...args) : JSON.stringify({ args })\n const existing = cache[key]\n if (existing !== undefined) {\n if (!existing.exp) return existing.value\n if (existing.exp > new Date().getTime()) {\n return existing.value\n }\n }\n const result = func(...args)\n cache[key] = {\n exp: ttl ? new Date().getTime() + ttl : null,\n value: result\n }\n return result\n }\n}\n\n/**\n * Creates a memoized function. The returned function\n * will only execute the source function when no value\n * has previously been computed. If a ttl (milliseconds)\n * is given previously computed values will be checked\n * for expiration before being returned.\n */\nexport const memo = <TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n options: {\n key?: (...args: TArgs) => string\n ttl?: number\n } = {}\n) => {\n return memoize({}, func, options.key ?? null, options.ttl ?? null) as (\n ...args: TArgs\n ) => TResult\n}\n\nexport type DebounceFunction<TArgs extends any[]> = {\n (...args: TArgs): void\n /**\n * Cancels the debounced function\n */\n cancel(): void\n /**\n * Checks if there is any invocation debounced\n */\n isPending(): boolean\n /**\n * Runs the debounced function immediately\n */\n flush(...args: TArgs): void\n}\n\nexport type ThrottledFunction<TArgs extends any[]> = {\n (...args: TArgs): void\n /**\n * Checks if there is any invocation throttled\n */\n isThrottled(): boolean\n}\n\n/**\n * Given a delay and a function returns a new function\n * that will only call the source function after delay\n * milliseconds have passed without any invocations.\n *\n * The debounce function comes with a `cancel` method\n * to cancel delayed `func` invocations and a `flush`\n * method to invoke them immediately\n */\nexport const debounce = <TArgs extends any[]>(\n { delay }: { delay: number },\n func: (...args: TArgs) => any\n) => {\n let timer: unknown = undefined\n let active = true\n\n const debounced: DebounceFunction<TArgs> = (...args: TArgs) => {\n if (active) {\n clearTimeout(timer)\n timer = setTimeout(() => {\n active && func(...args)\n timer = undefined\n }, delay)\n } else {\n func(...args)\n }\n }\n debounced.isPending = () => {\n return timer !== undefined\n }\n debounced.cancel = () => {\n active = false\n }\n debounced.flush = (...args: TArgs) => func(...args)\n\n return debounced\n}\n\n/**\n * Given an interval and a function returns a new function\n * that will only call the source function if interval milliseconds\n * have passed since the last invocation\n */\nexport const throttle = <TArgs extends any[]>(\n { interval }: { interval: number },\n func: (...args: TArgs) => any\n) => {\n let ready = true\n let timer: unknown = undefined\n\n const throttled: ThrottledFunction<TArgs> = (...args: TArgs) => {\n if (!ready) return\n func(...args)\n ready = false\n timer = setTimeout(() => {\n ready = true\n timer = undefined\n }, interval)\n }\n throttled.isThrottled = () => {\n return timer !== undefined\n }\n return throttled\n}\n\n/**\n * Make an object callable. Given an object and a function\n * the returned object will be a function with all the\n * objects properties.\n *\n * @example\n * ```typescript\n * const car = callable({\n * wheels: 2\n * }, self => () => {\n * return 'driving'\n * })\n *\n * car.wheels // => 2\n * car() // => 'driving'\n * ```\n */\nexport const callable = <\n TValue,\n TObj extends Record<string | number | symbol, TValue>,\n TFunc extends (...args: any) => any\n>(\n obj: TObj,\n fn: (self: TObj) => TFunc\n): TObj & TFunc => {\n /* istanbul ignore next */\n const FUNC = () => {}\n return new Proxy(Object.assign(FUNC, obj), {\n get: (target, key: string) => target[key],\n set: (target, key: string, value: any) => {\n ;(target as any)[key] = value\n return true\n },\n apply: (target, self, args) => fn(Object.assign({}, target))(...args)\n }) as unknown as TObj & TFunc\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.mjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
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 } from './array.mjs';
|
|
2
|
-
export { all, defer, guard, map, parallel, reduce, retry, sleep, tryit as try, tryit } from './async.mjs';
|
|
3
|
-
export { callable, chain, compose, debounce, memo, partial, partob, proxied, throttle } from './curry.mjs';
|
|
4
|
-
export { inRange, toFloat, toInt } from './number.mjs';
|
|
5
|
-
export { assign, clone, construct, crush, get, invert, keys, listify, lowerize, mapEntries, mapKeys, mapValues, omit, pick, set, shake, upperize } from './object.mjs';
|
|
6
|
-
export { draw, random, shuffle, uid } from './random.mjs';
|
|
7
|
-
export { series } from './series.mjs';
|
|
8
|
-
export { camel, capitalize, dash, pascal, snake, template, title, trim } from './string.mjs';
|
|
9
|
-
export { isArray, isDate, isEmpty, isEqual, isFloat, isFunction, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol } from './typed.mjs';
|
|
10
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/dist/esm/number.mjs
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
function inRange(number, start, end) {
|
|
2
|
-
const isTypeSafe = typeof number === "number" && typeof start === "number" && (typeof end === "undefined" || typeof end === "number");
|
|
3
|
-
if (!isTypeSafe) {
|
|
4
|
-
return false;
|
|
5
|
-
}
|
|
6
|
-
if (typeof end === "undefined") {
|
|
7
|
-
end = start;
|
|
8
|
-
start = 0;
|
|
9
|
-
}
|
|
10
|
-
return number >= Math.min(start, end) && number < Math.max(start, end);
|
|
11
|
-
}
|
|
12
|
-
const toFloat = (value, defaultValue) => {
|
|
13
|
-
const def = defaultValue === void 0 ? 0 : defaultValue;
|
|
14
|
-
if (value === null || value === void 0) {
|
|
15
|
-
return def;
|
|
16
|
-
}
|
|
17
|
-
const result = parseFloat(value);
|
|
18
|
-
return isNaN(result) ? def : result;
|
|
19
|
-
};
|
|
20
|
-
const toInt = (value, defaultValue) => {
|
|
21
|
-
const def = defaultValue === void 0 ? 0 : defaultValue;
|
|
22
|
-
if (value === null || value === void 0) {
|
|
23
|
-
return def;
|
|
24
|
-
}
|
|
25
|
-
const result = parseInt(value);
|
|
26
|
-
return isNaN(result) ? def : result;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export { inRange, toFloat, toInt };
|
|
30
|
-
//# sourceMappingURL=number.mjs.map
|
package/dist/esm/number.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number.mjs","sources":["../../src/number.ts"],"sourcesContent":["/**\n * Checks if the given number is between zero (0) and the ending number. 0 is inclusive.\n *\n * * Numbers can be negative or positive.\n * * Ending number is exclusive.\n *\n * @param {number} number The number to check.\n * @param {number} end The end of the range. Exclusive.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\nexport function inRange(number: number, end: number): boolean\n\n/**\n * Checks if the given number is between two numbers.\n *\n * * Numbers can be negative or positive.\n * * Starting number is inclusive.\n * * Ending number is exclusive.\n * * The start and the end of the range can be ascending OR descending order.\n *\n * @param {number} number The number to check.\n * @param {number} start The start of the range. Inclusive.\n * @param {number} end The end of the range. Exclusive.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\nexport function inRange(number: number, start: number, end: number): boolean\nexport function inRange(number: number, start: number, end?: number): boolean {\n const isTypeSafe =\n typeof number === 'number' &&\n typeof start === 'number' &&\n (typeof end === 'undefined' || typeof end === 'number')\n\n if (!isTypeSafe) {\n return false\n }\n\n if (typeof end === 'undefined') {\n end = start\n start = 0\n }\n\n return number >= Math.min(start, end) && number < Math.max(start, end)\n}\n\nexport const toFloat = <T extends number | null = number>(\n value: any,\n defaultValue?: T\n): number | T => {\n const def = defaultValue === undefined ? 0.0 : defaultValue\n if (value === null || value === undefined) {\n return def\n }\n const result = parseFloat(value)\n return isNaN(result) ? def : result\n}\n\nexport const toInt = <T extends number | null = number>(\n value: any,\n defaultValue?: T\n): number | T => {\n const def = defaultValue === undefined ? 0 : defaultValue\n if (value === null || value === undefined) {\n return def\n }\n const result = parseInt(value)\n return isNaN(result) ? def : result\n}\n"],"names":[],"mappings":"AA0BgB,SAAA,OAAA,CAAQ,MAAgB,EAAA,KAAA,EAAe,GAAuB,EAAA;AAC5E,EAAM,MAAA,UAAA,GACJ,OAAO,MAAA,KAAW,QAClB,IAAA,OAAO,KAAU,KAAA,QAAA,KAChB,OAAO,GAAA,KAAQ,WAAe,IAAA,OAAO,GAAQ,KAAA,QAAA,CAAA,CAAA;AAEhD,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAI,IAAA,OAAO,QAAQ,WAAa,EAAA;AAC9B,IAAM,GAAA,GAAA,KAAA,CAAA;AACN,IAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,GACV;AAEA,EAAO,OAAA,MAAA,IAAU,IAAK,CAAA,GAAA,CAAI,KAAO,EAAA,GAAG,KAAK,MAAS,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,EAAO,GAAG,CAAA,CAAA;AACvE,CAAA;AAEa,MAAA,OAAA,GAAU,CACrB,KAAA,EACA,YACe,KAAA;AACf,EAAM,MAAA,GAAA,GAAM,YAAiB,KAAA,KAAA,CAAA,GAAY,CAAM,GAAA,YAAA,CAAA;AAC/C,EAAI,IAAA,KAAA,KAAU,IAAQ,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AACzC,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,MAAA,GAAS,WAAW,KAAK,CAAA,CAAA;AAC/B,EAAO,OAAA,KAAA,CAAM,MAAM,CAAA,GAAI,GAAM,GAAA,MAAA,CAAA;AAC/B,EAAA;AAEa,MAAA,KAAA,GAAQ,CACnB,KAAA,EACA,YACe,KAAA;AACf,EAAM,MAAA,GAAA,GAAM,YAAiB,KAAA,KAAA,CAAA,GAAY,CAAI,GAAA,YAAA,CAAA;AAC7C,EAAI,IAAA,KAAA,KAAU,IAAQ,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AACzC,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,MAAA,GAAS,SAAS,KAAK,CAAA,CAAA;AAC7B,EAAO,OAAA,KAAA,CAAM,MAAM,CAAA,GAAI,GAAM,GAAA,MAAA,CAAA;AAC/B;;;;"}
|
package/dist/esm/object.mjs
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { objectify } from './array.mjs';
|
|
2
|
-
import { toInt } from './number.mjs';
|
|
3
|
-
import { isPrimitive, isObject, isArray } from './typed.mjs';
|
|
4
|
-
|
|
5
|
-
const shake = (obj, filter = (x) => x === void 0) => {
|
|
6
|
-
if (!obj)
|
|
7
|
-
return {};
|
|
8
|
-
const keys2 = Object.keys(obj);
|
|
9
|
-
return keys2.reduce((acc, key) => {
|
|
10
|
-
if (filter(obj[key])) {
|
|
11
|
-
return acc;
|
|
12
|
-
} else {
|
|
13
|
-
acc[key] = obj[key];
|
|
14
|
-
return acc;
|
|
15
|
-
}
|
|
16
|
-
}, {});
|
|
17
|
-
};
|
|
18
|
-
const mapKeys = (obj, mapFunc) => {
|
|
19
|
-
const keys2 = Object.keys(obj);
|
|
20
|
-
return keys2.reduce((acc, key) => {
|
|
21
|
-
acc[mapFunc(key, obj[key])] = obj[key];
|
|
22
|
-
return acc;
|
|
23
|
-
}, {});
|
|
24
|
-
};
|
|
25
|
-
const mapValues = (obj, mapFunc) => {
|
|
26
|
-
const keys2 = Object.keys(obj);
|
|
27
|
-
return keys2.reduce((acc, key) => {
|
|
28
|
-
acc[key] = mapFunc(obj[key], key);
|
|
29
|
-
return acc;
|
|
30
|
-
}, {});
|
|
31
|
-
};
|
|
32
|
-
const mapEntries = (obj, toEntry) => {
|
|
33
|
-
if (!obj)
|
|
34
|
-
return {};
|
|
35
|
-
return Object.entries(obj).reduce((acc, [key, value]) => {
|
|
36
|
-
const [newKey, newValue] = toEntry(key, value);
|
|
37
|
-
acc[newKey] = newValue;
|
|
38
|
-
return acc;
|
|
39
|
-
}, {});
|
|
40
|
-
};
|
|
41
|
-
const invert = (obj) => {
|
|
42
|
-
if (!obj)
|
|
43
|
-
return {};
|
|
44
|
-
const keys2 = Object.keys(obj);
|
|
45
|
-
return keys2.reduce((acc, key) => {
|
|
46
|
-
acc[obj[key]] = key;
|
|
47
|
-
return acc;
|
|
48
|
-
}, {});
|
|
49
|
-
};
|
|
50
|
-
const lowerize = (obj) => mapKeys(obj, (k) => k.toLowerCase());
|
|
51
|
-
const upperize = (obj) => mapKeys(obj, (k) => k.toUpperCase());
|
|
52
|
-
const clone = (obj) => {
|
|
53
|
-
if (isPrimitive(obj)) {
|
|
54
|
-
return obj;
|
|
55
|
-
}
|
|
56
|
-
if (typeof obj === "function") {
|
|
57
|
-
return obj.bind({});
|
|
58
|
-
}
|
|
59
|
-
const newObj = new obj.constructor();
|
|
60
|
-
Object.getOwnPropertyNames(obj).forEach((prop) => {
|
|
61
|
-
newObj[prop] = obj[prop];
|
|
62
|
-
});
|
|
63
|
-
return newObj;
|
|
64
|
-
};
|
|
65
|
-
const listify = (obj, toItem) => {
|
|
66
|
-
if (!obj)
|
|
67
|
-
return [];
|
|
68
|
-
const entries = Object.entries(obj);
|
|
69
|
-
if (entries.length === 0)
|
|
70
|
-
return [];
|
|
71
|
-
return entries.reduce((acc, entry) => {
|
|
72
|
-
acc.push(toItem(entry[0], entry[1]));
|
|
73
|
-
return acc;
|
|
74
|
-
}, []);
|
|
75
|
-
};
|
|
76
|
-
const pick = (obj, keys2) => {
|
|
77
|
-
if (!obj)
|
|
78
|
-
return {};
|
|
79
|
-
return keys2.reduce((acc, key) => {
|
|
80
|
-
if (Object.prototype.hasOwnProperty.call(obj, key))
|
|
81
|
-
acc[key] = obj[key];
|
|
82
|
-
return acc;
|
|
83
|
-
}, {});
|
|
84
|
-
};
|
|
85
|
-
const omit = (obj, keys2) => {
|
|
86
|
-
if (!obj)
|
|
87
|
-
return {};
|
|
88
|
-
if (!keys2 || keys2.length === 0)
|
|
89
|
-
return obj;
|
|
90
|
-
return keys2.reduce(
|
|
91
|
-
(acc, key) => {
|
|
92
|
-
delete acc[key];
|
|
93
|
-
return acc;
|
|
94
|
-
},
|
|
95
|
-
{ ...obj }
|
|
96
|
-
);
|
|
97
|
-
};
|
|
98
|
-
const get = (value, path, defaultValue) => {
|
|
99
|
-
const segments = path.split(/[\.\[\]]/g);
|
|
100
|
-
let current = value;
|
|
101
|
-
for (const key of segments) {
|
|
102
|
-
if (current === null)
|
|
103
|
-
return defaultValue;
|
|
104
|
-
if (current === void 0)
|
|
105
|
-
return defaultValue;
|
|
106
|
-
const dequoted = key.replace(/['"]/g, "");
|
|
107
|
-
if (dequoted.trim() === "")
|
|
108
|
-
continue;
|
|
109
|
-
current = current[dequoted];
|
|
110
|
-
}
|
|
111
|
-
if (current === void 0)
|
|
112
|
-
return defaultValue;
|
|
113
|
-
return current;
|
|
114
|
-
};
|
|
115
|
-
const set = (initial, path, value) => {
|
|
116
|
-
if (!initial)
|
|
117
|
-
return {};
|
|
118
|
-
if (!path || value === void 0)
|
|
119
|
-
return initial;
|
|
120
|
-
const segments = path.split(/[\.\[\]]/g).filter((x) => !!x.trim());
|
|
121
|
-
const _set = (node) => {
|
|
122
|
-
if (segments.length > 1) {
|
|
123
|
-
const key = segments.shift();
|
|
124
|
-
const nextIsNum = toInt(segments[0], null) === null ? false : true;
|
|
125
|
-
node[key] = node[key] === void 0 ? nextIsNum ? [] : {} : node[key];
|
|
126
|
-
_set(node[key]);
|
|
127
|
-
} else {
|
|
128
|
-
node[segments[0]] = value;
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
const cloned = clone(initial);
|
|
132
|
-
_set(cloned);
|
|
133
|
-
return cloned;
|
|
134
|
-
};
|
|
135
|
-
const assign = (initial, override) => {
|
|
136
|
-
if (!initial || !override)
|
|
137
|
-
return initial ?? override ?? {};
|
|
138
|
-
return Object.entries({ ...initial, ...override }).reduce(
|
|
139
|
-
(acc, [key, value]) => {
|
|
140
|
-
return {
|
|
141
|
-
...acc,
|
|
142
|
-
[key]: (() => {
|
|
143
|
-
if (isObject(initial[key]))
|
|
144
|
-
return assign(initial[key], value);
|
|
145
|
-
return value;
|
|
146
|
-
})()
|
|
147
|
-
};
|
|
148
|
-
},
|
|
149
|
-
{}
|
|
150
|
-
);
|
|
151
|
-
};
|
|
152
|
-
const keys = (value) => {
|
|
153
|
-
if (!value)
|
|
154
|
-
return [];
|
|
155
|
-
const getKeys = (nested, paths) => {
|
|
156
|
-
if (isObject(nested)) {
|
|
157
|
-
return Object.entries(nested).flatMap(
|
|
158
|
-
([k, v]) => getKeys(v, [...paths, k])
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
if (isArray(nested)) {
|
|
162
|
-
return nested.flatMap((item, i) => getKeys(item, [...paths, `${i}`]));
|
|
163
|
-
}
|
|
164
|
-
return [paths.join(".")];
|
|
165
|
-
};
|
|
166
|
-
return getKeys(value, []);
|
|
167
|
-
};
|
|
168
|
-
const crush = (value) => {
|
|
169
|
-
if (!value)
|
|
170
|
-
return {};
|
|
171
|
-
return objectify(
|
|
172
|
-
keys(value),
|
|
173
|
-
(k) => k,
|
|
174
|
-
(k) => get(value, k)
|
|
175
|
-
);
|
|
176
|
-
};
|
|
177
|
-
const construct = (obj) => {
|
|
178
|
-
if (!obj)
|
|
179
|
-
return {};
|
|
180
|
-
return Object.keys(obj).reduce((acc, path) => {
|
|
181
|
-
return set(acc, path, obj[path]);
|
|
182
|
-
}, {});
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
export { assign, clone, construct, crush, get, invert, keys, listify, lowerize, mapEntries, mapKeys, mapValues, omit, pick, set, shake, upperize };
|
|
186
|
-
//# sourceMappingURL=object.mjs.map
|
package/dist/esm/object.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object.mjs","sources":["../../src/object.ts"],"sourcesContent":["import { objectify } from './array'\nimport { toInt } from './number'\nimport { isArray, isObject, isPrimitive } from './typed'\n\ntype LowercasedKeys<T extends Record<string, any>> = {\n [P in keyof T & string as Lowercase<P>]: T[P]\n}\n\ntype UppercasedKeys<T extends Record<string, any>> = {\n [P in keyof T & string as Uppercase<P>]: T[P]\n}\n\n/**\n * Removes (shakes out) undefined entries from an\n * object. Optional second argument shakes out values\n * by custom evaluation.\n */\nexport const shake = <RemovedKeys extends string, T>(\n obj: T,\n filter: (value: any) => boolean = x => x === undefined\n): Omit<T, RemovedKeys> => {\n if (!obj) return {} as T\n const keys = Object.keys(obj) as (keyof T)[]\n return keys.reduce((acc, key) => {\n if (filter(obj[key])) {\n return acc\n } else {\n acc[key] = obj[key]\n return acc\n }\n }, {} as T)\n}\n\n/**\n * Map over all the keys of an object to return\n * a new object\n */\nexport const mapKeys = <\n TValue,\n TKey extends string | number | symbol,\n TNewKey extends string | number | symbol\n>(\n obj: Record<TKey, TValue>,\n mapFunc: (key: TKey, value: TValue) => TNewKey\n): Record<TNewKey, TValue> => {\n const keys = Object.keys(obj) as TKey[]\n return keys.reduce((acc, key) => {\n acc[mapFunc(key as TKey, obj[key])] = obj[key]\n return acc\n }, {} as Record<TNewKey, TValue>)\n}\n\n/**\n * Map over all the keys to create a new object\n */\nexport const mapValues = <\n TValue,\n TKey extends string | number | symbol,\n TNewValue\n>(\n obj: Record<TKey, TValue>,\n mapFunc: (value: TValue, key: TKey) => TNewValue\n): Record<TKey, TNewValue> => {\n const keys = Object.keys(obj) as TKey[]\n return keys.reduce((acc, key) => {\n acc[key] = mapFunc(obj[key], key)\n return acc\n }, {} as Record<TKey, TNewValue>)\n}\n\n/**\n * Map over all the keys to create a new object\n */\nexport const mapEntries = <\n TKey extends string | number | symbol,\n TValue,\n TNewKey extends string | number | symbol,\n TNewValue\n>(\n obj: Record<TKey, TValue>,\n toEntry: (key: TKey, value: TValue) => [TNewKey, TNewValue]\n): Record<TNewKey, TNewValue> => {\n if (!obj) return {} as Record<TNewKey, TNewValue>\n return Object.entries(obj).reduce((acc, [key, value]) => {\n const [newKey, newValue] = toEntry(key as TKey, value as TValue)\n acc[newKey] = newValue\n return acc\n }, {} as Record<TNewKey, TNewValue>)\n}\n\n/**\n * Returns an object with { [keys]: value }\n * inverted as { [value]: key }\n */\nexport const invert = <\n TKey extends string | number | symbol,\n TValue extends string | number | symbol\n>(\n obj: Record<TKey, TValue>\n): Record<TValue, TKey> => {\n if (!obj) return {} as Record<TValue, TKey>\n const keys = Object.keys(obj) as TKey[]\n return keys.reduce((acc, key) => {\n acc[obj[key]] = key\n return acc\n }, {} as Record<TValue, TKey>)\n}\n\n/**\n * Convert all keys in an object to lower case\n */\nexport const lowerize = <T extends Record<string, any>>(obj: T) =>\n mapKeys(obj, k => k.toLowerCase()) as LowercasedKeys<T>\n\n/**\n * Convert all keys in an object to upper case\n */\nexport const upperize = <T extends Record<string, any>>(obj: T) =>\n mapKeys(obj, k => k.toUpperCase()) as UppercasedKeys<T>\n\n/**\n * Creates a shallow copy of the given obejct/value.\n * @param {*} obj value to clone\n * @returns {*} shallow clone of the given value\n */\nexport const clone = <T>(obj: T): T => {\n // Primitive values do not need cloning.\n if (isPrimitive(obj)) {\n return obj\n }\n\n // Binding a function to an empty object creates a\n // copy function.\n if (typeof obj === 'function') {\n return obj.bind({})\n }\n\n // Access the constructor and create a new object.\n // This method can create an array as well.\n const newObj = new ((obj as object).constructor as { new (): T })()\n\n // Assign the props.\n Object.getOwnPropertyNames(obj).forEach(prop => {\n // Bypass type checking since the primitive cases\n // are already checked in the beginning\n ;(newObj as any)[prop] = (obj as any)[prop]\n })\n\n return newObj\n}\n\n/**\n * Convert an object to a list, mapping each entry\n * into a list item\n */\nexport const listify = <TValue, TKey extends string | number | symbol, KResult>(\n obj: Record<TKey, TValue>,\n toItem: (key: TKey, value: TValue) => KResult\n) => {\n if (!obj) return []\n const entries = Object.entries(obj)\n if (entries.length === 0) return []\n return entries.reduce((acc, entry) => {\n acc.push(toItem(entry[0] as TKey, entry[1] as TValue))\n return acc\n }, [] as KResult[])\n}\n\n/**\n * Pick a list of properties from an object\n * into a new object\n */\nexport const pick = <T extends object, TKeys extends keyof T>(\n obj: T,\n keys: TKeys[]\n): Pick<T, TKeys> => {\n if (!obj) return {} as Pick<T, TKeys>\n return keys.reduce((acc, key) => {\n if (Object.prototype.hasOwnProperty.call(obj, key)) acc[key] = obj[key]\n return acc\n }, {} as Pick<T, TKeys>)\n}\n\n/**\n * Omit a list of properties from an object\n * returning a new object with the properties\n * that remain\n */\nexport const omit = <T, TKeys extends keyof T>(\n obj: T,\n keys: TKeys[]\n): Omit<T, TKeys> => {\n if (!obj) return {} as Omit<T, TKeys>\n if (!keys || keys.length === 0) return obj as Omit<T, TKeys>\n return keys.reduce(\n (acc, key) => {\n // Gross, I know, it's mutating the object, but we\n // are allowing it in this very limited scope due\n // to the performance implications of an omit func.\n // Not a pattern or practice to use elsewhere.\n delete acc[key]\n return acc\n },\n { ...obj }\n )\n}\n\n/**\n * Dynamically get a nested value from an array or\n * object with a string.\n *\n * @example get(person, 'friends[0].name')\n */\nexport const get = <TDefault = unknown>(\n value: any,\n path: string,\n defaultValue?: TDefault\n): TDefault => {\n const segments = path.split(/[\\.\\[\\]]/g)\n let current: any = value\n for (const key of segments) {\n if (current === null) return defaultValue as TDefault\n if (current === undefined) return defaultValue as TDefault\n const dequoted = key.replace(/['\"]/g, '')\n if (dequoted.trim() === '') continue\n current = current[dequoted]\n }\n if (current === undefined) return defaultValue as TDefault\n return current\n}\n\n/**\n * Opposite of get, dynamically set a nested value into\n * an object using a key path. Does not modify the given\n * initial object.\n *\n * @example\n * set({}, 'name', 'ra') // => { name: 'ra' }\n * set({}, 'cards[0].value', 2) // => { cards: [{ value: 2 }] }\n */\nexport const set = <T extends object, K>(\n initial: T,\n path: string,\n value: K\n): T => {\n if (!initial) return {} as T\n if (!path || value === undefined) return initial\n const segments = path.split(/[\\.\\[\\]]/g).filter(x => !!x.trim())\n const _set = (node: any) => {\n if (segments.length > 1) {\n const key = segments.shift() as string\n const nextIsNum = toInt(segments[0], null) === null ? false : true\n node[key] = node[key] === undefined ? (nextIsNum ? [] : {}) : node[key]\n _set(node[key])\n } else {\n node[segments[0]] = value\n }\n }\n // NOTE: One day, when structuredClone has more\n // compatability use it to clone the value\n // https://developer.mozilla.org/en-US/docs/Web/API/structuredClone\n const cloned = clone(initial)\n _set(cloned)\n return cloned\n}\n\n/**\n * Merges two objects together recursivly into a new\n * object applying values from right to left.\n * Recursion only applies to child object properties.\n */\nexport const assign = <X extends Record<string | symbol | number, any>>(\n initial: X,\n override: X\n): X => {\n if (!initial || !override) return initial ?? override ?? {}\n\n return Object.entries({ ...initial, ...override }).reduce(\n (acc, [key, value]) => {\n return {\n ...acc,\n [key]: (() => {\n if (isObject(initial[key])) return assign(initial[key], value)\n // if (isArray(value)) return value.map(x => assign)\n return value\n })()\n }\n },\n {} as X\n )\n}\n\n/**\n * Get a string list of all key names that exist in\n * an object (deep).\n *\n * @example\n * keys({ name: 'ra' }) // ['name']\n * keys({ name: 'ra', children: [{ name: 'hathor' }] }) // ['name', 'children.0.name']\n */\nexport const keys = <TValue extends object>(value: TValue): string[] => {\n if (!value) return []\n const getKeys = (nested: any, paths: string[]): string[] => {\n if (isObject(nested)) {\n return Object.entries(nested).flatMap(([k, v]) =>\n getKeys(v, [...paths, k])\n )\n }\n if (isArray(nested)) {\n return nested.flatMap((item, i) => getKeys(item, [...paths, `${i}`]))\n }\n return [paths.join('.')]\n }\n return getKeys(value, [])\n}\n\n/**\n * Flattens a deep object to a single demension, converting\n * the keys to dot notation.\n *\n * @example\n * crush({ name: 'ra', children: [{ name: 'hathor' }] })\n * // { name: 'ra', 'children.0.name': 'hathor' }\n */\nexport const crush = <TValue extends object>(value: TValue): object => {\n if (!value) return {}\n return objectify(\n keys(value),\n k => k,\n k => get(value, k)\n )\n}\n\n/**\n * The opposite of crush, given an object that was\n * crushed into key paths and values will return\n * the original object reconstructed.\n *\n * @example\n * construct({ name: 'ra', 'children.0.name': 'hathor' })\n * // { name: 'ra', children: [{ name: 'hathor' }] }\n */\nexport const construct = <TObject extends object>(obj: TObject): object => {\n if (!obj) return {}\n return Object.keys(obj).reduce((acc, path) => {\n return set(acc, path, (obj as any)[path])\n }, {})\n}\n"],"names":["keys"],"mappings":"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"}
|
package/dist/esm/random.mjs
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { iterate } from './array.mjs';
|
|
2
|
-
|
|
3
|
-
const random = (min, max) => {
|
|
4
|
-
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
5
|
-
};
|
|
6
|
-
const draw = (array) => {
|
|
7
|
-
const max = array.length;
|
|
8
|
-
if (max === 0) {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
const index = random(0, max - 1);
|
|
12
|
-
return array[index];
|
|
13
|
-
};
|
|
14
|
-
const shuffle = (array) => {
|
|
15
|
-
return array.map((a) => ({ rand: Math.random(), value: a })).sort((a, b) => a.rand - b.rand).map((a) => a.value);
|
|
16
|
-
};
|
|
17
|
-
const uid = (length, specials = "") => {
|
|
18
|
-
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" + specials;
|
|
19
|
-
return iterate(
|
|
20
|
-
length,
|
|
21
|
-
(acc) => {
|
|
22
|
-
return acc + characters.charAt(random(0, characters.length - 1));
|
|
23
|
-
},
|
|
24
|
-
""
|
|
25
|
-
);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export { draw, random, shuffle, uid };
|
|
29
|
-
//# sourceMappingURL=random.mjs.map
|
package/dist/esm/random.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"random.mjs","sources":["../../src/random.ts"],"sourcesContent":["import { iterate } from './array'\n\n/**\n * Generates a random number between min and max\n */\nexport const random = (min: number, max: number) => {\n return Math.floor(Math.random() * (max - min + 1) + min)\n}\n\n/**\n * Draw a random item from a list. Returns\n * null if the list is empty\n */\nexport const draw = <T>(array: readonly T[]): T | null => {\n const max = array.length\n if (max === 0) {\n return null\n }\n const index = random(0, max - 1)\n return array[index]\n}\n\nexport const shuffle = <T>(array: readonly T[]): T[] => {\n return array\n .map(a => ({ rand: Math.random(), value: a }))\n .sort((a, b) => a.rand - b.rand)\n .map(a => a.value)\n}\n\nexport const uid = (length: number, specials: string = '') => {\n const characters =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + specials\n return iterate(\n length,\n acc => {\n return acc + characters.charAt(random(0, characters.length - 1))\n },\n ''\n )\n}\n"],"names":[],"mappings":";;AAKa,MAAA,MAAA,GAAS,CAAC,GAAA,EAAa,GAAgB,KAAA;AAClD,EAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,MAAY,GAAM,GAAA,GAAA,GAAM,KAAK,GAAG,CAAA,CAAA;AACzD,EAAA;AAMa,MAAA,IAAA,GAAO,CAAI,KAAkC,KAAA;AACxD,EAAA,MAAM,MAAM,KAAM,CAAA,MAAA,CAAA;AAClB,EAAA,IAAI,QAAQ,CAAG,EAAA;AACb,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,CAAG,EAAA,GAAA,GAAM,CAAC,CAAA,CAAA;AAC/B,EAAA,OAAO,MAAM,KAAK,CAAA,CAAA;AACpB,EAAA;AAEa,MAAA,OAAA,GAAU,CAAI,KAA6B,KAAA;AACtD,EAAO,OAAA,KAAA,CACJ,GAAI,CAAA,CAAA,CAAA,MAAM,EAAE,IAAA,EAAM,KAAK,MAAO,EAAA,EAAG,KAAO,EAAA,CAAA,EAAI,CAAA,CAAA,CAC5C,KAAK,CAAC,CAAA,EAAG,CAAM,KAAA,CAAA,CAAE,IAAO,GAAA,CAAA,CAAE,IAAI,CAC9B,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,KAAK,CAAA,CAAA;AACrB,EAAA;AAEO,MAAM,GAAM,GAAA,CAAC,MAAgB,EAAA,QAAA,GAAmB,EAAO,KAAA;AAC5D,EAAA,MAAM,aACJ,gEAAmE,GAAA,QAAA,CAAA;AACrE,EAAO,OAAA,OAAA;AAAA,IACL,MAAA;AAAA,IACA,CAAO,GAAA,KAAA;AACL,MAAO,OAAA,GAAA,GAAM,WAAW,MAAO,CAAA,MAAA,CAAO,GAAG,UAAW,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA,CAAA;AAAA,KACjE;AAAA,IACA,EAAA;AAAA,GACF,CAAA;AACF;;;;"}
|