@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.
@@ -1,5 +1,5 @@
1
1
  export type ResultType = 'success' | 'failure';
2
- export declare class Result<TData, TError = Error> {
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(...errorTypes: Array<new (...args: Array<any>) => any>): boolean;
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;IACf,8DAA8D;IAC9D,GAAG,UAAmD;QAEtD,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;AAjED,wBAiEC"}
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,5 @@
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
+ }
@@ -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
- }): (_target: unknown, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
5
+ }): MethodDecorator;
@@ -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 (_target, _propertyKey, descriptor) => {
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
- return descriptor;
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":";;AAEA,sBA+CC;AAjDD,8CAA6C;AAE7C,SAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,eAAe,GAMhB;IACC,OAAO,CACL,OAAgB,EAChB,YAAoB,EACpB,UAA8B,EACV,EAAE;QACtB,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,UAAU,CAAC,KAAK,GAAG,KAAK,WACtB,GAAG,IAAoB;YAEvB,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,OAAO,EAAE,CAAC;oBAEV,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,YAAY,OAAO,CAAC,EAAE,CAAC;wBACjE,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,CAAC;oBAE9C,IAAI,mBAAmB,EAAE,CAAC;wBACxB,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;oBAEhD,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/optimization-utils",
3
- "version": "4.5.0",
3
+ "version": "4.6.1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",