@squiz/optimization-utils 4.3.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ export type ChangeValue<TValue> = {
2
+ oldValue: TValue;
3
+ newValue: TValue;
4
+ };
5
+ export declare class ChangeTracker<T extends object> {
6
+ private modified;
7
+ private readonly proxy;
8
+ static extractChangeTracker<T extends object>(entity: T): ChangeTracker<T> | undefined;
9
+ constructor(target: T);
10
+ getTrackedObject(): T;
11
+ getChanges<TKey extends keyof T>(key: TKey): ChangeValue<T[TKey]> | undefined;
12
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChangeTracker = void 0;
4
+ const CHANGE_TRACKER = Symbol('PROXY_SYMBOL');
5
+ class ChangeTracker {
6
+ modified = new Map();
7
+ proxy;
8
+ static extractChangeTracker(entity) {
9
+ return Reflect.get(entity, CHANGE_TRACKER);
10
+ }
11
+ constructor(target) {
12
+ this.proxy = new Proxy(target, {
13
+ set: (obj, prop, value) => {
14
+ if (Reflect.get(obj, prop) !== value) {
15
+ if (!this.modified.has(prop)) {
16
+ this.modified.set(prop, {
17
+ oldValue: Reflect.get(obj, prop),
18
+ newValue: value,
19
+ });
20
+ }
21
+ else {
22
+ this.modified.get(prop).newValue = value;
23
+ }
24
+ }
25
+ obj[prop] = value;
26
+ return true;
27
+ },
28
+ });
29
+ Reflect.set(this.proxy, CHANGE_TRACKER, this);
30
+ }
31
+ getTrackedObject() {
32
+ return this.proxy;
33
+ }
34
+ getChanges(key) {
35
+ return this.modified.get(key);
36
+ }
37
+ }
38
+ exports.ChangeTracker = ChangeTracker;
39
+ //# sourceMappingURL=ChangeTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeTracker.js","sourceRoot":"","sources":["../../src/change-tracker/ChangeTracker.ts"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAI9C,MAAa,aAAa;IAChB,QAAQ,GAA0C,IAAI,GAAG,EAAE,CAAC;IACnD,KAAK,CAAI;IAE1B,MAAM,CAAC,oBAAoB,CACzB,MAAS;QAET,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAqB,CAAC;IACjE,CAAC;IAED,YAAY,MAAS;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;YAC7B,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAW,EAAE;gBACjC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAe,CAAC,EAAE,CAAC;wBACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAe,EAAE;4BACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;4BAChC,QAAQ,EAAE,KAAK;yBAChB,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAe,CAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACvD,CAAC;gBACH,CAAC;gBAED,GAAG,CAAC,IAAe,CAAC,GAAG,KAAK,CAAC;gBAE7B,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,UAAU,CACR,GAAS;QAET,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAyB,CAAC;IACxD,CAAC;CACF;AA1CD,sCA0CC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export * from './types/class-utilities-types';
2
+ export * from './retries/Retries';
2
3
  export * from './object/getProperty';
3
4
  export * from './measurement/performance';
4
5
  export * from './data-structures/Result';
6
+ export * from './change-tracker/ChangeTracker';
5
7
  export * from './array/chunkify';
6
8
  export * from './array/unique';
package/dist/index.js CHANGED
@@ -15,9 +15,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./types/class-utilities-types"), exports);
18
+ __exportStar(require("./retries/Retries"), exports);
18
19
  __exportStar(require("./object/getProperty"), exports);
19
20
  __exportStar(require("./measurement/performance"), exports);
20
21
  __exportStar(require("./data-structures/Result"), exports);
22
+ __exportStar(require("./change-tracker/ChangeTracker"), exports);
21
23
  __exportStar(require("./array/chunkify"), exports);
22
24
  __exportStar(require("./array/unique"), exports);
23
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,uDAAqC;AACrC,4DAA0C;AAC1C,2DAAyC;AACzC,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,2DAAyC;AACzC,iEAA+C;AAC/C,mDAAiC;AACjC,iDAA+B"}
@@ -0,0 +1,5 @@
1
+ export declare function Retry({ delay, retries, retryableErrors, }: {
2
+ retries: number;
3
+ delay: number;
4
+ retryableErrors: Array<new (...args: Array<any>) => Error>;
5
+ }): (_target: unknown, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Retry = Retry;
4
+ const promises_1 = require("timers/promises");
5
+ function Retry({ delay, retries, retryableErrors, }) {
6
+ return (_target, _propertyKey, descriptor) => {
7
+ const originalMethod = descriptor.value;
8
+ descriptor.value = async function (...args) {
9
+ let attempt = 0;
10
+ while (attempt <= retries) {
11
+ try {
12
+ return await originalMethod.apply(this, args);
13
+ }
14
+ catch (error) {
15
+ attempt++;
16
+ if (!retryableErrors.some((errType) => error instanceof errType)) {
17
+ throw error;
18
+ }
19
+ const isMaxRetriesReached = attempt > retries;
20
+ if (isMaxRetriesReached) {
21
+ throw error;
22
+ }
23
+ const _delay = delay * Math.pow(2, attempt - 1);
24
+ await (0, promises_1.setTimeout)(_delay);
25
+ }
26
+ }
27
+ };
28
+ return descriptor;
29
+ };
30
+ }
31
+ //# sourceMappingURL=Retries.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/optimization-utils",
3
- "version": "4.3.0",
3
+ "version": "4.5.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",