{"_id":"@cambusa/core","_rev":"9-ab63aaabbc82cadfff7e2140dbdc1915","name":"@cambusa/core","dist-tags":{"latest":"0.9.8"},"versions":{"0.8.0":{"name":"@cambusa/core","version":"0.8.0","license":"MIT","_id":"@cambusa/core@0.8.0","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"bin":{"cambusa":"bin/cambusa.js"},"dist":{"shasum":"fc9e799dda4c481b768718a4be4ca808bb0d3219","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.8.0.tgz","fileCount":66,"integrity":"sha512-ncxBk8rzxb4ZBt9zuvmE75FIRKeVsKbEljW2ehDF8XJXfT2eR1vi55zmBH60l4/EfCzVj/gt3QA7kzVxL8TTQg==","signatures":[{"sig":"MEYCIQDrmT9deqe+spsdxwATS0Le9ONJodAXF5FjdHOImlFk5wIhAJq/K4X1FkvBlRQ0UPFp6hu4oFLt+vtR1RO0n7LJkmZL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258155},"type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"module":"app.js","engines":{"bun":">= 1.1.28"},"gitHead":"8bc2accdf320e79146f5147e657dddc6dda7b561","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.8.0_1727037638649_0.792147256212971","host":"s3://npm-registry-packages"}},"0.9.0":{"name":"@cambusa/core","version":"0.9.0","license":"MIT","_id":"@cambusa/core@0.9.0","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"bin":{"cambusa":"bin/cambusa.js"},"dist":{"shasum":"a580ff965b2080dd549744a13038a073065f347c","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.0.tgz","fileCount":43,"integrity":"sha512-06PgrTVQdacx1m+yW8gRtgcwKev1WUSTnfW09wii4WH40/FmrO6o19lI7cRu9rdsD6Bq22VSxaHm3hqxo0oVKw==","signatures":[{"sig":"MEQCIA5c2PbuS6/156yZEqTs3ULPlYrRytLDjXYAlDGvuhrBAiB9X0g6V8C9Ckq2XlQSGvuJdLuscfKqoD2/HX9ZNmSB9A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":103781},"main":"src/app.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"module":"src/app.js","engines":{"bun":">= 1.1.28"},"gitHead":"73f8f9a6bcb5be6ef0dcb7a175df3fcffd55d827","scripts":{"dev":"bun run --watch src/app.js","lint":"eslint .","start":"bun run src/app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.0_1727038661411_0.920013131074249","host":"s3://npm-registry-packages"}},"0.9.1":{"name":"@cambusa/core","version":"0.9.1","license":"MIT","_id":"@cambusa/core@0.9.1","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"bin":{"cambusa":"bin/cambusa.js"},"dist":{"shasum":"aa660962bb8bbfda5e13baf11363f5884ada5649","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.1.tgz","fileCount":43,"integrity":"sha512-SohX5HHoanxpG4q6MjEVQY8Vyn+xQCm2GQaFkXtNz4yawn+Xhw0IZXCe1U4j937EMBaJ+rz7u6Wwe99ynATwXg==","signatures":[{"sig":"MEUCIQDU22kGjB88mOQhPmPmrB8qG58HL2ss5YeboB5IkkPWzQIgU1OHl778AcSBxMOuIUza+GjGp1U50Tw5eE8ngihA39I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":103573},"main":"src/index.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"module":"src/index.js","engines":{"bun":">= 1.1.28"},"gitHead":"3eacea46a404eab84303466e46692e7dfa37f02d","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.1_1727042827151_0.9849788337783723","host":"s3://npm-registry-packages"}},"0.9.2":{"name":"@cambusa/core","version":"0.9.2","license":"MIT","_id":"@cambusa/core@0.9.2","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"bin":{"cambusa":"bin/cambusa.js"},"dist":{"shasum":"17177ae3723299667b0a7590ecfda6c2893234c8","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.2.tgz","fileCount":43,"integrity":"sha512-wuYKj+gjOsiNzXNdFt8N99mHXEyI9VpgWahW/Ljn3SCwQDEfYVg+Xo6YYD2AHf11IlHz/Dvo9i1HCaOuni2/sw==","signatures":[{"sig":"MEUCIQCNo90X/sS+9KpERl3a+HxGOAmgt04m0ZaYid1ihtgg1AIgddklKFp9AAn4w38DAbZ5cGPe3u7pS0uQWHP2siczAAI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":104193},"main":"src/index.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"module":"src/index.js","engines":{"bun":">= 1.1.28"},"gitHead":"96223445d17634d82bcf4fe0f25745c9931d53cb","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.2_1727044823741_0.8733453698230669","host":"s3://npm-registry-packages"}},"0.9.3":{"name":"@cambusa/core","version":"0.9.3","license":"MIT","_id":"@cambusa/core@0.9.3","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"bin":{"cambusa":"bin/cambusa.js"},"dist":{"shasum":"391d20e666b8b38280a1670b863d04de4fa3ecfb","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.3.tgz","fileCount":42,"integrity":"sha512-PqZdCcd8lOME9zjtmbb7ve4tfpoANLUQoBcMnVn3KxqjlcAJr65t9P+NdNzV1YNH8TGT+k1NeLu3UW0A4krV+g==","signatures":[{"sig":"MEYCIQDZ9t5hrJwMjroQKbNAZ20Fj3gPTcjWlNV+mR4O8qI6zAIhALUiKaeN3UBND6+O56SBzVcQgfUFn536luyhRgkh4jdI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":87738},"main":"src/index.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"module":"src/index.js","engines":{"bun":">= 1.1.28"},"gitHead":"49e5bfdb08c6c92edcce3d8bfcfe62a5f843b10a","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.3_1727045020590_0.865013880021948","host":"s3://npm-registry-packages"}},"0.9.4":{"name":"@cambusa/core","version":"0.9.4","license":"MIT","_id":"@cambusa/core@0.9.4","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"bin":{"cambusa":"bin/cambusa.js"},"dist":{"shasum":"3b19bd2cac53c1cb81fc6a2d63c7abc84874dd37","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.4.tgz","fileCount":21,"integrity":"sha512-qzHgo6gmbDd58QWGoIAHpZaoftv0X2kwhG1E4l41inkYK5lUhm5bAT/pH94pFAB7IK47rIK86dGZfIUWGp1/Og==","signatures":[{"sig":"MEUCIQD9ycxRo+ppf3F4cYe0UwKduYnElTdeDUKbs0wuz/ELzgIgKei1x6LN4MwH/zAkjKBIWQ3Tg8+Fsq2OSy8i15jq2jY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5386078},"main":"dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"module":"dist/index.js","engines":{"bun":">= 1.1.28"},"exports":{".":"./dist/index.js"},"gitHead":"f31c86f7e81215a8e7f0d55d9cad7d7dfff003e1","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","build":"bun build ./src/index.js --outdir ./dist --target node","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.4_1727045601559_0.552846902039893","host":"s3://npm-registry-packages"}},"0.9.5":{"name":"@cambusa/core","version":"0.9.5","license":"MIT","_id":"@cambusa/core@0.9.5","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"bin":{"cambusa":"bin/cambusa.js"},"dist":{"shasum":"918c40613e316c3911ce792c74ca9ae96f108295","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.5.tgz","fileCount":21,"integrity":"sha512-ml1/WCPBvTauPgOzb1YbvMy0Xigrs4aeC8DV3IufjIepmFnl/HiD9CALj1D9U+2tRXIfjWjmPfzGhHVvGvI1XQ==","signatures":[{"sig":"MEYCIQDwlkqV0W1QQhAKXveKAtoNFSDC0EIwxbIW8/1xWb9iRQIhALFJ+r2+4ycbvMr4TGUQzJjM19T/McQCuWP5N3k+2Xy2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5387060},"main":"dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"module":"dist/index.js","engines":{"bun":">= 1.1.28"},"exports":{".":"./dist/index.js"},"gitHead":"0b75400d8b5377c48bd44ddf21eacda723cc3739","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","build":"bun build ./src/index.js --outdir ./dist --target node","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.5_1727046043127_0.7000734274370155","host":"s3://npm-registry-packages"}},"0.9.6":{"name":"@cambusa/core","version":"0.9.6","license":"MIT","_id":"@cambusa/core@0.9.6","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"dist":{"shasum":"c785f909b00bbf3cb6e28e0193b9774d54fe1b97","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.6.tgz","fileCount":21,"integrity":"sha512-Thh1bp+Gaz9tzfqB88XfhLn5pHIge8e6RpByrOaJcLJfl9lcv8nTBn947283PkEqDhgTKXbgAzZenn2EfQwHhw==","signatures":[{"sig":"MEUCIQDCATr5Unas2wFX+NTb5FgozvAFDj/JmU1Ho5B5mLisCQIgAKKGEaxofPyHUETnI8a3Zaojz2ppOlf8gjMpsjttIYU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":73993},"main":"src/index.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"engines":{"bun":">=1.1.28"},"exports":{".":"./src/index.js"},"gitHead":"a7613c0237f49d20cb1c935e337bd44231cf93bf","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.6_1727116818215_0.14596093328417048","host":"s3://npm-registry-packages"}},"0.9.7":{"name":"@cambusa/core","version":"0.9.7","license":"MIT","_id":"@cambusa/core@0.9.7","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"dist":{"shasum":"ecdfdf05eecc5fed3dc75726bc40f814f0693d99","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.7.tgz","fileCount":21,"integrity":"sha512-BCTbHNyeGUN01y+vQxddcqAX72RqulsoSYwKGr2/qLYFmAt5ePbjZiB8xs/Oo6/ckUEYDXvEW4WS4cQab3xjlA==","signatures":[{"sig":"MEUCIHRzw5+kwCF0ivEYBc2RbETrVnUTH7kSEhi31XgZSbcEAiEArKxrqc3Qp/6IS10LrhwjqXtEEVmj6Z+u2hLauyx5sJ0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":73993},"main":"src/index.js","type":"module","husky":{"hooks":{"pre-commit":"lint-staged"}},"engines":{"bun":">=1.1.28"},"exports":{".":"./src/index.js"},"gitHead":"8ec30c52c429322f80c8eac4e92b861eb386fe59","scripts":{"dev":"bun run --watch app.js","lint":"eslint .","start":"bun run app.js","format":"prettier --write .","release":"release-it","lint:fix":"eslint --fix ."},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"_npmVersion":"9.8.1","description":"🚣 A modern, high-performance web framework built with Bun and modern JavaScript.","directories":{},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"_nodeVersion":"18.18.2","dependencies":{"pino":"^9.4.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","boolean":"^3.2.0","sqlite3":"^5.1.7","typeorm":"^0.3.20","minimist":"^1.2.8","commander":"^12.1.0","pluralize":"^8.0.0","pino-pretty":"^11.2.2","@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.6","eslint":"^9.11.0","globals":"^15.9.0","prettier":"^3.3.3","@eslint/js":"^9.11.0","release-it":"^17.6.0","lint-staged":"^15.2.10","@faker-js/faker":"^9.0.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@release-it/conventional-changelog":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.7_1727117408590_0.13325035266296092","host":"s3://npm-registry-packages"}},"0.9.8":{"name":"@cambusa/core","version":"0.9.8","license":"MIT","type":"module","main":"src/index.js","exports":{".":"./src/index.js"},"engines":{"bun":">=1.1.28"},"scripts":{"start":"bun run app.js","dev":"bun run --watch app.js","release":"release-it","lint":"eslint .","lint:fix":"eslint --fix .","format":"prettier --write ."},"dependencies":{"@elysiajs/cors":"^1.1.1","@elysiajs/swagger":"^1.1.1","boolean":"^3.2.0","commander":"^12.1.0","dotenv":"^16.4.5","elysia":"latest","lodash":"^4.17.21","minimist":"^1.2.8","pino":"^9.4.0","pino-pretty":"^11.2.2","pluralize":"^8.0.0","sqlite3":"^5.1.7","typeorm":"^0.3.20"},"devDependencies":{"@eslint/js":"^9.11.0","@faker-js/faker":"^9.0.1","@release-it/conventional-changelog":"^8.0.2","eslint":"^9.11.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","globals":"^15.9.0","husky":"^9.1.6","lint-staged":"^15.2.10","prettier":"^3.3.3","release-it":"^17.6.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.js":["eslint --fix","prettier --write"]},"repository":{"type":"git","url":"git+https://github.com/cambusaHQ/core.git"},"homepage":"https://github.com/cambusaHQ/core","keywords":["backend","framework","bun","api","rest","database","orm","server","web","websockets","application"],"_id":"@cambusa/core@0.9.8","gitHead":"55bb805248f4feb490595f22069205d1b03abd49","description":"<p align=\"center\">   <img width=\"150\" height=\"150\" src=\"https://github.com/user-attachments/assets/11d40fd1-69b3-4b95-ac0b-065b45395204\" /> </p>","bugs":{"url":"https://github.com/cambusaHQ/core/issues"},"_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-MdB+8pi61Yu3LV4R1oqZDvdF9w/7FoLNvjh+PWVb6bncR9OQS5UnX1jfFu7DdwySkwcGj4EcFT8sx+zfe9yFPw==","shasum":"289603ca45a7887c3d12b3e100b43952e5a234fa","tarball":"https://registry.npmjs.org/@cambusa/core/-/core-0.9.8.tgz","fileCount":21,"unpackedSize":76156,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwhxRfYPtbq200ilBgi3ElJxvpr4xsRdgwuj3RpAF1zAiEAuV4G2H6ynuzv0IdHqG5HLHc6JG98qNhIJ2DIQinSjD8="}]},"_npmUser":{"name":"enricodeleo","email":"hello@enricodeleo.com"},"directories":{},"maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.8_1727657679464_0.5523143647821014"},"_hasShrinkwrap":false}},"time":{"created":"2024-09-22T20:40:38.564Z","modified":"2024-09-30T00:54:39.865Z","0.8.0":"2024-09-22T20:40:38.888Z","0.9.0":"2024-09-22T20:57:41.646Z","0.9.1":"2024-09-22T22:07:07.393Z","0.9.2":"2024-09-22T22:40:23.941Z","0.9.3":"2024-09-22T22:43:40.782Z","0.9.4":"2024-09-22T22:53:21.817Z","0.9.5":"2024-09-22T23:00:43.490Z","0.9.6":"2024-09-23T18:40:18.447Z","0.9.7":"2024-09-23T18:50:08.765Z","0.9.8":"2024-09-30T00:54:39.690Z"},"license":"MIT","description":"<p align=\"center\">   <img width=\"150\" height=\"150\" src=\"https://github.com/user-attachments/assets/11d40fd1-69b3-4b95-ac0b-065b45395204\" /> </p>","maintainers":[{"name":"enricodeleo","email":"hello@enricodeleo.com"}],"readme":"<p align=\"center\">\n  <img width=\"150\" height=\"150\" src=\"https://github.com/user-attachments/assets/11d40fd1-69b3-4b95-ac0b-065b45395204\" />\n</p>\n\n# Cambusa\n\n🚣 A modern, high-performance web framework built with Bun and modern JavaScript.\n\n## Table of Contents\n\n- [Introduction](#introduction)\n- [Why Cambusa?](#why-cambusa)\n- [Features](#features)\n- [Getting Started](#getting-started)\n- [Configuration](#configuration)\n- [The `cambusa` Global Object](#the-cambusa-global-object)\n- [Creating Routes and Controllers](#creating-routes-and-controllers)\n- [Blueprints: Automatic CRUD Routes for Models](#blueprints-automatic-crud-routes-for-models)\n- [WebSocket](#websocket)\n- [Middleware System](#middleware-system)\n- [Helpers](#helpers)\n- [Models](#models)\n- [Swagger documentation](#swagger-documentation)\n- [Logging](#logging)\n- [Hooks](#hooks)\n- [CLI](#cli)\n- [Philosophy](#philosophy)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Introduction\n\nCambusa is a web framework designed to provide a comfortable developer experience with modern JavaScript syntax and enhanced performance using Bun as the runtime. Inspired by Sails.js, if you want to build applications using the latest JavaScript features while enjoying better performance, **Cambusa** is the framework for you.\n\n## Why Cambusa?\n\nIn Italian, cambusa means \"ship's pantry\" or \"galley\"—the place where provisions are stored on a vessel. Just like a cambusa supplies sailors with essential provisions for their journey, this framework aims to supply developers with the essential tools and conventions needed for building scalable and efficient applications.\n\nThe name reflects my modest approach to web development, inspired by Sails.js but streamlined for modern development practices.\n\n## Features\n\n- Sails.js-Inspired Conventions: Familiar MVC structure, blueprints, and configuration patterns.\n- Modern JavaScript Syntax: Utilize the latest ES modules, async/await, and other modern language features.\n- Powered by Bun: Experience significantly faster performance with Bun's high-speed runtime and bundler.\n- Flexible Configuration: Manage settings via config files, environment variables, or command-line arguments.\n- Automatic Routing: Define routes in configuration files that map directly to controller actions.\n- Modular Architecture: Organize your codebase with a clear structure for controllers, services, and utilities.\n- WebSocket Support: Easily integrate WebSocket functionality for real-time communication.\n\n## Getting Started\n\n### Prerequisites\n\n- Bun: Make sure you have Bun installed ([installation Guide](https://bun.sh/docs/installation)).\n\n### Installation\n\n```bash\n# Clone the repository (assuming Cambusa is hosted on GitHub)\ngit clone https://github.com/cambusaHQ/core.git\ncd cambusa\n\n# Install dependencies\nbun install\n```\n\n### Project Structure\n```bash\ncambusa-app/\n├── api\n│   ├── controllers\n│   ├── helpers\n│   ├── hooks\n│   ├── middlewares\n│   └── models\n├── app.js\n├── config\n│   ├── database.js\n│   ├── index.js\n│   ├── logger.js\n│   ├── middlewares.js\n│   ├── routes.js\n│   ├── security.js\n│   ├── server.js\n│   └── swagger.js\n```\n\n### Run\n\n```bash\nbun run app.js\n```\n\n## Configuration\n\nCambusa uses a flexible configuration system. Configurations are split into files within the `config/` directory, allowing you to manage settings for different aspects of your application.\n\nCambusa automatically supports **environment variables** and **command line arguments**, blending them into configuration properties.\n\nFor detailed information on configuration options and best practices, see the [Configuration Guide](./docs/CONFIGURATION.md).\n\n## The `cambusa` Global Object\n\nThe `cambusa` global object is a central part of the Cambusa framework, providing access to various components and utilities throughout your application.\n\n### Key Properties and Methods\n\n- `cambusa.config`: Contains all configuration settings for your application.\n- `cambusa.app`: The main Elysia application instance.\n- `cambusa.log`: The Pino logger instance for logging.\n- `cambusa.db`: The TypeORM DataSource instance for database operations.\n- `cambusa.models`: Holding all the defined models for direct operations.\n- `cambusa.helpers`: Contains all loaded helper functions.\n\nExample Usage:\n\n```js\n// Accessing configuration\nconst serverPort = cambusa.config.server.port;\n\n// Logging\ncambusa.log.info('Application started');\n\n// Database\nawait cambusa.db.synchronize();\n\n// Models operations\nconst users = await cambusa.models.User.find();\n\n// Using a helper\nconst formattedDate = cambusa.helpers.formatDate(new Date());\n```\n\nThe `cambusa` object is automatically available in your controllers, models, and other parts of your application, allowing easy access to core functionalities without the need for manual imports.\n\n## Creating Routes and Controllers\n\n### Defining Routes\n\nYou can define your application's custom routes in `config/routes.js`, where you map HTTP methods and paths to controller actions. These routes are manually defined and give you fine-grained control over the behavior of your API.\n\n**Example** `config/routes.js`:\n\n```js\nexport default {\n  routes: {\n    'GET /users': 'users/read',\n    'DELETE /users/:id': 'users/delete',\n  },\n};\n```\n\n### Creating Controllers\n\nControllers handle the business logic for your routes. These should be placed in the `api/controllers/` directory and correspond to the actions defined in your `config/routes.js`.\n\n**Example** `api/controllers/users/read.js`:\n\n```js\nexport async function getUsers({ request, response }) {\n  // Your logic to retrieve users\n  return [\n    { id: 1, name: 'Alice' },\n    { id: 2, name: 'Bob' },\n  ];\n}\n```\n\n## Blueprints: Automatic CRUD Routes for Models\n\nIn addition to defining custom routes, Cambusa provides blueprints, which automatically generate RESTful CRUD routes based on your model definitions. This saves you time and effort by automating the creation of common operations like **create**, **read**, **update**, and **delete** for your database models.\n\n### How Blueprints Work\n\nBlueprints are auto-generated routes that are created based on the model definitions in your `api/models/` directory. These routes are automatically registered when the server starts, following a standard RESTful pattern:\n\n- **POST** `/modelName` – Create a new record.\n- **GET** `/modelName` – Retrieve all records.\n- **GET** `/modelName/:id` – Retrieve a specific record by ID.\n- **PUT** `/modelName/:id` – Update a specific record by ID.\n- **DELETE** `/modelName/:id` – Delete a specific record by ID.\n\n### Example of Blueprints in Action\n\nFor a model defined in `api/models/User.js`:\n\n```js\nimport { t } from 'elysia';\n\nexport const User = {\n  routes: {\n    basePath: 'users', // Custom base path for this model\n    disabled: ['delete'], // Disable the DELETE route\n  },\n  columns: {\n    firstName: {\n      type: 'string',\n      nullable: true,\n    },\n    lastName: {\n      type: 'string',\n      nullable: true,\n    },\n    email: {\n      type: 'string',\n      unique: true,\n      validation: t.String({ format: 'email' }),\n    },\n  },\n};\n\nexport default User;\n```\n\nThe following routes will be automatically generated:\n\n- `POST` `/users` – Create a new user.\n- `GET` `/users` – Retrieve all users.\n- `GET` `/users/:id` – Retrieve a user by ID.\n- `PUT` `/users/:id` – Update a user by ID.\n- `DELETE` route is **disabled** for this model as specified in the `disabled` property.\n\n### Disabling and Customizing Routes\n\nYou can easily customize or disable specific routes for each model by defining the routes property in the model:\n\n- **Disable All Routes**: Set `disabled: true` to disable all auto-generated routes for a model.\n- **Disable Specific Routes**: You can disable individual routes by specifying an array of routes to disable (`create`, `readAll`, `readOne`, `update`, `delete`).\n\n**Example**:\n\n```js\nexport const Product = {\n  routes: {\n    disabled: ['delete', 'update'], // Disable DELETE and UPDATE routes\n    basePath: 'products', // Custom base path for this model\n  },\n  columns: {\n    name: { type: 'varchar' },\n    price: { type: 'decimal' },\n  },\n};\n\nexport default Product;\n```\n\nThis will generate routes for **POST**, **GET (all)**, and **GET (by ID)**, but not for **DELETE** or **UPDATE**.\n\n### How to Use Blueprints\n\nBlueprints are loaded automatically during the server startup process. Cambusa will scan your model definitions and create the corresponding CRUD routes based on the routes configuration in each model. This allows you to focus on writing the business logic for more complex or custom routes while letting Cambusa handle the basic CRUD operations.\n\n### Handling Route Collisions\n\nIn cases where a route is defined both in your custom `config/routes.js` and is automatically generated by the blueprint system, **the user-defined route will take precedence** over the blueprint route. This allows you to override or extend the behavior of auto-generated routes with custom logic.\n\nFor example, if you define a custom `GET /users/:id` route in `config/routes.js`, it will override the blueprint route for that path, allowing you to fully control the behavior of that route.\n\n### Query Parameters for Blueprints\n\nBlueprints support several query parameters that allow developers to paginate, filter, and sort the returned data in `GET` requests.\n\n#### Pagination\n\n- `limit`: Specifies the maximum number of results to return per page (default is `20`).\n- `skip`: Specifies the number of records to skip from the beginning (used for pagination).\n\n**Example**:\n\n```bash\nGET /users?limit=10&skip=20\n```\n\nThis will return 10 users starting from the 21st user.\n\n**Pagination Headers:** The response will include the following pagination-related headers:\n\n- `X-Pagination-Total-Count`: Total number of records for the current query.\n- `X-Pagination-Page-Count`: Total number of pages based on the query.\n- `X-Pagination-Limit`: The `limit` used in the query.\n- `X-Pagination-Page`: The current page number.\n\n#### Sorting\n\n`sort`: Allows sorting by one or more fields. You can specify the field and the direction (`asc` for ascending or `desc` for descending) using the format `field:direction`.\n\n**Example**:\n\n```bash\nGET /users?sort=firstName:asc,lastName:desc\n```\n\n#### Filtering\n\n`where`: Allows filtering based on specific conditions. The `where` parameter should be provided as a JSON string that matches TypeORM's `find()` method syntax.\n\n**Example**:\n\n```bash\nGET /users?where={\"isActive\":true,\"age\":30}\n```\n\nThis will return all active users who are 30 years old.\n\n#### Population of Related Data\n\n`populate`: Allows fetching related data by specifying relations to include. Multiple relations can be specified, separated by commas.\n\n```bash\nGET /users?populate=orders,profile\n```\n\n## WebSocket\n\nCambusa uses a WebSocket handler to manage WebSocket connections and messages. It now supports real-time entity updates through subscriptions.\n\n[🔗 WebSocket documentation](./docs/WEBSOCKET.md)\n\n## Middleware System\n\nCambusa uses a flexible middleware system that allows you to easily add functionality to your application's request/response cycle.\n\n### Configuring Middlewares\n\nMiddlewares are configured in your application's configuration files. You can specify the order in which middlewares should be applied:\n\n```js\n// config/middlewares.js\nexport default {\n  middlewares: ['cors', 'requestLogger', 'swagger'],\n};\n```\n\n### Creating Custom Middlewares\n\nTo create a custom middleware, add a new file in the api/middlewares/ directory. Each middleware should export a default function that returns an Elysia plugin.\n\n**Example** `api/middlewares/cors.js`\n\n```js\n// Cors support\nimport { Elysia } from 'elysia';\nimport { cors } from '@elysiajs/cors';\n\nconst plugin = new Elysia({\n  name: 'cors',\n}).use(cors(cambusa.config.security.cors));\n\nexport default plugin;\n```\n\nCambusa will automatically load and apply middlewares based on the order specified in your configuration.\n\n## Helpers\n\nHelpers in Cambusa are utility functions that can be used across your application. They are automatically loaded and made available globally.\n\n### Creating Helpers\n\nTo create a helper, add a new file in the `api/helpers/` directory. Each helper should export a default function.\n\n**Example** `api/helpers/formatDate.js`\n\n```js\nexport default function (date) {\n  return date.toISOString().split('T')[0];\n}\n```\n\n### Using Helpers\n\nHelpers are available globally through the `cambusa.helpers` object:\n\n```js\nconst formattedDate = cambusa.helpers.formatDate(new Date());\n```\n\n## Models\n\nModels in `api/models/` will automatically be available as `cambusa.models.ModelName`, for example `User` model will be available as `cambusa.models.User`.\n\nCambusa uses **TypeORM** and you can configure the database used (e.g., PostgreSQL, MySQL, MariaDB, SQLite) by updating the `config/datastore.js`.\n\n[🔗 Database and Models documentation](./docs/DATABASE.md)\n\n## Swagger documentation\n\nCambusa dynamically generates a swagger api documentation at `/swagger` if enabled in config.\n\n## Logging\n\nCambusa uses [Pino](https://github.com/pinojs/pino) for fast, structured logging. The logger is available globally as cambusa.log, and its configuration can be customized per environment.\n\n### Log Levels\n\nThe log level can be configured in the `logger` section of your configuration files. For example:\n\n```js\n// config/logger.js\nexport default {\n  logger: {\n    level: 'info', // Default log level\n    logRequests: true, // Log requests by default\n  },\n};\n```\n\nIn development, logs are prettified for better readability, while in production, logs are structured JSON for performance and better integration with logging systems.\n\n### Request Logging\n\nYou can enable or disable logging of each incoming HTTP request. When enabled, each request will be logged with the HTTP method, URL, response status, and duration.\n\nTo disable request logging (e.g., in production):\n\n```js\nexport default {\n  logger: {\n    logRequests: false,\n  },\n};\n```\n\n### Usage\n\nThe logger can be accessed globally via `cambusa.log`:\n\n```js\ncambusa.log.info('Server is starting...');\ncambusa.log.error('An error occurred', err);\n```\n\n## Hooks\n\nCambusa's hook system provides a powerful and flexible way to extend and customize your application. By leveraging hooks, you can inject custom logic at various stages of the application lifecycle without modifying the core framework code.\n\n[🔗 Hooks documentation](./docs/HOOKS.md)\n\n## CLI\n\nCambusa provides a powerful [CLI tool](./docs/CLI.md) to streamline development tasks and manage your application efficiently. The CLI supports a variety of commands, including generating models and controllers, synchronizing the database, running custom scripts, and more.\n\n### Key Features\n\n- **Model and Controller Generation:** Quickly scaffold new models and controllers with predefined templates.\n- **Database Synchronization:** Easily synchronize your database schema based on your models.\n- **Script Execution:** Run custom scripts organized within subdirectories to perform tasks like migrations, data processing, and more.\n- **Interactive REPL Session:** Start an interactive session to interact directly with your Cambusa application.\n\nFor detailed instructions on all available commands, usage examples, and advanced features, please refer to the\n\n[🔗 CLI documentation](./docs/CLI.md)\n\n## Philosophy\n\n**Cambusa** is born out of a deep appreciation for Sails.js and its developer-friendly conventions. The goal is to replicate that enjoyable development experience using modern JavaScript features and harnessing the performance benefits of Bun. By adopting a modest and essentialist approach—just like a ship's cambusa—we focus on providing only what's necessary to build robust applications without unnecessary complexity.\n\n## Contributing\n\nContributions are welcome! Feel free to open issues or submit pull requests to help improve Cambusa.\n\n## License\n\nMIT License\n\n## Author\n\n[Enrico Deleo](https://enricodeleo.com/)\n\n","readmeFilename":"README.md","homepage":"https://github.com/cambusaHQ/core","keywords":["backend","framework","bun","api","rest","database","orm","server","web","websockets","application"],"repository":{"type":"git","url":"git+https://github.com/cambusaHQ/core.git"},"bugs":{"url":"https://github.com/cambusaHQ/core/issues"}}