@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: (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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(
|
|
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,
|
|
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
|
|
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<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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":";;;
|
|
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"}
|