{"_id":"@danylohotvianskyi/bobra-framework","_rev":"27-ec9fd6c432740ba02d4670178c26d50b","name":"@danylohotvianskyi/bobra-framework","dist-tags":{"latest":"0.7.1"},"versions":{"0.1.2":{"name":"@danylohotvianskyi/bobra-framework","version":"0.1.2","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.1.2","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"e8fdf0d64a21edfca51fb94701bc9e3da876b1b6","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.1.2.tgz","fileCount":141,"integrity":"sha512-KNcmhgI6cE1M/TzQ1gBSK5lFUkQgyP6qQxpzpgqgJJSppy0Xgs+dKtQHnuaeGCo8GcKgQV58HYKNufmwF57iwA==","signatures":[{"sig":"MEYCIQDX8pIb5mciAfrGB6VLwRhsRcziHjS86STgme3kBtt3pwIhAMIo5hNtbeLETvOhqWzxENtnPGHM8SXXyXzwabbSnlQD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":554206},"main":"./index.ts","_from":"file:danylohotvianskyi-bobra-framework-0.1.2.tgz","types":"./index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/a2461a52079bfbf8e2c29238ffd916e2/danylohotvianskyi-bobra-framework-0.1.2.tgz","_integrity":"sha512-KNcmhgI6cE1M/TzQ1gBSK5lFUkQgyP6qQxpzpgqgJJSppy0Xgs+dKtQHnuaeGCo8GcKgQV58HYKNufmwF57iwA==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20240925.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.2","typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.1.2_1772809779384_0.4534244408689694","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@danylohotvianskyi/bobra-framework","version":"0.1.3","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.1.3","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"125b084af421bb5b46856b04f9b6a49dea2f204d","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.1.3.tgz","fileCount":141,"integrity":"sha512-sDSrhtmNqv6Cbrlc5rULm0GqkMUQiHogrZbOf+P8QmwYHkYDNIDPUJdbIG5w/C0MDldJBoyW/otCEBGb0VWMng==","signatures":[{"sig":"MEUCIDckAjRMa20WRr8e8UCd4lX3SAOn7DFJBi3n1Ym5PYR/AiEAu9tV4oHJHtcXuK8mT2I6/jU8unhBu16YWRCvqHNKqpg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":554869},"main":"./index.ts","_from":"file:danylohotvianskyi-bobra-framework-0.1.3.tgz","types":"./index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/92a99b3849ca876a56dc144083ab84b9/danylohotvianskyi-bobra-framework-0.1.3.tgz","_integrity":"sha512-sDSrhtmNqv6Cbrlc5rULm0GqkMUQiHogrZbOf+P8QmwYHkYDNIDPUJdbIG5w/C0MDldJBoyW/otCEBGb0VWMng==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20240925.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.2","typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.1.3_1772812167509_0.022762501941542945","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@danylohotvianskyi/bobra-framework","version":"0.1.5","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.1.5","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"6f41c4a1a104c789d46feae67eac6a009e689b40","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.1.5.tgz","fileCount":141,"integrity":"sha512-eHc6jPPt8vbQbA6+ulopmi0tPrEDk5QosfCC01X0SAnWucGcXWXFkxb1PYL8wOMc2QZSEDwWnrUkK9TAKjd7kA==","signatures":[{"sig":"MEYCIQDRLYviBze+i2QRaksp1sl8Uul1A9J63EjQ8jJKU2V01QIhAKBqenX+JksJUPlKEHZ6VSxp4x7QspBoVjPnPUpfUduz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586621},"main":"./index.ts","_from":"file:danylohotvianskyi-bobra-framework-0.1.5.tgz","types":"./index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/389e74f86f95df8276a41484e88bc115/danylohotvianskyi-bobra-framework-0.1.5.tgz","_integrity":"sha512-eHc6jPPt8vbQbA6+ulopmi0tPrEDk5QosfCC01X0SAnWucGcXWXFkxb1PYL8wOMc2QZSEDwWnrUkK9TAKjd7kA==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.1.5_1772972966261_0.643923716977193","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@danylohotvianskyi/bobra-framework","version":"0.1.6","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.1.6","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"9215e684831829ce7a279ce71656a099a6bc88b8","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.1.6.tgz","fileCount":132,"integrity":"sha512-uqfrgOUaW8SU2Bpc41p27HyJD5pnMNiqwzoDmTJNtjgrLY48YArA5IqZ05VhWfze990sGGwliiv4RULNBrOEgw==","signatures":[{"sig":"MEYCIQDCAEMpNyXXTSJI2BEQ0nVClqM53G2NO2BPRaoad2fHvAIhAIcA5X+KG0UYItirb8pAJKoCwY8qjp7B5712udphpVSZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":550161},"main":"./index.ts","types":"./index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"gitHead":"e60996e3c329267ca90a4c2ae7e02058149acba0","scripts":{"build":"tsc","prepack":"pnpm run build","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.13.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.1.6_1773407464831_0.5945296764988293","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@danylohotvianskyi/bobra-framework","version":"0.1.7","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.1.7","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"f99b9483f84d16bea391c9cc91beecec609e9f9d","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.1.7.tgz","fileCount":141,"integrity":"sha512-6y9RYbbgwI/SOjx35F8Gj1pnbZlU1SxRX+m3icrShEE+YiLx5ye1SAq5ISIrnDY13o6WpH5Iu/jCC0a/KwzFgg==","signatures":[{"sig":"MEYCIQC6YZeYqoDR2AaBiaT7ZOHKWwtNoO9MSOcPzuQ93ISBowIhANv8D/5cf7oEiWljp1MDVHCIadNr8c2H8Lw7u6cL+m9n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":589184},"main":"./index.ts","_from":"file:danylohotvianskyi-bobra-framework-0.1.7.tgz","types":"./index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/af46c0d81f34153e211bbb76a7bda4e7/danylohotvianskyi-bobra-framework-0.1.7.tgz","_integrity":"sha512-6y9RYbbgwI/SOjx35F8Gj1pnbZlU1SxRX+m3icrShEE+YiLx5ye1SAq5ISIrnDY13o6WpH5Iu/jCC0a/KwzFgg==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.1.7_1775074372915_0.554919630695764","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@danylohotvianskyi/bobra-framework","version":"0.1.8","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.1.8","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"f6bd838aecf75df8e2f8b79c2036e0e8156be72a","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.1.8.tgz","fileCount":141,"integrity":"sha512-kctsxxbLeXhgEw5MhXvL/7zXk/bNXUDMWDefZZc2ySz8vf0Q+fcTRuy8XA7bAX3xloQ+hZgeyi+va+iPG8gHrg==","signatures":[{"sig":"MEUCIQCNrz19DOsyh3Os6l1T0fLaJ1Q1fn1I7PlqKtfCYKg+2wIgZroY62Q6jeFpdez4OdsX78vQTaH1bgrZdayqXel58Es=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":595756},"main":"./index.ts","_from":"file:danylohotvianskyi-bobra-framework-0.1.8.tgz","types":"./index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/6b7f81c3e60b29acce184de27bcd335a/danylohotvianskyi-bobra-framework-0.1.8.tgz","_integrity":"sha512-kctsxxbLeXhgEw5MhXvL/7zXk/bNXUDMWDefZZc2ySz8vf0Q+fcTRuy8XA7bAX3xloQ+hZgeyi+va+iPG8gHrg==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.1.8_1775494465475_0.7161161031468108","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@danylohotvianskyi/bobra-framework","version":"0.1.9","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.1.9","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"01556f8b73b91993b96653cd879152c30169fc8a","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.1.9.tgz","fileCount":141,"integrity":"sha512-rOzPT22fwhOwhjgI+slLq7buFZpI5VXpgjQ94k+YpkZRcq3tLdKZPpDGXtGZIbC12vIBlDpj7DK3lagiQWtWtw==","signatures":[{"sig":"MEQCIBD45QUkQIN3yJpjBIQ8fUuozvRQc/7NxryztcMjiVMWAiAMXB0lBVgMjE42nGJKqU8OwsTQrAbYWwG+kL7kCCpQBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":615851},"main":"./index.ts","_from":"file:danylohotvianskyi-bobra-framework-0.1.9.tgz","types":"./index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/967d7ecdfeccfe94899c295678e3988f/danylohotvianskyi-bobra-framework-0.1.9.tgz","_integrity":"sha512-rOzPT22fwhOwhjgI+slLq7buFZpI5VXpgjQ94k+YpkZRcq3tLdKZPpDGXtGZIbC12vIBlDpj7DK3lagiQWtWtw==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.1.9_1775514291784_0.35830511289895006","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@danylohotvianskyi/bobra-framework","version":"0.2.0","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.2.0","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"72ad60bb705dfa6dad79165f8e93e71ad45bf645","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.2.0.tgz","fileCount":162,"integrity":"sha512-WZJQe8wXt1xuZDStGXSSI6BPJhos8i8A45jhxKUui2IZf6ASXDWMYYwj95ME7PELvww+SE9tU8RHoEmpgZcBrw==","signatures":[{"sig":"MEUCIQCklW+TuQe1abhotm737braDogbMAy1mg6tsxOw+AJDwAIgJv7D+Zo3rcXYqtsYRwN2o/OON+Dht1F9G2f5Tn+dP2Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":708965},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/206c8918c4f82274a22f86e53721320f/danylohotvianskyi-bobra-framework-0.2.0.tgz","_integrity":"sha512-WZJQe8wXt1xuZDStGXSSI6BPJhos8i8A45jhxKUui2IZf6ASXDWMYYwj95ME7PELvww+SE9tU8RHoEmpgZcBrw==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","openapi-types":"^12.1.3","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.5","typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.2.0_1778117201596_0.829945383867208","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@danylohotvianskyi/bobra-framework","version":"0.2.1","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.2.1","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"be227ba178d7069caefcfc6ce88e16b4b2d40ddf","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.2.1.tgz","fileCount":162,"integrity":"sha512-npn6wzAaoO47ifW4O02hG0aVuRvaD8qX+FXQFAQGNhuB9zwEYEk2DN6IKHhL9Vc4tpY1v7jizFui9862UvGxYg==","signatures":[{"sig":"MEUCIDPyORxRNllMr+5fLPih+dcWwVNsA0uIREp27IyIGr2UAiEA3GM2+DeUayxMnKJnqPz23pYppUkUFjHeX/cY68g+CIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":712482},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.2.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/d5741d40ff0ae9c9dbbaaa545dc9fa29/danylohotvianskyi-bobra-framework-0.2.1.tgz","_integrity":"sha512-npn6wzAaoO47ifW4O02hG0aVuRvaD8qX+FXQFAQGNhuB9zwEYEk2DN6IKHhL9Vc4tpY1v7jizFui9862UvGxYg==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","openapi-types":"^12.1.3","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.5","typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.2.1_1778162317495_0.7317143111281006","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@danylohotvianskyi/bobra-framework","version":"0.3.0","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.3.0","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"131d2eee8979f8028ef2645e4259df59b71cbec3","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.3.0.tgz","fileCount":164,"integrity":"sha512-njVOqU6rMTVJLbivEY5l/mb9kXzCiikPv7eVGdBd3oSZvGlRluXFqpkHAWzx9PxSPJJBAsuwhojWSwilFoHqwg==","signatures":[{"sig":"MEYCIQDwTeQNAiPU6mY0P6Jg1Zdny7rkaU0/OGo6iH45KpDRxgIhALk0lrmJj42u6/60/OZcLbQ6f3Z2nH8xG/MoWQqKyxdP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718014},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.3.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/d7324e42913288f1a00bee993f058da7/danylohotvianskyi-bobra-framework-0.3.0.tgz","_integrity":"sha512-njVOqU6rMTVJLbivEY5l/mb9kXzCiikPv7eVGdBd3oSZvGlRluXFqpkHAWzx9PxSPJJBAsuwhojWSwilFoHqwg==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","openapi-types":"^12.1.3","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.5","typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.3.0_1780688529151_0.9325597498684739","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@danylohotvianskyi/bobra-framework","version":"0.4.0","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.4.0","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"3c0a36c49447b51c37093935ad45f77eacb69d80","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.4.0.tgz","fileCount":168,"integrity":"sha512-cRw0H8rhhaJGGclWsSPMEeyqQpEbEHTClaNSUudXJAI5djoa6fqwdROQv2NdNzW5cx8WQ5qwUaRut5N5gaxSMQ==","signatures":[{"sig":"MEUCIQDsjRfLMK2d5IvScAaUObzZAHh01V3xq6QLmMBDpFd+wgIgN3lhgeTE/4fJaI4X6GRsGZZpBqlTo7Dfi61qG+P4G0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":719516},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.4.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/fe360f2f7037032dc77207b9d271def1/danylohotvianskyi-bobra-framework-0.4.0.tgz","_integrity":"sha512-cRw0H8rhhaJGGclWsSPMEeyqQpEbEHTClaNSUudXJAI5djoa6fqwdROQv2NdNzW5cx8WQ5qwUaRut5N5gaxSMQ==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"^4.11.9","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"^1.1.0","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"^0.44.3","hono-openapi":"^0.4.8","openapi-types":"^12.1.3","drizzle-valibot":"^0.4.2","@hono/valibot-validator":"^0.5.2","@valibot/to-json-schema":"^1.3.0","@cloudflare/workers-types":"^4.20260307.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.5","typescript":"^5.6.0","@types/node":"^20.19.4","drizzle-kit":"^0.31.4","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.4.0_1780951142314_0.5399957967068703","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@danylohotvianskyi/bobra-framework","version":"0.4.1","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.4.1","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"d5b69df31b5510d39bd77166c8ce908a6642e749","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.4.1.tgz","fileCount":168,"integrity":"sha512-b0tCthIxG36R4KIRku/PNHoeayiyTXtmKgbmFxuvr5MTjCspa0f9bmXg7WTlXg0C0tHuuUXZFCriqdLS8f5EMA==","signatures":[{"sig":"MEYCIQCTNe6DRW5/gAETS8oHpyvyWMeRCgWyxyBkDXVtHNACHwIhAPeGOz1pR0btz6rtxvrxbSxlz/d8mARfPCC2vjkLNV2U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":719846},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/a7c4c8ebc91fc033b7794b5734e94946/danylohotvianskyi-bobra-framework-0.4.1.tgz","_integrity":"sha512-b0tCthIxG36R4KIRku/PNHoeayiyTXtmKgbmFxuvr5MTjCspa0f9bmXg7WTlXg0C0tHuuUXZFCriqdLS8f5EMA==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.4.1_1781212122176_0.7081397319342266","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@danylohotvianskyi/bobra-framework","version":"0.4.2","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.4.2","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"2280ba4c638d2b2450b92b36d059c2584d493ecd","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.4.2.tgz","fileCount":168,"integrity":"sha512-tv9yqakbxcMrUQ+FFjdA6HVsAoCGtwI3NsvE19dcoqEyUnrDIdVr5hq0rsie4oVqReskRxKrPV3tqnjemKDSMQ==","signatures":[{"sig":"MEUCIQDXHZvEpu0eDlmiB0HCdiggynx1H7ILgxnu3R9hFf1w+QIgKAH/mYSSjM5rRQQ21gBx+y4c8kO6XdrdEW2RzzX17s8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":723124},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.4.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/444dbdb646e438a6996d5a203f39be65/danylohotvianskyi-bobra-framework-0.4.2.tgz","_integrity":"sha512-tv9yqakbxcMrUQ+FFjdA6HVsAoCGtwI3NsvE19dcoqEyUnrDIdVr5hq0rsie4oVqReskRxKrPV3tqnjemKDSMQ==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.4.2_1781961205891_0.24407583012812917","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@danylohotvianskyi/bobra-framework","version":"0.4.3","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.4.3","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"d01dd733ab326c3e13ecd659cdd56ce8d727d903","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.4.3.tgz","fileCount":168,"integrity":"sha512-JQCptRUg67koJtpNOrRCVdKFtNNfBuIby2mw3rUx8oi+nY1rk2d7JBDWjvTCNmf0zXRmi8W6F815S47yxpzLdQ==","signatures":[{"sig":"MEQCIBLey8q3r370xhWh3QPyMGhVDsM7dLM8i8+n7VSTuQinAiA+z8gwLk1IfAU4RWthW5IMnQoXausOJrzfp2Uk778o3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":723475},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.4.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/e8dce93bee732ed74b8713a07bc36f4c/danylohotvianskyi-bobra-framework-0.4.3.tgz","_integrity":"sha512-JQCptRUg67koJtpNOrRCVdKFtNNfBuIby2mw3rUx8oi+nY1rk2d7JBDWjvTCNmf0zXRmi8W6F815S47yxpzLdQ==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.4.3_1782418954853_0.7739469018918652","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@danylohotvianskyi/bobra-framework","version":"0.5.0","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.5.0","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"e0d2611c95f26e797968fe36fb4b372396e767e1","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.5.0.tgz","fileCount":168,"integrity":"sha512-3GKbEA9YhgdFubrFE0uL3rBZcYfoIQ49IFgu5qzks/VoYOTTgmGUMY345XnopRbV9GHqNhtJrEbXk0mL07daow==","signatures":[{"sig":"MEQCIGTuSrLCcrB+1yKlireI72uX6PuRfavYkyBg2BnNzqatAiBB0CgWl54tfcOcriP0il6t6uL/cpz8Z5FJSkzWxm1oBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":743193},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/010ce31c7c319e07d1ab5463d6c99274/danylohotvianskyi-bobra-framework-0.5.0.tgz","_integrity":"sha512-3GKbEA9YhgdFubrFE0uL3rBZcYfoIQ49IFgu5qzks/VoYOTTgmGUMY345XnopRbV9GHqNhtJrEbXk0mL07daow==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.5.0_1782591361701_0.12440682726649333","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@danylohotvianskyi/bobra-framework","version":"0.5.1","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.5.1","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"2a368f2047b2d2d175976846120aa74bb13252f2","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.5.1.tgz","fileCount":169,"integrity":"sha512-y0QJmRNFnQiUTVm3L69jsAWjQ3ukfHwDuE2Gj4Et+Ytea3nwC3Aluc1degVToR6gqplnfl1V1IB05e7niUy/wg==","signatures":[{"sig":"MEQCIAQZJ05S/6s+nU2Pntrl0iePi2PANt5cTD9xctO57jJ9AiAcJv941pdgyOz32tuHsy5ZjvAtH0OM+mbVmVpuV+7cNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":748043},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.5.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/e92a421f4f449d4b0a696f7afedadf56/danylohotvianskyi-bobra-framework-0.5.1.tgz","_integrity":"sha512-y0QJmRNFnQiUTVm3L69jsAWjQ3ukfHwDuE2Gj4Et+Ytea3nwC3Aluc1degVToR6gqplnfl1V1IB05e7niUy/wg==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.5.1_1782684722587_0.7025402414256181","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@danylohotvianskyi/bobra-framework","version":"0.6.0","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.6.0","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"ebfb99c0f4eb12562fc91984ca97ef851bdadb85","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.6.0.tgz","fileCount":177,"integrity":"sha512-rZYc59Fs3DiySuds5IgTqkx9jqwkRH1dXs6a2By20tXJ+eV0QcC6wztImN0WuVz7tSB0FEruUyZAAcC4FavyfQ==","signatures":[{"sig":"MEUCIQD8Jm0t7+HwjOUW1la4AgpPBq9kmwWRPQ9xlpr1v4pDywIgFOJjoUyN/XGBRpeCHz9L84TZtrv3zy8e10R6rB3ROIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":841854},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.6.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/metrics":{"types":"./dist/batteries/metrics/index.d.ts","default":"./dist/batteries/metrics/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/9d6082e9dd78383f25c5bb512c695e06/danylohotvianskyi-bobra-framework-0.6.0.tgz","_integrity":"sha512-rZYc59Fs3DiySuds5IgTqkx9jqwkRH1dXs6a2By20tXJ+eV0QcC6wztImN0WuVz7tSB0FEruUyZAAcC4FavyfQ==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@hono/standard-validator":"^0.2.0","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.6.0_1788093209871_0.17348201145319053","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@danylohotvianskyi/bobra-framework","version":"0.6.1","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.6.1","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"763fde9f90f4148b3ddb2e3ec9b1c1f524d79ef2","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.6.1.tgz","fileCount":176,"integrity":"sha512-AhxPhZHOGstbbZU8pvFdLz+KPewu2Jth20b7irCfwkTDCcDZIsXb6rEv16FsUuSU0vgrhENn6yTBHxf9uzXOIQ==","signatures":[{"sig":"MEYCIQCE7c+2o4nnPUkAxkJAso7HSpwm5Yg1i5h3dmQtTla8AQIhAMFmdJUlwQZkmJMcUu3kd0vJaIWWf/XLqVN3XJtKaZCX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":843846},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.6.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/metrics":{"types":"./dist/batteries/metrics/index.d.ts","default":"./dist/batteries/metrics/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/d1bb69805e5a51255397278f344163bc/danylohotvianskyi-bobra-framework-0.6.1.tgz","_integrity":"sha512-AhxPhZHOGstbbZU8pvFdLz+KPewu2Jth20b7irCfwkTDCcDZIsXb6rEv16FsUuSU0vgrhENn6yTBHxf9uzXOIQ==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@hono/standard-validator":"^0.2.0","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.6.1_1788094398041_0.34046680562044873","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@danylohotvianskyi/bobra-framework","version":"0.6.2","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.6.2","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"a015749ef9e0ca808a4419d15ee8b3c76426a5dd","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.6.2.tgz","fileCount":176,"integrity":"sha512-EcBvV+XSPhkOtr2Rbfji/2/q0Cmg19lDcA8yy1k0phnQb32sZfq0LYp8WpLp/oyKa7vC8Laco/FtMIJRRJI+qQ==","signatures":[{"sig":"MEYCIQC2tmJ+N4BrJHNAp0L1ooci2gI1ev0nrVFPkenk/lqOhwIhAP9MIUHjz00J/uU9p4PvRUiqdoOIpHuFw5Fq9V70oI/T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":847223},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.6.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/metrics":{"types":"./dist/batteries/metrics/index.d.ts","default":"./dist/batteries/metrics/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/135e0ff8be018f73d6d2bcda2d64c01d/danylohotvianskyi-bobra-framework-0.6.2.tgz","_integrity":"sha512-EcBvV+XSPhkOtr2Rbfji/2/q0Cmg19lDcA8yy1k0phnQb32sZfq0LYp8WpLp/oyKa7vC8Laco/FtMIJRRJI+qQ==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@hono/standard-validator":"^0.2.0","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.6.2_1788730483238_0.18201905576465127","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@danylohotvianskyi/bobra-framework","version":"0.7.0","author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","_id":"@danylohotvianskyi/bobra-framework@0.7.0","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"homepage":"https://github.com/danilgotvyansky/bobra#readme","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"f13aaf94411fbf28610d63d6febf6c10d59eee8c","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.7.0.tgz","fileCount":176,"integrity":"sha512-TwpXvuGYsKe6Of4feOj17k8E0oRRySyuIPgRluo+H+LsalkY+v/K/grvHFJmQT7Z703sckUzeT+QbCxaeiOrHg==","signatures":[{"sig":"MEYCIQCqmkVytYcQQklAVppL8GAaJ2EtcpMvzrLXrrRpWuVtvAIhAMS716i80Nn4qiLPdc/9Co4GdRHMzXEuP2AB8E/5ONYc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":850771},"main":"./dist/index.js","_from":"file:danylohotvianskyi-bobra-framework-0.7.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/metrics":{"types":"./dist/batteries/metrics/index.d.ts","default":"./dist/batteries/metrics/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"_resolved":"/tmp/a893d0f90554ef681462eabb034227d4/danylohotvianskyi-bobra-framework-0.7.0.tgz","_integrity":"sha512-TwpXvuGYsKe6Of4feOj17k8E0oRRySyuIPgRluo+H+LsalkY+v/K/grvHFJmQT7Z703sckUzeT+QbCxaeiOrHg==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@hono/standard-validator":"^0.2.0","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/bobra-framework_0.7.0_1788730775755_0.6753683115386193","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"_id":"@danylohotvianskyi/bobra-framework@0.7.1","bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"dist":{"shasum":"5285ea968f6b75f7691a94e7c118918f43a3b939","tarball":"https://registry.npmjs.org/@danylohotvianskyi/bobra-framework/-/bobra-framework-0.7.1.tgz","fileCount":176,"integrity":"sha512-4gnADQ7GsDmEB86V8rdd7Dwhld2HIHq2JYhGIbBJJVfHBjyUShEvgJX3GX+xk6YxoPHqxfw8Cs8jSfykFnHXnw==","signatures":[{"sig":"MEQCIGy0P8hlM/Aoln2MJ1R3sxwG+3oqbQBh3NNXK1uv+jH2AiAwxDyCsLbQQLLSYL3Cij5ZjnPnDDV1VaVzmxCeXYhAbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBo+UXjM0p+kaFk6HEj3PL1tkFjuPXQc+ZfhTyvyPsVCAiA0KMF5iJu1cuUAeeplO9mMT2WJmy90Vkry9nSFL8JTTw=="}],"unpackedSize":858262},"main":"./dist/index.js","name":"@danylohotvianskyi/bobra-framework","_from":"file:danylohotvianskyi-bobra-framework-0.7.1.tgz","types":"./dist/index.d.ts","author":{"name":"Danylo Hotvianskyi"},"engines":{"node":">=24 <25"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./db":{"types":"./dist/db/index.d.ts","default":"./dist/db/index.js"},"./core":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"./node":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./network":{"types":"./dist/network/index.d.ts","default":"./dist/network/index.js"},"./db/migrate":{"types":"./dist/db/migrate.d.ts","default":"./dist/db/migrate.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./batteries/auth":{"types":"./dist/batteries/auth/index.d.ts","default":"./dist/batteries/auth/index.js"},"./batteries/search":{"types":"./dist/batteries/search/index.d.ts","default":"./dist/batteries/search/index.js"},"./batteries/metrics":{"types":"./dist/batteries/metrics/index.d.ts","default":"./dist/batteries/metrics/index.js"},"./batteries/openapi":{"types":"./dist/batteries/openapi/index.d.ts","default":"./dist/batteries/openapi/index.js"}},"license":"Apache-2.0","scripts":{"test":"vitest run","build":"tsc","type-check":"tsc --noEmit"},"version":"0.7.1","_npmUser":{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"},"homepage":"https://github.com/danilgotvyansky/bobra#readme","_resolved":"/tmp/58c5e6800d38755461178191936714e0/danylohotvianskyi-bobra-framework-0.7.1.tgz","_integrity":"sha512-4gnADQ7GsDmEB86V8rdd7Dwhld2HIHq2JYhGIbBJJVfHBjyUShEvgJX3GX+xk6YxoPHqxfw8Cs8jSfykFnHXnw==","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"_npmVersion":"11.6.2","description":"Bobra Framework - Generic Cloudflare Workers Framework","directories":{},"maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"_nodeVersion":"24.12.0","dependencies":{"pg":"^8.16.3","hono":"4.12.24","dotenv":"^16.4.1","uuidv7":"^1.2.1","js-yaml":"^4.1.0","ts-node":"^10.9.2","valibot":"1.4.1","postgres":"^3.2.0","@types/pg":"^8.11.2","drizzle-orm":"0.45.2","hono-openapi":"1.3.0","openapi-types":"^12.1.3","drizzle-valibot":"0.4.2","@hono/valibot-validator":"0.6.1","@valibot/to-json-schema":"1.7.1","@hono/standard-validator":"^0.2.0","@cloudflare/workers-types":"4.20260608.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.8","typescript":"6.0.3","@types/node":"^25.9.2","drizzle-kit":"0.31.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bobra-framework_0.7.1_1790791324597_0.538954589217717"}}},"time":{"created":"2026-03-06T13:20:09.947Z","modified":"2026-09-30T18:02:04.878Z","0.1.0":"2026-03-06T13:20:10.240Z","0.1.1":"2026-03-06T14:14:46.851Z","0.1.2":"2026-03-06T15:09:39.540Z","0.1.3":"2026-03-06T15:49:27.654Z","0.1.4":"2026-03-08T02:00:09.945Z","0.1.5":"2026-03-08T12:29:26.404Z","0.1.6":"2026-03-13T13:11:05.002Z","0.1.7":"2026-04-01T20:12:53.185Z","0.1.8":"2026-04-06T16:54:25.702Z","0.1.9":"2026-04-06T22:24:51.981Z","0.2.0":"2026-05-07T01:26:41.748Z","0.2.1":"2026-05-07T13:58:37.722Z","0.3.0":"2026-06-05T19:42:09.328Z","0.4.0":"2026-06-08T20:39:02.533Z","0.4.1":"2026-06-11T21:08:42.357Z","0.4.2":"2026-06-20T13:13:26.123Z","0.4.3":"2026-06-25T20:22:35.112Z","0.5.0":"2026-06-27T20:16:01.850Z","0.5.1":"2026-06-28T22:12:02.732Z","0.6.0":"2026-08-30T12:33:30.016Z","0.6.1":"2026-08-30T12:53:18.182Z","0.6.2":"2026-09-06T21:34:43.395Z","0.7.0":"2026-09-06T21:39:35.893Z","0.7.1":"2026-09-30T18:02:04.718Z"},"bugs":{"url":"https://github.com/danilgotvyansky/bobra/issues"},"author":{"name":"Danylo Hotvianskyi"},"license":"Apache-2.0","homepage":"https://github.com/danilgotvyansky/bobra#readme","repository":{"url":"git+https://github.com/danilgotvyansky/bobra.git","type":"git","directory":"framework"},"description":"Bobra Framework - Generic Cloudflare Workers Framework","maintainers":[{"name":"danylohotvianskyi","email":"danilgotvyansky@gmail.com"}],"readme":"# Bobra Framework\n\nBobra is a full-stack TypeScript, *batteries-included* framework for building modular nanoservices on top of Cloudflare's Workerd runtime and Hono.\n\n## What's included?\n\n- **Modular Handler-Based Design**: Handlers are self-contained modules that encapsulate specific pieces of application logic, such as API endpoints, background processing, or middleware. You can think of them as *plugins* or *packages* that form a worker. Read more in [Handlers](https://github.com/danilgotvyansky/bobra/blob/main/_docs/02-handlers/handlers-guide.md).\n- **Worker/Service Separation**: Workers are runtime units that execute handlers. Services are any external dependencies directly integrated to the app routing.\n- **Globally distributed databases**: Bobra provides an included custom database integration with support of Postgres and [D1](https://developers.cloudflare.com/d1/). To leverage global distribution and amazing Postgres features Bobra uses location-aware routing to your hosted [pgEdge](https://www.pgedge.com/) Postgres databases. Read more in [Database](https://github.com/danilgotvyansky/bobra/blob/main/_docs/05-database/database.md).\n- **Deployment style variety**: This setup allows you to deploy your application both in *Monolithic* and *Microservices* styles. Read more in [Deployment](https://github.com/danilgotvyansky/bobra/blob/main/_docs/07-deployment/deployment.md).\n- **Microfrontends**: Configuration wrapper around Workerd assets handling allows you to serve as many frontend applications as you want in a single worker. Read more in [Microfrontends](https://github.com/danilgotvyansky/bobra/blob/main/_docs/07-deployment/deployment.md#microfrontends).\n- **Event-Driven Processing with Hono**: Bobra uses [Hono](https://hono.dev/) as its HTTP framework, providing a fast, lightweight, and extensible foundation for web applications based on Web Standards.\n- **Router Worker**: A centralized routing component that forwards requests to appropriate workers or external services based on path patterns and service discovery. Read more in [Routing](https://github.com/danilgotvyansky/bobra/blob/main/_docs/03-network/routing.md) and [Service Fetch](https://github.com/danilgotvyansky/bobra/blob/main/_docs/03-network/service-fetch.md).\n- **Service Discovery**: Automatic detection and registration of services, enabling dynamic load balancing and failover. \n- **Bindings Abstraction**: Unified interface for accessing external resources (databases, queues, KV stores) regardless of the underlying implementation. \n- **Configuration-Driven Architecture**: Declarative YAML configuration that defines workers, services, and their relationships providing a **single source of truth for your app** that consists of multiple workers and dependencies sharing the same infrastructure. Read more in [Config](https://github.com/danilgotvyansky/bobra/blob/main/_docs/04-config/config-guide.md)\n- **Flexible and customizable logging**: Bobra provides a powerful logger that supports JSON and text formats, initialization verbosity control, log levels, Request and Response body sanitized logging, etc. Read more in [Logging](https://github.com/danilgotvyansky/bobra/blob/main/_docs/06-logging/logging.md). \n- **Authentication**: Bobra provides an included API token based authentication middleware and CRUD operations for managing API tokens. Read more in [Authentication](https://github.com/danilgotvyansky/bobra/blob/main/_docs/08-authentication/tokens.md).\n- **OpenAPI**: Bobra provides an included OpenAPI generation and validation middleware. Each handler receives its own automatically generated `/openapi` endpoint out-of-the-box and a separate `api-docs-handler` that aggregates all OpenAPI specs from all handlers into a single application OpenAPI spec. Read more in [OpenAPI](https://github.com/danilgotvyansky/bobra/blob/main/_docs/09-openapi/openapi.md).\n- **Search**: Bobra provides an included search implementation based on FTS5 extension for D1 (SQLite) or Postgres built-in full-text search. Read more in [Search](https://github.com/danilgotvyansky/bobra/blob/main/_docs/10-search/search-technical.md).\n\n\n## Directory structure\n\nExample directory structure for Bobra-powered application:\n\n<details>\n<summary>Directory structure</summary>\n\n```\nmy-app/\n.\n├── config.local-example.yml\n├── config.local.yml                            # excluded from vcs \n├── config.yml\n├── frontends\n│   ├── main-app\n│   |    ├── package.json\n│   |    ├── src\n│   |    │   └── ...\n│   |    └── tsconfig.json\n│   └── landing-app\n│        └── ...\n├── handlers\n│   ├── auth-handler\n│   |    ├── package.json\n│   |    ├── src\n│   |    │   ├── db.ts                          # Database functions\n│   |    │   ├── index.ts                       # Handler entry point\n│   |    │   ├── schemas.ts                     # OpenAPI schemas\n│   |    │   ├── service.ts                     # Service functions\n│   |    │   └── types.ts                       # Types\n│   |    └── tsconfig.json\n│   ├── api-docs-handler\n│   |    └── ...\n│   └── users-handler\n│        └── ...\n├── package.json\n├── router\n│   └── router-worker\n│       ├── package.json\n│       ├── src\n│       │   └── index.ts\n│       ├── tsconfig.json\n│       └── wrangler.jsonc\n├── scripts\n│   └── generate-wrangler-config.ts\n├── shared-utils\n│   ├── drizzle.config.ts\n│   ├── package.json\n│   ├── src\n│   │   ├── db\n│   │   │   ├── index.ts\n│   │   │   ├── migrate.ts\n│   │   │   ├── migrations-sqlite\n│   │   │   │   ├── 0000_foamy_tusk.sql\n│   │   │   │   └── meta\n│   │   |   └── schema.ts\n│   │   └── openapi\n│   │       └── schemas.ts                       # App-level shared OpenAPI schemas\n│   └── tsconfig.json\n└── workers\n    ├── api-docs-worker\n    │   └── ...\n    └── main-worker\n        ├── package.json\n        ├── src\n        │   └── index.ts\n        ├── tsconfig.json\n        ├── wrangler.production.jsonc            # generated from config.yml      \n        └── wrangler.jsonc                       # generated from config.local.yml\n```\n\n</details>\n\n## [Documentation](https://github.com/danilgotvyansky/bobra/blob/main/_docs)\n\n## Installation\n\nQuickstart command has not been implemented yet. Please copy the [example app](example-app/) to get started with the framework.\n\n```bash\npnpm add -w @danylohotvianskyi/bobra-framework\n```\n\n## [Roadmap](https://github.com/danilgotvyansky/bobra/blob/main/_docs/roadmap.md)\n\n## [CONTRIBUTING](CONTRIBUTING.md)\n\n## License\n\nThis project is licensed under the terms of the Apache 2.0 license.\n\nSee [LICENSE](LICENSE) and [NOTICE](NOTICE) for more information.\n\n## Disclaimer\n\nDanylo Hotvianskyi - the author of the project doesn't claim the ownership or copyright to any mentioned dependencies such as Hono, Drizzle ORM, Melody Auth, pgEdge, workerd, etc. All rights belong to their respective owners. \n","readmeFilename":"README.md"}