@squiz/optimization-utils 6.0.2 → 7.0.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.
@@ -10,19 +10,26 @@ class ChangeTracker {
10
10
  }
11
11
  constructor(target) {
12
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
- });
13
+ set: (target, prop, value, receiver) => {
14
+ const key = prop;
15
+ const oldValue = Reflect.get(target, key, receiver);
16
+ const success = Reflect.set(target, key, value, receiver);
17
+ if (!success) {
18
+ return false;
19
+ }
20
+ if (key === CHANGE_TRACKER) {
21
+ return false;
22
+ }
23
+ const newValue = Reflect.get(target, key, receiver);
24
+ const valueChanged = oldValue !== newValue;
25
+ if (valueChanged) {
26
+ if (!this.modified.has(key)) {
27
+ this.modified.set(key, { oldValue, newValue });
20
28
  }
21
29
  else {
22
- this.modified.get(prop).newValue = value;
30
+ this.modified.get(key).newValue = newValue;
23
31
  }
24
32
  }
25
- obj[prop] = value;
26
33
  return true;
27
34
  },
28
35
  });
@@ -1 +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"}
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,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAW,EAAE;gBAC9C,MAAM,GAAG,GAAG,IAAe,CAAC;gBAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAE1D,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;oBAC3B,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,QAAQ,KAAK,QAAQ,CAAC;gBAE3C,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACjD,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBAC9C,CAAC;gBACH,CAAC;gBAED,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;AApDD,sCAoDC"}
@@ -1,4 +1,14 @@
1
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
+ };
2
12
  export declare class Result<const TData, const TError = Error> {
3
13
  readonly type: ResultType;
4
14
  readonly data?: TData;
@@ -6,38 +16,28 @@ export declare class Result<const TData, const TError = Error> {
6
16
  private constructor();
7
17
  static success<const U>(data?: U): Result<U, never>;
8
18
  static failure<const TError>(error: TError): Result<never, TError>;
9
- isSuccess<ThisType extends Result<TData, TError>>(this: ThisType): this is Omit<Result<TData>, 'data'> & {
10
- data: TData;
11
- type: 'success';
12
- };
13
- isFailure<ThisType extends Result<TData, TError>>(this: ThisType): this is Omit<Result<TData>, 'error'> & {
14
- error: TError;
15
- type: 'failure';
16
- };
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>;
17
21
  /**
18
- * Checks if the error in this Result instance is an instance of any of the provided error types
19
- * or equals any of the provided error values.
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>`.
20
25
  *
21
26
  * @example
22
27
  * ```typescript
23
28
  * const result = Result.failure(new TypeError('Invalid type'));
24
- * result.isErrorInstanceOf(TypeError); // true
25
- * result.isErrorInstanceOf(RangeError); // false
26
- * result.isErrorInstanceOf(TypeError, RangeError); // true
27
- * ```
28
- */
29
- isErrorInstanceOf(...errorTypes: Array<new (...args: Array<any>) => any>): boolean;
30
- /**
31
- * Checks if the error in this Result instance equals any of the provided error values.
29
+ * if (result.isErrorInstanceOf(TypeError)) {
30
+ * result.error; // narrowed to TypeError
31
+ * }
32
+ * result.isErrorInstanceOf(TypeError, RangeError); // true -> error is TypeError | RangeError
32
33
  *
33
- * @example
34
- * ```typescript
35
- * const result = Result.failure('MISSING_QUERY_EXECUTION_ID');
36
- * result.isErrorInstanceOf('MISSING_QUERY_EXECUTION_ID'); // true
37
- * result.isErrorInstanceOf('OTHER_ERROR'); // false
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
38
  * ```
39
39
  */
40
- isErrorInstanceOf(...errorTypes: Array<unknown>): boolean;
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
41
  throw(): never | void;
42
42
  unwrap(): TData;
43
43
  match<TResult, TErrorResult>(handlers: {
@@ -22,16 +22,32 @@ 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
+ /**
26
+ * Type guard: checks if the error in this Result is an instance of the provided
27
+ * error constructors or equals any of the provided error values. When it returns true,
28
+ * the result is narrowed to `Result<never, TErrorGuard>`.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const result = Result.failure(new TypeError('Invalid type'));
33
+ * if (result.isErrorInstanceOf(TypeError)) {
34
+ * result.error; // narrowed to TypeError
35
+ * }
36
+ * result.isErrorInstanceOf(TypeError, RangeError); // true -> error is TypeError | RangeError
37
+ *
38
+ * const strResult = Result.failure('MISSING_QUERY_EXECUTION_ID');
39
+ * if (strResult.isErrorInstanceOf('MISSING_QUERY_EXECUTION_ID')) {
40
+ * strResult.error; // narrowed to 'MISSING_QUERY_EXECUTION_ID'
41
+ * }
42
+ * ```
43
+ */
44
+ isErrorInstanceOf(...errorTypes) {
28
45
  return errorTypes.some((errorType) => {
29
46
  if (typeof errorType === 'function') {
30
- return this.error instanceof errorType;
31
- }
32
- else {
33
- return this.error === errorType;
47
+ return (this.error instanceof
48
+ errorType);
34
49
  }
50
+ return this.error === errorType;
35
51
  });
36
52
  }
37
53
  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,CAAU,IAAQ;QAC9B,OAAO,IAAI,MAAM,CAAW,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,OAAO,CAAe,KAAa;QACxC,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;IA6BD,iBAAiB;IACf,8DAA8D;IAC9D,GAAG,UAA+D;QAElE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACnC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,KAAK,YAAY,SAAS,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,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;IAED,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;IACrC,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;IACpC,CAAC;CACF;AAlHD,wBAkHC"}
1
+ {"version":3,"file":"Result.js","sourceRoot":"","sources":["../../src/data-structures/Result.ts"],"names":[],"mappings":";;;AAoBA,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,CAAU,IAAQ;QAC9B,OAAO,IAAI,MAAM,CAAW,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,OAAO,CAAe,KAAa;QACxC,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;QAGP,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CAKf,GAAG,UAGF;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACnC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpC,OAAO,CACL,IAAI,CAAC,KAAK;oBACT,SAA0D,CAC5D,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,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;IAED,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;IACrC,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;IACpC,CAAC;CACF;AAhHD,wBAgHC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/optimization-utils",
3
- "version": "6.0.2",
3
+ "version": "7.0.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,7 +35,7 @@
35
35
  "devDependencies": {},
36
36
  "peerDependencies": {
37
37
  "inversify": "^7.11.0",
38
- "@squiz/optimization-logger": "^1.10.1"
38
+ "@squiz/optimization-logger": "^1.11.0"
39
39
  },
40
40
  "author": "",
41
41
  "license": "ISC"