@squiz/optimization-utils 7.1.1 → 7.2.0-rc1
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/cjs/array/__tests__/chunkify.test.d.ts +2 -0
- package/dist/cjs/array/__tests__/chunkify.test.d.ts.map +1 -0
- package/dist/{array → cjs/array}/chunkify.d.ts +1 -0
- package/dist/cjs/array/chunkify.d.ts.map +1 -0
- package/dist/cjs/array/chunkify.js.map +1 -0
- package/dist/cjs/array/index.d.ts +3 -0
- package/dist/cjs/array/index.d.ts.map +1 -0
- package/dist/cjs/array/index.js.map +1 -0
- package/dist/{array → cjs/array}/unique.d.ts +1 -0
- package/dist/cjs/array/unique.d.ts.map +1 -0
- package/dist/cjs/array/unique.js.map +1 -0
- package/dist/{change-tracker → cjs/change-tracker}/ChangeTracker.d.ts +1 -0
- package/dist/cjs/change-tracker/ChangeTracker.d.ts.map +1 -0
- package/dist/cjs/change-tracker/ChangeTracker.js.map +1 -0
- package/dist/{data-structures → cjs/data-structures}/Result.d.ts +1 -0
- package/dist/cjs/data-structures/Result.d.ts.map +1 -0
- package/dist/cjs/data-structures/Result.js.map +1 -0
- package/dist/cjs/data-structures/index.d.ts +2 -0
- package/dist/cjs/data-structures/index.d.ts.map +1 -0
- package/dist/cjs/data-structures/index.js.map +1 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/{logging → cjs/logging}/Log.d.ts +1 -0
- package/dist/cjs/logging/Log.d.ts.map +1 -0
- package/dist/cjs/logging/Log.js.map +1 -0
- package/dist/{measurement → cjs/measurement}/performance.d.ts +1 -0
- package/dist/cjs/measurement/performance.d.ts.map +1 -0
- package/dist/cjs/measurement/performance.js.map +1 -0
- package/dist/{metadata → cjs/metadata}/CopyReflection.d.ts +1 -0
- package/dist/cjs/metadata/CopyReflection.d.ts.map +1 -0
- package/dist/cjs/metadata/CopyReflection.js.map +1 -0
- package/dist/{object → cjs/object}/getProperty.d.ts +1 -0
- package/dist/cjs/object/getProperty.d.ts.map +1 -0
- package/dist/cjs/object/getProperty.js.map +1 -0
- package/dist/cjs/object/index.d.ts +2 -0
- package/dist/cjs/object/index.d.ts.map +1 -0
- package/dist/cjs/object/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/{promises → cjs/promises}/PromiseMaxConcurrency.d.ts +1 -0
- package/dist/cjs/promises/PromiseMaxConcurrency.d.ts.map +1 -0
- package/dist/cjs/promises/PromiseMaxConcurrency.js.map +1 -0
- package/dist/{queue → cjs/queue}/LRUQueue.d.ts +1 -0
- package/dist/cjs/queue/LRUQueue.d.ts.map +1 -0
- package/dist/cjs/queue/LRUQueue.js.map +1 -0
- package/dist/cjs/queue/LRUQueueFactory.d.ts +5 -0
- package/dist/cjs/queue/LRUQueueFactory.d.ts.map +1 -0
- package/dist/cjs/queue/LRUQueueFactory.js.map +1 -0
- package/dist/{retries → cjs/retries}/Retries.d.ts +1 -0
- package/dist/cjs/retries/Retries.d.ts.map +1 -0
- package/dist/cjs/retries/Retries.js.map +1 -0
- package/dist/{types → cjs/types}/class-utilities-types.d.ts +1 -0
- package/dist/cjs/types/class-utilities-types.d.ts.map +1 -0
- package/dist/cjs/types/class-utilities-types.js.map +1 -0
- package/dist/cjs/types/index.d.ts +2 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/mjs/array/__tests__/chunkify.test.d.ts +2 -0
- package/dist/mjs/array/__tests__/chunkify.test.d.ts.map +1 -0
- package/dist/mjs/array/__tests__/chunkify.test.js +50 -0
- package/dist/mjs/array/__tests__/chunkify.test.js.map +7 -0
- package/dist/mjs/array/chunkify.d.ts +3 -0
- package/dist/mjs/array/chunkify.d.ts.map +1 -0
- package/dist/mjs/array/chunkify.js +16 -0
- package/dist/mjs/array/chunkify.js.map +7 -0
- package/dist/mjs/array/index.d.ts +3 -0
- package/dist/mjs/array/index.d.ts.map +1 -0
- package/dist/mjs/array/index.js +3 -0
- package/dist/mjs/array/index.js.map +7 -0
- package/dist/mjs/array/unique.d.ts +3 -0
- package/dist/mjs/array/unique.d.ts.map +1 -0
- package/dist/mjs/array/unique.js +9 -0
- package/dist/mjs/array/unique.js.map +7 -0
- package/dist/mjs/change-tracker/ChangeTracker.d.ts +13 -0
- package/dist/mjs/change-tracker/ChangeTracker.d.ts.map +1 -0
- package/dist/mjs/change-tracker/ChangeTracker.js +44 -0
- package/dist/mjs/change-tracker/ChangeTracker.js.map +7 -0
- package/dist/mjs/data-structures/Result.d.ts +50 -0
- package/dist/mjs/data-structures/Result.d.ts.map +1 -0
- package/dist/mjs/data-structures/Result.js +84 -0
- package/dist/mjs/data-structures/Result.js.map +7 -0
- package/dist/mjs/data-structures/index.d.ts +2 -0
- package/dist/mjs/data-structures/index.d.ts.map +1 -0
- package/dist/mjs/data-structures/index.js +2 -0
- package/dist/mjs/data-structures/index.js.map +7 -0
- package/dist/mjs/index.d.ts +14 -0
- package/dist/mjs/index.d.ts.map +1 -0
- package/dist/mjs/index.js +14 -0
- package/dist/mjs/index.js.map +7 -0
- package/dist/mjs/logging/Log.d.ts +19 -0
- package/dist/mjs/logging/Log.d.ts.map +1 -0
- package/dist/mjs/logging/Log.js +103 -0
- package/dist/mjs/logging/Log.js.map +7 -0
- package/dist/mjs/measurement/performance.d.ts +6 -0
- package/dist/mjs/measurement/performance.d.ts.map +1 -0
- package/dist/mjs/measurement/performance.js +50 -0
- package/dist/mjs/measurement/performance.js.map +7 -0
- package/dist/mjs/metadata/CopyReflection.d.ts +6 -0
- package/dist/mjs/metadata/CopyReflection.d.ts.map +1 -0
- package/dist/mjs/metadata/CopyReflection.js +21 -0
- package/dist/mjs/metadata/CopyReflection.js.map +7 -0
- package/dist/mjs/object/getProperty.d.ts +2 -0
- package/dist/mjs/object/getProperty.d.ts.map +1 -0
- package/dist/mjs/object/getProperty.js +12 -0
- package/dist/mjs/object/getProperty.js.map +7 -0
- package/dist/mjs/object/index.d.ts +2 -0
- package/dist/mjs/object/index.d.ts.map +1 -0
- package/dist/mjs/object/index.js +2 -0
- package/dist/mjs/object/index.js.map +7 -0
- package/dist/mjs/promises/PromiseMaxConcurrency.d.ts +25 -0
- package/dist/mjs/promises/PromiseMaxConcurrency.d.ts.map +1 -0
- package/dist/mjs/promises/PromiseMaxConcurrency.js +63 -0
- package/dist/mjs/promises/PromiseMaxConcurrency.js.map +7 -0
- package/dist/mjs/queue/LRUQueue.d.ts +32 -0
- package/dist/mjs/queue/LRUQueue.d.ts.map +1 -0
- package/dist/mjs/queue/LRUQueue.js +154 -0
- package/dist/mjs/queue/LRUQueue.js.map +7 -0
- package/dist/mjs/queue/LRUQueueFactory.d.ts +5 -0
- package/dist/mjs/queue/LRUQueueFactory.d.ts.map +1 -0
- package/dist/mjs/queue/LRUQueueFactory.js +20 -0
- package/dist/mjs/queue/LRUQueueFactory.js.map +7 -0
- package/dist/mjs/retries/Retries.d.ts +6 -0
- package/dist/mjs/retries/Retries.d.ts.map +1 -0
- package/dist/mjs/retries/Retries.js +61 -0
- package/dist/mjs/retries/Retries.js.map +7 -0
- package/dist/mjs/types/class-utilities-types.d.ts +10 -0
- package/dist/mjs/types/class-utilities-types.d.ts.map +1 -0
- package/dist/mjs/types/class-utilities-types.js +1 -0
- package/dist/mjs/types/class-utilities-types.js.map +7 -0
- package/dist/mjs/types/index.d.ts +2 -0
- package/dist/mjs/types/index.d.ts.map +1 -0
- package/dist/mjs/types/index.js +2 -0
- package/dist/mjs/types/index.js.map +7 -0
- package/package.json +56 -21
- package/scripts/build.mjs +96 -0
- package/tsconfig-cjs.json +15 -0
- package/tsconfig-mjs.json +24 -0
- package/dist/array/__tests__/chunkify.test.d.ts +0 -1
- package/dist/array/__tests__/chunkify.test.js +0 -52
- package/dist/array/__tests__/chunkify.test.js.map +0 -1
- package/dist/array/chunkify.js.map +0 -1
- package/dist/array/index.d.ts +0 -2
- package/dist/array/index.js.map +0 -1
- package/dist/array/unique.js.map +0 -1
- package/dist/change-tracker/ChangeTracker.js.map +0 -1
- package/dist/data-structures/Result.js.map +0 -1
- package/dist/data-structures/index.d.ts +0 -1
- package/dist/data-structures/index.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.js.map +0 -1
- package/dist/logging/Log.js.map +0 -1
- package/dist/measurement/performance.js.map +0 -1
- package/dist/metadata/CopyReflection.js.map +0 -1
- package/dist/object/getProperty.js.map +0 -1
- package/dist/object/index.d.ts +0 -1
- package/dist/object/index.js.map +0 -1
- package/dist/promises/PromiseMaxConcurrency.js.map +0 -1
- package/dist/queue/LRUQueue.js.map +0 -1
- package/dist/queue/LRUQueueFactory.d.ts +0 -4
- package/dist/queue/LRUQueueFactory.js.map +0 -1
- package/dist/retries/Retries.js.map +0 -1
- package/dist/types/class-utilities-types.js.map +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.js.map +0 -1
- package/tsconfig-package.json +0 -4
- /package/dist/{array → cjs/array}/chunkify.js +0 -0
- /package/dist/{array → cjs/array}/index.js +0 -0
- /package/dist/{array → cjs/array}/unique.js +0 -0
- /package/dist/{change-tracker → cjs/change-tracker}/ChangeTracker.js +0 -0
- /package/dist/{data-structures → cjs/data-structures}/Result.js +0 -0
- /package/dist/{data-structures → cjs/data-structures}/index.js +0 -0
- /package/dist/{index.js → cjs/index.js} +0 -0
- /package/dist/{logging → cjs/logging}/Log.js +0 -0
- /package/dist/{measurement → cjs/measurement}/performance.js +0 -0
- /package/dist/{metadata → cjs/metadata}/CopyReflection.js +0 -0
- /package/dist/{object → cjs/object}/getProperty.js +0 -0
- /package/dist/{object → cjs/object}/index.js +0 -0
- /package/dist/{promises → cjs/promises}/PromiseMaxConcurrency.js +0 -0
- /package/dist/{queue → cjs/queue}/LRUQueue.js +0 -0
- /package/dist/{queue → cjs/queue}/LRUQueueFactory.js +0 -0
- /package/dist/{retries → cjs/retries}/Retries.js +0 -0
- /package/dist/{types → cjs/types}/class-utilities-types.js +0 -0
- /package/dist/{types → cjs/types}/index.js +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export type ResultType = 'success' | 'failure';
|
|
2
|
+
export type ResultFailure<ThisType extends Result<unknown, unknown>, TError> = Omit<ThisType, 'data' | 'error' | 'type'> & {
|
|
3
|
+
error: TError;
|
|
4
|
+
data: never;
|
|
5
|
+
type: 'failure';
|
|
6
|
+
};
|
|
7
|
+
export type ResultSuccess<ThisType extends Result<unknown, unknown>, TData> = Omit<ThisType, 'data' | 'error' | 'type'> & {
|
|
8
|
+
data: TData;
|
|
9
|
+
error: never;
|
|
10
|
+
type: 'success';
|
|
11
|
+
};
|
|
12
|
+
export declare class Result<const TData, const TError = Error> {
|
|
13
|
+
readonly type: ResultType;
|
|
14
|
+
readonly data?: TData;
|
|
15
|
+
readonly error?: TError;
|
|
16
|
+
private constructor();
|
|
17
|
+
static success<const U>(data?: U): Result<U, never>;
|
|
18
|
+
static failure<const TError>(error: TError): Result<never, TError>;
|
|
19
|
+
isSuccess<ThisType extends Result<TData, TError>>(this: ThisType): this is ResultSuccess<ThisType, TData>;
|
|
20
|
+
isFailure<ThisType extends Result<TData, TError>>(this: ThisType): this is ResultFailure<ThisType, TError>;
|
|
21
|
+
/**
|
|
22
|
+
* Type guard: checks if the error in this Result is an instance of the provided
|
|
23
|
+
* error constructors or equals any of the provided error values. When it returns true,
|
|
24
|
+
* the result is narrowed to `Result<never, TErrorGuard>`.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const result = Result.failure(new TypeError('Invalid type'));
|
|
29
|
+
* if (result.isErrorInstanceOf(TypeError)) {
|
|
30
|
+
* result.error; // narrowed to TypeError
|
|
31
|
+
* }
|
|
32
|
+
* result.isErrorInstanceOf(TypeError, RangeError); // true -> error is TypeError | RangeError
|
|
33
|
+
*
|
|
34
|
+
* const strResult = Result.failure('MISSING_QUERY_EXECUTION_ID');
|
|
35
|
+
* if (strResult.isErrorInstanceOf('MISSING_QUERY_EXECUTION_ID')) {
|
|
36
|
+
* strResult.error; // narrowed to 'MISSING_QUERY_EXECUTION_ID'
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
isErrorInstanceOf<ThisType extends Result<TData, TError>, TErrorGuard extends TError>(this: ThisType, ...errorTypes: Array<(new (...args: Array<any>) => TErrorGuard) | TErrorGuard>): this is ResultFailure<ThisType, TErrorGuard>;
|
|
41
|
+
throw(): never | void;
|
|
42
|
+
unwrap(): TData;
|
|
43
|
+
match<TResult, TErrorResult>(handlers: {
|
|
44
|
+
success: (data: TData, resultThis: Result<TData, TError>) => TResult;
|
|
45
|
+
failure: (error: TError, resultThis: Result<TData, TError>) => TErrorResult;
|
|
46
|
+
}): TResult | TErrorResult;
|
|
47
|
+
toFailure(): Result<never, TError>;
|
|
48
|
+
toSuccess(): Result<TData, never>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=Result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Result.d.ts","sourceRoot":"","sources":["../../../src/data-structures/Result.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,aAAa,CACvB,QAAQ,SAAS,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EACzC,MAAM,IACJ,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,QAAQ,SAAS,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EACzC,KAAK,IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG;IAC9C,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,qBAAa,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK;IACnD,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,IAAI,CAAC,EAAE,KAAK,CAAC;IAC7B,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;IAE/B,OAAO;IAMP,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAInD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;IAIlE,SAAS,CAAC,QAAQ,SAAS,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAC9C,IAAI,EAAE,QAAQ,GACb,IAAI,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;IAIzC,SAAS,CAAC,QAAQ,SAAS,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAC9C,IAAI,EAAE,QAAQ,GACb,IAAI,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC;IAI1C;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CACf,QAAQ,SAAS,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EACtC,WAAW,SAAS,MAAM,EAE1B,IAAI,EAAE,QAAQ,EACd,GAAG,UAAU,EAAE,KAAK,CAElB,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,GAAG,WAAW,CACzD,GACA,IAAI,IAAI,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC;IAa/C,KAAK,IAAI,KAAK,GAAG,IAAI;IAMrB,MAAM,IAAI,KAAK;IAQf,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE;QACrC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;QACrE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY,CAAC;KAC7E,GAAG,OAAO,GAAG,YAAY;IAQ1B,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;IAQlC,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;CAOlC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
class Result {
|
|
2
|
+
type;
|
|
3
|
+
data;
|
|
4
|
+
error;
|
|
5
|
+
constructor(type, data, error) {
|
|
6
|
+
this.type = type;
|
|
7
|
+
this.data = data;
|
|
8
|
+
this.error = error;
|
|
9
|
+
}
|
|
10
|
+
static success(data) {
|
|
11
|
+
return new Result("success", data, void 0);
|
|
12
|
+
}
|
|
13
|
+
static failure(error) {
|
|
14
|
+
return new Result("failure", void 0, error);
|
|
15
|
+
}
|
|
16
|
+
isSuccess() {
|
|
17
|
+
return this.type === "success";
|
|
18
|
+
}
|
|
19
|
+
isFailure() {
|
|
20
|
+
return this.type === "failure";
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Type guard: checks if the error in this Result is an instance of the provided
|
|
24
|
+
* error constructors or equals any of the provided error values. When it returns true,
|
|
25
|
+
* the result is narrowed to `Result<never, TErrorGuard>`.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const result = Result.failure(new TypeError('Invalid type'));
|
|
30
|
+
* if (result.isErrorInstanceOf(TypeError)) {
|
|
31
|
+
* result.error; // narrowed to TypeError
|
|
32
|
+
* }
|
|
33
|
+
* result.isErrorInstanceOf(TypeError, RangeError); // true -> error is TypeError | RangeError
|
|
34
|
+
*
|
|
35
|
+
* const strResult = Result.failure('MISSING_QUERY_EXECUTION_ID');
|
|
36
|
+
* if (strResult.isErrorInstanceOf('MISSING_QUERY_EXECUTION_ID')) {
|
|
37
|
+
* strResult.error; // narrowed to 'MISSING_QUERY_EXECUTION_ID'
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
isErrorInstanceOf(...errorTypes) {
|
|
42
|
+
return errorTypes.some((errorType) => {
|
|
43
|
+
if (typeof errorType === "function") {
|
|
44
|
+
return this.error instanceof errorType;
|
|
45
|
+
}
|
|
46
|
+
return this.error === errorType;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
throw() {
|
|
50
|
+
if (this.error) {
|
|
51
|
+
throw this.error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
unwrap() {
|
|
55
|
+
if (this.isFailure()) {
|
|
56
|
+
throw this.error;
|
|
57
|
+
} else {
|
|
58
|
+
return this.data;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
match(handlers) {
|
|
62
|
+
if (this.isSuccess()) {
|
|
63
|
+
return handlers.success(this.data, this);
|
|
64
|
+
} else {
|
|
65
|
+
return handlers.failure(this.error, this);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
toFailure() {
|
|
69
|
+
if (this.isSuccess()) {
|
|
70
|
+
throw new Error("Cannot convert a successful result to a failure result");
|
|
71
|
+
}
|
|
72
|
+
return Result.failure(this.error);
|
|
73
|
+
}
|
|
74
|
+
toSuccess() {
|
|
75
|
+
if (this.isFailure()) {
|
|
76
|
+
throw new Error("Cannot convert a failed result to a success result");
|
|
77
|
+
}
|
|
78
|
+
return Result.success(this.data);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
Result
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=Result.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/data-structures/Result.ts"],
|
|
4
|
+
"sourcesContent": ["export type ResultType = 'success' | 'failure';\n\nexport type ResultFailure<\n ThisType extends Result<unknown, unknown>,\n TError,\n> = Omit<ThisType, 'data' | 'error' | 'type'> & {\n error: TError;\n data: never;\n type: 'failure';\n};\n\nexport type ResultSuccess<\n ThisType extends Result<unknown, unknown>,\n TData,\n> = Omit<ThisType, 'data' | 'error' | 'type'> & {\n data: TData;\n error: never;\n type: 'success';\n};\n\nexport class Result<const TData, const TError = Error> {\n public readonly type: ResultType;\n public readonly data?: TData;\n public readonly error?: TError;\n\n private constructor(type: ResultType, data?: TData, error?: TError) {\n this.type = type;\n this.data = data;\n this.error = error;\n }\n\n static success<const U>(data?: U): Result<U, never> {\n return new Result<U, never>('success', data, undefined);\n }\n\n static failure<const TError>(error: TError): Result<never, TError> {\n return new Result<never, TError>('failure', undefined, error);\n }\n\n isSuccess<ThisType extends Result<TData, TError>>(\n this: ThisType,\n ): this is ResultSuccess<ThisType, TData> {\n return this.type === 'success';\n }\n\n isFailure<ThisType extends Result<TData, TError>>(\n this: ThisType,\n ): this is ResultFailure<ThisType, TError> {\n return this.type === 'failure';\n }\n\n /**\n * Type guard: checks if the error in this Result is an instance of the provided\n * error constructors or equals any of the provided error values. When it returns true,\n * the result is narrowed to `Result<never, TErrorGuard>`.\n *\n * @example\n * ```typescript\n * const result = Result.failure(new TypeError('Invalid type'));\n * if (result.isErrorInstanceOf(TypeError)) {\n * result.error; // narrowed to TypeError\n * }\n * result.isErrorInstanceOf(TypeError, RangeError); // true -> error is TypeError | RangeError\n *\n * const strResult = Result.failure('MISSING_QUERY_EXECUTION_ID');\n * if (strResult.isErrorInstanceOf('MISSING_QUERY_EXECUTION_ID')) {\n * strResult.error; // narrowed to 'MISSING_QUERY_EXECUTION_ID'\n * }\n * ```\n */\n isErrorInstanceOf<\n ThisType extends Result<TData, TError>,\n TErrorGuard extends TError,\n >(\n this: ThisType,\n ...errorTypes: Array<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (new (...args: Array<any>) => TErrorGuard) | TErrorGuard\n >\n ): this is ResultFailure<ThisType, TErrorGuard> {\n return errorTypes.some((errorType) => {\n if (typeof errorType === 'function') {\n return (\n this.error instanceof\n (errorType as new (...args: Array<unknown>) => TErrorGuard)\n );\n }\n\n return this.error === errorType;\n });\n }\n\n throw(): never | void {\n if (this.error) {\n throw this.error;\n }\n }\n\n unwrap(): TData {\n if (this.isFailure()) {\n throw this.error;\n } else {\n return this.data!;\n }\n }\n\n match<TResult, TErrorResult>(handlers: {\n success: (data: TData, resultThis: Result<TData, TError>) => TResult;\n failure: (error: TError, resultThis: Result<TData, TError>) => TErrorResult;\n }): TResult | TErrorResult {\n if (this.isSuccess()) {\n return handlers.success(this.data!, this);\n } else {\n return handlers.failure(this.error!, this);\n }\n }\n\n toFailure(): Result<never, TError> {\n if (this.isSuccess()) {\n throw new Error('Cannot convert a successful result to a failure result');\n }\n\n return Result.failure(this.error!);\n }\n\n toSuccess(): Result<TData, never> {\n if (this.isFailure()) {\n throw new Error('Cannot convert a failed result to a success result');\n }\n\n return Result.success(this.data!);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAoBO,MAAM,OAA0C;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,MAAkB,MAAc,OAAgB;AAClE,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,QAAiB,MAA4B;AAClD,WAAO,IAAI,OAAiB,WAAW,MAAM,MAAS;AAAA,EACxD;AAAA,EAEA,OAAO,QAAsB,OAAsC;AACjE,WAAO,IAAI,OAAsB,WAAW,QAAW,KAAK;AAAA,EAC9D;AAAA,EAEA,YAE0C;AACxC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,YAE2C;AACzC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,qBAKK,YAI2C;AAC9C,WAAO,WAAW,KAAK,CAAC,cAAc;AACpC,UAAI,OAAO,cAAc,YAAY;AACnC,eACE,KAAK,iBACJ;AAAA,MAEL;AAEA,aAAO,KAAK,UAAU;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,QAAsB;AACpB,QAAI,KAAK,OAAO;AACd,YAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EAEA,SAAgB;AACd,QAAI,KAAK,UAAU,GAAG;AACpB,YAAM,KAAK;AAAA,IACb,OAAO;AACL,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAA6B,UAGF;AACzB,QAAI,KAAK,UAAU,GAAG;AACpB,aAAO,SAAS,QAAQ,KAAK,MAAO,IAAI;AAAA,IAC1C,OAAO;AACL,aAAO,SAAS,QAAQ,KAAK,OAAQ,IAAI;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,YAAmC;AACjC,QAAI,KAAK,UAAU,GAAG;AACpB,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAEA,WAAO,OAAO,QAAQ,KAAK,KAAM;AAAA,EACnC;AAAA,EAEA,YAAkC;AAChC,QAAI,KAAK,UAAU,GAAG;AACpB,YAAM,IAAI,MAAM,oDAAoD;AAAA,IACtE;AAEA,WAAO,OAAO,QAAQ,KAAK,IAAK;AAAA,EAClC;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data-structures/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './types/class-utilities-types.js';
|
|
2
|
+
export * from './retries/Retries.js';
|
|
3
|
+
export * from './queue/LRUQueue.js';
|
|
4
|
+
export * from './queue/LRUQueueFactory.js';
|
|
5
|
+
export * from './promises/PromiseMaxConcurrency.js';
|
|
6
|
+
export * from './object/getProperty.js';
|
|
7
|
+
export * from './metadata/CopyReflection.js';
|
|
8
|
+
export * from './measurement/performance.js';
|
|
9
|
+
export * from './logging/Log.js';
|
|
10
|
+
export * from './data-structures/Result.js';
|
|
11
|
+
export * from './change-tracker/ChangeTracker.js';
|
|
12
|
+
export * from './array/chunkify.js';
|
|
13
|
+
export * from './array/unique.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./types/class-utilities-types.js";
|
|
2
|
+
export * from "./retries/Retries.js";
|
|
3
|
+
export * from "./queue/LRUQueue.js";
|
|
4
|
+
export * from "./queue/LRUQueueFactory.js";
|
|
5
|
+
export * from "./promises/PromiseMaxConcurrency.js";
|
|
6
|
+
export * from "./object/getProperty.js";
|
|
7
|
+
export * from "./metadata/CopyReflection.js";
|
|
8
|
+
export * from "./measurement/performance.js";
|
|
9
|
+
export * from "./logging/Log.js";
|
|
10
|
+
export * from "./data-structures/Result.js";
|
|
11
|
+
export * from "./change-tracker/ChangeTracker.js";
|
|
12
|
+
export * from "./array/chunkify.js";
|
|
13
|
+
export * from "./array/unique.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './types/class-utilities-types';\nexport * from './retries/Retries';\nexport * from './queue/LRUQueue';\nexport * from './queue/LRUQueueFactory';\nexport * from './promises/PromiseMaxConcurrency';\nexport * from './object/getProperty';\nexport * from './metadata/CopyReflection';\nexport * from './measurement/performance';\nexport * from './logging/Log';\nexport * from './data-structures/Result';\nexport * from './change-tracker/ChangeTracker';\nexport * from './array/chunkify';\nexport * from './array/unique';\n"],
|
|
5
|
+
"mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Logger } from '@squiz/optimization-logger';
|
|
2
|
+
type MetadataCallback = (...args: Array<any>) => Record<string, unknown>;
|
|
3
|
+
type ErrorCallback = (error: unknown) => Record<string, unknown>;
|
|
4
|
+
type SuccessCallback = (result: any, ...args: Array<any>) => Record<string, unknown>;
|
|
5
|
+
export type LogOptions = {
|
|
6
|
+
before?: string;
|
|
7
|
+
success?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
metadata?: MetadataCallback;
|
|
10
|
+
errorMetadata?: ErrorCallback;
|
|
11
|
+
successMetadata?: SuccessCallback;
|
|
12
|
+
loggingLevel?: keyof Logger;
|
|
13
|
+
loggingSuccessLevel?: keyof Logger;
|
|
14
|
+
loggingErrorLevel?: keyof Logger;
|
|
15
|
+
loggingResultFailureAsError?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare function Log(options: LogOptions): MethodDecorator;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=Log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Log.d.ts","sourceRoot":"","sources":["../../../src/logging/Log.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAKlE,KAAK,gBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACzE,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjE,KAAK,eAAe,GAAG,CAErB,MAAM,EAAE,GAAG,EAEX,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA+F7B,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,MAAM,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,wBAAgB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,CAkCxD"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import util from "node:util";
|
|
2
|
+
import { inject } from "inversify";
|
|
3
|
+
import { createLogger, Logger } from "@squiz/optimization-logger";
|
|
4
|
+
import { Result } from "../data-structures/index.js";
|
|
5
|
+
import { CopyReflection } from "../metadata/CopyReflection.js";
|
|
6
|
+
function _log(callback, {
|
|
7
|
+
args,
|
|
8
|
+
logOptions,
|
|
9
|
+
propertyKey
|
|
10
|
+
}, logger) {
|
|
11
|
+
const defaultError = "Error while executing the method";
|
|
12
|
+
const metadata = logOptions.metadata?.(...args);
|
|
13
|
+
const loggingLevel = logOptions.loggingLevel ?? "debug";
|
|
14
|
+
const successLoggingLevel = logOptions.loggingSuccessLevel ?? "debug";
|
|
15
|
+
const errorLoggingLevel = logOptions.loggingErrorLevel ?? "error";
|
|
16
|
+
const method = propertyKey;
|
|
17
|
+
const logError = (resultOrError) => {
|
|
18
|
+
const isResultFailure = resultOrError instanceof Result && resultOrError.isFailure();
|
|
19
|
+
if (isResultFailure && !logOptions.loggingResultFailureAsError) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const error = isResultFailure ? resultOrError.error : resultOrError;
|
|
23
|
+
const errorMetadata = logOptions.errorMetadata?.(error);
|
|
24
|
+
logger[errorLoggingLevel]({
|
|
25
|
+
message: logOptions.error ?? defaultError,
|
|
26
|
+
error,
|
|
27
|
+
method,
|
|
28
|
+
...metadata,
|
|
29
|
+
...errorMetadata
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
const logAfter = (v) => {
|
|
33
|
+
if (v instanceof Result && v.isFailure()) {
|
|
34
|
+
logError(v);
|
|
35
|
+
} else if (logOptions.success) {
|
|
36
|
+
const successMetadata = logOptions.successMetadata?.(v, ...args);
|
|
37
|
+
logger[successLoggingLevel]({
|
|
38
|
+
message: logOptions.success,
|
|
39
|
+
method,
|
|
40
|
+
...metadata,
|
|
41
|
+
...successMetadata
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
if (logOptions.before) {
|
|
46
|
+
logger[loggingLevel]({
|
|
47
|
+
message: logOptions.before,
|
|
48
|
+
method,
|
|
49
|
+
...metadata
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
let result;
|
|
53
|
+
try {
|
|
54
|
+
result = callback();
|
|
55
|
+
if (!util.types.isPromise(result)) {
|
|
56
|
+
logAfter(result);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
logError(e);
|
|
61
|
+
throw e;
|
|
62
|
+
}
|
|
63
|
+
return result.catch((e) => {
|
|
64
|
+
logError(e);
|
|
65
|
+
throw e;
|
|
66
|
+
}).then((v) => {
|
|
67
|
+
logAfter(v);
|
|
68
|
+
return v;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function Log(options) {
|
|
72
|
+
return function(target, propertyKey, descriptor) {
|
|
73
|
+
const originalMethod = descriptor.value;
|
|
74
|
+
const injection = inject(Logger);
|
|
75
|
+
const loggerSymbol = /* @__PURE__ */ Symbol("logger");
|
|
76
|
+
if (!Reflect.has(target, loggerSymbol)) {
|
|
77
|
+
injection(target, loggerSymbol);
|
|
78
|
+
}
|
|
79
|
+
descriptor.value = function(...args) {
|
|
80
|
+
const logger = this[loggerSymbol] || createLogger();
|
|
81
|
+
return _log(
|
|
82
|
+
() => {
|
|
83
|
+
return originalMethod.apply(this, args);
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
logOptions: options,
|
|
87
|
+
propertyKey,
|
|
88
|
+
args
|
|
89
|
+
},
|
|
90
|
+
logger
|
|
91
|
+
);
|
|
92
|
+
};
|
|
93
|
+
CopyReflection.copyPropertyMetadata(
|
|
94
|
+
originalMethod,
|
|
95
|
+
descriptor.value,
|
|
96
|
+
propertyKey
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export {
|
|
101
|
+
Log
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=Log.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/logging/Log.ts"],
|
|
4
|
+
"sourcesContent": ["import util from 'node:util';\nimport { inject } from 'inversify';\nimport { createLogger, Logger } from '@squiz/optimization-logger';\nimport { Result } from '../data-structures';\nimport { CopyReflection } from '../metadata/CopyReflection';\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\ntype MetadataCallback = (...args: Array<any>) => Record<string, unknown>;\ntype ErrorCallback = (error: unknown) => Record<string, unknown>;\ntype SuccessCallback = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: Array<any>\n) => Record<string, unknown>;\n\nfunction _log<T>(\n callback: () => T | Promise<T>,\n {\n args,\n logOptions,\n propertyKey,\n }: {\n logOptions: LogOptions;\n args: Array<unknown>;\n propertyKey: string | symbol;\n },\n logger: Logger,\n): T | Promise<T> {\n const defaultError = 'Error while executing the method';\n const metadata = logOptions.metadata?.(...args);\n const loggingLevel = logOptions.loggingLevel ?? 'debug';\n const successLoggingLevel = logOptions.loggingSuccessLevel ?? 'debug';\n const errorLoggingLevel = logOptions.loggingErrorLevel ?? 'error';\n\n const method = propertyKey;\n\n const logError = (resultOrError?: unknown): void => {\n const isResultFailure =\n resultOrError instanceof Result && resultOrError.isFailure();\n\n if (isResultFailure && !logOptions.loggingResultFailureAsError) {\n return;\n }\n\n const error = isResultFailure ? resultOrError.error : resultOrError;\n\n const errorMetadata = logOptions.errorMetadata?.(error);\n\n logger[errorLoggingLevel]({\n message: logOptions.error ?? defaultError,\n error,\n method,\n ...metadata,\n ...errorMetadata,\n });\n };\n\n const logAfter = (v: unknown): void => {\n if (v instanceof Result && v.isFailure()) {\n logError(v);\n } else if (logOptions.success) {\n const successMetadata = logOptions.successMetadata?.(v, ...args);\n\n logger[successLoggingLevel]({\n message: logOptions.success,\n method,\n ...metadata,\n ...successMetadata,\n });\n }\n };\n\n if (logOptions.before) {\n logger[loggingLevel]({\n message: logOptions.before,\n method,\n ...metadata,\n });\n }\n\n let result: T | Promise<T>;\n\n try {\n result = callback();\n\n if (!util.types.isPromise(result)) {\n logAfter(result);\n\n return result;\n }\n } catch (e) {\n logError(e);\n\n throw e;\n }\n\n return result\n .catch((e) => {\n logError(e);\n\n throw e;\n })\n .then((v) => {\n logAfter(v);\n return v;\n });\n}\n\nexport type LogOptions = {\n before?: string;\n success?: string;\n error?: string;\n metadata?: MetadataCallback;\n errorMetadata?: ErrorCallback;\n successMetadata?: SuccessCallback;\n loggingLevel?: keyof Logger;\n loggingSuccessLevel?: keyof Logger;\n loggingErrorLevel?: keyof Logger;\n loggingResultFailureAsError?: boolean;\n};\n\nexport function Log(options: LogOptions): MethodDecorator {\n return function (target, propertyKey, descriptor: PropertyDescriptor): void {\n const originalMethod = descriptor.value;\n\n const injection = inject(Logger);\n const loggerSymbol = Symbol('logger');\n\n if (!Reflect.has(target, loggerSymbol)) {\n injection(target, loggerSymbol);\n }\n\n descriptor.value = function (...args: Array<unknown>): unknown {\n const logger =\n (this as { [loggerSymbol]: Logger })[loggerSymbol] || createLogger();\n\n return _log(\n () => {\n return originalMethod.apply(this, args);\n },\n {\n logOptions: options,\n propertyKey,\n args,\n },\n logger,\n );\n };\n\n CopyReflection.copyPropertyMetadata(\n originalMethod,\n descriptor.value,\n propertyKey,\n );\n };\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,UAAU;AACjB,SAAS,cAAc;AACvB,SAAS,cAAc,cAAc;AACrC,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAY/B,SAAS,KACP,UACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AACF,GAKA,QACgB;AAChB,QAAM,eAAe;AACrB,QAAM,WAAW,WAAW,WAAW,GAAG,IAAI;AAC9C,QAAM,eAAe,WAAW,gBAAgB;AAChD,QAAM,sBAAsB,WAAW,uBAAuB;AAC9D,QAAM,oBAAoB,WAAW,qBAAqB;AAE1D,QAAM,SAAS;AAEf,QAAM,WAAW,CAAC,kBAAkC;AAClD,UAAM,kBACJ,yBAAyB,UAAU,cAAc,UAAU;AAE7D,QAAI,mBAAmB,CAAC,WAAW,6BAA6B;AAC9D;AAAA,IACF;AAEA,UAAM,QAAQ,kBAAkB,cAAc,QAAQ;AAEtD,UAAM,gBAAgB,WAAW,gBAAgB,KAAK;AAEtD,WAAO,iBAAiB,EAAE;AAAA,MACxB,SAAS,WAAW,SAAS;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,MAAqB;AACrC,QAAI,aAAa,UAAU,EAAE,UAAU,GAAG;AACxC,eAAS,CAAC;AAAA,IACZ,WAAW,WAAW,SAAS;AAC7B,YAAM,kBAAkB,WAAW,kBAAkB,GAAG,GAAG,IAAI;AAE/D,aAAO,mBAAmB,EAAE;AAAA,QAC1B,SAAS,WAAW;AAAA,QACpB;AAAA,QACA,GAAG;AAAA,QACH,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,WAAO,YAAY,EAAE;AAAA,MACnB,SAAS,WAAW;AAAA,MACpB;AAAA,MACA,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,MAAI;AAEJ,MAAI;AACF,aAAS,SAAS;AAElB,QAAI,CAAC,KAAK,MAAM,UAAU,MAAM,GAAG;AACjC,eAAS,MAAM;AAEf,aAAO;AAAA,IACT;AAAA,EACF,SAAS,GAAG;AACV,aAAS,CAAC;AAEV,UAAM;AAAA,EACR;AAEA,SAAO,OACJ,MAAM,CAAC,MAAM;AACZ,aAAS,CAAC;AAEV,UAAM;AAAA,EACR,CAAC,EACA,KAAK,CAAC,MAAM;AACX,aAAS,CAAC;AACV,WAAO;AAAA,EACT,CAAC;AACL;AAeO,SAAS,IAAI,SAAsC;AACxD,SAAO,SAAU,QAAQ,aAAa,YAAsC;AAC1E,UAAM,iBAAiB,WAAW;AAElC,UAAM,YAAY,OAAO,MAAM;AAC/B,UAAM,eAAe,uBAAO,QAAQ;AAEpC,QAAI,CAAC,QAAQ,IAAI,QAAQ,YAAY,GAAG;AACtC,gBAAU,QAAQ,YAAY;AAAA,IAChC;AAEA,eAAW,QAAQ,YAAa,MAA+B;AAC7D,YAAM,SACH,KAAoC,YAAY,KAAK,aAAa;AAErE,aAAO;AAAA,QACL,MAAM;AACJ,iBAAO,eAAe,MAAM,MAAM,IAAI;AAAA,QACxC;AAAA,QACA;AAAA,UACE,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,mBAAe;AAAA,MACb;AAAA,MACA,WAAW;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Logger } from '@squiz/optimization-logger';
|
|
2
|
+
export declare const createPerf: (logger?: Logger) => <T>(callback: () => T | Promise<T>, label: string) => T | Promise<T>;
|
|
3
|
+
export declare function perf<T>(callback: () => T, label: string, logger?: Logger): T;
|
|
4
|
+
export declare function perf<T>(callback: () => Promise<T>, label: string, logger?: Logger): Promise<T>;
|
|
5
|
+
export declare function LogPerf(customLabel?: string): MethodDecorator;
|
|
6
|
+
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../../src/measurement/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAIlE,eAAO,MAAM,UAAU,GACpB,SAAS,MAAM,MACf,CAAC,EAAE,UAAU,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,MAAM,KAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAClC,CAAC;AAElC,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AAC9E,wBAAgB,IAAI,CAAC,CAAC,EACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAAC;AAmCd,wBAAgB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,CA2B7D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createLogger, Logger } from "@squiz/optimization-logger";
|
|
2
|
+
import * as util from "node:util";
|
|
3
|
+
import { inject } from "inversify";
|
|
4
|
+
const createPerf = (logger) => (callback, label) => perf(callback, label, logger);
|
|
5
|
+
function perf(callback, label, logger) {
|
|
6
|
+
const start = performance.now();
|
|
7
|
+
logger = logger ? logger : createLogger();
|
|
8
|
+
const result = callback();
|
|
9
|
+
const logPerformance = () => {
|
|
10
|
+
const end = performance.now();
|
|
11
|
+
const duration = (end - start).toFixed(2);
|
|
12
|
+
logger.debug({
|
|
13
|
+
message: `Execution of ${label} took ${duration} ms`,
|
|
14
|
+
duration,
|
|
15
|
+
label
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
if (util.types.isPromise(result)) {
|
|
19
|
+
return result.finally(() => {
|
|
20
|
+
logPerformance();
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
logPerformance();
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
function LogPerf(customLabel) {
|
|
27
|
+
return function(target, propertyKey, descriptor) {
|
|
28
|
+
const originalMethod = descriptor.value;
|
|
29
|
+
const label = customLabel ? customLabel : `${target.constructor.name}.${propertyKey}`;
|
|
30
|
+
const injection = inject(Logger);
|
|
31
|
+
const loggerSymbol = /* @__PURE__ */ Symbol("logger");
|
|
32
|
+
injection(target, loggerSymbol);
|
|
33
|
+
descriptor.value = function(...args) {
|
|
34
|
+
const logger = this[loggerSymbol];
|
|
35
|
+
return perf(
|
|
36
|
+
() => {
|
|
37
|
+
return originalMethod.apply(this, args);
|
|
38
|
+
},
|
|
39
|
+
label,
|
|
40
|
+
logger
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
LogPerf,
|
|
47
|
+
createPerf,
|
|
48
|
+
perf
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/measurement/performance.ts"],
|
|
4
|
+
"sourcesContent": ["import { createLogger, Logger } from '@squiz/optimization-logger';\nimport * as util from 'node:util';\nimport { inject } from 'inversify';\n\nexport const createPerf =\n (logger?: Logger) =>\n <T>(callback: () => T | Promise<T>, label: string): T | Promise<T> =>\n perf(callback, label, logger);\n\nexport function perf<T>(callback: () => T, label: string, logger?: Logger): T;\nexport function perf<T>(\n callback: () => Promise<T>,\n label: string,\n logger?: Logger,\n): Promise<T>;\n\nexport function perf<T>(\n callback: () => T | Promise<T>,\n label: string,\n logger?: Logger,\n): T | Promise<T> {\n const start = performance.now();\n\n logger = logger ? logger : createLogger();\n\n const result = callback();\n\n const logPerformance = () => {\n const end = performance.now();\n const duration = (end - start).toFixed(2);\n\n logger.debug({\n message: `Execution of ${label} took ${duration} ms`,\n duration,\n label,\n });\n };\n\n if (util.types.isPromise(result)) {\n return result.finally(() => {\n logPerformance();\n });\n }\n\n logPerformance();\n\n return result;\n}\n\nexport function LogPerf(customLabel?: string): MethodDecorator {\n return function (target, propertyKey, descriptor: PropertyDescriptor): void {\n const originalMethod = descriptor.value;\n\n const label = customLabel\n ? customLabel\n : `${target.constructor.name}.${propertyKey as string}`;\n\n const injection = inject(Logger);\n const loggerSymbol = Symbol('logger');\n\n injection(target, loggerSymbol);\n\n descriptor.value = function (...args: Array<unknown>): unknown {\n const logger = (this as { [loggerSymbol]: Logger | undefined })[\n loggerSymbol\n ];\n\n return perf(\n () => {\n return originalMethod.apply(this, args);\n },\n label,\n logger,\n );\n };\n };\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,cAAc,cAAc;AACrC,YAAY,UAAU;AACtB,SAAS,cAAc;AAEhB,MAAM,aACX,CAAC,WACD,CAAI,UAAgC,UAClC,KAAK,UAAU,OAAO,MAAM;AASzB,SAAS,KACd,UACA,OACA,QACgB;AAChB,QAAM,QAAQ,YAAY,IAAI;AAE9B,WAAS,SAAS,SAAS,aAAa;AAExC,QAAM,SAAS,SAAS;AAExB,QAAM,iBAAiB,MAAM;AAC3B,UAAM,MAAM,YAAY,IAAI;AAC5B,UAAM,YAAY,MAAM,OAAO,QAAQ,CAAC;AAExC,WAAO,MAAM;AAAA,MACX,SAAS,gBAAgB,KAAK,SAAS,QAAQ;AAAA,MAC/C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,KAAK,MAAM,UAAU,MAAM,GAAG;AAChC,WAAO,OAAO,QAAQ,MAAM;AAC1B,qBAAe;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,iBAAe;AAEf,SAAO;AACT;AAEO,SAAS,QAAQ,aAAuC;AAC7D,SAAO,SAAU,QAAQ,aAAa,YAAsC;AAC1E,UAAM,iBAAiB,WAAW;AAElC,UAAM,QAAQ,cACV,cACA,GAAG,OAAO,YAAY,IAAI,IAAI,WAAqB;AAEvD,UAAM,YAAY,OAAO,MAAM;AAC/B,UAAM,eAAe,uBAAO,QAAQ;AAEpC,cAAU,QAAQ,YAAY;AAE9B,eAAW,QAAQ,YAAa,MAA+B;AAC7D,YAAM,SAAU,KACd,YACF;AAEA,aAAO;AAAA,QACL,MAAM;AACJ,iBAAO,eAAe,MAAM,MAAM,IAAI;AAAA,QACxC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
export declare class CopyReflection {
|
|
3
|
+
static copyMetadata(source: object, target: object): void;
|
|
4
|
+
static copyPropertyMetadata(source: object, target: object, propertyKey: string | symbol): void;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=CopyReflection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyReflection.d.ts","sourceRoot":"","sources":["../../../src/metadata/CopyReflection.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,qBAAa,cAAc;WACX,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;WAUlD,oBAAoB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,IAAI;CASR"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
class CopyReflection {
|
|
3
|
+
static copyMetadata(source, target) {
|
|
4
|
+
const metadataKeys = Reflect.getMetadataKeys(source);
|
|
5
|
+
metadataKeys.forEach((key) => {
|
|
6
|
+
const metadata = Reflect.getMetadata(key, source);
|
|
7
|
+
Reflect.defineMetadata(key, metadata, target);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
static copyPropertyMetadata(source, target, propertyKey) {
|
|
11
|
+
const metadataKeys = Reflect.getMetadataKeys(source, propertyKey);
|
|
12
|
+
metadataKeys.forEach((key) => {
|
|
13
|
+
const metadata = Reflect.getMetadata(key, source, propertyKey);
|
|
14
|
+
Reflect.defineMetadata(key, metadata, target, propertyKey);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
CopyReflection
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=CopyReflection.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/metadata/CopyReflection.ts"],
|
|
4
|
+
"sourcesContent": ["import 'reflect-metadata';\n\nexport class CopyReflection {\n public static copyMetadata(source: object, target: object): void {\n const metadataKeys = Reflect.getMetadataKeys(source);\n\n metadataKeys.forEach((key) => {\n const metadata = Reflect.getMetadata(key, source);\n\n Reflect.defineMetadata(key, metadata, target);\n });\n }\n\n public static copyPropertyMetadata(\n source: object,\n target: object,\n propertyKey: string | symbol,\n ): void {\n const metadataKeys = Reflect.getMetadataKeys(source, propertyKey);\n\n metadataKeys.forEach((key) => {\n const metadata = Reflect.getMetadata(key, source, propertyKey);\n\n Reflect.defineMetadata(key, metadata, target, propertyKey);\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO;AAEA,MAAM,eAAe;AAAA,EAC1B,OAAc,aAAa,QAAgB,QAAsB;AAC/D,UAAM,eAAe,QAAQ,gBAAgB,MAAM;AAEnD,iBAAa,QAAQ,CAAC,QAAQ;AAC5B,YAAM,WAAW,QAAQ,YAAY,KAAK,MAAM;AAEhD,cAAQ,eAAe,KAAK,UAAU,MAAM;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAEA,OAAc,qBACZ,QACA,QACA,aACM;AACN,UAAM,eAAe,QAAQ,gBAAgB,QAAQ,WAAW;AAEhE,iBAAa,QAAQ,CAAC,QAAQ;AAC5B,YAAM,WAAW,QAAQ,YAAY,KAAK,QAAQ,WAAW;AAE7D,cAAQ,eAAe,KAAK,UAAU,QAAQ,WAAW;AAAA,IAC3D,CAAC;AAAA,EACH;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getProperty.d.ts","sourceRoot":"","sources":["../../../src/object/getProperty.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,GACtB,KAAK,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAC9C,MAAM,MAAM,EACZ,eAAc,OAAmB,KAChC,OAgBF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const getProperty = (obj, path, defaultValue = void 0) => {
|
|
2
|
+
const travel = (regexp) => path.split(regexp).filter(Boolean).reduce(
|
|
3
|
+
(res, key) => res !== null && res !== void 0 ? res[key] : res,
|
|
4
|
+
obj
|
|
5
|
+
);
|
|
6
|
+
const result = travel(/[,[\]]+?/) || travel(/[,[\].]+?/);
|
|
7
|
+
return result === void 0 || result === obj ? defaultValue : result;
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
getProperty
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=getProperty.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/object/getProperty.ts"],
|
|
4
|
+
"sourcesContent": ["export const getProperty = (\n obj: Record<string | symbol | number, unknown>,\n path: string,\n defaultValue: unknown = undefined,\n): unknown => {\n const travel = (regexp: RegExp) =>\n path\n .split(regexp)\n .filter(Boolean)\n .reduce<unknown>(\n (res, key) =>\n res !== null && res !== undefined\n ? (res as Record<string, unknown>)[key]\n : res,\n obj,\n );\n\n const result = travel(/[,[\\]]+?/) || travel(/[,[\\].]+?/);\n\n return result === undefined || result === obj ? defaultValue : result;\n};\n"],
|
|
5
|
+
"mappings": "AAAO,MAAM,cAAc,CACzB,KACA,MACA,eAAwB,WACZ;AACZ,QAAM,SAAS,CAAC,WACd,KACG,MAAM,MAAM,EACZ,OAAO,OAAO,EACd;AAAA,IACC,CAAC,KAAK,QACJ,QAAQ,QAAQ,QAAQ,SACnB,IAAgC,GAAG,IACpC;AAAA,IACN;AAAA,EACF;AAEJ,QAAM,SAAS,OAAO,UAAU,KAAK,OAAO,WAAW;AAEvD,SAAO,WAAW,UAAa,WAAW,MAAM,eAAe;AACjE;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/object/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type MaxConcurrencyOptions = {
|
|
2
|
+
maxConcurrency: number;
|
|
3
|
+
};
|
|
4
|
+
/**
|
|
5
|
+
* A utility class that executes promises with controlled concurrency.
|
|
6
|
+
* This class helps to limit the number of promises running simultaneously,
|
|
7
|
+
* preventing potential memory or performance issues when dealing with large arrays.
|
|
8
|
+
*/
|
|
9
|
+
export declare class PromiseMaxConcurrency<T> {
|
|
10
|
+
private readonly items;
|
|
11
|
+
private options;
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new instance of PromiseMaxConcurrency.
|
|
14
|
+
* @param items - Array of items to process
|
|
15
|
+
* @param options - Configuration options for controlling concurrency
|
|
16
|
+
* @param options.maxConcurrency - Maximum number of promises to run simultaneously (defaults to 3)
|
|
17
|
+
*/
|
|
18
|
+
constructor(items: Array<T>, options?: MaxConcurrencyOptions);
|
|
19
|
+
handle<R>(handler: (value: T, index: number, array: Array<T>) => Promise<R>): Promise<Array<R>>;
|
|
20
|
+
}
|
|
21
|
+
export declare class PromiseMaxConcurrencyFactory {
|
|
22
|
+
constructor();
|
|
23
|
+
create<T>(items: Array<T>, options?: MaxConcurrencyOptions): PromiseMaxConcurrency<T>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=PromiseMaxConcurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromiseMaxConcurrency.d.ts","sourceRoot":"","sources":["../../../src/promises/PromiseMaxConcurrency.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBACa,qBAAqB,CAAC,CAAC;IAUhC,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,OAAO,CAAwB;IAEvC;;;;;OAKG;gBAEgB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAChC,OAAO,CAAC,EAAE,qBAAqB;IAO3B,MAAM,CAAC,CAAC,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAChE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAsBrB;AAED,qBACa,4BAA4B;;IAGvC,MAAM,CAAC,CAAC,EACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC9B,qBAAqB,CAAC,CAAC,CAAC;CAG5B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
var __decorate = function(decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = function(k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var _a;
|
|
11
|
+
import { injectable } from "inversify";
|
|
12
|
+
let PromiseMaxConcurrency = class PromiseMaxConcurrency2 {
|
|
13
|
+
items;
|
|
14
|
+
options;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new instance of PromiseMaxConcurrency.
|
|
17
|
+
* @param items - Array of items to process
|
|
18
|
+
* @param options - Configuration options for controlling concurrency
|
|
19
|
+
* @param options.maxConcurrency - Maximum number of promises to run simultaneously (defaults to 3)
|
|
20
|
+
*/
|
|
21
|
+
constructor(items, options) {
|
|
22
|
+
this.items = items;
|
|
23
|
+
this.options = options ?? {
|
|
24
|
+
maxConcurrency: 3
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async handle(handler) {
|
|
28
|
+
let promises = [];
|
|
29
|
+
const results = [];
|
|
30
|
+
const maxConcurrency = this.options.maxConcurrency;
|
|
31
|
+
for (let i = 0; i < this.items.length; i++) {
|
|
32
|
+
promises.push(handler(this.items[i], i, this.items));
|
|
33
|
+
if (promises.length === maxConcurrency) {
|
|
34
|
+
const result2 = await Promise.all(promises);
|
|
35
|
+
results.push(...result2);
|
|
36
|
+
promises = [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const result = await Promise.all(promises);
|
|
40
|
+
results.push(...result);
|
|
41
|
+
return results;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
PromiseMaxConcurrency = __decorate([
|
|
45
|
+
injectable(),
|
|
46
|
+
__metadata("design:paramtypes", [typeof (_a = typeof Array !== "undefined" && Array) === "function" ? _a : Object, Object])
|
|
47
|
+
], PromiseMaxConcurrency);
|
|
48
|
+
let PromiseMaxConcurrencyFactory = class PromiseMaxConcurrencyFactory2 {
|
|
49
|
+
constructor() {
|
|
50
|
+
}
|
|
51
|
+
create(items, options) {
|
|
52
|
+
return new PromiseMaxConcurrency(items, options);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
PromiseMaxConcurrencyFactory = __decorate([
|
|
56
|
+
injectable(),
|
|
57
|
+
__metadata("design:paramtypes", [])
|
|
58
|
+
], PromiseMaxConcurrencyFactory);
|
|
59
|
+
export {
|
|
60
|
+
PromiseMaxConcurrency,
|
|
61
|
+
PromiseMaxConcurrencyFactory
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=PromiseMaxConcurrency.js.map
|