{"_id":"lapiz","_rev":"34-b9f4e8e72096fd07a7c5ce44a6c603b2","name":"lapiz","dist-tags":{"latest":"2.2.5"},"versions":{"1.0.0-beta":{"name":"lapiz","version":"1.0.0-beta","keywords":["api","express","zod","typescript","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@1.0.0-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"92ba568a7d1f2e4ffebfa9848308dc1551dccd6b","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-1.0.0-beta.tgz","fileCount":13,"integrity":"sha512-G+GbWjkP2xoNlss9axObxxOE5ZG8u9oYPyZklYNVnQXA5o8hEW74ZwFIqqtxx+OS9ubPiYZpFM0ZuZTt78UAAg==","signatures":[{"sig":"MEUCIDH8+MStgM5O3b7C4VEtqRmaXirLV+ylIx3AP8L2sFUCAiEAxy0phRRG8zqPnExMaszJdxd5IlxbROBhw7gRIxC5K/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58116},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./lib/lapiz.js","require":"./lib/lapiz.js"},"./sdk":{"import":"./lib/sdk.js","require":"./lib/sdk.js"},"./backend":{"import":"./lib/lapiz-backend.js","require":"./lib/lapiz-backend.js"}},"gitHead":"dd3266ad213b9697999741118b24203d8ab09a9e","imports":{"#lib/*":"./lib/*/index.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"deprecated":"brocken version. Use lapiz@1.0.1-beta","repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"4.1.12","express":"5.1.0","file-type":"21.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_1.0.0-beta_1770767155394_0.29868260696454496","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-beta":{"name":"lapiz","version":"1.0.1-beta","keywords":["api","express","zod","typescript","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@1.0.1-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"19a74be2837e61edd7087bdb4d4032a0b07b2834","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-1.0.1-beta.tgz","fileCount":13,"integrity":"sha512-F4T1RVwL/yUU0rY7bOWJD9lOdoKOueS6Cckwhl7CWrERYUlqfWiWI+QvBz6BqShvBsHubGKgFzZEz7aZdFQwQQ==","signatures":[{"sig":"MEYCIQDltoJKNP7AR8ouuYJW+xHrwTRlFV8WLmaFk9POlDFjUQIhAP//uINLnCnK1xMaSQKxcFQXFewXUheA5FlPTw8xwybh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58152},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./lib/lapiz/index.js","require":"./lib/lapiz/index.js"},"./sdk":{"import":"./lib/sdk/index.js","require":"./lib/sdk/index.js"},"./backend":{"import":"./lib/lapiz-backend/index.js","require":"./lib/lapiz-backend/index.js"}},"gitHead":"754aa71de3f4badfecb1e748c28e05e8cf20fef4","imports":{"#lib/*":"./lib/*/index.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"deprecated":"This version can't admit zod unions in endpooint declarations","repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"4.1.12","express":"5.1.0","file-type":"21.3.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_1.0.1-beta_1770767387411_0.18639328516612852","host":"s3://npm-registry-packages-npm-production"}},"1.0.2-beta":{"name":"lapiz","version":"1.0.2-beta","keywords":["api","express","zod","typescript","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@1.0.2-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"241e678cdef459ed52bd8195e232cd5daf5db13c","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-1.0.2-beta.tgz","fileCount":13,"integrity":"sha512-F9fWTFeYUsOkNrezkDtqhQVSjAHarsLW0VKDbMjn4VlAd6MQ2gE+jkTGU7/CedQ+le09qIgTTr58sFtEf3Cf1w==","signatures":[{"sig":"MEUCICajbqSRyD1EQnFSlfr4rTHFFHAYV92tDWSG5njRnhkUAiEAgHd3hyKM3DUR5cV0/XFBI2LjU93GNShKrsm8FdEFHuk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58342},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./lib/lapiz/index.js","require":"./lib/lapiz/index.js"},"./sdk":{"import":"./lib/sdk/index.js","require":"./lib/sdk/index.js"},"./backend":{"import":"./lib/lapiz-backend/index.js","require":"./lib/lapiz-backend/index.js"}},"gitHead":"754aa71de3f4badfecb1e748c28e05e8cf20fef4","imports":{"#lib/*":"./lib/*/index.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"deprecated":"LapizBackend.implements incorrect type","repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"4.1.12","express":"5.1.0","file-type":"21.3.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_1.0.2-beta_1772113403967_0.6455660908463581","host":"s3://npm-registry-packages-npm-production"}},"1.0.3-beta":{"name":"lapiz","version":"1.0.3-beta","keywords":["api","express","zod","typescript","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@1.0.3-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"636d7f080ca1fb166de3ff131eb66264fc03a723","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-1.0.3-beta.tgz","fileCount":13,"integrity":"sha512-kIN0qSgcd/40y0Q3xpJL2HR+l7fAtbemSHPEQYHkXyZUTw3bVkhJShda34wlpfwLUl+35cETslOFwFtTKCS6ew==","signatures":[{"sig":"MEYCIQDdCIw3WJLokWsVKiRk/zqoQkb3fYxxzLpsrhh5gDbDxgIhAIx/uNThs41oyyLVFy4RRkRcLDmxqSzfWspvGa2lZlOc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58182},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./lib/lapiz/index.js","require":"./lib/lapiz/index.js"},"./sdk":{"import":"./lib/sdk/index.js","require":"./lib/sdk/index.js"},"./backend":{"import":"./lib/lapiz-backend/index.js","require":"./lib/lapiz-backend/index.js"}},"gitHead":"3b9a3a604cfcd34ec528c7e13896f978147d3127","imports":{"#lib/*":"./lib/*/index.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"4.1.12","express":"5.1.0","file-type":"21.3.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_1.0.3-beta_1772116804740_0.07328953754761947","host":"s3://npm-registry-packages-npm-production"}},"1.0.4-beta":{"name":"lapiz","version":"1.0.4-beta","keywords":["api","express","zod","typescript","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@1.0.4-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"c6c0782749ca01382d9587c0374962d31dcb1986","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-1.0.4-beta.tgz","fileCount":13,"integrity":"sha512-Rnhn4wSRvTco8DkW+ggTtua+HseMVsEjbA/D9qLpPtZzMP0kYAc1A/lbLZx3LX3AAWYBdGVuhpVfX/EIuvzKXg==","signatures":[{"sig":"MEYCIQDF1zhzB84V86iUKfZ9iDfCnG7AdHlrKCLXrAc14uyMOwIhAN2EwODqIBnCU5sZ8L2N5kTUDrbkXGNxHq5St8/Q/ukg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58164},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./lib/lapiz/index.js","require":"./lib/lapiz/index.js"},"./sdk":{"import":"./lib/sdk/index.js","require":"./lib/sdk/index.js"},"./backend":{"import":"./lib/lapiz-backend/index.js","require":"./lib/lapiz-backend/index.js"}},"gitHead":"23b424eeb89a3f8611864d7c4e22bef2775e23aa","imports":{"#lib/*":"./lib/*/index.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"4.1.12","express":"5.1.0","file-type":"21.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_1.0.4-beta_1772118288013_0.795715196493963","host":"s3://npm-registry-packages-npm-production"}},"1.0.5-beta":{"name":"lapiz","version":"1.0.5-beta","keywords":["api","express","zod","typescript","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@1.0.5-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"3b4fc21c12c8d51c9649ac5e93024b139a277bf9","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-1.0.5-beta.tgz","fileCount":13,"integrity":"sha512-vKjRjPKY+XifBzCsc4a9wGmkuFCP618HDE3ex6MkAltnMHp3n9gWAvxaSM1ha5u/RE0Akc+uCa2dpSw6zuCoSQ==","signatures":[{"sig":"MEUCIBrZwvKlnIUm6IBCbcY/iOHxpB46vB1SVj9b9q0fPsoSAiEAjUfycCOiuUEv1A/4Np13InV0bu1icVjlD3kInWLvOHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58045},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./lib/lapiz/index.js","require":"./lib/lapiz/index.js"},"./sdk":{"import":"./lib/sdk/index.js","require":"./lib/sdk/index.js"},"./backend":{"import":"./lib/lapiz-backend/index.js","require":"./lib/lapiz-backend/index.js"}},"gitHead":"e4e51b4501673873a631171b9f52cc4493f193c5","imports":{"#lib/*":"./lib/*/index.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"4.1.12","express":"5.1.0","file-type":"21.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_1.0.5-beta_1772303206966_0.4037052673931043","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-beta":{"name":"lapiz","version":"2.0.0-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.0-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"e886939ae587e5af757d183762e266eeb1473495","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.0-beta.tgz","fileCount":11,"integrity":"sha512-jKJbpDXkjwaugTClnTmy5AOrP992QxanRAqwNWWNTh/vWliqGDkhRRazG8ewzu1dHC1pkqhNKmByy4zv0StY2g==","signatures":[{"sig":"MEYCIQDhZpbrcS5LbpIzPr3puVc9zXEZafCsrUiM/xi5AIak+gIhAMrQfy7HJqw0qpG4dPIvzDyO9OFXp9UlNK5yfnQF4Zyq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34579},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js"}},"gitHead":"e6c4768b0853f78d24aa67aef9779d22c029263e","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.0-beta_1772722590118_0.026199874596402273","host":"s3://npm-registry-packages-npm-production"}},"2.0.1-beta":{"name":"lapiz","version":"2.0.1-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.1-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"0a05d6a77d772b352b8749feffd7339e6ec51c95","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.1-beta.tgz","fileCount":11,"integrity":"sha512-0PmXsfLIK1MJXGUIC4jsQ1JSxcGUzNW/Zqo5Kc25Quh+x8yLKIwR/AvCUPx5eC5elObiMj1lMv8lIVNvKDquQQ==","signatures":[{"sig":"MEYCIQDxRneVTid2i9S2iBzzI+csmtGlr4/NjZLD1dLGrf1sWQIhAK9AHqx16/cU/NBmXuPGPW9Qc9JeASPU5wtUCqHrhzb6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34472},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js"}},"gitHead":"ad916f9b492261c69ef48982ad4d887460aab168","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.1-beta_1773680753461_0.7914125220771919","host":"s3://npm-registry-packages-npm-production"}},"2.0.2-beta":{"name":"lapiz","version":"2.0.2-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.2-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"05048bfc2b700e12bdf5d2dcd1dd13b6474984d2","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.2-beta.tgz","fileCount":11,"integrity":"sha512-wV8z15O7gNv6rb2/q4Q/yMY64y/rdys5C0K2SPgwYVvbuhCDZfJT1C0EAyD4ICEaUJ5YbGyzU1XHjy3zUbNRFg==","signatures":[{"sig":"MEUCIDnm7YdLVQC8fZ1oVNpcRX4iIMRccl0dd/OPqaAbbGKpAiEA+1r3shLxOsVLbbCWmiZ4XOnZ8umUyzM3NXPAyKmnQUQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34621},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js","default":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js","default":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js","default":"./lib/frontend-error/index.js"}},"gitHead":"101a33f987cdc504ff2b2b533fa2c989d6f59892","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.2-beta_1773688943708_0.42446978022894877","host":"s3://npm-registry-packages-npm-production"}},"2.0.3-beta":{"name":"lapiz","version":"2.0.3-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.3-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"833a722f7cd1aff6e2f12c29d2038d46b4e1d7f8","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.3-beta.tgz","fileCount":11,"integrity":"sha512-mSyMfesLYaJrDZzeMcuj6Z5mGqymsofb8VzIlnN5xmw19I8O/PJ/DzvR3pg6NM3PBuYIq2oSh+zAZuWVW7rGMg==","signatures":[{"sig":"MEYCIQDavHAOiLHs6NEB8vpdLkK5WtOJwSzlaL2EZeHfrxfpfwIhAKFpd/jiHVoHnJSQphSHFQWTPiDjYmcxURYUOtmziRwj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34605},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js","default":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js","default":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js","default":"./lib/frontend-error/index.js"}},"gitHead":"0d4a98d1d894e551712249db9f3c6f7ef0fbc2b2","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.3-beta_1773689879627_0.4929797929866686","host":"s3://npm-registry-packages-npm-production"}},"2.0.4-beta":{"name":"lapiz","version":"2.0.4-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.4-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"46cb384e2a886d88b044bb5464165e991af8a6a8","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.4-beta.tgz","fileCount":11,"integrity":"sha512-/zNTGRz2VXeQ1H400ThPaOJuOTN+te4nGls+WbUhGt4amR941Lsu+nrIb1OlA/Ak2z1OtMr0pGJ5HcQOrmhc4Q==","signatures":[{"sig":"MEUCIGxbR6I5oZY1zhnKLOPdmer+QjdXrnKQDYEGVTDf7iQyAiEA7i3zgRn5Nmi+XefcvwHsDMYKnoEhErlpJE9WaEkP2qE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35086},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js","default":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js","default":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js","default":"./lib/frontend-error/index.js"}},"gitHead":"fc2c719cb7cd7c7e96e73102299376387434012b","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.4-beta_1773928997767_0.6729868663069547","host":"s3://npm-registry-packages-npm-production"}},"2.0.5-beta":{"name":"lapiz","version":"2.0.5-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.5-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"4c3529101cbd39332af245a3b78202273423ee48","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.5-beta.tgz","fileCount":11,"integrity":"sha512-9qxTU2elCle1kmVCfLELPZCmMBqsRnmm8tV/2mb6/XPPfzwG+rH5ieKtAKMmlRfPK6VIDo2XIsvpGuTn0NaXhA==","signatures":[{"sig":"MEUCICnS4ZUaeqjTaSC+6beVRwwvxIhYv5dB9u3iW8vimT5OAiEAuvt0MJnoDoW687p6abMesaVQYJdJYdtUxTgkdlX/R34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35122},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js","default":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js","default":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js","default":"./lib/frontend-error/index.js"}},"gitHead":"9804d39dd4f46ab39d4983f5fca089c91df7f927","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.5-beta_1773938267595_0.23656925626510783","host":"s3://npm-registry-packages-npm-production"}},"2.0.6-beta":{"name":"lapiz","version":"2.0.6-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.6-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"1a9a7e76a41cd22e9e966360ded9063989f8f11c","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.6-beta.tgz","fileCount":11,"integrity":"sha512-7oJNG8D7hISMErHmTyMvpFaagAUZiCunbWzx+oq02hgjyAs1gTKYuOVc6suEPiw33F53Olifthq/qajnrkGt8w==","signatures":[{"sig":"MEYCIQCaWom3R2FyfREnAfkCT7HylDbRrqkTlEHo1Jbze+tH1QIhAIhQFKJ2vpj2DEzhDN4PVpOZCCm1updYJ00jYWnJ2mVU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33522},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js","default":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js","default":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js","default":"./lib/frontend-error/index.js"}},"gitHead":"3430b543b0106a3b5fbdf0c6471c4c0d877d3ec1","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.6-beta_1774530688021_0.13364696818785915","host":"s3://npm-registry-packages-npm-production"}},"2.0.7-beta":{"name":"lapiz","version":"2.0.7-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.7-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"88cd7ec13391dec4e7c011c87f743645bd37e574","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.7-beta.tgz","fileCount":11,"integrity":"sha512-wXDm25QwhI6fB44FKoaoVyZ1hR+XlS2gnsLe8nJ970FTWPl8YgwjIFTxfxw78MHMJvgQB5TLdxXD5er8rDcbbA==","signatures":[{"sig":"MEUCIQDpHeMi6OU8v4vPhOWogguJ1TDGA5v2etVpLm/v0W3zkAIgFK2Fjn7prkmgCDzRoOxsS4vDtQ80bVMkhVBUwWzNg9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33557},"main":"./lib/lapiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./lib/sdk/index.js","default":"./lib/sdk/index.js"},"./router":{"require":"./lib/router/index.js"},"./api-caller":{"import":"./lib/api-caller/index.js","default":"./lib/api-caller/index.js"},"./backend-error":{"require":"./lib/backend-error/index.js"},"./route-handler":{"require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./lib/frontend-error/index.js","default":"./lib/frontend-error/index.js"}},"gitHead":"6e95bcb31986181022ecc558463874ec7438197c","imports":{"#lib/*":"./lib/*"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.7-beta_1774535383126_0.4318977228507246","host":"s3://npm-registry-packages-npm-production"}},"2.0.8-beta":{"name":"lapiz","version":"2.0.8-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.8-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"63f625d074457b8834bc8865976af7d380dbba31","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.8-beta.tgz","fileCount":11,"integrity":"sha512-2h+ey8w6hKqwXT/elY6zXRsGHp0C9sA/JPL3BBdvg2ttFET3h0HGV2aVAchaP7/sX1yb96A5A8K+idhdkttJ4g==","signatures":[{"sig":"MEQCIHKEio7qeLPL8ZiDVhwo07HRc43HJ8k4RRV9LfpSaNZ7AiA2wRc1Sef285icL8Vp6CQT/l+EodM5yKywyhjwXLK/FQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34061},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"}},"gitHead":"ab8ca3b3c4feaa90de793df4ae411050a73c3ef2","imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.8-beta_1774963917082_0.580067693336999","host":"s3://npm-registry-packages-npm-production"}},"2.0.9-beta":{"name":"lapiz","version":"2.0.9-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.9-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"4ed589b4efeb9580e0cecf7a4fe2eb1f708d689f","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.9-beta.tgz","fileCount":11,"integrity":"sha512-K+ZJg8f67Uo6dTZ6iosMveH29aKLyxW5UeY2Ru2kfQcfdeeIdLMFsTwUPPOI1Jb0ReLI4/unTXWQZ1WbSS/5Kw==","signatures":[{"sig":"MEQCICzZO4IGBIzhnzoWY+UqFF8TMCMBmqg2rSMurDfBTcfQAiALHkUgkzt0UFYjeblvDP86nXCv20Bthjdqj7tEbCPw2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34554},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"}},"gitHead":"0112d959a1bbec9386f6f111dc8def8ea40a4f7c","imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.9-beta_1775230736999_0.8245881065859462","host":"s3://npm-registry-packages-npm-production"}},"2.0.10-beta":{"name":"lapiz","version":"2.0.10-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.10-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"a8deab7f3a616e53528b05245c6459dde9cf3797","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.10-beta.tgz","fileCount":11,"integrity":"sha512-ClYb5w7n7sJ7z92JUeonfDoHcGEJ/1akkpDB8eRwsXZqrXGWHiZnpCyzg7RVTmw4LxMjGYt9POhAmAFgOVd4XA==","signatures":[{"sig":"MEYCIQDQMcnIcm3+XqDtno0ZiUuXBnA5zY0+hduaoQlKAcjbZwIhAN6x1Q71MTk7m9yU0ClPBlw8+M+f/rUzy0TjkEyodcY2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39146},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"}},"gitHead":"1d1d7b5b12a1c6c48175b092e2378f32449036bb","imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.10-beta_1776109438517_0.9540751432354895","host":"s3://npm-registry-packages-npm-production"}},"2.0.11-beta":{"name":"lapiz","version":"2.0.11-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.11-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"e522030b7145edce791bdc39789c977906170210","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.11-beta.tgz","fileCount":11,"integrity":"sha512-wq0g0cz+DUalSp558RJvtDKj6yWG/9eHQG1oGIljMF4HLqKDSU6yZJWslWbc2XA7aIcpvptSlsazRXZjqqdHlg==","signatures":[{"sig":"MEYCIQCZENK+myIFh+7EAzvDhKGyV350fTVkqJyYxTPzqiDtdgIhAIcxURxnt8yZ1D421GuNWfZnvFLZg6gwk3qXcj9a9OIU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39999},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"}},"gitHead":"60bb9ccba260db8f8027ab5ac568e4deb3736a07","imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.11-beta_1776196916321_0.7217912554772559","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-beta":{"name":"lapiz","version":"2.0.12-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.12-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"63574c796fb3bea08b471d0819ce00fe38d7eba8","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.12-beta.tgz","fileCount":11,"integrity":"sha512-bIGxD3EruweX/10J9b0SQyF5FydJ3ibFbEl2AMqovv32JECTrfto5Hso9408dEGUr0ZW7ub0QSAcbe7136eEQw==","signatures":[{"sig":"MEUCIDMXn5/TzhX4AEOF87zuEcOJI1R0K2MVKuSCJw4sRYXgAiEA7lt7nCjJvrFHzAxdigXDOv+R7CdYhBlWVn6gAmwRHvY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40323},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"}},"gitHead":"c148629cd5b2ea84c96a5014e165e96e346ef903","imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.12-beta_1777307884481_0.7412287862247326","host":"s3://npm-registry-packages-npm-production"}},"2.0.13-beta":{"name":"lapiz","version":"2.0.13-beta","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":{"name":"Gabriel Farías R"},"license":"ISC","_id":"lapiz@2.0.13-beta","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"dist":{"shasum":"5abed5ecc4cea911220ad6e01770e860214c7537","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.0.13-beta.tgz","fileCount":11,"integrity":"sha512-nM7nrmcPJm8hTaHcspei27NPx8spFtOYa4Vwo2e0TECymH7p1LtvME912husBYp7py8EKVLm1iPdwtbpr82qdg==","signatures":[{"sig":"MEUCIQCxxYC/vULSPDnHvocq5Ckame9ATEDzx3eOznyHbj/NeQIgUQOjdNCf4SHjzzRZBlK4LyUuUB87NyIwEihj1EykvI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40444},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"}},"gitHead":"68081a5bae97dbb3a7d6260aa14e8ad22aa3dbec","imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"git+https://github.com/Gabrielito666/lapiz.git","type":"git"},"_npmVersion":"11.5.2","description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.0.13-beta_1779296721449_0.04364425473774691","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"lapiz","version":"2.2.0","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":"Gabriel Farías R","license":"ISC","_id":"lapiz@2.2.0","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"dist":{"shasum":"f6daa7efa7a67388d90004a42d351a3cadbdd0fc","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.2.0.tgz","fileCount":12,"integrity":"sha512-qc1mkbA/V52H9PX9WYy88Tv7Co8gkhX3iyUkO/DHOcgWS4T9op+pfDe70zb5N30hGWG3emDtX341tPyMI5/isA==","signatures":[{"sig":"MEYCIQD1ddtn3z7GEtGqPzaqK4j+o/EnS3JttgyCGAdYbF/VlAIhAKJIhEhgrl5/pPjRitumuQGe0TZzKSh8M2Mf1k/uGPB0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44639},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"}},"imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"https://github.com/Gabrielito666/lapiz","type":"git"},"description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.2.0_1786481111165_0.11533259346713276","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"lapiz","version":"2.2.1","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":"Gabriel Farías R","license":"ISC","_id":"lapiz@2.2.1","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"dist":{"shasum":"f27b96639840930a8bc47db2c464540fdf337cef","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.2.1.tgz","fileCount":12,"integrity":"sha512-+cRvrQpCOi3Pxyv2h61bodhMB4Gimhlz9je0s+bZcZAN0uYJLT7hGdaguA32epFELP6DEhznU9SQ8qX0jkRE1Q==","signatures":[{"sig":"MEUCIDHljQJ+kkl0pLmwNHv6ygADc4qmftmajaxFHWXQUQcNAiEAiNUhNbwr/ObIes7z7EeSv/WylgDIYGtE6jZAcQwmNLs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45373},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js.lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"},"./backend-response":{"import":"./module-js-lib/backend-response/index.js","require":"./lib/backend-response/index.js"}},"imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"https://github.com/Gabrielito666/lapiz","type":"git"},"description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.2.1_1786567410276_0.10595504555008017","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"lapiz","version":"2.2.2","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":"Gabriel Farías R","license":"ISC","_id":"lapiz@2.2.2","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"dist":{"shasum":"0b8c23c84891be22b6e402ada678f6028f114e8e","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.2.2.tgz","fileCount":13,"integrity":"sha512-xGsFZk23fpC6W5+I5xzYTLrgvCuNCFwdJ035HR49Ito2hDv1X1oh5JLDhqB25WafSDBZw3hFAmq4OwzvBKPgSw==","signatures":[{"sig":"MEQCIHR4e47Ym8jtsoQEywu3KvWHbjBwP91wc7CSkW9Q6+v5AiAlUPTCPYh5eZ0hc+gHyzdsw3omvL0vutVJxCQKauqZ1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49981},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js-lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"},"./backend-response":{"import":"./module-js-lib/backend-response/index.js","require":"./lib/backend-response/index.js"}},"imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"https://github.com/Gabrielito666/lapiz","type":"git"},"description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.2.2_1786587570637_0.3935198375120845","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"lapiz","version":"2.2.3","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":"Gabriel Farías R","license":"ISC","_id":"lapiz@2.2.3","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"dist":{"shasum":"d09c2d483fc63ac8085ab4b2dc1ef48c44bccab3","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.2.3.tgz","fileCount":23,"integrity":"sha512-TwWxZnIww+IDLWnWQ7ZOINHePobeSpV/ewCCiLFPUw0hcdy+FJ0GyueR8S1khc5pLeZA9uMCdUQuhyJM9LI6zA==","signatures":[{"sig":"MEUCIHJh0BzoxLPmCqV8okGi3ABPmY22fV5PdaP0/ny6WUV0AiEAoPGGl5oz6oPhh8e2YQT47ihqvDJkDPpM8X1WAt9QTUc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86890},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js-lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"},"./backend-response":{"import":"./module-js-lib/backend-response/index.js","require":"./lib/backend-response/index.js"}},"imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"https://github.com/Gabrielito666/lapiz","type":"git"},"description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.2.3_1786734669025_0.6945175418064831","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"lapiz","version":"2.2.4","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"author":"Gabriel Farías R","license":"ISC","_id":"lapiz@2.2.4","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"dist":{"shasum":"d4748fed322051d5b44695b115930ecb38fa0f5d","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.2.4.tgz","fileCount":24,"integrity":"sha512-P9KA35/XM2G+SIAiX+5Hnmj9sKQBLrIuXaNfLDQHHZ/su2maRhzte1uwzuuetvAwCwp15fRZMBqwQ9uTwbBOAA==","signatures":[{"sig":"MEQCIEqqIHr0VWIrolaZrnDoZXhjKkpvIkoNR0PegFnFmiZKAiALr6j6406PIJZOWEEcQJniscrkAjRb2ajrqtUYrUhz7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86970},"main":"./lib/apiz/index.js","type":"commonjs","engines":{"node":">=18.0.0"},"exports":{"./sdk":{"import":"./module-js-lib/sdk/index.js","require":"./lib/sdk/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"},"./backend-response":{"import":"./module-js-lib/backend-response/index.js","require":"./lib/backend-response/index.js"}},"imports":{"#lib/*":"./lib/*","#test/*":"./tests/*","#module-js-lib/*":"./module-js-lib/*"},"scripts":{"test":"node --test","to-esm":"node scripts/to-esm.js"},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"repository":{"url":"https://github.com/Gabrielito666/lapiz","type":"git"},"description":"jsDocs typed APIS maker","directories":{},"_nodeVersion":"23.11.1","dependencies":{"express":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/lapiz_2.2.4_1786735486902_0.20322868374152492","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"lapiz","version":"2.2.5","description":"jsDocs typed APIS maker","license":"ISC","author":{"name":"Gabriel Farías R"},"type":"commonjs","main":"./lib/apiz/index.js","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"repository":{"type":"git","url":"git+https://github.com/Gabrielito666/lapiz.git"},"engines":{"node":">=18.0.0"},"imports":{"#lib/*":"./lib/*","#module-js-lib/*":"./module-js-lib/*","#test/*":"./tests/*"},"exports":{"./sdk":{"import":"./module-js-lib/sdk/index.js","require":"./lib/sdk/index.js"},"./api-caller":{"import":"./module-js-lib/api-caller/index.js","require":"./lib/api-caller/index.js"},"./router":{"import":"./module-js-lib/router/index.js","require":"./lib/router/index.js"},"./route-handler":{"import":"./module-js-lib/route-handler/index.js","require":"./lib/route-handler/index.js"},"./frontend-error":{"import":"./module-js-lib/frontend-error/index.js","require":"./lib/frontend-error/index.js"},"./backend-error":{"import":"./module-js-lib/backend-error/index.js","require":"./lib/backend-error/index.js"},"./backend-response":{"import":"./module-js-lib/backend-response/index.js","require":"./lib/backend-response/index.js"}},"scripts":{"to-esm":"node scripts/to-esm.js","test":"node --test"},"dependencies":{"express":"5.1.0"},"devDependencies":{"@types/express":"5.0.6"},"_id":"lapiz@2.2.5","gitHead":"9f6f71ba51a28882c5b26e55dc9484508eabd37d","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"},"homepage":"https://github.com/Gabrielito666/lapiz#readme","_nodeVersion":"23.11.1","_npmVersion":"11.5.2","dist":{"integrity":"sha512-5Zchc8bV6vA+L7WO+6Qrt9a0HLbwwHwfHAy8SJJ9Cso+Cd2vprKKz2HedzEbWrst+cwlFz5Z4HzR+HwYhPERaQ==","shasum":"b4b311619c58b080afa0ea8b55526fc676cf0c82","tarball":"https://registry.npmjs.org/lapiz/-/lapiz-2.2.5.tgz","fileCount":24,"unpackedSize":86855,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDx/gldZM4ZprS1kbf20RX9/cT3HBN8wP9bGNIICSZFTgIhAKjzaC+t9vmVNwsF5ncYluPoEcl3t/PDF3eGJlDbiR/u"}]},"_npmUser":{"name":"gabrielito","email":"galileo.fandango@gmail.com"},"directories":{},"maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lapiz_2.2.5_1787149836329_0.7806545166397829"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-10T23:45:55.393Z","modified":"2026-08-19T14:30:36.604Z","1.0.0-beta":"2026-02-10T23:45:55.529Z","1.0.1-beta":"2026-02-10T23:49:47.554Z","1.0.2-beta":"2026-02-26T13:43:24.144Z","1.0.3-beta":"2026-02-26T14:40:04.874Z","1.0.4-beta":"2026-02-26T15:04:48.166Z","1.0.5-beta":"2026-02-28T18:26:47.111Z","2.0.0-beta":"2026-03-05T14:56:30.260Z","2.0.1-beta":"2026-03-16T17:05:53.592Z","2.0.2-beta":"2026-03-16T19:22:23.853Z","2.0.3-beta":"2026-03-16T19:37:59.803Z","2.0.4-beta":"2026-03-19T14:03:17.909Z","2.0.5-beta":"2026-03-19T16:37:47.740Z","2.0.6-beta":"2026-03-26T13:11:28.173Z","2.0.7-beta":"2026-03-26T14:29:43.275Z","2.0.8-beta":"2026-03-31T13:31:57.243Z","2.0.9-beta":"2026-04-03T15:38:57.128Z","2.0.10-beta":"2026-04-13T19:43:58.651Z","2.0.11-beta":"2026-04-14T20:01:56.454Z","2.0.12-beta":"2026-04-27T16:38:04.612Z","2.0.13-beta":"2026-05-20T17:05:21.580Z","2.2.0":"2026-08-11T20:45:11.324Z","2.2.1":"2026-08-12T20:43:30.441Z","2.2.2":"2026-08-13T02:19:30.832Z","2.2.3":"2026-08-14T19:11:09.197Z","2.2.4":"2026-08-14T19:24:47.071Z","2.2.5":"2026-08-19T14:30:36.477Z"},"author":{"name":"Gabriel Farías R"},"license":"ISC","keywords":["api","express","validation","type-safe","rest","sdk","backend","frontend"],"repository":{"type":"git","url":"git+https://github.com/Gabrielito666/lapiz.git"},"description":"jsDocs typed APIS maker","maintainers":[{"name":"gabrielito","email":"galileo.fandango@gmail.com"}],"readme":"# Lapiz\n\nLapiz (`lapiz`) is a class library for standardizing API endpoints on both the backend and frontend.\n\n## Installation\n\n```bash\nnpm i lapiz\n```\n\n---\n\n## Quick error handling pattern\n\nIn both `RouteHandler.handle()` and `ApiCaller.parseOutput()`, instead of returning the full response, you can return a quick error:\n\n```javascript\n// RouteHandler.handle()\nreturn RouteHandler.Error.BadRequest(\"Invalid input\");\n// or\nreturn RouteHandler.Error.Forbidden(\"Not authorized\");\n// or\nreturn RouteHandler.Error.InternalServerError(\"Database failed\");\n\n// ApiCaller.parseOutput()\nreturn new ApiCaller.Error.BadResponse(\"Unexpected response\");\n```\n\n---\n\n## ApiCaller (frontend)\n\nAn `ApiCaller` is an abstract class you extend to define how each API endpoint is called from the frontend. You must implement two methods:\n\n- `buildReq(input)` — builds the request object from the input\n- `parseOutput(rawRes, extra)` — parses the raw response and returns the final output\n\n### Error pipeline\n\nWhen you call `sdk.call(\"endpoint\", input)`, Lapiz handles errors automatically:\n\n```\nfetch()\n  ├─ Network/fetch fails       → FetchError\n  ├─ Server responded with error headers (bad-request, forbidden, internal-server-error)\n  │                            → the corresponding LapizFrontendError\n  ├─ Response body can't be parsed (JSON/text invalid)\n  │                            → ParseError\n  └─ All good                  → parseOutput() is called\n                                    └─ If response is unexpected → BadResponse()\n```\n\n**Key point:** By the time `parseOutput()` is called, all typical errors have already been filtered. The only error `parseOutput()` should return is `BadResponse()` when the server response doesn't match what you expect.\n\n### Example\n\n```javascript\nimport ApiCaller from \"lapiz/api-caller\"\nimport { hostName } from \"./constants.js\"\n\n/**\n * @typedef {\"create-pig\"} Name\n * @typedef {\"/create-pig/:name\"} Route\n * @typedef {{ name: string; age: number; }} Input\n * @typedef {{ success: true; error: null; } | { success: false; error: Error; }} Output\n * @typedef {{ \"content-type\": \"application/json\"; routeParams: { name: string }; body: { age: number } }} Req\n * @typedef {{ status: 200 | 500 }} Res\n */\n\nconst CreatePig = class extends ApiCaller.PUT\n{\n\tconstructor()\n\t{\n\t\tsuper(\"create-pig\", hostName, \"/create-pig/:name\");\n\t}\n\n\t/** @type {IApiCaller<Name, Route, Input, Output, Req, Res>[\"buildReq\"]} */\n\tbuildReq(input)\n\t{\n\t\treturn {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\trouteParams: { name: input.name },\n\t\t\tbody: { age: input.age }\n\t\t}\n\t}\n\n\t/** @type {IApiCaller<Name, Route, Input, Output, Req, Res>[\"parseOutput\"]} */\n\tparseOutput(rawResponse, extra)\n\t{\n\t\t// If we get here, the response has status 200 and valid content-type\n\t\t// Just check that the body is what we expect\n\t\tif(extra.contentType !== \"application/json\")\n\t\t{\n\t\t\treturn new ApiCaller.Error.BadResponse(\"Expected JSON response\");\n\t\t}\n\n\t\tconst body = extra.body;\n\t\tif(typeof body.success !== \"boolean\")\n\t\t{\n\t\t\treturn new ApiCaller.Error.BadResponse(\"Unexpected body shape\");\n\t\t}\n\n\t\t// Happy path - return the parsed output\n\t\treturn { success: body.success, error: null };\n\t}\n}\n\nexport default CreatePig;\n```\n\nThere are four variants depending on the HTTP method: `ApiCaller.GET`, `ApiCaller.POST`, `ApiCaller.PUT`, `ApiCaller.DELETE`.\n\n---\n\n## RouteHandler (backend)\n\nThe `RouteHandler` is the server-side equivalent of the `ApiCaller`. You must implement three methods:\n\n- `parseInput(expressReq)` — extracts and validates the input from the Express request. Returns the input, a quick error (`RouteHandler.Error.BadRequest`), or a RouteHandler.NEXT.\n- `handle(input, extra)` — contains the endpoint logic. Returns the output, a quick error (`RouteHandler.Error.BadRequest`, `RouteHandler.Error.Forbidden`, `RouteHandler.Error.InternalServerError`), or a RouteHandler.NEXT.\n- `buildRes(output, extra)` — builds the `LapizRes` response object from the output. Returns the `LapizRes` or a RouteHandler.NEXT.\n\n### Quick errors\n\nIn `handle()`, instead of returning the output, you can return a quick error:\n\n```javascript\nasync handle(input, extra)\n{\n\tconst existingPig = await db.findPig(input.name);\n\tif(existingPig)\n\t{\n\t\treturn RouteHandler.Error.BadRequest(\"Pig already exists\");\n\t}\n\n\tif(!extra.expressReq.user?.isAdmin)\n\t{\n\t\treturn RouteHandler.Error.Forbidden(\"Only admins can create pigs\");\n\t}\n\n\tconst result = await db.insertPig(input.name, input.age);\n\tif(!result)\n\t{\n\t\treturn RouteHandler.Error.InternalServerError(\"Database error\");\n\t}\n\n\treturn { success: true }; // Success output\n}\n```\n\n### Example\n\n```javascript\nconst RouteHandler = require(\"lapiz/route-handler\");\n\n/**\n * The types (N, R, I, O, Req, Res) are the same as in the frontend ApiCaller.\n *\n * @implements {IRouteHandler<N, R, I, O, Req, Res>}\n * @extends {RouteHandler.PUT<N, R, I, O, Req, Res>}\n */\nconst CreatePig = class extends RouteHandler.PUT\n{\n\tconstructor()\n\t{\n\t\tsuper(\"create-pig\", \"/create-pig/:name\");\n\t}\n\n\tparseInput(rawExpressReq)\n\t{\n\t\tif(typeof rawExpressReq.body.age !== \"number\")\n\t\t{\n\t\t\treturn new RouteHandler.Error.BadRequest(\"The 'age' field must be a number\");\n\t\t}\n\t\treturn {\n\t\t\tname: rawExpressReq.params.name,\n\t\t\tage: rawExpressReq.body.age\n\t\t};\n\t}\n\n\tasync handle(input, extra)\n\t{\n\t\t// Business logic - can return output OR a quick error\n\t\tawait myDatabase.insertPig(input.name, input.age);\n\t\treturn { success: true, error: null };\n\t}\n\n\tbuildRes(output)\n\t{\n\t\treturn {\n\t\t\tstatus: output.success ? 200 : 500\n\t\t};\n\t}\n}\n\nmodule.exports = CreatePig;\n```\n\n### RouteHandler.NEXT\n\nThe methods you implement in a RouteHandler can return a `RouteHandler.NEXT`. This is a Symbol that tells `lapiz` to abandon the current middleware and pass control to the next one, just like Express's `next()` function.\n\nThis means you can register multiple RouteHandlers on the same route (or using `USE`) and they will be registered as middlewares in the order you pass them to `Router`.\n\nMy personal recommendation is that when chaining `RouteHandlers`, it's best to use the same `Input`, `Output`, `Req`, and `Res` signature, declaring them with broad unions that can cover both.\n\n### Variants\n\nThere are five variants: `RouteHandler.GET`, `RouteHandler.POST`, `RouteHandler.PUT`, `RouteHandler.DELETE`, and `RouteHandler.USE`.\n\nEach one represents a different HTTP method, except `USE`, which registers a middleware for any HTTP method just like Express.\n\n### Redirects\n\nTo return a redirect from `buildRes()`, you can use `RouteHandler.Response.Redirect`:\n\n```javascript\nbuildRes(output)\n{\n\treturn new RouteHandler.Response.Redirect(\"/new/url\");\n\t// or with an explicit status\n\treturn new RouteHandler.Response.Redirect(\"/new/url\", 301);\n}\n```\n\nThis is exactly the same as returning the `LapizResVOID` object by hand:\n\n```javascript\nbuildRes(output)\n{\n\treturn {\n\t\tstatus: 302,\n\t\theaders: { location: \"/new/url\" }\n\t};\n}\n```\n\nJust more convenient: the constructor validates that the status is a 3xx code (it throws an error otherwise) and defaults to 302.\n\n---\n\n## Router (backend)\n\nThe `Router` takes a list of `RouteHandler`s and registers them on an Express application.\n\n```javascript\nconst Router = require(\"lapiz/router\");\nconst express = require(\"express\");\nconst CreatePig = require(\"./create-pig.js\");\n\nconst router = new Router(\n\tnew CreatePig(),\n\t// ...more handlers\n);\n\nconst app = express();\nrouter.addToApp(app);\napp.listen(3000, () => { console.log(\"Listening on localhost:3000\") });\n```\n\n---\n\n## SDK (frontend)\n\nThe `SDK` groups multiple `ApiCaller`s and exposes a `call(name, input)` method with automatically inferred typing.\n\n```javascript\nimport SDK from \"lapiz/sdk\";\nimport CreatePig from \"./create-pig.js\"\n\nconst sdk = new SDK(\n\tnew CreatePig(),\n\t// ...more callers\n);\n\n(async () =>\n{\n\tconst res = await sdk.call(\"create-pig\", { name: \"oink\", age: 66 });\n\n\tif(res.error)\n\t{\n\t\tconsole.error(res.error); // LapizFrontendError with the problem\n\t}\n\telse\n\t{\n\t\tconsole.log(res.output); // { success: true; error: null } | { success: false; error: Error }\n\t}\n})();\n```\n\n---\n\n## Error types\n\n### Backend errors (`LapizBackendError`)\n\nUsed in `RouteHandler`:\n\n- `RouteHandler.Error.BadRequest` — 400, invalid input\n- `RouteHandler.Error.Forbidden` — 403, not authorized\n- `RouteHandler.Error.InternalServerError` — 500, unexpected server failure\n- `RouteHandler.Error.NotFound` — 404, not found\n\n### Frontend errors (`LapizFrontendError`)\n\nReturned by `sdk.call()`:\n\n- `ApiCaller.Error.FetchError` — network/fetch failed (no connection, CORS, timeout)\n- `ApiCaller.Error.BadRequest` — server returned 400\n- `ApiCaller.Error.Forbidden` — server returned 403\n- `ApiCaller.Error.InternalServerError` — server returned 500\n- `ApiCaller.Error.NotFound` — server returned 404\n- `ApiCaller.Error.ParseError` — couldn't parse the response body\n- `ApiCaller.Error.BadResponse` — `parseOutput()` detected an unexpected response format\n\n---\n\n## Notes on body types\n\nWhen the `content-type` is `application/json`, `text/plain`, or there is no body (`void`), the `Req` and `Res` types are identical between frontend and backend.\n\nFor binary content (`BinaryMimeType`), the `body` type differs:\n\n| Side | `body` type in `Req` | `body` type in `Res` |\n|------|----------------------|----------------------|\n| Frontend | `BodyInit` (`File`, `Blob`, etc.) | `ReadableStream` |\n| Backend | `import(\"node:stream\").Readable` | `import(\"node:stream\").Readable` |\n\n---\n\n## Additional notes\n\nCurrently, the GET and DELETE methods in routeHandler do not throw an error if they receive a body. Be sure not to use either contentType or body in these methods, as this can lead to silent errors.\n","readmeFilename":"README.md","homepage":"https://github.com/Gabrielito666/lapiz#readme","bugs":{"url":"https://github.com/Gabrielito666/lapiz/issues"}}