@squiz/optimization-utils 6.0.1 → 6.0.3

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,20 +1,43 @@
1
1
  export type ResultType = 'success' | 'failure';
2
- export declare class Result<TData, TError = Error> {
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> {
3
13
  readonly type: ResultType;
4
14
  readonly data?: TData;
5
15
  readonly error?: TError;
6
16
  private constructor();
7
- static success<U>(data?: U): Result<U, never>;
8
- static failure<TError>(error: TError): Result<never, TError>;
9
- isSuccess<ThisType extends Result<unknown, unknown>>(this: ThisType): this is Omit<Result<TData>, 'data'> & {
10
- data: TData;
11
- type: 'success';
12
- };
13
- isFailure<ThisType extends Result<unknown, unknown>>(this: ThisType): this is Omit<Result<TData>, 'error'> & {
14
- error: TError;
15
- type: 'failure';
16
- };
17
- isErrorInstanceOf(...errorTypes: Array<new (...args: Array<any>) => any>): boolean;
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>;
18
41
  throw(): never | void;
19
42
  unwrap(): TData;
20
43
  match<TResult, TErrorResult>(handlers: {
@@ -22,10 +22,33 @@ 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) {
28
- return errorTypes.some((errorType) => this.error instanceof errorType);
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) {
45
+ return errorTypes.some((errorType) => {
46
+ if (typeof errorType === 'function') {
47
+ return (this.error instanceof
48
+ errorType);
49
+ }
50
+ return this.error === errorType;
51
+ });
29
52
  }
30
53
  throw() {
31
54
  if (this.error) {
@@ -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;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;AAjFD,wBAiFC"}
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.1",
3
+ "version": "6.0.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",