generic-result-type 2.0.0 → 2.1.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.
package/README.md CHANGED
@@ -17,7 +17,7 @@ This package supports **both ESM and CommonJS** out of the box.
17
17
  ESM:
18
18
 
19
19
  ```ts
20
- import { success, fail } from 'generic-result-type';
20
+ import { success, fail, type Result } from 'generic-result-type';
21
21
  ```
22
22
 
23
23
  CommonJS:
@@ -68,6 +68,21 @@ console.log('Value:', result.value);
68
68
 
69
69
  TypeScript will correctly narrow the type inside each branch without casting.
70
70
 
71
+ ### Mapping
72
+
73
+ You can map the value or the error of a Result with these methods:
74
+
75
+ * map
76
+ * mapErr
77
+ * mapAsync
78
+ * mapErrAsync
79
+
80
+ ```ts
81
+ const numberResult = getSomeNumberResult().map(x => x * 2);
82
+
83
+ const responseResult = await getSomeStringResult().mapAsync(async x => fetch(x));
84
+ ```
85
+
71
86
  ## License
72
87
 
73
88
  ISC
package/dist/index.cjs CHANGED
@@ -34,20 +34,42 @@ var ErrorResult = class _ErrorResult {
34
34
  this.error = error;
35
35
  this.success = false;
36
36
  }
37
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters
37
38
  map(mapFunction) {
39
+ return this;
40
+ }
41
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await
42
+ async mapAsync(mapFunction) {
43
+ return this;
44
+ }
45
+ mapErr(mapFunction) {
38
46
  return new _ErrorResult(mapFunction(this.error));
39
47
  }
48
+ async mapErrAsync(mapFunction) {
49
+ return new _ErrorResult(await mapFunction(this.error));
50
+ }
40
51
  };
41
52
 
42
53
  // src/successResult.mts
43
54
  var SuccessResult = class _SuccessResult {
44
55
  constructor(value) {
45
- this.value = value;
46
56
  this.success = true;
57
+ this.value = value;
47
58
  }
48
59
  map(mapFunction) {
49
60
  return new _SuccessResult(mapFunction(this.value));
50
61
  }
62
+ async mapAsync(mapFunction) {
63
+ return new _SuccessResult(await mapFunction(this.value));
64
+ }
65
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters
66
+ mapErr(mapFunction) {
67
+ return this;
68
+ }
69
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await
70
+ async mapErrAsync(mapFunction) {
71
+ return this;
72
+ }
51
73
  };
52
74
 
