{"_id":"@bombillazo/error-x","_rev":"16-abdeaf721923a23e25fc2f50171b05d1","name":"@bombillazo/error-x","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.1":{"name":"@bombillazo/error-x","version":"0.1.1","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.1.1","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"4664dc66724564adeb265bbcd21b7ed135016aa7","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.1.1.tgz","fileCount":9,"integrity":"sha512-jlwf8kS6fpdQf8V3XKWpVBJqXHbLaOenEqqiLfZ1g6qEe2Hp/rAWB16CyT1c1MoyCWydkb9+Dmoyn4loWwtcDw==","signatures":[{"sig":"MEQCIGAOSQQrkMm5nSnnZAcFOSaT6JTQQpcV7obNyPmgug8pAiATA3yKg4fZbcJIvOITCEncX7/dE1kqLMTs9wn7RJSSdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165882},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.1.1.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && rm -rf ./etc ./temp"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/private/var/folders/kp/brk5wgsn5mz73fxhj06c9tdw0000gn/T/9bd03162a457c96a92b123415c9a6070/bombillazo-error-x-0.1.1.tgz","_integrity":"sha512-jlwf8kS6fpdQf8V3XKWpVBJqXHbLaOenEqqiLfZ1g6qEe2Hp/rAWB16CyT1c1MoyCWydkb9+Dmoyn4loWwtcDw==","_npmVersion":"11.4.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"22.14.0","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"^2.2.0","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.0","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.10","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.1.1_1755499306406_0.11000226733582741","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bombillazo/error-x","version":"0.2.0","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.2.0","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"115146d2bb017c0fd1a3a12026673d001970523c","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.2.0.tgz","fileCount":9,"integrity":"sha512-/MFjMcirG7QtV825P98LM5Da8OOsjUmk9SDJrJtCDye7dEj1n+IIPO1adKodirO8ZezOXf/nxVF8t3SQ2pc6kA==","signatures":[{"sig":"MEUCIQD7TWYQcmn4/YPQR7ta1NMkn105zIu9D6RQp3XRIBCC9wIgZmvbUAw59/MgXKx6NMpO28PTRngHMqhLfhCuvJKZPyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182681},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.2.0.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/6ea88de115be4ca06cbf9d01047767f4/bombillazo-error-x-0.2.0.tgz","_integrity":"sha512-/MFjMcirG7QtV825P98LM5Da8OOsjUmk9SDJrJtCDye7dEj1n+IIPO1adKodirO8ZezOXf/nxVF8t3SQ2pc6kA==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.2.0_1759196748945_0.14020325087337304","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bombillazo/error-x","version":"0.2.1","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.2.1","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"5f67e0c5b1dbfbe6a0247ce9988c2d01fcb29104","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.2.1.tgz","fileCount":9,"integrity":"sha512-IMrEslp+gcnBXTFtL799N3LDKhkRCTnBQiHUtS+Do0/fRPBX8Qhvs8kNHs2e3HN+Ct0ThSpA4ueS7C/W2hex1Q==","signatures":[{"sig":"MEUCIQCiUUOj5qT5J6ksQhmC7JDgrwZWJcz8WzZS6of7dhZdNgIgJtzAOvKT1gf+LSrmtixeOawP3dH/dkfb0XxPofoe8Jc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":276875},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.2.1.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/5ab5b7e9ef4664fcedb14d116239e9e4/bombillazo-error-x-0.2.1.tgz","_integrity":"sha512-IMrEslp+gcnBXTFtL799N3LDKhkRCTnBQiHUtS+Do0/fRPBX8Qhvs8kNHs2e3HN+Ct0ThSpA4ueS7C/W2hex1Q==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.2.1_1759208494627_0.022747476411852707","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bombillazo/error-x","version":"0.2.2","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.2.2","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"99ccdae61b9ce3747517b03e7803ba4701c3b55f","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.2.2.tgz","fileCount":9,"integrity":"sha512-unArBMIFWQcSGNFDLk94MfeVmaPqWIAULKzMU+m2/TIUtV/TjiJB/8kogBI3IsFGPmBmGYvhTytsFdCfingFjQ==","signatures":[{"sig":"MEUCIQDt07O/KxLcBfJ8q/WwDiHOVUzP+7h9ORRW0RcgwnyKkAIgMiZhvDsI62WInWDE2e+5HBCFMDevUXoZxhcs43GPc4c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293740},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.2.2.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/714e7dcb8194dba4e97390ebaea4d52f/bombillazo-error-x-0.2.2.tgz","_integrity":"sha512-unArBMIFWQcSGNFDLk94MfeVmaPqWIAULKzMU+m2/TIUtV/TjiJB/8kogBI3IsFGPmBmGYvhTytsFdCfingFjQ==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.2.2_1759209068265_0.507369740768731","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bombillazo/error-x","version":"0.3.0","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.3.0","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"da9a64926c7b481a6819938e4ec8330ed448db4d","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.3.0.tgz","fileCount":9,"integrity":"sha512-iXtykxUHM6O6hDfwiv8iekzYPKSWtsXmwUIzF5tOC7uFd+c5RWuBxhJy9RuIM4nR0Ke6L4YdjBOHMB6A0YkW5A==","signatures":[{"sig":"MEUCID5bO9e+PAJ9JyBGaydBdajrKKagOqoGBW6Wf4K2ZffWAiEA75iYYhz+U0dt3C05zAkchQJ9Bh1/43/Ez2ZEtQsTm+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301629},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.3.0.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/62d58642a7694c72e45b21b38ebe0a01/bombillazo-error-x-0.3.0.tgz","_integrity":"sha512-iXtykxUHM6O6hDfwiv8iekzYPKSWtsXmwUIzF5tOC7uFd+c5RWuBxhJy9RuIM4nR0Ke6L4YdjBOHMB6A0YkW5A==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.3.0_1759238741806_0.3158726794007143","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bombillazo/error-x","version":"0.4.0","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.4.0","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"808119827a23ac2b1948e5ea41018857b6f82dc4","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.4.0.tgz","fileCount":9,"integrity":"sha512-uMdbvtv+wLd4ohvnhjGKDzceM7lrHozVXswff1xYkezb042WP/MuNUId3WV6s4NiQXHh1rhIgwUMnV87aK3VBQ==","signatures":[{"sig":"MEQCIAbJFDmz48A8v5OYiP0V6BvFWqGt6PIgwy0Qwuln1/8tAiBw6JJO+EpGtc+FG2KkNnokMxi2W/d33TyZ8s1EClh94A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282145},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.4.0.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/486e2371d34095d2c3f3e0ff5b4eca29/bombillazo-error-x-0.4.0.tgz","_integrity":"sha512-uMdbvtv+wLd4ohvnhjGKDzceM7lrHozVXswff1xYkezb042WP/MuNUId3WV6s4NiQXHh1rhIgwUMnV87aK3VBQ==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.4.0_1759699325521_0.3639855708280433","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@bombillazo/error-x","version":"0.4.1","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.4.1","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"8be7eb4b22821ec0ef9f1f28be827dd40cfadb65","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.4.1.tgz","fileCount":9,"integrity":"sha512-L3DxPT5YmffSnY3lgFMHIaQOQKZUvUibk8KKYewBzvHe8qEZuSBMigaqtxbJh18CVjuIss8bd2tlY9g+Lsr93w==","signatures":[{"sig":"MEUCIBqIU+uk5xRgw5hbn5nfmt4Mgs76cn5ORQB/3oSqv4XuAiEAocHY+KeGI5vVOaOmIOsJYhYj+6E98f/b+Hj1KWzZbQk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":280493},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.4.1.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/14be43f65c4629b3238f47d977d10403/bombillazo-error-x-0.4.1.tgz","_integrity":"sha512-L3DxPT5YmffSnY3lgFMHIaQOQKZUvUibk8KKYewBzvHe8qEZuSBMigaqtxbJh18CVjuIss8bd2tlY9g+Lsr93w==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.4.1_1759714641634_0.39634071997767917","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@bombillazo/error-x","version":"0.4.2","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.4.2","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"431741d32f7eaa9431a62c52b3f8612a0c522f6c","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.4.2.tgz","fileCount":9,"integrity":"sha512-caICUFsO4Av52J/iLjL8ChkIjwrTYquPEV8QoBiy5nzbczTmybfsgWINjQYKJ0U54c629DwPPF0hFE1NNaV++w==","signatures":[{"sig":"MEUCIQCimo50EKj/T3AUNUiE6qFGBTe5OMfNDUcDbW4rTYnebgIgBJuInTDwHqROayNMFY+qtPTFCf/RTDzMPy2K7ZnnM9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275917},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.4.2.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/813c3474975507b5517b07c2847052eb/bombillazo-error-x-0.4.2.tgz","_integrity":"sha512-caICUFsO4Av52J/iLjL8ChkIjwrTYquPEV8QoBiy5nzbczTmybfsgWINjQYKJ0U54c629DwPPF0hFE1NNaV++w==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.4.2_1759724769428_0.6997112722403898","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@bombillazo/error-x","version":"0.4.3","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.4.3","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"cf69aba512770908b13076d8cdd7f12c7716b78e","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.4.3.tgz","fileCount":9,"integrity":"sha512-ccG+KlracBfX2+TL0hyi9YI+m+5Ft45H/0JBbEHxaWj7Vbz/d/jRgdLe6DHuurAaU0/3AYTql3lQqQHxZMhGmw==","signatures":[{"sig":"MEUCIH+3rLl03rL1apE7afgFsVXPdb3YYmKSHSRC5RAMHlKfAiEApC4PBD5jCxnDEakUybZkCoK5mnxjDhwKlLhfG0FQtzE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272220},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.4.3.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/3769a25346c340a135fa082683a47b53/bombillazo-error-x-0.4.3.tgz","_integrity":"sha512-ccG+KlracBfX2+TL0hyi9YI+m+5Ft45H/0JBbEHxaWj7Vbz/d/jRgdLe6DHuurAaU0/3AYTql3lQqQHxZMhGmw==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.4.3_1759726483618_0.8843270123732434","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@bombillazo/error-x","version":"0.4.4","keywords":["error","typescript","error-handling","type-safe","isomorphic","async","promise"],"author":"","license":"MIT","_id":"@bombillazo/error-x@0.4.4","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"dist":{"shasum":"60c9d76343c584e7c53135205067b57b8f63634f","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.4.4.tgz","fileCount":9,"integrity":"sha512-7kA051cUwOfZrMzwCbV7hXdXcjStKenMguCAgIQ04sGSucQQtcFnwfM6M7PGV3GGr4iCQliKSpvCJ4ON+fE4hw==","signatures":[{"sig":"MEUCIQCVhDJLVAKs6RY7FnFtMWPoIGposCeMNFAmLBaSQqoQDQIgU94AwRJfb0+P2uMPlurJGBDnvE5UxJsuUxkT2Z/L6A0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272796},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.4.4.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/a6dc98713be6ea5471f9d2a54b8edbc1/bombillazo-error-x-0.4.4.tgz","_integrity":"sha512-7kA051cUwOfZrMzwCbV7hXdXcjStKenMguCAgIQ04sGSucQQtcFnwfM6M7PGV3GGr4iCQliKSpvCJ4ON+fE4hw==","_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.4.4_1759760971371_0.5193762992654523","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@bombillazo/error-x","version":"0.4.5","keywords":["async","error","error-handling","isomorphic","promise","type-safe","typescript"],"author":{"name":"Hector Ayala","email":"hran@bombillazo.com"},"license":"MIT","_id":"@bombillazo/error-x@0.4.5","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"homepage":"https://github.com/bombillazo/error-x#readme","bugs":{"url":"https://github.com/bombillazo/error-x/issues"},"dist":{"shasum":"550c205daf2bbffd7f0ab2b47b42a1075fc84ca6","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.4.5.tgz","fileCount":9,"integrity":"sha512-fHt3ubxecTklpqeIFG+oeRNFSXt6K+W5DHflp9McCmpRS1Lrti09xmrQn6uRRgvBLPW66Cm2DEdtTum6SH5sHw==","signatures":[{"sig":"MEQCIDSINqITO9lilCFtZwlvmUrbZ3IjcLkM0okdshjYRJdoAiBZIZUS+JO9UXzR7sTGLxOo++GwhUtzjvaZuu8X488qow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257593},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.4.5.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs/api"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/d552483c90d00c311f8f87ba1abf8023/bombillazo-error-x-0.4.5.tgz","_integrity":"sha512-fHt3ubxecTklpqeIFG+oeRNFSXt6K+W5DHflp9McCmpRS1Lrti09xmrQn6uRRgvBLPW66Cm2DEdtTum6SH5sHw==","repository":{"url":"git+https://github.com/bombillazo/error-x.git","type":"git"},"_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.4.5_1759781333483_0.6713711907769369","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@bombillazo/error-x","version":"0.4.6","keywords":["async","error","error-handling","isomorphic","promise","type-safe","typescript"],"author":{"name":"Hector Ayala","email":"hran@bombillazo.com"},"license":"MIT","_id":"@bombillazo/error-x@0.4.6","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"homepage":"https://github.com/bombillazo/error-x#readme","bugs":{"url":"https://github.com/bombillazo/error-x/issues"},"dist":{"shasum":"178a9eaa449f5e1311dbff49a0379732c9f6381c","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.4.6.tgz","fileCount":9,"integrity":"sha512-m7pPVIe5j271503AFTAkpAZYSc0HyeLZgwAAwDNS4tAqTV1pjwtmKGO3fCn2E4FeuZ1823HUG0YjH6U1MNSJtA==","signatures":[{"sig":"MEYCIQCTAGa64ChWvXczUss3sE4+ZGLaqPbUTSx1bUAPUnySuQIhAPvpfgvxr1pQdp9ZCnatH6boV5O14xloe4I7Ig+LiRMB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255332},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.4.6.tgz","types":"dist/index.d.ts","config":{"commitizen":{"path":"cz-customizable"},"cz-customizable":{"config":".cz-config.cjs"}},"module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","commit":"cz","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","commit:lint":"commitlint --edit","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/0ae82efe1942f4984dd4a69fccabed9c/bombillazo-error-x-0.4.6.tgz","_integrity":"sha512-m7pPVIe5j271503AFTAkpAZYSc0HyeLZgwAAwDNS4tAqTV1pjwtmKGO3fCn2E4FeuZ1823HUG0YjH6U1MNSJtA==","repository":{"url":"git+https://github.com/bombillazo/error-x.git","type":"git"},"_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.5","dependencies":{"safe-stringify":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","commitizen":"^4.3.1","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@commitlint/cli":"^19.8.1","cz-customizable":"^7.5.1","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13","@commitlint/config-conventional":"^19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.4.6_1759805617414_0.20882913355109434","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bombillazo/error-x","version":"0.5.0","keywords":["async","error","error-handling","isomorphic","promise","type-safe","typescript"],"author":{"name":"Hector Ayala","email":"hran@bombillazo.com"},"license":"MIT","_id":"@bombillazo/error-x@0.5.0","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"homepage":"https://github.com/bombillazo/error-x#readme","bugs":{"url":"https://github.com/bombillazo/error-x/issues"},"dist":{"shasum":"36cb382a71a526ad09c2c9a38a66ecd20577765e","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.5.0.tgz","fileCount":9,"integrity":"sha512-p0pv6OMWQFWGHD7YWEwCUzGNP7ZasaJgwQmYi5NXpG5Ih5RCVRqrxXtLldhgBoa6E4vQwoKzeLDzHCA0jAJ7YQ==","signatures":[{"sig":"MEYCIQCPpnusCEdI45X2WQzUMdocPkSeEbHc58vEmGBcscpeoAIhAIsqKVdkPwjuUVSWTYG1htNZiRaqmd/MGkteZWp1R5mf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405418},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.5.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","format":"biome format --write .","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/8fc5310c37ac62cf7bae1eb51c460ff3/bombillazo-error-x-0.5.0.tgz","_integrity":"sha512-p0pv6OMWQFWGHD7YWEwCUzGNP7ZasaJgwQmYi5NXpG5Ih5RCVRqrxXtLldhgBoa6E4vQwoKzeLDzHCA0jAJ7YQ==","repository":{"url":"git+https://github.com/bombillazo/error-x.git","type":"git"},"_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.6","dependencies":{"deepmerge-ts":"^7.1.5","safe-stringify":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.5.0_1768800827960_0.7098385950122521","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@bombillazo/error-x","version":"0.5.1","keywords":["async","error","error-handling","isomorphic","promise","type-safe","typescript"],"author":{"name":"Hector Ayala","email":"hran@bombillazo.com"},"license":"MIT","_id":"@bombillazo/error-x@0.5.1","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"homepage":"https://github.com/bombillazo/error-x#readme","bugs":{"url":"https://github.com/bombillazo/error-x/issues"},"dist":{"shasum":"55f989cb2e016bf15596cf886ed9872991c9d71a","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.5.1.tgz","fileCount":9,"integrity":"sha512-q1x/TkdspYkr+nhXkFfPJcaBv1PUWD85/0trOTE1jdDWVwsRjju2+2fTo19rZVsUmKCJ3NhLoSNYFzrXw+W/QA==","signatures":[{"sig":"MEQCIDc04fHIaazVv+EbjI2XrGYTut/1Jpbrq9jffG0n2YqAAiAbLymeqtVCVqXl297ETENnzarotkhwO5KYDjaGGmRyIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413371},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.5.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","format":"biome format --write . && biome check . --write","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/17e74bc320b05ec349256e86949ec490/bombillazo-error-x-0.5.1.tgz","_integrity":"sha512-q1x/TkdspYkr+nhXkFfPJcaBv1PUWD85/0trOTE1jdDWVwsRjju2+2fTo19rZVsUmKCJ3NhLoSNYFzrXw+W/QA==","repository":{"url":"git+https://github.com/bombillazo/error-x.git","type":"git"},"_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.6","dependencies":{"deepmerge-ts":"^7.1.5","safe-stringify":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.5.1_1768831491703_0.9058167619196154","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bombillazo/error-x","version":"0.6.0","keywords":["async","error","error-handling","isomorphic","promise","type-safe","typescript"],"author":{"name":"Hector Ayala","email":"hran@bombillazo.com"},"license":"MIT","_id":"@bombillazo/error-x@0.6.0","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"homepage":"https://github.com/bombillazo/error-x#readme","bugs":{"url":"https://github.com/bombillazo/error-x/issues"},"dist":{"shasum":"1763bda6b62b2ad1057d0b12bb0b38b93c4cef4f","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-0.6.0.tgz","fileCount":9,"integrity":"sha512-zEOfdSNpofvKX1/lys7Ej3ujQzuPEJz5mkcLKdeolTnvJf3m+sr+zD6hwrzAtxF/RDJGybFLKHM1dlaTZXEY7w==","signatures":[{"sig":"MEQCIEts0sSDTHU2kOL0o3/L7yc5tFlyc8z2kZFX3gN9U5soAiBoB9+Kt2Axhx8wwwvIoiP/q5kQ1Z9Hve6TzZHrk29a/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424441},"main":"dist/index.js","type":"module","_from":"file:bombillazo-error-x-0.6.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"biome lint .","test":"vitest run","build":"tsup","check":"biome check .","format":"biome format --write . && biome check . --write","api-docs":"api-extractor run --local","typecheck":"tsc --noEmit","test:watch":"vitest --watch","test:coverage":"vitest --coverage","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs"},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"_resolved":"/tmp/17a529cc843d8f604b6a4173f5f4e1d3/bombillazo-error-x-0.6.0.tgz","_integrity":"sha512-zEOfdSNpofvKX1/lys7Ej3ujQzuPEJz5mkcLKdeolTnvJf3m+sr+zD6hwrzAtxF/RDJGybFLKHM1dlaTZXEY7w==","repository":{"url":"git+https://github.com/bombillazo/error-x.git","type":"git"},"_npmVersion":"10.8.2","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","directories":{},"_nodeVersion":"20.19.6","dependencies":{"deepmerge-ts":"^7.1.5","safe-stringify":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^24.6.0","@biomejs/biome":"^2.2.4","@vitest/coverage-v8":"^3.2.4","@microsoft/api-extractor":"^7.52.13"},"_npmOperationalInternal":{"tmp":"tmp/error-x_0.6.0_1768931526315_0.694290612454761","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@bombillazo/error-x","description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","version":"1.0.0","author":{"name":"Hector Ayala","email":"hran@bombillazo.com"},"dependencies":{"deepmerge-ts":"^7.1.5","safe-stringify":"^1.2.0"},"devDependencies":{"@biomejs/biome":"^2.2.4","@microsoft/api-extractor":"^7.52.13","@types/node":"^24.6.0","@vitest/coverage-v8":"^3.2.4","husky":"^9.1.7","i18next":"^25.8.0","tsup":"^8.5.0","typescript":"^5.9.2","vitest":"^3.2.4"},"engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"homepage":"https://github.com/bombillazo/error-x#readme","keywords":["async","error","error-handling","isomorphic","promise","type-safe","typescript"],"license":"MIT","main":"dist/index.js","module":"dist/index.js","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/bombillazo/error-x.git"},"bugs":{"url":"https://github.com/bombillazo/error-x/issues"},"type":"module","types":"dist/index.d.ts","scripts":{"api-docs":"api-extractor run --local","api-docs:build":"pnpm build && mkdir -p ./etc && pnpm api-docs && pnpm api-docs:markdown && rm -rf ./etc ./temp","api-docs:markdown":"npx @microsoft/api-documenter markdown -i temp -o docs","bench":"vitest bench","build":"tsup","check":"biome check .","dev":"tsup --watch","format":"biome format --write . && biome check . --write","lint":"biome lint .","test":"vitest run","test:coverage":"vitest --coverage","test:watch":"vitest --watch","typecheck":"tsc --noEmit"},"_id":"@bombillazo/error-x@1.0.0","_integrity":"sha512-bJE0Mumyz7XttRB7i199kaLb+ZhgMBTpxK5wuybpIqo8XTqIYVkDA1HfJeaOZYnY72rwWjEdnxnKhDMND4c/uQ==","_resolved":"/tmp/88355d057ecb9cc31afe897caa136685/bombillazo-error-x-1.0.0.tgz","_from":"file:bombillazo-error-x-1.0.0.tgz","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-bJE0Mumyz7XttRB7i199kaLb+ZhgMBTpxK5wuybpIqo8XTqIYVkDA1HfJeaOZYnY72rwWjEdnxnKhDMND4c/uQ==","shasum":"72b6c3f6be8f63750e80e42da70159511272b1b6","tarball":"https://registry.npmjs.org/@bombillazo/error-x/-/error-x-1.0.0.tgz","fileCount":9,"unpackedSize":561490,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGPmCrZ2PIJNEtLXTA3pOy8rB08G9FkovQJ+zQ4ysQPjAiB01Cmr/TInExI0J2C8x/KshGAJSVsMO8hpaX78Cg2Ywg=="}]},"_npmUser":{"name":"_bombillazo","email":"hran@bombillazo.com"},"directories":{},"maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/error-x_1.0.0_1769378546980_0.3247834788178565"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-18T06:41:46.307Z","modified":"2026-01-25T22:02:27.328Z","0.1.1":"2025-08-18T06:41:46.591Z","0.2.0":"2025-09-30T01:45:49.098Z","0.2.1":"2025-09-30T05:01:34.822Z","0.2.2":"2025-09-30T05:11:08.482Z","0.3.0":"2025-09-30T13:25:42.014Z","0.4.0":"2025-10-05T21:22:05.724Z","0.4.1":"2025-10-06T01:37:21.806Z","0.4.2":"2025-10-06T04:26:09.636Z","0.4.3":"2025-10-06T04:54:43.818Z","0.4.4":"2025-10-06T14:29:31.584Z","0.4.5":"2025-10-06T20:08:53.686Z","0.4.6":"2025-10-07T02:53:37.605Z","0.5.0":"2026-01-19T05:33:48.120Z","0.5.1":"2026-01-19T14:04:51.873Z","0.6.0":"2026-01-20T17:52:06.474Z","1.0.0":"2026-01-25T22:02:27.183Z"},"bugs":{"url":"https://github.com/bombillazo/error-x/issues"},"author":{"name":"Hector Ayala","email":"hran@bombillazo.com"},"license":"MIT","homepage":"https://github.com/bombillazo/error-x#readme","keywords":["async","error","error-handling","isomorphic","promise","type-safe","typescript"],"repository":{"type":"git","url":"git+https://github.com/bombillazo/error-x.git"},"description":"A simple and consistent error handling library for TypeScript applications. Provides type-safe error handling with great DX, solving common pain points like unknown error types, lost stack traces, async error handling, and error serialization. Isomorphic ","maintainers":[{"name":"_bombillazo","email":"hran@bombillazo.com"}],"readme":"# error-x\n\n[![npm downloads](https://img.shields.io/npm/dm/@bombillazo/error-x.svg?style=for-the-badge)](https://www.npmjs.com/package/@bombillazo/error-x)\n[![npm](https://img.shields.io/npm/dt/@bombillazo/error-x.svg?style=for-the-badge)](https://www.npmjs.com/package/@bombillazo/error-x)\n[![npm](https://img.shields.io/npm/l/@bombillazo/error-x?style=for-the-badge)](https://github.com/bombillazo/error-x/blob/master/LICENSE)\n[![codecov](https://img.shields.io/codecov/c/github/bombillazo/error-x?style=for-the-badge)](https://codecov.io/gh/bombillazo/error-x)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/@bombillazo/error-x?style=for-the-badge&label=bundle)](https://bundlephobia.com/package/@bombillazo/error-x)\n\n🚨❌\n\nA smart, isomorphic, and type-safe error library for TypeScript applications. Provides excellent DX with intelligent error conversion, stack trace preservation, serialization support, error chaining, flexible custom error classes, and more.\n\n## Features\n\n- **Built in TypeScript** for full Type-safe error handling support and generics\n- **Isomorphic** - works in Node.js and browsers\n- **Smart error conversion** from different sources (API responses, strings, Error objects)\n- **Error chaining** for full error sequence\n- **Error aggregation** for batch operations with multiple failures\n- **Factory method** `.create()` for preset-based error creation\n- **Custom metadata** with type-safe generics for additional context\n- **Global configuration** for stack cleaning and defaults\n- **Serialization/deserialization** for network transfer and storage\n- **ErrorXResolver** for i18n, documentation URLs, and custom presentation logic\n- **Observability** - fingerprinting, structured logging, OpenTelemetry integration\n- **Custom ErrorX class** examples:\n  - `HTTPErrorX` - HTTP status code presets (400-511)\n  - `DBErrorX` - Database error presets (connection, query, constraints)\n  - `ValidationErrorX` - Validation errors with Zod integration\n\n## Installation\n\n```bash\npnpm add @bombillazo/error-x\n# or\nnpm install @bombillazo/error-x\n# or\nyarn add @bombillazo/error-x\n```\n\n### Requirements\n\n- **Node.js**: 18 or higher\n- **TypeScript**: 5.0 or higher\n- **Target Environment**: ES2022+\n\nThis library uses modern JavaScript features and ES2022 APIs. For browser compatibility, ensure your build tool (e.g., Vite, webpack, esbuild) is configured to target ES2022 or transpile accordingly.\n\n> [!NOTE]\n>\n> This library follows [Semantic Versioning](https://semver.org/). The API is now stable - breaking changes will only occur in major version updates.\n\n## Quick Start\n\n```typescript\nimport { ErrorX, HTTPErrorX, DBErrorX } from \"@bombillazo/error-x\";\n\n// Simple usage\nthrow new ErrorX(\"Something went wrong\");\n\n// A fully defined error\nthrow new ErrorX({\n  message: \"User authentication failed\",\n  name: \"AuthError\",\n  code: \"AUTH_FAILED\",\n  httpStatus: 401,\n  metadata: { userId: 123 },\n});\n\n// Using specialized error classes\nthrow HTTPErrorX.create(404);\nthrow DBErrorX.create(\"CONNECTION_FAILED\");\n\n// Convert unknown errors\nconst errorX = ErrorX.from(unknownError);\n```\n\n## Documentation\n\n[Full Documentation](docs/index.md)\n\n---\n\n## API Reference\n\n### ErrorX Class\n\nThe base error class that extends the native `Error` with enhanced capabilities.\n\n#### Properties\n\n| Property     | Type                          | Description                                                    |\n| ------------ | ----------------------------- | -------------------------------------------------------------- |\n| `message`    | `string`                      | Technical error message                                        |\n| `name`       | `string`                      | Error type/name                                                |\n| `code`       | `string`                      | Error identifier code (auto-generated from name if not set)    |\n| `httpStatus` | `number \\| undefined`         | HTTP status code associated with this error                    |\n| `metadata`   | `TMetadata \\| undefined`      | Additional context (type-safe with generics)                   |\n| `timestamp`  | `number`                      | Unix epoch timestamp (ms) when error was created               |\n| `stack`      | `string \\| undefined`         | Stack trace (inherited from Error)                             |\n| `chain`      | `readonly ErrorX[]`           | Full error sequence: `[this, parent, grandparent, ..., root]`  |\n| `root`       | `ErrorX \\| undefined`         | Error that started the whole error chain                       |\n| `parent`     | `ErrorX \\| undefined`         | Error that immediately precedes this error in the chain        |\n| `original`   | `ErrorXSnapshot \\| undefined` | Stores the original non-ErrorX error used to create this error |\n\n#### Static Methods\n\n| Method                | Description                                                         |\n| --------------------- | ------------------------------------------------------------------- |\n| `from(value, opts?)`  | Convert any value to ErrorX with intelligent property extraction    |\n| `fromJSON(json)`      | Deserialize JSON back to ErrorX instance                            |\n| `create(key?, opts?)` | Factory method for preset-based error creation (used by subclasses) |\n| `aggregate(errors, opts?)` | Combine multiple errors into an AggregateErrorX instance       |\n| `isErrorX(value)`     | Type guard to check if value is an ErrorX instance                  |\n| `isErrorXOptions(v)`  | Check if value is a valid ErrorXOptions object                      |\n| `configure(config)`   | Set global configuration (stack cleaning, defaults)                 |\n| `getConfig()`         | Get current global configuration                                    |\n| `resetConfig()`       | Reset global configuration to defaults                              |\n| `cleanStack(stack)`   | Clean internal frames from stack trace                              |\n\n#### Instance Methods\n\n| Method               | Description                                       |\n| -------------------- | ------------------------------------------------- |\n| `withMetadata(meta)` | Create new ErrorX with additional metadata merged |\n| `toJSON()`           | Serialize to JSON-compatible object               |\n| `toString()`         | Detailed string representation with metadata      |\n\n---\n\n## Constructor\n\n```typescript\nnew ErrorX(input?: string | ErrorXOptions)\n```\n\nCreate a new ErrorX instance. All parameters are optional with sensible defaults.\n\n```typescript\n// String message\nnew ErrorX(\"Database connection failed\");\n\n// Options object\nnew ErrorX({\n  message: \"User not found\",\n  name: \"NotFoundError\",\n  code: \"USER_NOT_FOUND\",\n  httpStatus: 404,\n  metadata: { userId: 123 },\n});\n\n// With type-safe metadata\ntype UserMeta = { userId: number; action: string };\nnew ErrorX<UserMeta>({\n  message: \"Action failed\",\n  metadata: { userId: 123, action: \"delete\" },\n});\n```\n\n### ErrorXOptions\n\n| Property   | Type               | Default               | Description                               |\n| ---------- | ------------------ | --------------------- | ----------------------------------------- |\n| message    | `string`           | `'An error occurred'` | Technical error message                   |\n| name       | `string`           | `'Error'`             | Error type/name                           |\n| code       | `string \\| number` | Auto-generated        | Error identifier (UPPER_SNAKE_CASE)       |\n| httpStatus | `number`           | `undefined`           | HTTP status code                          |\n| metadata   | `TMetadata`        | `undefined`           | Additional context                        |\n| cause      | `unknown`          | `undefined`           | Error that caused this (builds the chain) |\n\n## Global Configuration\n\nConfigure stack trace cleaning and other global settings.\n\n```typescript\nimport { ErrorX } from \"@bombillazo/error-x\";\n\n// Enable stack cleaning with custom delimiter\nErrorX.configure({\n  cleanStack: true,\n  cleanStackDelimiter: \"my-app-entry\",\n});\n\n// Custom patterns to remove from stack traces\nErrorX.configure({\n  cleanStack: [\"node_modules\", \"internal/\"],\n});\n\n// Disable stack cleaning\nErrorX.configure({ cleanStack: false });\n\n// Get current config\nconst config = ErrorX.getConfig();\n\n// Reset to defaults\nErrorX.resetConfig();\n```\n\n### Auto Code Generation\n\nError codes are automatically generated from names in UPPER_SNAKE_CASE when not provided:\n\n```typescript\nnew ErrorX({ name: \"DatabaseError\" });\n// → code: 'DATABASE_ERROR'\n\nnew ErrorX({ name: \"userAuthError\" });\n// → code: 'USER_AUTH_ERROR'\n\nnew ErrorX({ name: \"API Timeout\" });\n// → code: 'API_TIMEOUT'\n```\n\n### Message Formatting\n\nErrorX does NOT auto-format messages. Messages are passed through as-is:\n\n```typescript\nnew ErrorX({ message: \"test error\" });\n// → message: 'test error'\n\nnew ErrorX({ message: \"Test error.\" });\n// → message: 'Test error.'\n```\n\nEmpty or whitespace-only messages default to `'An error occurred'`:\n\n```typescript\nnew ErrorX({ message: \"\" });\n// → message: 'An error occurred'\n```\n\nPreset messages in specialized classes (HTTPErrorX, DBErrorX) are properly formatted with sentence casing and periods.\n\n---\n\n## Common Methods\n\n### ErrorX.from()\n\nConvert any value into an ErrorX instance with intelligent property extraction.\n\n```typescript\nstatic from<T>(payload: unknown, overrides?: Partial<ErrorXOptions<T>>): ErrorX<T>\n```\n\nHandles strings, Error objects, API responses, and unknown values. Extracts common properties like `message`, `code`, `status`, `statusCode`, and `metadata`.\n\n```typescript\n// Convert string\nErrorX.from(\"Something went wrong\");\n\n// Convert Error\nErrorX.from(new Error(\"Connection failed\"));\n\n// Convert API response\nErrorX.from({\n  message: \"User not found\",\n  code: \"USER_404\",\n  status: 404,\n  metadata: { userId: 123 },\n});\n\n// With overrides (deep merged)\nErrorX.from(error, {\n  httpStatus: 500,\n  metadata: { context: \"db-layer\" },\n});\n```\n\n### ErrorX.isErrorX()\n\nType guard to check if a value is an ErrorX instance.\n\n```typescript\nstatic isErrorX<T>(value: unknown): value is ErrorX<T>\n```\n\n```typescript\ntry {\n  await riskyOperation();\n} catch (error) {\n  if (ErrorX.isErrorX(error)) {\n    console.log(error.code, error.metadata);\n  }\n}\n```\n\n### withMetadata()\n\nCreate a new ErrorX with additional metadata merged with existing metadata.\n\n```typescript\nwithMetadata<T>(additionalMetadata: T): ErrorX<TMetadata & T>\n```\n\n```typescript\nconst error = new ErrorX({\n  message: \"Request failed\",\n  metadata: { endpoint: \"/api/users\" },\n});\n\nconst enriched = error.withMetadata({ retryCount: 3, userId: 123 });\n// metadata: { endpoint: '/api/users', retryCount: 3, userId: 123 }\n```\n\n### Serialization\n\nSerialize ErrorX instances for network transfer or storage.\n\n```typescript\n// Serialize\nconst json = error.toJSON();\n// { name, message, code, stack, metadata, timestamp, httpStatus, original, chain }\n\n// Deserialize\nconst restored = ErrorX.fromJSON(json);\n```\n\n### Error Chaining\n\nBuild error timelines by passing `cause` to preserve the full error history.\n\n```typescript\n// Build an error chain\nconst dbError = ErrorX.from(new Error(\"ECONNREFUSED\"));\nconst repoError = new ErrorX({ message: \"Query failed\", cause: dbError });\nconst serviceError = new ErrorX({\n  message: \"User fetch failed\",\n  cause: repoError,\n});\n\n// Access chain information\nserviceError.chain.length; // 3: [serviceError, repoError, dbError]\nserviceError.parent; // repoError\nserviceError.root; // dbError\ndbError.original; // { message: 'ECONNREFUSED', name: 'Error', stack: '...' }\n```\n\n```typescript\n// Practical example\ntry {\n  await database.query(sql);\n} catch (dbError) {\n  throw DBErrorX.create(\"QUERY_FAILED\", {\n    cause: dbError,\n    metadata: { query: sql, table: \"users\" },\n  });\n}\n\n// Later, inspect the chain\nif (ErrorX.isErrorX(error)) {\n  console.log(\n    \"Error chain:\",\n    error.chain.map((e) => e.name),\n  );\n  console.log(\"Root cause:\", error.root?.original);\n}\n```\n\n### Error Aggregation\n\nCombine multiple errors into a single `AggregateErrorX` instance. Useful for batch operations, parallel processing, or validation scenarios where multiple failures can occur.\n\n```typescript\nimport { ErrorX, AggregateErrorX } from \"@bombillazo/error-x\";\n\n// Aggregate multiple validation errors\nconst validationErrors = [\n  new ErrorX({ message: \"Email is required\", code: \"EMAIL_REQUIRED\" }),\n  new ErrorX({ message: \"Password too short\", code: \"PASSWORD_SHORT\" }),\n  new ErrorX({ message: \"Invalid phone format\", code: \"PHONE_INVALID\" }),\n];\n\nconst aggregate = ErrorX.aggregate(validationErrors);\n// → message: 'Multiple errors occurred (3 errors)'\n// → code: 'AGGREGATE_ERROR'\n// → errors: [ErrorX, ErrorX, ErrorX]\n\n// With custom options\nconst batchError = ErrorX.aggregate(errors, {\n  message: \"Batch import failed\",\n  code: \"BATCH_IMPORT_FAILED\",\n  httpStatus: 400,\n  metadata: { batchId: \"batch_123\", failedCount: 3 },\n});\n\n// Access individual errors\nfor (const error of aggregate.errors) {\n  console.log(error.code, error.message);\n  // Each error preserves its chain: error.chain, error.root, error.parent\n}\n\n// Type guard\nif (AggregateErrorX.isAggregateErrorX(error)) {\n  console.log(`Found ${error.errors.length} errors`);\n  error.errors.forEach((e) => console.log(e.code));\n}\n\n// Serialization (preserves all aggregated errors)\nconst serialized = aggregate.toJSON();\nconst restored = AggregateErrorX.fromJSON(serialized);\n```\n\n#### AggregateErrorX Properties\n\n| Property | Type | Description |\n| -------- | ---- | ----------- |\n| `errors` | `readonly ErrorX[]` | Array of all aggregated errors |\n| _...inherited_ | | All ErrorX properties (message, code, metadata, etc.) |\n\n#### Static Methods\n\n| Method | Description |\n| ------ | ----------- |\n| `ErrorX.aggregate(errors, opts?)` | Create an AggregateErrorX from an array of errors |\n| `AggregateErrorX.isAggregateErrorX(value)` | Type guard to check if value is an AggregateErrorX |\n| `AggregateErrorX.fromJSON(serialized)` | Deserialize back to AggregateErrorX instance |\n\n---\n\n## Custom Error Classes\n\nerror-x includes several custom error classes out of the box:\n\n- **Ready-to-use** - Practical error classes for common scenarios (HTTP, database, validation)\n- **Educational** - Demonstrate how to use presets, defaults, and transforms\n- **Extensible** - Serve as templates and inspiration for your own domain-specific error classes\n\n### HTTPErrorX\n\nHTTP errors with presets for all standard status codes (400-511).\n\n```typescript\nimport { HTTPErrorX } from \"@bombillazo/error-x\";\n\n// Create by status code\nHTTPErrorX.create(404);\n// → code: 'NOT_FOUND', name: 'NotFoundError', httpStatus: 404\n\nHTTPErrorX.create(401);\n// → code: 'UNAUTHORIZED', name: 'UnauthorizedError', httpStatus: 401\n\n// With overrides\nHTTPErrorX.create(404, {\n  message: \"User not found\",\n  metadata: { userId: 123 },\n});\n\n// With error chaining\nHTTPErrorX.create(500, { cause: originalError });\n\n// instanceof checks\nif (error instanceof HTTPErrorX) {\n  console.log(error.httpStatus);\n}\n```\n\n**Available Presets:** All 4xx client errors (400-451) and 5xx server errors (500-511).\n\n### DBErrorX\n\nDatabase errors with presets for common database scenarios. All codes are automatically prefixed with `DB_`.\n\n```typescript\nimport { DBErrorX } from \"@bombillazo/error-x\";\n\n// Connection errors\nDBErrorX.create(\"CONNECTION_FAILED\"); // → code: 'DB_CONNECTION_FAILED'\nDBErrorX.create(\"CONNECTION_TIMEOUT\");\nDBErrorX.create(\"CONNECTION_REFUSED\");\nDBErrorX.create(\"CONNECTION_LOST\");\n\n// Query errors\nDBErrorX.create(\"QUERY_FAILED\");\nDBErrorX.create(\"QUERY_TIMEOUT\");\nDBErrorX.create(\"SYNTAX_ERROR\");\n\n// Constraint errors (with appropriate httpStatus)\nDBErrorX.create(\"UNIQUE_VIOLATION\"); // httpStatus: 409\nDBErrorX.create(\"FOREIGN_KEY_VIOLATION\"); // httpStatus: 400\nDBErrorX.create(\"NOT_NULL_VIOLATION\"); // httpStatus: 400\nDBErrorX.create(\"CHECK_VIOLATION\"); // httpStatus: 400\n\n// Transaction errors\nDBErrorX.create(\"TRANSACTION_FAILED\");\nDBErrorX.create(\"DEADLOCK\"); // httpStatus: 409\n\n// Record errors\nDBErrorX.create(\"NOT_FOUND\"); // httpStatus: 404\n\n// With metadata\nDBErrorX.create(\"QUERY_FAILED\", {\n  message: \"Failed to fetch user\",\n  metadata: {\n    query: \"SELECT * FROM users WHERE id = ?\",\n    table: \"users\",\n    operation: \"SELECT\",\n  },\n});\n\n// instanceof checks\nif (error instanceof DBErrorX) {\n  console.log(error.metadata?.table);\n}\n```\n\n### ValidationErrorX\n\nValidation errors with Zod integration. All codes are prefixed with `VALIDATION_`.\n\n```typescript\nimport { z } from \"zod\";\nimport { ValidationErrorX } from \"@bombillazo/error-x\";\n\n// From Zod errors\nconst schema = z.object({\n  email: z.string().email(),\n  age: z.number().min(18),\n});\n\ntry {\n  schema.parse({ email: \"invalid\", age: 15 });\n} catch (err) {\n  if (err instanceof z.ZodError) {\n    throw ValidationErrorX.fromZodError(err);\n    // → code: 'VALIDATION_INVALID_STRING'\n    // → metadata.field: 'email'\n    // → metadata.zodCode: 'invalid_string'\n    // → httpStatus: 400\n  }\n}\n\n// With overrides\nValidationErrorX.fromZodError(zodError, {\n  httpStatus: 422,\n});\n\n// Field-specific errors (without Zod)\nValidationErrorX.forField(\"email\", \"Invalid email format\");\nValidationErrorX.forField(\"age\", \"Must be 18 or older\", { code: \"TOO_YOUNG\" });\n\n// Direct creation\nValidationErrorX.create({\n  message: \"Invalid input\",\n  code: \"INVALID_INPUT\",\n  metadata: { field: \"email\" },\n});\n\n// instanceof checks\nif (error instanceof ValidationErrorX) {\n  console.log(error.metadata?.field);\n}\n```\n\n### Creating Custom Error Classes\n\nExtend `ErrorX` to create domain-specific error classes with presets, defaults, and transforms.\n\n```typescript\nimport {\n  ErrorX,\n  type ErrorXOptions,\n  type ErrorXTransform,\n} from \"@bombillazo/error-x\";\n\n// 1. Define your metadata type\ntype PaymentMetadata = {\n  transactionId?: string;\n  amount?: number;\n  currency?: string;\n};\n\n// 2. Define presets outside the class for type inference\nconst paymentPresets = {\n  INSUFFICIENT_FUNDS: {\n    code: \"INSUFFICIENT_FUNDS\",\n    name: \"PaymentError\",\n    message: \"Insufficient funds.\",\n    httpStatus: 402,\n  },\n  CARD_DECLINED: {\n    code: \"CARD_DECLINED\",\n    name: \"PaymentError\",\n    message: \"Card declined.\",\n    httpStatus: 402,\n  },\n  EXPIRED_CARD: {\n    code: \"EXPIRED_CARD\",\n    name: \"PaymentError\",\n    message: \"Card expired.\",\n    httpStatus: 402,\n  },\n} as const satisfies Record<string, ErrorXOptions>;\n\n// Optional: Define user-friendly messages separately\nexport const paymentErrorUiMessages: Record<keyof typeof paymentPresets, string> = {\n  INSUFFICIENT_FUNDS: \"Your payment method has insufficient funds.\",\n  CARD_DECLINED: \"Your card was declined. Please try another payment method.\",\n  EXPIRED_CARD: \"Your card has expired. Please update your payment method.\",\n};\n\n// 3. Derive preset key type\ntype PaymentPresetKey = keyof typeof paymentPresets | (string & {});\n\n// 4. Create the class\nexport class PaymentErrorX extends ErrorX<PaymentMetadata> {\n  static presets = paymentPresets;\n  static defaultPreset = \"CARD_DECLINED\";\n  static defaults = { httpStatus: 402 };\n\n  // Optional: transform to prefix codes\n  static transform: ErrorXTransform<PaymentMetadata> = (opts) => ({\n    ...opts,\n    code: `PAYMENT_${opts.code}`,\n  });\n\n  // Override create for proper typing\n  static override create(\n    presetKey?: PaymentPresetKey,\n    overrides?: Partial<ErrorXOptions<PaymentMetadata>>,\n  ): PaymentErrorX {\n    return ErrorX.create.call(\n      PaymentErrorX,\n      presetKey,\n      overrides,\n    ) as PaymentErrorX;\n  }\n}\n\n// Usage\nthrow PaymentErrorX.create(\"INSUFFICIENT_FUNDS\");\nthrow PaymentErrorX.create(\"CARD_DECLINED\", {\n  metadata: { transactionId: \"tx_123\", amount: 99.99, currency: \"USD\" },\n});\n\n// instanceof works\nif (error instanceof PaymentErrorX) {\n  console.log(error.metadata?.transactionId);\n}\n```\n\n---\n\n## ErrorXResolver\n\nThe `ErrorXResolver` class resolves `ErrorX` instances to enhanced presentation objects with i18n support, documentation URLs, and custom properties.\n\n### Basic Usage\n\n```typescript\nimport { ErrorXResolver, HTTPErrorX } from \"@bombillazo/error-x\";\n\nconst resolver = new ErrorXResolver({\n  // Required: determine error type from error instance\n  onResolveType: (error) => {\n    if (error instanceof HTTPErrorX) return \"http\";\n    return \"general\";\n  },\n  // Per-type configuration\n  configs: {\n    http: { namespace: \"errors.http\" },\n    general: { namespace: \"errors\" },\n  },\n});\n\nconst error = HTTPErrorX.create(404);\nconst result = resolver.resolve(error);\n// → { uiMessage: undefined, docsUrl: '', i18nKey: 'errors.http.NOT_FOUND', errorType: 'http', config: {...} }\n```\n\n### With i18n Integration\n\n```typescript\nimport i18next from \"i18next\";\n\nconst resolver = new ErrorXResolver({\n  i18n: {\n    resolver: (key, params) => i18next.t(key, params),\n    keyTemplate: \"{namespace}.{code}\", // default\n  },\n  docs: {\n    baseUrl: \"https://docs.example.com/errors\",\n  },\n  onResolveType: (error) => (error.code.startsWith(\"HTTP_\") ? \"http\" : \"general\"),\n  configs: {\n    http: { namespace: \"errors.http\", docsPath: \"/http\" },\n    general: { namespace: \"errors.general\" },\n  },\n});\n\nconst result = resolver.resolve(error);\n// → { uiMessage: 'Not found', docsUrl: 'https://docs.example.com/errors/http#NOT_FOUND', ... }\n```\n\n### Custom Config Properties\n\nExtend the resolver with custom properties for your domain:\n\n```typescript\nimport { ErrorXResolver, type ErrorXResolverConfig } from \"@bombillazo/error-x\";\n\n// Define custom config with additional properties\ntype MyConfig = ErrorXResolverConfig<{\n  severity: \"error\" | \"warning\" | \"info\";\n  retryable: boolean;\n}>;\n\nconst resolver = new ErrorXResolver<MyConfig>({\n  onResolveType: (error) => \"api\",\n  defaults: {\n    namespace: \"errors\",\n    severity: \"error\",\n    retryable: false,\n  },\n  configs: {\n    api: {\n      namespace: \"errors.api\",\n      severity: \"warning\",\n      retryable: true,\n      // Per-code overrides\n      presets: {\n        NOT_FOUND: { severity: \"info\", retryable: false },\n      },\n    },\n  },\n});\n```\n\n### Custom Result Type\n\nTransform the resolve output to match your API:\n\n```typescript\ntype MyResult = { message: string; docs: string; canRetry: boolean };\n\nconst resolver = new ErrorXResolver<MyConfig, MyResult>({\n  onResolveType: (error) => \"api\",\n  onResolve: (error, context) => ({\n    message: context.uiMessage ?? error.message,\n    docs: context.docsUrl,\n    canRetry: context.config.retryable,\n  }),\n  configs: { api: { namespace: \"errors.api\", retryable: true } },\n});\n```\n\n---\n\n## Performance\n\nErrorX is designed to be fast enough for production use while providing rich error handling capabilities. Here are the key performance characteristics:\n\n### Benchmarks\n\nRun benchmarks locally with `pnpm bench`. Results from a typical run (Apple M2):\n\n| Operation | ops/sec | Notes |\n|-----------|---------|-------|\n| `new Error()` (native) | ~525k | Baseline comparison |\n| `new ErrorX()` | ~38k | ~14x slower than native Error |\n| `new ErrorX(options)` | ~40k | Similar to basic ErrorX |\n| `ErrorX.from(ErrorX)` | ~21M | Passthrough is extremely fast |\n| `ErrorX.from(Error)` | ~32k | Converts native errors |\n| `toJSON()` (simple) | ~5.4M | Very fast serialization |\n| `toJSON()` (with chain) | ~1.4M | Chain adds overhead |\n| `fromJSON()` (simple) | ~32k | Deserialization |\n| `isErrorX()` | ~21M | Near-instant type guard |\n| `aggregate()` (3 errors) | ~30k | Aggregation overhead |\n\n### Performance Characteristics\n\n**Error Creation (~38k ops/sec)**\n- Creating an ErrorX is ~14x slower than native `Error` due to stack cleaning, timestamp generation, and chain management\n- Adding metadata or httpStatus has negligible impact\n- Adding a cause (chaining) reduces performance by ~2x due to chain flattening\n\n**Serialization (toJSON)**\n- Simple errors: ~5.4M ops/sec (extremely fast)\n- With metadata: ~346k ops/sec (JSON serialization overhead)\n- With error chain: ~1.4M ops/sec (iterates chain)\n\n**Deserialization (fromJSON)**\n- ~32k ops/sec regardless of metadata\n- Chain reconstruction adds ~3x overhead per chained error\n\n**Type Guards**\n- `isErrorX()` and `isAggregateErrorX()`: ~21M ops/sec (instant)\n- `isErrorXOptions()`: ~15M ops/sec (object key checking)\n\n**Memory Considerations**\n- Deep chains (50+ levels) process at ~343 ops/sec for full create/serialize/deserialize cycle\n- Large aggregates (100 errors) process at ~135 ops/sec\n- No memory leaks detected in chain or aggregate handling\n\n### When to Use ErrorX\n\nErrorX is suitable for:\n- Application-level error handling (not hot loops)\n- API error responses\n- Error logging and monitoring\n- Domain error modeling\n\nFor performance-critical code paths (>100k errors/sec), consider using native `Error` and converting to `ErrorX` at boundaries.\n\n---\n\n## UI Messages\n\nUser-friendly messages are provided separately from error presets. This allows errors to remain technical while UI messages can be managed independently (e.g., for i18n).\n\n### Available Exports\n\n```typescript\nimport {\n  httpErrorUiMessages,\n  dbErrorUiMessages,\n  validationErrorUiMessage,\n} from \"@bombillazo/error-x\";\n\n// HTTP error messages keyed by status code\nhttpErrorUiMessages[404]; // \"The requested resource could not be found.\"\nhttpErrorUiMessages[500]; // \"An unexpected error occurred. Please try again later.\"\n\n// Database error messages keyed by preset name\ndbErrorUiMessages.CONNECTION_FAILED; // \"Unable to connect to the database. Please try again later.\"\ndbErrorUiMessages.UNIQUE_VIOLATION; // \"This record already exists.\"\n\n// Validation error default message\nvalidationErrorUiMessage; // \"The provided input is invalid. Please check your data.\"\n```\n\n### Usage with ErrorXResolver\n\n```typescript\nimport { ErrorXResolver, HTTPErrorX, httpErrorUiMessages } from \"@bombillazo/error-x\";\n\nconst resolver = new ErrorXResolver({\n  onResolveType: () => \"http\",\n  configs: {\n    http: {\n      namespace: \"errors.http\",\n      presets: {\n        // Use provided UI messages as static fallbacks\n        NOT_FOUND: { uiMessage: httpErrorUiMessages[404] },\n        UNAUTHORIZED: { uiMessage: httpErrorUiMessages[401] },\n      },\n    },\n  },\n});\n```\n\n## Observability\n\nerror-x provides built-in observability utilities for error fingerprinting, structured logging, and OpenTelemetry integration.\n\n### Error Fingerprinting\n\nGenerate stable fingerprints for error deduplication and grouping:\n\n```typescript\nimport { generateFingerprint } from \"@bombillazo/error-x\";\n\nconst error = new ErrorX({\n  message: \"Database connection failed\",\n  code: \"DB_CONN_FAILED\",\n  name: \"DatabaseError\",\n});\n\nconst fingerprint = generateFingerprint(error);\n// → \"a1b2c3d4\" (stable hash based on error properties)\n\n// Same error type always produces the same fingerprint\nconst error2 = new ErrorX({\n  message: \"Database connection failed\",\n  code: \"DB_CONN_FAILED\",\n  name: \"DatabaseError\",\n});\ngenerateFingerprint(error2) === fingerprint; // true\n\n// Customize what's included in the fingerprint\ngenerateFingerprint(error, {\n  includeCode: true, // default: true\n  includeName: true, // default: true\n  includeMessage: true, // default: true\n  includeMetadataKeys: [\"userId\", \"endpoint\"], // specific metadata keys\n  hashFunction: customHashFn, // custom hash function\n});\n```\n\n### Structured Logging\n\nCreate structured log entries compatible with pino, winston, and other logging libraries:\n\n```typescript\nimport { toLogEntry } from \"@bombillazo/error-x\";\n\nconst error = new ErrorX({\n  message: \"User not found\",\n  code: \"USER_NOT_FOUND\",\n  httpStatus: 404,\n  metadata: { userId: 123 },\n});\n\nconst logEntry = toLogEntry(error);\n// {\n//   level: 'error',\n//   message: 'User not found',\n//   fingerprint: 'abc123',\n//   errorName: 'Error',\n//   errorCode: 'USER_NOT_FOUND',\n//   timestamp: 1704067200000,\n//   timestampIso: '2024-01-01T00:00:00.000Z',\n//   httpStatus: 404,\n//   metadata: { userId: 123 },\n//   chainDepth: 1,\n// }\n\n// With options\nconst debugEntry = toLogEntry(error, {\n  level: \"warn\", // 'error' | 'warn' | 'info'\n  includeStack: true, // include stack trace\n  includeFull: true, // include full serialized error\n  context: { requestId: \"req-123\" }, // merge additional context\n});\n\n// Use with pino\nimport pino from \"pino\";\nconst logger = pino();\nlogger.error(toLogEntry(error, { includeStack: true }));\n```\n\n### OpenTelemetry Integration\n\nCreate span attributes following OpenTelemetry semantic conventions:\n\n```typescript\nimport { toOtelAttributes, recordError } from \"@bombillazo/error-x\";\nimport { trace, SpanStatusCode } from \"@opentelemetry/api\";\n\nconst tracer = trace.getTracer(\"my-service\");\nconst span = tracer.startSpan(\"operation\");\n\ntry {\n  await riskyOperation();\n} catch (err) {\n  const error = ErrorX.from(err);\n\n  // Get OTel-compatible attributes\n  const attributes = toOtelAttributes(error);\n  // {\n  //   'exception.type': 'DatabaseError',\n  //   'exception.message': 'Connection failed',\n  //   'exception.stacktrace': '...',\n  //   'error.code': 'DB_CONN_FAILED',\n  //   'error.fingerprint': 'abc123',\n  //   'error.chain_depth': 1,\n  //   'error.is_aggregate': false,\n  //   'error.timestamp': 1704067200000,\n  //   'http.status_code': 500,\n  // }\n\n  span.setAttributes(attributes);\n  span.recordException(error);\n  span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });\n}\n\n// Or use the helper function\nconst { attributes, applyToSpan } = recordError(error);\napplyToSpan(span, { setStatus: true, recordException: true });\n\n// Include metadata as span attributes\nconst attrs = toOtelAttributes(error, {\n  includeStack: true, // default: true\n  includeMetadata: true, // default: false\n  metadataPrefix: \"app.error.\", // default: 'error.metadata.'\n});\n// Includes: { 'app.error.userId': 123, ... }\n```\n\n### Observability API Reference\n\n| Function | Description |\n| -------- | ----------- |\n| `generateFingerprint(error, opts?)` | Generate stable hash for error deduplication |\n| `toLogEntry(error, opts?)` | Create structured log entry for logging libraries |\n| `toOtelAttributes(error, opts?)` | Create OpenTelemetry span attributes |\n| `recordError(error, opts?)` | Helper to apply error info to OTel spans |\n\n---\n\n## Ecosystem Integrations\n\nerror-x includes example integrations with popular frameworks and libraries in the `/examples` directory:\n\n### Server Frameworks\n\n**Hono.js / Express.js** - Error handling middleware with consistent JSON responses, request ID tracking, and structured logging.\n\n```typescript\n// Hono.js\nimport { HTTPErrorX } from \"@bombillazo/error-x\";\n\napp.get(\"/user/:id\", async (c) => {\n  const user = await getUser(c.req.param(\"id\"));\n  if (!user) {\n    throw HTTPErrorX.create(404, { message: \"User not found\" });\n  }\n  return c.json(user);\n});\n\napp.onError(errorMiddleware()); // Consistent JSON error responses\n```\n\n### Frontend\n\n**React Error Boundaries** - Error boundary components with ErrorX integration, user-friendly error display, and error tracking hooks.\n\n```tsx\n<ErrorBoundary onError={(error, info) => trackError(error)}>\n  <App />\n</ErrorBoundary>\n```\n\n### API Frameworks\n\n**tRPC** - Type-safe error handling with ErrorX-to-TRPCError conversion and custom error formatting.\n\n**GraphQL** - Apollo Server and graphql-yoga integrations with consistent error extensions and user-friendly messages.\n\n### Logging\n\n**Pino / Winston** - Structured error logging with fingerprinting, deduplication, and request context.\n\n```typescript\nimport { toLogEntry, generateFingerprint } from \"@bombillazo/error-x\";\n\nconst entry = toLogEntry(error, { includeStack: true });\nlogger.error(entry);\n```\n\n### Validation\n\n**Zod** - Advanced validation patterns beyond the built-in `ValidationErrorX.fromZodError()`.\n\nSee the [/examples](./examples) directory for complete integration examples with usage documentation.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}