feat: add basic error factory
This commit is contained in:
parent
ce239dd724
commit
a8ac9d5638
7 changed files with 1128 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
*.log
|
||||||
|
|
||||||
|
/lib
|
||||||
|
/node_modules
|
||||||
4
.oxfmtrc.json
Normal file
4
.oxfmtrc.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"$schema": "./node_modules/oxfmt/configuration_schema.json",
|
||||||
|
"ignorePatterns": []
|
||||||
|
}
|
||||||
40
package.json
Normal file
40
package.json
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
"name": "coded-exception",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"keywords": [],
|
||||||
|
"license": "Unlicense",
|
||||||
|
"author": "Leonard Kinday <leonard@kinday.se> (https://leonard.kinday.se/)",
|
||||||
|
"type": "module",
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"exports": {
|
||||||
|
"types": "./lib/index.d.ts",
|
||||||
|
"default": "./lib/index.js"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc",
|
||||||
|
"conform:format": "oxfmt --no-error-on-unmatched-pattern",
|
||||||
|
"conform:source": "oxlint --fix",
|
||||||
|
"conform": "concurrently 'pnpm:conform:*'",
|
||||||
|
"test:format": "oxfmt --check --no-error-on-unmatched-pattern",
|
||||||
|
"test:source": "oxlint",
|
||||||
|
"test:size": "size-limit",
|
||||||
|
"test": "concurrently 'pnpm:test:*'"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@size-limit/preset-small-lib": "12.1.0",
|
||||||
|
"@tsconfig/node-lts": "~24.0.0",
|
||||||
|
"concurrently": "9.2.1",
|
||||||
|
"oxfmt": "0.48.0",
|
||||||
|
"oxlint": "1.63.0",
|
||||||
|
"size-limit": "12.1.0",
|
||||||
|
"typescript": "6.0.3"
|
||||||
|
},
|
||||||
|
"size-limit": [
|
||||||
|
{
|
||||||
|
"path": "lib/index.js",
|
||||||
|
"limit": "512 B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packageManager": "pnpm@11.1.2+sha512.415a1cc25974731e75455c1468371be74c5aa5fb7621b50d4056d222451609f11412f23fd602e6169f1e060466641f798597e1be961a10688836a67b16569499"
|
||||||
|
}
|
||||||
1042
pnpm-lock.yaml
generated
Normal file
1042
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load diff
8
pnpm-workspace.yaml
Normal file
8
pnpm-workspace.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
allowBuilds:
|
||||||
|
esbuild: true
|
||||||
|
simple-git-hooks: true
|
||||||
|
minimumReleaseAge: 10080 # 7 days
|
||||||
|
overrides:
|
||||||
|
coded-exception: "link:"
|
||||||
|
savePrefix: ""
|
||||||
|
useStderr: true
|
||||||
21
src/index.ts
Normal file
21
src/index.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
export interface ErrorCode {
|
||||||
|
message: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createError<Name extends string, Codes extends Record<string, ErrorCode>>(
|
||||||
|
name: Name,
|
||||||
|
codes: Codes,
|
||||||
|
) {
|
||||||
|
return class extends Error {
|
||||||
|
public code: keyof Codes;
|
||||||
|
public name: Name;
|
||||||
|
|
||||||
|
constructor(code: keyof Codes, cause?: Error) {
|
||||||
|
const { message } = codes[code];
|
||||||
|
super(message);
|
||||||
|
this.cause = cause;
|
||||||
|
this.code = code;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
9
tsconfig.json
Normal file
9
tsconfig.json
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "@tsconfig/node-lts",
|
||||||
|
"compilerOptions": {
|
||||||
|
"declaration": true,
|
||||||
|
"outDir": "lib",
|
||||||
|
"rootDir": "src"
|
||||||
|
},
|
||||||
|
"files": ["src/index.ts"]
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue