@nmtjs/common 0.12.5 → 0.12.7
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/dist/index.d.ts +2 -0
- package/dist/index.js +0 -2
- package/dist/types.d.ts +31 -0
- package/dist/types.js +0 -2
- package/dist/utils.d.ts +31 -0
- package/dist/utils.js +67 -67
- package/package.json +5 -5
- package/dist/index.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.js.map +0 -1
- package/src/index.ts +0 -2
- package/src/types.ts +0 -72
- package/src/utils.ts +0 -139
package/dist/index.d.ts
ADDED
package/dist/index.js
CHANGED
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface TypeProvider {
|
|
2
|
+
readonly input: unknown;
|
|
3
|
+
readonly output: unknown;
|
|
4
|
+
}
|
|
5
|
+
export type CallTypeProvider<T extends TypeProvider, V> = (T & {
|
|
6
|
+
input: V;
|
|
7
|
+
})['output'];
|
|
8
|
+
export type ClassConstructor<T = any, A extends any[] = any[]> = (abstract new (...args: A) => T) | (new (...args: A) => T);
|
|
9
|
+
export type ClassInstance<T> = T extends ClassConstructor<infer U> ? U : never;
|
|
10
|
+
export type ClassConstructorArgs<T, A = never> = T extends ClassConstructor<any, infer U> ? U : A;
|
|
11
|
+
export type Callback<T extends any[] = any[], R = any> = (...args: T) => R;
|
|
12
|
+
export type OmitFirstItem<T extends any[]> = T extends [any, ...infer U] ? U : [];
|
|
13
|
+
export type ErrorClass = new (...args: any[]) => Error;
|
|
14
|
+
export type Extra = Record<string, any>;
|
|
15
|
+
export type Async<T> = T | Promise<T>;
|
|
16
|
+
export type ArrayMap<T extends readonly any[], K extends keyof T[number]> = {
|
|
17
|
+
[I in keyof T]: T[I][K];
|
|
18
|
+
};
|
|
19
|
+
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
20
|
+
export type Merge<T1 extends Record<string, any>, T2 extends Record<string, any>> = {
|
|
21
|
+
[K in keyof T1 | keyof T2]: K extends keyof T2 ? T2[K] : K extends keyof T1 ? T1[K] : never;
|
|
22
|
+
};
|
|
23
|
+
export type OneOf<TypesArray extends any[], Res = never, AllProperties = MergeTypes<TypesArray>> = TypesArray extends [infer Head, ...infer Rem] ? OneOf<Rem, Res | OnlyFirst<Head, AllProperties>, AllProperties> : Res;
|
|
24
|
+
type MergeTypes<TypesArray extends any[], Res = {}> = TypesArray extends [
|
|
25
|
+
infer Head,
|
|
26
|
+
...infer Rem
|
|
27
|
+
] ? MergeTypes<Rem, Res & Head> : Res;
|
|
28
|
+
type OnlyFirst<F, S> = F & {
|
|
29
|
+
[Key in keyof Omit<S, keyof F>]?: never;
|
|
30
|
+
};
|
|
31
|
+
export {};
|
package/dist/types.js
CHANGED
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Callback } from './types.ts';
|
|
2
|
+
export declare const noopFn: () => void;
|
|
3
|
+
export declare function merge<T extends any[]>(...objects: T): any;
|
|
4
|
+
export declare function defer<T extends Callback>(cb: T, ms?: number, ...args: Parameters<T>): Promise<Awaited<ReturnType<T>>>;
|
|
5
|
+
export declare function range(count: number, start?: number): {
|
|
6
|
+
[Symbol.iterator](): {
|
|
7
|
+
next(): {
|
|
8
|
+
done: boolean;
|
|
9
|
+
value: number;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export declare function debounce(cb: Callback, delay: number): ((...args: any[]) => void) & {
|
|
14
|
+
clear: () => any;
|
|
15
|
+
};
|
|
16
|
+
export interface InteractivePromise<T = any> {
|
|
17
|
+
promise: Promise<T>;
|
|
18
|
+
resolve: (value: T) => void;
|
|
19
|
+
reject: (error: any) => void;
|
|
20
|
+
toArgs: () => [resolve: this['resolve'], reject: this['reject']];
|
|
21
|
+
}
|
|
22
|
+
export declare function createPromise<T>(): InteractivePromise<T>;
|
|
23
|
+
export declare function onAbort<T extends Callback>(signal: AbortSignal, cb: T, reason?: any): () => void;
|
|
24
|
+
export declare function withTimeout(value: Promise<any>, timeout: number, timeoutError: Error, controller?: AbortController): Promise<unknown>;
|
|
25
|
+
export declare function tryCaptureStackTrace(depth?: number): string | undefined;
|
|
26
|
+
export declare function isGeneratorFunction(value: any): value is GeneratorFunction;
|
|
27
|
+
export declare function isAsyncGeneratorFunction(value: any): value is AsyncGeneratorFunction;
|
|
28
|
+
export declare function throwError(message: string, ErrorClass?: ErrorConstructor): never;
|
|
29
|
+
export declare function once(target: EventTarget, event: string): Promise<void>;
|
|
30
|
+
export declare function onceAborted(signal: AbortSignal): Promise<void>;
|
|
31
|
+
export declare function isAbortError(error: any): boolean;
|
package/dist/utils.js
CHANGED
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
export const noopFn = () => {};
|
|
1
|
+
export const noopFn = () => { };
|
|
2
2
|
export function merge(...objects) {
|
|
3
|
-
|
|
3
|
+
return Object.assign({}, ...objects);
|
|
4
4
|
}
|
|
5
5
|
export function defer(cb, ms = 1, ...args) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
return new Promise((resolve, reject) => setTimeout(async () => {
|
|
7
|
+
try {
|
|
8
|
+
resolve(await cb(...args));
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
reject(error);
|
|
12
|
+
}
|
|
13
|
+
}, ms));
|
|
13
14
|
}
|
|
14
15
|
export function range(count, start = 0) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
} };
|
|
16
|
+
let current = start;
|
|
17
|
+
return {
|
|
18
|
+
[Symbol.iterator]() {
|
|
19
|
+
return {
|
|
20
|
+
next() {
|
|
21
|
+
if (current < count) {
|
|
22
|
+
return { done: false, value: current++ };
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return { done: true, value: current };
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
31
|
}
|
|
32
32
|
export function debounce(cb, delay) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
let timer;
|
|
34
|
+
const clear = () => timer && clearTimeout(timer);
|
|
35
|
+
const fn = (...args) => {
|
|
36
|
+
clear();
|
|
37
|
+
timer = setTimeout(cb, delay, ...args);
|
|
38
|
+
};
|
|
39
|
+
return Object.assign(fn, { clear });
|
|
40
40
|
}
|
|
41
|
+
// TODO: Promise.withResolvers?
|
|
41
42
|
export function createPromise() {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
reject,
|
|
51
|
-
promise,
|
|
52
|
-
toArgs: () => [resolve, reject]
|
|
53
|
-
};
|
|
43
|
+
let resolve;
|
|
44
|
+
let reject;
|
|
45
|
+
const promise = new Promise((res, rej) => {
|
|
46
|
+
resolve = res;
|
|
47
|
+
reject = rej;
|
|
48
|
+
});
|
|
49
|
+
// @ts-expect-error
|
|
50
|
+
return { resolve, reject, promise, toArgs: () => [resolve, reject] };
|
|
54
51
|
}
|
|
55
52
|
export function onAbort(signal, cb, reason) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
const listener = () => cb(reason ?? signal.reason);
|
|
54
|
+
signal.addEventListener('abort', listener, { once: true });
|
|
55
|
+
return () => signal.removeEventListener('abort', listener);
|
|
59
56
|
}
|
|
60
57
|
export function withTimeout(value, timeout, timeoutError, controller) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
const timer = setTimeout(reject, timeout, timeoutError);
|
|
60
|
+
const clearTimer = () => clearTimeout(timer);
|
|
61
|
+
const rejectWithTimeout = (error) => {
|
|
62
|
+
reject(error);
|
|
63
|
+
controller?.abort(error);
|
|
64
|
+
};
|
|
65
|
+
value.then(resolve).catch(rejectWithTimeout).finally(clearTimer);
|
|
66
|
+
});
|
|
70
67
|
}
|
|
71
68
|
export function tryCaptureStackTrace(depth = 0) {
|
|
72
|
-
|
|
69
|
+
return (new Error().stack
|
|
70
|
+
?.split('\n')
|
|
71
|
+
.slice(4 + depth)
|
|
72
|
+
.join('\n') ?? undefined);
|
|
73
73
|
}
|
|
74
74
|
export function isGeneratorFunction(value) {
|
|
75
|
-
|
|
75
|
+
return (typeof value === 'function' &&
|
|
76
|
+
value.constructor.name === 'GeneratorFunction');
|
|
76
77
|
}
|
|
77
78
|
export function isAsyncGeneratorFunction(value) {
|
|
78
|
-
|
|
79
|
+
return (typeof value === 'function' &&
|
|
80
|
+
value.constructor.name === 'AsyncGeneratorFunction');
|
|
79
81
|
}
|
|
80
82
|
export function throwError(message, ErrorClass = Error) {
|
|
81
|
-
|
|
83
|
+
throw new ErrorClass(message);
|
|
82
84
|
}
|
|
83
85
|
export function once(target, event) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
return new Promise((resolve) => {
|
|
87
|
+
target.addEventListener(event, () => resolve(), { once: true });
|
|
88
|
+
});
|
|
87
89
|
}
|
|
88
90
|
export function onceAborted(signal) {
|
|
89
|
-
|
|
91
|
+
return once(signal, 'abort');
|
|
90
92
|
}
|
|
91
93
|
export function isAbortError(error) {
|
|
92
|
-
|
|
94
|
+
return error.name === 'AbortError' || error.code === DOMException.ABORT_ERR;
|
|
93
95
|
}
|
|
94
|
-
|
|
95
|
-
//# sourceMappingURL=utils.js.map
|
package/package.json
CHANGED
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
"type": "module",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": {
|
|
6
|
-
"types": "./
|
|
7
|
-
"import": "./dist/index.js"
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"import": "./dist/index.js",
|
|
8
|
+
"module-sync": "./dist/index.js"
|
|
8
9
|
}
|
|
9
10
|
},
|
|
10
11
|
"files": [
|
|
11
|
-
"src",
|
|
12
12
|
"dist",
|
|
13
13
|
"LICENSE.md",
|
|
14
14
|
"README.md"
|
|
15
15
|
],
|
|
16
|
-
"version": "0.12.
|
|
16
|
+
"version": "0.12.7",
|
|
17
17
|
"scripts": {
|
|
18
|
-
"build": "
|
|
18
|
+
"build": "tsc",
|
|
19
19
|
"type-check": "tsc --noEmit"
|
|
20
20
|
}
|
|
21
21
|
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA,cAAc;AACd,cAAc","names":[],"sources":["../src/index.ts"],"sourcesContent":["export * from './types.ts'\nexport * from './utils.ts'\n"],"version":3,"file":"index.js"}
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"","names":[],"sources":["../src/types.ts"],"sourcesContent":["export interface TypeProvider {\n readonly input: unknown\n readonly output: unknown\n}\n\nexport type CallTypeProvider<T extends TypeProvider, V> = (T & {\n input: V\n})['output']\n\nexport type ClassConstructor<T = any, A extends any[] = any[]> =\n | (abstract new (\n ...args: A\n ) => T)\n | (new (\n ...args: A\n ) => T)\n\nexport type ClassInstance<T> = T extends ClassConstructor<infer U> ? U : never\nexport type ClassConstructorArgs<T, A = never> = T extends ClassConstructor<\n any,\n infer U\n>\n ? U\n : A\n\nexport type Callback<T extends any[] = any[], R = any> = (...args: T) => R\nexport type OmitFirstItem<T extends any[]> = T extends [any, ...infer U]\n ? U\n : []\nexport type ErrorClass = new (...args: any[]) => Error\nexport type Extra = Record<string, any>\nexport type Async<T> = T | Promise<T>\n\nexport type ArrayMap<T extends readonly any[], K extends keyof T[number]> = {\n [I in keyof T]: T[I][K]\n}\n\nexport type UnionToIntersection<U> = (\n U extends any\n ? (k: U) => void\n : never\n) extends (k: infer I) => void\n ? I\n : never\n\nexport type Merge<\n T1 extends Record<string, any>,\n T2 extends Record<string, any>,\n> = {\n [K in keyof T1 | keyof T2]: K extends keyof T2\n ? T2[K]\n : K extends keyof T1\n ? T1[K]\n : never\n}\n\nexport type OneOf<\n TypesArray extends any[],\n Res = never,\n AllProperties = MergeTypes<TypesArray>,\n> = TypesArray extends [infer Head, ...infer Rem]\n ? OneOf<Rem, Res | OnlyFirst<Head, AllProperties>, AllProperties>\n : Res\n\ntype MergeTypes<TypesArray extends any[], Res = {}> = TypesArray extends [\n infer Head,\n ...infer Rem,\n]\n ? MergeTypes<Rem, Res & Head>\n : Res\n\ntype OnlyFirst<F, S> = F & { [Key in keyof Omit<S, keyof F>]?: never }\n"],"version":3,"file":"types.js"}
|
package/dist/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAEA,OAAO,MAAM,SAAS,MAAM,CAAE;AAE9B,OAAO,SAAS,MAAuB,GAAG,SAAY;AACpD,QAAO,OAAO,OAAO,CAAE,GAAE,GAAG,QAAQ;AACrC;AAED,OAAO,SAAS,MACdA,IACA,KAAK,GACL,GAAG,MAC8B;AACjC,QAAO,IAAI,QAAQ,CAAC,SAAS,WAC3B,WAAW,YAAY;AACrB,MAAI;AACF,WAAQ,MAAM,GAAG,GAAG,KAAK,CAAC;EAC3B,SAAQ,OAAO;AACd,UAAO,MAAM;EACd;CACF,GAAE,GAAG;AAET;AAED,OAAO,SAAS,MAAMC,OAAe,QAAQ,GAAG;CAC9C,IAAI,UAAU;AACd,QAAO,EACL,CAAC,OAAO,YAAY;AAClB,SAAO,EACL,OAAO;AACL,OAAI,UAAU,OAAO;AACnB,WAAO;KAAE,MAAM;KAAO,OAAO;IAAW;GACzC,OAAM;AACL,WAAO;KAAE,MAAM;KAAM,OAAO;IAAS;GACtC;EACF,EACF;CACF,EACF;AACF;AAED,OAAO,SAAS,SAASC,IAAcC,OAAe;CACpD,IAAIC;CACJ,MAAM,QAAQ,MAAM,SAAS,aAAa,MAAM;CAChD,MAAM,KAAK,CAAC,GAAG,SAAgB;AAC7B,SAAO;AACP,UAAQ,WAAW,IAAI,OAAO,GAAG,KAAK;CACvC;AACD,QAAO,OAAO,OAAO,IAAI,EAAE,MAAO,EAAC;AACpC;AAUD,OAAO,SAAS,gBAA0C;CACxD,IAAIC;CACJ,IAAIC;CACJ,MAAM,UAAU,IAAI,QAAW,CAAC,KAAK,QAAQ;AAC3C,YAAU;AACV,WAAS;CACV;AAED,QAAO;EAAE;EAAS;EAAQ;EAAS,QAAQ,MAAM,CAAC,SAAS,MAAO;CAAE;AACrE;AAED,OAAO,SAAS,QACdC,QACAP,IACAQ,QACA;CACA,MAAM,WAAW,MAAM,GAAG,UAAU,OAAO,OAAO;AAClD,QAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,KAAM,EAAC;AAC1D,QAAO,MAAM,OAAO,oBAAoB,SAAS,SAAS;AAC3D;AAED,OAAO,SAAS,YACdC,OACAC,SACAC,cACAC,YACA;AACA,QAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;EACtC,MAAM,QAAQ,WAAW,QAAQ,SAAS,aAAa;EACvD,MAAM,aAAa,MAAM,aAAa,MAAM;EAC5C,MAAM,oBAAoB,CAACC,UAAe;AACxC,UAAO,MAAM;AACb,eAAY,MAAM,MAAM;EACzB;AACD,QAAM,KAAK,QAAQ,CAAC,MAAM,kBAAkB,CAAC,QAAQ,WAAW;CACjE;AACF;AAED,OAAO,SAAS,qBAAqB,QAAQ,GAAG;AAC9C,QACE,IAAI,QAAQ,OACR,MAAM,KAAK,CACZ,MAAM,IAAI,MAAM,CAChB,KAAK,KAAK,IAAI;AAEpB;AAED,OAAO,SAAS,oBAAoBC,OAAwC;AAC1E,eACS,UAAU,cACjB,MAAM,YAAY,SAAS;AAE9B;AAED,OAAO,SAAS,yBACdA,OACiC;AACjC,eACS,UAAU,cACjB,MAAM,YAAY,SAAS;AAE9B;AAED,OAAO,SAAS,WAAWC,SAAiB,aAAa,OAAc;AACrE,OAAM,IAAI,WAAW;AACtB;AAED,OAAO,SAAS,KAAKC,QAAqBC,OAAe;AACvD,QAAO,IAAI,QAAc,CAAC,YAAY;AACpC,SAAO,iBAAiB,OAAO,MAAM,SAAS,EAAE,EAAE,MAAM,KAAM,EAAC;CAChE;AACF;AAED,OAAO,SAAS,YAAYV,QAAqB;AAC/C,QAAO,KAAK,QAAQ,QAAQ;AAC7B;AAED,OAAO,SAAS,aAAaM,OAAqB;AAChD,QAAO,MAAM,SAAS,gBAAgB,MAAM,SAAS,aAAa;AACnE","names":["cb: T","count: number","cb: Callback","delay: number","timer: any","resolve: InteractivePromise<T>['resolve']","reject: InteractivePromise<T>['reject']","signal: AbortSignal","reason?: any","value: Promise<any>","timeout: number","timeoutError: Error","controller?: AbortController","error: any","value: any","message: string","target: EventTarget","event: string"],"sources":["../src/utils.ts"],"sourcesContent":["import type { Callback } from './types.ts'\n\nexport const noopFn = () => {}\n\nexport function merge<T extends any[]>(...objects: T) {\n return Object.assign({}, ...objects)\n}\n\nexport function defer<T extends Callback>(\n cb: T,\n ms = 1,\n ...args: Parameters<T>\n): Promise<Awaited<ReturnType<T>>> {\n return new Promise((resolve, reject) =>\n setTimeout(async () => {\n try {\n resolve(await cb(...args))\n } catch (error) {\n reject(error)\n }\n }, ms),\n )\n}\n\nexport function range(count: number, start = 0) {\n let current = start\n return {\n [Symbol.iterator]() {\n return {\n next() {\n if (current < count) {\n return { done: false, value: current++ }\n } else {\n return { done: true, value: current }\n }\n },\n }\n },\n }\n}\n\nexport function debounce(cb: Callback, delay: number) {\n let timer: any\n const clear = () => timer && clearTimeout(timer)\n const fn = (...args: any[]) => {\n clear()\n timer = setTimeout(cb, delay, ...args)\n }\n return Object.assign(fn, { clear })\n}\n\n// TODO: Promise.withResolvers?\nexport interface InteractivePromise<T = any> {\n promise: Promise<T>\n resolve: (value: T) => void\n reject: (error: any) => void\n toArgs: () => [resolve: this['resolve'], reject: this['reject']]\n}\n// TODO: Promise.withResolvers?\nexport function createPromise<T>(): InteractivePromise<T> {\n let resolve: InteractivePromise<T>['resolve']\n let reject: InteractivePromise<T>['reject']\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n // @ts-expect-error\n return { resolve, reject, promise, toArgs: () => [resolve, reject] }\n}\n\nexport function onAbort<T extends Callback>(\n signal: AbortSignal,\n cb: T,\n reason?: any,\n) {\n const listener = () => cb(reason ?? signal.reason)\n signal.addEventListener('abort', listener, { once: true })\n return () => signal.removeEventListener('abort', listener)\n}\n\nexport function withTimeout(\n value: Promise<any>,\n timeout: number,\n timeoutError: Error,\n controller?: AbortController,\n) {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(reject, timeout, timeoutError)\n const clearTimer = () => clearTimeout(timer)\n const rejectWithTimeout = (error: any) => {\n reject(error)\n controller?.abort(error)\n }\n value.then(resolve).catch(rejectWithTimeout).finally(clearTimer)\n })\n}\n\nexport function tryCaptureStackTrace(depth = 0) {\n return (\n new Error().stack\n ?.split('\\n')\n .slice(4 + depth)\n .join('\\n') ?? undefined\n )\n}\n\nexport function isGeneratorFunction(value: any): value is GeneratorFunction {\n return (\n typeof value === 'function' &&\n value.constructor.name === 'GeneratorFunction'\n )\n}\n\nexport function isAsyncGeneratorFunction(\n value: any,\n): value is AsyncGeneratorFunction {\n return (\n typeof value === 'function' &&\n value.constructor.name === 'AsyncGeneratorFunction'\n )\n}\n\nexport function throwError(message: string, ErrorClass = Error): never {\n throw new ErrorClass(message)\n}\n\nexport function once(target: EventTarget, event: string) {\n return new Promise<void>((resolve) => {\n target.addEventListener(event, () => resolve(), { once: true })\n })\n}\n\nexport function onceAborted(signal: AbortSignal) {\n return once(signal, 'abort')\n}\n\nexport function isAbortError(error: any): boolean {\n return error.name === 'AbortError' || error.code === DOMException.ABORT_ERR\n}\n"],"version":3,"file":"utils.js"}
|
package/src/index.ts
DELETED
package/src/types.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
export interface TypeProvider {
|
|
2
|
-
readonly input: unknown
|
|
3
|
-
readonly output: unknown
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export type CallTypeProvider<T extends TypeProvider, V> = (T & {
|
|
7
|
-
input: V
|
|
8
|
-
})['output']
|
|
9
|
-
|
|
10
|
-
export type ClassConstructor<T = any, A extends any[] = any[]> =
|
|
11
|
-
| (abstract new (
|
|
12
|
-
...args: A
|
|
13
|
-
) => T)
|
|
14
|
-
| (new (
|
|
15
|
-
...args: A
|
|
16
|
-
) => T)
|
|
17
|
-
|
|
18
|
-
export type ClassInstance<T> = T extends ClassConstructor<infer U> ? U : never
|
|
19
|
-
export type ClassConstructorArgs<T, A = never> = T extends ClassConstructor<
|
|
20
|
-
any,
|
|
21
|
-
infer U
|
|
22
|
-
>
|
|
23
|
-
? U
|
|
24
|
-
: A
|
|
25
|
-
|
|
26
|
-
export type Callback<T extends any[] = any[], R = any> = (...args: T) => R
|
|
27
|
-
export type OmitFirstItem<T extends any[]> = T extends [any, ...infer U]
|
|
28
|
-
? U
|
|
29
|
-
: []
|
|
30
|
-
export type ErrorClass = new (...args: any[]) => Error
|
|
31
|
-
export type Extra = Record<string, any>
|
|
32
|
-
export type Async<T> = T | Promise<T>
|
|
33
|
-
|
|
34
|
-
export type ArrayMap<T extends readonly any[], K extends keyof T[number]> = {
|
|
35
|
-
[I in keyof T]: T[I][K]
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export type UnionToIntersection<U> = (
|
|
39
|
-
U extends any
|
|
40
|
-
? (k: U) => void
|
|
41
|
-
: never
|
|
42
|
-
) extends (k: infer I) => void
|
|
43
|
-
? I
|
|
44
|
-
: never
|
|
45
|
-
|
|
46
|
-
export type Merge<
|
|
47
|
-
T1 extends Record<string, any>,
|
|
48
|
-
T2 extends Record<string, any>,
|
|
49
|
-
> = {
|
|
50
|
-
[K in keyof T1 | keyof T2]: K extends keyof T2
|
|
51
|
-
? T2[K]
|
|
52
|
-
: K extends keyof T1
|
|
53
|
-
? T1[K]
|
|
54
|
-
: never
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export type OneOf<
|
|
58
|
-
TypesArray extends any[],
|
|
59
|
-
Res = never,
|
|
60
|
-
AllProperties = MergeTypes<TypesArray>,
|
|
61
|
-
> = TypesArray extends [infer Head, ...infer Rem]
|
|
62
|
-
? OneOf<Rem, Res | OnlyFirst<Head, AllProperties>, AllProperties>
|
|
63
|
-
: Res
|
|
64
|
-
|
|
65
|
-
type MergeTypes<TypesArray extends any[], Res = {}> = TypesArray extends [
|
|
66
|
-
infer Head,
|
|
67
|
-
...infer Rem,
|
|
68
|
-
]
|
|
69
|
-
? MergeTypes<Rem, Res & Head>
|
|
70
|
-
: Res
|
|
71
|
-
|
|
72
|
-
type OnlyFirst<F, S> = F & { [Key in keyof Omit<S, keyof F>]?: never }
|
package/src/utils.ts
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import type { Callback } from './types.ts'
|
|
2
|
-
|
|
3
|
-
export const noopFn = () => {}
|
|
4
|
-
|
|
5
|
-
export function merge<T extends any[]>(...objects: T) {
|
|
6
|
-
return Object.assign({}, ...objects)
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function defer<T extends Callback>(
|
|
10
|
-
cb: T,
|
|
11
|
-
ms = 1,
|
|
12
|
-
...args: Parameters<T>
|
|
13
|
-
): Promise<Awaited<ReturnType<T>>> {
|
|
14
|
-
return new Promise((resolve, reject) =>
|
|
15
|
-
setTimeout(async () => {
|
|
16
|
-
try {
|
|
17
|
-
resolve(await cb(...args))
|
|
18
|
-
} catch (error) {
|
|
19
|
-
reject(error)
|
|
20
|
-
}
|
|
21
|
-
}, ms),
|
|
22
|
-
)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function range(count: number, start = 0) {
|
|
26
|
-
let current = start
|
|
27
|
-
return {
|
|
28
|
-
[Symbol.iterator]() {
|
|
29
|
-
return {
|
|
30
|
-
next() {
|
|
31
|
-
if (current < count) {
|
|
32
|
-
return { done: false, value: current++ }
|
|
33
|
-
} else {
|
|
34
|
-
return { done: true, value: current }
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function debounce(cb: Callback, delay: number) {
|
|
43
|
-
let timer: any
|
|
44
|
-
const clear = () => timer && clearTimeout(timer)
|
|
45
|
-
const fn = (...args: any[]) => {
|
|
46
|
-
clear()
|
|
47
|
-
timer = setTimeout(cb, delay, ...args)
|
|
48
|
-
}
|
|
49
|
-
return Object.assign(fn, { clear })
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// TODO: Promise.withResolvers?
|
|
53
|
-
export interface InteractivePromise<T = any> {
|
|
54
|
-
promise: Promise<T>
|
|
55
|
-
resolve: (value: T) => void
|
|
56
|
-
reject: (error: any) => void
|
|
57
|
-
toArgs: () => [resolve: this['resolve'], reject: this['reject']]
|
|
58
|
-
}
|
|
59
|
-
// TODO: Promise.withResolvers?
|
|
60
|
-
export function createPromise<T>(): InteractivePromise<T> {
|
|
61
|
-
let resolve: InteractivePromise<T>['resolve']
|
|
62
|
-
let reject: InteractivePromise<T>['reject']
|
|
63
|
-
const promise = new Promise<T>((res, rej) => {
|
|
64
|
-
resolve = res
|
|
65
|
-
reject = rej
|
|
66
|
-
})
|
|
67
|
-
// @ts-expect-error
|
|
68
|
-
return { resolve, reject, promise, toArgs: () => [resolve, reject] }
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export function onAbort<T extends Callback>(
|
|
72
|
-
signal: AbortSignal,
|
|
73
|
-
cb: T,
|
|
74
|
-
reason?: any,
|
|
75
|
-
) {
|
|
76
|
-
const listener = () => cb(reason ?? signal.reason)
|
|
77
|
-
signal.addEventListener('abort', listener, { once: true })
|
|
78
|
-
return () => signal.removeEventListener('abort', listener)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export function withTimeout(
|
|
82
|
-
value: Promise<any>,
|
|
83
|
-
timeout: number,
|
|
84
|
-
timeoutError: Error,
|
|
85
|
-
controller?: AbortController,
|
|
86
|
-
) {
|
|
87
|
-
return new Promise((resolve, reject) => {
|
|
88
|
-
const timer = setTimeout(reject, timeout, timeoutError)
|
|
89
|
-
const clearTimer = () => clearTimeout(timer)
|
|
90
|
-
const rejectWithTimeout = (error: any) => {
|
|
91
|
-
reject(error)
|
|
92
|
-
controller?.abort(error)
|
|
93
|
-
}
|
|
94
|
-
value.then(resolve).catch(rejectWithTimeout).finally(clearTimer)
|
|
95
|
-
})
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export function tryCaptureStackTrace(depth = 0) {
|
|
99
|
-
return (
|
|
100
|
-
new Error().stack
|
|
101
|
-
?.split('\n')
|
|
102
|
-
.slice(4 + depth)
|
|
103
|
-
.join('\n') ?? undefined
|
|
104
|
-
)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function isGeneratorFunction(value: any): value is GeneratorFunction {
|
|
108
|
-
return (
|
|
109
|
-
typeof value === 'function' &&
|
|
110
|
-
value.constructor.name === 'GeneratorFunction'
|
|
111
|
-
)
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export function isAsyncGeneratorFunction(
|
|
115
|
-
value: any,
|
|
116
|
-
): value is AsyncGeneratorFunction {
|
|
117
|
-
return (
|
|
118
|
-
typeof value === 'function' &&
|
|
119
|
-
value.constructor.name === 'AsyncGeneratorFunction'
|
|
120
|
-
)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function throwError(message: string, ErrorClass = Error): never {
|
|
124
|
-
throw new ErrorClass(message)
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function once(target: EventTarget, event: string) {
|
|
128
|
-
return new Promise<void>((resolve) => {
|
|
129
|
-
target.addEventListener(event, () => resolve(), { once: true })
|
|
130
|
-
})
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export function onceAborted(signal: AbortSignal) {
|
|
134
|
-
return once(signal, 'abort')
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export function isAbortError(error: any): boolean {
|
|
138
|
-
return error.name === 'AbortError' || error.code === DOMException.ABORT_ERR
|
|
139
|
-
}
|