53
75
  // src/index.mts
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.mts","../src/errorResult.mts","../src/successResult.mts"],"sourcesContent":["import type { IErrorResult } from './errorResult.mjs';\nimport { ErrorResult } from './errorResult.mjs';\nimport type { ISuccessResult } from './successResult.mjs';\nimport { SuccessResult } from './successResult.mjs';\n\nexport type { ISuccessResult };\nexport type { IErrorResult };\n\nexport type ResultType<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;\n\nexport function success(): ISuccessResult;\nexport function success<T>(value: T): ISuccessResult<T>;\nexport function success<T>(value?: T): ISuccessResult<T> {\n return new SuccessResult(value as T);\n};\n\nexport function fail<E>(error: E): IErrorResult<E> {\n return new ErrorResult(error);\n}\n\nexport const isSuccessResult = <T, E = Error>(result: ResultType<T, E>): result is ISuccessResult<T> => {\n return result.success;\n};\n\nexport const isErrorResult = <T, E = Error>(result: ResultType<T, E>): result is IErrorResult<E> => {\n return !result.success;\n};\n\nexport function combine(...results: ResultType[]): ResultType {\n for (const r of results) {\n if (!r.success) {\n return r;\n }\n }\n return new SuccessResult(undefined);\n}\n","export interface IErrorResult<E = Error> {\n readonly success: false;\n readonly error: E;\n readonly map: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;\n}\n\nexport class ErrorResult<E> implements IErrorResult<E> {\n public readonly success = false as const;\n\n public constructor(public readonly error: E) { /* empty */ }\n\n public map<M>(mapFunction: (error: E) => M): ErrorResult<M> {\n return new ErrorResult(mapFunction(this.error));\n }\n}\n","export interface ISuccessResult<T = void> {\n readonly success: true;\n readonly value: T;\n readonly map: <M>(mapFunction: (value: T) => M) => ISuccessResult<M>;\n}\n\nexport class SuccessResult<T = void> implements ISuccessResult<T> {\n public readonly success = true as const;\n\n public constructor(public readonly value: T) { /* empty */ }\n\n public map<M>(mapFunction: (value: T) => M): SuccessResult<M> {\n return new SuccessResult(mapFunction(this.value));\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMO,IAAM,cAAN,MAAM,aAA0C;AAAA,EAG9C,YAA4B,OAAU;AAAV;AAFnC,SAAgB,UAAU;AAAA,EAEiC;AAAA,EAEpD,IAAO,aAA8C;AAC1D,WAAO,IAAI,aAAY,YAAY,KAAK,KAAK,CAAC;AAAA,EAChD;AACF;;;ACRO,IAAM,gBAAN,MAAM,eAAqD;AAAA,EAGzD,YAA4B,OAAU;AAAV;AAFnC,SAAgB,UAAU;AAAA,EAEiC;AAAA,EAEpD,IAAO,aAAgD;AAC5D,WAAO,IAAI,eAAc,YAAY,KAAK,KAAK,CAAC;AAAA,EAClD;AACF;;;AFFO,SAAS,QAAW,OAA8B;AACvD,SAAO,IAAI,cAAc,KAAU;AACrC;AAEO,SAAS,KAAQ,OAA2B;AACjD,SAAO,IAAI,YAAY,KAAK;AAC9B;AAEO,IAAM,kBAAkB,CAAe,WAA0D;AACtG,SAAO,OAAO;AAChB;AAEO,IAAM,gBAAgB,CAAe,WAAwD;AAClG,SAAO,CAAC,OAAO;AACjB;AAEO,SAAS,WAAW,SAAmC;AAC5D,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,EAAE,SAAS;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,IAAI,cAAc,MAAS;AACpC;","names":[]}
1
+ {"version":3,"sources":["../src/index.mts","../src/errorResult.mts","../src/successResult.mts"],"sourcesContent":["import type { IErrorResult } from './errorResult.mjs';\nimport { ErrorResult } from './errorResult.mjs';\nimport type { ISuccessResult } from './successResult.mjs';\nimport { SuccessResult } from './successResult.mjs';\n\nexport type { ISuccessResult };\nexport type { IErrorResult };\n\nexport type Result<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;\n\nexport function success(): ISuccessResult;\nexport function success<T>(value: T): ISuccessResult<T>;\nexport function success<T>(value?: T): ISuccessResult<T> {\n return new SuccessResult(value as T);\n};\n\nexport function fail<E>(error: E): IErrorResult<E> {\n return new ErrorResult(error);\n}\n\nexport const isSuccessResult = <T, E = Error>(result: Result<T, E>): result is ISuccessResult<T> => {\n return result.success;\n};\n\nexport const isErrorResult = <T, E = Error>(result: Result<T, E>): result is IErrorResult<E> => {\n return !result.success;\n};\n\nexport function combine(...results: Result[]): Result {\n for (const r of results) {\n if (!r.success) {\n return r;\n }\n }\n return new SuccessResult(undefined);\n}\n","export interface IErrorResult<E = Error> {\n readonly success: false;\n readonly error: E;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n readonly map: <M>(mapFunction: (value: never) => M) => IErrorResult<E>;\n readonly mapAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<IErrorResult<E>>;\n readonly mapErr: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;\n readonly mapErrAsync: <M>(mapFunction: (value: E) => Promise<M>) => Promise<IErrorResult<M>>;\n}\n\nexport class ErrorResult<E> implements IErrorResult<E> {\n public readonly success = false as const;\n\n public constructor(public readonly error: E) { /* empty */ }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters\n public map<M>(mapFunction: (error: never) => M): this {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await\n public async mapAsync<M>(mapFunction: (value: never) => Promise<M>): Promise<this> {\n return this;\n }\n\n public mapErr<M>(mapFunction: (error: E) => M): ErrorResult<M> {\n return new ErrorResult(mapFunction(this.error));\n }\n\n public async mapErrAsync<M>(mapFunction: (value: E) => Promise<M>): Promise<ErrorResult<M>> {\n return new ErrorResult(await mapFunction(this.error));\n }\n}\n","export interface ISuccessResult<T = void> {\n readonly success: true;\n readonly value: T;\n readonly map: <M>(mapFunction: (value: T) => M) => ISuccessResult<M>;\n readonly mapAsync: <M>(mapFunction: (value: T) => Promise<M>) => Promise<ISuccessResult<M>>;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n readonly mapErr: <M>(mapFunction: (value: never) => M) => ISuccessResult<T>;\n readonly mapErrAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<ISuccessResult<T>>;\n}\n\nexport class SuccessResult<T = void> implements ISuccessResult<T> {\n public readonly success = true as const;\n public readonly value: T;\n\n public constructor(value?: T) {\n this.value = value as T;\n }\n\n public map<M>(mapFunction: (value: T) => M): SuccessResult<M> {\n return new SuccessResult(mapFunction(this.value));\n }\n\n public async mapAsync<M>(mapFunction: (value: T) => Promise<M>): Promise<SuccessResult<M>> {\n return new SuccessResult(await mapFunction(this.value));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters\n public mapErr<M>(mapFunction: (error: never) => M): this {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await\n public async mapErrAsync<M>(mapFunction: (value: never) => Promise<M>): Promise<this> {\n return this;\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACUO,IAAM,cAAN,MAAM,aAA0C;AAAA,EAG9C,YAA4B,OAAU;AAAV;AAFnC,SAAgB,UAAU;AAAA,EAEiC;AAAA;AAAA,EAGpD,IAAO,aAAwC;AACpD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAa,SAAY,aAA0D;AACjF,WAAO;AAAA,EACT;AAAA,EAEO,OAAU,aAA8C;AAC7D,WAAO,IAAI,aAAY,YAAY,KAAK,KAAK,CAAC;AAAA,EAChD;AAAA,EAEA,MAAa,YAAe,aAAgE;AAC1F,WAAO,IAAI,aAAY,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,EACtD;AACF;;;ACtBO,IAAM,gBAAN,MAAM,eAAqD;AAAA,EAIzD,YAAY,OAAW;AAH9B,SAAgB,UAAU;AAIxB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEO,IAAO,aAAgD;AAC5D,WAAO,IAAI,eAAc,YAAY,KAAK,KAAK,CAAC;AAAA,EAClD;AAAA,EAEA,MAAa,SAAY,aAAkE;AACzF,WAAO,IAAI,eAAc,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,EACxD;AAAA;AAAA,EAGO,OAAU,aAAwC;AACvD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAa,YAAe,aAA0D;AACpF,WAAO;AAAA,EACT;AACF;;;AFvBO,SAAS,QAAW,OAA8B;AACvD,SAAO,IAAI,cAAc,KAAU;AACrC;AAEO,SAAS,KAAQ,OAA2B;AACjD,SAAO,IAAI,YAAY,KAAK;AAC9B;AAEO,IAAM,kBAAkB,CAAe,WAAsD;AAClG,SAAO,OAAO;AAChB;AAEO,IAAM,gBAAgB,CAAe,WAAoD;AAC9F,SAAO,CAAC,OAAO;AACjB;AAEO,SAAS,WAAW,SAA2B;AACpD,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,EAAE,SAAS;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,IAAI,cAAc,MAAS;AACpC;","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,21 +1,27 @@
1
1
  interface IErrorResult<E = Error> {
2
2
  readonly success: false;
3
3
  readonly error: E;
4
- readonly map: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;
4
+ readonly map: <M>(mapFunction: (value: never) => M) => IErrorResult<E>;
5
+ readonly mapAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<IErrorResult<E>>;
6
+ readonly mapErr: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;
7
+ readonly mapErrAsync: <M>(mapFunction: (value: E) => Promise<M>) => Promise<IErrorResult<M>>;
5
8
  }
6
9
 
7
10
  interface ISuccessResult<T = void> {
8
11
  readonly success: true;
9
12
  readonly value: T;
10
13
  readonly map: <M>(mapFunction: (value: T) => M) => ISuccessResult<M>;
14
+ readonly mapAsync: <M>(mapFunction: (value: T) => Promise<M>) => Promise<ISuccessResult<M>>;
15
+ readonly mapErr: <M>(mapFunction: (value: never) => M) => ISuccessResult<T>;
16
+ readonly mapErrAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<ISuccessResult<T>>;
11
17
  }
12
18
 
13
- type ResultType<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;
19
+ type Result<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;
14
20
  declare function success(): ISuccessResult;
15
21
  declare function success<T>(value: T): ISuccessResult<T>;
16
22
  declare function fail<E>(error: E): IErrorResult<E>;
17
- declare const isSuccessResult: <T, E = Error>(result: ResultType<T, E>) => result is ISuccessResult<T>;
18
- declare const isErrorResult: <T, E = Error>(result: ResultType<T, E>) => result is IErrorResult<E>;
19
- declare function combine(...results: ResultType[]): ResultType;
23
+ declare const isSuccessResult: <T, E = Error>(result: Result<T, E>) => result is ISuccessResult<T>;
24
+ declare const isErrorResult: <T, E = Error>(result: Result<T, E>) => result is IErrorResult<E>;
25
+ declare function combine(...results: Result[]): Result;
20
26
 
21
- export { type IErrorResult, type ISuccessResult, type ResultType, combine, fail, isErrorResult, isSuccessResult, success };
27
+ export { type IErrorResult, type ISuccessResult, type Result, combine, fail, isErrorResult, isSuccessResult, success };
package/dist/index.d.ts CHANGED
@@ -1,21 +1,27 @@
1
1
  interface IErrorResult<E = Error> {
2
2
  readonly success: false;
3
3
  readonly error: E;
4
- readonly map: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;
4
+ readonly map: <M>(mapFunction: (value: never) => M) => IErrorResult<E>;
5
+ readonly mapAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<IErrorResult<E>>;
6
+ readonly mapErr: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;
7
+ readonly mapErrAsync: <M>(mapFunction: (value: E) => Promise<M>) => Promise<IErrorResult<M>>;
5
8
  }
6
9
 
7
10
  interface ISuccessResult<T = void> {
8
11
  readonly success: true;
9
12
  readonly value: T;
10
13
  readonly map: <M>(mapFunction: (value: T) => M) => ISuccessResult<M>;
14
+ readonly mapAsync: <M>(mapFunction: (value: T) => Promise<M>) => Promise<ISuccessResult<M>>;
15
+ readonly mapErr: <M>(mapFunction: (value: never) => M) => ISuccessResult<T>;
16
+ readonly mapErrAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<ISuccessResult<T>>;
11
17
  }
12
18
 
13
- type ResultType<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;
19
+ type Result<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;
14
20
  declare function success(): ISuccessResult;
15
21
  declare function success<T>(value: T): ISuccessResult<T>;
16
22
  declare function fail<E>(error: E): IErrorResult<E>;
17
- declare const isSuccessResult: <T, E = Error>(result: ResultType<T, E>) => result is ISuccessResult<T>;
18
- declare const isErrorResult: <T, E = Error>(result: ResultType<T, E>) => result is IErrorResult<E>;
19
- declare function combine(...results: ResultType[]): ResultType;
23
+ declare const isSuccessResult: <T, E = Error>(result: Result<T, E>) => result is ISuccessResult<T>;
24
+ declare const isErrorResult: <T, E = Error>(result: Result<T, E>) => result is IErrorResult<E>;
25
+ declare function combine(...results: Result[]): Result;
20
26
 
21
- export { type IErrorResult, type ISuccessResult, type ResultType, combine, fail, isErrorResult, isSuccessResult, success };
27
+ export { type IErrorResult, type ISuccessResult, type Result, combine, fail, isErrorResult, isSuccessResult, success };
package/dist/index.js CHANGED
@@ -4,20 +4,42 @@ var ErrorResult = class _ErrorResult {
4
4
  this.error = error;
5
5
  this.success = false;
6
6
  }
7
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters
7
8
  map(mapFunction) {
9
+ return this;
10
+ }
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await
12
+ async mapAsync(mapFunction) {
13
+ return this;
14
+ }
15
+ mapErr(mapFunction) {
8
16
  return new _ErrorResult(mapFunction(this.error));
9
17
  }
18
+ async mapErrAsync(mapFunction) {
19
+ return new _ErrorResult(await mapFunction(this.error));
20
+ }
10
21
  };
11
22
 
12
23
  // src/successResult.mts
13
24
  var SuccessResult = class _SuccessResult {
14
25
  constructor(value) {
15
- this.value = value;
16
26
  this.success = true;
27
+ this.value = value;
17
28
  }
18
29
  map(mapFunction) {
19
30
  return new _SuccessResult(mapFunction(this.value));
20
31
  }
32
+ async mapAsync(mapFunction) {
33
+ return new _SuccessResult(await mapFunction(this.value));
34
+ }
35
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters
36
+ mapErr(mapFunction) {
37
+ return this;
38
+ }
39
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await
40
+ async mapErrAsync(mapFunction) {
41
+ return this;
42
+ }
21
43
  };
22
44
 
23
45
  // src/index.mts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errorResult.mts","../src/successResult.mts","../src/index.mts"],"sourcesContent":["export interface IErrorResult<E = Error> {\n readonly success: false;\n readonly error: E;\n readonly map: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;\n}\n\nexport class ErrorResult<E> implements IErrorResult<E> {\n public readonly success = false as const;\n\n public constructor(public readonly error: E) { /* empty */ }\n\n public map<M>(mapFunction: (error: E) => M): ErrorResult<M> {\n return new ErrorResult(mapFunction(this.error));\n }\n}\n","export interface ISuccessResult<T = void> {\n readonly success: true;\n readonly value: T;\n readonly map: <M>(mapFunction: (value: T) => M) => ISuccessResult<M>;\n}\n\nexport class SuccessResult<T = void> implements ISuccessResult<T> {\n public readonly success = true as const;\n\n public constructor(public readonly value: T) { /* empty */ }\n\n public map<M>(mapFunction: (value: T) => M): SuccessResult<M> {\n return new SuccessResult(mapFunction(this.value));\n }\n};\n","import type { IErrorResult } from './errorResult.mjs';\nimport { ErrorResult } from './errorResult.mjs';\nimport type { ISuccessResult } from './successResult.mjs';\nimport { SuccessResult } from './successResult.mjs';\n\nexport type { ISuccessResult };\nexport type { IErrorResult };\n\nexport type ResultType<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;\n\nexport function success(): ISuccessResult;\nexport function success<T>(value: T): ISuccessResult<T>;\nexport function success<T>(value?: T): ISuccessResult<T> {\n return new SuccessResult(value as T);\n};\n\nexport function fail<E>(error: E): IErrorResult<E> {\n return new ErrorResult(error);\n}\n\nexport const isSuccessResult = <T, E = Error>(result: ResultType<T, E>): result is ISuccessResult<T> => {\n return result.success;\n};\n\nexport const isErrorResult = <T, E = Error>(result: ResultType<T, E>): result is IErrorResult<E> => {\n return !result.success;\n};\n\nexport function combine(...results: ResultType[]): ResultType {\n for (const r of results) {\n if (!r.success) {\n return r;\n }\n }\n return new SuccessResult(undefined);\n}\n"],"mappings":";AAMO,IAAM,cAAN,MAAM,aAA0C;AAAA,EAG9C,YAA4B,OAAU;AAAV;AAFnC,SAAgB,UAAU;AAAA,EAEiC;AAAA,EAEpD,IAAO,aAA8C;AAC1D,WAAO,IAAI,aAAY,YAAY,KAAK,KAAK,CAAC;AAAA,EAChD;AACF;;;ACRO,IAAM,gBAAN,MAAM,eAAqD;AAAA,EAGzD,YAA4B,OAAU;AAAV;AAFnC,SAAgB,UAAU;AAAA,EAEiC;AAAA,EAEpD,IAAO,aAAgD;AAC5D,WAAO,IAAI,eAAc,YAAY,KAAK,KAAK,CAAC;AAAA,EAClD;AACF;;;ACFO,SAAS,QAAW,OAA8B;AACvD,SAAO,IAAI,cAAc,KAAU;AACrC;AAEO,SAAS,KAAQ,OAA2B;AACjD,SAAO,IAAI,YAAY,KAAK;AAC9B;AAEO,IAAM,kBAAkB,CAAe,WAA0D;AACtG,SAAO,OAAO;AAChB;AAEO,IAAM,gBAAgB,CAAe,WAAwD;AAClG,SAAO,CAAC,OAAO;AACjB;AAEO,SAAS,WAAW,SAAmC;AAC5D,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,EAAE,SAAS;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,IAAI,cAAc,MAAS;AACpC;","names":[]}
1
+ {"version":3,"sources":["../src/errorResult.mts","../src/successResult.mts","../src/index.mts"],"sourcesContent":["export interface IErrorResult<E = Error> {\n readonly success: false;\n readonly error: E;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n readonly map: <M>(mapFunction: (value: never) => M) => IErrorResult<E>;\n readonly mapAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<IErrorResult<E>>;\n readonly mapErr: <M>(mapFunction: (value: E) => M) => IErrorResult<M>;\n readonly mapErrAsync: <M>(mapFunction: (value: E) => Promise<M>) => Promise<IErrorResult<M>>;\n}\n\nexport class ErrorResult<E> implements IErrorResult<E> {\n public readonly success = false as const;\n\n public constructor(public readonly error: E) { /* empty */ }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters\n public map<M>(mapFunction: (error: never) => M): this {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await\n public async mapAsync<M>(mapFunction: (value: never) => Promise<M>): Promise<this> {\n return this;\n }\n\n public mapErr<M>(mapFunction: (error: E) => M): ErrorResult<M> {\n return new ErrorResult(mapFunction(this.error));\n }\n\n public async mapErrAsync<M>(mapFunction: (value: E) => Promise<M>): Promise<ErrorResult<M>> {\n return new ErrorResult(await mapFunction(this.error));\n }\n}\n","export interface ISuccessResult<T = void> {\n readonly success: true;\n readonly value: T;\n readonly map: <M>(mapFunction: (value: T) => M) => ISuccessResult<M>;\n readonly mapAsync: <M>(mapFunction: (value: T) => Promise<M>) => Promise<ISuccessResult<M>>;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n readonly mapErr: <M>(mapFunction: (value: never) => M) => ISuccessResult<T>;\n readonly mapErrAsync: <M>(mapFunction: (value: never) => Promise<M>) => Promise<ISuccessResult<T>>;\n}\n\nexport class SuccessResult<T = void> implements ISuccessResult<T> {\n public readonly success = true as const;\n public readonly value: T;\n\n public constructor(value?: T) {\n this.value = value as T;\n }\n\n public map<M>(mapFunction: (value: T) => M): SuccessResult<M> {\n return new SuccessResult(mapFunction(this.value));\n }\n\n public async mapAsync<M>(mapFunction: (value: T) => Promise<M>): Promise<SuccessResult<M>> {\n return new SuccessResult(await mapFunction(this.value));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unnecessary-type-parameters\n public mapErr<M>(mapFunction: (error: never) => M): this {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await\n public async mapErrAsync<M>(mapFunction: (value: never) => Promise<M>): Promise<this> {\n return this;\n }\n};\n","import type { IErrorResult } from './errorResult.mjs';\nimport { ErrorResult } from './errorResult.mjs';\nimport type { ISuccessResult } from './successResult.mjs';\nimport { SuccessResult } from './successResult.mjs';\n\nexport type { ISuccessResult };\nexport type { IErrorResult };\n\nexport type Result<T = void, E = Error> = ISuccessResult<T> | IErrorResult<E>;\n\nexport function success(): ISuccessResult;\nexport function success<T>(value: T): ISuccessResult<T>;\nexport function success<T>(value?: T): ISuccessResult<T> {\n return new SuccessResult(value as T);\n};\n\nexport function fail<E>(error: E): IErrorResult<E> {\n return new ErrorResult(error);\n}\n\nexport const isSuccessResult = <T, E = Error>(result: Result<T, E>): result is ISuccessResult<T> => {\n return result.success;\n};\n\nexport const isErrorResult = <T, E = Error>(result: Result<T, E>): result is IErrorResult<E> => {\n return !result.success;\n};\n\nexport function combine(...results: Result[]): Result {\n for (const r of results) {\n if (!r.success) {\n return r;\n }\n }\n return new SuccessResult(undefined);\n}\n"],"mappings":";AAUO,IAAM,cAAN,MAAM,aAA0C;AAAA,EAG9C,YAA4B,OAAU;AAAV;AAFnC,SAAgB,UAAU;AAAA,EAEiC;AAAA;AAAA,EAGpD,IAAO,aAAwC;AACpD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAa,SAAY,aAA0D;AACjF,WAAO;AAAA,EACT;AAAA,EAEO,OAAU,aAA8C;AAC7D,WAAO,IAAI,aAAY,YAAY,KAAK,KAAK,CAAC;AAAA,EAChD;AAAA,EAEA,MAAa,YAAe,aAAgE;AAC1F,WAAO,IAAI,aAAY,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,EACtD;AACF;;;ACtBO,IAAM,gBAAN,MAAM,eAAqD;AAAA,EAIzD,YAAY,OAAW;AAH9B,SAAgB,UAAU;AAIxB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEO,IAAO,aAAgD;AAC5D,WAAO,IAAI,eAAc,YAAY,KAAK,KAAK,CAAC;AAAA,EAClD;AAAA,EAEA,MAAa,SAAY,aAAkE;AACzF,WAAO,IAAI,eAAc,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,EACxD;AAAA;AAAA,EAGO,OAAU,aAAwC;AACvD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAa,YAAe,aAA0D;AACpF,WAAO;AAAA,EACT;AACF;;;ACvBO,SAAS,QAAW,OAA8B;AACvD,SAAO,IAAI,cAAc,KAAU;AACrC;AAEO,SAAS,KAAQ,OAA2B;AACjD,SAAO,IAAI,YAAY,KAAK;AAC9B;AAEO,IAAM,kBAAkB,CAAe,WAAsD;AAClG,SAAO,OAAO;AAChB;AAEO,IAAM,gBAAgB,CAAe,WAAoD;AAC9F,SAAO,CAAC,OAAO;AACjB;AAEO,SAAS,WAAW,SAA2B;AACpD,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,EAAE,SAAS;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,IAAI,cAAc,MAAS;AACpC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generic-result-type",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "A generic result wrapper",
5
5
  "license": "ISC",
6
6
  "author": "Dave Welsh",