need-result 1.2.5 → 1.3.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
@@ -1,3 +1,53 @@
1
1
  # Need Result
2
2
 
3
- Conceptually the same as [NeverThrow](https://github.com/supermacro/neverthrow), but with simpler APIs.
3
+ Conceptually the same as [NeverThrow](https://github.com/supermacro/neverthrow), but with simpler APIs.
4
+
5
+ ## Example
6
+
7
+ ```ts
8
+ function random() {
9
+ const random = Math.random();
10
+ if (random < 0.5) {
11
+ return err({ code: "RANDOM_ERROR", message: "Random error" });
12
+ }
13
+ return ok("data" as const);
14
+ }
15
+
16
+ const result = random();
17
+ // ^? Result<"data", ErrorT>
18
+
19
+ // Get the data, but throw if it's an error
20
+ const unwrapped = result.unwrap();
21
+ // ^? "data"
22
+
23
+ // Get the data if it was successful, otherwise just get "some default value"
24
+ // This will log the error if it occurs, however it can be configured otherwise
25
+ const unwrappedOr = result.unwrapOr("some default value");
26
+ // ^? "data" | "some default value"
27
+
28
+
29
+ // If the result was successful
30
+ const isOk = result.isOk();
31
+
32
+ // If the result had failed
33
+ const isErr = result.isErr();
34
+
35
+ if(isOk){
36
+ const value = result.value;
37
+ // ^? "data"
38
+ const error = result.error;
39
+ // ^? null
40
+
41
+ const unwrapped = result.unwrap();
42
+ // ^? "data"
43
+ } else {
44
+ const value = result.value;
45
+ // ^? null
46
+
47
+ const error = result.error;
48
+ // ^? ErrorT
49
+
50
+ const unwrappedOr = result.unwrapOr("some default value");
51
+ // ^? some default value"
52
+ }
53
+ ```
package/biome.json CHANGED
@@ -21,7 +21,8 @@
21
21
  "noArrayIndexKey": "off",
22
22
  "noExplicitAny": "off",
23
23
  "noDocumentCookie": "off",
24
- "noUnknownAtRules": "off"
24
+ "noUnknownAtRules": "off",
25
+ "noConfusingVoidType": "off"
25
26
  },
26
27
  "correctness": {
27
28
  "useUniqueElementIds": "off",
package/dist/index.d.mts CHANGED
@@ -1,29 +1,89 @@
1
1
  //#region src/types.d.ts
2
- type Ok<T> = [T, null];
3
- type Err<E extends ErrorT> = [null, E];
4
- type Result<T, E extends ErrorT = ErrorT> = Ok<T> | Err<E>;
2
+ interface IResult<T, E extends ErrorT | never = ErrorT> {
3
+ value: T | null;
4
+ error: E | null;
5
+ /**
6
+ * Returns true if the result is an Ok.
7
+ */
8
+ isOk(): this is Ok<T, E>;
9
+ /**
10
+ * Returns true if the result is an Err.
11
+ */
12
+ isErr(): this is Err<T, E>;
13
+ /**
14
+ * If it's an error, it will log & throw the error.
15
+ * Otherwise it will return the value.
16
+ */
17
+ unwrap(): this extends Ok<T, never> ? T : never;
18
+ /**
19
+ * If it's an error, it will log the error and simply return the default value.
20
+ * Otherwise it will return the value.
21
+ * This function does not throw.
22
+ */
23
+ unwrapOr<D>(defaultValue: D): this extends Ok<T, never> ? T : D;
24
+ }
25
+ type Result<T, E extends ErrorT | never = ErrorT> = Ok<T, E> | Err<T, E>;
5
26
  //#endregion
6
27
  //#region src/utility.types.d.ts
7
28
  type LiteralString = "" | (string & Record<never, never>);
8
29
  //#endregion
9
30
  //#region src/index.d.ts
10
- declare const ok: <T>(data: T) => Ok<T>;
11
- declare function err<E extends ErrorT>(error: E): Err<E>;
12
- declare function err(error: Error & {
13
- code?: never;
14
- }): Err<ErrorT<"UNKNOWN_ERROR", string, string, Record<string, unknown>, Error>>;
15
- declare function err<Code extends LiteralString = LiteralString, Message extends LiteralString = LiteralString, Hint extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Cause extends Error | ErrorT | unknown = unknown>(error: {
31
+ declare function ok<T, E extends ErrorT | never = never>(value: T): Ok<T, E>;
32
+ declare function ok<T extends void = void, E extends ErrorT | never = never>(value: void): Ok<void, E>;
33
+ declare function err<E extends ErrorT>(error: E): Err<never, E>;
34
+ declare function err<T = never, Code extends LiteralString = LiteralString, Message extends LiteralString = LiteralString, Hint extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Cause extends Error | ErrorT | unknown = unknown>(props: {
16
35
  code: Code;
17
36
  message: Message;
18
37
  hint?: Hint;
19
38
  data?: Data;
20
39
  cause?: Cause;
21
- }): Err<ErrorT<Uppercase<Code>, Message, Hint, Data, Cause>>;
22
- declare function err(error: unknown): Err<ErrorT<"UNKNOWN_ERROR", string, string, Record<string, unknown>, unknown>>;
23
- declare function trycatch<T>(operation: Promise<T>): Promise<Result<T, ErrorT>>;
24
- declare function trycatch<T>(operation: () => never): Result<never, ErrorT>;
25
- declare function trycatch<T>(operation: () => Promise<T>): Promise<Result<T, ErrorT>>;
26
- declare function trycatch<T>(operation: () => T): Result<T, ErrorT>;
40
+ }): Err<T, ErrorT<Code, Message, Hint, Data, Cause>>;
41
+ declare class Ok<T, E extends ErrorT | never = never> implements IResult<T, E> {
42
+ readonly value: T;
43
+ error: null;
44
+ constructor(value: T);
45
+ unwrap(): this extends Ok<T, never> ? T : never;
46
+ unwrapOr<D>(_defaultValue: D): this extends Ok<T, never> ? T : D;
47
+ isOk(): this is Ok<T, E>;
48
+ isErr(): this is Err<T, E>;
49
+ }
50
+ declare class Err<T = never, E extends ErrorT = ErrorT> implements IResult<T, E> {
51
+ readonly error: E;
52
+ value: null;
53
+ constructor(error: E);
54
+ unwrap(): never;
55
+ unwrapOr<D>(defaultValue: D): D;
56
+ isOk(): this is Ok<never>;
57
+ isErr(): this is Err<T, E>;
58
+ }
59
+ declare function trycatch<T, Code extends LiteralString = "UNKNOWN_ERROR", Message extends LiteralString = `Unknown error: ${string}`, Hint extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Cause extends Error | ErrorT | unknown = unknown>(operation: Promise<T>, mapError?: (error: unknown) => {
60
+ code: Code;
61
+ message: Message;
62
+ hint?: Hint;
63
+ data?: Data;
64
+ cause?: Cause;
65
+ }): Promise<Result<T, ErrorT<Code, Message, Hint, Data, Cause>>>;
66
+ declare function trycatch<T, Code extends LiteralString = "UNKNOWN_ERROR", Message extends LiteralString = `Unknown error: ${string}`, Hint extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Cause extends Error | ErrorT | unknown = unknown>(operation: () => never, mapError?: (error: unknown) => {
67
+ code: Code;
68
+ message: Message;
69
+ hint?: Hint;
70
+ data?: Data;
71
+ cause?: Cause;
72
+ }): Result<never, ErrorT<Code, Message, Hint, Data, Cause>>;
73
+ declare function trycatch<T, Code extends LiteralString = "UNKNOWN_ERROR", Message extends LiteralString = `Unknown error: ${string}`, Hint extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Cause extends Error | ErrorT | unknown = unknown>(operation: () => Promise<T>, mapError?: (error: unknown) => {
74
+ code: Code;
75
+ message: Message;
76
+ hint?: Hint;
77
+ data?: Data;
78
+ cause?: Cause;
79
+ }): Promise<Result<T, ErrorT<Code, Message, Hint, Data, Cause>>>;
80
+ declare function trycatch<T, Code extends LiteralString = "UNKNOWN_ERROR", Message extends LiteralString = `Unknown error: ${string}`, Hint extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Cause extends Error | ErrorT | unknown = unknown>(operation: () => T, mapError?: (error: unknown) => {
81
+ code: Code;
82
+ message: Message;
83
+ hint?: Hint;
84
+ data?: Data;
85
+ cause?: Cause;
86
+ }): Result<T, ErrorT<Code, Message, Hint, Data, Cause>>;
27
87
  declare const TTY_COLORS: {
28
88
  readonly reset: "\u001B[0m";
29
89
  readonly bright: "\u001B[1m";
@@ -54,27 +114,21 @@ declare const TTY_COLORS: {
54
114
  readonly white: "\u001B[47m";
55
115
  };
56
116
  };
57
- declare const logError: <Silent extends boolean = false, ReturnValue extends "errorT" | "string" = "string">(error: ErrorT | Err<ErrorT>, options?: {
117
+ declare const logError: <Silent extends boolean = false, ReturnValue extends "errorT" | "string" = "string">(error: ErrorT | Err<ErrorT>, opts?: {
58
118
  silent?: Silent;
59
119
  returnValue?: ReturnValue;
60
- }) => Silent extends true ? undefined : ReturnValue extends "errorT" ? ErrorT : string;
61
- type ThrowOnErrorOptions = {
62
- silent?: boolean;
63
120
  stackSkip?: Function;
64
- };
65
- declare function throwOnError<E extends ErrorT | Err<ErrorT>>(error: E, options?: ThrowOnErrorOptions): never;
66
- declare function throwOnError<E extends undefined | null>(error: E, options?: ThrowOnErrorOptions): void;
67
- declare function throwOnError<E extends undefined | null | ErrorT | Err<ErrorT>>(error: E, options?: ThrowOnErrorOptions): E extends undefined | null ? void : never;
68
- declare function unwrap<R extends Result<any, any>>(result: R): R extends Ok<infer T> ? T : never;
121
+ }) => Silent extends true ? undefined : ReturnValue extends "errorT" ? ErrorT : string;
69
122
  declare class ErrorT<Code extends LiteralString = LiteralString, Message extends LiteralString = LiteralString, Hint extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Cause extends Error | ErrorT | unknown = unknown> {
70
123
  code: Uppercase<Code>;
71
- data?: Data;
72
- cause?: Cause;
73
- hint?: Hint;
74
124
  message: Message;
75
125
  name: string;
76
126
  stack: string;
77
127
  realStack: string;
128
+ data?: Data;
129
+ cause?: Cause;
130
+ hint?: Hint;
131
+ stackSkip?: Function;
78
132
  constructor(error: {
79
133
  code: Code;
80
134
  data?: Data;
@@ -86,5 +140,5 @@ declare class ErrorT<Code extends LiteralString = LiteralString, Message extends
86
140
  toString(): undefined;
87
141
  }
88
142
  //#endregion
89
- export { Err, ErrorT, Ok, Result, TTY_COLORS, err, logError, ok, throwOnError, trycatch, unwrap };
143
+ export { Err, ErrorT, IResult, Ok, Result, TTY_COLORS, err, logError, ok, trycatch };
90
144
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/utility.types.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/utility.types.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  const e=e=>!!e&&(typeof e==`object`||typeof e==`function`)&&typeof e.then==`function`;function t(e){let n={};return`captureStackTrace`in Error?Error.captureStackTrace(n,e??t):n.stack=Error().stack,n.stack}function n(e,t){let n=` `.repeat(t);return e.split(`
2
2
  `).map(e=>n+e).join(`
3
- `)}const r=e=>[e,null];function i(e){if(e instanceof u)return[null,e];if(e instanceof Error)return[null,new u({code:`UNKNOWN_ERROR`,message:`message`in e?e.message:String(e),cause:e??void 0,stackSkip:i})];if(typeof e==`object`&&e&&`code`in e&&`message`in e){let t=e;return[null,new u({code:t.code,message:t.message,hint:t.hint,data:t.data,cause:t.cause,stackSkip:i})]}let t=e;return[null,new u({code:`UNKNOWN_ERROR`,message:typeof t==`object`&&t&&`message`in t&&typeof t.message==`string`?t.message:String(e)||`Unknown error`,cause:e??void 0})]}function a(t){try{let n=typeof t==`function`?t():t;return e(n)?Promise.resolve(n).then(e=>r(e)).catch(e=>i(e)):r(n)}catch(e){return i(e)}}const o={reset:`\x1B[0m`,bright:`\x1B[1m`,dim:`\x1B[2m`,undim:`\x1B[22m`,underscore:`\x1B[4m`,blink:`\x1B[5m`,reverse:`\x1B[7m`,hidden:`\x1B[8m`,fg:{black:`\x1B[30m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`,white:`\x1B[37m`},bg:{black:`\x1B[40m`,red:`\x1B[41m`,green:`\x1B[42m`,yellow:`\x1B[43m`,blue:`\x1B[44m`,magenta:`\x1B[45m`,cyan:`\x1B[46m`,white:`\x1B[47m`}},s=(e,t={returnValue:`string`,silent:!1})=>{let{code:r,message:i,stack:a,name:c,cause:l,hint:d,data:f}=Array.isArray(e)?e[1]:e,p=`${o.dim}│${o.reset} `,m=`${o.dim}└${o.reset} `,h=[`\n${p} ${o.dim}Code:${o.reset} ${o.bright}${o.fg.red}${r}${o.reset}`,`${p} ${o.dim}Message:${o.reset} ${o.fg.red}${i}${o.reset}`,d?`${p} ${o.dim}Hint:${o.reset} ${d}${o.reset}`:``,l?`${p} ${o.dim}Cause:${o.reset} ${l}`:``,f?`${p} ${o.dim}Data:${o.reset}\n${n(JSON.stringify(f,null,2),4).split(`
4
- `).map(e=>`${p} ${e}`).join(`
5
- `)}${o.reset}`:``,`${m} ${o.fg.black}${n(a,5).slice(3)}${o.reset}`].filter(e=>e!==``).map(e=>typeof e==`string`?n(e,2):e).join(`
6
- `),g=[`${o.bright}${o.fg.red}Error:${o.reset}`,h,o.reset];if(!t.silent){console.error(...g);let e=Error(r,{cause:l});`captureStackTrace`in Error&&Error.captureStackTrace(e,s),console.error(e)}return t.returnValue===`errorT`?e instanceof u?e:e[1]:g.join(`
7
- `)};function c(e,t={silent:!1,stackSkip:c}){if(e){let n=s(e,{returnValue:`errorT`}),r=Error(n.message,{cause:n.cause});throw`captureStackTrace`in Error&&Error.captureStackTrace(r,t.stackSkip),r}}function l(e){return c(e[1],{stackSkip:l}),e[0]}var u=class e{code;data;cause;hint;message;name;stack;realStack;constructor(n){this.name=`ErrorT`,this.code=n.code?.toUpperCase()||`UNKNOWN_ERROR`,this.data=n.data,this.cause=n.cause,this.message=n.message||`Unknown error`,this.hint=n.hint;let r=t(n.stackSkip??e);this.stack=r.replace(`Error`,``).split(`
3
+ `)}function r(e){return new a(e)}function i(e){return e instanceof u?new o(e):new o(new u({...e,stackSkip:i}))}var a=class{error=null;constructor(e){this.value=e}unwrap(){return this.value}unwrapOr(e){return this.value}isOk(){return!0}isErr(){return!1}},o=class e{value=null;constructor(e){this.error=e}unwrap(){let t=l(this.error,{returnValue:`errorT`,stackSkip:e}),n=Error(t.message,{cause:t.cause});throw`captureStackTrace`in Error&&Error.captureStackTrace(n,e),n}unwrapOr(e){return l(this.error,{stackSkip:i}),e}isOk(){return!1}isErr(){return!0}};function s(t,n){try{let n=typeof t==`function`?t():t;return e(n)?Promise.resolve(n).then(e=>r(e)).catch(e=>i(e)):r(n)}catch(e){return i(n?new u(n(e)):(e=>new u({code:`UNKNOWN_ERROR`,message:`Unknown error: ${e}`,cause:e}))(e))}}const c={reset:`\x1B[0m`,bright:`\x1B[1m`,dim:`\x1B[2m`,undim:`\x1B[22m`,underscore:`\x1B[4m`,blink:`\x1B[5m`,reverse:`\x1B[7m`,hidden:`\x1B[8m`,fg:{black:`\x1B[30m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`,white:`\x1B[37m`},bg:{black:`\x1B[40m`,red:`\x1B[41m`,green:`\x1B[42m`,yellow:`\x1B[43m`,blue:`\x1B[44m`,magenta:`\x1B[45m`,cyan:`\x1B[46m`,white:`\x1B[47m`}},l=(e,t)=>{let r={returnValue:`string`,silent:!1,stackSkip:l,...t},{code:i,message:a,stack:o,name:s,cause:d,hint:f,data:p}=e instanceof u?e:e.error,m=`${c.dim}│${c.reset} `,h=`${c.dim}└${c.reset} `,g=[`\n${m} ${c.dim}Code:${c.reset} ${c.bright}${c.fg.red}${i}${c.reset}`,`${m} ${c.dim}Message:${c.reset} ${c.fg.red}${a}${c.reset}`,f?`${m} ${c.dim}Hint:${c.reset} ${f}${c.reset}`:``,d?`${m} ${c.dim}Cause:${c.reset} ${d}`:``,p?`${m} ${c.dim}Data:${c.reset}\n${n(JSON.stringify(p,null,2),4).split(`
4
+ `).map(e=>`${m} ${e}`).join(`
5
+ `)}${c.reset}`:``,`${h} ${c.fg.black}${n(o,5).slice(3)}${c.reset}`].filter(e=>e!==``).map(e=>typeof e==`string`?n(e,2):e).join(`
6
+ `),_=[`${c.bright}${c.fg.red}Error:${c.reset}`,g,c.reset];if(!r.silent){console.error(..._);let e=Error(i,{cause:d});`captureStackTrace`in Error&&Error.captureStackTrace(e,r.stackSkip),console.error(e)}return r.returnValue===`errorT`?e instanceof u?e:e.error:_.join(`
7
+ `)};var u=class e{code;message;name;stack;realStack;data;cause;hint;stackSkip;constructor(n){this.name=`ErrorT`,this.code=n.code?.toUpperCase()||`UNKNOWN_ERROR`,this.data=n.data,this.cause=n.cause,this.message=n.message||`Unknown error`,this.hint=n.hint,this.stackSkip=n.stackSkip??e;let r=t(n.stackSkip??e);this.stack=r.replace(`Error`,``).split(`
8
8
  `).map(e=>e.trimStart()).join(`
9
- `).trim()||`Unknown stack`,this.realStack=r}toString(){return s(this,{returnValue:`string`,silent:!0})}};export{u as ErrorT,o as TTY_COLORS,i as err,s as logError,r as ok,c as throwOnError,a as trycatch,l as unwrap};
9
+ `).trim()||`Unknown stack`,this.realStack=r}toString(){return l(this,{returnValue:`string`,silent:!0,stackSkip:this.stackSkip})}};export{o as Err,u as ErrorT,a as Ok,c as TTY_COLORS,i as err,l as logError,r as ok,s as trycatch};
10
10
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["target: { stack?: string }","padding"],"sources":["../src/utility.ts","../src/index.ts"],"sourcesContent":["export const isPromise = <T = any>(value: unknown): value is Promise<T> => {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === \"object\" || typeof value === \"function\") &&\n\t\ttypeof (value as any).then === \"function\"\n\t);\n};\n\nexport function capture(stackSkip?: Function) {\n\tconst target: { stack?: string } = {};\n\tif (\"captureStackTrace\" in Error) {\n\t\t(Error as any).captureStackTrace(target, stackSkip ?? capture);\n\t} else {\n\t\ttarget.stack = new (Error as any)().stack;\n\t}\n\treturn target.stack!;\n}\n\nexport function padding(text: string, spaces: number): string {\n\tconst padding = \" \".repeat(spaces);\n\treturn text\n\t\t.split(\"\\n\")\n\t\t.map((line) => padding + line)\n\t\t.join(\"\\n\");\n}\n","import type { Err, Ok, Result } from \"./types\";\nimport { capture, isPromise, padding } from \"./utility\";\nimport type { LiteralString } from \"./utility.types\";\n\nexport * from \"./types\";\n\nexport const ok = <T>(data: T): Ok<T> => [data, null];\n\nexport function err<E extends ErrorT>(error: E): Err<E>;\nexport function err(\n\terror: Error & { code?: never },\n): Err<ErrorT<\"UNKNOWN_ERROR\", string, string, Record<string, unknown>, Error>>;\nexport function err<\n\tCode extends LiteralString = LiteralString,\n\tMessage extends LiteralString = LiteralString,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n>(error: {\n\tcode: Code;\n\tmessage: Message;\n\thint?: Hint;\n\tdata?: Data;\n\tcause?: Cause;\n}): Err<ErrorT<Uppercase<Code>, Message, Hint, Data, Cause>>;\nexport function err(\n\terror: unknown,\n): Err<\n\tErrorT<\"UNKNOWN_ERROR\", string, string, Record<string, unknown>, unknown>\n>;\nexport function err(\n\terror:\n\t\t| Error\n\t\t| unknown\n\t\t| {\n\t\t\t\tcode: LiteralString;\n\t\t\t\tmessage: LiteralString;\n\t\t\t\thint?: string;\n\t\t\t\tdata?: Record<string, unknown>;\n\t\t\t\tcause?: Error | ErrorT | unknown;\n\t\t }\n\t\t| ErrorT,\n): Err<ErrorT> {\n\tif (error instanceof ErrorT) {\n\t\treturn [null, error] as Err<ErrorT>;\n\t}\n\n\tif (error instanceof Error) {\n\t\treturn [\n\t\t\tnull,\n\t\t\tnew ErrorT({\n\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\tmessage: \"message\" in error ? error.message : String(error),\n\t\t\t\tcause: error ?? undefined,\n\t\t\t\tstackSkip: err,\n\t\t\t}),\n\t\t];\n\t}\n\n\tif (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t\"message\" in error\n\t) {\n\t\tconst errorObj = error as {\n\t\t\tcode: LiteralString;\n\t\t\tmessage: LiteralString;\n\t\t\thint?: string;\n\t\t\tdata?: Record<string, unknown>;\n\t\t\tcause?: Error | ErrorT | unknown;\n\t\t};\n\t\treturn [\n\t\t\tnull,\n\t\t\tnew ErrorT({\n\t\t\t\tcode: errorObj.code,\n\t\t\t\tmessage: errorObj.message,\n\t\t\t\thint: errorObj.hint,\n\t\t\t\tdata: errorObj.data,\n\t\t\t\tcause: errorObj.cause,\n\t\t\t\tstackSkip: err,\n\t\t\t}),\n\t\t];\n\t}\n\n\tconst unknownError = error as unknown;\n\n\tconst e = new ErrorT({\n\t\tcode: \"UNKNOWN_ERROR\",\n\t\tmessage:\n\t\t\ttypeof unknownError === \"object\" &&\n\t\t\tunknownError !== null &&\n\t\t\t\"message\" in unknownError &&\n\t\t\ttypeof unknownError.message === \"string\"\n\t\t\t\t? unknownError.message\n\t\t\t\t: String(error) || \"Unknown error\",\n\t\tcause: error ?? undefined,\n\t});\n\treturn [null, e];\n}\n\n//----------------------------------------------------\n// Some of the try-catch code was a copy from\n// https://gist.github.com/t3dotgg/a486c4ae66d32bf17c09c73609dacc5b\n//----------------------------------------------------\ntype Operation<T> = Promise<T> | (() => T) | (() => Promise<T>);\n\nexport function trycatch<T>(operation: Promise<T>): Promise<Result<T, ErrorT>>;\n\nexport function trycatch<T>(operation: () => never): Result<never, ErrorT>;\n\nexport function trycatch<T>(\n\toperation: () => Promise<T>,\n): Promise<Result<T, ErrorT>>;\n\nexport function trycatch<T>(operation: () => T): Result<T, ErrorT>;\n\nexport function trycatch<T>(\n\toperation: Operation<T>,\n): Result<T, ErrorT> | Promise<Result<T, ErrorT>> {\n\ttry {\n\t\tconst result = typeof operation === \"function\" ? operation() : operation;\n\n\t\tif (isPromise(result)) {\n\t\t\treturn Promise.resolve(result)\n\t\t\t\t.then((data) => ok(data))\n\t\t\t\t.catch((error) => err(error));\n\t\t}\n\n\t\treturn ok(result);\n\t} catch (error) {\n\t\treturn err(error);\n\t}\n}\n\n// ----------------------------------------------------\n\nexport const TTY_COLORS = {\n\treset: \"\\x1b[0m\",\n\tbright: \"\\x1b[1m\",\n\tdim: \"\\x1b[2m\",\n\tundim: \"\\x1b[22m\",\n\tunderscore: \"\\x1b[4m\",\n\tblink: \"\\x1b[5m\",\n\treverse: \"\\x1b[7m\",\n\thidden: \"\\x1b[8m\",\n\tfg: {\n\t\tblack: \"\\x1b[30m\",\n\t\tred: \"\\x1b[31m\",\n\t\tgreen: \"\\x1b[32m\",\n\t\tyellow: \"\\x1b[33m\",\n\t\tblue: \"\\x1b[34m\",\n\t\tmagenta: \"\\x1b[35m\",\n\t\tcyan: \"\\x1b[36m\",\n\t\twhite: \"\\x1b[37m\",\n\t},\n\tbg: {\n\t\tblack: \"\\x1b[40m\",\n\t\tred: \"\\x1b[41m\",\n\t\tgreen: \"\\x1b[42m\",\n\t\tyellow: \"\\x1b[43m\",\n\t\tblue: \"\\x1b[44m\",\n\t\tmagenta: \"\\x1b[45m\",\n\t\tcyan: \"\\x1b[46m\",\n\t\twhite: \"\\x1b[47m\",\n\t},\n} as const;\n\nexport const logError = <\n\tSilent extends boolean = false,\n\tReturnValue extends \"errorT\" | \"string\" = \"string\",\n>(\n\terror: ErrorT | Err<ErrorT>,\n\toptions: {\n\t\tsilent?: Silent;\n\t\treturnValue?: ReturnValue;\n\t} = { returnValue: \"string\" as ReturnValue, silent: false as Silent },\n): Silent extends true\n\t? undefined\n\t: ReturnValue extends \"errorT\"\n\t\t? ErrorT\n\t\t: string => {\n\tconst { code, message, stack, name, cause, hint, data } = Array.isArray(error)\n\t\t? error[1]\n\t\t: error;\n\n\tconst l = `${TTY_COLORS.dim}│${TTY_COLORS.reset} `;\n\tconst cl = `${TTY_COLORS.dim}└${TTY_COLORS.reset} `;\n\n\tconst lines = [\n\t\t`\\n${l} ${TTY_COLORS.dim}Code:${TTY_COLORS.reset} ${TTY_COLORS.bright}${TTY_COLORS.fg.red}${code}${TTY_COLORS.reset}`,\n\t\t`${l} ${TTY_COLORS.dim}Message:${TTY_COLORS.reset} ${TTY_COLORS.fg.red}${message}${TTY_COLORS.reset}`,\n\t\thint\n\t\t\t? `${l} ${TTY_COLORS.dim}Hint:${TTY_COLORS.reset} ${hint}${TTY_COLORS.reset}`\n\t\t\t: \"\",\n\t\tcause ? `${l} ${TTY_COLORS.dim}Cause:${TTY_COLORS.reset} ${cause}` : \"\",\n\t\tdata\n\t\t\t? `${l} ${TTY_COLORS.dim}Data:${TTY_COLORS.reset}\\n${padding(\n\t\t\t\t\tJSON.stringify(data, null, 2),\n\t\t\t\t\t4,\n\t\t\t\t)\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((x) => `${l} ${x}`)\n\t\t\t\t\t.join(\"\\n\")}${TTY_COLORS.reset}`\n\t\t\t: \"\",\n\t\t`${cl} ${TTY_COLORS.fg.black}${padding(stack, 5).slice(3)}${TTY_COLORS.reset}`,\n\t]\n\t\t.filter((x) => x !== \"\")\n\t\t.map((x) => {\n\t\t\tif (typeof x === \"string\") {\n\t\t\t\treturn padding(x, 2);\n\t\t\t}\n\t\t\treturn x;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst result = [\n\t\t`${TTY_COLORS.bright}${TTY_COLORS.fg.red}Error:${TTY_COLORS.reset}`,\n\t\tlines,\n\t\tTTY_COLORS.reset,\n\t];\n\n\tif (!options.silent) {\n\t\tconsole.error(...result);\n\t\tconst e = new Error(code, { cause }) as Error & { stack?: string };\n\t\tif (\"captureStackTrace\" in Error) {\n\t\t\t(Error as any).captureStackTrace(e, logError);\n\t\t}\n\t\tconsole.error(e);\n\t}\n\n\tif (options.returnValue === \"errorT\") {\n\t\tif (error instanceof ErrorT) {\n\t\t\treturn error as any;\n\t\t}\n\t\treturn error[1] as any;\n\t}\n\treturn result.join(\"\\n\") as any;\n};\n\ntype ThrowOnErrorOptions = {\n\tsilent?: boolean;\n\tstackSkip?: Function;\n};\n\nexport function throwOnError<E extends ErrorT | Err<ErrorT>>(\n\terror: E,\n\toptions?: ThrowOnErrorOptions,\n): never;\nexport function throwOnError<E extends undefined | null>(\n\terror: E,\n\toptions?: ThrowOnErrorOptions,\n): void;\nexport function throwOnError<E extends undefined | null | ErrorT | Err<ErrorT>>(\n\terror: E,\n\toptions?: ThrowOnErrorOptions,\n): E extends undefined | null ? void : never;\nexport function throwOnError<E extends ErrorT | Err<ErrorT> | undefined | null>(\n\terror: E,\n\toptions: {\n\t\tsilent?: boolean;\n\t\tstackSkip?: Function;\n\t} = { silent: false, stackSkip: throwOnError },\n) {\n\tif (error) {\n\t\tconst errorValue = logError(error, {\n\t\t\treturnValue: \"errorT\",\n\t\t});\n\t\tconst e = new Error(errorValue.message, {\n\t\t\tcause: errorValue.cause,\n\t\t}) as Error & { stack?: string };\n\t\tif (\"captureStackTrace\" in Error) {\n\t\t\t(Error as any).captureStackTrace(e, options.stackSkip); // omits makeError frame\n\t\t}\n\t\tthrow e;\n\t}\n}\n\nexport function unwrap<R extends Result<any, any>>(\n\tresult: R,\n): R extends Ok<infer T> ? T : never;\nexport function unwrap<R extends Result<any, any>>(result: R) {\n\ttype Success = R extends Ok<infer T> ? T : never;\n\tthrowOnError(result[1], { stackSkip: unwrap });\n\treturn result[0] as Success;\n}\n\nexport class ErrorT<\n\tCode extends LiteralString = LiteralString,\n\tMessage extends LiteralString = LiteralString,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n> {\n\tcode: Uppercase<Code>;\n\tdata?: Data;\n\tcause?: Cause;\n\thint?: Hint;\n\tmessage: Message;\n\tname: string;\n\tstack: string;\n\trealStack: string;\n\tconstructor(error: {\n\t\tcode: Code;\n\t\tdata?: Data;\n\t\tcause?: Cause;\n\t\tmessage: Message;\n\t\thint?: Hint;\n\t\tstackSkip?: Function;\n\t}) {\n\t\tthis.name = \"ErrorT\";\n\t\t//@ts-expect-error - last resort\n\t\tthis.code =\n\t\t\t((error.code as string)?.toUpperCase() as Uppercase<Code>) ||\n\t\t\t\"UNKNOWN_ERROR\";\n\t\tthis.data = error.data;\n\t\tthis.cause = error.cause;\n\t\t//@ts-expect-error - last resort\n\t\tthis.message = error.message || \"Unknown error\";\n\t\tthis.hint = error.hint;\n\t\tconst realStack = capture(error.stackSkip ?? ErrorT);\n\t\tconst stack = realStack\n\t\t\t.replace(\"Error\", \"\")\n\t\t\t.split(\"\\n\")\n\t\t\t.map((x) => x.trimStart())\n\t\t\t.join(\"\\n\")\n\t\t\t.trim();\n\t\tthis.stack = stack || \"Unknown stack\";\n\t\tthis.realStack = realStack;\n\t}\n\n\ttoString() {\n\t\treturn logError(this, { returnValue: \"string\", silent: true });\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["target: { stack?: string }","padding","value: T","error: E","error"],"sources":["../src/utility.ts","../src/index.ts"],"sourcesContent":["export const isPromise = <T = any>(value: unknown): value is Promise<T> => {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === \"object\" || typeof value === \"function\") &&\n\t\ttypeof (value as any).then === \"function\"\n\t);\n};\n\nexport function capture(stackSkip?: Function) {\n\tconst target: { stack?: string } = {};\n\tif (\"captureStackTrace\" in Error) {\n\t\t(Error as any).captureStackTrace(target, stackSkip ?? capture);\n\t} else {\n\t\ttarget.stack = new (Error as any)().stack;\n\t}\n\treturn target.stack!;\n}\n\nexport function padding(text: string, spaces: number): string {\n\tconst padding = \" \".repeat(spaces);\n\treturn text\n\t\t.split(\"\\n\")\n\t\t.map((line) => padding + line)\n\t\t.join(\"\\n\");\n}\n","import type { IResult, Result } from \"./types\";\nimport { capture, isPromise, padding } from \"./utility\";\nimport type { LiteralString } from \"./utility.types\";\n\nexport * from \"./types\";\n\nexport function ok<T, E extends ErrorT | never = never>(value: T): Ok<T, E>;\nexport function ok<T extends void = void, E extends ErrorT | never = never>(\n\tvalue: void,\n): Ok<void, E>;\nexport function ok<T, E extends ErrorT | never = never>(value: T): Ok<T, E> {\n\treturn new Ok(value);\n}\n\nexport function err<E extends ErrorT>(error: E): Err<never, E>;\nexport function err<\n\tT = never,\n\tCode extends LiteralString = LiteralString,\n\tMessage extends LiteralString = LiteralString,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n>(props: {\n\tcode: Code;\n\tmessage: Message;\n\thint?: Hint;\n\tdata?: Data;\n\tcause?: Cause;\n}): Err<T, ErrorT<Code, Message, Hint, Data, Cause>>;\nexport function err(props: any) {\n\tif (props instanceof ErrorT) {\n\t\treturn new Err(props);\n\t}\n\tconst error = new ErrorT({ ...props, stackSkip: err });\n\treturn new Err(error);\n}\n\nexport class Ok<T, E extends ErrorT | never = never> implements IResult<T, E> {\n\terror = null;\n\n\tconstructor(public readonly value: T) {}\n\n\tunwrap(): this extends Ok<T, never> ? T : never {\n\t\treturn this.value as any;\n\t}\n\n\tunwrapOr<D>(_defaultValue: D): this extends Ok<T, never> ? T : D {\n\t\treturn this.value as any;\n\t}\n\n\tisOk(): this is Ok<T, E> {\n\t\treturn true;\n\t}\n\n\tisErr(): this is Err<T, E> {\n\t\treturn false;\n\t}\n}\n\nexport class Err<T = never, E extends ErrorT = ErrorT>\n\timplements IResult<T, E>\n{\n\tvalue = null;\n\n\tconstructor(public readonly error: E) {}\n\n\tunwrap(): never {\n\t\tconst errorValue = logError(this.error, {\n\t\t\treturnValue: \"errorT\",\n\t\t\tstackSkip: Err,\n\t\t});\n\t\tconst e = new Error(errorValue.message, {\n\t\t\tcause: errorValue.cause,\n\t\t});\n\t\tif (\"captureStackTrace\" in Error) {\n\t\t\tError.captureStackTrace(e, Err);\n\t\t}\n\t\tthrow e;\n\t}\n\n\t//@ts-expect-error - this works\n\tunwrapOr<D>(defaultValue: D): D {\n\t\tlogError(this.error, { stackSkip: err });\n\t\treturn defaultValue;\n\t}\n\n\tisOk(): this is Ok<never> {\n\t\treturn false;\n\t}\n\n\tisErr(): this is Err<T, E> {\n\t\treturn true;\n\t}\n}\n\n//----------------------------------------------------\n// Some of the try-catch code was a copy from\n// https://gist.github.com/t3dotgg/a486c4ae66d32bf17c09c73609dacc5b\n//----------------------------------------------------\ntype Operation<T> = Promise<T> | (() => T) | (() => Promise<T>);\n\nexport function trycatch<\n\tT,\n\tCode extends LiteralString = \"UNKNOWN_ERROR\",\n\tMessage extends LiteralString = `Unknown error: ${string}`,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n>(\n\toperation: Promise<T>,\n\tmapError?: (error: unknown) => {\n\t\tcode: Code;\n\t\tmessage: Message;\n\t\thint?: Hint;\n\t\tdata?: Data;\n\t\tcause?: Cause;\n\t},\n): Promise<Result<T, ErrorT<Code, Message, Hint, Data, Cause>>>;\n\nexport function trycatch<\n\tT,\n\tCode extends LiteralString = \"UNKNOWN_ERROR\",\n\tMessage extends LiteralString = `Unknown error: ${string}`,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n>(\n\toperation: () => never,\n\tmapError?: (error: unknown) => {\n\t\tcode: Code;\n\t\tmessage: Message;\n\t\thint?: Hint;\n\t\tdata?: Data;\n\t\tcause?: Cause;\n\t},\n): Result<never, ErrorT<Code, Message, Hint, Data, Cause>>;\n\nexport function trycatch<\n\tT,\n\tCode extends LiteralString = \"UNKNOWN_ERROR\",\n\tMessage extends LiteralString = `Unknown error: ${string}`,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n>(\n\toperation: () => Promise<T>,\n\tmapError?: (error: unknown) => {\n\t\tcode: Code;\n\t\tmessage: Message;\n\t\thint?: Hint;\n\t\tdata?: Data;\n\t\tcause?: Cause;\n\t},\n): Promise<Result<T, ErrorT<Code, Message, Hint, Data, Cause>>>;\n\nexport function trycatch<\n\tT,\n\tCode extends LiteralString = \"UNKNOWN_ERROR\",\n\tMessage extends LiteralString = `Unknown error: ${string}`,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n>(\n\toperation: () => T,\n\tmapError?: (error: unknown) => {\n\t\tcode: Code;\n\t\tmessage: Message;\n\t\thint?: Hint;\n\t\tdata?: Data;\n\t\tcause?: Cause;\n\t},\n): Result<T, ErrorT<Code, Message, Hint, Data, Cause>>;\n\nexport function trycatch<\n\tT,\n\tCode extends LiteralString = \"UNKNOWN_ERROR\",\n\tMessage extends LiteralString = `Unknown error: ${string}`,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n\tE extends ErrorT = ErrorT<Code, Message, Hint, Data, Cause>,\n>(\n\toperation: Operation<T>,\n\tmapError?: (error: unknown) => {\n\t\tcode: Code;\n\t\tmessage: Message;\n\t\thint?: Hint;\n\t\tdata?: Data;\n\t\tcause?: Cause;\n\t},\n): Result<T, E> | Promise<Result<T, E>> {\n\ttry {\n\t\tconst result = typeof operation === \"function\" ? operation() : operation;\n\n\t\tif (isPromise(result)) {\n\t\t\tconst resolved = Promise.resolve(result)\n\t\t\t\t.then((data) => ok(data))\n\t\t\t\t.catch((error) => err(error));\n\t\t\treturn resolved as Promise<Result<T, E>>;\n\t\t}\n\n\t\treturn ok(result);\n\t} catch (error) {\n\t\tconst defaultMapError = (error: unknown) => {\n\t\t\treturn new ErrorT({\n\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\tmessage: `Unknown error: ${error}`,\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t};\n\t\tconst mappedError = (mapError\n\t\t\t? new ErrorT(mapError(error))\n\t\t\t: defaultMapError(error)) as unknown as E;\n\t\treturn err(mappedError);\n\t}\n}\n\n// ----------------------------------------------------\n\nexport const TTY_COLORS = {\n\treset: \"\\x1b[0m\",\n\tbright: \"\\x1b[1m\",\n\tdim: \"\\x1b[2m\",\n\tundim: \"\\x1b[22m\",\n\tunderscore: \"\\x1b[4m\",\n\tblink: \"\\x1b[5m\",\n\treverse: \"\\x1b[7m\",\n\thidden: \"\\x1b[8m\",\n\tfg: {\n\t\tblack: \"\\x1b[30m\",\n\t\tred: \"\\x1b[31m\",\n\t\tgreen: \"\\x1b[32m\",\n\t\tyellow: \"\\x1b[33m\",\n\t\tblue: \"\\x1b[34m\",\n\t\tmagenta: \"\\x1b[35m\",\n\t\tcyan: \"\\x1b[36m\",\n\t\twhite: \"\\x1b[37m\",\n\t},\n\tbg: {\n\t\tblack: \"\\x1b[40m\",\n\t\tred: \"\\x1b[41m\",\n\t\tgreen: \"\\x1b[42m\",\n\t\tyellow: \"\\x1b[43m\",\n\t\tblue: \"\\x1b[44m\",\n\t\tmagenta: \"\\x1b[45m\",\n\t\tcyan: \"\\x1b[46m\",\n\t\twhite: \"\\x1b[47m\",\n\t},\n} as const;\n\nexport const logError = <\n\tSilent extends boolean = false,\n\tReturnValue extends \"errorT\" | \"string\" = \"string\",\n>(\n\terror: ErrorT | Err<ErrorT>,\n\topts?: {\n\t\tsilent?: Silent;\n\t\treturnValue?: ReturnValue;\n\t\tstackSkip?: Function;\n\t},\n): Silent extends true\n\t? undefined\n\t: ReturnValue extends \"errorT\"\n\t\t? ErrorT\n\t\t: string => {\n\tconst options = {\n\t\treturnValue: \"string\",\n\t\tsilent: false,\n\t\tstackSkip: logError,\n\t\t...opts,\n\t};\n\tconst { code, message, stack, name, cause, hint, data } =\n\t\terror instanceof ErrorT ? error : error.error;\n\n\tconst l = `${TTY_COLORS.dim}│${TTY_COLORS.reset} `;\n\tconst cl = `${TTY_COLORS.dim}└${TTY_COLORS.reset} `;\n\n\tconst lines = [\n\t\t`\\n${l} ${TTY_COLORS.dim}Code:${TTY_COLORS.reset} ${TTY_COLORS.bright}${TTY_COLORS.fg.red}${code}${TTY_COLORS.reset}`,\n\t\t`${l} ${TTY_COLORS.dim}Message:${TTY_COLORS.reset} ${TTY_COLORS.fg.red}${message}${TTY_COLORS.reset}`,\n\t\thint\n\t\t\t? `${l} ${TTY_COLORS.dim}Hint:${TTY_COLORS.reset} ${hint}${TTY_COLORS.reset}`\n\t\t\t: \"\",\n\t\tcause ? `${l} ${TTY_COLORS.dim}Cause:${TTY_COLORS.reset} ${cause}` : \"\",\n\t\tdata\n\t\t\t? `${l} ${TTY_COLORS.dim}Data:${TTY_COLORS.reset}\\n${padding(\n\t\t\t\t\tJSON.stringify(data, null, 2),\n\t\t\t\t\t4,\n\t\t\t\t)\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((x) => `${l} ${x}`)\n\t\t\t\t\t.join(\"\\n\")}${TTY_COLORS.reset}`\n\t\t\t: \"\",\n\t\t`${cl} ${TTY_COLORS.fg.black}${padding(stack, 5).slice(3)}${TTY_COLORS.reset}`,\n\t]\n\t\t.filter((x) => x !== \"\")\n\t\t.map((x) => {\n\t\t\tif (typeof x === \"string\") {\n\t\t\t\treturn padding(x, 2);\n\t\t\t}\n\t\t\treturn x;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst result = [\n\t\t`${TTY_COLORS.bright}${TTY_COLORS.fg.red}Error:${TTY_COLORS.reset}`,\n\t\tlines,\n\t\tTTY_COLORS.reset,\n\t];\n\n\tif (!options.silent) {\n\t\tconsole.error(...result);\n\t\tconst e = new Error(code, { cause }) as Error & { stack?: string };\n\t\tif (\"captureStackTrace\" in Error) {\n\t\t\t(Error as any).captureStackTrace(e, options.stackSkip);\n\t\t}\n\t\tconsole.error(e);\n\t}\n\n\tif (options.returnValue === \"errorT\") {\n\t\tif (error instanceof ErrorT) {\n\t\t\treturn error as any;\n\t\t}\n\t\treturn error.error as any;\n\t}\n\treturn result.join(\"\\n\") as any;\n};\n\nexport class ErrorT<\n\tCode extends LiteralString = LiteralString,\n\tMessage extends LiteralString = LiteralString,\n\tHint extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tCause extends Error | ErrorT | unknown = unknown,\n> {\n\tcode: Uppercase<Code>;\n\tmessage: Message;\n\tname: string;\n\tstack: string;\n\trealStack: string;\n\tdata?: Data;\n\tcause?: Cause;\n\thint?: Hint;\n\tstackSkip?: Function;\n\tconstructor(error: {\n\t\tcode: Code;\n\t\tdata?: Data;\n\t\tcause?: Cause;\n\t\tmessage: Message;\n\t\thint?: Hint;\n\t\tstackSkip?: Function;\n\t}) {\n\t\tthis.name = \"ErrorT\";\n\t\t//@ts-expect-error - last resort\n\t\tthis.code =\n\t\t\t((error.code as string)?.toUpperCase() as Uppercase<Code>) ||\n\t\t\t\"UNKNOWN_ERROR\";\n\t\tthis.data = error.data;\n\t\tthis.cause = error.cause;\n\t\t//@ts-expect-error - last resort\n\t\tthis.message = error.message || \"Unknown error\";\n\t\tthis.hint = error.hint;\n\t\tthis.stackSkip = error.stackSkip ?? ErrorT;\n\t\tconst realStack = capture(error.stackSkip ?? ErrorT);\n\t\tconst stack = realStack\n\t\t\t.replace(\"Error\", \"\")\n\t\t\t.split(\"\\n\")\n\t\t\t.map((x) => x.trimStart())\n\t\t\t.join(\"\\n\")\n\t\t\t.trim();\n\t\tthis.stack = stack || \"Unknown stack\";\n\t\tthis.realStack = realStack;\n\t}\n\n\ttoString() {\n\t\treturn logError(this, {\n\t\t\treturnValue: \"string\",\n\t\t\tsilent: true,\n\t\t\tstackSkip: this.stackSkip,\n\t\t});\n\t}\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "need-result",
3
- "version": "1.2.5",
3
+ "version": "1.3.0",
4
4
  "type": "module",
5
5
  "packageManager": "bun@1.3.5",
6
6
  "license": "MIT",