@ls-stack/utils 1.0.0
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/README.md +1 -0
- package/dist/arrayUtils.d.ts +50 -0
- package/dist/arrayUtils.js +13 -0
- package/dist/arrayUtils.js.map +1 -0
- package/dist/assertions.d.ts +17 -0
- package/dist/assertions.js +25 -0
- package/dist/assertions.js.map +1 -0
- package/dist/castValues.d.ts +4 -0
- package/dist/castValues.js +16 -0
- package/dist/castValues.js.map +1 -0
- package/dist/chunk-4DRNU53E.js +70 -0
- package/dist/chunk-4DRNU53E.js.map +1 -0
- package/dist/chunk-5FQYH3ZJ.js +106 -0
- package/dist/chunk-5FQYH3ZJ.js.map +1 -0
- package/dist/chunk-5SB253CL.js +54 -0
- package/dist/chunk-5SB253CL.js.map +1 -0
- package/dist/chunk-HLFWWIDK.js +9 -0
- package/dist/chunk-HLFWWIDK.js.map +1 -0
- package/dist/chunk-HYFUWQ2E.js +218 -0
- package/dist/chunk-HYFUWQ2E.js.map +1 -0
- package/dist/chunk-J66LUDLH.js +13 -0
- package/dist/chunk-J66LUDLH.js.map +1 -0
- package/dist/chunk-JT3EBBCA.js +69 -0
- package/dist/chunk-JT3EBBCA.js.map +1 -0
- package/dist/chunk-JZUOIOMU.js +75 -0
- package/dist/chunk-JZUOIOMU.js.map +1 -0
- package/dist/chunk-MMKMF4GG.js +21 -0
- package/dist/chunk-MMKMF4GG.js.map +1 -0
- package/dist/chunk-SNAAKCTH.js +40 -0
- package/dist/chunk-SNAAKCTH.js.map +1 -0
- package/dist/consoleFmt.d.ts +48 -0
- package/dist/consoleFmt.js +60 -0
- package/dist/consoleFmt.js.map +1 -0
- package/dist/conversions.d.ts +3 -0
- package/dist/conversions.js +7 -0
- package/dist/conversions.js.map +1 -0
- package/dist/createThrottleController.d.ts +16 -0
- package/dist/createThrottleController.js +66 -0
- package/dist/createThrottleController.js.map +1 -0
- package/dist/dedent.d.ts +4 -0
- package/dist/dedent.js +33 -0
- package/dist/dedent.js.map +1 -0
- package/dist/deepEqual.d.ts +4 -0
- package/dist/deepEqual.js +7 -0
- package/dist/deepEqual.js.map +1 -0
- package/dist/enhancedMap.d.ts +22 -0
- package/dist/enhancedMap.js +10 -0
- package/dist/enhancedMap.js.map +1 -0
- package/dist/exhaustiveMatch.d.ts +5 -0
- package/dist/exhaustiveMatch.js +27 -0
- package/dist/exhaustiveMatch.js.map +1 -0
- package/dist/main.d.ts +25 -0
- package/dist/main.js +3 -0
- package/dist/main.js.map +1 -0
- package/dist/mathUtils.d.ts +4 -0
- package/dist/mathUtils.js +9 -0
- package/dist/mathUtils.js.map +1 -0
- package/dist/objUtils.d.ts +7 -0
- package/dist/objUtils.js +15 -0
- package/dist/objUtils.js.map +1 -0
- package/dist/parallelAsyncResultCalls.d.ts +76 -0
- package/dist/parallelAsyncResultCalls.js +126 -0
- package/dist/parallelAsyncResultCalls.js.map +1 -0
- package/dist/promiseUtils.d.ts +8 -0
- package/dist/promiseUtils.js +14 -0
- package/dist/promiseUtils.js.map +1 -0
- package/dist/rsResult.d.ts +118 -0
- package/dist/rsResult.js +21 -0
- package/dist/rsResult.js.map +1 -0
- package/dist/runShellCmd.d.ts +15 -0
- package/dist/runShellCmd.js +71 -0
- package/dist/runShellCmd.js.map +1 -0
- package/dist/shallowEqual.d.ts +4 -0
- package/dist/shallowEqual.js +74 -0
- package/dist/shallowEqual.js.map +1 -0
- package/dist/sleep.d.ts +3 -0
- package/dist/sleep.js +7 -0
- package/dist/sleep.js.map +1 -0
- package/dist/stringUtils.d.ts +18 -0
- package/dist/stringUtils.js +17 -0
- package/dist/stringUtils.js.map +1 -0
- package/dist/testUtils.d.ts +24 -0
- package/dist/testUtils.js +171 -0
- package/dist/testUtils.js.map +1 -0
- package/dist/typingFnUtils.d.ts +5 -0
- package/dist/typingFnUtils.js +8 -0
- package/dist/typingFnUtils.js.map +1 -0
- package/dist/typingTestUtils.d.ts +12 -0
- package/dist/typingTestUtils.js +19 -0
- package/dist/typingTestUtils.js.map +1 -0
- package/dist/typingUtils.d.ts +11 -0
- package/dist/typingUtils.js +1 -0
- package/dist/typingUtils.js.map +1 -0
- package/dist/yamlStringify.d.ts +8 -0
- package/dist/yamlStringify.js +292 -0
- package/dist/yamlStringify.js.map +1 -0
- package/package.json +235 -0
package/dist/main.js
ADDED
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/main.ts"],"sourcesContent":["throw new Error('do not use this file');\n"],"mappings":";AAAA,MAAM,IAAI,MAAM,sBAAsB;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare function objectTypedEntries<T extends Record<string, unknown>>(obj: T): [Extract<keyof T, string>, T[keyof T]][];
|
|
2
|
+
declare function pick<T, K extends keyof T>(obj: T | undefined, keys: K[], rename?: Partial<Record<K, string>>): Record<string, unknown>;
|
|
3
|
+
declare function mapArrayToObject<T, K extends string, O>(array: T[], mapper: (item: T, index: number) => [K, O]): Record<K, O>;
|
|
4
|
+
declare function mapObjectToObject<I extends Record<string | number | symbol, unknown>, K extends string | number | symbol, O>(obj: I, mapper: (key: keyof I, value: I[keyof I]) => [K, O]): Record<K, O>;
|
|
5
|
+
declare function omit<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: K[]): Omit<T, K>;
|
|
6
|
+
|
|
7
|
+
export { mapArrayToObject, mapObjectToObject, objectTypedEntries, omit, pick };
|
package/dist/objUtils.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
mapArrayToObject,
|
|
3
|
+
mapObjectToObject,
|
|
4
|
+
objectTypedEntries,
|
|
5
|
+
omit,
|
|
6
|
+
pick
|
|
7
|
+
} from "./chunk-SNAAKCTH.js";
|
|
8
|
+
export {
|
|
9
|
+
mapArrayToObject,
|
|
10
|
+
mapObjectToObject,
|
|
11
|
+
objectTypedEntries,
|
|
12
|
+
omit,
|
|
13
|
+
pick
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=objUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Result, NormalizedError } from './rsResult.js';
|
|
2
|
+
|
|
3
|
+
type ValidMetadata = string | number | boolean | Record<string, unknown>;
|
|
4
|
+
type TupleRunAllSuccess<T> = T extends () => Promise<Result<infer V>> ? Succeeded<V, undefined> : T extends {
|
|
5
|
+
metadata: infer M;
|
|
6
|
+
fn: () => Promise<Result<infer V>>;
|
|
7
|
+
} ? Succeeded<V, M> : never;
|
|
8
|
+
type TupleRunAllFailed<T> = T extends () => Promise<Result<any>> ? {
|
|
9
|
+
metadata: undefined;
|
|
10
|
+
error: NormalizedError;
|
|
11
|
+
} : T extends {
|
|
12
|
+
metadata: infer M extends ValidMetadata;
|
|
13
|
+
} ? {
|
|
14
|
+
metadata: M;
|
|
15
|
+
error: NormalizedError;
|
|
16
|
+
} : never;
|
|
17
|
+
type TupleRunAllSettled<T> = T extends () => Promise<Result<infer V>> ? Succeeded<V, undefined> | Failed<undefined> : T extends {
|
|
18
|
+
metadata: infer M;
|
|
19
|
+
fn: () => Promise<Result<infer V>>;
|
|
20
|
+
} ? Succeeded<V, M> | Failed<M> : never;
|
|
21
|
+
type RunProps = {
|
|
22
|
+
delayStart?: (index: number) => number;
|
|
23
|
+
};
|
|
24
|
+
type Failed<M> = {
|
|
25
|
+
metadata: M;
|
|
26
|
+
error: NormalizedError;
|
|
27
|
+
};
|
|
28
|
+
type Succeeded<R, M> = {
|
|
29
|
+
value: R;
|
|
30
|
+
metadata: M;
|
|
31
|
+
};
|
|
32
|
+
declare class ParallelAsyncResultCalls<M extends ValidMetadata | undefined = undefined, R = unknown> {
|
|
33
|
+
private pendingCalls;
|
|
34
|
+
alreadyRun: boolean;
|
|
35
|
+
constructor();
|
|
36
|
+
add(call: M extends undefined ? () => Promise<Result<R>> : {
|
|
37
|
+
metadata: M;
|
|
38
|
+
fn: () => Promise<Result<R>>;
|
|
39
|
+
}): this;
|
|
40
|
+
/** adds calls return tuples with infered results */
|
|
41
|
+
addTuple<T extends (M extends undefined ? () => Promise<Result<R>> : {
|
|
42
|
+
metadata: M;
|
|
43
|
+
fn: () => Promise<Result<R>>;
|
|
44
|
+
})[]>(...calls: T): {
|
|
45
|
+
runAllSettled: (props?: RunProps) => Promise<{
|
|
46
|
+
results: {
|
|
47
|
+
[I in keyof T]: TupleRunAllSettled<T[I]>;
|
|
48
|
+
};
|
|
49
|
+
allFailed: boolean;
|
|
50
|
+
}>;
|
|
51
|
+
runAll: (props?: RunProps) => Promise<Result<{
|
|
52
|
+
[I in keyof T]: TupleRunAllSuccess<T[I]>;
|
|
53
|
+
}, TupleRunAllFailed<T[number]>>>;
|
|
54
|
+
};
|
|
55
|
+
runAllSettled({ delayStart }?: RunProps): Promise<{
|
|
56
|
+
failed: Failed<M>[];
|
|
57
|
+
succeeded: Succeeded<R, M>[];
|
|
58
|
+
allFailed: boolean;
|
|
59
|
+
results: (Succeeded<R, M> | Failed<M>)[];
|
|
60
|
+
}>;
|
|
61
|
+
runAll({ delayStart, }?: {
|
|
62
|
+
delayStart?: (index: number) => number;
|
|
63
|
+
}): Promise<Result<Succeeded<R, M>[], {
|
|
64
|
+
metadata: M;
|
|
65
|
+
error: NormalizedError;
|
|
66
|
+
}>>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Executes multiple asynchronous calls in parallel and collects the results in a easier to use format.
|
|
70
|
+
*
|
|
71
|
+
* @template R - The type of the result value.
|
|
72
|
+
* @template M - The type of the call metadata.
|
|
73
|
+
*/
|
|
74
|
+
declare function parallelAsyncResultCalls<M extends ValidMetadata | undefined = undefined, R = unknown>(): ParallelAsyncResultCalls<M, R>;
|
|
75
|
+
|
|
76
|
+
export { parallelAsyncResultCalls };
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sleep
|
|
3
|
+
} from "./chunk-HLFWWIDK.js";
|
|
4
|
+
import {
|
|
5
|
+
Result,
|
|
6
|
+
normalizeError
|
|
7
|
+
} from "./chunk-HYFUWQ2E.js";
|
|
8
|
+
import "./chunk-4DRNU53E.js";
|
|
9
|
+
import {
|
|
10
|
+
invariant,
|
|
11
|
+
isObject
|
|
12
|
+
} from "./chunk-JT3EBBCA.js";
|
|
13
|
+
|
|
14
|
+
// src/parallelAsyncResultCalls.ts
|
|
15
|
+
var ParallelAsyncResultCalls = class {
|
|
16
|
+
pendingCalls = [];
|
|
17
|
+
alreadyRun = false;
|
|
18
|
+
constructor() {
|
|
19
|
+
}
|
|
20
|
+
add(call) {
|
|
21
|
+
this.pendingCalls.push(
|
|
22
|
+
isObject(call) ? call : { metadata: void 0, fn: call }
|
|
23
|
+
);
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
/** adds calls return tuples with infered results */
|
|
27
|
+
addTuple(...calls) {
|
|
28
|
+
for (const call of calls) {
|
|
29
|
+
this.pendingCalls.push(
|
|
30
|
+
isObject(call) ? call : { metadata: void 0, fn: call }
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
runAll: this.runAll.bind(this),
|
|
35
|
+
runAllSettled: this.runAllSettled.bind(this)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async runAllSettled({ delayStart } = {}) {
|
|
39
|
+
invariant(!this.alreadyRun, "Already run");
|
|
40
|
+
const asyncResults = await Promise.allSettled(
|
|
41
|
+
this.pendingCalls.map(async (call, i) => {
|
|
42
|
+
try {
|
|
43
|
+
if (delayStart) {
|
|
44
|
+
await sleep(delayStart(i));
|
|
45
|
+
}
|
|
46
|
+
const result = await call.fn();
|
|
47
|
+
return { result, callMetadata: call.metadata };
|
|
48
|
+
} catch (exception) {
|
|
49
|
+
return {
|
|
50
|
+
result: Result.normalizedUnknownErr(exception),
|
|
51
|
+
callMetadata: call.metadata
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
);
|
|
56
|
+
const failed = [];
|
|
57
|
+
const succeeded = [];
|
|
58
|
+
const results = [];
|
|
59
|
+
for (const asyncResult of asyncResults) {
|
|
60
|
+
invariant(asyncResult.status === "fulfilled");
|
|
61
|
+
const { result, callMetadata } = asyncResult.value;
|
|
62
|
+
if (result.ok) {
|
|
63
|
+
const success = { value: result.value, metadata: callMetadata };
|
|
64
|
+
results.push(success);
|
|
65
|
+
succeeded.push(success);
|
|
66
|
+
} else {
|
|
67
|
+
const fail = { metadata: callMetadata, error: result.error };
|
|
68
|
+
results.push(fail);
|
|
69
|
+
failed.push(fail);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const allFailed = failed.length === this.pendingCalls.length;
|
|
73
|
+
this.alreadyRun = true;
|
|
74
|
+
this.pendingCalls = [];
|
|
75
|
+
return {
|
|
76
|
+
failed,
|
|
77
|
+
succeeded,
|
|
78
|
+
allFailed,
|
|
79
|
+
results
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async runAll({
|
|
83
|
+
delayStart
|
|
84
|
+
} = {}) {
|
|
85
|
+
invariant(!this.alreadyRun, "Already run");
|
|
86
|
+
try {
|
|
87
|
+
const asyncResults = await Promise.all(
|
|
88
|
+
this.pendingCalls.map(async (call, i) => {
|
|
89
|
+
try {
|
|
90
|
+
if (delayStart) {
|
|
91
|
+
await sleep(delayStart(i));
|
|
92
|
+
}
|
|
93
|
+
const result = await call.fn();
|
|
94
|
+
if (!result.ok) {
|
|
95
|
+
throw result.error;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
value: result.value,
|
|
99
|
+
metadata: call.metadata
|
|
100
|
+
};
|
|
101
|
+
} catch (exception) {
|
|
102
|
+
throw {
|
|
103
|
+
metadata: call.metadata,
|
|
104
|
+
error: normalizeError(exception)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
);
|
|
109
|
+
return Result.ok(asyncResults);
|
|
110
|
+
} catch (exception) {
|
|
111
|
+
return Result.err(
|
|
112
|
+
exception
|
|
113
|
+
);
|
|
114
|
+
} finally {
|
|
115
|
+
this.alreadyRun = true;
|
|
116
|
+
this.pendingCalls = [];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
function parallelAsyncResultCalls() {
|
|
121
|
+
return new ParallelAsyncResultCalls();
|
|
122
|
+
}
|
|
123
|
+
export {
|
|
124
|
+
parallelAsyncResultCalls
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=parallelAsyncResultCalls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/parallelAsyncResultCalls.ts"],"sourcesContent":["import { invariant, isObject } from './assertions';\nimport { NormalizedError, Result, normalizeError } from './rsResult';\nimport { sleep } from './sleep';\n\ntype ValidMetadata = string | number | boolean | Record<string, unknown>;\n\ntype TupleRunAllSuccess<T> =\n T extends () => Promise<Result<infer V>> ? Succeeded<V, undefined>\n : T extends { metadata: infer M; fn: () => Promise<Result<infer V>> } ?\n Succeeded<V, M>\n : never;\n\ntype TupleRunAllFailed<T> =\n T extends () => Promise<Result<any>> ?\n { metadata: undefined; error: NormalizedError }\n : T extends { metadata: infer M extends ValidMetadata } ?\n { metadata: M; error: NormalizedError }\n : never;\n\ntype TupleRunAllSettled<T> =\n T extends () => Promise<Result<infer V>> ?\n Succeeded<V, undefined> | Failed<undefined>\n : T extends { metadata: infer M; fn: () => Promise<Result<infer V>> } ?\n Succeeded<V, M> | Failed<M>\n : never;\n\ntype RunProps = {\n delayStart?: (index: number) => number;\n};\n\ntype Failed<M> = {\n metadata: M;\n error: NormalizedError;\n};\ntype Succeeded<R, M> = {\n value: R;\n metadata: M;\n};\n\nclass ParallelAsyncResultCalls<\n M extends ValidMetadata | undefined = undefined,\n R = unknown,\n> {\n private pendingCalls: {\n metadata: M;\n fn: () => Promise<Result<R>>;\n }[] = [];\n alreadyRun = false;\n\n constructor() {}\n\n add(\n call: M extends undefined ? () => Promise<Result<R>>\n : { metadata: M; fn: () => Promise<Result<R>> },\n ) {\n this.pendingCalls.push(\n isObject(call) ? call : { metadata: undefined as any, fn: call },\n );\n\n return this;\n }\n\n /** adds calls return tuples with infered results */\n addTuple<\n T extends (M extends undefined ? () => Promise<Result<R>>\n : { metadata: M; fn: () => Promise<Result<R>> })[],\n >(\n ...calls: T\n ): {\n runAllSettled: (props?: RunProps) => Promise<{\n results: {\n [I in keyof T]: TupleRunAllSettled<T[I]>;\n };\n allFailed: boolean;\n }>;\n runAll: (props?: RunProps) => Promise<\n Result<\n {\n [I in keyof T]: TupleRunAllSuccess<T[I]>;\n },\n TupleRunAllFailed<T[number]>\n >\n >;\n } {\n for (const call of calls) {\n this.pendingCalls.push(\n isObject(call) ? call : { metadata: undefined as any, fn: call },\n );\n }\n\n return {\n runAll: this.runAll.bind(this) as any,\n runAllSettled: this.runAllSettled.bind(this) as any,\n };\n }\n\n async runAllSettled({ delayStart }: RunProps = {}) {\n invariant(!this.alreadyRun, 'Already run');\n\n const asyncResults = await Promise.allSettled(\n this.pendingCalls.map(async (call, i) => {\n try {\n if (delayStart) {\n await sleep(delayStart(i));\n }\n\n const result = await call.fn();\n\n return { result, callMetadata: call.metadata };\n } catch (exception) {\n return {\n result: Result.normalizedUnknownErr(exception),\n callMetadata: call.metadata,\n };\n }\n }),\n );\n\n const failed: Failed<M>[] = [];\n const succeeded: Succeeded<R, M>[] = [];\n const results: (Failed<M> | Succeeded<R, M>)[] = [];\n\n for (const asyncResult of asyncResults) {\n invariant(asyncResult.status === 'fulfilled');\n\n const { result, callMetadata } = asyncResult.value;\n\n if (result.ok) {\n const success = { value: result.value, metadata: callMetadata };\n results.push(success);\n succeeded.push(success);\n } else {\n const fail = { metadata: callMetadata, error: result.error };\n results.push(fail);\n failed.push(fail);\n }\n }\n\n const allFailed = failed.length === this.pendingCalls.length;\n\n this.alreadyRun = true;\n this.pendingCalls = [];\n\n return {\n failed,\n succeeded,\n allFailed,\n results,\n };\n }\n\n async runAll({\n delayStart,\n }: { delayStart?: (index: number) => number } = {}): Promise<\n Result<\n Succeeded<R, M>[],\n {\n metadata: M;\n error: NormalizedError;\n }\n >\n > {\n invariant(!this.alreadyRun, 'Already run');\n\n try {\n const asyncResults = await Promise.all(\n this.pendingCalls.map(async (call, i) => {\n try {\n if (delayStart) {\n await sleep(delayStart(i));\n }\n\n const result = await call.fn();\n\n if (!result.ok) {\n throw result.error;\n }\n\n return {\n value: result.value,\n metadata: call.metadata,\n };\n } catch (exception) {\n throw {\n metadata: call.metadata,\n error: normalizeError(exception),\n };\n }\n }),\n );\n\n return Result.ok(asyncResults);\n } catch (exception) {\n return Result.err(\n exception as {\n metadata: M;\n error: NormalizedError;\n },\n );\n } finally {\n this.alreadyRun = true;\n this.pendingCalls = [];\n }\n }\n}\n\n/**\n * Executes multiple asynchronous calls in parallel and collects the results in a easier to use format.\n *\n * @template R - The type of the result value.\n * @template M - The type of the call metadata.\n */\nexport function parallelAsyncResultCalls<\n M extends ValidMetadata | undefined = undefined,\n R = unknown,\n>() {\n return new ParallelAsyncResultCalls<M, R>();\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/promiseUtils.ts
|
|
2
|
+
function defer() {
|
|
3
|
+
let resolve;
|
|
4
|
+
let reject;
|
|
5
|
+
const promise = new Promise((_resolve, _reject) => {
|
|
6
|
+
resolve = _resolve;
|
|
7
|
+
reject = _reject;
|
|
8
|
+
});
|
|
9
|
+
return { resolve, reject, promise };
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
defer
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=promiseUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/promiseUtils.ts"],"sourcesContent":["type Deferred<T> = {\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason: unknown) => void;\n promise: Promise<T>;\n};\n\nexport function defer<T = void>(): Deferred<T> {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason: unknown) => void;\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n return { resolve, reject, promise };\n}\n"],"mappings":";AAMO,SAAS,QAA+B;AAC7C,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAW,CAAC,UAAU,YAAY;AACpD,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AACD,SAAO,EAAE,SAAS,QAAQ,QAAQ;AACpC;","names":[]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
type Ok<T> = {
|
|
2
|
+
ok: true;
|
|
3
|
+
error: false;
|
|
4
|
+
value: T;
|
|
5
|
+
};
|
|
6
|
+
type NormalizedErrorResultProps = {
|
|
7
|
+
id: string;
|
|
8
|
+
message: string;
|
|
9
|
+
code?: number;
|
|
10
|
+
metadata?: ValidErrorMetadata;
|
|
11
|
+
};
|
|
12
|
+
type IsExactlyAny<T> = boolean extends (T extends never ? true : false) ? true : false;
|
|
13
|
+
type Err<E extends ResultValidErrors> = {
|
|
14
|
+
ok: false;
|
|
15
|
+
error: E;
|
|
16
|
+
errorResult: () => Result<any, E>;
|
|
17
|
+
normalizedErrorResult: (normalizedErr: E extends NormalizedError ? {
|
|
18
|
+
withMetadata: ValidErrorMetadata;
|
|
19
|
+
} | NormalizedErrorResultProps : NormalizedErrorResultProps) => Result<any, NormalizedError>;
|
|
20
|
+
};
|
|
21
|
+
type Unwrap<E, T> = IsExactlyAny<E> extends true ? any : E extends Error ? () => T : unknown;
|
|
22
|
+
type ResultMethods<T, E> = {
|
|
23
|
+
/** Returns the value if the result is Ok, otherwise returns null */
|
|
24
|
+
unwrapOrNull: () => T | null;
|
|
25
|
+
/** Returns the value if the result is Ok, otherwise returns the provided default value */
|
|
26
|
+
unwrapOr: <R extends T>(defaultValue: R) => T | R;
|
|
27
|
+
unwrap: Unwrap<E, T>;
|
|
28
|
+
};
|
|
29
|
+
type OkResult<T, E extends ResultValidErrors, M = any> = Ok<T> & ResultMethods<M, E>;
|
|
30
|
+
type ResultValidErrors = Error | Record<string, unknown> | [string];
|
|
31
|
+
declare function ok(): OkResult<void, any>;
|
|
32
|
+
declare function ok<T>(value: T): OkResult<T, any>;
|
|
33
|
+
type ErrResult<E extends ResultValidErrors, T = any> = Err<E> & ResultMethods<T, E>;
|
|
34
|
+
declare function err<E extends ResultValidErrors>(error: E): ErrResult<E>;
|
|
35
|
+
declare function normalizedUnknownErr(error: unknown): ErrResult<NormalizedError<string>, any>;
|
|
36
|
+
declare function normalizedErr(message: string): ErrResult<NormalizedError>;
|
|
37
|
+
declare function normalizedErr<T extends string>(id: T, message: string): ErrResult<NormalizedError<T>>;
|
|
38
|
+
declare function normalizedErr<T extends string>(errorProps: {
|
|
39
|
+
id: T;
|
|
40
|
+
message: string;
|
|
41
|
+
code?: number;
|
|
42
|
+
cause?: Error;
|
|
43
|
+
metadata?: ValidErrorMetadata;
|
|
44
|
+
}): ErrResult<NormalizedError<T>>;
|
|
45
|
+
/** Unwraps a promise result */
|
|
46
|
+
declare function unwrap<T>(result: Promise<Result<T, Error>>): Promise<T>;
|
|
47
|
+
/**
|
|
48
|
+
* Util for implementing something similar to Result<T, E> in Rust, for better error handling.
|
|
49
|
+
*
|
|
50
|
+
* Usage:
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* function doSomething(): Result<string, Error> {
|
|
54
|
+
* if (something) {
|
|
55
|
+
* return ok('success');
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* return err(new Error('something went wrong'));
|
|
59
|
+
* }
|
|
60
|
+
*
|
|
61
|
+
* const result = doSomething();
|
|
62
|
+
*
|
|
63
|
+
* if (result.ok) {
|
|
64
|
+
* // result.value is a string
|
|
65
|
+
* } else {
|
|
66
|
+
* // result.error is an Error
|
|
67
|
+
* }
|
|
68
|
+
*/
|
|
69
|
+
type Result<T, E extends ResultValidErrors = NormalizedError> = OkResult<T, E, T> | ErrResult<E, T>;
|
|
70
|
+
declare const Result: {
|
|
71
|
+
ok: typeof ok;
|
|
72
|
+
err: typeof err;
|
|
73
|
+
normalizedErr: typeof normalizedErr;
|
|
74
|
+
normalizedUnknownErr: typeof normalizedUnknownErr;
|
|
75
|
+
unwrap: typeof unwrap;
|
|
76
|
+
};
|
|
77
|
+
/** transfor a function in a result function */
|
|
78
|
+
declare function resultify<T, E extends ResultValidErrors = NormalizedError>(fn: () => T, errorNormalizer?: (err: unknown) => E): Result<T, E>;
|
|
79
|
+
/** transform a async function in a result function */
|
|
80
|
+
declare function asyncResultify<T, E extends Error = NormalizedError>(fn: () => Promise<T>, errorNormalizer?: (err: unknown) => E): Promise<Result<Awaited<T>, E>>;
|
|
81
|
+
type ValidErrorMetadata = Record<string, unknown> | undefined;
|
|
82
|
+
declare function setNormalizedErrorSideEffects(callback: (normalizedError: NormalizedError) => void): void;
|
|
83
|
+
declare class NormalizedError<T = string> extends Error {
|
|
84
|
+
id: T;
|
|
85
|
+
metadata?: ValidErrorMetadata;
|
|
86
|
+
cause?: Error;
|
|
87
|
+
code: number;
|
|
88
|
+
constructor({ id, message, metadata, cause, code, }: {
|
|
89
|
+
id: T;
|
|
90
|
+
message: string;
|
|
91
|
+
metadata?: ValidErrorMetadata;
|
|
92
|
+
cause?: Error;
|
|
93
|
+
code?: number;
|
|
94
|
+
});
|
|
95
|
+
toString(): string;
|
|
96
|
+
toJSON(): {
|
|
97
|
+
id: T;
|
|
98
|
+
message: string;
|
|
99
|
+
metadata: ValidErrorMetadata;
|
|
100
|
+
code: number;
|
|
101
|
+
cause: string | (Error & Record<"toJSON", unknown>) | undefined;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
declare class NormalizedErrorWithMetadata<M extends ValidErrorMetadata, T = string> extends NormalizedError<T> {
|
|
105
|
+
metadata: M;
|
|
106
|
+
constructor(props: {
|
|
107
|
+
id: T;
|
|
108
|
+
message: string;
|
|
109
|
+
metadata: M;
|
|
110
|
+
cause?: Error;
|
|
111
|
+
} | {
|
|
112
|
+
error: NormalizedError<T>;
|
|
113
|
+
metadata: M;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
declare function normalizeError(error: unknown): NormalizedError;
|
|
117
|
+
|
|
118
|
+
export { NormalizedError, NormalizedErrorWithMetadata, Result, type ValidErrorMetadata, asyncResultify, normalizeError, resultify, setNormalizedErrorSideEffects };
|
package/dist/rsResult.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NormalizedError,
|
|
3
|
+
NormalizedErrorWithMetadata,
|
|
4
|
+
Result,
|
|
5
|
+
asyncResultify,
|
|
6
|
+
normalizeError,
|
|
7
|
+
resultify,
|
|
8
|
+
setNormalizedErrorSideEffects
|
|
9
|
+
} from "./chunk-HYFUWQ2E.js";
|
|
10
|
+
import "./chunk-4DRNU53E.js";
|
|
11
|
+
import "./chunk-JT3EBBCA.js";
|
|
12
|
+
export {
|
|
13
|
+
NormalizedError,
|
|
14
|
+
NormalizedErrorWithMetadata,
|
|
15
|
+
Result,
|
|
16
|
+
asyncResultify,
|
|
17
|
+
normalizeError,
|
|
18
|
+
resultify,
|
|
19
|
+
setNormalizedErrorSideEffects
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=rsResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type CmdResult = {
|
|
2
|
+
label: string | null;
|
|
3
|
+
out: string;
|
|
4
|
+
error: boolean;
|
|
5
|
+
stdout: string;
|
|
6
|
+
stderr: string;
|
|
7
|
+
};
|
|
8
|
+
declare function runCmd(label: string | null, command: string | string[], { mock, silent, cwd, }?: {
|
|
9
|
+
mock?: CmdResult;
|
|
10
|
+
silent?: boolean;
|
|
11
|
+
cwd?: string;
|
|
12
|
+
}): Promise<CmdResult>;
|
|
13
|
+
declare function concurrentCmd(label: string, cmd: string, onResult: (result: CmdResult) => void): Promise<() => void>;
|
|
14
|
+
|
|
15
|
+
export { concurrentCmd, runCmd };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// src/runShellCmd.ts
|
|
2
|
+
import { spawn } from "child_process";
|
|
3
|
+
process.env.FORCE_COLOR = true;
|
|
4
|
+
function runCmd(label, command, {
|
|
5
|
+
mock,
|
|
6
|
+
silent,
|
|
7
|
+
cwd = process.cwd()
|
|
8
|
+
} = {}) {
|
|
9
|
+
if (mock)
|
|
10
|
+
return Promise.resolve(mock);
|
|
11
|
+
if (label && !silent) {
|
|
12
|
+
console.log(`----${label}----`);
|
|
13
|
+
console.time("\u2705");
|
|
14
|
+
}
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const [cmd = "", ...args] = Array.isArray(command) ? command : command.split(" ");
|
|
17
|
+
const child = spawn(cmd, args, {
|
|
18
|
+
cwd
|
|
19
|
+
});
|
|
20
|
+
let stdout = "";
|
|
21
|
+
let stderr = "";
|
|
22
|
+
let out = "";
|
|
23
|
+
child.stdout.on("data", (data) => {
|
|
24
|
+
stdout += String(data);
|
|
25
|
+
out += String(data);
|
|
26
|
+
if (!silent) {
|
|
27
|
+
console.log(String(data));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
child.stderr.on("data", (data) => {
|
|
31
|
+
stderr += String(data);
|
|
32
|
+
out += String(data);
|
|
33
|
+
if (!silent) {
|
|
34
|
+
console.log(String(data));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
child.on("close", (code) => {
|
|
38
|
+
const hasError = code !== 0;
|
|
39
|
+
if (!silent && label) {
|
|
40
|
+
if (!hasError) {
|
|
41
|
+
console.timeEnd("\u2705");
|
|
42
|
+
}
|
|
43
|
+
console.log("\n");
|
|
44
|
+
}
|
|
45
|
+
resolve({ label, out, stderr, stdout, error: hasError });
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async function concurrentCmd(label, cmd, onResult) {
|
|
50
|
+
const start = Date.now();
|
|
51
|
+
const result = await runCmd(label, cmd, { silent: true });
|
|
52
|
+
onResult(result);
|
|
53
|
+
const ellapsedSeconds = (Date.now() - start) / 1e3;
|
|
54
|
+
console.log(
|
|
55
|
+
`${result.error ? "\u{1F534}" : "\u2705"} ${result.label} (${ellapsedSeconds.toFixed(
|
|
56
|
+
1
|
|
57
|
+
)}s)`
|
|
58
|
+
);
|
|
59
|
+
return () => {
|
|
60
|
+
if (result.error) {
|
|
61
|
+
console.log(`\u274C ${result.label} errors:`);
|
|
62
|
+
console.log(result.out);
|
|
63
|
+
console.log("\n");
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
concurrentCmd,
|
|
69
|
+
runCmd
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=runShellCmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runShellCmd.ts"],"sourcesContent":["/* eslint-disable no-console -- we need console here to print errors */\n\ntype CmdResult = {\n label: string | null;\n out: string;\n error: boolean;\n stdout: string;\n stderr: string;\n};\n\nimport { spawn } from 'child_process';\n\n(process.env as any).FORCE_COLOR = true;\n\nexport function runCmd(\n label: string | null,\n command: string | string[],\n {\n mock,\n silent,\n cwd = process.cwd(),\n }: { mock?: CmdResult; silent?: boolean; cwd?: string } = {},\n): Promise<CmdResult> {\n if (mock) return Promise.resolve(mock);\n\n if (label && !silent) {\n console.log(`----${label}----`);\n console.time('✅');\n }\n\n return new Promise((resolve) => {\n const [cmd = '', ...args] =\n Array.isArray(command) ? command : command.split(' ');\n const child = spawn(cmd, args, {\n cwd,\n });\n\n let stdout = '';\n let stderr = '';\n let out = '';\n\n child.stdout.on('data', (data) => {\n stdout += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.stderr.on('data', (data) => {\n stderr += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.on('close', (code) => {\n const hasError = code !== 0;\n\n if (!silent && label) {\n if (!hasError) {\n console.timeEnd('✅');\n }\n\n console.log('\\n');\n }\n\n resolve({ label, out, stderr, stdout, error: hasError });\n });\n });\n}\n\nexport async function concurrentCmd(\n label: string,\n cmd: string,\n onResult: (result: CmdResult) => void,\n) {\n const start = Date.now();\n\n const result = await runCmd(label, cmd, { silent: true });\n\n onResult(result);\n\n const ellapsedSeconds = (Date.now() - start) / 1000;\n\n console.log(\n `${result.error ? '🔴' : '✅'} ${result.label} (${ellapsedSeconds.toFixed(\n 1,\n )}s)`,\n );\n\n return () => {\n if (result.error) {\n console.log(`❌ ${result.label} errors:`);\n console.log(result.out);\n console.log('\\n');\n }\n };\n}\n"],"mappings":";AAUA,SAAS,aAAa;AAErB,QAAQ,IAAY,cAAc;AAE5B,SAAS,OACd,OACA,SACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,MAAM,QAAQ,IAAI;AACpB,IAA0D,CAAC,GACvC;AACpB,MAAI;AAAM,WAAO,QAAQ,QAAQ,IAAI;AAErC,MAAI,SAAS,CAAC,QAAQ;AACpB,YAAQ,IAAI,OAAO,KAAK,MAAM;AAC9B,YAAQ,KAAK,QAAG;AAAA,EAClB;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IACtB,MAAM,QAAQ,OAAO,IAAI,UAAU,QAAQ,MAAM,GAAG;AACtD,UAAM,QAAQ,MAAM,KAAK,MAAM;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,MAAM;AAEV,UAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;AAChC,gBAAU,OAAO,IAAI;AACrB,aAAO,OAAO,IAAI;AAElB,UAAI,CAAC,QAAQ;AACX,gBAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;AAChC,gBAAU,OAAO,IAAI;AACrB,aAAO,OAAO,IAAI;AAElB,UAAI,CAAC,QAAQ;AACX,gBAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,YAAM,WAAW,SAAS;AAE1B,UAAI,CAAC,UAAU,OAAO;AACpB,YAAI,CAAC,UAAU;AACb,kBAAQ,QAAQ,QAAG;AAAA,QACrB;AAEA,gBAAQ,IAAI,IAAI;AAAA,MAClB;AAEA,cAAQ,EAAE,OAAO,KAAK,QAAQ,QAAQ,OAAO,SAAS,CAAC;AAAA,IACzD,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,cACpB,OACA,KACA,UACA;AACA,QAAM,QAAQ,KAAK,IAAI;AAEvB,QAAM,SAAS,MAAM,OAAO,OAAO,KAAK,EAAE,QAAQ,KAAK,CAAC;AAExD,WAAS,MAAM;AAEf,QAAM,mBAAmB,KAAK,IAAI,IAAI,SAAS;AAE/C,UAAQ;AAAA,IACN,GAAG,OAAO,QAAQ,cAAO,QAAG,IAAI,OAAO,KAAK,KAAK,gBAAgB;AAAA,MAC/D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,MAAM;AACX,QAAI,OAAO,OAAO;AAChB,cAAQ,IAAI,UAAK,OAAO,KAAK,UAAU;AACvC,cAAQ,IAAI,OAAO,GAAG;AACtB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// src/shallowEqual.ts
|
|
2
|
+
var has = Object.prototype.hasOwnProperty;
|
|
3
|
+
function find(iter, tar, key) {
|
|
4
|
+
for (key of iter.keys()) {
|
|
5
|
+
if (key === tar)
|
|
6
|
+
return key;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function shallowEqual(foo, bar) {
|
|
10
|
+
var ctor, len, tmp;
|
|
11
|
+
if (foo === bar)
|
|
12
|
+
return true;
|
|
13
|
+
if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
|
|
14
|
+
if (ctor === Date)
|
|
15
|
+
return shallowEqual(foo.getTime(), bar.getTime());
|
|
16
|
+
if (ctor === RegExp)
|
|
17
|
+
return foo.toString() === bar.toString();
|
|
18
|
+
if (ctor === Array) {
|
|
19
|
+
if ((len = foo.length) === bar.length) {
|
|
20
|
+
while (len-- && foo[len] === bar[len])
|
|
21
|
+
;
|
|
22
|
+
}
|
|
23
|
+
return len === -1;
|
|
24
|
+
}
|
|
25
|
+
if (ctor === Set) {
|
|
26
|
+
if (foo.size !== bar.size) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
for (len of foo) {
|
|
30
|
+
tmp = len;
|
|
31
|
+
if (tmp && typeof tmp === "object") {
|
|
32
|
+
tmp = find(bar, tmp);
|
|
33
|
+
if (!tmp)
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (!bar.has(tmp))
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (ctor === Map) {
|
|
42
|
+
if (foo.size !== bar.size) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
for (len of foo) {
|
|
46
|
+
tmp = len[0];
|
|
47
|
+
if (tmp && typeof tmp === "object") {
|
|
48
|
+
tmp = find(bar, tmp);
|
|
49
|
+
if (!tmp)
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (len[1] !== bar.get(tmp)) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
if (!ctor || typeof foo === "object") {
|
|
59
|
+
len = 0;
|
|
60
|
+
for (ctor in foo) {
|
|
61
|
+
if (has.call(foo, ctor) && ++len && !has.call(bar, ctor))
|
|
62
|
+
return false;
|
|
63
|
+
if (!(ctor in bar) || !(foo[ctor] === bar[ctor]))
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
return Object.keys(bar).length === len;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return foo !== foo && bar !== bar;
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
shallowEqual
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=shallowEqual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shallowEqual.ts"],"sourcesContent":["/* eslint-disable */\nvar has = Object.prototype.hasOwnProperty;\n\nfunction find(iter: any[], tar: any, key?: any) {\n for (key of iter.keys()) {\n if (key === tar) return key;\n }\n}\n\n/** shallow equal version of https://github.com/lukeed/dequal */\nexport function shallowEqual(foo: any, bar: any): boolean {\n var ctor, len, tmp;\n if (foo === bar) return true;\n\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date) return shallowEqual(foo.getTime(), bar.getTime());\n if (ctor === RegExp) return foo.toString() === bar.toString();\n\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && foo[len] === bar[len]);\n }\n return len === -1;\n }\n\n if (ctor === Set) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len;\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!bar.has(tmp)) return false;\n }\n return true;\n }\n\n if (ctor === Map) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len[0];\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (len[1] !== bar.get(tmp)) {\n return false;\n }\n }\n return true;\n }\n\n if (!ctor || typeof foo === 'object') {\n len = 0;\n for (ctor in foo) {\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n if (!(ctor in bar) || !(foo[ctor] === bar[ctor])) return false;\n }\n return Object.keys(bar).length === len;\n }\n }\n\n return foo !== foo && bar !== bar;\n}\n"],"mappings":";AACA,IAAI,MAAM,OAAO,UAAU;AAE3B,SAAS,KAAK,MAAa,KAAU,KAAW;AAC9C,OAAK,OAAO,KAAK,KAAK,GAAG;AACvB,QAAI,QAAQ;AAAK,aAAO;AAAA,EAC1B;AACF;AAGO,SAAS,aAAa,KAAU,KAAmB;AACxD,MAAI,MAAM,KAAK;AACf,MAAI,QAAQ;AAAK,WAAO;AAExB,MAAI,OAAO,QAAQ,OAAO,IAAI,iBAAiB,IAAI,aAAa;AAC9D,QAAI,SAAS;AAAM,aAAO,aAAa,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAC;AACnE,QAAI,SAAS;AAAQ,aAAO,IAAI,SAAS,MAAM,IAAI,SAAS;AAE5D,QAAI,SAAS,OAAO;AAClB,WAAK,MAAM,IAAI,YAAY,IAAI,QAAQ;AACrC,eAAO,SAAS,IAAI,GAAG,MAAM,IAAI,GAAG;AAAE;AAAA,MACxC;AACA,aAAO,QAAQ;AAAA,IACjB;AAEA,QAAI,SAAS,KAAK;AAChB,UAAI,IAAI,SAAS,IAAI,MAAM;AACzB,eAAO;AAAA,MACT;AACA,WAAK,OAAO,KAAK;AACf,cAAM;AACN,YAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,gBAAM,KAAK,KAAK,GAAG;AACnB,cAAI,CAAC;AAAK,mBAAO;AAAA,QACnB;AACA,YAAI,CAAC,IAAI,IAAI,GAAG;AAAG,iBAAO;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,KAAK;AAChB,UAAI,IAAI,SAAS,IAAI,MAAM;AACzB,eAAO;AAAA,MACT;AACA,WAAK,OAAO,KAAK;AACf,cAAM,IAAI,CAAC;AACX,YAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,gBAAM,KAAK,KAAK,GAAG;AACnB,cAAI,CAAC;AAAK,mBAAO;AAAA,QACnB;AACA,YAAI,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,GAAG;AAC3B,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,QAAQ,OAAO,QAAQ,UAAU;AACpC,YAAM;AACN,WAAK,QAAQ,KAAK;AAChB,YAAI,IAAI,KAAK,KAAK,IAAI,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI;AAAG,iBAAO;AACjE,YAAI,EAAE,QAAQ,QAAQ,EAAE,IAAI,IAAI,MAAM,IAAI,IAAI;AAAI,iBAAO;AAAA,MAC3D;AACA,aAAO,OAAO,KAAK,GAAG,EAAE,WAAW;AAAA,IACrC;AAAA,EACF;AAEA,SAAO,QAAQ,OAAO,QAAQ;AAChC;","names":[]}
|
package/dist/sleep.d.ts
ADDED
package/dist/sleep.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|