{"_id":"turnover","_rev":"39-1f7c526a84ace813ba2876c088f62d5d","name":"turnover","dist-tags":{"latest":"0.38.1"},"versions":{"0.1.0":{"name":"turnover","version":"0.1.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.1.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"735fa915db9156aa3330bda3a2e9754ffcd2d168","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.1.0.tgz","fileCount":38,"integrity":"sha512-h7hnP5PcYrt0cg5vYe0lL8xTUzpnPJkmhCTZ5rSdlfCjhWTOkN5+w22kjgiMk5AZa2pHT4X61WXzVMunzb9f2g==","signatures":[{"sig":"MEUCIB3MzEKWOrBKqP0XVeyOrhBB8elM2vV/vws2bkDjif0NAiEAkN3Hl6y3xVROqc3nBQ6773nJnoxFHtrSOjlCz/BH7y8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":68449},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"3a942ac059a8ff78180f944dec5613197b4a7cfb","scripts":{"dev":"bun run --watch src/index.ts","test":"echo \"Error: no test specified\" && exit 1","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@changesets/cli":"^2.27.11"},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.1.0_1784357604949_0.35384325903869884","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"turnover","version":"0.2.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.2.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"693bed4acd7188d9961973ed3e84a51aeca47b53","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.2.0.tgz","fileCount":118,"integrity":"sha512-+Dg3y6E/VZc1BE5szAOVE0isNV0G9swnM2pLQMCRWizJtk4E8+DtN+LoYfhZ7THItYjtDPzDKwk2+YzYhE1tPg==","signatures":[{"sig":"MEQCIF0Cu0ty4JfBZkITGxV/rgaMI9OYQUIJ3KtzVAQ42jvxAiBqfk6W6NmJcdJ7+yDaNvAQ9q6x0L//AW6JuRCPsVf9ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":505197},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"bf96bfc8a6c5d1a0e1a422955abe065005e212da","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.2.0_1784479977502_0.642500872898923","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"turnover","version":"0.3.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.3.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"d8b040d964237b5b8b75e94277b240af33a8a2db","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.3.0.tgz","fileCount":118,"integrity":"sha512-SmRLpmnKBjqFdDbJvWfvZ798zuhNCYBy0NwqBNZQyC3kq//siNno7fLDyKy3ho4rZUqHMX3AEH94/zcJM/kyUQ==","signatures":[{"sig":"MEYCIQC/YbqWYH3FfFBH+31oa+AvP7KUFPFrVFF3C3hXNZBPSQIhALYyWCDQPILKnLpTJtldgiRefLd40O1OqxV8niLIuaos","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":518336},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"1af8c20af779825db9018b05633d00772c9b10d2","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.3.0_1784481383646_0.8061640990491477","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"turnover","version":"0.4.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.4.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"b858995604bb0c5bf563a42584d5994a9529b793","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.4.0.tgz","fileCount":123,"integrity":"sha512-Xn/YbLUqi8ZjxtjwywCliP6Y8W08tgqVRhM66tySJdqo860Jucm5gymZiPOfSkhW6vv0cAB4AOki6eyl53nkmg==","signatures":[{"sig":"MEUCIQDyWOmHH7gThVMSAmTiYxQ3TyUbcBNIvKbI3ljV6q4NYgIgP269hfupCjONUfC66xcSdMjKmobQEdho7Esvq1aSN8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":524634},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"3fceca9585f4a42d5e35c96f148a9d2641b39522","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.4.0_1784481717823_0.12153303671508042","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"turnover","version":"0.5.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.5.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"519597f9cf36057acea35571a0ecb5379d463fd6","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.5.0.tgz","fileCount":128,"integrity":"sha512-wLxkt3crCBdcwH3Lso9JHEwUH8HWvDyNwDLXqntjcbm+ZXaY8KodbzXfX7ZJRaCp2FKIqnK5rwdvGgW7QXUb7w==","signatures":[{"sig":"MEUCIQCU0NE7Z7XmFtIPJBGUYT0IpuYYonz3UwOrE7V/QJiATAIgWSSp6YtkW9eiKuWRCbmpHUnULdXf+oxfRzWvZD19sGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":531965},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"602f81d0302230ed3f151fca0beed9b85f32cd38","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.5.0_1784482057554_0.881591091088632","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"turnover","version":"0.6.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.6.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"c807d4de3fbbca89b7a6587464db4ae03cd53af0","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.6.0.tgz","fileCount":133,"integrity":"sha512-baEkVod5XtEBvJkzc0qZ6YUXDWuUPuS6Bplam+sQaqxI41MEw7AiyXJaL0Exw9pYL0/m8Gry7IXVH/Waz6C/Vg==","signatures":[{"sig":"MEYCIQDhvZOC+8esgwJ93bGPuMIf5HfA//10+RW+fBKs9qwcHwIhAMtSrNazAZxbJ482taSsmR58lwOxf1k+j09k7gblH7Z4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":537494},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"6cfe96a5e3e93091bc1ac9fcba47382661f82c83","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.6.0_1784482308925_0.6487029197587661","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"turnover","version":"0.7.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.7.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"3c674805e3166b45dd5506f89beb2ef02a965a0f","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.7.0.tgz","fileCount":138,"integrity":"sha512-QYXc2CnNTZkecfT2pSwEoG2SLdbtoxf95QT01FIuk3PShdQyoTR7gfw/xJSsZsFBkHfXkda+u0jZWZ2ELCWBeQ==","signatures":[{"sig":"MEQCIFPHv+2Zan9mND6i4CHPSMYuIKMIRm5tNza/rouxS6nFAiAMrrbWBVw8xJ7lG0Zk7OGbmx1CvzGxy74SVHvapS95eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":551676},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"b2b96fd901eef1de860e7cc1a62cad243908665b","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.7.0_1784482573213_0.36301943564351924","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"turnover","version":"0.8.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.8.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"3dd75503ec0702bfc821ef2b2695ac6a09955103","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.8.0.tgz","fileCount":143,"integrity":"sha512-1w/tQiGgwIgZzKgzIktTQRzlO1x7YXe6k7LBhJnxDwM3Evugj+41VQNe6VepOixryFV8rJ0hP7WqXImx1MDh2Q==","signatures":[{"sig":"MEUCIQDPepywe3HUUD5l7s2TyRI+7dsuRjggam5cbqYd9xCwVAIgUxu9SqNRZsrHPA4E/Rgu3JziNCm2srb21cQP8BtXFOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":558694},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"15f3c04c67bb1d6dee87e1c157a31d672d8290f2","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.8.0_1784482785641_0.7831617899191858","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"turnover","version":"0.9.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.9.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"6f29bd0f147d3e6bb275c7e3a7d92d3aaccc7bd8","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.9.0.tgz","fileCount":148,"integrity":"sha512-Hq/XkkhQqdOK9btC/C0PSlCYnRyACirUhOc50siS6rrRd46pElnqXI8SBnWpA1OpHRXG9Q9ywKNCNiiTrrtX/A==","signatures":[{"sig":"MEUCIQDzul84Oe1qBzd9qKtVu3DDFV7TVqqaVcCp7GCBrK565wIgPYe15IPDaNkVfR7Id8Kvcp4ql8LVkYcIQCXc9MK0Z/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":567718},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"a8a3ae1c0b1214f2e1ed9131aa9952af8a4f88aa","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.9.0_1784483037560_0.1410515479502572","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"turnover","version":"0.10.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.10.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"f07fb2f4d5b432d75e3e82454b1a2ce24fe6e61f","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.10.0.tgz","fileCount":148,"integrity":"sha512-rprTAKs7zqqrmEqXXgc7vrhJmEMySfjEG8CYOm2ejzU0Rem4bk1n9+oNbbA5c2+l8B+C06njmPdyk5gGttUrbw==","signatures":[{"sig":"MEUCIAJd88Qse2CGOZo6WTRTvSiFZBYT6ohs+H+tUWYsyo9NAiEA2RhuXe+5/8Feo9kJ7ks57L4hxtjTvDkAroh3FAjAQys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":572667},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"be3fa29ce8c403805350dadc97f8d8870a12d5e8","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.10.0_1784485202997_0.019852016196444167","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"turnover","version":"0.11.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.11.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"c6a0159337c58ace301735581570a1e9f1d9b757","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.11.0.tgz","fileCount":148,"integrity":"sha512-CYrsTChWtMKAmKHRCTtVhysMMkMjcBRgw8yRD560EJ8LOGzo+90rrg/LweJvNv9PmSwsH738fukPRHHJHXVNGg==","signatures":[{"sig":"MEUCIAqnzHl56h+OnrneLyBBkDV/xfdVNOxPm16V2eeXhQBFAiEA5VYMXw+XrOL0Li8nRE5XJoZ2xYHpgeuuuHseHT+9h7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":577700},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"56ce4ef46f92a0d2b685d0281bbed7cfb78c2a5e","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.11.0_1784485422491_0.441203082347736","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"turnover","version":"0.12.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.12.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"3f4c8275d7d4eb7f3b4c25484cf9ea2394963fe9","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.12.0.tgz","fileCount":148,"integrity":"sha512-FKXCcSH63o8JSojVtgYEiuRv2cgSGFLU5x6AmhB6SIwAqXe3KoPH9qLhfFJSc6lH+6CKE8keaAhX1OGaBceCaA==","signatures":[{"sig":"MEQCIDNKNmUTra5aUj6rv/Iwo4pmiVeXIXaG11JT5MyhDhd1AiA824GPb0rQZcTjobCaKhPluQWtIN203usah6u9lsc7bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":585282},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"7c1f303b911967a231c4e879f1e787603f1ff778","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.12.0_1784486421456_0.02045853396888142","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"turnover","version":"0.13.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.13.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"026c49bbc72c0a4a1f82be3d3f2f84b935a6b073","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.13.0.tgz","fileCount":153,"integrity":"sha512-AC1Lu6ZQ/vvgJ0Iu6ZOKsBQdErxiCOKkEPtfF3iVuJkvLfQCENC0B9AjOd6+L8LQxZtQQ0rxyPykGmCDookLUw==","signatures":[{"sig":"MEUCICPQ8ozIvNtIEB4OMT+ppRTBNJW1g2Xeme118ALvLXrOAiEAiYM5VYEnDElVZP3aW89NzuFgshmzFKF45QM4Zf2qeOs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":594754},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"af69b90d251fcc40dacd4c201aea3366ba9447d4","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.13.0_1784486682716_0.611206467349797","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"turnover","version":"0.14.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.14.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"ab5dc58e53d829585327977b53199955491c7c72","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.14.0.tgz","fileCount":158,"integrity":"sha512-COIuwkOUzqt0kWnJj9VhXFOEwgJerGgu5ri+m028/LPOwUcbo2hYs8qeL81C4i7e4b/cyorzB5KoIYPWS4DDjA==","signatures":[{"sig":"MEUCIDLEoo8KC/4H0RqxhpIsaKamB1APGPbybO3Jrh/gI+qBAiEAyMd/nk7PDMAu9wx4iih3Ehz97bjmtmPjqbaBN+gPGoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":602526},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"43ff1ee40408cd6ab9d6398d5e6df864f8b27a33","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.14.0_1784486908057_0.5840368246943655","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"turnover","version":"0.15.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.15.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"ce0d1709d53dab21f546c443e3aa6de3593f79fa","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.15.0.tgz","fileCount":163,"integrity":"sha512-XoZTmj6WIv5XuKEvZ1axSkU2Zr5rhT877NVvOWOdIQvyegHlaviG+4jo2SeOBrngBCNNnG3COZl/6+MFAYLV6w==","signatures":[{"sig":"MEUCIQCNTYsZjd1rtbFzxn3OxmgcLGEz0g5wuO3F/NeQyzH2WAIgLOmJq7aoCnFPQm6IGWjH28lVtlDNia7clphuyoN13zY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":611843},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"63386bb2b5a3bce16a978aba6da0c72ba8ef4ff1","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.15.0_1784487120651_0.45983217525397935","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"turnover","version":"0.16.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.16.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"b7d26114da5afa2753e9d015dd607317aa4405cb","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.16.0.tgz","fileCount":168,"integrity":"sha512-hNLjM+mrRRHR2jZHa9+4cSG7DZ++I0uZ+P4AXeyd2NSdotQme5nEN/c436WVq5TStUXw1NaHRIrH6W5Ax+Eb6w==","signatures":[{"sig":"MEYCIQD9OUIzTGhrKZSGQWlb0l2RrosjVNa14yCN1Q33M/C9lgIhAJn8BkPutOfvYr1QGTfwrjumtU/F76w0p+IeXnZMET15","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618514},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"6de76a66998ad43a4d85cd3bc89940b2d7d94c80","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.16.0_1784487311773_0.42386373625845075","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"turnover","version":"0.17.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.17.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"399908e83bab2f59a5803c61f0131ec9b3fe068f","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.17.0.tgz","fileCount":173,"integrity":"sha512-56jZ9QnRGPBXv6WDEwYzqsmHx5mTE86h4hIvXn5fnUoxsOQCzdS1ECmmjvCoLYngrdAidhBikP6u3CngzLKgKA==","signatures":[{"sig":"MEYCIQC8P8ZS5NmEkc+JGbVPGQF5uRw9L5Ennj0aaCK0iMOLPQIhAKwAugk7cygU2TKZk+u/DOXjRZiPY9axpPQtbhY9UJei","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":621436},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"068097b12d7cb3ef66f85d951528be5ea1036ac2","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.17.0_1784487528346_0.2988252357857035","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"turnover","version":"0.18.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.18.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"9617d4a9ff2935da4bb793ee8dd55e2b0a1ec130","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.18.0.tgz","fileCount":178,"integrity":"sha512-b/wTNTu9tArfa5o7WJcx/5q2ohnw5j3i0E5ZUV52SUW4A4OcDmMRxGe8oSTJiiij5nDVcKZD41pLYObi3TRaSw==","signatures":[{"sig":"MEUCIQDNzgl9cetd38qZ8KUeoxPB3KvcZZ9pGy8ZwD9oI1ncHwIgPXspzMkWYB0OstVSOWewRBgK4mE9FvMZ0DijjFjrvcY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":628989},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"2e6248b7216fca1b9ffbf9d4050af26aaba6610e","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.18.0_1784487968760_0.8431851158807127","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"turnover","version":"0.19.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.19.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"b7983e6ced00534c13182e15d02c10047851be4f","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.19.0.tgz","fileCount":183,"integrity":"sha512-5EDTgQA0lzMccxi12CA2LtKrgm4Uw81myxnV6PbIV0NLm1z39Vmuk3195O4ueB/vdMl28uNR4P7+Grk+2NbZmw==","signatures":[{"sig":"MEUCIQCqXZVcOuI8LxqFa5u4sffk6LwosC9B4fHvpL2s96fuUgIgN3sT/+4LB9THtwG88nQFOnA52AIF1+n0XgQf4wedTc8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":637982},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"d9234a8ac19bc422a652a2590461e638ffa433cd","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.19.0_1784488799747_0.5592157478585078","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"turnover","version":"0.20.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.20.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"9b67f94b53b128d2c63d2dbb968b8c98eb7198b1","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.20.0.tgz","fileCount":188,"integrity":"sha512-uKzhJpvRSGFGCBrhHuu6Ian62SL2hyBxDX90xRYwCnCMUoffFWzxWM2SNZNfD9mEKZywEF9GirU1VR63+DbIcg==","signatures":[{"sig":"MEQCIH9vZHm5JuqsL0cUhpJSRoRSGp3BrSs1uH0USQ4TSJrmAiAiWMwlnhs+TwmI4aQpTkYP7jJN7OiazK5Da0hpKvpoNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":664950},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"a07f4fe8d1459bbad481620fed8109eeec78bc74","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.20.0_1784489232241_0.4475164595287211","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"turnover","version":"0.21.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.21.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"535a88e7b71a170f9429d5def1853946a042b955","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.21.0.tgz","fileCount":193,"integrity":"sha512-+7JFtB5Jl3G+p4ju3qUSEBVcgBW/xuPVIhgQFER02qi8txHwadF9xyXa9czC0qj5lTmWhWQKa3V8UfnLIq7AiA==","signatures":[{"sig":"MEYCIQCFFvHpc5/kFnim81MP4Wu5GaERmwKIGMBA3zDDOmixHgIhAKe9G0L4sNve/pqhFpCqAy1qFZx/sHcRoCYO5ennjIPj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":678801},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"e1051c149b981988daee3b3086aa7caa66db9541","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.21.0_1784489438628_0.29777296497304073","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"turnover","version":"0.22.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.22.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"b5baedf5e4b0e329c6e10161adc94afdefdce51b","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.22.0.tgz","fileCount":198,"integrity":"sha512-HwTaBsx/2Y9Zj5nhgZlPPdEaEianHDQjMerqjtaH5v+dqhCQRYtlfqFS9ObtCxObv1hZZkReAJREyiNoj3P75w==","signatures":[{"sig":"MEUCIHcobpExYHAprSrLwDqGmi5CZ3AB5UcKA2FzdRGufjMHAiEArOgyjjZhQu/V/fhoebq267RDJ2jH7XQDm2qaixP+WS0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":711170},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"dcf7bf542c1ad61da5af0737783e4b0150392f7c","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.22.0_1784489834426_0.5967176383633155","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"turnover","version":"0.23.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.23.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"9a317a3c49f1f03aa40da636dcb09facd9a6797b","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.23.0.tgz","fileCount":203,"integrity":"sha512-vwEn54DFwNmx+YT2LMn77nGJIN/tCOI1uteTieZsS6Hle0jYZaloXhllPRJZ61iRnjL6nSocvAAoVLWbi+3y0g==","signatures":[{"sig":"MEUCIF73FgkUQbmVgs3FEiWZPcMjqt7joB5DrrxYu50QitJ3AiEA8IqAiSTjxh7XVKmNSoWmCYPlDVM8bM+uAdeYAvLRmUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":725301},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"f6b9855709c96613d38fbc4c4ce7236faf267779","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.23.0_1784490100841_0.1988264931616126","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"turnover","version":"0.24.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.24.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"1a0e8f509d9e0b27e13bc58f07f66434bccc953b","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.24.0.tgz","fileCount":208,"integrity":"sha512-xX3pzQTAT9oUvKsgnRxxxDCR7wTAoeoR/y3lyl27D8wKLJOuWnipYPW+Y03dXTjBYI/GhwOGu9v5s6Tjih0u1g==","signatures":[{"sig":"MEUCICun29NU6I+SRTpHKu+5WfCPnDx+M1ewWMSaFTNY7xXNAiEAzsll4uKo5Ijk55yKQ00pmI0N23w+/PUxoT23uYLAeGY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":742508},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"f28b77c64f1440aae2d88b2b340bf8f7c132649f","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.24.0_1784490387513_0.12721840971186604","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"turnover","version":"0.25.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.25.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"9faa4233f9aa7bffd363c990b75a43cab95dce1b","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.25.0.tgz","fileCount":213,"integrity":"sha512-35Zs1izDjySP4NoouiFbiZJZYX3TZdyTG2EA44vCdi8Oj6PtBePVIYAHlIjTTYxiXsCrtI1ZXYOChltv66wziQ==","signatures":[{"sig":"MEQCIEjp0AajJ3tlqcscJahgcOZVN2OdQXEgMG1fQ3okrSXRAiAg8fJDLfWv7sZurK+Busww1V5jnrkTmJmX1Iy6PABjgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":756942},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"a4fcad0353a3987f017aadf2643b2d836f579037","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.25.0_1784490596940_0.8362069374663836","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"turnover","version":"0.26.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.26.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"41cc32c60d2183ba4dde112dafd075462990e6e0","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.26.0.tgz","fileCount":218,"integrity":"sha512-NkTrVll84LSAHKZ3XpUWNdWXel9x7frhPwMxs0+4/P4B23KYNEQKo2QZudfxu2GoQEIHTscYjqI7LbGreo9XzA==","signatures":[{"sig":"MEYCIQDm62wWNZhuFMJUl23xHuNgIX1V1MImNXb1JFxCzXNcVQIhAPTU4ZZuehRViGk+Mb1grkNLivWfddcEqTgUYsqjXx3e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":777328},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"8badfce62e01ac94b375798058abc4a7dd9fb74d","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.26.0_1784490793980_0.20672432355330117","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"turnover","version":"0.27.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.27.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"fdd1c91568b127a6375ff3e0f37487771058690f","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.27.0.tgz","fileCount":223,"integrity":"sha512-gfNfUZeuNWsFzr+m2Pfu+1w3LaE86DzzlX08VK6lEa4K3rF7FNO+Q3Dv97lt2c3ifE9QxhbC0Ell6cbGQ2dquw==","signatures":[{"sig":"MEUCIBy2Xf3ERbS+jglREIZxNk4a52/Eupf7P+Vy75RataV/AiEAuJKkAxZCTfdbihlQ91yTV6HF1vr/KI4Ko1bpPWF2V8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":788815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"5f63bc0dfdf3e1261b81e6ab9fc810ea8f9ff295","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.27.0_1784490947824_0.23963512039512502","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"turnover","version":"0.28.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.28.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"d58a989fe2ec78601710b6bb72623585369393f7","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.28.0.tgz","fileCount":228,"integrity":"sha512-fy3Y+N0yuEhQ168GP9QKkS8qoqFamwr4HxD9bZ0KZf9cZNUWvsOheFLipkYNI04if2atwADtidf+uaEMXJInIg==","signatures":[{"sig":"MEYCIQCsJhJD9j5vTdJ3/+pJNY3fnviofvDMSwLOgahwqJ9ZXwIhAPNVOrMNYKdcFP5rGzkD5cJHEcEOR09Ch9zdHROKcRha","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":805035},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./package.json":"./package.json"},"gitHead":"9094530e7590bf085d47442a2d7cc6ca94e7de07","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.28.0_1784491140724_0.5873352125064433","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"turnover","version":"0.29.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.29.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"142539147589d8023832638396d4b9e339639541","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.29.0.tgz","fileCount":233,"integrity":"sha512-PZFP7w2UOXdhvYAfEB1mJihB7sUDYvxNCRvWhlvEx3tn3F9bkUG696iI6hZZ6KWZv+E2xI1042/phRgE4cpWKQ==","signatures":[{"sig":"MEQCIAwepoTUcpYCS1Sv8RKBr6uHaMLmN3TNIa5jhmWaFW5EAiAPVCh5OtGIrfmwTpUyVyNmLwTb7UPcnEa1XdJzxr52Tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":819570},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"b79cf52ce9f3d145465bd21e0abf0cb1dab27c3b","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.29.0_1784491422509_0.5867751625428994","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"turnover","version":"0.30.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.30.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"a0746e0c4aa91cb7712c9de2c0f5726509910f51","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.30.0.tgz","fileCount":238,"integrity":"sha512-w95QxGdekxAQG9ITNhRa+v31xgJsClOQMm7iszYekgALI44twMlS+wY/HdVXNFvtjWXeZ0ERg9sxEHlGMMQLyw==","signatures":[{"sig":"MEYCIQDnmW7kkkWQ/tAo/jVoI3KZtzJvciCgghZ1/9VqFfwB2gIhAOQ1wZIz3BUPU/muMh3ahqGhdN1CrKXRl3bWJB5WoSHF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":844262},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"a25ba6e059c8f240be677d23a0299e0d2e572330","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.30.0_1784491675900_0.9844652621202339","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"turnover","version":"0.31.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.31.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"e8873c9fbb1df98458764c7d83bdd721bfa2991e","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.31.0.tgz","fileCount":243,"integrity":"sha512-63hzhNOQXM/O2CKpXxhGyKhXbO+bJMvgKwGWWwtazKXM0mEcqSkoQb+Z7A7afVRHdRkYCSarr1FWzve1VB5xgQ==","signatures":[{"sig":"MEUCIQCjmalnc9TERpFGn21jOlhj7enurlcupTSguTo9FXwFMQIgR/i8ngNiYWgB3ZM1KD2bHoi7y8z0McMIfAW72rT/Pow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":854529},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"b72b512a6804aeabdf619da72bef78574677a87c","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.31.0_1784491881399_0.3466687197895828","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"turnover","version":"0.32.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.32.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"525b19b6ca33ea27891e2c790329ad6be01cd386","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.32.0.tgz","fileCount":248,"integrity":"sha512-B0cvRcDgGxhnrSSdKVhqfLvkdLM89gAZndQkzxzPSLRooOyExaKM+UUT7wiSjPXaDaATyJP9woCc8c5RiFXjHw==","signatures":[{"sig":"MEYCIQCHMMd6kXfle/NlOXtIk71Zd/HDTS78KiQOqSMBx7jtGwIhAOfHTUYwlGDgZGhuDDXWD6b2RbRxKM1ajwHYYZhbW7gV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.32.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":864828},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"e23f7c4d8f4221cc380b2ae9c99a5beefaeb9784","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.32.0_1784492100492_0.5979228878171534","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"turnover","version":"0.33.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.33.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"5b33f702f5e98f834a1e1edb7a2ff5012bcb6ce3","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.33.0.tgz","fileCount":253,"integrity":"sha512-uX0fyC9hTt4lv5myortrTfZhmTIZmpr0+5hg1Q7jAvhEufT9Ym7OLNiv1FQVhyGIdfSxAc8UMs8X2G4iFIdlQQ==","signatures":[{"sig":"MEUCIQCat6nrWAKnM9l20gAJYbxXutHDRa9KBKqfFSAUAcMf+gIgaG3Dc8PrADuTSRWYzMBOM4A+RlY/Prh0BqaN/MNV0Gk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.33.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":885859},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./codegen":{"types":"./dist/codegen.d.ts","import":"./dist/codegen.js","default":"./dist/codegen.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"8e96054c147772ea6938fb1abe43a1e9effe7d52","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.33.0_1784492402306_0.15515498709284214","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"turnover","version":"0.34.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.34.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"c578ce19626b81ef4d3a409e19d00075d1b24c13","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.34.0.tgz","fileCount":258,"integrity":"sha512-1ljYPP6xmL9lWSsjsEUvIGzVX+GBFhskO7vASaBqlFOg6RlRfZJNJ6Epm5QIIsiUG/xwuLc2Nyhu6EXhj5IjKA==","signatures":[{"sig":"MEQCIEfvFivEHCkE7UndnP9tw39n4ja2TnBEv2rmBbG50mJ/AiAbYn71TImcnhtjw5OtjHcVBvC/cu9tP2DTI7xpD4sv2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.34.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":897641},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./codegen":{"types":"./dist/codegen.d.ts","import":"./dist/codegen.js","default":"./dist/codegen.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"b163fe4beb37ce5d1b0b39f98daefc027e6f4076","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.34.0_1784493308509_0.2076746359875863","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"turnover","version":"0.35.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.35.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"d4ca1a6ae9e2ae6d1f44ec6ef2286795e6192c45","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.35.0.tgz","fileCount":258,"integrity":"sha512-GO37JF7GvVx8wUdNpiQEkkGehFUikrZCpGR870jDm8pu4GMxL+p5XQgFAEN6B6Tju+orjxa7xaV50Jf/yFE5lw==","signatures":[{"sig":"MEYCIQCQXE33HHunJ3ezzMiftVCjEoM3VFFWmbuzBe+FzwTxCgIhALJMRs2rKL5WVzPwCeZvHKhhbPRxPOlIoRCSCSFIBQxZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.35.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":903284},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./codegen":{"types":"./dist/codegen.d.ts","import":"./dist/codegen.js","default":"./dist/codegen.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"6fbd0b27fac13eda0a8b0a0102d571a86466f990","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.35.0_1784501371341_0.15021895367974736","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"turnover","version":"0.36.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.36.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"2bfb936cc2b5d58397a48c7f7efabb9a76e88f6a","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.36.0.tgz","fileCount":258,"integrity":"sha512-qWgtIpu3YjKB3yJ293NaIQtZ8Qas7HFomwlzLuleJWg8D+Sw2sGXGD+ZiLaj55Gts2CbzVUeY2qV0FUnKAHDNQ==","signatures":[{"sig":"MEUCIQCxTECdfQigCMEBY5C0fvpKx5MVvsoN7AaIVl3msXeemwIgekJENDTctL+FmB0sQ8tnaknu5AzPG5Mjv4D5tZFVtNs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.36.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":910452},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./codegen":{"types":"./dist/codegen.d.ts","import":"./dist/codegen.js","default":"./dist/codegen.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"974de63940d2cc4633d6d57af1fc516e07ff07b4","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.36.0_1784501625471_0.3593250094106688","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"name":"turnover","version":"0.37.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.37.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"4915e85b79333d6d4251815528d347de710c93c2","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.37.0.tgz","fileCount":258,"integrity":"sha512-JtlFBGMevMASnl4V2FCKdC7qau5D1AujCTDqnYOqCeV3yoK1+GZkqE4KcUhT2N2sQc9YFHMVVvnvhNM1WSRB2g==","signatures":[{"sig":"MEUCIQCeE6R7AnLDnDw0V743UBVuC4H/y1aaYUS+1EPC7PjV0wIgH8STc8qkCu9j/rN1tC4wCiouQj/lpAQJ3LNSPVFZrac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.37.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":914081},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./codegen":{"types":"./dist/codegen.d.ts","import":"./dist/codegen.js","default":"./dist/codegen.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"4cf368c6f967c75dac2ebb860555c575e9eee471","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.37.0_1784501913471_0.5630753988735642","host":"s3://npm-registry-packages-npm-production"}},"0.38.0":{"name":"turnover","version":"0.38.0","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","_id":"turnover@0.38.0","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"homepage":"https://github.com/AwareByDefault/turnover#readme","bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"dist":{"shasum":"ba48891047f533908b98066a5c7842fdd6fabfd3","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.38.0.tgz","fileCount":258,"integrity":"sha512-N1i0Py+rFKbzMmBTtiH51+2S5HhYzXzYYP/FtX9uQ1A3a0dUjQXaLFmhcjo6VBDC/4olJoZNOqIhpfylo5ynew==","signatures":[{"sig":"MEQCICSVvKFx2nOmnBVtGf1FqynRn53/X1TUdIoz8Bi66dgxAiAfJ/h0hdJ5D7REvfejhHXRmM1HaiPjch003tRzVhbuwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.38.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":918718},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./codegen":{"types":"./dist/codegen.d.ts","import":"./dist/codegen.js","default":"./dist/codegen.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"gitHead":"77b4ca39ecf48ac8ef8806a1508d8bd8c704b89e","scripts":{"dev":"bun run --watch example/index.ts","lint":"biome check . && bun tools/lint/index.ts","test":"bun test","bench":"bun run bench/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"bun test --watch","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset:status":"changeset status","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"repository":{"url":"git+https://github.com/AwareByDefault/turnover.git","type":"git"},"_npmVersion":"11.18.0","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","directories":{},"sideEffects":["./dist/metadata.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"bun-types":"latest","typescript":"^7.0.2","@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turnover_0.38.0_1784502277119_0.3531567633121315","host":"s3://npm-registry-packages-npm-production"}},"0.38.1":{"name":"turnover","version":"0.38.1","description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","type":"module","license":"MIT","author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"homepage":"https://github.com/AwareByDefault/turnover#readme","repository":{"type":"git","url":"git+https://github.com/AwareByDefault/turnover.git"},"bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"engines":{"bun":">=1.0.0"},"packageManager":"bun@1.3.14","publishConfig":{"access":"public","provenance":true},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js","default":"./dist/auth.js"},"./request":{"types":"./dist/request.d.ts","import":"./dist/request.js","default":"./dist/request.js"},"./otel":{"types":"./dist/otel.d.ts","import":"./dist/otel.js","default":"./dist/otel.js"},"./bundler":{"types":"./dist/bundler.d.ts","import":"./dist/bundler.js","default":"./dist/bundler.js"},"./codegen":{"types":"./dist/codegen.d.ts","import":"./dist/codegen.js","default":"./dist/codegen.js"},"./redis":{"types":"./dist/redis.d.ts","import":"./dist/redis.js","default":"./dist/redis.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js","default":"./dist/testing.js"},"./package.json":"./package.json"},"sideEffects":["./dist/metadata.js"],"scripts":{"dev":"bun run --watch example/index.ts","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","typecheck":"tsc --noEmit","lint":"biome check . && bun tools/lint/index.ts","lint:fix":"biome check --write . && bun tools/lint/index.ts --fix","lint:checks":"bun tools/lint/index.ts","prepublishOnly":"bun run clean && bun run build","changeset":"changeset","changeset:status":"changeset status","changeset:version":"changeset version","changeset:publish":"changeset publish","test":"bun test","test:watch":"bun test --watch","test:scan-stress":"bun run test/scan-stress/run.ts --lines 1000000 --cleanup","bench":"bun run bench/index.ts"},"peerDependencies":{"@opentelemetry/api":"^1.9.0"},"peerDependenciesMeta":{"@opentelemetry/api":{"optional":true}},"devDependencies":{"@biomejs/biome":"^2.5.0","@changesets/cli":"^2.27.11","@opentelemetry/api":"^1.9.1","@opentelemetry/context-async-hooks":"^2.9.0","@opentelemetry/core":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","bun-types":"latest","typescript":"^7.0.2"},"gitHead":"78c9dac89118e29c1ceb3bd6e9c1d367c231dee3","_id":"turnover@0.38.1","_nodeVersion":"24.18.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-sPdj1FqA21mm5wY+7Xo8Kk9YPasUMoG7jhF5CrnZWPZoBzPNrCG8K5KyagQ6dXJAE6h0B7HPk+agpNXa8jNcdQ==","shasum":"28ba1aa8b6d0c5f7a288837f63937c50c571c2bd","tarball":"https://registry.npmjs.org/turnover/-/turnover-0.38.1.tgz","fileCount":258,"unpackedSize":1134364,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnover@0.38.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCaB9+W7Yc5OcUuLL/jnbXGpEN1taRoqylGLKf22RSX+wIhALJvl0cCVf+PbR3AYZ+uWX4HFURmTk/jmRhXCwJslSzp"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8a3360b3-e074-43d8-a06e-3d5a4f3a58ef"}},"directories":{},"maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/turnover_0.38.1_1784526870621_0.7295367590080257"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T06:53:24.849Z","modified":"2026-07-20T05:54:31.039Z","0.1.0":"2026-07-18T06:53:25.096Z","0.2.0":"2026-07-19T16:52:57.657Z","0.3.0":"2026-07-19T17:16:23.770Z","0.4.0":"2026-07-19T17:21:58.001Z","0.5.0":"2026-07-19T17:27:37.689Z","0.6.0":"2026-07-19T17:31:49.072Z","0.7.0":"2026-07-19T17:36:13.393Z","0.8.0":"2026-07-19T17:39:45.796Z","0.9.0":"2026-07-19T17:43:57.734Z","0.10.0":"2026-07-19T18:20:03.114Z","0.11.0":"2026-07-19T18:23:42.675Z","0.12.0":"2026-07-19T18:40:21.636Z","0.13.0":"2026-07-19T18:44:42.876Z","0.14.0":"2026-07-19T18:48:28.253Z","0.15.0":"2026-07-19T18:52:00.788Z","0.16.0":"2026-07-19T18:55:11.968Z","0.17.0":"2026-07-19T18:58:48.528Z","0.18.0":"2026-07-19T19:06:08.952Z","0.19.0":"2026-07-19T19:19:59.934Z","0.20.0":"2026-07-19T19:27:12.393Z","0.21.0":"2026-07-19T19:30:38.783Z","0.22.0":"2026-07-19T19:37:14.601Z","0.23.0":"2026-07-19T19:41:41.040Z","0.24.0":"2026-07-19T19:46:27.663Z","0.25.0":"2026-07-19T19:49:57.164Z","0.26.0":"2026-07-19T19:53:14.189Z","0.27.0":"2026-07-19T19:55:48.008Z","0.28.0":"2026-07-19T19:59:00.913Z","0.29.0":"2026-07-19T20:03:42.656Z","0.30.0":"2026-07-19T20:07:56.071Z","0.31.0":"2026-07-19T20:11:21.574Z","0.32.0":"2026-07-19T20:15:00.664Z","0.33.0":"2026-07-19T20:20:02.455Z","0.34.0":"2026-07-19T20:35:08.647Z","0.35.0":"2026-07-19T22:49:31.503Z","0.36.0":"2026-07-19T22:53:45.631Z","0.37.0":"2026-07-19T22:58:33.665Z","0.38.0":"2026-07-19T23:04:37.321Z","0.38.1":"2026-07-20T05:54:30.756Z"},"bugs":{"url":"https://github.com/AwareByDefault/turnover/issues"},"author":{"name":"Jake Uskoski","email":"jake@awarebydefault.com"},"license":"MIT","homepage":"https://github.com/AwareByDefault/turnover#readme","keywords":["bun","rest","framework","decorators","dependency-injection","di","controller","http","typescript"],"repository":{"type":"git","url":"git+https://github.com/AwareByDefault/turnover.git"},"description":"Decorator-first REST framework for Bun — inject your dependencies, mount controllers, and let them rest.","maintainers":[{"name":"jake-awarebydefault","email":"jake@awarebydefault.com"}],"readme":"# turnover\n\n**Decorator-first REST framework for Bun** — inject your dependencies, mount\ncontrollers, and let them rest.\n\nA small, Bun-native REST framework built on **standard TC39 decorators** — no\n`experimentalDecorators`, no `emitDecoratorMetadata`, no Reflect-metadata. It\ngives you `@controller` / `@get` routing, a tiny dependency-injection container,\nand request-scoped auth on top of `Bun.serve`.\n\n## Install\n\n```bash\nbun add turnover\n```\n\n## Quick start\n\nDefine a controller, then let `createApp()` **discover** it — no manual imports,\nno registration list:\n\n```ts\n// hello.controller.ts\nimport { controller, get } from \"turnover\";\n\n@controller(\"/hello\")\nexport class HelloController {\n  @get(\"/\")\n  hello() {\n    return { message: \"Hello from turnover\" };\n  }\n}\n```\n\n```ts\n// server.ts\nimport { createApp } from \"turnover\";\n\nconst app = await createApp(); // discovers every @controller under this directory\nconst server = app.listen(3000);\n\nconsole.log(`🚀 Server running at ${server.url}`);\n```\n\n```bash\nbun server.ts   # → GET http://localhost:3000/hello\n```\n\n`createApp()` with no arguments walks the entry file's directory, imports every\n`@controller`, and mounts it. Prefer to wire things up by hand? Pass a\n`controllers` list instead — see\n[Auto-discovery & manual registration](#auto-discovery--manual-registration).\n\n> Requires [Bun](https://bun.sh) — the framework calls `Bun.serve`, `Bun.Glob`,\n> `Bun.main`, and `Bun.file` directly. Works under the default `tsconfig.json`;\n> no decorator-related compiler flags are needed.\n\n## Auto-discovery & manual registration\n\n**Auto-discovery is the default.** `createApp()` — called with no `controllers`\nand no `modules` — scans the entry file's directory tree (`**/*.ts` via\n`Bun.Glob`), imports any file whose source contains `@controller(`, and each one\nself-registers as its module loads. No barrel of imports to maintain:\n\n```ts\nconst app = await createApp();                 // scan the entry file's directory\nconst app = await createApp({ dir: \"./src\" }); // ...or point the scan elsewhere\n```\n\n**Manual registration** is the alternative — pass `controllers` and/or `modules`\nto mount **exactly those**, skipping the filesystem scan. Reach for it when a\nglob scan won't work (bundled/compiled builds), in tests, or any time you want\nexplicit, order-controlled wiring:\n\n```ts\nimport { createApp } from \"turnover\";\nimport { UsersController } from \"./users.controller\";\nimport { AdminModule } from \"./admin.module\";\n\nconst app = await createApp({\n  controllers: [UsersController],\n  modules: [AdminModule],\n});\n```\n\nExplicitly listed controllers mount **isolated** from the global discovery\nregistry, so a test mounts only what it names. The feature examples below pass\n`controllers: [...]` for self-containedness — in a real app you can usually drop\nthat and let discovery do the wiring.\n\n> **Bundling.** Auto-discovery relies on a runtime filesystem scan, which a\n> bundler tree-shakes away — so a naively bundled `createApp()` app boots with\n> **zero routes**. Two ways to fix it:\n>\n> - **`turnoverPlugin()`** (from `turnover/bundler`) — keep auto-discovery: the\n>   plugin runs the same scan at **build** time and bundles the `@controller`\n>   files in, so your entry keeps calling `createApp()` unchanged.\n>\n>   ```ts\n>   import { turnoverPlugin } from \"turnover/bundler\";\n>   await Bun.build({ entrypoints: [\"./src/server.ts\"], outdir: \"dist\",\n>                     target: \"bun\", plugins: [turnoverPlugin()] });\n>   ```\n>\n> - **Register controllers explicitly** (`createApp({ controllers: [...] })`) —\n>   always bundles cleanly and starts faster as the app grows.\n>\n> `test/bundle-smoke.test.ts` proves all three paths by actually `bun build`-ing\n> and cURLing each.\n\n## Concepts\n\nEverything below is imported from the `turnover` package. The sections build up\nfrom routing and DI to the cross-cutting machinery — guards, validation,\ninterceptors, method AOP, events, and more.\n\n### Controllers & routes\n\nDecorate a class with `@controller(\"/base\")` and its methods with an HTTP-verb\ndecorator. Each handler receives a `Context` and returns a value that is coerced\ninto a `Response`.\n\n```ts\nimport { type Context, controller, del, get, inject, post } from \"turnover\";\nimport { GreetingService } from \"./greeting.service\";\n\n@controller(\"/users\")\nexport class UsersController {\n  private readonly greeter = inject(GreetingService);\n  private readonly users = new Map<string, User>();\n\n  @get(\"/\")\n  list() {\n    return { users: [...this.users.values()] }; // object → JSON\n  }\n\n  @get(\"/:id\")\n  getOne(ctx: Context<{ id: string }>) {\n    const user = this.users.get(ctx.params.id);\n    if (!user) return new Response(`No user \"${ctx.params.id}\"`, { status: 404 });\n    return { user };\n  }\n\n  @post(\"/\")\n  async create(ctx: Context) {\n    const user = await ctx.body<User>();\n    this.users.set(user.id, user);\n    return Response.json({ created: user }, { status: 201 });\n  }\n\n  @del(\"/:id\")\n  remove(ctx: Context<{ id: string }>) {\n    return { deleted: this.users.delete(ctx.params.id) };\n  }\n}\n```\n\nRoute decorators: `@get`, `@post`, `@put`, `@patch`, `@del` (named `del` because\n`delete` is reserved). Paths are joined with the controller base and normalized\n(duplicate and trailing slashes collapsed).\n\n**The `Context` object:**\n\n| Field          | Type                         | Description                                        |\n| -------------- | ---------------------------- | -------------------------------------------------- |\n| `ctx.req`      | `Request`                    | The raw Web `Request`.                             |\n| `ctx.route`    | `string`                     | The matched pattern (e.g. `/users/:id`) — low-cardinality, for telemetry/logging. |\n| `ctx.params`   | `Record<string, string>`     | Path params from the pattern (e.g. `/:id`).        |\n| `ctx.query`    | `URLSearchParams`            | Parsed query string.                               |\n| `ctx.body<T>()`| `() => Promise<T>`           | Lazily reads + parses the body (JSON by content-type). |\n\n**Return-value coercion** (in [app.ts](src/app.ts)):\n\n- `Response` → passed through unchanged\n- `string` → `text/plain`\n- `null` / `undefined` → `204 No Content`\n- any other object → JSON\n\n### Dependency injection\n\nMark a class `@injectable()` and pull it in with `inject(Token)` in a field\ninitializer — no constructor, no parameter decorators (standard decorators don't\nhave them). The container sets an ambient reference while constructing, which is\nwhat lets `inject()` resolve.\n\n```ts\nimport { injectable } from \"turnover\";\n\n@injectable() // default scope: \"singleton\"\nexport class GreetingService {\n  private count = 0;\n  greet(name: string) {\n    return `Hello, ${name}! (greeting #${(this.count += 1)})`;\n  }\n}\n```\n\n```ts\n@controller(\"/users\")\nexport class UsersController {\n  private readonly greeter = inject(GreetingService); // resolved at construction\n}\n```\n\nScopes via `@injectable({ scope })`: `\"singleton\"` (default, cached and shared),\n`\"transient\"` (new instance per resolve), or `\"request\"` (one instance per\nrequest). A request-scoped bean is injected as a proxy that resolves the current\nrequest's instance, so it works even inside a singleton. Controllers are\ninstantiated through the same container, so they can inject services. Circular\ndependencies are detected and throw with a helpful message.\n\n> `inject()` only works while the container is constructing an\n> `@injectable` / `@controller`. Calling it at module top level throws.\n\n**Providers.** Beyond auto-constructing concrete classes, you can bind a **token**\nto a value, class, factory, or alias — the way to inject interfaces, config,\nthird-party objects, or mocks. Non-class dependencies use an `InjectionToken`:\n\n```ts\nimport { InjectionToken, createApp } from \"turnover\";\n\ninterface Logger { info(msg: string): void }\nconst LOGGER = new InjectionToken<Logger>(\"Logger\");\n\nconst app = await createApp({\n  controllers: [...],\n  providers: [\n    { provide: LOGGER, useValue: console },              // a value / mock\n    { provide: Database, useClass: PostgresDatabase },   // bind an interface to an impl\n    { provide: CACHE, useFactory: (c) => new Cache(c.resolve(CONFIG)) }, // built with deps\n    { provide: STORE, useExisting: CACHE },              // alias → same instance\n  ],\n});\n```\n\nThen `inject(LOGGER)` in any controller/service. `useClass`/`useFactory` take an\noptional `scope` (`\"singleton\"` default, or `\"transient\"`). Registering a token\ntwice **overrides** it for `resolve()` (handy for test mocks) while\n`resolveAll(token)` / `injectAll(token)` return **every** binding (multi-inject).\nRegister imperatively too via `app.container.register(token, provider)`.\n`@service()` and `@repository()` are stereotype aliases of `@injectable()`.\n\n**Lifecycle callbacks.** `@postConstruct` runs a method right after a service is\nconstructed (async ones are awaited during `createApp`, so the service is ready\nbefore you serve); `@preDestroy` runs on `app.stop()`, in reverse construction\norder. Use them to manage resources:\n\n```ts\n@injectable()\nclass Db {\n  private pool!: Pool;\n  @postConstruct async connect() { this.pool = await createPool(); }\n  @preDestroy    async close()   { await this.pool.end(); }\n}\n```\n\n**Configuration.** Read config with the `value()` helper (coerced to the\nfallback's type) or by injecting `Config`. It reads `Bun.env` by default;\noverride with `createApp({ config })` (a plain object or a `ConfigSource`):\n\n```ts\nclass Server {\n  private port = value(\"PORT\", 3000);     // number, from env or config\n  private debug = value(\"DEBUG\", false);  // boolean\n}\nconst app = await createApp({ controllers: [...], config: { PORT: \"8080\" } });\n// inject(Config).get(key, fallback) / .require(key) / .has(key) too\n```\n\n**Profiles.** Set active profiles with `createApp({ profiles: [\"dev\"] })` (or\n`TURNOVER_PROFILES` / `NODE_ENV`). `@profile(\"dev\")` mounts a controller or\nmodule only when one of its profiles is active; `Config.hasProfile(name)` reads\nthem.\n\n```ts\n@profile(\"dev\") @controller(\"/debug\")\nclass DebugController { /* mounted only when \"dev\" is active */ }\n```\n\n**Post-processors (the AOP seam).** `container.addPostProcessor((instance, token)\n=> …)` (or `createApp({ postProcessors })`) inspects each freshly constructed\ninstance and returns it — or a wrapper (e.g. a `Proxy`). Processors chain, and\nthe wrapper is cached. This is the low-level hook that method-level advice is\nbuilt on; self-invocation reaches the unwrapped object.\n\n**Method advice (`@before` / `@after` / `@around`).** Wrap *any* injectable\nservice method — not just HTTP handlers — with cross-cutting logic (logging,\ncaching, retry, timing). `@around` receives a join point and calls `proceed()`:\n\n```ts\n@injectable()\nclass Orders {\n  @before((jp) => console.log(`→ ${jp.method}`, jp.args))\n  @around((jp) => { const t = performance.now(); const r = jp.proceed();\n                    console.log(`${jp.method} took ${performance.now() - t}ms`); return r; })\n  place(order: Order) { /* ... */ }\n}\n```\n\n`@before` runs first, `@around` wraps the call (top-most is outermost, and may\ntransform args/result, short-circuit, or catch), `@after` runs last (awaiting\nasync methods). Advice applies to calls made through the injected instance;\nself-invocation bypasses it (a call to another method on `this` is not advised).\n`createApp` auto-registers the aspect processor.\n\n**Transactions & caching** are two built-in advices on that mechanism:\n\n```ts\n@injectable()\nclass Orders {\n  @transactional                       // runs inside the bound TransactionManager\n  async place(order: Order) { /* ... commits, or rolls back on throw */ }\n\n  @cacheable({ ttl: 60_000 })          // memoize by args in the CacheStore\n  async pricing(sku: string) { /* ... */ }\n\n  @cacheEvict                          // clear the cache when called\n  async refresh() { /* ... */ }\n}\n```\n\nBind your database's manager (`{ provide: TRANSACTION_MANAGER, useValue }`) — the\ndefault just runs the method. Caching uses an in-memory `MemoryCache` by default;\nbind `CACHE_STORE` to swap it (e.g. Redis). `@cacheable` supports `key`, `ttl`,\nand a `keyBy(...args)`.\n\n### Guards & auth\n\n`@use(...guards)` attaches middleware to a whole controller or a single route. A\nguard returns nothing to continue, or returns/throws a `Response` to\nshort-circuit (e.g. a 401/403).\n\n```ts\nimport { Auth, controller, get, inject, use } from \"turnover\";\nimport { authenticate, requireRole } from \"./auth\";\n\n@controller(\"/me\")\n@use(authenticate) // runs before every route in this controller\nexport class MeController {\n  private readonly auth = inject(Auth);\n\n  @get(\"/\")\n  whoami() {\n    return this.auth.user; // typed as your app's Principal\n  }\n\n  @get(\"/admin\")\n  @use(requireRole(\"admin\")) // stacks on top of the controller guard\n  adminOnly() {\n    return { secret: `Hello admin ${this.auth.user.name}` };\n  }\n}\n```\n\nRequest-scoped state lives in an `AsyncLocalStorage`, so `Auth` can be a plain\nsingleton whose getters read the *current* request's principal at call time —\ninjecting it into a singleton controller still yields per-request data.\n\n- `Auth.user` — the principal, or throws `401` if unauthenticated\n- `Auth.optional` — the principal or `null`\n- `Auth.isAuthenticated` — boolean\n- `requireAuth` — a ready-made guard that 401s when no principal is set\n\nA guard authenticates by calling `setPrincipal(...)`. Type your user by\naugmenting the framework's empty `Principal` interface (see\n[example/auth.ts](example/auth.ts)):\n\n```ts\ndeclare module \"turnover/auth\" {\n  interface Principal {\n    id: string;\n    name: string;\n    roles: string[];\n  }\n}\n\nexport const authenticate: Guard = (ctx) => {\n  const token = ctx.req.headers.get(\"authorization\")?.replace(/^Bearer\\s+/i, \"\");\n  const user = token ? USERS[token] : undefined;\n  if (!user) return new Response(\"Unauthorized\", { status: 401 });\n  setPrincipal(user); // now Auth.user resolves to this for the rest of the request\n};\n```\n\n### Deriving request context\n\n`@derive(...)` runs functions **before guards** to compute per-request values,\nwhich land on `ctx.store` (and are readable from injected singletons via\n`getRequestStore()`). Return an object to merge into the store, or write\n`ctx.store` directly; throw to abort. Type the store by augmenting `RequestStore`.\n\n```ts\nimport { controller, derive, get, use, type Context } from \"turnover\";\n\ndeclare module \"turnover/request\" {\n  interface RequestStore { tenant: string }\n}\n\n@controller(\"/orders\")\n@derive((ctx) => ({ tenant: ctx.req.headers.get(\"x-tenant\") ?? \"public\" }))\n@use(requireTenant) // guards run after derivers, so they can read ctx.store\nexport class OrdersController {\n  @get(\"/\")\n  list(ctx: Context) {\n    return { tenant: ctx.store.tenant };\n  }\n}\n```\n\nOrder per request: **derivers → guards → validation → resolvers → handler**.\nClass-level derivers run before method-level ones. `@resolve(...)` is like\n`@derive` but runs **after validation**, so it can read `ctx.valid` (e.g. load\nthe entity named by a now-validated `:id`).\n\n### Response control & cookies\n\nReturn a value and let it be coerced, or shape the response through `ctx.set` and\n`ctx.cookies` without constructing a `Response` by hand.\n\n```ts\n@controller(\"/session\")\nexport class SessionController {\n  @post(\"/login\")\n  login(ctx: Context) {\n    ctx.set.status = 201;                       // status for the coerced body\n    ctx.set.headers.set(\"cache-control\", \"no-store\");\n    ctx.cookies.set(\"session\", token, {         // queued as Set-Cookie\n      httpOnly: true, secure: true, sameSite: \"lax\", maxAge: 3600,\n    });\n    return { ok: true };\n  }\n\n  @get(\"/me\")\n  me(ctx: Context) {\n    const sid = ctx.cookies.get(\"session\");     // read an incoming cookie\n    return { sid };\n  }\n\n  @post(\"/logout\")\n  logout(ctx: Context) {\n    ctx.cookies.delete(\"session\");              // expire it\n    return null;                                 // 204, still carries Set-Cookie\n  }\n}\n```\n\n- `ctx.set.status` sets the status of a **coerced** return value (a returned\n  `Response` keeps its own status).\n- `ctx.set.headers` (a `Headers`) is merged onto the response — even a returned\n  `Response`, keeping that response's own headers.\n- `ctx.cookies` reads incoming cookies (`get` / `has` / `all`) and queues\n  outgoing ones (`set` / `delete`); values are URL-encoded. `set.headers` and\n  cookies apply to **every** response, including a guard's short-circuit.\n\n### Custom parsing & serialization\n\nBy default the body is parsed as JSON (or raw text) and return values are coerced\n(object → JSON, string → text, `Response` passthrough). Register **parsers** and\n**serializers** to change that.\n\n```ts\nconst csv: BodyParser = {\n  contentTypes: [\"text/csv\"],           // exact, `text/*`, or catch-all\n  parse: async (req) => (await req.text()).split(\",\"),\n};\nconst envelope: ResponseSerializer = {\n  // return a Response to handle, or undefined to defer to the next / the default\n  serialize: (value) =>\n    value && typeof value === \"object\" ? Response.json({ data: value }) : undefined,\n};\n\nconst app = await createApp({ controllers: [...], parsers: [csv], serializers: [envelope] });\n```\n\nParsers are chosen by the request's content type (`ctx.body()` uses them);\nserializers get first crack at a non-`Response` return value and can\ncontent-negotiate (via `ctx`), wrap, or stream (`ReadableStream`). Both can also\nbe added by a plugin.\n\n### Validation\n\nDeclare [Standard Schema](https://standardschema.dev)-compatible schemas\n(Zod, Valibot, ArkType, TypeBox with its adapter, …) on a route to validate its\n`body`, `query`, `params`, and `response`. turnover takes **no dependency** on any\nvalidator — it only speaks the Standard Schema interface.\n\n```ts\nimport { z } from \"zod\";\nimport { controller, post, type Context } from \"turnover\";\n\nconst CreateUser = z.object({ name: z.string(), age: z.coerce.number() });\n\n@controller(\"/users\")\nexport class UsersController {\n  @post(\"/\", { body: CreateUser })\n  create(ctx: Context) {\n    const user = ctx.valid.body as z.infer<typeof CreateUser>;\n    return { created: user }; // age has been coerced to a number\n  }\n}\n```\n\nValidated (and coerced) values land on `ctx.valid.body` / `ctx.valid.query` /\n`ctx.valid.params`. Because standard decorators can't flow the schema's type onto\nthe handler signature, cast `ctx.valid.*` to the schema's output type (or use\n`InferOutput<typeof Schema>`). `ctx.body()` still returns the *raw* body.\n\n- A failed input validation throws a **`422`** whose body pinpoints the failure:\n  `{ error: { code: \"validation_failed\", details: { location, issues } } }`.\n- A failed **`response`** validation is treated as a server bug — logged, returned\n  as an opaque `500`.\n- Validation runs **after guards** (so auth rejects before input is inspected).\n\n### Error handling\n\nThrow an `HttpError` (or a named subclass) from a handler or guard and the\nframework renders it as a JSON envelope with the right status. Anything that\nisn't an `HttpError` becomes an opaque `500` (its message is never leaked to the\nclient) and is logged.\n\n```ts\nimport { controller, get, NotFoundError, HttpError } from \"turnover\";\n\n@controller(\"/users\")\nexport class UsersController {\n  @get(\"/:id\")\n  getOne(ctx: Context<{ id: string }>) {\n    const user = this.users.get(ctx.params.id);\n    if (!user) throw new NotFoundError(`No user \"${ctx.params.id}\"`);\n    // → 404  { \"error\": { \"message\": \"No user \\\"…\\\"\" } }\n    return { user };\n  }\n}\n\n// custom status / code / details:\nthrow new HttpError(402, \"Trial expired\", { code: \"trial_expired\" });\n```\n\nNamed subclasses: `BadRequestError` (400), `UnauthorizedError` (401),\n`PaymentRequiredError` (402), `ForbiddenError` (403), `NotFoundError` (404),\n`ConflictError` (409), `GoneError` (410), `UnprocessableEntityError` (422),\n`TooManyRequestsError` (429), `InternalServerError` (500). Extend `HttpError` for\nyour own domain errors.\n\n**Custom error handlers** map thrown values to responses. An `ErrorHandler`\nreturns a `Response` to handle the error, or nothing to defer to the next handler\nin the chain — **route → controller → global → framework default**:\n\n```ts\nimport { catchError, createApp, type ErrorHandler } from \"turnover\";\n\nconst onError: ErrorHandler = (err) => {\n  if (err instanceof MyDomainError) return Response.json({ oops: err.message }, { status: 400 });\n  // return nothing → fall through to the default renderer\n};\n\n// global:\nconst app = await createApp({ controllers: [...], onError });\napp.onError(anotherHandler); // or register later\n\n// controller- or route-scoped:\n@controller(\"/orders\")\n@catchError(onError)\nclass OrdersController {\n  @get(\"/:id\") @catchError(routeSpecificHandler) getOne() { ... }\n}\n```\n\n### Interceptors (around advice)\n\n`@intercept(...)` wraps a handler — run code **before and after** in one place,\ntransform the response, short-circuit, or catch errors. An interceptor gets\n`ctx` and a `next()` that runs the rest of the chain and returns its `Response`.\n\n```ts\nconst timing: Interceptor = async (ctx, next) => {\n  const started = performance.now();\n  const res = await next();                    // run the handler\n  res.headers.set(\"x-response-time\", `${performance.now() - started}ms`);\n  return res;                                   // transformed response\n};\n\n@controller(\"/things\")\n@intercept(timing)                              // wraps every route\nclass ThingsController {\n  @get(\"/\") @intercept(cacheFor(60)) list() { ... } // stacks; controller is outer\n}\n```\n\nInterceptors nest: controller-level wraps method-level (and a module's wrap\nboth). They run **after guards**, around validation + the handler.\n\n### Lifecycle hooks\n\n- `onRequest(req)` runs **before routing** on every request (CORS, logging);\n  return a `Response` to short-circuit.\n- `onResponse(res, req)` runs after every response (including 404s and errors);\n  return a `Response` to replace it, or mutate its headers.\n- `onAfterResponse(res, req)` runs **fire-and-forget** after the response (never\n  delays it) — for metrics/logging. `onTrace(event)` reports each request's\n  `durationMs`.\n- `onStart(server)` runs once after `listen()`; `onStop()` runs on `app.stop()`\n  (which then closes the server).\n\nA **plugin** is just a bundle of these hooks (`{ onRequest?, onResponse?, ... }`);\nregister one with `app.register(plugin)` or `createApp({ plugins: [...] })`.\n\n```ts\nconst app = await createApp({\n  controllers: [...],\n  onRequest: [(req) => { /* ... */ }],\n  onStart: [(server) => console.log(`up on ${server.url}`)],\n  onStop: [() => db.close()],\n});\nconst server = app.listen(3000);\n// ... later: await app.stop();\n```\n\nFull per-request order: **onRequest → derivers → guards → interceptors (before)\n→ validation → resolvers → handler → interceptors (after) → onResponse → response\n→ onAfterResponse / onTrace**.\n\n**`wrap`.** To run code *around the whole request* — outermost, wrapping guards,\nthe handler, **and** error handling, and seeing the final `Response` — register\na wrapper via `createApp({ wrap })`, `app.wrap(...)`, or a plugin's `wrap`. Unlike\n`@intercept` (which wraps only the handler, after guards), `wrap` is the place to\nestablish per-request ambient context. It's what the OpenTelemetry plugin uses.\n\n### OpenTelemetry\n\n`otel()` (from the `turnover/otel` subpath) enables app-wide tracing in **one\nline** — convention over configuration:\n\n```ts\nimport { createApp } from \"turnover\";\nimport { otel } from \"turnover/otel\";\n\nconst app = await createApp({ plugins: [otel()] });\n```\n\nWith no options it opens a `SERVER` span per request named by the **matched\nroute** (`GET /users/:id`, not the raw URL), sets HTTP semantic-convention\nattributes, continues an incoming W3C `traceparent`, and records exceptions /\n5xx as errors. The span is the **active** context for the request, so anything\nnested attaches to it automatically. Tune it when you need to:\n\n```ts\notel({\n  ignore: (ctx) => ctx.route === \"/health\",          // skip noise\n  enrich: (span, ctx) => span.setAttribute(\"tenant\", ctx.store.tenant),\n  captureRequestHeaders: [\"x-request-id\"],\n});\n```\n\nAdd child spans with `@traced` (built on the method-AOP seam), which nest under\nthe server span. On a **method** it traces that method; on a **class** it traces\nevery public method — convention over configuration — with a per-method `@noTrace`\nopt-out, and options to shape the span:\n\n```ts\nimport { traced, noTrace } from \"turnover/otel\";\n\n@traced()                    // trace every public method of this service…\n@injectable()\nclass Orders {\n  async place(order: Order) { /* span \"Orders.place\" */ }\n\n  @noTrace                   // …except this one\n  private priceOf(order: Order) { /* not traced */ }\n}\n\n// Or trace a single method, configuring the span:\nclass Payments {\n  @traced({ kind: SpanKind.CLIENT, attributes: { \"peer.service\": \"stripe\" },\n            enrich: (span, jp) => span.setAttribute(\"charge.id\", String(jp.args[0])) })\n  async charge(id: string) { /* span \"Payments.charge\" */ }\n}\n```\n\nThe core package stays dependency-free: `turnover/otel` is a separate entry and\n`@opentelemetry/api` is an **optional peer dependency**. Bring your own\nOpenTelemetry SDK (exporter, resource, context manager) as usual — with none\nregistered, every call is a no-op (zero overhead).\n\n### CORS\n\n`cors(options)` is a built-in plugin: it answers preflight `OPTIONS` requests and\nadds CORS headers to responses (including errors).\n\n```ts\nimport { cors, createApp } from \"turnover\";\n\nconst app = await createApp({\n  controllers: [...],\n  plugins: [cors({ origin: \"https://app.example.com\", credentials: true })],\n});\n```\n\n`origin` accepts `true` (reflect the request origin — the default), a string\n(`\"*\"` or a fixed origin), an array/predicate (reflect only when it matches), or\n`false`. Also supports `methods`, `allowedHeaders`, `exposedHeaders`,\n`credentials`, and `maxAge`.\n\n### OpenAPI\n\n`app.openapi(options)` builds an OpenAPI 3.1 document from the mounted routes —\npaths (with `:param` → `{param}`), methods, path/query parameters, request\nbodies, and responses. Declare per-route metadata via the route decorator's\n`openapi` option.\n\n```ts\n@get(\"/:id\", {\n  params: IdSchema,\n  response: UserSchema,\n  openapi: { summary: \"Fetch a user\", tags: [\"users\"] },\n})\ngetOne(ctx: Context) { ... }\n```\n\nBecause Standard Schema doesn't mandate a JSON-Schema export, pass a\n`toJsonSchema` converter to include schema bodies (TypeBox schemas already *are*\nJSON Schema; Zod via `zod-to-json-schema`):\n\n```ts\nconst spec = app.openapi({\n  info: { title: \"My API\", version: \"1.0.0\" },\n  toJsonSchema: (s) => convertToJsonSchema(s),\n});\n// serve it however you like, e.g.:\napp.onRequest((req) =>\n  new URL(req.url).pathname === \"/openapi.json\" ? Response.json(spec) : undefined\n);\n```\n\nWithout `toJsonSchema`, the document still lists every path, method, and\nparameter (path params default to `string`).\n\n### Typed client\n\n`createClient<paths>(config)` is a minimal, dependency-free typed HTTP client\ndriven by an `openapi-typescript`-generated `paths` type — the codegen-based\nend-to-end type safety (Turnover can't infer client types through decorators).\n\n```ts\n// 1. dump the spec:  Bun.write(\"openapi.json\", JSON.stringify(app.openapi({ toJsonSchema })))\n// 2. generate types: bunx openapi-typescript openapi.json -o api.d.ts\nimport type { paths } from \"./api\";\nimport { createClient } from \"turnover\";\n\nconst api = createClient<paths>({ baseUrl: \"https://api.example.com\" });\n\nconst { data, error } = await api.get(\"/users/{id}\", { params: { path: { id: \"1\" } } });\n//      ^ typed as the route's response       ^ path/query/body are typed & checked\nawait api.post(\"/users\", { body: { name: \"Ada\" } });\n```\n\nOptions are required only when a route has path params or a body. Pass\n`fetch: app.handle` to drive an app in-memory (great for tests).\n\n### Macros\n\nA macro is a **named, parameterized, DI-resolvable bundle** of cross-cutting —\nguards, derivers, interceptors, error handlers — applied to a route or controller\nwith one decorator. Define it once, opt in with `@macro(name, ...args)`. The\nfactory runs in an injection context at mount time, so it can `inject()` services\nand close over them.\n\n```ts\nimport { defineMacro, macro, inject, Auth, controller, get } from \"turnover\";\n\ndefineMacro(\"role\", (required: string) => {\n  const auth = inject(Auth); // resolved at mount — the DI + cross-cutting fusion\n  return {\n    use: [() => auth.user.roles.includes(required)\n      ? undefined : new Response(\"Forbidden\", { status: 403 })],\n  };\n});\n\n@controller(\"/admin\")\nexport class AdminController {\n  @get(\"/users\") @macro(\"role\", \"admin\")  // one line replaces guard+derive+…\n  listUsers() { /* ... */ }\n}\n```\n\nA macro can contribute any of `use` / `derive` / `intercept` / `catchError`;\nclass- and method-level `@macro` both apply, and multiple compose.\n\n### Events\n\nAn in-process publish/subscribe bus for decoupling. Inject `Events`, `publish()`\nevent objects, and subscribe with `@onEvent(EventType)`. `publish` awaits every\nlistener (a failing one is logged, not propagated).\n\n```ts\nclass UserCreated { constructor(readonly id: string) {} }\n\n@injectable()\nclass Emailer {\n  @onEvent(UserCreated)\n  async welcome(e: UserCreated) { await sendEmail(e.id); }\n}\n\n@controller(\"/users\")\nclass UsersController {\n  private events = inject(Events);\n  @post(\"/\") async create(ctx: Context) {\n    const user = await save(await ctx.body());\n    await this.events.publish(new UserCreated(user.id)); // fan out\n    return user;\n  }\n}\n\n// list listener services so they subscribe at boot (if nothing else injects them)\nconst app = await createApp({ controllers: [UsersController], listeners: [Emailer] });\n```\n\n### Scheduled tasks\n\n`@scheduled({ interval })` runs a service method on a fixed interval while the app\nis listening (started by `listen()`, stopped by `stop()`). `runOnStart: true` also\nruns it once at startup. A failing run is logged, not propagated.\n\n```ts\n@injectable()\nclass Reminders {\n  @scheduled({ interval: 60_000, runOnStart: true })\n  async sweep() { /* runs every minute */ }\n}\n\n// list it so it's constructed at boot (unless something else injects it)\nconst app = await createApp({ controllers: [...], listeners: [Reminders] });\napp.listen(3000); // scheduled tasks now running\n```\n\nFor cron expressions, layer an external cron library over the same methods.\n\n### Modules\n\nGroup controllers into mountable, prefixed units with `@module`, and compose\nthem (including nesting) into an app. A module shares a `prefix` and its\ncross-cutting concerns — `use` (guards), `derive`, `catchError` — with every\ncontroller it mounts, and with any nested `modules`.\n\n```ts\nimport { module, createApp } from \"turnover\";\n\n@module({\n  prefix: \"/admin\",\n  use: [authenticate],                    // guards for every route below\n  derive: [(ctx) => ({ tenant: tenantOf(ctx) })],\n  controllers: [UsersController, RolesController],\n  modules: [BillingModule],               // nested; inherits /admin + the guard\n})\nclass AdminModule {}\n\nconst app = await createApp({ modules: [AdminModule] });\n// GET /admin/users, /admin/roles, /admin/billing/... — all behind `authenticate`\n```\n\nPrefixes compose across nesting (`/admin` + `/billing` + a controller's base).\nModules and explicit `controllers` can be combined in one `createApp`. Import\ncycles are broken automatically; a shared module may still be mounted under\nseveral parents.\n\n### In-memory requests & testing\n\n`app.handle(request)` runs a single `Request` through the whole pipeline (routing,\nguards, DI, response coercion) and returns a `Response` — **without opening a\nsocket**. `listen()` serves through the same method, so an in-memory call behaves\nexactly like a live request. That makes it ideal for tests and offline tooling:\n\n```ts\nconst app = await createApp({ controllers: [UsersController] });\n\nconst res = await app.handle(new Request(\"http://local/users/1\"));\nexpect(res.status).toBe(200);\nexpect(await res.json()).toEqual({ user: { id: \"1\", name: \"Ada\" } });\n```\n\n`listen(port)` returns Bun's [`Server`](https://bun.sh/docs/api/http) — use\n`.stop()`, `.port`, and `.url` on it directly, and pass `0` for an OS-assigned\nport (handy for parallel test servers):\n\n```ts\nconst server = app.listen(0);\nconst res = await fetch(`${server.url}users`);\nserver.stop();\n```\n\n### Runtime interop (WinterTC)\n\nThe request pipeline is a standard `(Request) => Promise<Response>` fetch handler\nbuilt on the [WinterTC Minimum Common API](https://min-common-api.proposal.wintertc.org/)\n(`Request`, `Response`, `Headers`, `URL`, …). `app.fetch` exposes it, so a\nTurnover app deploys unchanged on any compliant runtime — Cloudflare Workers,\nDeno Deploy, Vercel — via the standard default export:\n\n```ts\nconst app = await createApp({ controllers: [UsersController] });\nexport default app;                    // Workers/Deno look for `default.fetch`\n// or: export default { fetch: app.fetch };\n```\n\n> `app.listen()` uses `Bun.serve`; `app.fetch` is the runtime-agnostic entry.\n> Auto-discovery needs a filesystem, so on no-FS runtimes register controllers\n> explicitly (or bundle with `turnoverPlugin()`).\n\n**`app.delegate(path, handler)`** composes any other WinterTC-compliant handler\nat a path prefix — another Turnover app or a raw `(Request) => Response`. The\nprefix is stripped, so the sub-app sees paths relative to its mount point:\n\n```ts\n// any WinterTC handler: a raw (Request) => Response, or another app's `fetch`\nconst legacy = (req: Request) => Response.json({ ok: true });\n\napp.delegate(\"/legacy\", legacy);         // GET /legacy/... → the delegated handler\napp.delegate(\"/v2\", (await createApp({ controllers: [V2] })).fetch); // Turnover-in-Turnover\n```\n\nThe delegate owns its whole prefix (including its own 404s); the longest matching\nprefix wins. Configure at construction with `createApp({ delegate: { \"/legacy\": legacy.fetch } })`.\n\n## The example app\n\nA runnable demo lives in [example/](example/) — it is **not** part of the\npublished package. Start it (hot reload via `--watch`):\n\n```bash\nbun install\nbun run dev   # serves example/ on http://localhost:3000, auto-discovering its controllers\n```\n\nOn boot it prints the discovered route table; then hit it:\n\n```bash\n# create a user\ncurl -X POST localhost:3000/users -H 'content-type: application/json' \\\n  -d '{\"id\":\"1\",\"name\":\"Ada\"}'\n\n# list users\ncurl localhost:3000/users\n\n# authenticated route (see example/auth.ts for the toy token table)\ncurl localhost:3000/me -H 'authorization: Bearer alice-token'\n\n# admin-only route\ncurl localhost:3000/me/admin -H 'authorization: Bearer alice-token'\n```\n\n## Public API\n\nEverything is imported from the package root — `import { … } from \"turnover\"`.\nOpenTelemetry lives in the `turnover/otel` subpath (`otel`, `traced`), so the\ncore stays dependency-free. Build-time tooling lives in `turnover/bundler`\n(`turnoverPlugin`, `scanControllerFiles`). Two interfaces are augmented via subpaths: `Principal` from `turnover/auth` and\n`RequestStore` from `turnover/request`.\n\n| Export | Kind | Purpose |\n| ------ | ---- | ------- |\n| `createApp`, `App`, `CreateAppOptions` | bootstrap | Discover controllers, wire DI, build routes, `listen()` or `handle(req)`. |\n| `App.fetch`, `App.delegate`, `FetchHandler` | interop | WinterTC `(Request) => Response` entry (deploy anywhere) + compose other compliant apps at a prefix. |\n| `controller`, `get`, `post`, `put`, `patch`, `del` | decorators | Define a REST controller and its routes. |\n| `use`, `Guard` | middleware | Attach guards to a controller or route. |\n| `intercept`, `Interceptor` | around advice | Wrap a handler — before/after, transform, short-circuit, catch. |\n| `RequestHook`, `ResponseHook`, `StartHook`, `StopHook`, `Plugin` | lifecycle | `onRequest`/`onResponse` + `onStart`/`onStop` hooks; plugins bundle them. |\n| `cors`, `CorsOptions` | plugin | Built-in CORS (preflight + response headers). |\n| `App.openapi`, `OpenApiOptions`, `OpenApiDocument`, `RouteOptions` | openapi | Generate an OpenAPI 3.1 doc from the routes. |\n| `createClient`, `Client`, `ClientConfig`, `ClientResult` | typed client | Typed HTTP client from an `openapi-typescript` `paths` type. |\n| `HttpError` (+ subclasses), `catchError`, `ErrorHandler`, `toErrorResponse` | errors | HTTP error types + handlers mapping thrown values to responses. |\n| `StandardSchemaV1`, `RouteSchemas`, `InferOutput`, `validate` | validation | Validate `body`/`query`/`params`/`response` via Standard Schema. |\n| `Cookies`, `CookieOptions`, `ResponseState` | response | Shape the response via `ctx.set` (status/headers) and `ctx.cookies`. |\n| `BodyParser`, `ResponseSerializer` | codecs | Content-negotiated request parsing + response serialization. |\n| `injectable`, `inject`, `injectAll`, `Container`, `Scope` | DI | Register and resolve services. |\n| `InjectionToken`, `Token`, `Provider`, `ProviderDef` | DI providers | Bind tokens to values/classes/factories/aliases; interface + multi-inject. |\n| `postConstruct`, `preDestroy` | DI lifecycle | Per-service init (awaited at bootstrap) + teardown on `app.stop()`. |\n| `Config`, `value`, `requireValue`, `ConfigSource`, `profile` | config | Typed config/env reads + profile-gated mounting. |\n| `PostProcessor`, `Container.addPostProcessor` | AOP seam | Wrap/replace constructed instances (foundation for method advice). |\n| `before`, `after`, `around`, `JoinPoint`, `ProceedingJoinPoint` | method AOP | Advise any injectable service method. |\n| `addAround`, `decoratorMeta`, `classMeta`, `MetaBag` | extension | Programmatic advice + decorator-metadata access, to build your own AOP decorators & plugins (how `@traced`/`otel()` are built). |\n| `turnoverPlugin`, `scanControllerFiles` (from `turnover/bundler`) | build | Bundle auto-discovered controllers into a `bun build` (build-time scan). |\n| `transactional`, `TransactionManager`, `TRANSACTION_MANAGER` | transactions | Run a method in a pluggable unit-of-work. |\n| `cacheable`, `cacheEvict`, `CacheStore`, `CACHE_STORE`, `MemoryCache` | caching | Memoize method results in a pluggable store. |\n| `Auth`, `Principal`, `requireAuth` | auth | Request-scoped principal accessor + guard. |\n| `getRequestState`, `setPrincipal`, `RequestState` | request scope | Read/attach per-request state (backed by `AsyncLocalStorage`). |\n| `derive`, `resolve`, `Deriver`, `RequestStore`, `getRequestStore` | request context | Compute per-request values (`ctx.store`) before guards / after validation. |\n| `AfterResponseHook`, `TraceHook`, `TraceEvent` | lifecycle | `onAfterResponse` (fire-and-forget) + `onTrace` (per-request timing). |\n| `module`, `ModuleOptions` | composition | Group controllers under a prefix with shared cross-cutting; nestable. |\n| `defineMacro`, `macro`, `MacroHooks`, `MacroFactory` | macros | Named, parameterized, DI-resolvable cross-cutting bundles. |\n| `Events`, `onEvent`, `EventType` | events | In-process publish/subscribe for decoupling. |\n| `scheduled`, `Scheduler`, `ScheduledOptions` | scheduling | Run service methods on a fixed interval. |\n| `service`, `repository` | stereotypes | `@injectable` aliases for service/DAO components. |\n| `Context`, `Ctor`, `HttpMethod` | types | Handler context and shared type aliases. |\n\n## Project layout\n\nThe **framework is `src/`** — that (plus `dist/`) is all the package ships. The\ndemo lives in `example/`, which is never published.\n\n```\nsrc/                    # the framework (the published package)\n  index.ts              #   public API barrel — the \"turnover\" entry\n  app.ts                #   createApp, App, discovery, Response coercion\n  http.ts               #   @controller, route decorators, @use, Context\n  di.ts                 #   Container, inject(), @injectable, providers\n  auth.ts               #   Auth accessor, Principal (augment via turnover/auth)\n  request.ts            #   AsyncLocalStorage request scope, RequestStore\n  metadata.ts           #   Symbol.metadata polyfill + shared metadata keys\n  …                     #   aop, cache, config, cors, error, events, macro,\n                        #   module, openapi, scheduling, schema, transaction, client\nexample/                # runnable demo — NOT part of the package\n  index.ts              #   createApp().listen(3000)\n  users.controller.ts\n  me.controller.ts\n  greeting.service.ts\n  auth.ts               #   demo authenticate / requireRole guards\ntest/                   # the test suite (bun test)\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) and the house rules under\n[contributing/](contributing/): [coding](contributing/coding-best-practices.md),\n[testing](contributing/testing-best-practices.md),\n[linting](contributing/linting-best-practices.md), and\n[releasing](contributing/releasing.md).\n\n## Requirements\n\n- [Bun](https://bun.sh) (uses `Bun.serve`, `Bun.Glob`, `Bun.main`, `Bun.file`).\n- Standard TC39 decorators only — works under the default `tsconfig.json`; no\n  decorator-related compiler flags are enabled.","readmeFilename":"README.md"}