@squiz/optimization-utils 4.5.0 → 4.6.1
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/data-structures/Result.d.ts +5 -2
- package/dist/data-structures/Result.js +1 -3
- package/dist/data-structures/Result.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/metadata/CopyReflection.d.ts +5 -0
- package/dist/metadata/CopyReflection.js +22 -0
- package/dist/metadata/CopyReflection.js.map +1 -0
- package/dist/retries/Retries.d.ts +1 -1
- package/dist/retries/Retries.js +26 -2
- package/dist/retries/Retries.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type ResultType = 'success' | 'failure';
|
|
2
|
-
export declare class Result<TData, TError =
|
|
2
|
+
export declare class Result<TData, TError = never> {
|
|
3
3
|
readonly type: ResultType;
|
|
4
4
|
readonly data?: TData;
|
|
5
5
|
readonly error?: TError;
|
|
@@ -14,7 +14,10 @@ export declare class Result<TData, TError = Error> {
|
|
|
14
14
|
error: TError;
|
|
15
15
|
type: 'failure';
|
|
16
16
|
};
|
|
17
|
-
isErrorInstanceOf
|
|
17
|
+
isErrorInstanceOf<ThisType extends Result<unknown, unknown>, T extends Array<new (...args: Array<any>) => any>>(this: ThisType, ...errorTypes: T): this is Omit<Result<TData>, 'error'> & {
|
|
18
|
+
error: T[number];
|
|
19
|
+
type: 'failure';
|
|
20
|
+
};
|
|
18
21
|
throw(): never | void;
|
|
19
22
|
unwrap(): TData;
|
|
20
23
|
match<TResult, TErrorResult>(handlers: {
|
|
@@ -22,9 +22,7 @@ class Result {
|
|
|
22
22
|
isFailure() {
|
|
23
23
|
return this.type === 'failure';
|
|
24
24
|
}
|
|
25
|
-
isErrorInstanceOf(
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
-
...errorTypes) {
|
|
25
|
+
isErrorInstanceOf(...errorTypes) {
|
|
28
26
|
return errorTypes.some((errorType) => this.error instanceof errorType);
|
|
29
27
|
}
|
|
30
28
|
throw() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Result.js","sourceRoot":"","sources":["../../src/data-structures/Result.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;IACD,IAAI,CAAa;IACjB,IAAI,CAAS;IACb,KAAK,CAAU;IAE/B,YAAoB,IAAgB,EAAE,IAAY,EAAE,KAAc;QAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,OAAO,CAAI,IAAQ;QACxB,OAAO,IAAI,MAAM,CAAW,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,OAAO,CAAS,KAAa;QAClC,OAAO,IAAI,MAAM,CAAgB,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,SAAS;QAGP,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACjC,CAAC;IAED,SAAS;QAMP,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACjC,CAAC;IAED,iBAAiB
|
|
1
|
+
{"version":3,"file":"Result.js","sourceRoot":"","sources":["../../src/data-structures/Result.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;IACD,IAAI,CAAa;IACjB,IAAI,CAAS;IACb,KAAK,CAAU;IAE/B,YAAoB,IAAgB,EAAE,IAAY,EAAE,KAAc;QAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,OAAO,CAAI,IAAQ;QACxB,OAAO,IAAI,MAAM,CAAW,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,OAAO,CAAS,KAAa;QAClC,OAAO,IAAI,MAAM,CAAgB,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,SAAS;QAGP,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACjC,CAAC;IAED,SAAS;QAMP,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACjC,CAAC;IAED,iBAAiB,CAMf,GAAG,UAAa;QAKhB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,YAAY,SAAS,CAAC,CAAC;IACzE,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,IAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAwB,QAG5B;QACC,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAK,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF;AAxED,wBAwEC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './types/class-utilities-types';
|
|
2
2
|
export * from './retries/Retries';
|
|
3
3
|
export * from './object/getProperty';
|
|
4
|
+
export * from './metadata/CopyReflection';
|
|
4
5
|
export * from './measurement/performance';
|
|
5
6
|
export * from './data-structures/Result';
|
|
6
7
|
export * from './change-tracker/ChangeTracker';
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./types/class-utilities-types"), exports);
|
|
18
18
|
__exportStar(require("./retries/Retries"), exports);
|
|
19
19
|
__exportStar(require("./object/getProperty"), exports);
|
|
20
|
+
__exportStar(require("./metadata/CopyReflection"), exports);
|
|
20
21
|
__exportStar(require("./measurement/performance"), exports);
|
|
21
22
|
__exportStar(require("./data-structures/Result"), exports);
|
|
22
23
|
__exportStar(require("./change-tracker/ChangeTracker"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,oDAAkC;AAClC,uDAAqC;AACrC,4DAA0C;AAC1C,2DAAyC;AACzC,iEAA+C;AAC/C,mDAAiC;AACjC,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,oDAAkC;AAClC,uDAAqC;AACrC,4DAA0C;AAC1C,4DAA0C;AAC1C,2DAAyC;AACzC,iEAA+C;AAC/C,mDAAiC;AACjC,iDAA+B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CopyReflection = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
class CopyReflection {
|
|
6
|
+
static copyMetadata(source, target) {
|
|
7
|
+
const metadataKeys = Reflect.getMetadataKeys(source);
|
|
8
|
+
metadataKeys.forEach((key) => {
|
|
9
|
+
const metadata = Reflect.getMetadata(key, source);
|
|
10
|
+
Reflect.defineMetadata(key, metadata, target);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
static copyPropertyMetadata(source, target, propertyKey) {
|
|
14
|
+
const metadataKeys = Reflect.getMetadataKeys(source, propertyKey);
|
|
15
|
+
metadataKeys.forEach((key) => {
|
|
16
|
+
const metadata = Reflect.getMetadata(key, source, propertyKey);
|
|
17
|
+
Reflect.defineMetadata(key, metadata, target, propertyKey);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.CopyReflection = CopyReflection;
|
|
22
|
+
//# sourceMappingURL=CopyReflection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyReflection.js","sourceRoot":"","sources":["../../src/metadata/CopyReflection.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAE1B,MAAa,cAAc;IAClB,MAAM,CAAC,YAAY,CAAC,MAAc,EAAE,MAAc;QACvD,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAErD,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAElD,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAChC,MAAc,EACd,MAAc,EACd,WAA4B;QAE5B,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAElE,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAE/D,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAxBD,wCAwBC"}
|
|
@@ -2,4 +2,4 @@ export declare function Retry({ delay, retries, retryableErrors, }: {
|
|
|
2
2
|
retries: number;
|
|
3
3
|
delay: number;
|
|
4
4
|
retryableErrors: Array<new (...args: Array<any>) => Error>;
|
|
5
|
-
}):
|
|
5
|
+
}): MethodDecorator;
|
package/dist/retries/Retries.js
CHANGED
|
@@ -2,30 +2,54 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Retry = Retry;
|
|
4
4
|
const promises_1 = require("timers/promises");
|
|
5
|
+
const inversify_1 = require("inversify");
|
|
6
|
+
const optimization_logger_1 = require("@squiz/optimization-logger");
|
|
7
|
+
const CopyReflection_1 = require("../metadata/CopyReflection");
|
|
5
8
|
function Retry({ delay, retries, retryableErrors, }) {
|
|
6
|
-
return (
|
|
9
|
+
return (target, propertyKey, descriptor) => {
|
|
10
|
+
const injection = (0, inversify_1.inject)(optimization_logger_1.Logger);
|
|
11
|
+
const loggerSymbol = Symbol('logger');
|
|
12
|
+
injection(target, loggerSymbol);
|
|
7
13
|
const originalMethod = descriptor.value;
|
|
8
14
|
descriptor.value = async function (...args) {
|
|
15
|
+
const logger = this[loggerSymbol] ||
|
|
16
|
+
(0, optimization_logger_1.createLogger)();
|
|
9
17
|
let attempt = 0;
|
|
10
18
|
while (attempt <= retries) {
|
|
11
19
|
try {
|
|
12
20
|
return await originalMethod.apply(this, args);
|
|
13
21
|
}
|
|
14
22
|
catch (error) {
|
|
23
|
+
logger.debug({
|
|
24
|
+
message: `Attempt ${attempt} of ${retries}`,
|
|
25
|
+
});
|
|
15
26
|
attempt++;
|
|
16
27
|
if (!retryableErrors.some((errType) => error instanceof errType)) {
|
|
28
|
+
logger.error({
|
|
29
|
+
message: `Non-retryable error encountered`,
|
|
30
|
+
error,
|
|
31
|
+
});
|
|
17
32
|
throw error;
|
|
18
33
|
}
|
|
19
34
|
const isMaxRetriesReached = attempt > retries;
|
|
20
35
|
if (isMaxRetriesReached) {
|
|
36
|
+
logger.error({
|
|
37
|
+
message: `Max retries (${retries}) reached`,
|
|
38
|
+
error,
|
|
39
|
+
});
|
|
21
40
|
throw error;
|
|
22
41
|
}
|
|
23
42
|
const _delay = delay * Math.pow(2, attempt - 1);
|
|
43
|
+
logger.debug({
|
|
44
|
+
message: `Retrying in ${_delay}ms`,
|
|
45
|
+
attempt,
|
|
46
|
+
delay: _delay,
|
|
47
|
+
});
|
|
24
48
|
await (0, promises_1.setTimeout)(_delay);
|
|
25
49
|
}
|
|
26
50
|
}
|
|
27
51
|
};
|
|
28
|
-
|
|
52
|
+
CopyReflection_1.CopyReflection.copyPropertyMetadata(originalMethod, descriptor.value, propertyKey);
|
|
29
53
|
};
|
|
30
54
|
}
|
|
31
55
|
//# sourceMappingURL=Retries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Retries.js","sourceRoot":"","sources":["../../src/retries/Retries.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Retries.js","sourceRoot":"","sources":["../../src/retries/Retries.ts"],"names":[],"mappings":";;AAKA,sBAyEC;AA9ED,8CAA6C;AAC7C,yCAAmC;AACnC,oEAAkE;AAClE,+DAA4D;AAE5D,SAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,eAAe,GAMhB;IACC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,UAA8B,EAAQ,EAAE;QACnE,MAAM,SAAS,GAAG,IAAA,kBAAM,EAAC,4BAAM,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAEhC,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,UAAU,CAAC,KAAK,GAAG,KAAK,WACtB,GAAG,IAAoB;YAEvB,MAAM,MAAM,GACT,IAA+C,CAAC,YAAY,CAAC;gBAC9D,IAAA,kCAAY,GAAE,CAAC;YAEjB,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,OAAO,OAAO,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,OAAO,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC;wBACX,OAAO,EAAE,WAAW,OAAO,OAAO,OAAO,EAAE;qBAC5C,CAAC,CAAC;oBACH,OAAO,EAAE,CAAC;oBAEV,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,YAAY,OAAO,CAAC,EAAE,CAAC;wBACjE,MAAM,CAAC,KAAK,CAAC;4BACX,OAAO,EAAE,iCAAiC;4BAC1C,KAAK;yBACN,CAAC,CAAC;wBACH,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,CAAC;oBAE9C,IAAI,mBAAmB,EAAE,CAAC;wBACxB,MAAM,CAAC,KAAK,CAAC;4BACX,OAAO,EAAE,gBAAgB,OAAO,WAAW;4BAC3C,KAAK;yBACN,CAAC,CAAC;wBACH,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;oBAEhD,MAAM,CAAC,KAAK,CAAC;wBACX,OAAO,EAAE,eAAe,MAAM,IAAI;wBAClC,OAAO;wBACP,KAAK,EAAE,MAAM;qBACd,CAAC,CAAC;oBAEH,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,+BAAc,CAAC,oBAAoB,CACjC,cAAc,EACd,UAAU,CAAC,KAAK,EAChB,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|