need-result 1.3.0 → 1.3.2
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/dist/index.d.mts +7 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
//#region src/utility.types.d.ts
|
|
2
|
+
type LiteralString = "" | (string & Record<never, never>);
|
|
3
|
+
//#endregion
|
|
1
4
|
//#region src/types.d.ts
|
|
2
5
|
interface IResult<T, E extends ErrorT | never = ErrorT> {
|
|
3
6
|
value: T | null;
|
|
@@ -23,9 +26,8 @@ interface IResult<T, E extends ErrorT | never = ErrorT> {
|
|
|
23
26
|
unwrapOr<D>(defaultValue: D): this extends Ok<T, never> ? T : D;
|
|
24
27
|
}
|
|
25
28
|
type Result<T, E extends ErrorT | never = ErrorT> = Ok<T, E> | Err<T, E>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
type LiteralString = "" | (string & Record<never, never>);
|
|
29
|
+
type Codeify<T extends LiteralString> = Uppercase<ReplaceSpacesWithUnderscores<T>>;
|
|
30
|
+
type ReplaceSpacesWithUnderscores<S extends string> = S extends `${infer First} ${infer Rest}` ? `${First}_${ReplaceSpacesWithUnderscores<Rest>}` : S;
|
|
29
31
|
//#endregion
|
|
30
32
|
//#region src/index.d.ts
|
|
31
33
|
declare function ok<T, E extends ErrorT | never = never>(value: T): Ok<T, E>;
|
|
@@ -120,7 +122,7 @@ declare const logError: <Silent extends boolean = false, ReturnValue extends "er
|
|
|
120
122
|
stackSkip?: Function;
|
|
121
123
|
}) => Silent extends true ? undefined : ReturnValue extends "errorT" ? ErrorT : string;
|
|
122
124
|
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> {
|
|
123
|
-
code:
|
|
125
|
+
code: Codeify<Code>;
|
|
124
126
|
message: Message;
|
|
125
127
|
name: string;
|
|
126
128
|
stack: string;
|
|
@@ -140,5 +142,5 @@ declare class ErrorT<Code extends LiteralString = LiteralString, Message extends
|
|
|
140
142
|
toString(): undefined;
|
|
141
143
|
}
|
|
142
144
|
//#endregion
|
|
143
|
-
export { Err, ErrorT, IResult, Ok, Result, TTY_COLORS, err, logError, ok, trycatch };
|
|
145
|
+
export { Codeify, Err, ErrorT, IResult, Ok, Result, TTY_COLORS, err, logError, ok, trycatch };
|
|
144
146
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/utility.types.ts","../src/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
|
-
`)}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(`
|
|
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,t.cause?{cause:t.cause}:void 0);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
4
|
`).map(e=>`${m} ${e}`).join(`
|
|
5
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(`
|
|
6
|
+
`),_=[`${c.bright}${c.fg.red}Error:${c.reset}`,g,c.reset];if(!r.silent){console.error(..._);let e=Error(i,d?{cause:d}:void 0);`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().replaceAll(` `,`_`)||`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
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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 { Codeify, 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(\n\t\t\terrorValue.message,\n\t\t\terrorValue.cause\n\t\t\t\t? {\n\t\t\t\t\t\tcause: errorValue.cause,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\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 ? { cause } : undefined) as Error & {\n\t\t\tstack?: string;\n\t\t};\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: Codeify<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)\n\t\t\t\t?.toUpperCase()\n\t\t\t\t.replaceAll(\" \", \"_\") as Codeify<Code>) || \"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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"}
|