{"_id":"@ballistix.digital/exception-types","_rev":"8-91bc80c97ddfbf4241142d3d31e31184","name":"@ballistix.digital/exception-types","dist-tags":{"latest":"0.6.0"},"versions":{"0.0.1":{"name":"@ballistix.digital/exception-types","version":"0.0.1","license":"MIT","_id":"@ballistix.digital/exception-types@0.0.1","maintainers":[{"name":"brecht-p7s-ballistix","email":"brecht.pallemans@ballistix.digital"},{"name":"maartenraes","email":"maarten@ballistix.digital"},{"name":"jmostaer","email":"jens@ballistix.digital"},{"name":"aaron-ballistix","email":"aaron@ballistix.digital"},{"name":"aude-ballistix","email":"aude@ballistix.digital"}],"homepage":"https://github.com/layeredprints/exception-mapper#readme","bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"dist":{"shasum":"f6c42763154b8dcebef438287114766dd6b6815b","tarball":"https://registry.npmjs.org/@ballistix.digital/exception-types/-/exception-types-0.0.1.tgz","fileCount":5,"integrity":"sha512-uJmGF6Vu7QA9ifCSprJeahJh+Y+LK+DwFmTO5pUEwldd2C4OeneJyc/kuGAo06Lnr7zxWvqko2MGsr2UmZTEPA==","signatures":[{"sig":"MEYCIQDgqc81C14UvEclgYKz4kJLrphrIosyLPWuAB/4PDxQxwIhAOAC4+7ffxUzNMFTowMl6nIeGriG9H0XdW2BymKOwiEC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1829},"main":"dist/nest/index.js","types":"dist/nest/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/nest/index.d.ts","default":"./dist/nest/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"scripts":{"build":"rm -rf dist && tsc -p tsconfig.build.json"},"_npmUser":{"name":"jmostaer","email":"jens@ballistix.digital"},"repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"_npmVersion":"11.12.1","description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"react":["dist/react/index.d.ts"]}},"_hasShrinkwrap":false,"peerDependencies":{"luxon":"^3.7.2","lodash":"^4.17.21","@nestjs/common":"^11","@nestjs/swagger":"^11","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/swagger":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/exception-types_0.0.1_1788805314142_0.2992995485805925","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@ballistix.digital/exception-types","version":"0.1.0","license":"MIT","_id":"@ballistix.digital/exception-types@0.1.0","maintainers":[{"name":"brecht-p7s-ballistix","email":"brecht.pallemans@ballistix.digital"},{"name":"maartenraes","email":"maarten@ballistix.digital"},{"name":"jmostaer","email":"jens@ballistix.digital"},{"name":"aaron-ballistix","email":"aaron@ballistix.digital"},{"name":"aude-ballistix","email":"aude@ballistix.digital"}],"homepage":"https://github.com/layeredprints/exception-mapper#readme","bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"dist":{"shasum":"dea9cb48417950987884d71ed28dab54ae228fd6","tarball":"https://registry.npmjs.org/@ballistix.digital/exception-types/-/exception-types-0.1.0.tgz","fileCount":146,"integrity":"sha512-fdwhLjuwXU0wAYDFnRQcW0lHaaP4MON9sjxlv2rT7MfzMHU6BmmOe11YRr0IPTlHtsO/FwKJ6Eg2f79ULY+jsA==","signatures":[{"sig":"MEUCIQCw/ujKfVxf3lSgyV4c0AOwow4MuNtiQ7xalrRemLBnLAIgNaOQz88VIaV3IavGKVJAjD9QRYaOj/2mYT+VdQMnPM0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE/xuOLEOxjTvWsQ/RaiDgzz4cvco2AAM+caWsIzU3tqAiEAyiZVcQzbY+EoF47OaGGdpgo4qsK1ez9fTAcq5M4U3js=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164607},"main":"dist/nest/index.js","types":"dist/nest/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/nest/index.d.ts","default":"./dist/nest/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"54a1ba001162c206e4df1fe3d8e96bb45674c78b","scripts":{"build":"rm -rf dist .build && tsc -p tsconfig.nest.json && node scripts/build-react.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:366beb5f-e543-4a98-81ae-65af6bfae7ee"}},"repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"_npmVersion":"12.0.2","description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"react":["dist/react/index.d.ts"]}},"_hasShrinkwrap":false,"peerDependencies":{"luxon":"^3.7.2","lodash":"^4.17.21","@nestjs/common":"^11","@nestjs/swagger":"^11","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/swagger":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/exception-types_0.1.0_1788867889573_0.17074473158241954","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ballistix.digital/exception-types","version":"0.2.0","license":"MIT","_id":"@ballistix.digital/exception-types@0.2.0","maintainers":[{"name":"brecht-p7s-ballistix","email":"brecht.pallemans@ballistix.digital"},{"name":"maartenraes","email":"maarten@ballistix.digital"},{"name":"jmostaer","email":"jens@ballistix.digital"},{"name":"aaron-ballistix","email":"aaron@ballistix.digital"},{"name":"aude-ballistix","email":"aude@ballistix.digital"}],"homepage":"https://github.com/layeredprints/exception-mapper#readme","bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"dist":{"shasum":"4203835a5bd58aae92277e0570f5b9cb4c8071dd","tarball":"https://registry.npmjs.org/@ballistix.digital/exception-types/-/exception-types-0.2.0.tgz","fileCount":145,"integrity":"sha512-P7PByx9rsXJqFP7Klf1u76wmmj6tlAA+4YbhlzJ6cj4n0JgR+1+yv02+PoqO8l8/cJ8aLSpxIjSqG/aL/YAlrA==","signatures":[{"sig":"MEYCIQCW2nTqtrR3WgxmUydatM8Y6BjgAOtpa8DOEzoulkh/igIhAJnG/LSMKDd5scYDzxTyHXex9Mtamn0OFuzDQB6GO63F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFoknkEqgWVjiXuHnRHhzX7vClT/NpY/ALhxjeog83DgAiAJX3z9K06JmahlGqTuU8rd9b2dSdbb+Vm2ZwNmrXk/7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164280},"main":"dist/nest/index.js","types":"dist/nest/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/nest/index.d.ts","default":"./dist/nest/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"12d60510477763278b990ed7968578749aeabbcb","scripts":{"build":"rm -rf dist .build && tsc -p tsconfig.nest.json && node scripts/build-react.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:366beb5f-e543-4a98-81ae-65af6bfae7ee"}},"repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"_npmVersion":"12.0.2","description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"react":["dist/react/index.d.ts"]}},"_hasShrinkwrap":false,"peerDependencies":{"luxon":"^3.7.2","lodash":"^4.17.21","@nestjs/common":"^11 || ^12","@nestjs/swagger":"^11 || ^12","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/swagger":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/exception-types_0.2.0_1789398173717_0.7657607319203656","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ballistix.digital/exception-types","version":"0.3.0","license":"MIT","_id":"@ballistix.digital/exception-types@0.3.0","maintainers":[{"name":"brecht-p7s-ballistix","email":"brecht.pallemans@ballistix.digital"},{"name":"maartenraes","email":"maarten@ballistix.digital"},{"name":"jmostaer","email":"jens@ballistix.digital"},{"name":"aaron-ballistix","email":"aaron@ballistix.digital"},{"name":"aude-ballistix","email":"aude@ballistix.digital"}],"homepage":"https://github.com/layeredprints/exception-mapper#readme","bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"dist":{"shasum":"a9b47bb364f69781578bc18996be31b998c7072f","tarball":"https://registry.npmjs.org/@ballistix.digital/exception-types/-/exception-types-0.3.0.tgz","fileCount":145,"integrity":"sha512-kcqkuAtJUEGO77sfGizoA3th1gn9TcEv9Gk7/rG5eRyePQyS0FejavVdfxHQ806ovDBH3JTu5l2/8pyYGS5qRQ==","signatures":[{"sig":"MEUCIFDJ9JLbTfH4gH286eUzGn78qDm7BSJDkjOG7lqf5dHzAiEA7oooDVGoylmp003XpRpk3946b+ErP4xcmhYaHSiaBBI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDkvSbMG9q5P2cDzair6wAt02LNC7bhU0UEVLUykZ9UEAIgNNNw1udxGQa6WZINIqhT8tG4SwjYlyfP9KoaARzYsaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164280},"main":"dist/nest/index.js","types":"dist/nest/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/nest/index.d.ts","default":"./dist/nest/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"2ca3e9359611b193082bc8c632fa66444e42a369","scripts":{"build":"rm -rf dist .build && tsc -p tsconfig.nest.json && node scripts/build-react.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:366beb5f-e543-4a98-81ae-65af6bfae7ee"}},"repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"_npmVersion":"12.0.2","description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"react":["dist/react/index.d.ts"]}},"_hasShrinkwrap":false,"peerDependencies":{"luxon":"^3.7.2","lodash":"^4.17.21","@nestjs/common":"^11 || ^12","@nestjs/swagger":"^11 || ^12","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/swagger":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/exception-types_0.3.0_1789481826312_0.3805535217266689","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ballistix.digital/exception-types","version":"0.4.0","license":"MIT","_id":"@ballistix.digital/exception-types@0.4.0","maintainers":[{"name":"brecht-p7s-ballistix","email":"brecht.pallemans@ballistix.digital"},{"name":"maartenraes","email":"maarten@ballistix.digital"},{"name":"jmostaer","email":"jens@ballistix.digital"},{"name":"aaron-ballistix","email":"aaron@ballistix.digital"},{"name":"aude-ballistix","email":"aude@ballistix.digital"}],"homepage":"https://github.com/layeredprints/exception-mapper#readme","bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"dist":{"shasum":"2182791ab8ae04f4f3ec6090b21c879984d7c1b8","tarball":"https://registry.npmjs.org/@ballistix.digital/exception-types/-/exception-types-0.4.0.tgz","fileCount":153,"integrity":"sha512-oNajinORA1SPgu23CfHB7GkqWHBj84bw9ytDNwxp4X7QYL/wzoTMKdjBIlG9FmCVYqJbasLasn1xEKUOokcG2g==","signatures":[{"sig":"MEYCIQCtE+C6vvhwnTPcg6QaS9cDx/+afYVO5qv27iTXvZWcJwIhAOctYLro9mXeTszwLTQPpPsQWMvCX0oon7cdEM6i8v2j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICyQlfc8kUc2zYjPFt8vrIlxb5rSZBxXiNVnB4IXWfwCAiAvJqujU0ceesgMIkYfoTwoI2fz7kaixcO9h1zH7CiK2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177593},"main":"dist/nest/index.js","types":"dist/nest/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/nest/index.d.ts","default":"./dist/nest/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"e73d228e0a98d6914a8b86d7e1e80d62491b01d1","scripts":{"build":"rm -rf dist .build && tsc -p tsconfig.nest.json && node scripts/build-react.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:366beb5f-e543-4a98-81ae-65af6bfae7ee"}},"repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"_npmVersion":"12.0.2","description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"react":["dist/react/index.d.ts"]}},"_hasShrinkwrap":false,"peerDependencies":{"luxon":"^3.7.2","lodash":"^4.17.21","@nestjs/common":"^11 || ^12","@nestjs/swagger":"^11 || ^12","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/swagger":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/exception-types_0.4.0_1789576996873_0.6047086078552861","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@ballistix.digital/exception-types","version":"0.5.0","license":"MIT","_id":"@ballistix.digital/exception-types@0.5.0","maintainers":[{"name":"brecht-p7s-ballistix","email":"brecht.pallemans@ballistix.digital"},{"name":"maartenraes","email":"maarten@ballistix.digital"},{"name":"jmostaer","email":"jens@ballistix.digital"},{"name":"aaron-ballistix","email":"aaron@ballistix.digital"},{"name":"aude-ballistix","email":"aude@ballistix.digital"}],"homepage":"https://github.com/layeredprints/exception-mapper#readme","bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"dist":{"shasum":"154082afec258d2e69e8d74a879e4300623d2300","tarball":"https://registry.npmjs.org/@ballistix.digital/exception-types/-/exception-types-0.5.0.tgz","fileCount":153,"integrity":"sha512-DswcuHJC1X5cdpCjT74zECl9hHNWthTpzUW1dS4OUQa9W8jO3znNf10Con9RETqeV7+fXpeLDzxksFzBmu570g==","signatures":[{"sig":"MEUCIQCw8jEe4r0Bo+AQYdTOtB7TKoOhOlDWPXnWZ5QcqWqHRgIgITBmWde98av7DNn3bOPFXLtKtlueduSjk+PlgUw2FtI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC1mn3P/CWXOQo9cji6OnkvYJ+9hgpU8K0dtgcrNOTZ+QIhANoTw+ol4M9d6UPdcSGzvevCbLvURZWSjlZ2P5uHaTDY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177929},"main":"dist/nest/index.js","types":"dist/nest/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/nest/index.d.ts","default":"./dist/nest/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"27d58b7076ff1393fd508eb733e5f7beeba7c3a3","scripts":{"build":"rm -rf dist .build && tsc -p tsconfig.nest.json && node scripts/build-react.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:366beb5f-e543-4a98-81ae-65af6bfae7ee"}},"repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"_npmVersion":"12.0.2","description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"react":["dist/react/index.d.ts"]}},"_hasShrinkwrap":false,"peerDependencies":{"luxon":"^3.7.2","lodash":"^4.17.21","@nestjs/common":"^11 || ^12","@nestjs/swagger":"^11 || ^12","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/swagger":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/exception-types_0.5.0_1789632636233_0.34504446599089","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@ballistix.digital/exception-types","version":"0.6.0","license":"MIT","_id":"@ballistix.digital/exception-types@0.6.0","maintainers":[{"name":"brecht-p7s-ballistix","email":"brecht.pallemans@ballistix.digital"},{"name":"maartenraes","email":"maarten@ballistix.digital"},{"name":"jmostaer","email":"jens@ballistix.digital"},{"name":"aaron-ballistix","email":"aaron@ballistix.digital"},{"name":"aude-ballistix","email":"aude@ballistix.digital"}],"homepage":"https://github.com/layeredprints/exception-mapper#readme","bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"dist":{"shasum":"e528175871be69ff1e3b48aa45eb5d0f9a070a0a","tarball":"https://registry.npmjs.org/@ballistix.digital/exception-types/-/exception-types-0.6.0.tgz","fileCount":153,"integrity":"sha512-3CWGlIzaeSZTaTRaAaM0H5FvNW6aUBgXaHySnQWM7aJM0iXI2PYrn2XvuySXV6DkULgWwBYheREGKIcSdc+FeQ==","signatures":[{"sig":"MEQCIBMDXObDWDgZ0kUWxRSSnyF/DG1dFalqoLqApD9R55AxAiAnKGM7jVG5qWnAt5dGtd2HpUIvg/dz/IOY0gfqyh05IA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCpvdNhxnaqSxDQ7s2zFn2wN9WR53Jo7y2G/T/1XGXVqAIhAI0KH8cA7mFKgOKeeghQ7T6r/qxCgtsa7SprD+/uQ9+O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177929},"main":"dist/nest/index.js","types":"dist/nest/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/nest/index.d.ts","default":"./dist/nest/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"859d0d393a7be6e8711a492174daa468c7f3c2e3","scripts":{"build":"rm -rf dist .build && tsc -p tsconfig.nest.json && node scripts/build-react.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:366beb5f-e543-4a98-81ae-65af6bfae7ee"}},"repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"_npmVersion":"12.1.0","description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"react":["dist/react/index.d.ts"]}},"_hasShrinkwrap":false,"peerDependencies":{"luxon":"^3.7.2","lodash":"^4.17.21","@nestjs/common":"^11 || ^12","@nestjs/swagger":"^11 || ^12","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/swagger":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/exception-types_0.6.0_1790241092088_0.37630580620637866","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-09-07T18:21:53.906Z","modified":"2026-10-01T12:25:22.979Z","0.0.1":"2026-09-07T18:21:54.281Z","0.1.0":"2026-09-08T11:44:49.652Z","0.2.0":"2026-09-14T15:02:53.818Z","0.3.0":"2026-09-15T14:17:06.405Z","0.4.0":"2026-09-16T16:43:16.988Z","0.5.0":"2026-09-17T08:10:36.313Z","0.6.0":"2026-09-24T09:11:32.173Z"},"bugs":{"url":"https://github.com/layeredprints/exception-mapper/issues"},"license":"MIT","homepage":"https://github.com/layeredprints/exception-mapper#readme","repository":{"url":"git+https://github.com/layeredprints/exception-mapper.git","type":"git","directory":"exception-types"},"description":"The exception classes, the ExceptionDto envelope, the detail DTOs and the codes Ballistix NestJS applications throw and return.","maintainers":[{"email":"brecht.pallemans@ballistix.digital","name":"brecht-p7s-ballistix"},{"email":"maarten@ballistix.digital","name":"maartenraes"},{"email":"jens@ballistix.digital","name":"jmostaer"},{"email":"aaron@ballistix.digital","name":"aaron-ballistix"},{"email":"aude@ballistix.digital","name":"aude-ballistix"},{"email":"lukas@ballistix.digital","name":"lukaskindt"}],"readme":"# @ballistix.digital/exception-types\n\nThe exception classes, the `ExceptionDto` envelope, the detail DTOs and the\ncodes a Ballistix NestJS application throws and returns. The package holds\ndata and no behaviour: no module, no filter and no provider.\n[`@ballistix.digital/exception-mapper`](../exception-mapper/README.md) turns a\nthrown value into one of these exceptions and into the envelope.\n\nThis file is the consumer guide. The pages that describe how the package is\nbuilt live in the [Ballistix wiki](https://github.com/layeredprints/ballistix-okf-wiki/blob/main/general/libraries/exception-mapper/).\n\n## Install\n\n```bash\nnpm install @ballistix.digital/exception-types\n```\n\nThe package needs Node 22.12 or later. Install these peer dependencies in the\napplication.\n\n| Peer | Range | Required |\n| --- | --- | --- |\n| `class-validator` | `^0.15.1` | yes |\n| `class-transformer` | `^0.5.1` | yes |\n| `lodash` | `^4.17.21` | yes |\n| `luxon` | `^3.7.2` | yes |\n| `reflect-metadata` | `^0.2.2` | yes |\n| `@nestjs/common` | `^11` | types only, for the `.` entry |\n| `@nestjs/swagger` | `^11` | optional: the `.` entry uses its decorators when it is installed |\n\nLoad `reflect-metadata` once, before any decorated class is imported.\n\nA browser bundle imports the `./react` entry and needs neither Nest package:\n\n```ts\nimport { ExceptionDto, ExceptionCodeEnum } from '@ballistix.digital/exception-types/react';\n```\n\n## The envelope\n\n`ExceptionDto` is the shape an HTTP response body or a logged task failure\ncarries. Every field is optional, so a partial envelope from an older service\nstill validates.\n\n| Field | Type | What it holds |\n| --- | --- | --- |\n| `type` | `string` | A URI that identifies the kind of problem. |\n| `title` | `string` | The human-readable message of the exception. |\n| `status` | `number` | The HTTP status the exception carries. |\n| `code` | `ExceptionCodeEnum` | The code that names the kind of failure. |\n| `errors` | `object[]` | The details: one entry per thing that went wrong, in the shape of the detail DTO of the code. |\n\n## The codes\n\nEvery code has one message template, one detail DTO and at least one exception\nclass. `BaseException` fills the template from the first detail, so a\nplaceholder such as `{entity}` reads the `entity` field of `errors[0]`.\n\n| Code | Status | Exception class | Detail DTO | Message template |\n| --- | --- | --- | --- | --- |\n| `RESOURCE_NOT_FOUND` | 404 | `ResourceNotFoundException` | `ResourceNotFoundDetailDto` | `Could not find {entity} with {searchField} {searchValue}` |\n| `REFERENCED_RESOURCE_NOT_FOUND` | 400 | `ReferencedResourceNotFoundException` | `ReferencedResourceNotFoundDetailDto` | `Field {requestField} references {entity} with {searchField} {searchValue}, which does not exist` |\n| `VALIDATION_FAILED` | 400 | `ValidationFailedException` | `ValidationErrorDetailDto` | `Validation failed` |\n| `DATABASE_ERROR` | 500, or the 4xx the caller passes | `DatabaseErrorException` | `GenericErrorDetailDto` | `{message}` |\n| `ACTION_NOT_PERMITTED` | 403 | `ActionNotPermittedException` | `ActionNotPermittedDetailDto` | `Not allowed to {action} a {entity}` |\n| `ACCESS_DENIED` | 403 | `AccessDeniedException` | `GenericErrorDetailDto` | `{message}` |\n| `GENERIC_ERROR` | 500, or 400 from `GenericBadRequestException` | `GenericErrorException`, `GenericBadRequestException` | `GenericErrorDetailDto` | `{message}` |\n| `FILE_INVALID` | 400 | `FileInvalidException` | `NoDetailDto` | `The uploaded file cannot be read` |\n| `XLSX_CONTENT_NOT_FOUND` | 400 | `XlsxContentNotFoundException` | `XlsxContentNotFoundDetailDto` | `Could not find {entity} with {searchField} {searchValue}` |\n| `XLSX_REFERENCED_RESOURCE_NOT_FOUND` | 400 | `XlsxReferencedResourceNotFoundException` | `XlsxReferencedResourceNotFoundDetailDto` | `Could not find {entity} with {searchField} {searchValue}` |\n| `XLSX_VALIDATION_FAILED` | 400 | `XlsxValidationFailedException` | `XlsxValidationErrorDetailDto` | `Validation of {inputField} failed ({rule})` |\n| `CONFLICT` | 409 | `ConflictException` | `ConflictDetailDto` | `Declared {field} {declared} conflicts with {found}` |\n| `PRECONDITION_FAILED` | 409 | `PreconditionFailedException` | `PreconditionFailedDetailDto` | `Precondition {condition} is not met` |\n\nThree groups need a word:\n\n- **The two 403 codes.** `ACTION_NOT_PERMITTED` names the verb and the entity\n  of an authorization denial, so a client can show \"you cannot update a\n  valuation\". `ACCESS_DENIED` is the 403 with no such pair, such as a\n  business-state guard, and carries a free-text message.\n- **The three `XLSX_*` codes.** Each detail carries an `XlsxLocationDto`: the\n  sheet, plus the 1-based row and column that the importer knows. The numbers\n  match what Excel itself shows.\n- **`NoDetailDto`.** `FILE_INVALID` points at nothing inside the file, so its\n  `errors` stays an empty array.\n- **`PRECONDITION_FAILED`.** The current state of a resource does not allow\n  the action: a completed valuation that cannot change, a file that is not\n  uploaded yet, a status transition the state machine rejects. The detail is\n  `{ condition, args? }`. The condition is a SCREAMING_SNAKE key that each\n  owner types in its own enum, and `args` carries the values of that condition\n  under names the condition defines. A client translates on the code and the\n  condition together, and fills the translation from `args`. The message stays\n  the template, so no throw site writes a sentence.\n\n  ```ts\n  throw new PreconditionFailedException('INVALID_STATE_TRANSITION', {\n  \tentity: 'Valuation',\n  \tfield: 'status',\n  \tfrom: 'OPEN',\n  \tto: 'COMPLETED',\n  });\n  ```\n\n## Throw an exception\n\nEvery exception class extends `BaseException`, which extends `Error`. The\nconstructor arguments are the fields of the detail. The class fills in the\ncode, the status and the message.\n\n```ts\nimport { ResourceNotFoundException } from '@ballistix.digital/exception-types';\n\nconst valuation = await this.repository.findOneBy({ id });\nif (!valuation) {\n\t// message: \"Could not find Valuation with id 42\", status 404\n\tthrow new ResourceNotFoundException('Valuation', id);\n}\n```\n\n```ts\nimport { ValidationFailedException, ValidationRuleEnum } from '@ballistix.digital/exception-types';\n\n// message: \"Validation failed\", status 400, one detail per rejected field\nthrow new ValidationFailedException([\n\t{ inputField: 'name', rule: ValidationRuleEnum.IS_STRING },\n\t{ inputField: 'age', rule: ValidationRuleEnum.MIN, args: { min: 18 } },\n]);\n```\n\nAn exception exposes `message`, `status`, `code` and `errors`. `errors` holds\none instance of the detail DTO per detail. A detail that fails its own\nvalidation is kept raw instead of dropped, so a constructor never throws.\n\n## Build your own exception\n\nA new exception class extends `BaseException` and passes the detail DTO, the\ncode, the status and the details to `super`:\n\n```ts\nimport { BaseException, ExceptionCodeEnum, GenericErrorDetailDto } from '@ballistix.digital/exception-types';\n\nexport class UpstreamUnavailableException extends BaseException<GenericErrorDetailDto> {\n\tconstructor(service: string) {\n\t\tsuper(GenericErrorDetailDto, ExceptionCodeEnum.GENERIC_ERROR, 503, [{ message: `${service} is unavailable` }]);\n\t}\n}\n```\n\nThe code must be a member of `ExceptionCodeEnum`, because `BaseException`\nreads its message template from `EXCEPTION_MESSAGES`. That map is typed\n`Record<ExceptionCodeEnum, string>`, so a code without a template does not\ncompile, and only a change to this package adds one. Reuse `GENERIC_ERROR`\nwhile the new code is not there yet.\n\n## Rebuild an exception from an envelope\n\nAn exception that crossed a boundary as plain data comes back as an envelope:\nthe processing error a task row stores, or the envelope a worker thread posts.\nWhen the code on this side needs an exception again, a subclass passes the\nenvelope to `BaseException`. The title becomes the message. The type, the\nstatus, the code and the details stay as the envelope carries them, so a\nmapper registry maps the exception the way it mapped the original, and a\nfilter renders the same envelope again.\n\n```ts\nimport { BaseException, ExceptionDto } from '@ballistix.digital/exception-types';\n\nexport class WorkerException extends BaseException<object> {\n\tconstructor(envelope: ExceptionDto) {\n\t\tsuper(envelope);\n\t}\n}\n\n// message \"Validation failed\", status 400, code VALIDATION_FAILED, the details as stored\nthrow new WorkerException(task.processingError);\n```\n\nThis path never fills the message template of the code, because the title is\nalready the filled message. A field the envelope lacks gets a default: an\nempty message, status 500, `GENERIC_ERROR` and no details. A code this version\nof the package does not know also becomes `GENERIC_ERROR`, so an envelope from\na newer producer still rebuilds.\n\n## Validation rules\n\n`ValidationRuleEnum` has one member per class-validator rule constant, named\nafter the constant (`IS_STRING`, `MIN`, `ARRAY_NOT_EMPTY`), plus `UNKNOWN`. A\ndetail of a validation failure names the rule that rejected the value.\n\n`validationRuleByName` maps the decorator name that class-validator reports to\nthe member:\n\n```ts\nimport { validationRuleByName, ValidationRuleEnum } from '@ballistix.digital/exception-types';\n\nvalidationRuleByName['isString']; // ValidationRuleEnum.IS_STRING\nvalidationRuleByName['nope'] ?? ValidationRuleEnum.UNKNOWN; // the fallback\n```\n\nThe lookup is exact and has no entry for `UNKNOWN`. Fall back to\n`ValidationRuleEnum.UNKNOWN` for a name it does not carry, so a custom\ndecorator degrades to a generic detail instead of throwing.\n\n## convertAndValidate\n\n`convertAndValidate(cls, plain)` turns a plain object, or an array of them,\ninto instances of `cls` and validates them with class-validator. When a rule\nfails, it throws a `ValidationException`. `getValidationErrors()` gives back\nthe raw class-validator errors.\n\n```ts\nimport { convertAndValidate, ExceptionDto, ValidationException } from '@ballistix.digital/exception-types';\n\ntry {\n\tconst envelope = convertAndValidate<ExceptionDto, unknown>(ExceptionDto, await response.json());\n} catch (error) {\n\tif (error instanceof ValidationException) {\n\t\tconsole.warn(error.getValidationErrors());\n\t}\n}\n```\n\nThree behaviours are worth knowing:\n\n- **Luxon.** Every `DateTime` in the input, at any depth, becomes its ISO\n  string before conversion. class-transformer otherwise rebuilds a `DateTime`\n  with its default constructor and sets every date to the current time. The\n  function changes the input object in place.\n- **Undecorated DTOs.** `forbidUnknownValues` is off, so a DTO that carries no\n  class-validator decorator passes instead of failing.\n- **Extraneous values.** `excludeExtraneousValues` is the third argument and\n  defaults to on, so only `@Expose()`d properties survive the conversion.\n\n## The two entries\n\n| Entry | Import | Decorators | Needs `@nestjs/*` |\n| --- | --- | --- | --- |\n| `.` | `@ballistix.digital/exception-types` | the real `@nestjs/swagger` decorators when the package is installed, the shim otherwise | when installed |\n| `./react` | `@ballistix.digital/exception-types/react` | a shim with the same call signatures and no runtime effect | no |\n\nBoth entries compile from the same `src/`, so the classes, the fields and the\ncodes are identical. Only the decorators differ. A Nest application imports\nthe `.` entry and gets OpenAPI schemas for the DTOs. A browser bundle imports\n`./react` and gets the same shapes with nothing under `@nestjs/` in its graph.\nSee [ADR 0003](https://github.com/layeredprints/ballistix-okf-wiki/blob/main/general/libraries/exception-mapper/decisions/0003-two-entries-from-one-source.md).\n","readmeFilename":"README.md"}